diff --git a/.gitignore b/.gitignore index e909ea7e27c97..b82b666cd1b7b 100644 --- a/.gitignore +++ b/.gitignore @@ -26,6 +26,7 @@ platform_tools/android/apps/build platform_tools/android/apps/*.properties platform_tools/android/apps/*/build platform_tools/android/apps/*/src/main/libs +platform_tools/android/apps/*/*/src/main/libs platform_tools/android/apps/*.hprof platform_tools/android/apps/*/.externalNativeBuild diff --git a/AUTHORS b/AUTHORS index bead702975ab5..6857c6e9b5008 100755 --- a/AUTHORS +++ b/AUTHORS @@ -50,6 +50,7 @@ Shachar Langbeheim Skia <*@skia.org> Skia Buildbots Sony Mobile Communications Inc. <*@sonymobile.com> +Stephan Hartmann Steve Singer Sylvestre Ledru The Chromium Authors <*@chromium.org> diff --git a/BUILD.gn b/BUILD.gn index 64759b3d184e0..a100586668f7f 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -200,7 +200,7 @@ opts("avx") { } else { cflags = [ "-mavx" ] if (is_mac && is_debug) { - cflags += [ "-O1" ] # Work around skia:9709 + cflags += [ "-fno-stack-check" ] # Work around skia:9709 } } } @@ -213,7 +213,20 @@ opts("hsw") { } else { cflags = [ "-march=haswell" ] if (is_mac && is_debug) { - cflags += [ "-O1" ] # Work around skia:9709 + cflags += [ "-fno-stack-check" ] # Work around skia:9709 + } + } +} + +opts("skx") { + enabled = is_x86 + sources = skia_opts.skx_sources + if (is_win) { + cflags = [ "/arch:AVX512" ] + } else { + cflags = [ "-march=skylake-avx512" ] + if (is_mac && is_debug) { + cflags += [ "-fno-stack-check" ] # Work around skia:9709 } } } @@ -253,6 +266,7 @@ template("optional") { forward_variables_from(invoker, "*", [ + "public", "public_defines", "public_deps", "deps", @@ -284,6 +298,15 @@ optional("android_utils") { ] } +group("fontmgr_factory") { + public_deps = [ skia_fontmgr_factory ] +} + +optional("fontmgr_empty_factory") { + enabled = true + sources = [ "src/ports/SkFontMgr_empty_factory.cpp" ] +} + optional("fontmgr_android") { enabled = skia_enable_fontmgr_android @@ -291,59 +314,115 @@ optional("fontmgr_android") { ":typeface_freetype", "//third_party/expat", ] + public = [ "include/ports/SkFontMgr_android.h" ] sources = [ "src/ports/SkFontMgr_android.cpp", - "src/ports/SkFontMgr_android_factory.cpp", "src/ports/SkFontMgr_android_parser.cpp", + "src/ports/SkFontMgr_android_parser.h", ] } +optional("fontmgr_android_factory") { + enabled = skia_enable_fontmgr_android + deps = [ ":fontmgr_android" ] + sources = [ "src/ports/SkFontMgr_android_factory.cpp" ] +} optional("fontmgr_custom") { - enabled = skia_enable_fontmgr_custom + enabled = + skia_enable_fontmgr_custom_directory || + skia_enable_fontmgr_custom_embedded || skia_enable_fontmgr_custom_empty deps = [ ":typeface_freetype" ] - sources = [ - "src/ports/SkFontMgr_custom.cpp", - "src/ports/SkFontMgr_custom.h", - "src/ports/SkFontMgr_custom_directory.cpp", - "src/ports/SkFontMgr_custom_directory_factory.cpp", - "src/ports/SkFontMgr_custom_embedded.cpp", - "src/ports/SkFontMgr_custom_empty.cpp", + public = [ "src/ports/SkFontMgr_custom.h" ] + sources = [ "src/ports/SkFontMgr_custom.cpp" ] +} + +optional("fontmgr_custom_directory") { + enabled = skia_enable_fontmgr_custom_directory + + deps = [ + ":fontmgr_custom", + ":typeface_freetype", + ] + public = [ "include/ports/SkFontMgr_directory.h" ] + sources = [ "src/ports/SkFontMgr_custom_directory.cpp" ] +} +optional("fontmgr_custom_directory_factory") { + enabled = skia_enable_fontmgr_custom_directory + deps = [ ":fontmgr_custom_directory" ] + sources = [ "src/ports/SkFontMgr_custom_directory_factory.cpp" ] +} + +optional("fontmgr_custom_embedded") { + enabled = skia_enable_fontmgr_custom_embedded + + deps = [ + ":fontmgr_custom", + ":typeface_freetype", ] + sources = [ "src/ports/SkFontMgr_custom_embedded.cpp" ] +} +optional("fontmgr_custom_embedded_factory") { + enabled = skia_enable_fontmgr_custom_embedded + deps = [ ":fontmgr_custom_embedded" ] + sources = [ "src/ports/SkFontMgr_custom_embedded_factory.cpp" ] } optional("fontmgr_custom_empty") { enabled = skia_enable_fontmgr_custom_empty - deps = [ ":typeface_freetype" ] - sources = [ - "src/ports/SkFontMgr_custom.cpp", - "src/ports/SkFontMgr_custom_empty.cpp", - "src/ports/SkFontMgr_custom_empty_factory.cpp", + deps = [ + ":fontmgr_custom", + ":typeface_freetype", ] + public = [ "include/ports/SkFontMgr_empty.h" ] + sources = [ "src/ports/SkFontMgr_custom_empty.cpp" ] } - -optional("fontmgr_empty") { - enabled = skia_enable_fontmgr_empty - sources = [ "src/ports/SkFontMgr_empty_factory.cpp" ] +optional("fontmgr_custom_empty_factory") { + enabled = skia_enable_fontmgr_custom_empty + deps = [ ":fontmgr_custom_empty" ] + sources = [ "src/ports/SkFontMgr_custom_empty_factory.cpp" ] } optional("fontmgr_fontconfig") { - enabled = skia_use_freetype && skia_use_fontconfig + enabled = skia_enable_fontmgr_fontconfig + + # The public header includes fontconfig.h and uses FcConfig* + public_deps = [ "//third_party:fontconfig" ] + public = [ "include/ports/SkFontMgr_fontconfig.h" ] + deps = [ ":typeface_freetype" ] + sources = [ "src/ports/SkFontMgr_fontconfig.cpp" ] +} +optional("fontmgr_fontconfig_factory") { + enabled = skia_enable_fontmgr_fontconfig + deps = [ ":fontmgr_fontconfig" ] + sources = [ "src/ports/SkFontMgr_fontconfig_factory.cpp" ] +} + +optional("fontmgr_FontConfigInterface") { + enabled = skia_enable_fontmgr_FontConfigInterface deps = [ ":typeface_freetype", "//third_party:fontconfig", ] + public = [ + "include/ports/SkFontConfigInterface.h", + "include/ports/SkFontMgr_FontConfigInterface.h", + ] sources = [ "src/ports/SkFontConfigInterface.cpp", "src/ports/SkFontConfigInterface_direct.cpp", "src/ports/SkFontConfigInterface_direct_factory.cpp", + "src/ports/SkFontConfigTypeface.h", "src/ports/SkFontMgr_FontConfigInterface.cpp", - "src/ports/SkFontMgr_fontconfig.cpp", - "src/ports/SkFontMgr_fontconfig_factory.cpp", ] } +optional("fontmgr_FontConfigInterface_factory") { + enabled = skia_enable_fontmgr_FontConfigInterface + deps = [ ":fontmgr_FontConfigInterface" ] + sources = [ "src/ports/SkFontMgr_FontConfigInterface_factory.cpp" ] +} optional("fontmgr_fuchsia") { enabled = skia_enable_fontmgr_fuchsia @@ -355,51 +434,71 @@ optional("fontmgr_fuchsia") { } else { deps = [ "//sdk/fidl/fuchsia.fonts" ] } + public = [ "src/ports/SkFontMgr_fuchsia.h" ] + sources = [ "src/ports/SkFontMgr_fuchsia.cpp" ] +} + +optional("fontmgr_mac_ct") { + enabled = skia_use_fonthost_mac + + public = [ + "include/ports/SkFontMgr_mac_ct.h", + "include/ports/SkTypeface_mac.h", + ] sources = [ - "src/ports/SkFontMgr_fuchsia.cpp", - "src/ports/SkFontMgr_fuchsia.h", + "src/ports/SkFontMgr_mac_ct.cpp", + "src/ports/SkScalerContext_mac_ct.cpp", + "src/ports/SkScalerContext_mac_ct.h", + "src/ports/SkTypeface_mac_ct.cpp", + "src/ports/SkTypeface_mac_ct.h", ] -} -optional("fontmgr_wasm") { - enabled = target_cpu == "wasm" - deps = [] + if (is_mac) { + libs = [ + # AppKit symbols NSFontWeightXXX may be dlsym'ed. + "AppKit.framework", + "ApplicationServices.framework", + ] + } - # custom_embedded has the source for both embedding a font in the binary - # (only used for the all-included build) and reading in a font from - # raw bytes passed over the wire (a typical way to load fonts). - if (!skia_enable_fontmgr_empty) { - deps += [ ":typeface_freetype" ] - sources = [ "src/ports/SkFontMgr_custom_embedded.cpp" ] - - # If we haven't opted for no fonts (empty) or fonts, but not the - # built-in one (custom), then, we need to provide the mechanism for - # using the built-in font. - if (!skia_enable_fontmgr_custom) { - sources += [ - "src/ports/SkFontMgr_custom.cpp", - "src/ports/SkFontMgr_custom.h", - "src/ports/SkFontMgr_custom_embedded_factory.cpp", - ] - } + if (is_ios) { + libs = [ + "CoreFoundation.framework", + "CoreGraphics.framework", + "CoreText.framework", + + # UIKit symbols UIFontWeightXXX may be dlsym'ed. + "UIKit.framework", + ] } } +optional("fontmgr_mac_ct_factory") { + enabled = skia_use_fonthost_mac + deps = [ ":fontmgr_mac_ct" ] + sources = [ "src/ports/SkFontMgr_mac_ct_factory.cpp" ] +} optional("fontmgr_win") { enabled = skia_enable_fontmgr_win + public = [ "include/ports/SkTypeface_win.h" ] sources = [ "src/fonts/SkFontMgr_indirect.cpp", "src/ports/SkFontMgr_win_dw.cpp", - "src/ports/SkFontMgr_win_dw_factory.cpp", "src/ports/SkScalerContext_win_dw.cpp", "src/ports/SkTypeface_win_dw.cpp", ] } +optional("fontmgr_win_factory") { + enabled = skia_enable_fontmgr_win + deps = [ ":fontmgr_win" ] + sources = [ "src/ports/SkFontMgr_win_dw_factory.cpp" ] +} optional("fontmgr_win_gdi") { enabled = skia_enable_fontmgr_win_gdi + public = [ "include/ports/SkTypeface_win.h" ] sources = [ "src/ports/SkFontHost_win.cpp" ] libs = [ "Gdi32.lib" ] } @@ -436,6 +535,7 @@ if (skia_lex) { args = [ rebase_path(sksllex_path), rebase_path("bin/clang-format"), + rebase_path("bin/fetch-clang-format"), rebase_path("src"), ] } @@ -502,6 +602,7 @@ if (skia_compile_processors) { args = [ rebase_path(skslc_path), rebase_path("bin/clang-format"), + rebase_path("bin/fetch-clang-format"), ] args += rebase_path(skia_gpu_processor_sources) } @@ -803,7 +904,31 @@ optional("webp_encode") { optional("wuffs") { enabled = skia_use_wuffs - public_defines = [ "SK_HAS_WUFFS_LIBRARY" ] + public_defines = [ + "SK_HAS_WUFFS_LIBRARY", + # SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 is temporary, used during a multiple step + # transition (perhaps a month or two in mid 2020), distributed across + # multiple repositories: + # + # 1. Let Skia work with either Wuffs v0.3 or v0.2. The default everywhere + # remains at v0.2, but users may now opt in to v0.3. + # 2a. Update users' Skia version (automatic if they update regularly). + # 2b. Update users to the latest Wuffs rev, which provides both versions. + # 3a. Have users opt in to v0.3. + # 3b. Update Skia's default configuration (and those who copy it) to v0.3. + # 4. Flip Skia-uses-Wuffs-v0.3 from opt-in to opt-out. + # 5. Remove the option for Skia to work wih Wuffs v0.2, which will remove + # this SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 macro as well as many #ifdef's + # in SkWuffsCodec.cpp. + # + # Steps 2a and 2b can occur concurrently. Similarly for 3a and 3b. + # + # "Users" means software that uses Skia+Wuffs, such as Chromium or Flutter. + # + # Uncommenting the next line (as well as changing "0.2" to "0.3" in + # "etc/wuffs-v0.2.c" in third_party/wuffs/BUILD.gn) is step 3b. + # "SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2", + ] deps = [ "//third_party/wuffs" ] sources = [ "src/codec/SkWuffsCodec.cpp" ] @@ -860,6 +985,16 @@ component("skia") { configs += skia_library_configs public_deps = [ + ":fontmgr_FontConfigInterface", + ":fontmgr_android", + ":fontmgr_custom_directory", + ":fontmgr_custom_embedded", + ":fontmgr_custom_empty", + ":fontmgr_fontconfig", + ":fontmgr_fuchsia", + ":fontmgr_mac_ct", + ":fontmgr_win", + ":fontmgr_win_gdi", ":gpu", ":pdf", ":skcms", @@ -873,15 +1008,7 @@ component("skia") { ":avx", ":compile_processors", ":crc32", - ":fontmgr_android", - ":fontmgr_custom", - ":fontmgr_custom_empty", - ":fontmgr_empty", - ":fontmgr_fontconfig", - ":fontmgr_fuchsia", - ":fontmgr_wasm", - ":fontmgr_win", - ":fontmgr_win_gdi", + ":fontmgr_factory", ":gif", ":heif", ":hsw", @@ -893,6 +1020,7 @@ component("skia") { ":raw", ":sksl_interpreter", ":skvm_jit", + ":skx", ":sse2", ":sse41", ":sse42", @@ -997,10 +1125,6 @@ component("skia") { } } - if (skia_use_fonthost_mac) { - sources += [ "src/ports/SkFontHost_mac.cpp" ] - } - if (is_mac) { sources += [ "src/ports/SkDebug_stdio.cpp", @@ -1008,8 +1132,6 @@ component("skia") { "src/ports/SkImageGeneratorCG.cpp", ] libs += [ - # AppKit symbols NSFontWeightXXX may be dlsym'ed. - "AppKit.framework", "ApplicationServices.framework", "OpenGL.framework", ] @@ -1018,19 +1140,13 @@ component("skia") { if (is_ios) { sources += [ "src/ports/SkDebug_stdio.cpp", - "src/ports/SkFontHost_mac.cpp", "src/ports/SkImageEncoder_CG.cpp", "src/ports/SkImageGeneratorCG.cpp", ] libs += [ "CoreFoundation.framework", - "CoreGraphics.framework", - "CoreText.framework", "ImageIO.framework", "MobileCoreServices.framework", - - # UIKit symbols UIFontWeightXXX may be dlsym'ed. - "UIKit.framework", ] } @@ -1061,8 +1177,6 @@ if (target_cpu == "wasm") { "tools/debugger/DrawCommand.cpp", "tools/debugger/JsonWriteBuffer.cpp", ] - - deps = [ ":fontmgr_wasm" ] } } @@ -1115,6 +1229,7 @@ static_library("pathkit") { "src/core/SkPathRef.cpp", "src/core/SkPoint.cpp", "src/core/SkRRect.cpp", + "src/core/SkReadBuffer.cpp", "src/core/SkRect.cpp", "src/core/SkSemaphore.cpp", "src/core/SkStream.cpp", @@ -1218,10 +1333,21 @@ if (skia_enable_tools) { include_dirs = [ "include/third_party/vulkan" ] } + config("cpp14") { + if (is_win) { + cflags_cc = [ "/std:c++14" ] + } else { + cflags_cc = [ "-std=c++14" ] + } + } + source_set("public_headers_warnings_check") { sources = [ "tools/public_headers_warnings_check.cpp" ] configs -= [ "//gn:warnings_except_public_headers" ] - configs += [ ":our_vulkan_headers" ] + configs += [ + ":our_vulkan_headers", + ":cpp14", + ] deps = [ ":skia", ":skia.h", @@ -1327,6 +1453,10 @@ if (skia_enable_tools) { deps = [] public_deps = [] sources = [ + "tools/gpu/BackendTextureImageFactory.cpp", + "tools/gpu/BackendTextureImageFactory.h", + "tools/gpu/FlushFinishTracker.cpp", + "tools/gpu/FlushFinishTracker.h", "tools/gpu/GrContextFactory.cpp", "tools/gpu/GrTest.cpp", "tools/gpu/MemoryCache.cpp", @@ -1382,8 +1512,14 @@ if (skia_enable_tools) { } if (skia_use_vulkan) { + sources += [ "tools/gpu/vk/VkTestContext.h" ] sources += [ "tools/gpu/vk/VkTestContext.cpp" ] + sources += [ "tools/gpu/vk/VkTestHelper.h" ] + sources += [ "tools/gpu/vk/VkTestHelper.cpp" ] + sources += [ "tools/gpu/vk/VkTestUtils.h" ] sources += [ "tools/gpu/vk/VkTestUtils.cpp" ] + sources += [ "tools/gpu/vk/VkYcbcrSamplerHelper.h" ] + sources += [ "tools/gpu/vk/VkYcbcrSamplerHelper.cpp" ] } if (skia_use_metal) { sources += [ "tools/gpu/mtl/MtlTestContext.mm" ] @@ -1558,7 +1694,7 @@ if (skia_enable_tools) { if (!skia_enable_fontmgr_android) { sources -= [ "//tests/FontMgrAndroidParserTest.cpp" ] } - if (!(skia_use_freetype && skia_use_fontconfig)) { + if (!skia_enable_fontmgr_fontconfig) { sources -= [ "//tests/FontMgrFontConfigTest.cpp" ] } deps = [ @@ -1567,6 +1703,7 @@ if (skia_enable_tools) { ":skia", ":skvm_builders", ":tool_utils", + "experimental/skrive:tests", "modules/skottie:tests", "modules/skparagraph:tests", "modules/sksg:tests", @@ -1772,6 +1909,7 @@ if (skia_enable_tools) { ":tests", ":tool_utils", ":trace", + "experimental/skrive", "modules/skottie", "modules/skottie:utils", ] @@ -2068,10 +2206,7 @@ if (skia_enable_tools) { test_app("skottie_android") { is_shared_library = true - sources = [ - "platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.cpp", - "platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp", - ] + sources = [ "platform_tools/android/apps/skottie/skottielib/src/main/cpp/native-lib.cpp" ] libs = [] deps = [ @@ -2106,24 +2241,36 @@ if (skia_enable_tools) { ":skia", ] sources = [ + "tools/sk_app/Application.h", "tools/sk_app/CommandSet.cpp", + "tools/sk_app/CommandSet.h", + "tools/sk_app/DisplayParams.h", + "tools/sk_app/RasterWindowContext.h", "tools/sk_app/Window.cpp", + "tools/sk_app/Window.h", + "tools/sk_app/WindowContext.h", ] libs = [] if (is_android) { sources += [ "tools/sk_app/android/RasterWindowContext_android.cpp", + "tools/sk_app/android/WindowContextFactory_android.h", "tools/sk_app/android/Window_android.cpp", + "tools/sk_app/android/Window_android.h", "tools/sk_app/android/main_android.cpp", "tools/sk_app/android/surface_glue_android.cpp", + "tools/sk_app/android/surface_glue_android.h", ] libs += [ "android" ] } else if (is_linux) { sources += [ "tools/sk_app/unix/RasterWindowContext_unix.cpp", + "tools/sk_app/unix/WindowContextFactory_unix.h", "tools/sk_app/unix/Window_unix.cpp", + "tools/sk_app/unix/Window_unix.h", "tools/sk_app/unix/keysym2ucs.c", + "tools/sk_app/unix/keysym2ucs.h", "tools/sk_app/unix/main_unix.cpp", ] libs += [ @@ -2133,12 +2280,16 @@ if (skia_enable_tools) { } else if (is_win) { sources += [ "tools/sk_app/win/RasterWindowContext_win.cpp", + "tools/sk_app/win/WindowContextFactory_win.h", "tools/sk_app/win/Window_win.cpp", + "tools/sk_app/win/Window_win.h", "tools/sk_app/win/main_win.cpp", ] } else if (is_mac) { sources += [ "tools/sk_app/mac/RasterWindowContext_mac.mm", + "tools/sk_app/mac/WindowContextFactory_mac.h", + "tools/sk_app/mac/Window_mac.h", "tools/sk_app/mac/Window_mac.mm", "tools/sk_app/mac/main_mac.mm", ] @@ -2150,6 +2301,8 @@ if (skia_enable_tools) { } else if (is_ios) { sources += [ "tools/sk_app/ios/RasterWindowContext_ios.mm", + "tools/sk_app/ios/WindowContextFactory_ios.h", + "tools/sk_app/ios/Window_ios.h", "tools/sk_app/ios/Window_ios.mm", "tools/sk_app/ios/main_ios.mm", ] @@ -2158,6 +2311,7 @@ if (skia_enable_tools) { if (skia_use_gl) { sources += [ "tools/sk_app/GLWindowContext.cpp" ] + sources += [ "tools/sk_app/GLWindowContext.h" ] if (is_android) { sources += [ "tools/sk_app/android/GLWindowContext_android.cpp" ] } else if (is_linux) { @@ -2176,6 +2330,7 @@ if (skia_enable_tools) { if (skia_use_vulkan) { sources += [ "tools/sk_app/VulkanWindowContext.cpp" ] + sources += [ "tools/sk_app/VulkanWindowContext.h" ] if (is_android) { sources += [ "tools/sk_app/android/VulkanWindowContext_android.cpp" ] } else if (is_linux) { @@ -2188,6 +2343,7 @@ if (skia_enable_tools) { if (skia_use_metal) { sources += [ "tools/sk_app/MetalWindowContext.mm" ] + sources += [ "tools/sk_app/MetalWindowContext.h" ] if (is_mac) { sources += [ "tools/sk_app/mac/MetalWindowContext_mac.mm" ] } else if (is_ios) { @@ -2201,6 +2357,7 @@ if (skia_enable_tools) { if (skia_use_dawn) { sources += [ "tools/sk_app/DawnWindowContext.cpp" ] + sources += [ "tools/sk_app/DawnWindowContext.h" ] if (is_linux) { if (dawn_enable_vulkan) { sources += [ "tools/sk_app/unix/DawnVulkanWindowContext_unix.cpp" ] @@ -2262,6 +2419,7 @@ if (skia_enable_tools) { "tools/viewer/ParticlesSlide.cpp", "tools/viewer/SKPSlide.cpp", "tools/viewer/SampleSlide.cpp", + "tools/viewer/SkRiveSlide.cpp", "tools/viewer/SkSLSlide.cpp", "tools/viewer/SkottieSlide.cpp", "tools/viewer/SlideDir.cpp", @@ -2284,6 +2442,7 @@ if (skia_enable_tools) { ":skia", ":tool_utils", ":trace", + "experimental/skrive", "modules/particles", "modules/skottie", "modules/skottie:utils", @@ -2294,6 +2453,15 @@ if (skia_enable_tools) { deps += [ ":experimental_xform" ] sources += [ "gm/xform.cpp" ] } + if (skia_use_vulkan) { + deps += [ + "//third_party/spirv-tools:spvtools", + + #spvtools depends on this but doesn't deps it in. Looks like upstream bug + #that we replicated in our third_party/spirv-tools/BUILD.gn + "//third_party/spirv-tools:spvtools_val", + ] + } } } diff --git a/DEPS b/DEPS index 6c58ff82f9437..f02fbd7532ace 100644 --- a/DEPS +++ b/DEPS @@ -7,21 +7,21 @@ vars = { deps = { "buildtools" : "https://chromium.googlesource.com/chromium/buildtools.git@505de88083136eefd056e5ee4ca0f01fe9b33de8", "common" : "https://skia.googlesource.com/common.git@9737551d7a52c3db3262db5856e6bcd62c462b92", - "third_party/externals/angle2" : "https://chromium.googlesource.com/angle/angle.git@989c790d4b8b050e5628ec023cbbc56ed63364aa", + "third_party/externals/angle2" : "https://chromium.googlesource.com/angle/angle.git@8b80e852bd6c2325ba7a00c89b259972c17ee219", # Dawn requires jinja2 and markupsafe for the code generator, and glslang and shaderc for SPIRV compilation. # When the Dawn revision is updated these should be updated from the Dawn DEPS as well. - "third_party/externals/dawn" : "https://dawn.googlesource.com/dawn.git@783cd5a79c8ada83622c327ec054f6cc990c2825", - "third_party/externals/glslang" : "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang@d39b8afc47a1f700b5670463c0d1068878acee6f", + "third_party/externals/dawn" : "https://dawn.googlesource.com/dawn.git@92554d75f354813257b65a54b7f835f949f5e03b", + "third_party/externals/glslang" : "https://chromium.googlesource.com/external/github.com/KhronosGroup/glslang@839704450200e407490c538418f4d1a493b789ab", "third_party/externals/jinja2" : "https://chromium.googlesource.com/chromium/src/third_party/jinja2@b41863e42637544c2941b574c7877d3e1f663e25", "third_party/externals/markupsafe" : "https://chromium.googlesource.com/chromium/src/third_party/markupsafe@8f45f5cfa0009d2a70589bcda0349b8cb2b72783", - "third_party/externals/shaderc" : "https://chromium.googlesource.com/external/github.com/google/shaderc@da87b8d8b0a1d474655098faea7ffe544764e69e", + "third_party/externals/shaderc" : "https://chromium.googlesource.com/external/github.com/google/shaderc@f4025c1cd5c2146595d2c04d85de1f1b296431e7", "third_party/externals/dng_sdk" : "https://android.googlesource.com/platform/external/dng_sdk.git@c8d0c9b1d16bfda56f15165d39e0ffa360a11123", "third_party/externals/egl-registry" : "https://skia.googlesource.com/external/github.com/KhronosGroup/EGL-Registry@a0bca08de07c7d7651047bedc0b653cfaaa4f2ae", "third_party/externals/expat" : "https://chromium.googlesource.com/external/github.com/libexpat/libexpat.git@e976867fb57a0cd87e3b0fe05d59e0ed63c6febb", "third_party/externals/freetype" : "https://skia.googlesource.com/third_party/freetype2.git@0a3d2bb99b45b72e1d45185ab054efa993d97210", "third_party/externals/harfbuzz" : "https://chromium.googlesource.com/external/github.com/harfbuzz/harfbuzz.git@3a74ee528255cc027d84b204a87b5c25e47bff79", "third_party/externals/icu" : "https://chromium.googlesource.com/chromium/deps/icu.git@dbd3825b31041d782c5b504c59dcfb5ac7dda08c", - "third_party/externals/imgui" : "https://skia.googlesource.com/external/github.com/ocornut/imgui.git@d38d7c6628bebd02692cfdd6fa76b4d992a35b75", + "third_party/externals/imgui" : "https://skia.googlesource.com/external/github.com/ocornut/imgui.git@9418dcb69355558f70de260483424412c5ca2fce", "third_party/externals/libgifcodec" : "https://skia.googlesource.com/libgifcodec@d06d2a6d42baf6c0c91cacc28df2542a911d05fe", "third_party/externals/libjpeg-turbo" : "https://skia.googlesource.com/external/github.com/libjpeg-turbo/libjpeg-turbo.git@574f3a772c96dc9db2c98ef24706feb3f6dbda9a", "third_party/externals/libpng" : "https://skia.googlesource.com/third_party/libpng.git@386707c6d19b974ca2e3db7f5c61873813c6fe44", @@ -34,16 +34,16 @@ deps = { "third_party/externals/piex" : "https://android.googlesource.com/platform/external/piex.git@bb217acdca1cc0c16b704669dd6f91a1b509c406", "third_party/externals/sdl" : "https://skia.googlesource.com/third_party/sdl@5d7cfcca344034aff9327f77fc181ae3754e7a90", "third_party/externals/sfntly" : "https://chromium.googlesource.com/external/github.com/googlei18n/sfntly.git@b55ff303ea2f9e26702b514cf6a3196a2e3e2974", - "third_party/externals/spirv-cross" : "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross@d385bf096f5dabbc4cdaeb6872b0f64be1a63ad0", + "third_party/externals/spirv-cross" : "https://chromium.googlesource.com/external/github.com/KhronosGroup/SPIRV-Cross@d573a95a9c65cf0ab76c0c206e3b01fa47235836", "third_party/externals/spirv-headers" : "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Headers.git@c0df742ec0b8178ad58c68cff3437ad4b6a06e26", "third_party/externals/spirv-tools" : "https://skia.googlesource.com/external/github.com/KhronosGroup/SPIRV-Tools.git@e95fbfb1f509ad7a7fdfb72ac35fe412d72fc4a4", - "third_party/externals/swiftshader" : "https://swiftshader.googlesource.com/SwiftShader@0711869b5f2097416c67811384fedbca3c025a00", + "third_party/externals/swiftshader" : "https://swiftshader.googlesource.com/SwiftShader@f6f11215cd930f4609bc8714178ef0a4ec3ca26e", #"third_party/externals/v8" : "https://chromium.googlesource.com/v8/v8.git@5f1ae66d5634e43563b2d25ea652dfb94c31a3b4", - "third_party/externals/wuffs" : "https://skia.googlesource.com/external/github.com/google/wuffs.git@4080840928c0b05a80cda0d14ac2e2615f679f1a", - "third_party/externals/zlib" : "https://chromium.googlesource.com/chromium/src/third_party/zlib@47af7c547f8551bd25424e56354a2ae1e9062859", + "third_party/externals/wuffs" : "https://skia.googlesource.com/external/github.com/google/wuffs.git@00cc8a50aa0c86b6bcb37e9ece8fb100047cc17b", + "third_party/externals/zlib" : "https://chromium.googlesource.com/chromium/src/third_party/zlib@eaf99a4e2009b0e5759e6070ad1760ac1dd75461", "../src": { - "url": "https://chromium.googlesource.com/chromium/src.git@2f74454086a50ba7731b4e0fd8d63e653f5a1251", + "url": "https://chromium.googlesource.com/chromium/src.git@e6974b0e45b1597813beba2d75709f09fb129b35", "condition": "checkout_chromium", }, } diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt index 92713b6a559f0..0f6433bb46bc3 100644 --- a/RELEASE_NOTES.txt +++ b/RELEASE_NOTES.txt @@ -4,13 +4,44 @@ This file includes a list of high level updates for each milestone release. * * * +Milestone 86 +------------ + + * Remove obsolete GrFlushFlags. + https://review.skia.org/298818 + + * Adds default flush() calls to SkSurface, SkImage, and GrContext. These calls do + a basic flush without a submit. If you haven't updated Skia in a couple releases + and still have flush() calls in your code that you expect to do a flush and + submit, you should update all those to the previously added flushAndSubmit() calls + instead. + https://review.skia.org/299141 + + * Enable BackendSemaphores for the Direct3D backend. + https://review.skia.org/298752 + + * Added SkImage:asyncRescaleAndReadPixels and SkImage::asyncRescaleAndReadPixelsYUV420 + https://review.skia.org/299281 + +* * * + Milestone 85 ------------ - * - + * Added GrContext::oomed() which reports whether Skia has seen a GL_OUT_OF_MEMORY + error from Open GL [ES] or VK_ERROR_OUT_OF_*_MEMORY from Vulkan. + https://review.skia.org/298216 + + * Add option on SkSurface::flush to pass in a GrBackendSurfaceMutableState which + we will set the gpu backend surface to be at the end of the flush. + https://review.skia.org/295567 + + * Add GrContext function to set mutable state on a backend surface. Currently this + is only used for setting vulkan VkImage layout and queue family. + https://review.skia.org/293844 + * SkSurface factores that take GrBackendTexture or GrBackendRenderTarget now always - call the release proc (if provided) on failure. SkSurface::replaceBackendTexture + call the release proc (if provided) on failure. SkSurface::replaceBackendTexture also calls the release proc on failure. https://review.skia.org/293762 diff --git a/bench/BulkRectBench.cpp b/bench/BulkRectBench.cpp index 1e81df8d60016..53132047eb234 100644 --- a/bench/BulkRectBench.cpp +++ b/bench/BulkRectBench.cpp @@ -226,6 +226,15 @@ class BulkRectBench : public Benchmark { } } + void onPerCanvasPostDraw(SkCanvas* canvas) override { + for (int i = 0; i < kImageCount; ++i) { + // For Vulkan we need to make sure the bench isn't holding onto any refs to the + // GrContext when we go to delete the vulkan context (which happens before the bench is + // deleted). So reset all the images here so they aren't holding GrContext refs. + fImages[i].reset(); + } + } + void onDraw(int loops, SkCanvas* canvas) override { for (int i = 0; i < loops; i++) { if (kImageMode == ImageMode::kNone) { diff --git a/bench/ClipMaskBench.cpp b/bench/ClipMaskBench.cpp index bb0f1ad0d71cd..d9c192795b5de 100644 --- a/bench/ClipMaskBench.cpp +++ b/bench/ClipMaskBench.cpp @@ -14,61 +14,6 @@ #include "include/core/SkSurface.h" #include "tools/ToolUtils.h" -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK -static void DrawMask(SkCanvas* canvas) { - ToolUtils::draw_checkerboard(canvas, SK_ColorTRANSPARENT, SK_ColorGREEN, 10); -} - -class ClipMaskBench : public Benchmark { -public: - using MaskMakerFunc = sk_sp (*)(int); - - ClipMaskBench(const char name[], const MaskMakerFunc maskMaker) - : fName(SkStringPrintf("clipmask_%s", name)) - , fClip(maskMaker(kSize)) {} - -protected: - const char* onGetName() override { return fName.c_str(); } - - void onDraw(int loops, SkCanvas* canvas) override { - SkCanvas::SaveLayerRec rec(nullptr, nullptr, nullptr, fClip.get(), nullptr, 0); - - for (int i = 0; i < loops; ++i) { - canvas->saveLayer(rec); - canvas->drawColor(SK_ColorBLUE); - canvas->restore(); - } - } - -private: - static constexpr int kSize = 400; - - SkString fName; - sk_sp fClip; -}; - -DEF_BENCH(return new ClipMaskBench("a8", [](int size) -> sk_sp { - sk_sp surface = SkSurface::MakeRaster(SkImageInfo::MakeA8(size, size)); - DrawMask(surface->getCanvas()); - return surface->makeImageSnapshot(); -});) - -DEF_BENCH(return new ClipMaskBench("8888", [](int size) -> sk_sp { - sk_sp surface = SkSurface::MakeRasterN32Premul(size, size); - DrawMask(surface->getCanvas()); - return surface->makeImageSnapshot(); -});) - -DEF_BENCH(return new ClipMaskBench("picture", [](int size) -> sk_sp { - SkPictureRecorder recorder; - DrawMask(recorder.beginRecording(size, size)); - return SkImage::MakeFromPicture(recorder.finishRecordingAsPicture(), SkISize::Make(size, size), - nullptr, nullptr, SkImage::BitDepth::kU8, - SkColorSpace::MakeSRGB()); -});) -#endif - -///////// #include "include/core/SkPath.h" #include "include/core/SkSurface.h" diff --git a/bench/CoverageBench.cpp b/bench/CoverageBench.cpp index 9d5411ed8ecda..c94fa506d0130 100644 --- a/bench/CoverageBench.cpp +++ b/bench/CoverageBench.cpp @@ -13,6 +13,7 @@ #include "include/core/SkPath.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkDraw.h" +#include "src/core/SkMatrixProvider.h" #include "src/core/SkRasterClip.h" class DrawPathBench : public Benchmark { diff --git a/bench/CreateBackendTextureBench.cpp b/bench/CreateBackendTextureBench.cpp index 9d3c451415055..6873d04a0317d 100644 --- a/bench/CreateBackendTextureBench.cpp +++ b/bench/CreateBackendTextureBench.cpp @@ -41,9 +41,7 @@ class CreateBackendTextureBench : public Benchmark { void onPerCanvasPostDraw(SkCanvas* canvas) override { GrContext* context = canvas->getGrContext(); - GrFlushInfo info; - info.fFlags = kSyncCpu_GrFlushFlag; - context->flush(info); + context->flush(); context->submit(true); for (int i = 0; i < fBackendTextures.count(); ++i) { diff --git a/bench/DDLRecorderBench.cpp b/bench/DDLRecorderBench.cpp index 835a9b5f0145e..0f0bf216d7ec5 100644 --- a/bench/DDLRecorderBench.cpp +++ b/bench/DDLRecorderBench.cpp @@ -81,7 +81,7 @@ class DDLRecorderBench : public Benchmark { } std::unique_ptr fRecorder = nullptr; - std::vector> fDDLs; + std::vector> fDDLs; typedef Benchmark INHERITED; }; diff --git a/bench/GMBench.cpp b/bench/GMBench.cpp index 1e15c321f70e6..d9cd1cbe51759 100644 --- a/bench/GMBench.cpp +++ b/bench/GMBench.cpp @@ -7,7 +7,12 @@ #include "bench/GMBench.h" +#include "include/gpu/GrRecordingContext.h" +#include "src/gpu/GrRecordingContextPriv.h" + GMBench::GMBench(std::unique_ptr gm) : fGM(std::move(gm)) { + fGM->setMode(skiagm::GM::kBench_Mode); + fName.printf("GM_%s", fGM->getName()); } @@ -19,13 +24,32 @@ bool GMBench::isSuitableFor(Backend backend) { return kNonRendering_Backend != backend; } +void GMBench::onPerCanvasPreDraw(SkCanvas* canvas) { + auto direct = canvas->recordingContext() ? canvas->recordingContext()->asDirectContext() + : nullptr; + + if (fGM->gpuSetup(direct, canvas) != skiagm::DrawResult::kOk) { + fGpuSetupFailed = true; + } + + fGM->onceBeforeDraw(); +} + +void GMBench::onPerCanvasPostDraw(SkCanvas*) { + fGM->gpuTeardown(); + + // The same GM will be reused with multiple GrContexts. Let the next GrContext start + // afresh. + fGpuSetupFailed = false; +} + void GMBench::onDraw(int loops, SkCanvas* canvas) { - fGM->setMode(skiagm::GM::kBench_Mode); - // Do we care about timing the draw of the background (once)? - // Does the GM ever rely on drawBackground to lazily compute something? + if (fGpuSetupFailed) { + return; + } + fGM->drawBackground(canvas); for (int i = 0; i < loops; ++i) { - SkAutoCanvasRestore acr(canvas, true); fGM->drawContent(canvas); } } diff --git a/bench/GMBench.h b/bench/GMBench.h index 89065c4189e74..1c0219b79c883 100644 --- a/bench/GMBench.h +++ b/bench/GMBench.h @@ -25,12 +25,16 @@ class GMBench : public Benchmark { protected: const char* onGetName() override; bool isSuitableFor(Backend backend) override; - void onDraw(int loops, SkCanvas* canvas) override; + void onPerCanvasPreDraw(SkCanvas*) override; + void onPerCanvasPostDraw(SkCanvas*) override; + void onDraw(int loops, SkCanvas*) override; SkIPoint onGetSize() override; private: std::unique_ptr fGM; - SkString fName; + SkString fName; + bool fGpuSetupFailed = false; + typedef Benchmark INHERITED; }; diff --git a/bench/PathOpsBench.cpp b/bench/PathOpsBench.cpp index c7df558bce1b7..b683ad17be796 100644 --- a/bench/PathOpsBench.cpp +++ b/bench/PathOpsBench.cpp @@ -78,8 +78,6 @@ class PathOpsSimplifyBench : public Benchmark { private: typedef Benchmark INHERITED; }; - - DEF_BENCH( return new PathOpsBench("sect", kIntersect_SkPathOp); ) DEF_BENCH( return new PathOpsBench("join", kUnion_SkPathOp); ) @@ -94,5 +92,131 @@ static SkPath makerects() { } return path; } - DEF_BENCH( return new PathOpsSimplifyBench("rects", makerects()); ) + +#include "include/core/SkPathBuilder.h" + +template struct ArrayPath { + SkPoint fPts[N]; + uint8_t fVbs[N]; + int fPIndex = 0, fVIndex = 0; + + void moveTo(float x, float y) { + fVbs[fVIndex++] = (uint8_t)SkPathVerb::kMove; + fPts[fPIndex++] = {x, y}; + } + void lineTo(float x, float y) { + fVbs[fVIndex++] = (uint8_t)SkPathVerb::kLine; + fPts[fPIndex++] = {x, y}; + } + void quadTo(float x, float y, float x1, float y1) { + fVbs[fVIndex++] = (uint8_t)SkPathVerb::kQuad; + fPts[fPIndex++] = {x, y}; + fPts[fPIndex++] = {x1, y1}; + } + void cubicTo(float x, float y, float x1, float y1, float x2, float y2) { + fVbs[fVIndex++] = (uint8_t)SkPathVerb::kCubic; + fPts[fPIndex++] = {x, y}; + fPts[fPIndex++] = {x1, y1}; + fPts[fPIndex++] = {x2, y2}; + } + void incReserve(int) {} +}; + +template void run_builder(T& b, bool useReserve, int N) { + if (useReserve) { + b.incReserve(N * 12); + } + + float x = 0, y = 0; + b.moveTo(x, y); + for (int i = 1; i < N; ++i) { + b.lineTo(x, y); + b.quadTo(x, y, x, y); + b.cubicTo(x, y, x, y, x, y); + } +} + +enum class MakeType { + kPath, + kSnapshot, + kDetach, + kArray, +}; + +class PathBuilderBench : public Benchmark { + SkString fName; + MakeType fMakeType; + bool fUseReserve; + + enum { N = 100 }; + ArrayPath fArrays; + +public: + PathBuilderBench(MakeType mt, bool reserve) : fMakeType(mt), fUseReserve(reserve) { + const char* typenames[] = { "path", "snapshot", "detach", "arrays" }; + + fName.printf("makepath_%s_%s", typenames[(int)mt], reserve ? "reserve" : "noreserve"); + } + + bool isSuitableFor(Backend backend) override { + return backend == kNonRendering_Backend; + } + +protected: + const char* onGetName() override { + return fName.c_str(); + } + + void onDelayedSetup() override { + run_builder(fArrays, false, N); + } + + SkPath build() { + switch (fMakeType) { + case MakeType::kSnapshot: + case MakeType::kDetach: { + SkPathBuilder b; + run_builder(b, fUseReserve, N); + return MakeType::kSnapshot == fMakeType ? b.snapshot() : b.detach(); + } + case MakeType::kPath: { + SkPath p; + run_builder(p, fUseReserve, N); + return p; + } + case MakeType::kArray: { + // ArrayPath arrays; + // run_builder(arrays, false, N); + return SkPath::Make(fArrays.fPts, fArrays.fPIndex, + fArrays.fVbs, fArrays.fVIndex, + nullptr, 0, SkPathFillType::kWinding); + } + } + return SkPath(); + } + + void onDraw(int loops, SkCanvas* canvas) override { + for (int i = 0; i < loops; i++) { + for (int j = 0; j < 100; ++j) { + SkPath result = this->build(); + // force bounds calc as part of the test + if (!result.getBounds().isFinite()) { + SkDebugf("should never get here!\n"); + return; + } + } + } + } + +private: + typedef Benchmark INHERITED; +}; +DEF_BENCH( return new PathBuilderBench(MakeType::kPath, false); ) +DEF_BENCH( return new PathBuilderBench(MakeType::kSnapshot, false); ) +DEF_BENCH( return new PathBuilderBench(MakeType::kDetach, false); ) +DEF_BENCH( return new PathBuilderBench(MakeType::kPath, true); ) +DEF_BENCH( return new PathBuilderBench(MakeType::kSnapshot, true); ) +DEF_BENCH( return new PathBuilderBench(MakeType::kDetach, true); ) + +DEF_BENCH( return new PathBuilderBench(MakeType::kArray, true); ) diff --git a/bench/TessellatePathBench.cpp b/bench/TessellatePathBench.cpp index d22fe2b00ea2e..7788d9b292395 100644 --- a/bench/TessellatePathBench.cpp +++ b/bench/TessellatePathBench.cpp @@ -37,7 +37,7 @@ class BenchmarkTarget : public GrMeshDrawOp::Target { BenchmarkTarget() { GrMockOptions mockOptions; mockOptions.fDrawInstancedSupport = true; - mockOptions.fTessellationSupport = true; + mockOptions.fMaxTessellationSegments = 64; mockOptions.fMapBufferFlags = GrCaps::kCanMap_MapFlag; mockOptions.fConfigOptions[(int)GrColorType::kAlpha_8].fRenderability = GrMockOptions::ConfigOptions::Renderability::kMSAA; @@ -61,9 +61,8 @@ class BenchmarkTarget : public GrMeshDrawOp::Target { void* makeVertexSpace(size_t vertexSize, int vertexCount, sk_sp*, int* startVertex) override { if (vertexSize * vertexCount > sizeof(fStaticVertexData)) { - SK_ABORT(SkStringPrintf( - "FATAL: wanted %zu bytes of static vertex data; only have %zu.\n", - vertexSize * vertexCount, SK_ARRAY_COUNT(fStaticVertexData)).c_str()); + SK_ABORT("FATAL: wanted %zu bytes of static vertex data; only have %zu.\n", + vertexSize * vertexCount, SK_ARRAY_COUNT(fStaticVertexData)); } *startVertex = 0; return fStaticVertexData; @@ -73,9 +72,8 @@ class BenchmarkTarget : public GrMeshDrawOp::Target { int drawCount, sk_sp* buffer, size_t* offsetInBytes) override { int staticBufferCount = (int)SK_ARRAY_COUNT(fStaticDrawIndexedIndirectData); if (drawCount > staticBufferCount) { - SK_ABORT(SkStringPrintf( - "FATAL: wanted %i static drawIndexedIndirect elements; only have %i.\n", - drawCount, staticBufferCount).c_str()); + SK_ABORT("FATAL: wanted %i static drawIndexedIndirect elements; only have %i.\n", + drawCount, staticBufferCount); } return fStaticDrawIndexedIndirectData; } @@ -110,7 +108,7 @@ class BenchmarkTarget : public GrMeshDrawOp::Target { class GrTessellatePathOp::TestingOnly_Benchmark : public Benchmark { public: TestingOnly_Benchmark(const char* subName, SkPath path, const SkMatrix& m) - : fOp(m, path, GrPaint(), GrAAType::kMSAA) { + : fOp(m, path, GrPaint(), GrAAType::kMSAA, GrTessellationPathRenderer::OpFlags::kNone) { fName.printf("tessellate_%s", subName); } diff --git a/bench/VertexColorSpaceBench.cpp b/bench/VertexColorSpaceBench.cpp index 3693eb9c7fac0..369f8ad32bcbb 100644 --- a/bench/VertexColorSpaceBench.cpp +++ b/bench/VertexColorSpaceBench.cpp @@ -80,8 +80,7 @@ class GP : public GrGeometryProcessor { fragBuilder->codeAppendf("%s = half4(1);", args.fOutputCoverage); } void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& primProc, - const CoordTransformRange&) override { + const GrPrimitiveProcessor& primProc) override { const GP& gp = primProc.cast(); fColorSpaceHelper.setData(pdman, gp.fColorSpaceXform.get()); } diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp index b734b8a44ae79..1e21065cb5f81 100644 --- a/bench/nanobench.cpp +++ b/bench/nanobench.cpp @@ -68,6 +68,7 @@ extern bool gSkVMJITViaDylib; #endif +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/SkGr.h" @@ -215,6 +216,13 @@ struct GPUTarget : public Target { ContextInfo contextInfo; std::unique_ptr factory; + ~GPUTarget() override { + // For Vulkan we need to release all our refs to the GrContext before destroy the vulkan + // context which happens at the end of this destructor. Thus we need to release the surface + // here which holds a ref to the GrContext. + surface.reset(); + } + void setup() override { this->contextInfo.testContext()->makeCurrent(); // Make sure we're done with whatever came before. @@ -222,7 +230,7 @@ struct GPUTarget : public Target { } void endTiming() override { if (this->contextInfo.testContext()) { - this->contextInfo.testContext()->flushAndWaitOnSync(contextInfo.grContext()); + this->contextInfo.testContext()->flushAndWaitOnSync(contextInfo.directContext()); } } void fence() override { this->contextInfo.testContext()->finish(); } @@ -260,7 +268,7 @@ struct GPUTarget : public Target { const GrGLubyte* version; if (this->contextInfo.backend() == GrBackendApi::kOpenGL) { const GrGLInterface* gl = - static_cast(this->contextInfo.grContext()->priv().getGpu()) + static_cast(this->contextInfo.directContext()->priv().getGpu()) ->glInterface(); GR_GL_CALL_RET(gl, version, GetString(GR_GL_VERSION)); log.appendString("GL_VERSION", (const char*)(version)); @@ -278,9 +286,11 @@ struct GPUTarget : public Target { } void dumpStats() override { - this->contextInfo.grContext()->priv().printCacheStats(); - this->contextInfo.grContext()->priv().printGpuStats(); - this->contextInfo.grContext()->priv().printContextStats(); + auto context = this->contextInfo.directContext(); + + context->priv().printCacheStats(); + context->priv().printGpuStats(); + context->priv().printContextStats(); } }; diff --git a/bin/fetch-gn b/bin/fetch-gn index ee150e209d81f..d0c791d1c398b 100755 --- a/bin/fetch-gn +++ b/bin/fetch-gn @@ -24,7 +24,7 @@ with open(gnzip, 'wb') as f: pkg = 'linux-amd64' if 'linux' in sys.platform else \ 'mac-amd64' if 'darwin' in sys.platform else \ 'windows-amd64' - rev = '82d673acb802cee21534c796a59f8cdf26500f53' + rev = '9e993e3da82a9f4bc5c50c190afbcffd61e3d9e0' url = 'https://chrome-infra-packages.appspot.com/dl/gn/gn/{}/+/git_revision:{}'.format(pkg,rev) f.write(urlopen(url).read()) diff --git a/bin/try.py b/bin/try.py index ccf9c2f09637a..889b58c675fe4 100755 --- a/bin/try.py +++ b/bin/try.py @@ -16,6 +16,7 @@ import subprocess import sys import tempfile +import urllib2 BUCKET_SKIA_PRIMARY = 'skia/skia.primary' @@ -75,6 +76,31 @@ def main(): help='Job name or regular expression to match job names.') args = parser.parse_args() + # First, find the Gerrit issue number. If the change was uploaded using Depot + # Tools, this configuration will be present in the git config. + branch = subprocess.check_output(['git', 'branch', '--show-current']).rstrip() + if not branch: + print 'Not on any branch; cannot trigger try jobs.' + sys.exit(1) + branch_issue_config = 'branch.%s.gerritissue' % branch + try: + issue = subprocess.check_output([ + 'git', 'config', '--local', branch_issue_config]) + except subprocess.CalledProcessError: + # Not using Depot Tools. Find the Change-Id line in the most recent commit + # and obtain the issue number using that. + print '"git cl issue" not set; searching for Change-Id footer.' + msg = subprocess.check_output(['git', 'log', '-n1', branch]) + m = re.search('Change-Id: (I[a-f0-9]+)', msg) + if not m: + print ('No gerrit issue found in `git config --local %s` and no Change-Id' + ' found in most recent commit message.') + sys.exit(1) + url = 'https://skia-review.googlesource.com/changes/%s' % m.groups()[0] + resp = urllib2.urlopen(url).read() + issue = str(json.loads('\n'.join(resp.splitlines()[1:]))['_number']) + print 'Setting "git cl issue %s"' % issue + subprocess.check_call(['git', 'cl', 'issue', issue]) # Load and filter the list of jobs. jobs = [] tasks_json = os.path.join(find_repo_root(), TASKS_JSON) diff --git a/build/fuchsia/sdk.gni b/build/fuchsia/sdk.gni index 31d9f66114a19..d8f6131fe7542 100644 --- a/build/fuchsia/sdk.gni +++ b/build/fuchsia/sdk.gni @@ -74,7 +74,7 @@ template("_fuchsia_fidl_library") { _deps = [ "../pkg:fidl_cpp" ] - library_name = string_replace(meta_json.name, "fuchsia.", "") + library_name = meta_json.name library_name_json = "$library_name.json" foreach(dep, meta_json.deps) { @@ -95,9 +95,9 @@ template("_fuchsia_fidl_library") { inputs = [ invoker.meta ] outputs = [ - "$target_gen_dir/fuchsia/$library_name_slashes/c/tables.c", - "$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl.h", - "$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl.cc", + "$target_gen_dir/$library_name_slashes/c/tables.c", + "$target_gen_dir/$library_name_slashes/cpp/fidl.h", + "$target_gen_dir/$library_name_slashes/cpp/fidl.cc", ] args = [ @@ -114,9 +114,11 @@ template("_fuchsia_fidl_library") { "--include-base", rebase_path("$target_gen_dir"), "--output-base-cc", - rebase_path("$target_gen_dir/fuchsia/$library_name_slashes/cpp/fidl"), + rebase_path("$target_gen_dir/$library_name_slashes/cpp/fidl"), "--output-c-tables", - rebase_path("$target_gen_dir/fuchsia/$library_name_slashes/c/tables.c"), + rebase_path("$target_gen_dir/$library_name_slashes/c/tables.c"), + "--output-c-header", + rebase_path("$target_gen_dir/$library_name_slashes/c/fidl.h"), ] } diff --git a/demos.skia.org/Makefile b/demos.skia.org/Makefile new file mode 100644 index 0000000000000..d3242d61e1a4a --- /dev/null +++ b/demos.skia.org/Makefile @@ -0,0 +1,4 @@ +.PHONY: local +local: + echo "Go check out http://localhost:8123/demos/hello_world/index.html" + python2 -m SimpleHTTPServer 8123 diff --git a/demos.skia.org/demos/hello_world/index.html b/demos.skia.org/demos/hello_world/index.html new file mode 100644 index 0000000000000..4db88822578d9 --- /dev/null +++ b/demos.skia.org/demos/hello_world/index.html @@ -0,0 +1,42 @@ + +Hello World Demo + + + + + + + + +

Hello world

+ + + + + diff --git a/dm/DM.cpp b/dm/DM.cpp index 828f55b8f7b76..40848e96faf6c 100644 --- a/dm/DM.cpp +++ b/dm/DM.cpp @@ -60,7 +60,8 @@ extern bool gSkForceRasterPipelineBlitter; extern bool gUseSkVMBlitter; -static DEFINE_string(src, "tests gm skp mskp lottie svg image colorImage", "Source types to test."); +static DEFINE_string(src, "tests gm skp mskp lottie rive svg image colorImage", + "Source types to test."); static DEFINE_bool(nameByHash, false, "If true, write to FLAGS_writePath[0]/.png instead of " "to FLAGS_writePath[0]////.png"); @@ -138,6 +139,7 @@ static DEFINE_bool2(verbose, v, false, "enable verbose output from the test driv static DEFINE_string(skps, "skps", "Directory to read skps from."); static DEFINE_string(lotties, "lotties", "Directory to read (Bodymovin) jsons from."); +static DEFINE_string(rives, "rives", "Directory to read Rive/Flare files from."); static DEFINE_string(svgs, "", "Directory to read SVGs from, or a single SVG file."); static DEFINE_int_2(threads, j, -1, @@ -154,7 +156,6 @@ static DEFINE_bool(rasterize_pdf, false, "Rasterize PDFs when possible."); static DEFINE_bool(runVerifiers, false, "if true, run SkQP-style verification of GM-produced images."); - #if defined(__MSVC_RUNTIME_CHECKS) #include int RuntimeCheckErrorFunc(int errorType, const char* filename, int linenumber, @@ -206,13 +207,13 @@ static void info(const char* fmt) { } } -static SkTArray gFailures; +static SkTArray* gFailures = new SkTArray; static void fail(const SkString& err) { static SkSpinlock mutex; SkAutoSpinlock lock(mutex); SkDebugf("\n\nFAILURE: %s\n\n", err.c_str()); - gFailures.push_back(err); + gFailures->push_back(err); } struct Running { @@ -231,19 +232,19 @@ static void dump_json() { } // We use a spinlock to make locking this in a signal handler _somewhat_ safe. -static SkSpinlock gMutex; -static int gPending; -static SkTArray gRunning; +static SkSpinlock* gMutex = new SkSpinlock; +static int gPending; +static SkTArray* gRunning = new SkTArray; static void done(const char* config, const char* src, const char* srcOptions, const char* name) { SkString id = SkStringPrintf("%s %s %s %s", config, src, srcOptions, name); vlog("done %s\n", id.c_str()); int pending; { - SkAutoSpinlock lock(gMutex); - for (int i = 0; i < gRunning.count(); i++) { - if (gRunning[i].id == id) { - gRunning.removeShuffle(i); + SkAutoSpinlock lock(*gMutex); + for (int i = 0; i < gRunning->count(); i++) { + if (gRunning->at(i).id == id) { + gRunning->removeShuffle(i); break; } } @@ -258,10 +259,10 @@ static void done(const char* config, const char* src, const char* srcOptions, co int curr = sk_tools::getCurrResidentSetSizeMB(), peak = sk_tools::getMaxResidentSetSizeMB(); - SkAutoSpinlock lock(gMutex); + SkAutoSpinlock lock(*gMutex); info("\n%dMB RAM, %dMB peak, %d queued, %d active:\n", - curr, peak, gPending - gRunning.count(), gRunning.count()); - for (auto& task : gRunning) { + curr, peak, gPending - gRunning->count(), gRunning->count()); + for (auto& task : *gRunning) { task.dump(); } } @@ -270,14 +271,14 @@ static void done(const char* config, const char* src, const char* srcOptions, co static void start(const char* config, const char* src, const char* srcOptions, const char* name) { SkString id = SkStringPrintf("%s %s %s %s", config, src, srcOptions, name); vlog("start %s\n", id.c_str()); - SkAutoSpinlock lock(gMutex); - gRunning.push_back({id,SkGetThreadID()}); + SkAutoSpinlock lock(*gMutex); + gRunning->push_back({id,SkGetThreadID()}); } static void find_culprit() { // Assumes gMutex is locked. SkThreadID thisThread = SkGetThreadID(); - for (auto& task : gRunning) { + for (auto& task : *gRunning) { if (task.thread == thisThread) { info("Likely culprit:\n"); task.dump(); @@ -300,7 +301,7 @@ static void find_culprit() { #undef _ }; - SkAutoSpinlock lock(gMutex); + SkAutoSpinlock lock(*gMutex); const DWORD code = e->ExceptionRecord->ExceptionCode; info("\nCaught exception %u", code); @@ -310,7 +311,7 @@ static void find_culprit() { } } info(", was running:\n"); - for (auto& task : gRunning) { + for (auto& task : *gRunning) { task.dump(); } find_culprit(); @@ -339,13 +340,13 @@ static void find_culprit() { static void (*previous_handler[max_of(SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGSEGV,SIGTERM)+1])(int); static void crash_handler(int sig) { - SkAutoSpinlock lock(gMutex); + SkAutoSpinlock lock(*gMutex); info("\nCaught signal %d [%s] (%dMB RAM, peak %dMB), was running:\n", sig, strsignal(sig), sk_tools::getCurrResidentSetSizeMB(), sk_tools::getMaxResidentSetSizeMB()); - for (auto& task : gRunning) { + for (auto& task : *gRunning) { task.dump(); } find_culprit(); @@ -398,10 +399,10 @@ struct Gold : public SkString { } }; }; -static SkTHashSet gGold; +static SkTHashSet* gGold = new SkTHashSet; static void add_gold(JsonWriter::BitmapResult r) { - gGold.add(Gold(r.config, r.sourceType, r.sourceOptions, r.name, r.md5)); + gGold->add(Gold(r.config, r.sourceType, r.sourceOptions, r.name, r.md5)); } static void gather_gold() { @@ -417,12 +418,12 @@ static void gather_gold() { /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #if defined(SK_BUILD_FOR_WIN) - static const char* kNewline = "\r\n"; + static constexpr char kNewline[] = "\r\n"; #else - static const char* kNewline = "\n"; + static constexpr char kNewline[] = "\n"; #endif -static SkTHashSet gUninterestingHashes; +static SkTHashSet* gUninterestingHashes = new SkTHashSet; static void gather_uninteresting_hashes() { if (!FLAGS_uninterestingHashesFile.isEmpty()) { @@ -439,10 +440,10 @@ static void gather_uninteresting_hashes() { SkTArray hashes; SkStrSplit(contents.c_str(), kNewline, &hashes); for (const SkString& hash : hashes) { - gUninterestingHashes.add(hash); + gUninterestingHashes->add(hash); } info("FYI: loaded %d distinct uninteresting hashes from %d lines\n", - gUninterestingHashes.count(), hashes.count()); + gUninterestingHashes->count(), hashes.count()); } } @@ -457,10 +458,10 @@ struct TaggedSink : public std::unique_ptr { SkString tag; }; -static const bool kMemcpyOK = true; +static constexpr bool kMemcpyOK = true; -static SkTArray gSrcs; -static SkTArray gSinks; +static SkTArray* gSrcs = new SkTArray; +static SkTArray* gSinks = new SkTArray; static bool in_shard() { static int N = 0; @@ -471,7 +472,7 @@ static void push_src(const char* tag, ImplicitString options, Src* s) { std::unique_ptr src(s); if (in_shard() && FLAGS_src.contains(tag) && !CommandLineFlags::ShouldSkip(FLAGS_match, src->name().c_str())) { - TaggedSrc& s = gSrcs.push_back(); + TaggedSrc& s = gSrcs->push_back(); s.reset(src.release()); s.tag = tag; s.options = options; @@ -870,6 +871,9 @@ static bool gather_srcs() { #if defined(SK_ENABLE_SKOTTIE) gather_file_srcs(FLAGS_lotties, "json", "lottie"); #endif +#if defined(SK_ENABLE_SKRIVE) + gather_file_srcs(FLAGS_rives, "flr", "rive"); +#endif #if defined(SK_XML) gather_file_srcs(FLAGS_svgs, "svg"); #endif @@ -906,7 +910,7 @@ static void push_sink(const SkCommandLineConfig& config, Sink* s) { // Try a simple Src as a canary. If it fails, skip this sink. struct : public Src { - Result draw(SkCanvas* c) const override { + Result draw(GrDirectContext*, SkCanvas* c) const override { c->drawRect(SkRect::MakeWH(1,1), SkPaint()); return Result::Ok(); } @@ -923,7 +927,7 @@ static void push_sink(const SkCommandLineConfig& config, Sink* s) { exit(1); } - TaggedSink& ts = gSinks.push_back(); + TaggedSink& ts = gSinks->push_back(); ts.reset(sink.release()); ts.tag = config.getTag(); } @@ -950,6 +954,8 @@ static Sink* create_sink(const GrContextOptions& grCtxOptions, const SkCommandLi return new GPUPrecompileTestingSink(gpuConfig, grCtxOptions); } else if (gpuConfig->getUseDDLSink()) { return new GPUDDLSink(gpuConfig, grCtxOptions); + } else if (gpuConfig->getOOPRish()) { + return new GPUOOPRSink(gpuConfig, grCtxOptions); } else { return new GPUSink(gpuConfig, grCtxOptions); } @@ -1071,7 +1077,7 @@ static bool gather_sinks(const GrContextOptions& grCtxOptions, bool defaultConfi // If we're using the default configs, we're okay. defaultConfigs || // Otherwise, make sure that all specified configs have become sinks. - configs.count() == gSinks.count()) { + configs.count() == gSinks->count()) { return true; } return false; @@ -1102,7 +1108,7 @@ static bool is_blacklisted(const char* sink, const char* src, // Even when a Task Sink reports to be non-threadsafe (e.g. GPU), we know things like // .png encoding are definitely thread safe. This lets us offload that work to CPU threads. -static SkTaskGroup gDefinitelyThreadSafeWork; +static SkTaskGroup* gDefinitelyThreadSafeWork = new SkTaskGroup; // The finest-grained unit of work we can run: draw a single Src into a single Sink, // report any errors, and perhaps write out the output: a .png of the bitmap, or a raw stream. @@ -1150,7 +1156,7 @@ struct Task { // We're likely switching threads here, so we must capture by value, [=] or [foo,bar]. SkStreamAsset* data = stream.detachAsStream().release(); - gDefinitelyThreadSafeWork.add([task,name,bitmap,data]{ + gDefinitelyThreadSafeWork->add([task,name,bitmap,data]{ std::unique_ptr ownedData(data); std::unique_ptr hashAndEncode; @@ -1172,8 +1178,8 @@ struct Task { } if (!FLAGS_readPath.isEmpty() && - !gGold.contains(Gold(task.sink.tag, task.src.tag, - task.src.options, name, md5))) { + !gGold->contains(Gold(task.sink.tag, task.src.tag, + task.src.options, name, md5))) { fail(SkStringPrintf("%s not found for %s %s %s %s in %s", md5.c_str(), task.sink.tag.c_str(), @@ -1208,21 +1214,18 @@ struct Task { h = (int)CGRectGetHeight(bounds); SkBitmap rasterized; - rasterized.allocPixels( - SkImageInfo::Make(w,h, kRGBA_8888_SkColorType, kPremul_SkAlphaType)); + rasterized.allocPixels(SkImageInfo::Make( + w, h, kRGBA_8888_SkColorType, kPremul_SkAlphaType)); rasterized.eraseColor(SK_ColorWHITE); - SkUniqueCFRef cs{ - CGColorSpaceCreateDeviceRGB()}; - CGBitmapInfo info = kCGBitmapByteOrder32Big - | kCGImageAlphaPremultipliedLast; + SkUniqueCFRef cs{CGColorSpaceCreateDeviceRGB()}; + CGBitmapInfo info = kCGBitmapByteOrder32Big | + (CGBitmapInfo)kCGImageAlphaPremultipliedLast; - SkUniqueCFRef ctx{ - CGBitmapContextCreate(rasterized.getPixels(), - w,h,8,rasterized.rowBytes(), cs.get(),info)}; + SkUniqueCFRef ctx{CGBitmapContextCreate( + rasterized.getPixels(), w,h,8, rasterized.rowBytes(), cs.get(), info)}; CGContextDrawPDFPage(ctx.get(), page); - // Skip calling hashAndEncode->write(SkMD5*)... we want the .pdf's hash. hashAndEncode.reset(new HashAndEncode(rasterized)); WriteToDisk(task, md5, "png", nullptr,0, &rasterized, hashAndEncode.get()); @@ -1350,7 +1353,7 @@ struct Task { // If an MD5 is uninteresting, we want it noted in the JSON file, // but don't want to dump it out as a .png (or whatever ext is). - if (gUninterestingHashes.contains(md5)) { + if (gUninterestingHashes->contains(md5)) { return; } @@ -1427,7 +1430,8 @@ struct Task { // Unit tests don't fit so well into the Src/Sink model, so we give them special treatment. -static SkTDArray gParallelTests, gSerialTests; +static SkTDArray* gParallelTests = new SkTDArray; +static SkTDArray* gSerialTests = new SkTDArray; static void gather_tests() { if (!FLAGS_src.contains("tests")) { @@ -1441,9 +1445,9 @@ static void gather_tests() { continue; } if (test.needsGpu && FLAGS_gpu) { - gSerialTests.push_back(test); + gSerialTests->push_back(test); } else if (!test.needsGpu && FLAGS_cpu) { - gParallelTests.push_back(test); + gParallelTests->push_back(test); } } } @@ -1525,7 +1529,7 @@ int main(int argc, char** argv) { // TODO(dogben): This is a bit ugly. Find a cleaner way to do this. bool defaultConfigs = true; for (int i = 0; i < argc; i++) { - static const char* kConfigArg = "--config"; + static constexpr char kConfigArg[] = "--config"; if (strcmp(argv[i], kConfigArg) == 0) { defaultConfigs = false; break; @@ -1535,42 +1539,44 @@ int main(int argc, char** argv) { return 1; } gather_tests(); - gPending = gSrcs.count() * gSinks.count() + gParallelTests.count() + gSerialTests.count(); + gPending = gSrcs->count() * gSinks->count() + gParallelTests->count() + gSerialTests->count(); info("%d srcs * %d sinks + %d tests == %d tasks\n", - gSrcs.count(), gSinks.count(), gParallelTests.count() + gSerialTests.count(), gPending); + gSrcs->count(), gSinks->count(), gParallelTests->count() + gSerialTests->count(), + gPending); // Kick off as much parallel work as we can, making note of any serial work we'll need to do. SkTaskGroup parallel; SkTArray serial; - for (auto& sink : gSinks) - for (auto& src : gSrcs) { - if (src->veto(sink->flags()) || - is_blacklisted(sink.tag.c_str(), src.tag.c_str(), - src.options.c_str(), src->name().c_str())) { - SkAutoSpinlock lock(gMutex); - gPending--; - continue; - } + for (TaggedSink& sink : *gSinks) { + for (TaggedSrc& src : *gSrcs) { + if (src->veto(sink->flags()) || + is_blacklisted(sink.tag.c_str(), src.tag.c_str(), + src.options.c_str(), src->name().c_str())) { + SkAutoSpinlock lock(*gMutex); + gPending--; + continue; + } - Task task(src, sink); - if (src->serial() || sink->serial()) { - serial.push_back(task); - } else { - parallel.add([task] { Task::Run(task); }); + Task task(src, sink); + if (src->serial() || sink->serial()) { + serial.push_back(task); + } else { + parallel.add([task] { Task::Run(task); }); + } } } - for (auto test : gParallelTests) { + for (skiatest::Test& test : *gParallelTests) { parallel.add([test, grCtxOptions] { run_test(test, grCtxOptions); }); } // With the parallel work running, run serial tasks and tests here on main thread. - for (auto task : serial) { Task::Run(task); } - for (auto test : gSerialTests) { run_test(test, grCtxOptions); } + for (Task& task : serial) { Task::Run(task); } + for (skiatest::Test& test : *gSerialTests) { run_test(test, grCtxOptions); } // Wait for any remaining parallel work to complete (including any spun off of serial tasks). parallel.wait(); - gDefinitelyThreadSafeWork.wait(); + gDefinitelyThreadSafeWork->wait(); // At this point we're back in single-threaded land. @@ -1579,12 +1585,12 @@ int main(int argc, char** argv) { // Make sure we've flushed all our results to disk. dump_json(); - if (gFailures.count() > 0) { + if (!gFailures->empty()) { info("Failures:\n"); - for (int i = 0; i < gFailures.count(); i++) { - info("\t%s\n", gFailures[i].c_str()); + for (const SkString& fail : *gFailures) { + info("\t%s\n", fail.c_str()); } - info("%d failures\n", gFailures.count()); + info("%d failures\n", gFailures->count()); return 1; } diff --git a/dm/DMGpuTestProcs.cpp b/dm/DMGpuTestProcs.cpp index 64b1aa1c35e70..6c3eb4cfab924 100644 --- a/dm/DMGpuTestProcs.cpp +++ b/dm/DMGpuTestProcs.cpp @@ -7,6 +7,8 @@ #include "tests/Test.h" +#include "include/gpu/GrDirectContext.h" + using sk_gpu_test::GrContextFactory; using sk_gpu_test::GLTestContext; using sk_gpu_test::ContextInfo; @@ -22,6 +24,9 @@ bool IsVulkanContextType(sk_gpu_test::GrContextFactory::ContextType type) { bool IsMetalContextType(sk_gpu_test::GrContextFactory::ContextType type) { return GrBackendApi::kMetal == GrContextFactory::ContextTypeBackend(type); } +bool IsDirect3DContextType(sk_gpu_test::GrContextFactory::ContextType type) { + return GrBackendApi::kDirect3D == GrContextFactory::ContextTypeBackend(type); +} bool IsRenderingGLContextType(sk_gpu_test::GrContextFactory::ContextType type) { return IsGLContextType(type) && GrContextFactory::IsRenderingContext(type); } @@ -62,12 +67,12 @@ void RunWithGPUTestContexts(GrContextTestFn* test, GrContextTypeFilterFn* contex } ReporterContext ctx(reporter, SkString(GrContextFactory::ContextTypeName(contextType))); - if (ctxInfo.grContext()) { + if (ctxInfo.directContext()) { (*test)(reporter, ctxInfo); // In case the test changed the current context make sure we move it back before // calling flush. ctxInfo.testContext()->makeCurrent(); - ctxInfo.grContext()->flushAndSubmit(); + ctxInfo.directContext()->flushAndSubmit(); } } } diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp index 3630a5cf1bdf0..405c895ca16ec 100644 --- a/dm/DMSrcSink.cpp +++ b/dm/DMSrcSink.cpp @@ -22,6 +22,7 @@ #include "include/core/SkSurfaceCharacterization.h" #include "include/docs/SkPDFDocument.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "include/ports/SkImageGeneratorCG.h" #include "include/ports/SkImageGeneratorWIC.h" #include "include/private/SkImageInfoPriv.h" @@ -63,6 +64,10 @@ #include "modules/skresources/include/SkResources.h" #endif +#if defined(SK_ENABLE_SKRIVE) + #include "experimental/skrive/include/SkRive.h" +#endif + #if defined(SK_XML) #include "experimental/svg/model/SkSVGDOM.h" #include "include/svg/SkSVGCanvas.h" @@ -90,9 +95,18 @@ namespace DM { GMSrc::GMSrc(skiagm::GMFactory factory) : fFactory(factory) {} -Result GMSrc::draw(SkCanvas* canvas) const { +Result GMSrc::draw(GrDirectContext* context, SkCanvas* canvas) const { std::unique_ptr gm(fFactory()); SkString msg; + + skiagm::DrawResult gpuSetupResult = gm->gpuSetup(context, canvas, &msg); + switch (gpuSetupResult) { + case skiagm::DrawResult::kOk : break; + case skiagm::DrawResult::kFail: return Result(Result::Status::Fatal, msg); + case skiagm::DrawResult::kSkip: return Result(Result::Status::Skip, msg); + default: SK_ABORT(""); + } + skiagm::DrawResult drawResult = gm->draw(canvas, &msg); switch (drawResult) { case skiagm::DrawResult::kOk : return Result(Result::Status::Ok, msg); @@ -100,6 +114,9 @@ Result GMSrc::draw(SkCanvas* canvas) const { case skiagm::DrawResult::kSkip: return Result(Result::Status::Skip, msg); default: SK_ABORT(""); } + + // Note: we don't call "gpuTeardown" here because, when testing DDL recording, we want + // the gpu-backed images to live past the lifetime of the GM. } SkISize GMSrc::size() const { @@ -157,7 +174,7 @@ static inline void alpha8_to_gray8(SkBitmap* bitmap) { } } -Result BRDSrc::draw(SkCanvas* canvas) const { +Result BRDSrc::draw(GrDirectContext*, SkCanvas* canvas) const { SkColorType colorType = canvas->imageInfo().colorType(); if (kRGB_565_SkColorType == colorType && CodecSrc::kGetFromCanvas_DstColorType != fDstColorType) @@ -398,7 +415,7 @@ static void set_bitmap_color_space(SkImageInfo* info) { *info = info->makeColorSpace(SkColorSpace::MakeSRGB()); } -Result CodecSrc::draw(SkCanvas* canvas) const { +Result CodecSrc::draw(GrDirectContext*, SkCanvas* canvas) const { sk_sp encoded(SkData::MakeFromFileName(fPath.c_str())); if (!encoded) { return Result::Fatal("Couldn't read %s.", fPath.c_str()); @@ -512,7 +529,7 @@ Result CodecSrc::draw(SkCanvas* canvas) const { return Result::Skip( "Cannot decode frame %i to 565 (%s).", i, fPath.c_str()); } - // Fall through. + [[fallthrough]]; default: return Result::Fatal( "Couldn't getPixels for frame %i in %s.", i, fPath.c_str()); @@ -783,7 +800,7 @@ bool AndroidCodecSrc::veto(SinkFlags flags) const { || flags.approach != SinkFlags::kDirect; } -Result AndroidCodecSrc::draw(SkCanvas* canvas) const { +Result AndroidCodecSrc::draw(GrDirectContext*, SkCanvas* canvas) const { sk_sp encoded(SkData::MakeFromFileName(fPath.c_str())); if (!encoded) { return Result::Fatal("Couldn't read %s.", fPath.c_str()); @@ -875,7 +892,7 @@ bool ImageGenSrc::veto(SinkFlags flags) const { return flags.type != SinkFlags::kRaster || flags.approach != SinkFlags::kDirect; } -Result ImageGenSrc::draw(SkCanvas* canvas) const { +Result ImageGenSrc::draw(GrDirectContext*, SkCanvas* canvas) const { if (kRGB_565_SkColorType == canvas->imageInfo().colorType()) { return Result::Skip("Uninteresting to test image generator to 565."); } @@ -973,7 +990,7 @@ bool ColorCodecSrc::veto(SinkFlags flags) const { return flags.type != SinkFlags::kRaster || flags.approach != SinkFlags::kDirect; } -Result ColorCodecSrc::draw(SkCanvas* canvas) const { +Result ColorCodecSrc::draw(GrDirectContext*, SkCanvas* canvas) const { sk_sp encoded(SkData::MakeFromFileName(fPath.c_str())); if (!encoded) { return Result::Fatal("Couldn't read %s.", fPath.c_str()); @@ -1038,7 +1055,7 @@ static DEFINE_int(skpViewportSize, 1000, SKPSrc::SKPSrc(Path path) : fPath(path) { } -Result SKPSrc::draw(SkCanvas* canvas) const { +Result SKPSrc::draw(GrDirectContext*, SkCanvas* canvas) const { std::unique_ptr stream = SkStream::MakeFromFile(fPath.c_str()); if (!stream) { return Result::Fatal("Couldn't read %s.", fPath.c_str()); @@ -1080,7 +1097,7 @@ Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } BisectSrc::BisectSrc(Path path, const char* trail) : INHERITED(path), fTrail(trail) {} -Result BisectSrc::draw(SkCanvas* canvas) const { +Result BisectSrc::draw(GrDirectContext* context, SkCanvas* canvas) const { struct FoundPath { SkPath fPath; SkPaint fPaint; @@ -1103,7 +1120,7 @@ Result BisectSrc::draw(SkCanvas* canvas) const { PathFindingCanvas pathFinder(canvas->getBaseLayerSize().width(), canvas->getBaseLayerSize().height()); - Result result = this->INHERITED::draw(&pathFinder); + Result result = this->INHERITED::draw(context, &pathFinder); if (!result.isOk()) { return result; } @@ -1136,7 +1153,7 @@ static DEFINE_bool(useLottieGlyphPaths, false, SkottieSrc::SkottieSrc(Path path) : fPath(std::move(path)) {} -Result SkottieSrc::draw(SkCanvas* canvas) const { +Result SkottieSrc::draw(GrDirectContext*, SkCanvas* canvas) const { auto resource_provider = skresources::DataURIResourceProviderProxy::Make( skresources::FileResourceProvider::Make(SkOSPath::Dirname(fPath.c_str()), @@ -1209,6 +1226,62 @@ bool SkottieSrc::veto(SinkFlags flags) const { } #endif +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +#if defined(SK_ENABLE_SKRIVE) +SkRiveSrc::SkRiveSrc(Path path) : fPath(std::move(path)) {} + +Result SkRiveSrc::draw(GrDirectContext*, SkCanvas* canvas) const { + auto fileStream = SkFILEStream::Make(fPath.c_str()); + if (!fileStream) { + return Result::Fatal("Unable to open file: %s", fPath.c_str()); + } + + const auto skrive = skrive::SkRive::Builder().make(std::move(fileStream)); + if (!skrive) { + return Result::Fatal("Unable to parse file: %s", fPath.c_str()); + } + + auto bounds = SkRect::MakeEmpty(); + + for (const auto& ab : skrive->artboards()) { + const auto& pos = ab->getTranslation(); + const auto& size = ab->getSize(); + + bounds.join(SkRect::MakeXYWH(pos.x, pos.y, size.x, size.y)); + } + + canvas->drawColor(SK_ColorWHITE); + + if (!bounds.isEmpty()) { + // TODO: tiled frames when we add animation support + SkAutoCanvasRestore acr(canvas, true); + canvas->concat(SkMatrix::MakeRectToRect(bounds, + SkRect::MakeWH(kTargetSize, kTargetSize), + SkMatrix::kCenter_ScaleToFit )); + for (const auto& ab : skrive->artboards()) { + ab->render(canvas); + } + } + + return Result::Ok(); +} + +SkISize SkRiveSrc::size() const { + return SkISize::Make(kTargetSize, kTargetSize); +} + +Name SkRiveSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } + +bool SkRiveSrc::veto(SinkFlags flags) const { + // No need to test to non-(raster||gpu||vector) or indirect backends. + bool type_ok = flags.type == SinkFlags::kRaster + || flags.type == SinkFlags::kGPU + || flags.type == SinkFlags::kVector; + + return !type_ok || flags.approach != SinkFlags::kDirect; +} +#endif + /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #if defined(SK_XML) // Used when the image doesn't have an intrinsic size. @@ -1242,7 +1315,7 @@ SVGSrc::SVGSrc(Path path) } } -Result SVGSrc::draw(SkCanvas* canvas) const { +Result SVGSrc::draw(GrDirectContext*, SkCanvas* canvas) const { if (!fDom) { return Result::Fatal("Unable to parse file: %s", fName.c_str()); } @@ -1293,8 +1366,10 @@ SkISize MSKPSrc::size(int i) const { return i >= 0 && i < fPages.count() ? fPages[i].fSize.toCeil() : SkISize{0, 0}; } -Result MSKPSrc::draw(SkCanvas* c) const { return this->draw(0, c); } -Result MSKPSrc::draw(int i, SkCanvas* canvas) const { +Result MSKPSrc::draw(GrDirectContext* context, SkCanvas* c) const { + return this->draw(0, context, c); +} +Result MSKPSrc::draw(int i, GrDirectContext*, SkCanvas* canvas) const { if (this->pageCount() == 0) { return Result::Fatal("Unable to parse MultiPictureDocument file: %s", fPath.c_str()); } @@ -1322,7 +1397,7 @@ Name MSKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ Result NullSink::draw(const Src& src, SkBitmap*, SkWStream*, SkString*) const { - return src.draw(SkMakeNullCanvas().get()); + return src.draw(nullptr, SkMakeNullCanvas().get()); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ @@ -1389,7 +1464,7 @@ Result GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream* dstStream, SkStri return this->onDraw(src, dst, dstStream, log, fBaseContextOptions); } -sk_sp GPUSink::createDstSurface(GrContext* context, SkISize size, +sk_sp GPUSink::createDstSurface(GrDirectContext* context, SkISize size, GrBackendTexture* backendTexture, GrBackendRenderTarget* backendRT) const { sk_sp surface; @@ -1448,19 +1523,19 @@ Result GPUSink::onDraw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log, SkASSERT(exec == grOptions.fExecutor); GrContextFactory factory(grOptions); - GrContext* context = factory.getContextInfo(fContextType, fContextOverrides).grContext(); + auto direct = factory.getContextInfo(fContextType, fContextOverrides).directContext(); if (initContext) { - initContext(context); + initContext(direct); } - const int maxDimension = context->priv().caps()->maxTextureSize(); + const int maxDimension = direct->priv().caps()->maxTextureSize(); if (maxDimension < std::max(src.size().width(), src.size().height())) { return Result::Skip("Src too large to create a texture.\n"); } GrBackendTexture backendTexture; GrBackendRenderTarget backendRT; - sk_sp surface = this->createDstSurface(context, src.size(), + sk_sp surface = this->createDstSurface(direct, src.size(), &backendTexture, &backendRT); if (!surface) { return Result::Fatal("Could not create a surface."); @@ -1469,15 +1544,15 @@ Result GPUSink::onDraw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log, factory.abandonContexts(); } SkCanvas* canvas = surface->getCanvas(); - Result result = src.draw(canvas); + Result result = src.draw(direct, canvas); if (!result.isOk()) { return result; } surface->flushAndSubmit(); if (FLAGS_gpuStats) { - canvas->getGrContext()->priv().dumpCacheStats(log); - canvas->getGrContext()->priv().dumpGpuStats(log); - canvas->getGrContext()->priv().dumpContextStats(log); + direct->priv().dumpCacheStats(log); + direct->priv().dumpGpuStats(log); + direct->priv().dumpContextStats(log); } this->readBack(surface.get(), dst); @@ -1487,17 +1562,17 @@ Result GPUSink::onDraw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log, } else if (FLAGS_releaseAndAbandonGpuContext) { factory.releaseResourcesAndAbandonContexts(); } - if (!context->abandoned()) { + if (!direct->abandoned()) { surface.reset(); if (backendTexture.isValid()) { - context->deleteBackendTexture(backendTexture); + direct->deleteBackendTexture(backendTexture); } if (backendRT.isValid()) { - context->priv().getGpu()->deleteTestingOnlyBackendRenderTarget(backendRT); + direct->priv().getGpu()->deleteTestingOnlyBackendRenderTarget(backendRT); } } if (grOptions.fPersistentCache) { - context->storeVkPipelineCacheData(); + direct->storeVkPipelineCacheData(); } return Result::Ok(); } @@ -1563,12 +1638,13 @@ Result GPUPersistentCacheTestingSink::draw(const Src& src, SkBitmap* dst, SkWStr SkBitmap reference; SkString refLog; SkDynamicMemoryWStream refStream; - memoryCache.resetNumCacheMisses(); + memoryCache.resetCacheStats(); Result refResult = this->onDraw(src, &reference, &refStream, &refLog, contextOptions); if (!refResult.isOk()) { return refResult; } SkASSERT(!memoryCache.numCacheMisses()); + SkASSERT(!memoryCache.numCacheStores()); return compare_bitmaps(reference, *dst); } @@ -1622,10 +1698,90 @@ Result GPUPrecompileTestingSink::draw(const Src& src, SkBitmap* dst, SkWStream* } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ -GPUDDLSink::GPUDDLSink(const SkCommandLineConfigGpu* config, const GrContextOptions& grCtxOptions) - : INHERITED(config, grCtxOptions) - , fRecordingThreadPool(SkExecutor::MakeLIFOThreadPool(1)) // TODO: this should be at least 2 - , fGPUThread(SkExecutor::MakeFIFOThreadPool(1, false)) { +GPUOOPRSink::GPUOOPRSink(const SkCommandLineConfigGpu* config, const GrContextOptions& ctxOptions) + : INHERITED(config, ctxOptions) { +} + +Result GPUOOPRSink::ooprDraw(const Src& src, + sk_sp dstSurface, + GrDirectContext* context) const { + SkSurfaceCharacterization dstCharacterization; + SkAssertResult(dstSurface->characterize(&dstCharacterization)); + + SkDeferredDisplayListRecorder recorder(dstCharacterization); + + Result result = src.draw(context, recorder.getCanvas()); + if (!result.isOk()) { + return result; + } + + auto ddl = recorder.detach(); + + SkDeferredDisplayList::ProgramIterator iter(context, ddl.get()); + for (; !iter.done(); iter.next()) { + iter.compile(); + } + + SkAssertResult(dstSurface->draw(std::move(ddl))); + + return Result::Ok(); +} + +Result GPUOOPRSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log) const { + GrContextOptions contextOptions = this->baseContextOptions(); + src.modifyGrContextOptions(&contextOptions); + contextOptions.fPersistentCache = nullptr; + contextOptions.fExecutor = nullptr; + + GrContextFactory factory(contextOptions); + + ContextInfo ctxInfo = factory.getContextInfo(this->contextType(), this->contextOverrides()); + auto context = ctxInfo.directContext(); + if (!context) { + return Result::Fatal("Could not create context."); + } + + SkASSERT(context->priv().getGpu()); + + GrBackendTexture backendTexture; + GrBackendRenderTarget backendRT; + sk_sp surface = this->createDstSurface(context, src.size(), + &backendTexture, &backendRT); + if (!surface) { + return Result::Fatal("Could not create a surface."); + } + + Result result = this->ooprDraw(src, surface, context); + if (!result.isOk()) { + return result; + } + + if (FLAGS_gpuStats) { + context->priv().dumpCacheStats(log); + context->priv().dumpGpuStats(log); + context->priv().dumpContextStats(log); + } + + if (!this->readBack(surface.get(), dst)) { + return Result::Fatal("Could not readback from surface."); + } + + surface.reset(); + if (backendTexture.isValid()) { + context->deleteBackendTexture(backendTexture); + } + if (backendRT.isValid()) { + context->priv().getGpu()->deleteTestingOnlyBackendRenderTarget(backendRT); + } + + return Result::Ok(); +} + +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +GPUDDLSink::GPUDDLSink(const SkCommandLineConfigGpu* config, const GrContextOptions& ctxOptions) + : INHERITED(config, ctxOptions) + , fRecordingExecutor(SkExecutor::MakeLIFOThreadPool(1)) + , fGPUExecutor(SkExecutor::MakeFIFOThreadPool(1, false)) { } Result GPUDDLSink::ddlDraw(const Src& src, @@ -1633,7 +1789,7 @@ Result GPUDDLSink::ddlDraw(const Src& src, SkTaskGroup* recordingTaskGroup, SkTaskGroup* gpuTaskGroup, sk_gpu_test::TestContext* gpuTestCtx, - GrContext* gpuThreadCtx) const { + GrDirectContext* gpuThreadCtx) const { // We have to do this here bc characterization can hit the SkGpuDevice's thread guard (i.e., // leaving it until the DDLTileHelper ctor will result in multiple threads trying to use the @@ -1641,20 +1797,11 @@ Result GPUDDLSink::ddlDraw(const Src& src, SkSurfaceCharacterization dstCharacterization; SkAssertResult(dstSurface->characterize(&dstCharacterization)); - // 'gpuTestCtx/gpuThreadCtx' is being shifted to the gpuThread. Leave the main (this) - // thread w/o a context. - gpuTestCtx->makeNotCurrent(); - - // Job one for the GPU thread is to make 'gpuTestCtx' current! - gpuTaskGroup->add([gpuTestCtx] { gpuTestCtx->makeCurrent(); }); - auto size = src.size(); SkPictureRecorder recorder; - Result result = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), - SkIntToScalar(size.height()))); + Result result = src.draw(gpuThreadCtx, recorder.beginRecording(SkIntToScalar(size.width()), + SkIntToScalar(size.height()))); if (!result.isOk()) { - gpuTaskGroup->add([gpuTestCtx] { gpuTestCtx->makeNotCurrent(); }); - gpuTaskGroup->wait(); return result; } sk_sp inputPicture(recorder.finishRecordingAsPicture()); @@ -1665,13 +1812,18 @@ Result GPUDDLSink::ddlDraw(const Src& src, DDLPromiseImageHelper promiseImageHelper; sk_sp compressedPictureData = promiseImageHelper.deflateSKP(inputPicture.get()); if (!compressedPictureData) { - gpuTaskGroup->add([gpuTestCtx] { gpuTestCtx->makeNotCurrent(); }); - gpuTaskGroup->wait(); return Result::Fatal("GPUDDLSink: Couldn't deflate SkPicture"); } promiseImageHelper.createCallbackContexts(gpuThreadCtx); + // 'gpuTestCtx/gpuThreadCtx' is being shifted to the gpuThread. Leave the main (this) + // thread w/o a context. + gpuTestCtx->makeNotCurrent(); + + // Job one for the GPU thread is to make 'gpuTestCtx' current! + gpuTaskGroup->add([gpuTestCtx] { gpuTestCtx->makeCurrent(); }); + // TODO: move the image upload to the utility thread promiseImageHelper.uploadAllToGPU(gpuTaskGroup, gpuThreadCtx); @@ -1712,9 +1864,7 @@ Result GPUDDLSink::ddlDraw(const Src& src, // TODO: switch over to using the promiseImage callbacks // to free the backendTextures. This is complicated a // bit by which thread possesses the direct context. - GrFlushInfo flushInfoSyncCpu; - flushInfoSyncCpu.fFlags = kSyncCpu_GrFlushFlag; - gpuThreadCtx->flush(flushInfoSyncCpu); + gpuThreadCtx->flush(); gpuThreadCtx->submit(true); }); @@ -1734,7 +1884,7 @@ Result GPUDDLSink::ddlDraw(const Src& src, return Result::Ok(); } -Result GPUDDLSink::draw(const Src& src, SkBitmap* dst, SkWStream* stream, SkString* log) const { +Result GPUDDLSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log) const { GrContextOptions contextOptions = this->baseContextOptions(); src.modifyGrContextOptions(&contextOptions); contextOptions.fPersistentCache = nullptr; @@ -1745,7 +1895,7 @@ Result GPUDDLSink::draw(const Src& src, SkBitmap* dst, SkWStream* stream, SkStri // This captures the context destined to be the main gpu context ContextInfo mainCtxInfo = factory.getContextInfo(this->contextType(), this->contextOverrides()); sk_gpu_test::TestContext* mainTestCtx = mainCtxInfo.testContext(); - GrContext* mainCtx = mainCtxInfo.grContext(); + auto mainCtx = mainCtxInfo.directContext(); if (!mainCtx) { return Result::Fatal("Could not create context."); } @@ -1766,8 +1916,8 @@ Result GPUDDLSink::draw(const Src& src, SkBitmap* dst, SkWStream* stream, SkStri SkASSERT(otherCtx->priv().getGpu()); #endif - SkTaskGroup recordingTaskGroup(*fRecordingThreadPool); - SkTaskGroup gpuTaskGroup(*fGPUThread); + SkTaskGroup recordingTaskGroup(*fRecordingExecutor); + SkTaskGroup gpuTaskGroup(*fGPUExecutor); // Make sure 'mainCtx' is current mainTestCtx->makeCurrent(); @@ -1830,7 +1980,7 @@ static Result draw_skdocument(const Src& src, SkDocument* doc, SkWStream* dst) { if (!canvas) { return Result::Fatal("SkDocument::beginPage(w,h) returned nullptr"); } - Result result = src.draw(i, canvas); + Result result = src.draw(i, nullptr, canvas); if (!result.isOk()) { return result; } @@ -1901,7 +2051,7 @@ SKPSink::SKPSink() {} Result SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const { auto size = SkSize::Make(src.size()); SkPictureRecorder recorder; - Result result = src.draw(recorder.beginRecording(size.width(), size.height())); + Result result = src.draw(nullptr, recorder.beginRecording(size.width(), size.height())); if (!result.isOk()) { return result; } @@ -1913,7 +2063,7 @@ Result SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const Result DebugSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const { DebugCanvas debugCanvas(src.size().width(), src.size().height()); - Result result = src.draw(&debugCanvas); + Result result = src.draw(nullptr, &debugCanvas); if (!result.isOk()) { return result; } @@ -1940,7 +2090,7 @@ Result SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const fPageIndex, pageCount); } } - return src.draw(fPageIndex, + return src.draw(fPageIndex, nullptr, SkSVGCanvas::Make(SkRect::MakeWH(SkIntToScalar(src.size().width()), SkIntToScalar(src.size().height())), dst) @@ -1967,7 +2117,7 @@ Result RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) co SkBitmap::kZeroPixels_AllocFlag); SkCanvas canvas(*dst); - return src.draw(&canvas); + return src.draw(nullptr, &canvas); } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ @@ -1978,11 +2128,11 @@ Result RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) co template static Result draw_to_canvas(Sink* sink, SkBitmap* bitmap, SkWStream* stream, SkString* log, - SkISize size, const Fn& draw) { + SkISize size, const Fn& draw) { class ProxySrc : public Src { public: ProxySrc(SkISize size, const Fn& draw) : fSize(size), fDraw(draw) {} - Result draw(SkCanvas* canvas) const override { return fDraw(canvas); } + Result draw(GrDirectContext*, SkCanvas* canvas) const override { return fDraw(canvas); } Name name() const override { return "ProxySrc"; } SkISize size() const override { return fSize; } private: @@ -2031,7 +2181,7 @@ Result ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt SkISize size = auto_compute_translate(&matrix, src.size().width(), src.size().height()); return draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) { canvas->concat(matrix); - return src.draw(canvas); + return src.draw(nullptr, canvas); }); } @@ -2076,8 +2226,8 @@ Result ViaSerialization::draw( // Record our Src into a picture. auto size = src.size(); SkPictureRecorder recorder; - Result result = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), - SkIntToScalar(size.height()))); + Result result = src.draw(nullptr, recorder.beginRecording(SkIntToScalar(size.width()), + SkIntToScalar(size.height()))); if (!result.isOk()) { return result; } @@ -2105,8 +2255,8 @@ ViaDDL::ViaDDL(int numReplays, int numDivisions, Sink* sink) Result ViaDDL::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) const { auto size = src.size(); SkPictureRecorder recorder; - Result result = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), - SkIntToScalar(size.height()))); + Result result = src.draw(nullptr, recorder.beginRecording(SkIntToScalar(size.width()), + SkIntToScalar(size.height()))); if (!result.isOk()) { return result; } @@ -2183,9 +2333,7 @@ Result ViaDDL::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin // We need to ensure all the GPU work is finished so the promise image callback // contexts will delete all the backend textures. - GrFlushInfo flushInfoSyncCpu; - flushInfoSyncCpu.fFlags = kSyncCpu_GrFlushFlag; - context->flush(flushInfoSyncCpu); + context->flush(); context->submit(true); } return Result::Ok(); @@ -2200,8 +2348,8 @@ Result ViaPicture::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkS Result result = draw_to_canvas(fSink.get(), bitmap, stream, log, size, [&](SkCanvas* canvas) { SkPictureRecorder recorder; sk_sp pic; - Result result = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), - SkIntToScalar(size.height()))); + Result result = src.draw(nullptr, recorder.beginRecording(SkIntToScalar(size.width()), + SkIntToScalar(size.height()))); if (!result.isOk()) { return result; } diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h index 0aa348c721322..ec0f59c83863a 100644 --- a/dm/DMSrcSink.h +++ b/dm/DMSrcSink.h @@ -86,15 +86,16 @@ struct SinkFlags { struct Src { virtual ~Src() {} - virtual Result SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; + virtual Result SK_WARN_UNUSED_RESULT draw(GrDirectContext*, SkCanvas*) const = 0; virtual SkISize size() const = 0; virtual Name name() const = 0; virtual void modifyGrContextOptions(GrContextOptions* options) const {} virtual bool veto(SinkFlags) const { return false; } virtual int pageCount() const { return 1; } - virtual Result SK_WARN_UNUSED_RESULT draw(int, SkCanvas* canvas) const { - return this->draw(canvas); + virtual Result SK_WARN_UNUSED_RESULT draw(int, GrDirectContext* context, + SkCanvas* canvas) const { + return this->draw(context, canvas); } virtual SkISize size(int) const { return this->size(); } // Force Tasks using this Src to run on the main thread? @@ -130,7 +131,7 @@ class GMSrc : public Src { public: explicit GMSrc(skiagm::GMFactory); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; void modifyGrContextOptions(GrContextOptions* options) const override; @@ -162,7 +163,7 @@ class CodecSrc : public Src { }; CodecSrc(Path, Mode, DstColorType, SkAlphaType, float); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -180,7 +181,7 @@ class AndroidCodecSrc : public Src { public: AndroidCodecSrc(Path, CodecSrc::DstColorType, SkAlphaType, int sampleSize); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -209,7 +210,7 @@ class BRDSrc : public Src { BRDSrc(Path, Mode, CodecSrc::DstColorType, uint32_t); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -229,7 +230,7 @@ class ImageGenSrc : public Src { }; ImageGenSrc(Path, Mode, SkAlphaType, bool); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -246,7 +247,7 @@ class ColorCodecSrc : public Src { public: ColorCodecSrc(Path, bool decode_to_dst); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -259,7 +260,7 @@ class SKPSrc : public Src { public: explicit SKPSrc(Path path); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; private: @@ -273,7 +274,7 @@ class BisectSrc : public SKPSrc { public: explicit BisectSrc(Path path, const char* trail); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; private: SkString fTrail; @@ -281,13 +282,12 @@ class BisectSrc : public SKPSrc { typedef SKPSrc INHERITED; }; - #if defined(SK_ENABLE_SKOTTIE) class SkottieSrc final : public Src { public: explicit SkottieSrc(Path path); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -304,6 +304,28 @@ class SkottieSrc final : public Src { }; #endif +#if defined(SK_ENABLE_SKRIVE) +class SkRiveSrc final : public Src { +public: + explicit SkRiveSrc(Path path); + + Result draw(GrDirectContext*, SkCanvas*) const override; + SkISize size() const override; + Name name() const override; + bool veto(SinkFlags) const override; + +private: + // Generates a kTileCount x kTileCount filmstrip with evenly distributed frames. + static constexpr int kTileCount = 5; + + // Fit kTileCount x kTileCount frames to a 1000x1000 film strip. + static constexpr SkScalar kTargetSize = 1000; + static constexpr SkScalar kTileSize = kTargetSize / kTileCount; + + const Path fPath; +}; +#endif + #if defined(SK_XML) } // namespace DM @@ -315,7 +337,7 @@ class SVGSrc : public Src { public: explicit SVGSrc(Path path); - Result draw(SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas*) const override; SkISize size() const override; Name name() const override; bool veto(SinkFlags) const override; @@ -335,8 +357,8 @@ class MSKPSrc : public Src { explicit MSKPSrc(Path path); int pageCount() const override; - Result draw(SkCanvas* c) const override; - Result draw(int, SkCanvas*) const override; + Result draw(GrDirectContext*, SkCanvas* c) const override; + Result draw(int, GrDirectContext*, SkCanvas*) const override; SkISize size() const override; SkISize size(int) const override; Name name() const override; @@ -385,7 +407,7 @@ class GPUSink : public Sink { } protected: - sk_sp createDstSurface(GrContext*, SkISize size, GrBackendTexture*, + sk_sp createDstSurface(GrDirectContext*, SkISize size, GrBackendTexture*, GrBackendRenderTarget*) const; bool readBack(SkSurface*, SkBitmap* dst) const; @@ -451,6 +473,21 @@ class GPUPrecompileTestingSink : public GPUSink { typedef GPUSink INHERITED; }; +// This sink attempts to emulate Chrome's OOP-R behavior. It: +// doesn't use promise images +// uses only a single thread for both DDL creation & drawing +class GPUOOPRSink : public GPUSink { +public: + GPUOOPRSink(const SkCommandLineConfigGpu*, const GrContextOptions&); + + Result draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; + +private: + Result ooprDraw(const Src&, sk_sp dstSurface, GrDirectContext*) const; + + typedef GPUSink INHERITED; +}; + // This sink attempts to better simulate the Chrome DDL use-case. It: // creates the DDLs on separate recording threads // performs all the GPU work on a separate GPU thread @@ -471,10 +508,10 @@ class GPUDDLSink : public GPUSink { SkTaskGroup* recordingTaskGroup, SkTaskGroup* gpuTaskGroup, sk_gpu_test::TestContext* gpuTestCtx, - GrContext* gpuThreadCtx) const; + GrDirectContext* gpuThreadCtx) const; - std::unique_ptr fRecordingThreadPool; - std::unique_ptr fGPUThread; + std::unique_ptr fRecordingExecutor; + std::unique_ptr fGPUExecutor; typedef GPUSink INHERITED; }; diff --git a/docs/examples/Surface_characterize.cpp b/docs/examples/Surface_characterize.cpp index bdec9d6ac4a6d..a83f14f3c380a 100644 --- a/docs/examples/Surface_characterize.cpp +++ b/docs/examples/Surface_characterize.cpp @@ -23,9 +23,9 @@ void draw(SkCanvas* canvas) { SkDeferredDisplayListRecorder recorder(characterization); SkCanvas* subCanvas = recorder.getCanvas(); subCanvas->clear(SK_ColorGREEN); - std::unique_ptr displayList = recorder.detach(); + sk_sp displayList = recorder.detach(); // end of threadable work - gpuSurface->draw(displayList.get()); + gpuSurface->draw(displayList); sk_sp img = gpuSurface->makeImageSnapshot(); canvas->drawImage(std::move(img), 0, 0); } diff --git a/docs/examples/Surface_draw_2.cpp b/docs/examples/Surface_draw_2.cpp index 827f4ff0382fa..06beed8560553 100644 --- a/docs/examples/Surface_draw_2.cpp +++ b/docs/examples/Surface_draw_2.cpp @@ -17,9 +17,9 @@ void draw(SkCanvas* canvas) { SkDeferredDisplayListRecorder recorder(characterization); SkCanvas* subCanvas = recorder.getCanvas(); subCanvas->clear(SK_ColorGREEN); - std::unique_ptr displayList = recorder.detach(); + sk_sp displayList = recorder.detach(); // end of threadable work - gpuSurface->draw(displayList.get()); + gpuSurface->draw(displayList); sk_sp img = gpuSurface->makeImageSnapshot(); canvas->drawImage(std::move(img), 0, 0); } diff --git a/experimental/skottiekit/CHANGELOG.md b/experimental/skottiekit/CHANGELOG.md new file mode 100644 index 0000000000000..3687188fd923f --- /dev/null +++ b/experimental/skottiekit/CHANGELOG.md @@ -0,0 +1,9 @@ +# SkottieKit Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +Beginning of Changelog history diff --git a/experimental/skottiekit/Makefile b/experimental/skottiekit/Makefile index 083a0df2fa548..6e79b11e55527 100644 --- a/experimental/skottiekit/Makefile +++ b/experimental/skottiekit/Makefile @@ -24,10 +24,16 @@ release_cpu: clean_examples cp ../../out/skottiekit/skottiekit.js ./examples/bin cp ../../out/skottiekit/skottiekit.wasm ./examples/bin +release_full: clean_examples + # Does an incremental build where possible. + ./compile.sh full-build + cp ../../out/skottiekit/skottiekit.js ./examples/bin + cp ../../out/skottiekit/skottiekit.wasm ./examples/bin + clean_examples: rm -f ./examples/bin/* mkdir -p ./examples/bin serve: echo "Go check out http://localhost:8001/" - cd examples && python ../serve.py \ No newline at end of file + cd examples && python ../serve.py diff --git a/experimental/skottiekit/compile.sh b/experimental/skottiekit/compile.sh index be1909c2ba5cb..e439ce89f422c 100755 --- a/experimental/skottiekit/compile.sh +++ b/experimental/skottiekit/compile.sh @@ -30,15 +30,48 @@ RELEASE_CONF="-Oz --closure 1 --llvm-lto 1 -DSK_RELEASE --pre-js $BASE_DIR/relea EXTRA_CFLAGS="\"-DSK_RELEASE\", \"-DGR_GL_CHECK_ALLOC_WITH_GET_ERROR=0\",\"-DSK_DISABLE_TRACING\"" IS_OFFICIAL_BUILD="true" +if [[ $@ == *full-build* ]]; then + # Full Skottie with all bells and whistles. + BUILD_TYPE="full" + BUILD_CFG="\ + skia_enable_fontmgr_custom_empty=true \ + skia_use_freetype=true \ + skia_use_libgifcodec=true \ + skia_use_harfbuzz=true \ + skia_use_icu=true \ + skia_use_libpng_decode=true \ + skia_use_wuffs=true \ + skia_use_zlib=true \ + \ + skia_use_system_freetype2=false \ + skia_use_system_harfbuzz=false \ + skia_use_system_icu=false \ + skia_use_system_libpng=false \ + skia_use_system_zlib=false\ + " +else + # Smallest usable Skottie. + BUILD_TYPE="minimal" + BUILD_CFG="\ + skia_enable_fontmgr_custom_empty=false \ + skia_use_freetype=false \ + skia_use_libgifcodec=false \ + skia_use_harfbuzz=false \ + skia_use_icu=false \ + skia_use_libpng_decode=false \ + skia_use_wuffs=false \ + skia_use_zlib=false \ + " +fi if [[ $@ == *debug* ]]; then - echo "Building a Debug build" + echo "Building a *${BUILD_TYPE}* Debug build" EXTRA_CFLAGS="\"-DSK_DEBUG\"" RELEASE_CONF="-O0 --js-opts 0 -s DEMANGLE_SUPPORT=1 -s ASSERTIONS=1 -s GL_ASSERTIONS=1 -g4 \ --source-map-base /bin/ -DSK_DEBUG --pre-js $BASE_DIR/debug.js" BUILD_DIR=${BUILD_DIR:="out/skottiekit_debug"} elif [[ $@ == *profiling* ]]; then - echo "Building a build for profiling" + echo "Building a *${BUILD_TYPE}* build for profiling" RELEASE_CONF+=" --profiling-funcs --closure 0" BUILD_DIR=${BUILD_DIR:="out/skottiekit_profile"} else @@ -62,10 +95,6 @@ if [[ $@ == *cpu* ]]; then WASM_GPU="-DSK_SUPPORT_GPU=0 --pre-js $BASE_DIR/cpu.js -s USE_WEBGL2=0" fi -# Trim some skp-related code -EXTRA_CFLAGS+=",\"-DSK_DISABLE_READBUFFER\"" -RELEASE_CONF+=" -DSK_DISABLE_READBUFFER" - SKOTTIE_LIB="$BUILD_DIR/libskottie.a \ $BUILD_DIR/libsksg.a" @@ -111,19 +140,15 @@ echo "Compiling bitcode" werror=true \ target_cpu=\"wasm\" \ \ + ${BUILD_CFG} \ skia_use_angle=false \ skia_use_dng_sdk=false \ skia_use_egl=true \ skia_use_expat=false \ skia_use_fontconfig=false \ - skia_use_freetype=false \ - skia_use_harfbuzz=false \ - skia_use_icu=false \ - skia_use_libgifcodec=false \ skia_use_libheif=false \ skia_use_libjpeg_turbo_decode=true \ skia_use_libjpeg_turbo_encode=false \ - skia_use_libpng_decode=false \ skia_use_libpng_encode=false \ skia_use_libwebp_decode=false \ skia_use_libwebp_encode=false \ @@ -131,10 +156,9 @@ echo "Compiling bitcode" skia_use_piex=false \ skia_use_system_libjpeg_turbo=false \ skia_use_vulkan=false \ - skia_use_wuffs=false \ - skia_use_zlib=false \ skia_enable_fontmgr_empty=true \ - skia_enable_fontmgr_custom_empty=false \ + skia_enable_fontmgr_custom_directory=false \ + skia_enable_fontmgr_custom_embedded=false \ skia_enable_sksl_interpreter=false \ \ ${GN_GPU} \ diff --git a/experimental/skrive/BUILD.gn b/experimental/skrive/BUILD.gn new file mode 100644 index 0000000000000..4f77a546d4f4a --- /dev/null +++ b/experimental/skrive/BUILD.gn @@ -0,0 +1,52 @@ +# Copyright 2020 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("../../gn/skia.gni") + +if (skia_enable_skrive) { + config("public_config") { + defines = [ "SK_ENABLE_SKRIVE" ] + include_dirs = [ "include" ] + } + + component("skrive") { + check_includes = false + import("skrive.gni") + public_configs = [ ":public_config" ] + public = skia_skrive_public + sources = skia_skrive_sources + configs += [ "../../:skia_private" ] + deps = [ "../..:skia" ] + } + + if (defined(is_skia_standalone)) { + if (skia_enable_tools) { + source_set("tests") { + testonly = true + + configs += [ + "../..:skia_private", + "../..:tests_config", + ] + sources = [ + "tests/BinaryReader.cpp", + "tests/DomTypes.cpp", + "tests/JsonReader.cpp", + ] + + deps = [ + ":skrive", + "../..:gpu_tool_utils", + "../..:skia", + ] + } + } + } +} else { + group("skrive") { + } + group("tests") { + } +} diff --git a/experimental/skrive/include/SkRive.h b/experimental/skrive/include/SkRive.h new file mode 100644 index 0000000000000..eb59649b2b6f8 --- /dev/null +++ b/experimental/skrive/include/SkRive.h @@ -0,0 +1,320 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkRive_DEFINED +#define SkRive_DEFINED + +#include "include/core/SkBlendMode.h" +#include "include/core/SkColor.h" +#include "include/core/SkM44.h" +#include "include/core/SkPaint.h" +#include "include/core/SkPathTypes.h" +#include "include/core/SkRefCnt.h" +#include "include/core/SkString.h" + +#include +#include +#include + +class SkCanvas; +class SkPaint; +class SkStreamAsset; + +namespace skrive { + +#define ACTOR_ATTR(attr_name, attr_type, attr_default) \ +private: \ + attr_type f##attr_name = attr_default; \ +public: \ + const attr_type& get##attr_name() const { return f##attr_name; } \ + void set##attr_name(const attr_type& v) { \ + if (f##attr_name == v) return; \ + f##attr_name = v; \ + this->invalidate(); \ + } \ + void set##attr_name(attr_type&& v) { \ + if (f##attr_name == v) return; \ + f##attr_name = std::move(v); \ + this->invalidate(); \ + } + +class Node; + +class Component : public SkRefCnt { +public: + ACTOR_ATTR(Name, SkString, SkString()) + + template + std::enable_if_t::value, bool> + is() const { + if constexpr(std::is_same::value) { + return true; + } else { + return is_base_of(fType); + } + } + + template + operator const T*() const { + return this->is() ? reinterpret_cast(this) : nullptr; + } + + template + operator T*() { + return this->is() ? reinterpret_cast(this) : nullptr; + } + + void revalidate(); + + // probably not the right place + void render(SkCanvas* canvas) const { + this->onRender(canvas); + } + +protected: + enum class Type : uint32_t { + kNode, + kShape, + kColorPaint, + kEllipse, + kRectangle, + }; + + explicit Component(Type t) : fType(t) {} + + void invalidate(); + + bool hasInval() const { return fDirty; } + + virtual void onRevalidate() = 0; + virtual void onRender(SkCanvas*) const; + +private: + friend class Node; // parent access + + template + static constexpr bool is_base_of(Type t); + + const Type fType; + + Node* fParent = nullptr; + bool fDirty = true; +}; + +class TransformableComponent : public Component { +public: + ACTOR_ATTR(Translation , SkV2 , SkV2({0, 0})) + ACTOR_ATTR(Scale , SkV2 , SkV2({1, 1})) + ACTOR_ATTR(Rotation , float, 0 ) + ACTOR_ATTR(Opacity , float, 1 ) + +protected: + explicit TransformableComponent(Type t) : INHERITED(t) {} + + class ScopedTransformContext final { + public: + ScopedTransformContext(const TransformableComponent*, SkCanvas*); + ~ScopedTransformContext(); + + private: + SkCanvas* fCanvas; + const int fRestoreCount; + }; + +private: + using INHERITED = Component; +}; + +class Node : public TransformableComponent { +public: + Node() : INHERITED(Type::kNode) {} + + ACTOR_ATTR(CollapsedVisibility, bool , false ) + + void addChild(sk_sp); + + const std::vector>& children() const { return fChildren; } + +protected: + explicit Node(Type t) : INHERITED(t) {} + + void onRevalidate() override; + + void onRender(SkCanvas*) const override; + +private: + std::vector> fChildren; + + using INHERITED = TransformableComponent; +}; + +class Paint : public Component { +public: + ACTOR_ATTR(Opacity , float , 1 ) + ACTOR_ATTR(FillRule , SkPathFillType, SkPathFillType::kWinding ) + ACTOR_ATTR(StrokeWidth, float , 1 ) + ACTOR_ATTR(StrokeCap , SkPaint::Cap , SkPaint::Cap::kButt_Cap ) + ACTOR_ATTR(StrokeJoin , SkPaint::Join , SkPaint::Join::kMiter_Join) + + enum class StrokeTrim : uint8_t { kOff, kSequential, kSynced }; + ACTOR_ATTR(StrokeTrim , StrokeTrim, StrokeTrim::kOff) + ACTOR_ATTR(StrokeTrimStart , float , 0) + ACTOR_ATTR(StrokeTrimEnd , float , 0) + ACTOR_ATTR(StrokeTrimOffset, float , 0) + + void apply(SkPaint* paint) const { + this->onApply(paint); + } + + SkPaint::Style style() const { return fStyle; } + +protected: + Paint(Type t, SkPaint::Style style) : INHERITED(t), fStyle(style) {} + + virtual void onApply(SkPaint*) const; + +private: + const SkPaint::Style fStyle; + + using INHERITED = Component; +}; + +class ColorPaint final : public Paint { +public: + explicit ColorPaint(SkPaint::Style style) : INHERITED(Type::kColorPaint, style) {} + + ACTOR_ATTR(Color, SkColor4f, SkColors::kBlack) + +private: + void onRevalidate() override; + + void onApply(SkPaint*) const override; + + using INHERITED = Paint; +}; + +class Geometry : public Node { +public: + void draw(SkCanvas* canvas, const SkPaint& paint, SkPathFillType ftype) const { + return this->onDraw(canvas, paint, ftype); + } + +protected: + explicit Geometry(Type t) : INHERITED(t) {} + + virtual void onDraw(SkCanvas*, const SkPaint&, SkPathFillType) const = 0; + +private: + using INHERITED = Node; +}; + +class Ellipse final : public Geometry { +public: + Ellipse() : INHERITED(Type::kEllipse) {} + + ACTOR_ATTR(Width , float, 0) + ACTOR_ATTR(Height, float, 0) + +private: + void onRevalidate() override; + void onDraw(SkCanvas*, const SkPaint&, SkPathFillType) const override; + + using INHERITED = Geometry; +}; + +class Rectangle final : public Geometry { +public: + Rectangle() : INHERITED(Type::kRectangle) {} + + ACTOR_ATTR(Width , float, 0) + ACTOR_ATTR(Height, float, 0) + ACTOR_ATTR(Radius, float, 0) + +private: + void onRevalidate() override; + void onDraw(SkCanvas*, const SkPaint&, SkPathFillType) const override; + + using INHERITED = Geometry; +}; + +class Drawable : public Node { +public: + ACTOR_ATTR(DrawOrder, size_t , 0 ) + ACTOR_ATTR(BlendMode, SkBlendMode, SkBlendMode::kSrcOver) + ACTOR_ATTR(IsHidden , bool , false ) + +protected: + explicit Drawable(Type t) : INHERITED(t) {} + +private: + using INHERITED = Node; +}; + +class Shape final : public Drawable { +public: + Shape() : INHERITED(Type::kShape) {} + + ACTOR_ATTR(TransformAffectsStroke, bool, true) + +private: + void onRevalidate() override; + void onRender(SkCanvas*) const override; + + // cached on revalidation + // tracked separately due to paint order (all fills before strokes) + std::vector fFills, + fStrokes; + + std::vector fGeometries; + + using INHERITED = Drawable; +}; + +template +constexpr bool Component::is_base_of(Type t) { + if (t == Type::kNode ) return std::is_base_of::value; + if (t == Type::kShape ) return std::is_base_of::value; + if (t == Type::kColorPaint) return std::is_base_of::value; + if (t == Type::kEllipse ) return std::is_base_of::value; + if (t == Type::kRectangle ) return std::is_base_of::value; + + return false; +} + +class Artboard final : public SkRefCnt { +public: + ACTOR_ATTR(Root , sk_sp, nullptr ) + ACTOR_ATTR(Name , SkString , SkString() ) + ACTOR_ATTR(Color , SkColor4f , SkColors::kBlack) + ACTOR_ATTR(Size , SkV2 , SkV2({0,0}) ) + ACTOR_ATTR(Origin , SkV2 , SkV2({0,0}) ) + ACTOR_ATTR(Translation , SkV2 , SkV2({0,0}) ) + ACTOR_ATTR(ClipContents, bool , false ) + + void render(SkCanvas*) const; + +private: + void invalidate() {} +}; + +class SK_API SkRive final : public SkNVRefCnt { +public: + class Builder final { + public: + sk_sp make(std::unique_ptr); + }; + + const std::vector>& artboards() const { return fArtboards; } + std::vector>& artboards() { return fArtboards; } + +private: + std::vector> fArtboards; +}; + +} // skrive + +#endif // SkRive_DEFINED diff --git a/experimental/skrive/skrive.gni b/experimental/skrive/skrive.gni new file mode 100644 index 0000000000000..920b2285e57c5 --- /dev/null +++ b/experimental/skrive/skrive.gni @@ -0,0 +1,27 @@ +# Copyright 2020 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Things are easiest for everyone if these source paths are absolute. +_src = get_path_info("src", "abspath") +_include = get_path_info("include", "abspath") + +skia_skrive_public = [ "$_include/SkRive.h" ] + +skia_skrive_sources = [ + "$_src/Artboard.cpp", + "$_src/Color.cpp", + "$_src/Component.cpp", + "$_src/Drawable.cpp", + "$_src/Ellipse.cpp", + "$_src/Node.cpp", + "$_src/Paint.cpp", + "$_src/Rectangle.cpp", + "$_src/Shape.cpp", + "$_src/SkRive.cpp", + "$_src/reader/BinaryReader.cpp", + "$_src/reader/JsonReader.cpp", + "$_src/reader/StreamReader.cpp", + "$_src/reader/StreamReader.h", +] diff --git a/experimental/skrive/src/Artboard.cpp b/experimental/skrive/src/Artboard.cpp new file mode 100644 index 0000000000000..a2122de4ae7ee --- /dev/null +++ b/experimental/skrive/src/Artboard.cpp @@ -0,0 +1,140 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "include/core/SkCanvas.h" + +#include +#include + +namespace skrive { + +namespace internal { + +template +size_t parse_node(StreamReader*, T*); + +template +std::tuple, size_t> make_from_stream(StreamReader* sr, Args&&... args) { + auto node = sk_make_sp(std::forward(args)...); + + const auto parent_id = parse_node(sr, node.get()); + + return std::make_tuple(std::move(node), parent_id); +} + +std::tuple, size_t> parse_component(StreamReader* sr) { + StreamReader::AutoBlock block(sr); + switch (block.type()) { + case StreamReader::BlockType::kActorNode: + return make_from_stream(sr); + case StreamReader::BlockType::kActorShape: + return make_from_stream(sr); + case StreamReader::BlockType::kColorFill: + return make_from_stream(sr, SkPaint::kFill_Style); + case StreamReader::BlockType::kColorStroke: + return make_from_stream(sr, SkPaint::kStroke_Style); + case StreamReader::BlockType::kActorEllipse: + return make_from_stream(sr); + case StreamReader::BlockType::kActorRectangle: + return make_from_stream(sr); + default: + break; + } + + SkDebugf("!! unsupported node type: %d\n", block.type()); + return {nullptr, 0}; +} + +sk_sp parse_components(StreamReader* sr) { + const auto count = sr->readLength16(); + + std::vector> components; + components.reserve(count); + + for (size_t i = 0; i < count; ++i) { + auto [ component, parent_id ] = parse_component(sr); + + // parent IDs are kinda-sorta one-based + if (parent_id > 0) { + parent_id -= 1; + } + + if (component && parent_id < i && components[parent_id]) { + if (Node* node = *components[parent_id]) { + node->addChild(component); + } + } + + components.push_back(std::move(component)); + } + + SkDebugf(".. parsed %zu components\n", components.size()); + + // hmm... + for (const auto& comp : components) { + if (comp && comp->is()) { + return sk_ref_sp(static_cast(*comp)); + } + } + + return nullptr; +} + +sk_sp parse_artboard(StreamReader* sr) { + auto ab = sk_make_sp(); + + ab->setName (sr->readString("name" )); + ab->setTranslation (sr->readV2 ("translation" )); + ab->setSize ({sr->readFloat ("width" ), + sr->readFloat ("height" )}); + ab->setOrigin (sr->readV2 ("origin" )); + ab->setClipContents(sr->readBool ("clipContents")); + ab->setColor (sr->readColor ("color" )); + + for (;;) { + StreamReader::AutoBlock block(sr); + if (block.type() == StreamReader::BlockType::kEoB) { + break; + } + + switch (block.type()) { + case StreamReader::BlockType::kComponents: + ab->setRoot(parse_components(sr)); + break; + default: + SkDebugf("!! Unsupported block type: %d\n", block.type()); + break; + } + } + + SkDebugf(".. parsed artboard \"%s\" [%f x %f]\n", + ab->getName().c_str(), ab->getSize().x, ab->getSize().y); + + return ab; +} + +} // namespace internal + +void Artboard::render(SkCanvas* canvas) const { + SkAutoCanvasRestore acr(canvas, true); + canvas->translate(fTranslation.x, fTranslation.y); + + SkPaint paint; + paint.setColor4f(fColor); + + canvas->drawRect(SkRect::MakeWH(fSize.x, fSize.y), paint); + + if (fRoot) { + fRoot->revalidate(); + fRoot->render(canvas); + } +} + +} // namespace skrive diff --git a/experimental/skrive/src/Color.cpp b/experimental/skrive/src/Color.cpp new file mode 100644 index 0000000000000..925623acc4431 --- /dev/null +++ b/experimental/skrive/src/Color.cpp @@ -0,0 +1,41 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" + +namespace skrive { + +namespace internal { + +template +size_t parse_node(StreamReader*, T*); + +extern void parse_fill_stroke(StreamReader*, Paint*); + +template <> +size_t parse_node(StreamReader* sr, ColorPaint* node) { + const auto parent_id = parse_node(sr, node); + + node->setColor(sr->readColor("color")); + + parse_fill_stroke(sr, node); + + return parent_id; +} + +} // namespace internal + +void ColorPaint::onRevalidate() {} + +void ColorPaint::onApply(SkPaint* paint) const { + this->INHERITED::onApply(paint); + paint->setColor4f(fColor); +} + +} // namespace skrive diff --git a/experimental/skrive/src/Component.cpp b/experimental/skrive/src/Component.cpp new file mode 100644 index 0000000000000..f23c05b7a0cdc --- /dev/null +++ b/experimental/skrive/src/Component.cpp @@ -0,0 +1,84 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "include/core/SkCanvas.h" + +namespace skrive { +namespace internal { + +template +size_t parse_node(StreamReader*, T*); + +template <> +size_t parse_node(StreamReader* sr, Component* node) { + node->setName(sr->readString("name")); + + const auto parent_id = sr->readId("parent"); + + SkDebugf(".. %s -> %d\n", node->getName().c_str(), parent_id); + + return parent_id; +} + +template <> +size_t parse_node(StreamReader* sr, TransformableComponent* node) { + const auto parent_index = parse_node(sr, node); + + node->setTranslation(sr->readV2("translation")); + node->setRotation(sr->readFloat("rotation")); + node->setScale(sr->readV2("scale")); + node->setOpacity(sr->readFloat("opacity")); + + return parent_index; +} + +} // namespace internal + +void Component::invalidate() { + auto* node = this; + + do { + node->fDirty = true; + node = node->fParent; + } while (node && !node->hasInval()); +} + +void Component::revalidate() { + if (this->hasInval()) { + this->onRevalidate(); + fDirty = false; + } +} + +void Component::onRender(SkCanvas*) const {} + +TransformableComponent::ScopedTransformContext:: +ScopedTransformContext(const TransformableComponent* node, SkCanvas* canvas) + : fCanvas(canvas) + , fRestoreCount(canvas->getSaveCount()) { + const auto lm = SkMatrix::Translate(node->getTranslation().x, node->getTranslation().y) * + SkMatrix::RotateDeg(node->getRotation() ) * + SkMatrix::Scale (node->getScale().x , node->getScale().y ); + + if (node->getOpacity() < 1) { + SkPaint layer_paint; + layer_paint.setAlphaf(node->getOpacity()); + canvas->saveLayer(nullptr, &layer_paint); + } else if (!lm.isIdentity()) { + canvas->save(); + } + canvas->concat(lm); +} + +TransformableComponent::ScopedTransformContext::~ScopedTransformContext() { + fCanvas->restoreToCount(this->fRestoreCount); +} + +} // namespace skrive diff --git a/experimental/skrive/src/Drawable.cpp b/experimental/skrive/src/Drawable.cpp new file mode 100644 index 0000000000000..42d02ee71d3ed --- /dev/null +++ b/experimental/skrive/src/Drawable.cpp @@ -0,0 +1,32 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" + +namespace skrive::internal { +template +size_t parse_node(StreamReader*, T*); + +template <> +size_t parse_node(StreamReader* sr, Drawable* node) { + const auto parent_id = parse_node(sr, node); + + node->setIsHidden(!sr->readBool("isVisible")); + + const auto bm = sr->readUInt8("blendMode"); + if (bm <= static_cast(SkBlendMode::kLastMode)) { + node->setBlendMode(static_cast(bm)); + } + + node->setDrawOrder(sr->readUInt16("drawOrder")); + + return parent_id; +} + +} // namespace skrive::internal diff --git a/experimental/skrive/src/Ellipse.cpp b/experimental/skrive/src/Ellipse.cpp new file mode 100644 index 0000000000000..98ac236c4bb10 --- /dev/null +++ b/experimental/skrive/src/Ellipse.cpp @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "include/core/SkCanvas.h" + +namespace skrive { +namespace internal { + +template +size_t parse_node(StreamReader*, T*); + +template <> +size_t parse_node(StreamReader* sr, Ellipse* node) { + const auto parent_id = parse_node(sr, node); + + node->setWidth(sr->readFloat("width")); + node->setHeight(sr->readFloat("height")); + + return parent_id; +} + +} // namespace internal + +void Ellipse::onRevalidate() { + SkASSERT(this->hasInval()); +} + +void Ellipse::onDraw(SkCanvas* canvas, const SkPaint& paint, SkPathFillType) const { + SkASSERT(!this->hasInval()); + + if (SkScalarNearlyEqual(fWidth, fHeight)) { + canvas->drawCircle(0, 0, fWidth * 0.5f, paint); + } else { + canvas->drawOval(SkRect::MakeXYWH(-fWidth * 0.5f, -fHeight * 0.5f, fWidth, fHeight), paint); + } +} + +} // namespace skrive diff --git a/experimental/skrive/src/Node.cpp b/experimental/skrive/src/Node.cpp new file mode 100644 index 0000000000000..4c1e9383a77c8 --- /dev/null +++ b/experimental/skrive/src/Node.cpp @@ -0,0 +1,77 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" + +#include + +namespace skrive { +namespace internal { + +template +size_t parse_node(StreamReader*, T*); + +template <> +size_t parse_node(StreamReader* sr, Node* node) { + const auto parent_id = parse_node(sr, node); + + node->setCollapsedVisibility(sr->readBool("isCollapsed")); + + if (sr->openArray("clips")) { + const auto count = sr->readLength8(); + + SkDebugf(".. %d clips\n", count); + + for (size_t i = 0; i < count; ++i) { + if (sr->openObject("clip")) { + /*const auto clip_id =*/ sr->readUInt16("node"); + /*const auto intersect =*/ sr->readBool("intersect"); + + // TODO: actually use clips + sr->closeObject(); + } + } + + sr->closeArray(); + } + + return parent_id; +} + +} // namespace skrive + +void Node::addChild(sk_sp child) { + child->fParent = this; + fChildren.push_back(std::move(child)); + this->invalidate(); +} + +void Node::onRevalidate() { + SkASSERT(this->hasInval()); + + for (const auto& child : fChildren) { + if (child) { + child->revalidate(); + } + } +} + +void Node::onRender(SkCanvas* canvas) const { + SkASSERT(!this->hasInval()); + + TransformableComponent::ScopedTransformContext stc(this, canvas); + + // TODO: draw order? + for (const auto& child : this->children()) { + child->render(canvas); + } +} + + +} // namespace internal diff --git a/experimental/skrive/src/Paint.cpp b/experimental/skrive/src/Paint.cpp new file mode 100644 index 0000000000000..0124e726f9c9a --- /dev/null +++ b/experimental/skrive/src/Paint.cpp @@ -0,0 +1,82 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" + +namespace skrive { + +namespace internal { + +template +size_t parse_node(StreamReader*, T*); + +template <> +size_t parse_node(StreamReader* sr, Paint* node) { + const auto parent_id = parse_node(sr, node); + + node->setOpacity(sr->readFloat("opacity")); + + return parent_id; +} + +void parse_fill_stroke(StreamReader* sr, Paint* node) { + if (node->style() == SkPaint::kFill_Style) { + static constexpr SkPathFillType gFillTypeMap[] = { + SkPathFillType::kWinding, // 0 + SkPathFillType::kEvenOdd, // 1 + }; + node->setFillRule(gFillTypeMap[std::min(sr->readUInt8("fillRule"), + SK_ARRAY_COUNT(gFillTypeMap) - 1)]); + } else { + node->setStrokeWidth(sr->readFloat("width")); + + static constexpr SkPaint::Cap gCapMap[] = { + SkPaint::kButt_Cap, // 0 + SkPaint::kRound_Cap, // 1 + SkPaint::kSquare_Cap, // 2 + }; + node->setStrokeCap(gCapMap[std::min(sr->readUInt8("cap"), + SK_ARRAY_COUNT(gCapMap) - 1)]); + + static constexpr SkPaint::Join gJoinMap[] = { + SkPaint::kMiter_Join, // 0 + SkPaint::kRound_Join, // 1 + SkPaint::kBevel_Join, // 2 + }; + node->setStrokeJoin(gJoinMap[std::min(sr->readUInt8("join"), + SK_ARRAY_COUNT(gJoinMap) - 1)]); + + static constexpr Paint::StrokeTrim gTrimMap[] = { + Paint::StrokeTrim::kOff, // 0 + Paint::StrokeTrim::kSequential, // 1 + Paint::StrokeTrim::kSynced, // 2 + }; + node->setStrokeTrim(gTrimMap[std::min(sr->readUInt8("trim"), + SK_ARRAY_COUNT(gTrimMap) - 1)]); + + if (node->getStrokeTrim() != Paint::StrokeTrim::kOff) { + node->setStrokeTrimStart (sr->readFloat("start" )); + node->setStrokeTrimEnd (sr->readFloat("end" )); + node->setStrokeTrimOffset(sr->readFloat("offset")); + } + } +} + +} // namespace internal + +void Paint::onApply(SkPaint* paint) const { + paint->setAntiAlias(true); + paint->setStyle(this->style()); + + paint->setStrokeWidth(fStrokeWidth); + paint->setStrokeCap (fStrokeCap ); + paint->setStrokeJoin (fStrokeJoin ); +} + +} // namespace skrive diff --git a/experimental/skrive/src/Rectangle.cpp b/experimental/skrive/src/Rectangle.cpp new file mode 100644 index 0000000000000..a561db9d6693c --- /dev/null +++ b/experimental/skrive/src/Rectangle.cpp @@ -0,0 +1,44 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "include/core/SkCanvas.h" + +namespace skrive { +namespace internal { + +template +size_t parse_node(StreamReader*, T*); + +template <> +size_t parse_node(StreamReader* sr, Rectangle* node) { + const auto parent_id = parse_node(sr, node); + + node->setWidth(sr->readFloat("width")); + node->setHeight(sr->readFloat("height")); + node->setRadius(sr->readFloat("cornerRadius")); + + return parent_id; +} + +} // namespace internal + +void Rectangle::onRevalidate() { + SkASSERT(this->hasInval()); +} + +void Rectangle::onDraw(SkCanvas* canvas, const SkPaint& paint, SkPathFillType) const { + SkASSERT(!this->hasInval()); + + const auto rect = SkRect::MakeXYWH(-fWidth * 0.5f, -fHeight * 0.5f, fWidth, fHeight); + + canvas->drawRect(rect, paint); +} + +} // namespace skrive diff --git a/experimental/skrive/src/Shape.cpp b/experimental/skrive/src/Shape.cpp new file mode 100644 index 0000000000000..081e2733e0c65 --- /dev/null +++ b/experimental/skrive/src/Shape.cpp @@ -0,0 +1,73 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "include/core/SkPaint.h" + +namespace skrive { +namespace internal { + +template +size_t parse_node(StreamReader*, T*); + +template <> +size_t parse_node(StreamReader* sr, Shape* node) { + const auto parent_id = parse_node(sr, node); + + node->setTransformAffectsStroke(sr->readBool("transformAffectsStroke")); + + return parent_id; +} + +} // namespace internal + +void Shape::onRevalidate() { + this->INHERITED::onRevalidate(); + + fFills.clear(); + fStrokes.clear(); + fGeometries.clear(); + + for (const auto& child : this->children()) { + if (const Paint* paint = *child) { + SkASSERT(paint->style() == SkPaint::kFill_Style || + paint->style() == SkPaint::kStroke_Style); + + auto& bucket = paint->style() == SkPaint::kFill_Style ? fFills : fStrokes; + bucket.push_back(paint); + } else if (const Geometry* geo = *child) { + fGeometries.push_back(geo); + } + } + + SkDebugf("[Shape::onRevalidate] %zu geos %zu fill(s) %zu stroke(s)\n", + fGeometries.size(), fFills.size(), fStrokes.size()); +} + +void Shape::onRender(SkCanvas* canvas) const { + auto draw_paint = [this](SkCanvas* canvas, const Paint* paint) { + SkPaint p; + paint->apply(&p); + + for (const auto& geo : fGeometries) { + geo->draw(canvas, p, paint->getFillRule()); + } + }; + + TransformableComponent::ScopedTransformContext stc(this, canvas); + + for (const auto* fill : fFills) { + draw_paint(canvas, fill); + } + for (const auto* stroke : fStrokes) { + draw_paint(canvas, stroke); + } +} + +} // namespace skrive diff --git a/experimental/skrive/src/SkRive.cpp b/experimental/skrive/src/SkRive.cpp new file mode 100644 index 0000000000000..971b609d75392 --- /dev/null +++ b/experimental/skrive/src/SkRive.cpp @@ -0,0 +1,75 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "include/core/SkStream.h" + +namespace skrive { + +namespace internal { + +extern sk_sp parse_artboard(StreamReader*); + +void parse_artboards(const sk_sp& skrive, StreamReader* sr) { + const size_t artboard_count = sr->readLength16(); + skrive->artboards().reserve(artboard_count); + + for (size_t i = 0; i < artboard_count; ++i) { + StreamReader::AutoBlock block(sr); + if (block.type() == StreamReader::BlockType::kEoB) { + break; + } + if (block.type() != StreamReader::BlockType::kActorArtboard) { + SkDebugf("!! Unexpected artboard block type: %d\n", block.type()); + continue; + } + + skrive->artboards().push_back(parse_artboard(sr)); + } +} + +static sk_sp parse_skrive(std::unique_ptr sr) { + if (!sr) { + return nullptr; + } + + const auto version = sr->readUInt32("version"); + SkDebugf(".. loading version %d\n", version); + + auto skrive = sk_make_sp(); + + for (;;) { + StreamReader::AutoBlock block(sr); + if (block.type() == StreamReader::BlockType::kEoB) { + break; + } + + switch (block.type()) { + case StreamReader::BlockType::kArtboards: + parse_artboards(skrive, sr.get()); + break; + default: + SkDebugf("!! Unsupported block type: %d\n", block.type()); + break; + } + } + + return skrive; +} + +} // namespace internal + +sk_sp SkRive::Builder::make(std::unique_ptr stream) { + auto reader = internal::StreamReader::Make(std::move(stream)); + + return reader ? parse_skrive(std::move(reader)) + : nullptr; +} + +} // namespace skrive diff --git a/experimental/skrive/src/reader/BinaryReader.cpp b/experimental/skrive/src/reader/BinaryReader.cpp new file mode 100644 index 0000000000000..739f6a6508283 --- /dev/null +++ b/experimental/skrive/src/reader/BinaryReader.cpp @@ -0,0 +1,153 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "include/core/SkStream.h" +#include "include/core/SkString.h" + +#include + +namespace skrive::internal { + +namespace { + +class BinaryReader final : public StreamReader { +public: + explicit BinaryReader(std::unique_ptr stream) + : fStream(std::move(stream)) {} + +private: + bool validateSize(size_t sz) const { + const auto next_pos = fStream->getPosition() + sz, + block_end = fBlockStack.empty() ? fStream->getLength() + : fBlockStack.back().block_end; + return next_pos <= block_end; + } + + uint16_t readId(const char label[]) override { + return this->readUInt16(label); + } + + bool readBool(const char[]) override { + uint8_t v; + + return validateSize(sizeof(v)) && fStream->readU8(&v) + ? v == 1 + : false; + } + + float readFloat(const char[]) override { + float v; + + return validateSize(sizeof(v)) && fStream->readScalar(&v) + ? v + : 0.0f; + } + + uint8_t readUInt8(const char[]) override { + uint8_t v; + + return validateSize(sizeof(v)) && fStream->readU8(&v) + ? v + : 0; + } + + uint16_t readUInt16(const char[]) override { + uint16_t v; + + return validateSize(sizeof(v)) && fStream->readU16(&v) + ? v + : 0; + } + + uint32_t readUInt32(const char[]) override { + uint32_t v; + + return validateSize(sizeof(v)) && fStream->readU32(&v) + ? v + : 0; + } + + SkString readString(const char[]) override { + uint32_t length; + if (!validateSize(sizeof(length)) || !fStream->readU32(&length)) { + return SkString(); + } + + SkString str(length); + return validateSize(length) && fStream->read(str.writable_str(), length) == length + ? str + : SkString(); + } + + size_t readFloatArray(const char[], float dst[], size_t count) override { + if (!validateSize(count * sizeof(float))) { + return 0; + } + + return fStream->read(dst, count * sizeof(float)) / sizeof(float); + } + + uint8_t readLength8() override { + return this->readUInt8(nullptr); + } + + uint16_t readLength16() override { + return this->readUInt16(nullptr); + } + + // nops + bool openArray(const char[]) override { return true; } + void closeArray() override {} + bool openObject(const char[]) override { return true; } + void closeObject() override {} + + BlockType openBlock() override { + uint8_t block_type; + uint32_t block_size; + + if (this->validateSize(sizeof(block_type) + sizeof(block_size)) && + fStream->readU8 (&block_type) && + fStream->readU32(&block_size)) { + const auto block_end = std::min(fStream->getPosition() + block_size, + fStream->getLength()); + fBlockStack.push_back({block_end}); + return static_cast(block_type); + } + + return BlockType::kEoB; + } + + void closeBlock() override { + SkASSERT(!fBlockStack.empty()); + SkASSERT(fStream->getPosition() <= fBlockStack.back().block_end); + + if (fStream->getPosition() < fBlockStack.back().block_end) { + const auto skip = fBlockStack.back().block_end - fStream->getPosition(); + SkDebugf("!! skipping %zu bytes in block\n", skip); + fStream->skip(skip); + } + + fBlockStack.pop_back(); + } + + const std::unique_ptr fStream; + + struct BlockRec { + size_t block_end; + }; + + std::vector fBlockStack; +}; + +} // namespace + +std::unique_ptr MakeBinaryStreamReader(std::unique_ptr stream) { + return std::make_unique(std::move(stream)); +} + +} diff --git a/experimental/skrive/src/reader/JsonReader.cpp b/experimental/skrive/src/reader/JsonReader.cpp new file mode 100644 index 0000000000000..3454dd1340933 --- /dev/null +++ b/experimental/skrive/src/reader/JsonReader.cpp @@ -0,0 +1,259 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "include/core/SkString.h" +#include "src/utils/SkJSON.h" + +#include +#include +#include + +namespace skrive::internal { +namespace { + +StreamReader::BlockType block_type(const char* type_name) { + static constexpr struct TypeMapEntry { + const char* name; + StreamReader::BlockType block_type; + } gTypeMap[] = { + {"artboard" , StreamReader::BlockType::kActorArtboard }, + {"artboards" , StreamReader::BlockType::kArtboards }, + {"colorFill" , StreamReader::BlockType::kColorFill }, + {"colorStroke" , StreamReader::BlockType::kColorStroke }, + {"ellipse" , StreamReader::BlockType::kActorEllipse }, + {"gradientFill" , StreamReader::BlockType::kGradientFill }, + {"gradientStroke" , StreamReader::BlockType::kGradientStroke }, + {"node" , StreamReader::BlockType::kActorNode }, + {"nodes" , StreamReader::BlockType::kComponents }, + {"path" , StreamReader::BlockType::kActorPath }, + {"polygon" , StreamReader::BlockType::kActorPolygon }, + {"radialGradientFill" , StreamReader::BlockType::kRadialGradientFill }, + {"radialGradientStroke", StreamReader::BlockType::kRadialGradientStroke }, + {"rectangle" , StreamReader::BlockType::kActorRectangle }, + {"shape" , StreamReader::BlockType::kActorShape }, + {"star" , StreamReader::BlockType::kActorStar }, + {"triangle" , StreamReader::BlockType::kActorTriangle }, + }; + + const TypeMapEntry key = { type_name, StreamReader::BlockType::kUnknown }; + const auto* map_entry = std::lower_bound(std::begin(gTypeMap), + std::end (gTypeMap), + key, + [](const TypeMapEntry& a, const TypeMapEntry& b) { + return strcmp(a.name, b.name) < 0; + }); + + return (map_entry != std::end(gTypeMap) && !strcmp(map_entry->name, key.name)) + ? map_entry->block_type + : StreamReader::BlockType::kUnknown; +} + +class JsonReader final : public StreamReader { +public: + explicit JsonReader(std::unique_ptr dom) + : fDom(std::move(dom)) { + fContextStack.push_back({&fDom->root(), 0}); + } + + ~JsonReader() override { + SkASSERT(fContextStack.size() == 1); + } + +private: + template + const T* readProp(const char label[]) { + auto& ctx = fContextStack.back(); + + if (ctx.fContainer->is()) { + return static_cast(ctx.fContainer->as()[label]); + } + + const skjson::ArrayValue* jarr = *ctx.fContainer; + SkASSERT(jarr); + + return ctx.fMemberIndex < jarr->size() + ? static_cast((*jarr)[ctx.fMemberIndex++]) + : nullptr; + } + + uint16_t readId(const char label[]) override { + // unlike binary, json IDs are 0-based + return this->readUInt16(label) + 1; + } + + bool readBool(const char label[]) override { + const auto* jbool = this->readProp(label); + + return jbool ? **jbool : false; + } + + float readFloat(const char label[]) override { + const auto* jnum = this->readProp(label); + + return jnum ? static_cast(**jnum) : 0.0f; + } + + uint8_t readUInt8(const char label[]) override { + return static_cast(this->readUInt32(label)); + } + + uint16_t readUInt16(const char label[]) override { + return static_cast(this->readUInt32(label)); + } + + uint32_t readUInt32(const char label[]) override { + const auto* jnum = this->readProp(label); + + return jnum ? static_cast(**jnum) : 0; + } + + SkString readString(const char label[]) override { + const auto* jstr = this->readProp(label); + + return SkString(jstr ? jstr->begin() : nullptr); + } + + size_t readFloatArray(const char label[], float dst[], size_t count) override { + const auto* jarr = this->readProp(label); + + if (!jarr) { + return 0; + } + + count = std::min(count, jarr->size()); + + for (size_t i = 0; i < count; ++i) { + const skjson::NumberValue* jnum = (*jarr)[i]; + dst[i] = jnum ? static_cast(**jnum) : 0.0f; + } + + return count; + } + + uint8_t readLength8() override { + return SkToU8(this->currentLength()); + } + + uint16_t readLength16() override { + return SkToU16(this->currentLength()); + } + + size_t currentLength() const { + const auto& ctx = fContextStack.back(); + return ctx.fContainer->is() + ? ctx.fContainer->as().size() + : ctx.fContainer->as().size(); + } + + bool openArray(const char label[]) override { + const auto* jarr = this->readProp(label); + if (!jarr) { + return false; + } + + fContextStack.push_back({jarr, 0}); + return true; + } + + void closeArray() override { + SkASSERT(fContextStack.back().fContainer->is()); + fContextStack.pop_back(); + } + + bool openObject(const char label[]) override { + const auto* jobj = this->readProp(label); + if (!jobj) { + return false; + } + + fContextStack.push_back({jobj, 0}); + return true; + } + + void closeObject() override { + SkASSERT(fContextStack.back().fContainer->is()); + fContextStack.pop_back(); + } + + // "Blocks" map to either objects or arrays. For object containers, the block type is encoded + // as the key; for array containers, the type is an explicit "type" property *inside* the block + // entry - which must be an object in this case. + BlockType openBlock() override { + switch (fContextStack.back().fContainer->getType()) { + case skjson::Value::Type::kObject: return this->openObjectBlock(); + case skjson::Value::Type::kArray: return this->openArrayBlock(); + default: break; + } + SkUNREACHABLE; + } + + BlockType openObjectBlock() { + auto& ctx = fContextStack.back(); + const auto& container = ctx.fContainer->as(); + + while (ctx.fMemberIndex < container.size()) { + const auto& m = container[ctx.fMemberIndex]; + if (m.fValue.is() || m.fValue.is()) { + const auto btype = block_type(m.fKey.begin()); + if (btype != BlockType::kUnknown) { + fContextStack.push_back({&m.fValue, 0}); + return btype; + } + } + + ctx.fMemberIndex++; + } + + return BlockType::kEoB; + } + + BlockType openArrayBlock() { + auto& ctx = fContextStack.back(); + const auto& container = ctx.fContainer->as(); + + while (ctx.fMemberIndex < container.size()) { + const auto& m = container[ctx.fMemberIndex]; + if (m.is()) { + if (const skjson::StringValue* jtype = m.as()["type"]) { + fContextStack.push_back({&m, 0}); + return block_type(jtype->begin()); + } + } + + ctx.fMemberIndex++; + } + + return BlockType::kEoB; + } + + void closeBlock() override { + SkASSERT(fContextStack.size() > 1); + fContextStack.pop_back(); + fContextStack.back().fMemberIndex++; + } + + struct ContextRec { + const skjson::Value* fContainer; + size_t fMemberIndex; + }; + + const std::unique_ptr fDom; + + std::vector fContextStack; +}; + +} // namespace + +std::unique_ptr MakeJsonStreamReader(const char json[], size_t len) { + auto dom = std::make_unique(json, len); + + return dom->root().is() ? std::make_unique(std::move(dom)) + : nullptr; +} + +} // namespace skrive::internal diff --git a/experimental/skrive/src/reader/StreamReader.cpp b/experimental/skrive/src/reader/StreamReader.cpp new file mode 100644 index 0000000000000..23abc4ce88651 --- /dev/null +++ b/experimental/skrive/src/reader/StreamReader.cpp @@ -0,0 +1,72 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/src/reader/StreamReader.h" + +#include "include/core/SkStream.h" + +#include + +namespace skrive::internal { + +static constexpr char kBinaryPrefix[] = "FLARE"; +static constexpr size_t kBinaryPrefixSize = sizeof(kBinaryPrefix) - 1; + +extern std::unique_ptr MakeJsonStreamReader(const char[], size_t); +extern std::unique_ptr MakeBinaryStreamReader(std::unique_ptr); + +std::unique_ptr StreamReader::Make(const sk_sp& data) { + if (data->size() >= kBinaryPrefixSize && + !memcmp(data->data(), kBinaryPrefix, kBinaryPrefixSize)) { + auto reader = SkMemoryStream::Make(data); + reader->skip(kBinaryPrefixSize); + + return MakeBinaryStreamReader(std::move(reader)); + } + + return MakeJsonStreamReader(static_cast(data->data()), data->size()); +} + +std::unique_ptr StreamReader::Make(std::unique_ptr stream) { + char buf[kBinaryPrefixSize]; + + if (stream->read(buf, kBinaryPrefixSize) == kBinaryPrefixSize) { + if (!strncmp(buf, kBinaryPrefix, kBinaryPrefixSize)) { + // binary stream - we can stay in streaming mode + return MakeBinaryStreamReader(std::move(stream)); + } + } else { + // stream too short to hold anything useful + return nullptr; + } + + if (!stream->rewind()) { + SkDebugf("!! failed to rewind stream.\n"); + return nullptr; + } + + // read to memory to figure what we're dealing with + return StreamReader::Make(SkData::MakeFromStream(stream.get(), stream->getLength())); +} + +SkV2 StreamReader::readV2(const char label[]) { + SkV2 v2{0,0}; + + this->readFloatArray(label, reinterpret_cast(&v2), 2); + + return v2; +} + +SkColor4f StreamReader::readColor(const char label[]) { + SkColor4f color{0,0,0,1}; + + this->readFloatArray(label, reinterpret_cast(&color), 4); + + return color; +} + +} // namespace skrive::internal diff --git a/experimental/skrive/src/reader/StreamReader.h b/experimental/skrive/src/reader/StreamReader.h new file mode 100644 index 0000000000000..cad8b55684cf0 --- /dev/null +++ b/experimental/skrive/src/reader/StreamReader.h @@ -0,0 +1,108 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkRive_Streamreader_DEFINED +#define SkRive_Streamreader_DEFINED + +#include + +#include "include/core/SkColor.h" +#include "include/core/SkM44.h" +#include "include/core/SkRefCnt.h" + +class SkStreamAsset; +class SkString; + +namespace skrive::internal { + +class StreamReader { +public: + virtual ~StreamReader() = default; + + static std::unique_ptr Make(std::unique_ptr); + static std::unique_ptr Make(const sk_sp&); + + enum class BlockType : uint8_t { + kUnknown = 0, + kComponents = 1, + kActorNode = 2, + + kActorShape = 100, + kActorPath = 101, + kColorFill = 102, + kColorStroke = 103, + kGradientFill = 104, + kGradientStroke = 105, + kRadialGradientFill = 106, + kRadialGradientStroke = 107, + kActorEllipse = 108, + kActorRectangle = 109, + kActorTriangle = 110, + kActorStar = 111, + kActorPolygon = 112, + kActorArtboard = 114, + kArtboards = 115, + + // End-of-block marker + kEoB = 0xff, + }; + + // Sequential block API + virtual BlockType openBlock() = 0; + virtual void closeBlock() = 0; + + // Keyed API + virtual bool openArray(const char label[]) = 0; + virtual void closeArray() = 0; + virtual bool openObject(const char label[]) = 0; + virtual void closeObject() = 0; + + + virtual uint16_t readId (const char label[]) = 0; + virtual bool readBool (const char label[]) = 0; + virtual float readFloat (const char label[]) = 0; + virtual uint8_t readUInt8 (const char label[]) = 0; + virtual uint16_t readUInt16(const char label[]) = 0; + virtual uint32_t readUInt32(const char label[]) = 0; + virtual SkString readString(const char label[]) = 0; + + virtual uint8_t readLength8 () = 0; + virtual uint16_t readLength16() = 0; + + SkColor4f readColor(const char label[]); + SkV2 readV2(const char label[]); + + class AutoBlock final { + public: + explicit AutoBlock(StreamReader* reader) + : fReader(reader) + , fType(reader->openBlock()) {} + + explicit AutoBlock(const std::unique_ptr& reader) + : fReader(reader.get()) + , fType(reader->openBlock()) {} + + ~AutoBlock() { + if (fType != BlockType::kEoB) { + fReader->closeBlock(); + } + } + + BlockType type() const { return fType; } + + private: + StreamReader* fReader; + BlockType fType; + }; + +protected: + virtual size_t readFloatArray(const char label[], float dst[], size_t count) = 0; +}; + +} + +#endif // SkRiveStreamreader_DEFINED diff --git a/experimental/skrive/tests/BinaryReader.cpp b/experimental/skrive/tests/BinaryReader.cpp new file mode 100644 index 0000000000000..b4930399ab4a8 --- /dev/null +++ b/experimental/skrive/tests/BinaryReader.cpp @@ -0,0 +1,73 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "tests/Test.h" + +using namespace skrive::internal; + +DEF_TEST(SkRive_BinaryReader, reporter) { + static constexpr uint8_t bin[] = { + 0x46, 0x4c, 0x41, 0x52, 0x45, // 'FLARE' + 0x12, 0x00, 0x00, 0x00, // version: 18 + 0x73, // block type: kArtboards (115) + 0x38, 0x00, 0x00, 0x00, // block size: 56 + 0x01, 0x00, // container count: 1 + 0x72, // block type: kActorArtboard (114) + 0x31, 0x00, 0x00, 0x00, // block size: 49 + 0x04, 0x00, 0x00, 0x00, // name len: 4 + 0x46, 0x6f, 0x6f, 0x6f, // name: 'Fooo' + // translation: + 0x00, 0x00, 0x00, 0x00, // 0 + 0x00, 0x00, 0x00, 0x00, // 0 + 0x00, 0xc0, 0x57, 0x44, // width: 863.0 + 0x00, 0xc0, 0x60, 0x44, // height: 899.0 + // origin: + 0x00, 0x00, 0x00, 0x00, // 0 + 0x00, 0x00, 0x00, 0x00, // 0 + 0x01, // clipContents: true + // color: + 0x00, 0x00, 0x00, 0x3f, // 0.5 + 0x00, 0x00, 0x00, 0x3f, // 0.5 + 0x00, 0x00, 0x00, 0x3f, // 0.5 + 0x00, 0x00, 0x80, 0x3f, // 1.0 + }; + + auto sr = StreamReader::Make(SkData::MakeWithoutCopy(bin, sizeof(bin))); + + REPORTER_ASSERT(reporter, sr); + REPORTER_ASSERT(reporter, sr->readUInt32("version") == 18); + { + StreamReader::AutoBlock ab(sr); + REPORTER_ASSERT(reporter, ab.type() == StreamReader::BlockType::kArtboards); + REPORTER_ASSERT(reporter, sr->readLength16() == 1); + + { + StreamReader::AutoBlock ab(sr); + REPORTER_ASSERT(reporter, ab.type() == StreamReader::BlockType::kActorArtboard); + REPORTER_ASSERT(reporter, sr->readString("name").equals("Fooo")); + REPORTER_ASSERT(reporter, sr->readV2("translation") == (SkV2{0,0})); + REPORTER_ASSERT(reporter, sr->readFloat("width" ) == 863); + REPORTER_ASSERT(reporter, sr->readFloat("height") == 899); + REPORTER_ASSERT(reporter, sr->readV2("origin") == (SkV2{0,0})); + REPORTER_ASSERT(reporter, sr->readBool("clipContents")); + REPORTER_ASSERT(reporter, sr->readColor("color") == (SkColor4f{0.5f,0.5f,0.5f,1})); + + REPORTER_ASSERT(reporter, sr->readString("INVALID").equals("")); + REPORTER_ASSERT(reporter, sr->readFloat("INVALID" ) == 0); + REPORTER_ASSERT(reporter, !sr->readBool("INVALID")); + } + { + StreamReader::AutoBlock ab(sr); + REPORTER_ASSERT(reporter, ab.type() == StreamReader::BlockType::kEoB); + } + } + { + StreamReader::AutoBlock ab(sr); + REPORTER_ASSERT(reporter, ab.type() == StreamReader::BlockType::kEoB); + } +} diff --git a/experimental/skrive/tests/DomTypes.cpp b/experimental/skrive/tests/DomTypes.cpp new file mode 100644 index 0000000000000..116317db62f78 --- /dev/null +++ b/experimental/skrive/tests/DomTypes.cpp @@ -0,0 +1,63 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/include/SkRive.h" +#include "tests/Test.h" + +template +void check_type(skiatest::Reporter* reporter, const sk_sp& node, bool expected) { + REPORTER_ASSERT(reporter, node->template is() == expected); + REPORTER_ASSERT(reporter, !!static_cast(*node.get()) == expected); +} + +DEF_TEST(SkRive_DomTypes, reporter) { + { + auto node = sk_make_sp(); + + check_type(reporter, node, true); + check_type(reporter, node, true); + check_type(reporter, node, true); + check_type(reporter, node, false); + check_type(reporter, node, false); + } + + { + auto node = sk_make_sp(); + + check_type(reporter, node, true); + check_type(reporter, node, true); + check_type(reporter, node, true); + check_type(reporter, node, true); + check_type(reporter, node, true); + } + + { + auto node = sk_make_sp(SkPaint::Style::kFill_Style); + + check_type(reporter, node, true); + check_type(reporter, node, false); + check_type(reporter, node, false); + check_type(reporter, node, false); + check_type(reporter, node, false); + check_type(reporter, node, true ); + check_type(reporter, node, true ); + } + + { + auto node = sk_make_sp(); + + check_type(reporter, node, true); + check_type(reporter, node, true); + check_type(reporter, node, true); + check_type(reporter, node, false); + check_type(reporter, node, false); + check_type(reporter, node, false ); + check_type(reporter, node, false ); + check_type(reporter, node, true); + check_type(reporter, node, true); + } +} diff --git a/experimental/skrive/tests/JsonReader.cpp b/experimental/skrive/tests/JsonReader.cpp new file mode 100644 index 0000000000000..11e28c2071ffa --- /dev/null +++ b/experimental/skrive/tests/JsonReader.cpp @@ -0,0 +1,63 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "experimental/skrive/src/reader/StreamReader.h" +#include "tests/Test.h" + +using namespace skrive::internal; + +DEF_TEST(SkRive_JsonReader, reporter) { + static constexpr char json[] = R"({ + "version": 24, + "artboards": [ + { + "name" : "artboard 1", + "translation" : [ 24, 42 ], + "width" : 500, + "height" : 250, + "origin" : [ 100, 100 ], + "clipContents": true, + "color" : [ 1, 1, 0, 1], + "type" : "artboard" + } + ] + })"; + + auto sr = StreamReader::Make(SkData::MakeWithoutCopy(json, strlen(json))); + + REPORTER_ASSERT(reporter, sr); + REPORTER_ASSERT(reporter, sr->readUInt32("version") == 24); + { + StreamReader::AutoBlock ab(sr); + REPORTER_ASSERT(reporter, ab.type() == StreamReader::BlockType::kArtboards); + REPORTER_ASSERT(reporter, sr->readLength16() == 1); + + { + StreamReader::AutoBlock ab(sr); + REPORTER_ASSERT(reporter, ab.type() == StreamReader::BlockType::kActorArtboard); + REPORTER_ASSERT(reporter, sr->readString("name").equals("artboard 1")); + REPORTER_ASSERT(reporter, sr->readV2("translation") == (SkV2{24,42})); + REPORTER_ASSERT(reporter, sr->readFloat("width" ) == 500); + REPORTER_ASSERT(reporter, sr->readFloat("height") == 250); + REPORTER_ASSERT(reporter, sr->readV2("origin") == (SkV2{100,100})); + REPORTER_ASSERT(reporter, sr->readBool("clipContents")); + REPORTER_ASSERT(reporter, sr->readColor("color") == (SkColor4f{1,1,0,1})); + + REPORTER_ASSERT(reporter, sr->readString("INVALID").equals("")); + REPORTER_ASSERT(reporter, sr->readFloat("INVALID" ) == 0); + REPORTER_ASSERT(reporter, !sr->readBool("INVALID")); + } + { + StreamReader::AutoBlock ab(sr); + REPORTER_ASSERT(reporter, ab.type() == StreamReader::BlockType::kEoB); + } + } + { + StreamReader::AutoBlock ab(sr); + REPORTER_ASSERT(reporter, ab.type() == StreamReader::BlockType::kEoB); + } +} diff --git a/experimental/tools/web_to_mskp b/experimental/tools/web_to_mskp index c2df8a30cca08..ba3d0fda7538d 100755 --- a/experimental/tools/web_to_mskp +++ b/experimental/tools/web_to_mskp @@ -12,12 +12,14 @@ else EXAMPLE='"/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"' fi -if [ $# -ne 3 ] || ! [ -x "$1" ]; then +if [ $# -lt 3 ] || ! [ -x "$1" ]; then cat >&2 << EOF usage: $0 CHROMIUM_BINARY SOURCE_URL DESTINATION_PATH + $0 CHROMIUM_BINARY SOURCE_URL DESTINATION_PATH OPTIONAL_WAIT_TIME # 5 second sleep before capture e.g: $0 $EXAMPLE https://www.google.com/ /tmp/foo.mskp + $0 $EXAMPLE https://www.google.com/ /tmp/foo.mskp 5 EOF exit 1 fi @@ -25,10 +27,11 @@ fi EXE="$1" URL="$2" DST="$3" +SLP=${4:-0} # sleep in seconds before capture. 4th param iff provided, else 0. CRASH=~/tmp/headless_crash_dumps mkdir -p "$CRASH" -printf 'chrome.gpuBenchmarking.printPagesToSkPictures("%s");\nquit\n' "$DST" | \ +(sleep $SLP; printf 'chrome.gpuBenchmarking.printPagesToSkPictures("%s");\nquit\n' "$DST") | \ "$EXE" --headless --disable-gpu --repl -crash-dumps-dir="$CRASH" \ --no-sandbox --enable-gpu-benchmarking "$URL" diff --git a/experimental/tools/web_to_skp b/experimental/tools/web_to_skp index cde5dce645c17..04dfcac78e00d 100755 --- a/experimental/tools/web_to_skp +++ b/experimental/tools/web_to_skp @@ -12,12 +12,14 @@ else EXAMPLE='"/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"' fi -if [ $# -ne 3 ] || ! [ -x "$1" ]; then +if [ $# -lt 3 ] || ! [ -x "$1" ]; then cat >&2 << EOF usage: $0 CHROMIUM_BINARY SOURCE_URL DESTINATION_DIRECTORY + $0 CHROMIUM_BINARY SOURCE_URL DESTINATION_DIRECTORY OPTIONAL_WAIT_TIME # 5 second sleep before capture e.g: $0 $EXAMPLE https://www.google.com/ /tmp/ + $0 $EXAMPLE https://www.google.com/ /tmp/ 5 EOF exit 1 fi @@ -25,10 +27,11 @@ fi EXE="$1" URL="$2" DST="$3" +SLP=${4:-0} # sleep in seconds before capture. 4th param iff provided, else 0. CRASH=~/tmp/headless_crash_dumps mkdir -p "$CRASH" "$DST" -printf 'chrome.gpuBenchmarking.printToSkPicture("%s");\nquit\n' "$DST" | \ +(sleep $SLP; printf 'chrome.gpuBenchmarking.printToSkPicture("%s");\nquit\n' "$DST") | \ "$EXE" --headless --disable-gpu --repl -crash-dumps-dir="$CRASH" \ --no-sandbox --enable-gpu-benchmarking "$URL" diff --git a/experimental/wasm-skp-debugger/compile.sh b/experimental/wasm-skp-debugger/compile.sh index 365891d793af5..462ae3d9a9399 100755 --- a/experimental/wasm-skp-debugger/compile.sh +++ b/experimental/wasm-skp-debugger/compile.sh @@ -107,7 +107,9 @@ echo "Compiling bitcode" skia_enable_skshaper=false \ skia_enable_ccpr=false \ skia_enable_nvpr=false \ - skia_enable_fontmgr_empty=false \ + skia_enable_fontmgr_custom_directory=false \ + skia_enable_fontmgr_custom_embedded=true \ + skia_enable_fontmgr_custom_empty=false \ skia_enable_pdf=false" # Build all the libs, we'll link the appropriate ones down below diff --git a/fuzz/FuzzCanvas.cpp b/fuzz/FuzzCanvas.cpp index 6f87c9d4ab587..f486a6ce50792 100644 --- a/fuzz/FuzzCanvas.cpp +++ b/fuzz/FuzzCanvas.cpp @@ -23,6 +23,7 @@ #include "include/core/SkTypeface.h" #include "include/docs/SkPDFDocument.h" #include "include/private/SkTo.h" +#include "include/svg/SkSVGCanvas.h" #include "include/utils/SkNullCanvas.h" #include "src/core/SkOSFile.h" #include "src/core/SkPicturePriv.h" @@ -49,6 +50,7 @@ #include "tools/flags/CommandLineFlags.h" #ifdef SK_GL +#include "include/gpu/GrDirectContext.h" #include "include/gpu/gl/GrGLFunctions.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/gl/GrGLGpu.h" @@ -957,6 +959,16 @@ static SkTDArray make_fuzz_text(Fuzz* fuzz, const SkFont& font, SkTextE return array; } +static std::string make_fuzz_string(Fuzz* fuzz) { + int len; + fuzz->nextRange(&len, 0, kMaxGlyphCount); + std::string str(len, 0); + for (int i = 0; i < len; i++) { + fuzz->next(&str[i]); + } + return str; +} + static sk_sp make_fuzz_textblob(Fuzz* fuzz) { SkTextBlobBuilder textBlobBuilder; int8_t runCount; @@ -1016,7 +1028,7 @@ static void fuzz_canvas(Fuzz* fuzz, SkCanvas* canvas, int depth = 9) { SkPaint paint; SkFont font; unsigned drawCommand; - fuzz->nextRange(&drawCommand, 0, 53); + fuzz->nextRange(&drawCommand, 0, 62); switch (drawCommand) { case 0: canvas->flush(); @@ -1488,6 +1500,93 @@ static void fuzz_canvas(Fuzz* fuzz, SkCanvas* canvas, int depth = 9) { blendMode, paint); break; } + case 54: { + SkColor color; + SkBlendMode blendMode; + fuzz->nextRange(&blendMode, 0, SkBlendMode::kSrcOver); + fuzz->next(&color); + canvas->drawColor(color, blendMode); + break; + } + case 55: { + SkColor4f color; + SkBlendMode blendMode; + float R, G, B, Alpha; + fuzz->nextRange(&blendMode, 0, SkBlendMode::kSrcOver); + fuzz->nextRange(&R, -1, 2); + fuzz->nextRange(&G, -1, 2); + fuzz->nextRange(&B, -1, 2); + fuzz->nextRange(&Alpha, 0, 1); + color = {R, G, B, Alpha}; + canvas->drawColor(color, blendMode); + break; + } + case 56: { + fuzz_paint(fuzz, &paint, depth - 1); + SkPoint p0, p1; + fuzz->next(&p0, &p1); + canvas->drawLine(p0, p1, paint); + break; + } + case 57: { + fuzz_paint(fuzz, &paint, depth - 1); + SkIRect r; + fuzz->next(&r); + canvas->drawIRect(r, paint); + break; + } + case 58: { + fuzz_paint(fuzz, &paint, depth - 1); + SkScalar radius; + SkPoint center; + fuzz->next(&radius, ¢er); + canvas->drawCircle(center, radius, paint); + break; + } + case 59: { + fuzz_paint(fuzz, &paint, depth - 1); + SkRect oval; + SkScalar startAngle, sweepAngle; + bool useCenter; + fuzz->next(&oval, &startAngle, &sweepAngle, &useCenter); + canvas->drawArc(oval, startAngle, sweepAngle, useCenter, paint); + break; + } + case 60: { + fuzz_paint(fuzz, &paint, depth - 1); + SkRect rect; + SkScalar rx, ry; + fuzz->next(&rect, &rx, &ry); + canvas->drawRoundRect(rect, rx, ry, paint); + break; + } + case 61: { + fuzz_paint(fuzz, &paint, depth - 1); + font = fuzz_font(fuzz); + std::string str = make_fuzz_string(fuzz); + SkScalar x, y; + fuzz->next(&x, &y); + canvas->drawString(str.c_str(), x, y, font, paint); + break; + } + case 62: { + fuzz_paint(fuzz, &paint, depth - 1); + SkPoint cubics[12]; + SkColor colors[4]; + SkPoint texCoords[4]; + bool useTexCoords; + fuzz->nextN(cubics, 12); + fuzz->nextN(colors, 4); + fuzz->next(&useTexCoords); + if (useTexCoords) { + fuzz->nextN(texCoords, 4); + } + SkBlendMode mode; + fuzz->nextEnum(&mode, SkBlendMode::kLastMode); + canvas->drawPatch(cubics, colors, useTexCoords ? texCoords : nullptr + , mode, paint); + break; + } default: SkASSERT(false); break; @@ -1609,7 +1708,7 @@ DEF_FUZZ(SerializedImageFilter, fuzz) { #ifdef SK_GL -static void dump_GPU_info(GrContext* context) { +static void dump_GPU_info(GrDirectContext* context) { const GrGLInterface* gl = static_cast(context->priv().getGpu()) ->glInterface(); const GrGLubyte* output; @@ -1623,7 +1722,7 @@ static void dump_GPU_info(GrContext* context) { SkDebugf("GL_VERSION %s\n", (const char*) output); } -static void fuzz_ganesh(Fuzz* fuzz, GrContext* context) { +static void fuzz_ganesh(Fuzz* fuzz, GrDirectContext* context) { SkASSERT(context); auto surface = SkSurface::MakeRenderTarget( context, @@ -1635,7 +1734,7 @@ static void fuzz_ganesh(Fuzz* fuzz, GrContext* context) { DEF_FUZZ(NativeGLCanvas, fuzz) { sk_gpu_test::GrContextFactory f; - GrContext* context = f.get(sk_gpu_test::GrContextFactory::kGL_ContextType); + auto context = f.get(sk_gpu_test::GrContextFactory::kGL_ContextType); if (!context) { context = f.get(sk_gpu_test::GrContextFactory::kGLES_ContextType); } @@ -1673,3 +1772,10 @@ DEF_FUZZ(_DumpCanvas, fuzz) { sk_sp json = stream.detachAsData(); fwrite(json->data(), json->size(), 1, stdout); } + +DEF_FUZZ(SVGCanvas, fuzz) { + SkNullWStream stream; + SkRect bounds = SkRect::MakeIWH(150, 150); + std::unique_ptr canvas = SkSVGCanvas::Make(bounds, &stream); + fuzz_canvas(fuzz, canvas.get()); +} diff --git a/fuzz/FuzzMain.cpp b/fuzz/FuzzMain.cpp index 245b8ff3c6c61..f480c1d2a60b9 100644 --- a/fuzz/FuzzMain.cpp +++ b/fuzz/FuzzMain.cpp @@ -257,6 +257,7 @@ static std::map cf_api_map = { {"api_polyutils", "PolyUtils"}, {"api_raster_n32_canvas", "RasterN32Canvas"}, {"api_skdescriptor", "SkDescriptor"}, + {"api_svg_canvas", "SVGCanvas"}, {"jpeg_encoder", "JPEGEncoder"}, {"png_encoder", "PNGEncoder"}, {"skia_pathop_fuzzer", "LegacyChromiumPathop"}, @@ -477,6 +478,7 @@ static void fuzz_img(sk_sp bytes, uint8_t scale, uint8_t mode) { SkDebugf("Incompatible colortype conversion\n"); // Crash to allow afl-fuzz to know this was a bug. raise(SIGSEGV); + break; default: SkDebugf("[terminated] Couldn't getPixels.\n"); return; @@ -607,7 +609,7 @@ static void fuzz_img(sk_sp bytes, uint8_t scale, uint8_t mode) { return; } // If the first subset succeeded, a later one should not fail. - // fall through to failure + [[fallthrough]]; case SkCodec::kUnimplemented: if (0 == (x|y)) { // First subset is okay to return unimplemented. @@ -615,7 +617,7 @@ static void fuzz_img(sk_sp bytes, uint8_t scale, uint8_t mode) { return; } // If the first subset succeeded, why would a later one fail? - // fall through to failure + [[fallthrough]]; default: SkDebugf("[terminated] subset codec failed to decode (%d, %d, %d, %d) " "with dimensions (%d x %d)\t error %d\n", diff --git a/fuzz/oss_fuzz/FuzzAPISVGCanvas.cpp b/fuzz/oss_fuzz/FuzzAPISVGCanvas.cpp new file mode 100644 index 0000000000000..664253937d952 --- /dev/null +++ b/fuzz/oss_fuzz/FuzzAPISVGCanvas.cpp @@ -0,0 +1,16 @@ +/* + * Copyright 2020 Google, LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "fuzz/Fuzz.h" + +void fuzz_SVGCanvas(Fuzz* f); + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + auto fuzz = Fuzz(SkData::MakeWithoutCopy(data, size)); + fuzz_SVGCanvas(&fuzz); + return 0; +} diff --git a/fuzz/oss_fuzz/FuzzImageFilterDeserialize.cpp b/fuzz/oss_fuzz/FuzzImageFilterDeserialize.cpp index de9e9bfcc5e05..ef22d4627cc32 100644 --- a/fuzz/oss_fuzz/FuzzImageFilterDeserialize.cpp +++ b/fuzz/oss_fuzz/FuzzImageFilterDeserialize.cpp @@ -41,6 +41,9 @@ void FuzzImageFilterDeserialize(sk_sp bytes) { #if defined(IS_FUZZING_WITH_LIBFUZZER) extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (size > 10024) { + return 0; + } gSkFontMgr_DefaultFactory = &ToolUtils::MakePortableFontMgr; auto bytes = SkData::MakeWithoutCopy(data, size); FuzzImageFilterDeserialize(bytes); diff --git a/fuzz/oss_fuzz/FuzzIncrementalImage.cpp b/fuzz/oss_fuzz/FuzzIncrementalImage.cpp index 2867a893473d9..55e6d33543f76 100644 --- a/fuzz/oss_fuzz/FuzzIncrementalImage.cpp +++ b/fuzz/oss_fuzz/FuzzIncrementalImage.cpp @@ -48,7 +48,7 @@ bool FuzzIncrementalImageDecode(sk_sp bytes) { #if defined(IS_FUZZING_WITH_LIBFUZZER) extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { if (size > 10240) { - return size; + return 0; } auto bytes = SkData::MakeWithoutCopy(data, size); FuzzIncrementalImageDecode(bytes); diff --git a/gm/asyncrescaleandread.cpp b/gm/asyncrescaleandread.cpp index f119144b19242..43e8167596f2b 100644 --- a/gm/asyncrescaleandread.cpp +++ b/gm/asyncrescaleandread.cpp @@ -13,24 +13,24 @@ #include "include/core/SkSurface.h" #include "include/core/SkYUVAIndex.h" #include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkConvertPixels.h" #include "src/core/SkScopeExit.h" -#include "src/gpu/GrContextPriv.h" #include "tools/Resources.h" #include "tools/ToolUtils.h" namespace { struct AsyncContext { bool fCalled = false; - std::unique_ptr fResult; + std::unique_ptr fResult; }; } // anonymous namespace // Making this a lambda in the test functions caused: // "error: cannot compile this forwarded non-trivially copyable parameter yet" // on x86/Win/Clang bot, referring to 'result'. -static void async_callback(void* c, std::unique_ptr result) { +static void async_callback(void* c, std::unique_ptr result) { auto context = static_cast(c); context->fResult = std::move(result); context->fCalled = true; @@ -38,61 +38,70 @@ static void async_callback(void* c, std::unique_ptr do_read_and_scale(SkSurface* surface, const SkIRect& srcRect, - const SkImageInfo& ii, SkSurface::RescaleGamma rescaleGamma, +template +static sk_sp do_read_and_scale(Src* src, + GrContext* context, + const SkIRect& srcRect, + const SkImageInfo& ii, + SkImage::RescaleGamma rescaleGamma, SkFilterQuality quality) { - auto* context = new AsyncContext(); - surface->asyncRescaleAndReadPixels(ii, srcRect, rescaleGamma, quality, async_callback, context); - if (auto ctx = surface->getContext()) { - ctx->submit(); + auto* asyncContext = new AsyncContext(); + src->asyncRescaleAndReadPixels(ii, srcRect, rescaleGamma, quality, async_callback, + asyncContext); + if (context) { + context->submit(); } - while (!context->fCalled) { + while (!asyncContext->fCalled) { // Only GPU should actually be asynchronous. - SkASSERT(surface->getCanvas()->getGrContext()); - surface->getCanvas()->getGrContext()->checkAsyncWorkCompletion(); + SkASSERT(context); + context->checkAsyncWorkCompletion(); } - if (!context->fResult) { + if (!asyncContext->fResult) { return nullptr; } - SkPixmap pixmap(ii, context->fResult->data(0), context->fResult->rowBytes(0)); + SkPixmap pixmap(ii, asyncContext->fResult->data(0), asyncContext->fResult->rowBytes(0)); auto releasePixels = [](const void*, void* c) { delete static_cast(c); }; - return SkImage::MakeFromRaster(pixmap, releasePixels, context); + return SkImage::MakeFromRaster(pixmap, releasePixels, asyncContext); } -static sk_sp do_read_and_scale_yuv(SkSurface* surface, SkYUVColorSpace yuvCS, - const SkIRect& srcRect, SkISize size, - SkSurface::RescaleGamma rescaleGamma, - SkFilterQuality quality, SkScopeExit* cleanup) { +template +static sk_sp do_read_and_scale_yuv(Src* src, + GrContext* context, + SkYUVColorSpace yuvCS, + const SkIRect& srcRect, + SkISize size, + SkImage::RescaleGamma rescaleGamma, + SkFilterQuality quality, + SkScopeExit* cleanup) { SkASSERT(!(size.width() & 0b1) && !(size.height() & 0b1)); SkISize uvSize = {size.width()/2, size.height()/2}; SkImageInfo yII = SkImageInfo::Make(size, kGray_8_SkColorType, kPremul_SkAlphaType); SkImageInfo uvII = SkImageInfo::Make(uvSize, kGray_8_SkColorType, kPremul_SkAlphaType); - AsyncContext context; - surface->asyncRescaleAndReadPixelsYUV420(yuvCS, SkColorSpace::MakeSRGB(), srcRect, size, - rescaleGamma, quality, async_callback, &context); - if (auto ctx = surface->getContext()) { - ctx->submit(); + AsyncContext asyncContext; + src->asyncRescaleAndReadPixelsYUV420(yuvCS, SkColorSpace::MakeSRGB(), srcRect, size, + rescaleGamma, quality, async_callback, &asyncContext); + if (context) { + context->submit(); } - while (!context.fCalled) { + while (!asyncContext.fCalled) { // Only GPU should actually be asynchronous. - SkASSERT(surface->getCanvas()->getGrContext()); - surface->getCanvas()->getGrContext()->checkAsyncWorkCompletion(); + SkASSERT(context); + context->checkAsyncWorkCompletion(); } - if (!context.fResult) { + if (!asyncContext.fResult) { return nullptr; } - auto* gr = surface->getCanvas()->getGrContext(); GrBackendTexture backendTextures[3]; - SkPixmap yPM(yII, context.fResult->data(0), context.fResult->rowBytes(0)); - SkPixmap uPM(uvII, context.fResult->data(1), context.fResult->rowBytes(1)); - SkPixmap vPM(uvII, context.fResult->data(2), context.fResult->rowBytes(2)); + SkPixmap yPM(yII, asyncContext.fResult->data(0), asyncContext.fResult->rowBytes(0)); + SkPixmap uPM(uvII, asyncContext.fResult->data(1), asyncContext.fResult->rowBytes(1)); + SkPixmap vPM(uvII, asyncContext.fResult->data(2), asyncContext.fResult->rowBytes(2)); - backendTextures[0] = gr->createBackendTexture(yPM, GrRenderable::kNo, GrProtected::kNo); - backendTextures[1] = gr->createBackendTexture(uPM, GrRenderable::kNo, GrProtected::kNo); - backendTextures[2] = gr->createBackendTexture(vPM, GrRenderable::kNo, GrProtected::kNo); + backendTextures[0] = context->createBackendTexture(yPM, GrRenderable::kNo, GrProtected::kNo); + backendTextures[1] = context->createBackendTexture(uPM, GrRenderable::kNo, GrProtected::kNo); + backendTextures[2] = context->createBackendTexture(vPM, GrRenderable::kNo, GrProtected::kNo); SkYUVAIndex indices[4] = { { 0, SkColorChannel::kR}, @@ -101,27 +110,31 @@ static sk_sp do_read_and_scale_yuv(SkSurface* surface, SkYUVColorSpace {-1, SkColorChannel::kR} }; - *cleanup = {[gr, backendTextures] { - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - gr->flush(flushInfo); - gr->submit(true); - gr->deleteBackendTexture(backendTextures[0]); - gr->deleteBackendTexture(backendTextures[1]); - gr->deleteBackendTexture(backendTextures[2]); + *cleanup = {[context, backendTextures] { + context->flush(); + context->submit(true); + context->deleteBackendTexture(backendTextures[0]); + context->deleteBackendTexture(backendTextures[1]); + context->deleteBackendTexture(backendTextures[2]); }}; - return SkImage::MakeFromYUVATextures(gr, yuvCS, backendTextures, indices, size, + return SkImage::MakeFromYUVATextures(context, yuvCS, backendTextures, indices, size, kTopLeft_GrSurfaceOrigin, SkColorSpace::MakeSRGB()); } // Draws a grid of rescales. The columns are none, low, and high filter quality. The rows are // rescale in src gamma and rescale in linear gamma. -static skiagm::DrawResult do_rescale_grid(SkCanvas* canvas, SkSurface* surface, - const SkIRect& srcRect, SkISize newSize, bool doYUV420, - SkString* errorMsg, int pad = 0) { +template +static skiagm::DrawResult do_rescale_grid(SkCanvas* canvas, + Src* src, + GrContext* context, + const SkIRect& srcRect, + SkISize newSize, + bool doYUV420, + SkString* errorMsg, + int pad = 0) { if (doYUV420) { - if (!canvas->getGrContext() || !canvas->getGrContext()->priv().asDirectContext()) { + if (!canvas->recordingContext() || !canvas->recordingContext()->asDirectContext()) { errorMsg->printf("YUV420 only supported on direct GPU for now."); return skiagm::DrawResult::kSkip; } @@ -134,13 +147,13 @@ static skiagm::DrawResult do_rescale_grid(SkCanvas* canvas, SkSurface* surface, SkYUVColorSpace yuvColorSpace = kRec601_SkYUVColorSpace; canvas->save(); - for (auto gamma : {SkSurface::RescaleGamma::kSrc, SkSurface::RescaleGamma::kLinear}) { + for (auto gamma : {SkImage::RescaleGamma::kSrc, SkImage::RescaleGamma::kLinear}) { canvas->save(); for (auto quality : {kNone_SkFilterQuality, kLow_SkFilterQuality, kHigh_SkFilterQuality}) { SkScopeExit cleanup; sk_sp result; if (doYUV420) { - result = do_read_and_scale_yuv(surface, yuvColorSpace, srcRect, newSize, gamma, + result = do_read_and_scale_yuv(src, context, yuvColorSpace, srcRect, newSize, gamma, quality, &cleanup); if (!result) { errorMsg->printf("YUV420 async call failed. Allowed for now."); @@ -149,7 +162,7 @@ static skiagm::DrawResult do_rescale_grid(SkCanvas* canvas, SkSurface* surface, int nextCS = static_cast(yuvColorSpace + 1) % (kLastEnum_SkYUVColorSpace + 1); yuvColorSpace = static_cast(nextCS); } else { - result = do_read_and_scale(surface, srcRect, ii, gamma, quality); + result = do_read_and_scale(src, context, srcRect, ii, gamma, quality); if (!result) { errorMsg->printf("async read call failed."); return skiagm::DrawResult::kFail; @@ -165,9 +178,13 @@ static skiagm::DrawResult do_rescale_grid(SkCanvas* canvas, SkSurface* surface, return skiagm::DrawResult::kOk; } -static skiagm::DrawResult do_rescale_image_grid(SkCanvas* canvas, const char* imageFile, - const SkIRect& srcRect, SkISize newSize, - bool doYUV420, SkString* errorMsg) { +static skiagm::DrawResult do_rescale_image_grid(SkCanvas* canvas, + const char* imageFile, + const SkIRect& srcRect, + SkISize newSize, + bool doSurface, + bool doYUV420, + SkString* errorMsg) { auto image = GetResourceAsImage(imageFile); if (!image) { errorMsg->printf("Could not load image file %s.", imageFile); @@ -177,54 +194,89 @@ static skiagm::DrawResult do_rescale_image_grid(SkCanvas* canvas, const char* im *errorMsg = "Not supported on recording/vector backends."; return skiagm::DrawResult::kSkip; } - // Turn the image into a surface in order to call the read and rescale API - auto surfInfo = image->imageInfo().makeDimensions(image->dimensions()); - auto surface = canvas->makeSurface(surfInfo); - if (!surface && surfInfo.colorType() == kBGRA_8888_SkColorType) { - surfInfo = surfInfo.makeColorType(kRGBA_8888_SkColorType); - surface = canvas->makeSurface(surfInfo); - } - if (!surface) { - *errorMsg = "Could not create surface for image."; - // When testing abandoned GrContext we expect surface creation to fail. - if (canvas->getGrContext() && canvas->getGrContext()->abandoned()) { - return skiagm::DrawResult::kSkip; + if (doSurface) { + // Turn the image into a surface in order to call the read and rescale API + auto surfInfo = image->imageInfo().makeDimensions(image->dimensions()); + auto surface = canvas->makeSurface(surfInfo); + if (!surface && surfInfo.colorType() == kBGRA_8888_SkColorType) { + surfInfo = surfInfo.makeColorType(kRGBA_8888_SkColorType); + surface = canvas->makeSurface(surfInfo); + } + if (!surface) { + *errorMsg = "Could not create surface for image."; + // When testing abandoned GrContext we expect surface creation to fail. + if (canvas->recordingContext() && canvas->recordingContext()->abandoned()) { + return skiagm::DrawResult::kSkip; + } + return skiagm::DrawResult::kFail; + } + SkPaint paint; + paint.setBlendMode(SkBlendMode::kSrc); + surface->getCanvas()->drawImage(image, 0, 0, &paint); + return do_rescale_grid(canvas, surface.get(), canvas->getGrContext(), srcRect, newSize, + doYUV420, errorMsg); + } else if (auto ctx = canvas->getGrContext()) { + image = image->makeTextureImage(ctx); + if (!image) { + *errorMsg = "Could not create image."; + // When testing abandoned GrContext we expect surface creation to fail. + if (canvas->recordingContext() && canvas->recordingContext()->abandoned()) { + return skiagm::DrawResult::kSkip; + } + return skiagm::DrawResult::kFail; } - return skiagm::DrawResult::kFail; } - SkPaint paint; - paint.setBlendMode(SkBlendMode::kSrc); - surface->getCanvas()->drawImage(image, 0, 0, &paint); - return do_rescale_grid(canvas, surface.get(), srcRect, newSize, doYUV420, errorMsg); + return do_rescale_grid(canvas, image.get(), canvas->getGrContext(), srcRect, newSize, doYUV420, + errorMsg); } -#define DEF_RESCALE_AND_READ_GM(IMAGE_FILE, TAG, SRC_RECT, W, H) \ - DEF_SIMPLE_GM_CAN_FAIL(async_rescale_and_read_##TAG, canvas, errorMsg, 3 * W, 2 * H) { \ - ToolUtils::draw_checkerboard(canvas, SK_ColorDKGRAY, SK_ColorLTGRAY, 25); \ - return do_rescale_image_grid(canvas, #IMAGE_FILE, SRC_RECT, {W, H}, false, errorMsg); \ +#define DEF_RESCALE_AND_READ_SURF_GM(IMAGE_FILE, TAG, SRC_RECT, W, H) \ + DEF_SIMPLE_GM_CAN_FAIL(async_rescale_and_read_##TAG, canvas, errorMsg, 3 * W, 2 * H) { \ + ToolUtils::draw_checkerboard(canvas, SK_ColorDKGRAY, SK_ColorLTGRAY, 25); \ + return do_rescale_image_grid(canvas, #IMAGE_FILE, SRC_RECT, {W, H}, true, false, \ + errorMsg); \ } -#define DEF_RESCALE_AND_READ_YUV_GM(IMAGE_FILE, TAG, SRC_RECT, W, H) \ - DEF_SIMPLE_GM_CAN_FAIL(async_rescale_and_read_yuv420_##TAG, canvas, errorMsg, 3 * W, 2 * H) { \ - ToolUtils::draw_checkerboard(canvas, SK_ColorDKGRAY, SK_ColorLTGRAY, 25); \ - return do_rescale_image_grid(canvas, #IMAGE_FILE, SRC_RECT, {W, H}, true, errorMsg); \ +#define DEF_RESCALE_AND_READ_YUV_SURF_GM(IMAGE_FILE, TAG, SRC_RECT, W, H) \ + DEF_SIMPLE_GM_CAN_FAIL(async_rescale_and_read_yuv420_##TAG, canvas, errorMsg, 3 * W, 2 * H) { \ + ToolUtils::draw_checkerboard(canvas, SK_ColorDKGRAY, SK_ColorLTGRAY, 25); \ + return do_rescale_image_grid(canvas, #IMAGE_FILE, SRC_RECT, {W, H}, true, true, errorMsg); \ } -DEF_RESCALE_AND_READ_YUV_GM(images/yellow_rose.webp, rose, SkIRect::MakeXYWH(50, 5, 200, 150), - 410, 376) +#define DEF_RESCALE_AND_READ_IMG_GM(IMAGE_FILE, TAG, SRC_RECT, W, H) \ + DEF_SIMPLE_GM_CAN_FAIL(async_rescale_and_read_##TAG, canvas, errorMsg, 3 * W, 2 * H) { \ + ToolUtils::draw_checkerboard(canvas, SK_ColorDKGRAY, SK_ColorLTGRAY, 25); \ + return do_rescale_image_grid(canvas, #IMAGE_FILE, SRC_RECT, {W, H}, false, false, \ + errorMsg); \ + } -DEF_RESCALE_AND_READ_GM(images/yellow_rose.webp, rose, SkIRect::MakeXYWH(100, 20, 100, 100), - 410, 410) +#define DEF_RESCALE_AND_READ_YUV_IMG_GM(IMAGE_FILE, TAG, SRC_RECT, W, H) \ + DEF_SIMPLE_GM_CAN_FAIL(async_rescale_and_read_yuv420_##TAG, canvas, errorMsg, 3 * W, 2 * H) { \ + ToolUtils::draw_checkerboard(canvas, SK_ColorDKGRAY, SK_ColorLTGRAY, 25); \ + return do_rescale_image_grid(canvas, #IMAGE_FILE, SRC_RECT, {W, H}, true, true, errorMsg); \ + } -DEF_RESCALE_AND_READ_GM(images/dog.jpg, dog_down, SkIRect::MakeXYWH(0, 10, 180, 150), 45, 45) -DEF_RESCALE_AND_READ_GM(images/dog.jpg, dog_up, SkIRect::MakeWH(180, 180), 800, 400) +DEF_RESCALE_AND_READ_YUV_SURF_GM( + images/yellow_rose.webp, rose, SkIRect::MakeXYWH(50, 5, 200, 150), 410, 376) -DEF_RESCALE_AND_READ_GM(images/text.png, text_down, SkIRect::MakeWH(637, 105), (int)(0.7 * 637), - (int)(0.7 * 105)) -DEF_RESCALE_AND_READ_GM(images/text.png, text_up, SkIRect::MakeWH(637, 105), (int)(1.2 * 637), - (int)(1.2 * 105)) -DEF_RESCALE_AND_READ_GM(images/text.png, text_up_large, SkIRect::MakeXYWH(300, 0, 300, 105), - (int)(2.4 * 300), (int)(2.4 * 105)) +DEF_RESCALE_AND_READ_YUV_IMG_GM( + images/yellow_rose.webp, rose_down, SkIRect::MakeXYWH(50, 5, 200, 150), 106, 60) + +DEF_RESCALE_AND_READ_SURF_GM( + images/yellow_rose.webp, rose, SkIRect::MakeXYWH(100, 20, 100, 100), 410, 410) + +DEF_RESCALE_AND_READ_SURF_GM(images/dog.jpg, dog_down, SkIRect::MakeXYWH(0, 10, 180, 150), 45, 45) +DEF_RESCALE_AND_READ_IMG_GM(images/dog.jpg, dog_up, SkIRect::MakeWH(180, 180), 800, 400) + +DEF_RESCALE_AND_READ_IMG_GM( + images/text.png, text_down, SkIRect::MakeWH(637, 105), (int)(0.7 * 637), (int)(0.7 * 105)) +DEF_RESCALE_AND_READ_SURF_GM( + images/text.png, text_up, SkIRect::MakeWH(637, 105), (int)(1.2 * 637), (int)(1.2 * 105)) +DEF_RESCALE_AND_READ_IMG_GM(images/text.png, + text_up_large, + SkIRect::MakeXYWH(300, 0, 300, 105), + (int)(2.4 * 300), + (int)(2.4 * 105)) // Exercises non-scaling YUV420. Reads from the original canvas's surface in order to // exercise case where source surface is not a texture (in glbert config). @@ -244,8 +296,8 @@ DEF_SIMPLE_GM_CAN_FAIL(async_yuv_no_scale, canvas, errorMsg, 400, 300) { SkScopeExit scopeExit; auto yuvImage = do_read_and_scale_yuv( - surface, kRec601_SkYUVColorSpace, SkIRect::MakeWH(400, 300), {400, 300}, - SkSurface::RescaleGamma::kSrc, kNone_SkFilterQuality, &scopeExit); + surface, surface->getContext(), kRec601_SkYUVColorSpace, SkIRect::MakeWH(400, 300), + {400, 300}, SkImage::RescaleGamma::kSrc, kNone_SkFilterQuality, &scopeExit); canvas->clear(SK_ColorWHITE); canvas->drawImage(yuvImage.get(), 0, 0); @@ -283,13 +335,17 @@ DEF_SIMPLE_GM_CAN_FAIL(async_rescale_and_read_no_bleed, canvas, errorMsg, 60, 60 canvas->translate(kPad, kPad); skiagm::DrawResult result; SkISize downSize = {static_cast(kInner/2), static_cast(kInner / 2)}; - result = do_rescale_grid(canvas, surface.get(), srcRect, downSize, false, errorMsg, kPad); + GrContext* context = canvas->getGrContext(); + result = do_rescale_grid(canvas, surface.get(), context, srcRect, downSize, false, errorMsg, + kPad); + if (result != skiagm::DrawResult::kOk) { return result; } canvas->translate(0, 4 * downSize.height()); SkISize upSize = {static_cast(kInner * 3.5), static_cast(kInner * 4.6)}; - result = do_rescale_grid(canvas, surface.get(), srcRect, upSize, false, errorMsg, kPad); + result = + do_rescale_grid(canvas, surface.get(), context, srcRect, upSize, false, errorMsg, kPad); if (result != skiagm::DrawResult::kOk) { return result; } diff --git a/gm/bc1_transparency.cpp b/gm/bc1_transparency.cpp index 8fedfb0b0b3cd..fa2e0406b5280 100644 --- a/gm/bc1_transparency.cpp +++ b/gm/bc1_transparency.cpp @@ -8,9 +8,11 @@ #include "gm/gm.h" #include "include/core/SkCanvas.h" #include "include/core/SkImage.h" +#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkCompressedDataUtils.h" #include "src/gpu/GrCaps.h" -#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrRecordingContextPriv.h" #include "src/image/SkImage_Base.h" constexpr int kImgWidth = 16; @@ -113,7 +115,8 @@ static sk_sp data_to_img(GrContext *context, sk_sp data, } } -static void draw_image(GrContext* context, SkCanvas* canvas, sk_sp image, int x, int y) { +static void draw_image(GrRecordingContext* context, SkCanvas* canvas, + sk_sp image, int x, int y) { bool isCompressed = false; if (image && image->isTextureBacked()) { @@ -177,7 +180,7 @@ class BC1TransparencyGM : public GM { } void onDraw(SkCanvas* canvas) override { - GrContext* context = canvas->getGrContext(); + auto context = canvas->getGrContext(); sk_sp rgbImg = data_to_img(context, fBC1Data, SkImage::CompressionType::kBC1_RGB8_UNORM); diff --git a/gm/beziereffects.cpp b/gm/beziereffects.cpp index e61e0f39c59d3..a7f34c3b4b8bb 100644 --- a/gm/beziereffects.cpp +++ b/gm/beziereffects.cpp @@ -21,7 +21,7 @@ #include "include/core/SkString.h" #include "include/core/SkTypes.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/GrSharedEnums.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkColorData.h" @@ -78,11 +78,10 @@ class BezierTestOp : public GrMeshDrawOp { } protected: - BezierTestOp(GrClipEdgeType et, const SkRect& rect, const SkPMColor4f& color, int32_t classID) + BezierTestOp(const SkRect& rect, const SkPMColor4f& color, int32_t classID) : INHERITED(classID) , fRect(rect) , fColor(color) - , fEdgeType(et) , fProcessorSet(SkBlendMode::kSrc) { this->setBounds(rect, HasAABloat::kYes, IsHairline::kNo); } @@ -125,8 +124,6 @@ class BezierTestOp : public GrMeshDrawOp { flushState->drawMesh(*fMesh); } - GrClipEdgeType edgeType() const { return fEdgeType; } - const SkRect& rect() const { return fRect; } const SkPMColor4f& color() const { return fColor; } @@ -136,7 +133,6 @@ class BezierTestOp : public GrMeshDrawOp { private: SkRect fRect; SkPMColor4f fColor; - GrClipEdgeType fEdgeType; GrProcessorSet fProcessorSet; GrProgramInfo* fProgramInfo = nullptr; @@ -153,21 +149,20 @@ class BezierConicTestOp : public BezierTestOp { const char* name() const final { return "BezierConicTestOp"; } static std::unique_ptr Make(GrRecordingContext* context, - GrClipEdgeType et, const SkRect& rect, const SkPMColor4f& color, const SkMatrix& klm) { GrOpMemoryPool* pool = context->priv().opMemoryPool(); - return pool->allocate(et, rect, color, klm); + return pool->allocate(rect, color, klm); } private: friend class ::GrOpMemoryPool; // for ctor - BezierConicTestOp(GrClipEdgeType et, const SkRect& rect, - const SkPMColor4f& color, const SkMatrix& klm) - : INHERITED(et, rect, color, ClassID()), fKLM(klm) {} + BezierConicTestOp(const SkRect& rect, const SkPMColor4f& color, const SkMatrix& klm) + : INHERITED(rect, color, ClassID()) + , fKLM(klm) {} struct Vertex { SkPoint fPosition; @@ -175,8 +170,8 @@ class BezierConicTestOp : public BezierTestOp { }; GrGeometryProcessor* makeGP(const GrCaps& caps, SkArenaAlloc* arena) final { - auto tmp = GrConicEffect::Make(arena, this->color(), SkMatrix::I(), this->edgeType(), - caps, SkMatrix::I(), false); + auto tmp = GrConicEffect::Make(arena, this->color(), SkMatrix::I(), caps, SkMatrix::I(), + false); if (!tmp) { return nullptr; } @@ -228,10 +223,10 @@ class BezierConicEffects : public GpuGM { } SkISize onISize() override { - return SkISize::Make(kGrClipEdgeTypeCnt*kCellWidth, kNumConics*kCellHeight); + return SkISize::Make(kCellWidth, kNumConics*kCellHeight); } - void onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + void onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas) override { const SkScalar w = kCellWidth, h = kCellHeight; @@ -270,43 +265,39 @@ class BezierConicEffects : public GpuGM { for (int row = 0; row < kNumConics; ++row) { - for(int col = 0; col < kGrClipEdgeTypeCnt; ++col) { - GrClipEdgeType et = (GrClipEdgeType) col; + SkScalar x = 0; + SkScalar y = row * h; + SkPoint controlPts[] = { + {x + baseControlPts[row][0].fX, y + baseControlPts[row][0].fY}, + {x + baseControlPts[row][1].fX, y + baseControlPts[row][1].fY}, + {x + baseControlPts[row][2].fX, y + baseControlPts[row][2].fY} + }; + + for (int i = 0; i < 3; ++i) { + canvas->drawCircle(controlPts[i], 6.f, ctrlPtPaint); + } - SkScalar x = col * w; - SkScalar y = row * h; - SkPoint controlPts[] = { - {x + baseControlPts[row][0].fX, y + baseControlPts[row][0].fY}, - {x + baseControlPts[row][1].fX, y + baseControlPts[row][1].fY}, - {x + baseControlPts[row][2].fX, y + baseControlPts[row][2].fY} - }; + canvas->drawPoints(SkCanvas::kPolygon_PointMode, 3, controlPts, polyPaint); + SkConic dst[4]; + SkMatrix klm; + int cnt = ChopConic(controlPts, dst, weights[row]); + GrPathUtils::getConicKLM(controlPts, weights[row], &klm); + + for (int c = 0; c < cnt; ++c) { + SkPoint* pts = dst[c].fPts; for (int i = 0; i < 3; ++i) { - canvas->drawCircle(controlPts[i], 6.f, ctrlPtPaint); + canvas->drawCircle(pts[i], 3.f, choppedPtPaint); } - canvas->drawPoints(SkCanvas::kPolygon_PointMode, 3, controlPts, polyPaint); - - SkConic dst[4]; - SkMatrix klm; - int cnt = ChopConic(controlPts, dst, weights[row]); - GrPathUtils::getConicKLM(controlPts, weights[row], &klm); + SkRect bounds; + bounds.setBounds(pts, 3); - for (int c = 0; c < cnt; ++c) { - SkPoint* pts = dst[c].fPts; - for (int i = 0; i < 3; ++i) { - canvas->drawCircle(pts[i], 3.f, choppedPtPaint); - } + canvas->drawRect(bounds, boundsPaint); - SkRect bounds; - bounds.setBounds(pts, 3); - - canvas->drawRect(bounds, boundsPaint); - - std::unique_ptr op = BezierConicTestOp::Make(context, et, bounds, - kOpaqueBlack, klm); - renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); - } + std::unique_ptr op = BezierConicTestOp::Make(context, bounds, + kOpaqueBlack, klm); + renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); } } } @@ -363,21 +354,21 @@ class BezierQuadTestOp : public BezierTestOp { const char* name() const override { return "BezierQuadTestOp"; } static std::unique_ptr Make(GrRecordingContext* context, - GrClipEdgeType et, const SkRect& rect, const SkPMColor4f& color, const GrPathUtils::QuadUVMatrix& devToUV) { GrOpMemoryPool* pool = context->priv().opMemoryPool(); - return pool->allocate(et, rect, color, devToUV); + return pool->allocate(rect, color, devToUV); } private: friend class ::GrOpMemoryPool; // for ctor - BezierQuadTestOp(GrClipEdgeType et, const SkRect& rect, - const SkPMColor4f& color, const GrPathUtils::QuadUVMatrix& devToUV) - : INHERITED(et, rect, color, ClassID()), fDevToUV(devToUV) {} + BezierQuadTestOp(const SkRect& rect, const SkPMColor4f& color, + const GrPathUtils::QuadUVMatrix& devToUV) + : INHERITED(rect, color, ClassID()) + , fDevToUV(devToUV) {} struct Vertex { SkPoint fPosition; @@ -385,8 +376,8 @@ class BezierQuadTestOp : public BezierTestOp { }; GrGeometryProcessor* makeGP(const GrCaps& caps, SkArenaAlloc* arena) final { - auto tmp = GrQuadEffect::Make(arena, this->color(), SkMatrix::I(), this->edgeType(), - caps, SkMatrix::I(), false); + auto tmp = GrQuadEffect::Make(arena, this->color(), SkMatrix::I(), caps, SkMatrix::I(), + false); if (!tmp) { return nullptr; } @@ -434,10 +425,10 @@ class BezierQuadEffects : public GpuGM { } SkISize onISize() override { - return SkISize::Make(kGrClipEdgeTypeCnt*kCellWidth, kNumQuads*kCellHeight); + return SkISize::Make(kCellWidth, kNumQuads*kCellHeight); } - void onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + void onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas) override { const SkScalar w = kCellWidth, h = kCellHeight; @@ -468,44 +459,40 @@ class BezierQuadEffects : public GpuGM { boundsPaint.setStyle(SkPaint::kStroke_Style); for (int row = 0; row < kNumQuads; ++row) { - for(int col = 0; col < kGrClipEdgeTypeCnt; ++col) { - GrClipEdgeType et = (GrClipEdgeType) col; - - SkScalar x = col * w; - SkScalar y = row * h; - SkPoint controlPts[] = { - {x + baseControlPts[row][0].fX, y + baseControlPts[row][0].fY}, - {x + baseControlPts[row][1].fX, y + baseControlPts[row][1].fY}, - {x + baseControlPts[row][2].fX, y + baseControlPts[row][2].fY} - }; - - for (int i = 0; i < 3; ++i) { - canvas->drawCircle(controlPts[i], 6.f, ctrlPtPaint); - } + SkScalar x = 0; + SkScalar y = row * h; + SkPoint controlPts[] = { + {x + baseControlPts[row][0].fX, y + baseControlPts[row][0].fY}, + {x + baseControlPts[row][1].fX, y + baseControlPts[row][1].fY}, + {x + baseControlPts[row][2].fX, y + baseControlPts[row][2].fY} + }; + + for (int i = 0; i < 3; ++i) { + canvas->drawCircle(controlPts[i], 6.f, ctrlPtPaint); + } - canvas->drawPoints(SkCanvas::kPolygon_PointMode, 3, controlPts, polyPaint); + canvas->drawPoints(SkCanvas::kPolygon_PointMode, 3, controlPts, polyPaint); - SkPoint chopped[5]; - int cnt = SkChopQuadAtMaxCurvature(controlPts, chopped); + SkPoint chopped[5]; + int cnt = SkChopQuadAtMaxCurvature(controlPts, chopped); - for (int c = 0; c < cnt; ++c) { - SkPoint* pts = chopped + 2 * c; + for (int c = 0; c < cnt; ++c) { + SkPoint* pts = chopped + 2 * c; - for (int i = 0; i < 3; ++i) { - canvas->drawCircle(pts[i], 3.f, choppedPtPaint); - } + for (int i = 0; i < 3; ++i) { + canvas->drawCircle(pts[i], 3.f, choppedPtPaint); + } - SkRect bounds; - bounds.setBounds(pts, 3); + SkRect bounds; + bounds.setBounds(pts, 3); - canvas->drawRect(bounds, boundsPaint); + canvas->drawRect(bounds, boundsPaint); - GrPathUtils::QuadUVMatrix DevToUV(pts); + GrPathUtils::QuadUVMatrix DevToUV(pts); - std::unique_ptr op = BezierQuadTestOp::Make(context, et, bounds, - kOpaqueBlack, DevToUV); - renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); - } + std::unique_ptr op = BezierQuadTestOp::Make(context, bounds, + kOpaqueBlack, DevToUV); + renderTargetContext->priv().testingOnly_addDrawOp(std::move(op)); } } } diff --git a/gm/bigrrectaaeffect.cpp b/gm/bigrrectaaeffect.cpp index 93c13c4fcbed5..66e62c37a86f9 100644 --- a/gm/bigrrectaaeffect.cpp +++ b/gm/bigrrectaaeffect.cpp @@ -67,7 +67,7 @@ class BigRRectAAEffectGM : public GpuGM { SkISize onISize() override { return SkISize::Make(fWidth, fHeight); } - void onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + void onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas) override { SkPaint paint; @@ -91,9 +91,11 @@ class BigRRectAAEffectGM : public GpuGM { SkRRect rrect = fRRect; rrect.offset(SkIntToScalar(x + kGap), SkIntToScalar(y + kGap)); const auto& caps = *renderTargetContext->caps()->shaderCaps(); - auto fp = GrRRectEffect::Make(edgeType, rrect, caps); - SkASSERT(fp); - if (fp) { + auto [success, fp] = GrRRectEffect::Make(/*inputFP=*/nullptr, edgeType, rrect, + caps); + SkASSERT(success); + if (success) { + SkASSERT(fp); GrPaint grPaint; grPaint.setColor4f({ 0, 0, 0, 1.f }); grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); diff --git a/gm/bitmapshader.cpp b/gm/bitmapshader.cpp index 4ad28a76e4e2b..dd9f908946625 100644 --- a/gm/bitmapshader.cpp +++ b/gm/bitmapshader.cpp @@ -18,9 +18,9 @@ #include "include/core/SkString.h" #include "include/core/SkTileMode.h" #include "include/core/SkTypes.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" -#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrRecordingContextPriv.h" namespace skiagm { @@ -125,7 +125,7 @@ DEF_SIMPLE_GM(hugebitmapshader, canvas, 100, 100) { // (See https://skia-review.googlesource.com/c/skia/+/73200) int bitmapW = 1; int bitmapH = 60000; - if (auto* ctx = canvas->getGrContext()) { + if (auto ctx = canvas->recordingContext()) { bitmapH = ctx->priv().caps()->maxTextureSize() + 1; } bitmap.setInfo(SkImageInfo::MakeA8(bitmapW, bitmapH), bitmapW); diff --git a/gm/bitmaptiled.cpp b/gm/bitmaptiled.cpp index 20709950b9f88..3ae0c7aa0500a 100644 --- a/gm/bitmaptiled.cpp +++ b/gm/bitmaptiled.cpp @@ -12,12 +12,15 @@ #include "include/core/SkRect.h" #include "include/core/SkTypes.h" #include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" class GrRenderTargetContext; // This test exercises Ganesh's drawing of tiled bitmaps. In particular, that the offsets and the // extents of the tiles don't causes gaps between tiles. -static void draw_tile_bitmap_with_fractional_offset(GrContext* context, SkCanvas* canvas, +static void draw_tile_bitmap_with_fractional_offset(GrRecordingContext* context, + SkCanvas* canvas, bool vertical) { // This should match kBmpSmallTileSize in SkGpuDevice.cpp. Note that our canvas size is tuned // to this constant as well. @@ -28,15 +31,15 @@ static void draw_tile_bitmap_with_fractional_offset(GrContext* context, SkCanvas const int kBitmapLongEdge = 7 * kTileSize; const int kBitmapShortEdge = 1 * kTileSize; - // To trigger tiling, we also need the image to be more than 50% of the cache, so we ensure the - // cache is sized to make that true. - const int kBitmapArea = kBitmapLongEdge * kBitmapShortEdge; - const size_t kBitmapBytes = kBitmapArea * sizeof(SkPMColor); + if (auto direct = context->asDirectContext()) { + // To trigger tiling, we also need the image to be more than 50% of the cache, so we + // ensure the cache is sized to make that true. + const int kBitmapArea = kBitmapLongEdge * kBitmapShortEdge; + const size_t kBitmapBytes = kBitmapArea * sizeof(SkPMColor); - size_t oldMaxResourceBytes = context->getResourceCacheLimit(); - - const size_t newMaxResourceBytes = kBitmapBytes + (kBitmapBytes / 2); - context->setResourceCacheLimit(newMaxResourceBytes); + const size_t newMaxResourceBytes = kBitmapBytes + (kBitmapBytes / 2); + direct->setResourceCacheLimit(newMaxResourceBytes); + } // Construct our bitmap as either very wide or very tall SkBitmap bmp; @@ -57,9 +60,6 @@ static void draw_tile_bitmap_with_fractional_offset(GrContext* context, SkCanvas SkRect::MakeXYWH(0.0f, 37.0f * i, 1124.0f, 32.0f), nullptr); } } - - // Restore the cache - context->setResourceCacheLimit(oldMaxResourceBytes); } DEF_SIMPLE_GPU_GM_BG( diff --git a/gm/blurrect.cpp b/gm/blurrect.cpp index 3e536cf97a494..1208afaa15923 100644 --- a/gm/blurrect.cpp +++ b/gm/blurrect.cpp @@ -28,11 +28,11 @@ #include "include/core/SkTileMode.h" #include "include/core/SkTypes.h" #include "include/effects/SkGradientShader.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/SkTo.h" #include "src/core/SkBlurMask.h" #include "src/core/SkMask.h" -#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrRecordingContextPriv.h" #include "tools/timer/TimeUtils.h" #define STROKE_WIDTH SkIntToScalar(10) @@ -254,11 +254,12 @@ class BlurRectCompareGM : public GM { DrawResult onDraw(SkCanvas* canvas, SkString* errorMsg) override { if (canvas->imageInfo().colorType() == kUnknown_SkColorType || - (canvas->getGrContext() && !canvas->getGrContext()->priv().asDirectContext())) { + (canvas->recordingContext() && !canvas->recordingContext()->asDirectContext())) { *errorMsg = "Not supported when recording, relies on canvas->makeSurface()"; return DrawResult::kSkip; } - int32_t ctxID = canvas->getGrContext() ? canvas->getGrContext()->priv().contextID() : 0; + int32_t ctxID = canvas->recordingContext() ? canvas->recordingContext()->priv().contextID() + : 0; if (fRecalcMasksForAnimation || !fActualMasks[0][0][0] || ctxID != fLastContextUniqueID) { if (fRecalcMasksForAnimation) { // Sigma is changing so references must also be recalculated. diff --git a/gm/blurroundrect.cpp b/gm/blurroundrect.cpp index 1637f4e20fe22..fe608c5b6f6be 100644 --- a/gm/blurroundrect.cpp +++ b/gm/blurroundrect.cpp @@ -58,6 +58,8 @@ class SimpleBlurRoundRectGM : public skiagm::GM { SkISize onISize() override { return {1000, 500}; } + bool runAsBench() const override { return true; } + void onDraw(SkCanvas* canvas) override { canvas->scale(1.5f, 1.5f); canvas->translate(50,50); diff --git a/gm/circularclips.cpp b/gm/circularclips.cpp index b2138385f1433..6a9dedbb436f8 100644 --- a/gm/circularclips.cpp +++ b/gm/circularclips.cpp @@ -40,17 +40,13 @@ class CircularClipsGM : public skiagm::GM { } SkISize onISize() override { - return SkISize::Make(800, 600); + return SkISize::Make(800, 200); } void onDraw(SkCanvas* canvas) override { const SkClipOp ops[] = { kDifference_SkClipOp, - kIntersect_SkClipOp, - kUnion_SkClipOp, - kXOR_SkClipOp, - kReverseDifference_SkClipOp, - kReplace_SkClipOp, + kIntersect_SkClipOp }; SkRect rect = SkRect::MakeLTRB(fX1 - fR, fY - fR, fX2 + fR, fY + fR); diff --git a/gm/clockwise.cpp b/gm/clockwise.cpp index 480252b19cd3e..be1551756cd3c 100644 --- a/gm/clockwise.cpp +++ b/gm/clockwise.cpp @@ -17,8 +17,8 @@ #include "include/core/SkString.h" #include "include/core/SkTypes.h" #include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/gpu/GrTypes.h" -#include "include/private/GrRecordingContext.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkColorData.h" #include "src/gpu/GrBuffer.h" @@ -71,7 +71,7 @@ static constexpr GrGeometryProcessor::Attribute gVertex = class ClockwiseGM : public skiagm::GpuGM { SkString onShortName() override { return SkString("clockwise"); } SkISize onISize() override { return {300, 200}; } - void onDraw(GrContext*, GrRenderTargetContext*, SkCanvas*) override; + void onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas*) override; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -108,8 +108,7 @@ class ClockwiseTestProcessor : public GrGeometryProcessor { }; class GLSLClockwiseTestProcessor : public GrGLSLGeometryProcessor { - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - const CoordTransformRange&) override {} + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&) override {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override { const ClockwiseTestProcessor& proc = args.fGP.cast(); @@ -188,7 +187,7 @@ class ClockwiseTestOp : public GrDrawOp { SkArenaAlloc* arena = context->priv().recordTimeAllocator(); // This is equivalent to a GrOpFlushState::detachAppliedClip - GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip::Disabled(); fProgramInfo = this->createProgramInfo(context->priv().caps(), arena, writeView, std::move(appliedClip), dstProxyView); @@ -240,7 +239,7 @@ class ClockwiseTestOp : public GrDrawOp { //////////////////////////////////////////////////////////////////////////////////////////////////// // Test. -void ClockwiseGM::onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas) { +void ClockwiseGM::onDraw(GrRecordingContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas) { rtc->clear(SK_PMColor4fBLACK); // Draw the test directly to the frame buffer. diff --git a/gm/coloremoji.cpp b/gm/coloremoji.cpp index f94d0afd08988..7b35a24f7fe41 100644 --- a/gm/coloremoji.cpp +++ b/gm/coloremoji.cpp @@ -75,7 +75,7 @@ class ColorEmojiGM : public GM { sk_sp typeface; const char* text; } emojiFont; - virtual void onOnceBeforeDraw() override { + void onOnceBeforeDraw() override { emojiFont.typeface = ToolUtils::emoji_typeface(); emojiFont.text = ToolUtils::emoji_sample_text(); } diff --git a/gm/complexclip.cpp b/gm/complexclip.cpp index e6bef93aaec5d..9960845565f0b 100644 --- a/gm/complexclip.cpp +++ b/gm/complexclip.cpp @@ -51,7 +51,7 @@ class ComplexClipGM : public GM { return str; } - SkISize onISize() override { return SkISize::Make(970, 780); } + SkISize onISize() override { return SkISize::Make(388, 780); } void onDraw(SkCanvas* canvas) override { SkPath path; @@ -92,9 +92,6 @@ class ComplexClipGM : public GM { } gOps[] = { //extra spaces in names for measureText {kIntersect_SkClipOp, "Isect "}, {kDifference_SkClipOp, "Diff " }, - {kUnion_SkClipOp, "Union "}, - {kXOR_SkClipOp, "Xor " }, - {kReverseDifference_SkClipOp, "RDiff "} }; canvas->translate(20, 20); diff --git a/gm/complexclip2.cpp b/gm/complexclip2.cpp index 46e2aad007094..4465cd1d01739 100644 --- a/gm/complexclip2.cpp +++ b/gm/complexclip2.cpp @@ -93,10 +93,6 @@ class ComplexClip2GM : public GM { const SkClipOp ops[] = { kDifference_SkClipOp, kIntersect_SkClipOp, - kUnion_SkClipOp, - kXOR_SkClipOp, - kReverseDifference_SkClipOp, - kReplace_SkClipOp, }; SkRandom r; diff --git a/gm/complexclip3.cpp b/gm/complexclip3.cpp index b48c35d5ae1ec..f95fa2e9d428b 100644 --- a/gm/complexclip3.cpp +++ b/gm/complexclip3.cpp @@ -42,7 +42,7 @@ class ComplexClip3GM : public GM { return str; } - SkISize onISize() { return SkISize::Make(1000, 950); } + SkISize onISize() { return SkISize::Make(400, 950); } virtual void onDraw(SkCanvas* canvas) { SkPath clipSimple; @@ -73,9 +73,6 @@ class ComplexClip3GM : public GM { } gOps[] = { {kIntersect_SkClipOp, "I"}, {kDifference_SkClipOp, "D" }, - {kUnion_SkClipOp, "U"}, - {kXOR_SkClipOp, "X" }, - {kReverseDifference_SkClipOp, "R"} }; canvas->translate(SkIntToScalar(20), SkIntToScalar(20)); diff --git a/gm/complexclip4.cpp b/gm/complexclip4.cpp index 69dc32bd12cc9..ce34bfa86b237 100644 --- a/gm/complexclip4.cpp +++ b/gm/complexclip4.cpp @@ -15,11 +15,12 @@ #include "include/core/SkScalar.h" #include "include/core/SkSize.h" #include "include/core/SkString.h" +#include "src/core/SkCanvasPriv.h" #include "src/core/SkClipOpPriv.h" namespace skiagm { -//this test exercise SkCanvas::setDeviceClipRestriction behavior +// This test exercise SkCanvas::androidFramework_replaceClip behavior class ComplexClip4GM : public GM { public: ComplexClip4GM(bool aaclip) @@ -39,6 +40,37 @@ class ComplexClip4GM : public GM { SkISize onISize() { return SkISize::Make(970, 780); } + // Android Framework will still support the legacy kReplace SkClipOp on older devices, so + // this represents how to do so while also respecting the device restriction using the newer + // androidFramework_replaceClip() API. + void emulateDeviceRestriction(SkCanvas* canvas, const SkIRect& deviceRestriction) { + // or any other device-space rect intersection + SkCanvasPriv::ReplaceClip(canvas, deviceRestriction); + // save for later replace clip ops + fDeviceRestriction = deviceRestriction; + } + + void emulateClipRectReplace(SkCanvas* canvas, + const SkRect& clipRect, + bool aa) { + SkCanvasPriv::ReplaceClip(canvas, fDeviceRestriction); + canvas->clipRect(clipRect, SkClipOp::kIntersect, aa); + } + + void emulateClipRRectReplace(SkCanvas* canvas, + const SkRRect& clipRRect, + bool aa) { + SkCanvasPriv::ReplaceClip(canvas, fDeviceRestriction); + canvas->clipRRect(clipRRect, SkClipOp::kIntersect, aa); + } + + void emulateClipPathReplace(SkCanvas* canvas, + const SkPath& path, + bool aa) { + SkCanvasPriv::ReplaceClip(canvas, fDeviceRestriction); + canvas->clipPath(path, SkClipOp::kIntersect, aa); + } + virtual void onDraw(SkCanvas* canvas) { SkPaint p; p.setAntiAlias(fDoAAClip); @@ -47,16 +79,15 @@ class ComplexClip4GM : public GM { canvas->save(); // draw a yellow rect through a rect clip canvas->save(); - canvas->androidFramework_setDeviceClipRestriction(SkIRect::MakeLTRB(100, 100, 300, 300)); + emulateDeviceRestriction(canvas, SkIRect::MakeLTRB(100, 100, 300, 300)); canvas->drawColor(SK_ColorGREEN); - canvas->clipRect(SkRect::MakeLTRB(100, 200, 400, 500), - kReplace_SkClipOp, fDoAAClip); + emulateClipRectReplace(canvas, SkRect::MakeLTRB(100, 200, 400, 500), fDoAAClip); canvas->drawRect(SkRect::MakeLTRB(100, 200, 400, 500), p); canvas->restore(); // draw a yellow rect through a diamond clip canvas->save(); - canvas->androidFramework_setDeviceClipRestriction(SkIRect::MakeLTRB(500, 100, 800, 300)); + emulateDeviceRestriction(canvas, SkIRect::MakeLTRB(500, 100, 800, 300)); canvas->drawColor(SK_ColorGREEN); SkPath pathClip; @@ -65,35 +96,38 @@ class ComplexClip4GM : public GM { pathClip.lineTo(SkIntToScalar(650), SkIntToScalar(400)); pathClip.lineTo(SkIntToScalar(650), SkIntToScalar(300)); pathClip.close(); - canvas->clipPath(pathClip, kReplace_SkClipOp, fDoAAClip); + emulateClipPathReplace(canvas, pathClip, fDoAAClip); canvas->drawRect(SkRect::MakeLTRB(500, 200, 900, 500), p); canvas->restore(); // draw a yellow rect through a round rect clip canvas->save(); - canvas->androidFramework_setDeviceClipRestriction(SkIRect::MakeLTRB(500, 500, 800, 700)); + emulateDeviceRestriction(canvas, SkIRect::MakeLTRB(500, 500, 800, 700)); canvas->drawColor(SK_ColorGREEN); - canvas->clipRRect(SkRRect::MakeOval(SkRect::MakeLTRB(500, 600, 900, 750)), - kReplace_SkClipOp, fDoAAClip); + emulateClipRRectReplace( + canvas, SkRRect::MakeOval(SkRect::MakeLTRB(500, 600, 900, 750)), fDoAAClip); canvas->drawRect(SkRect::MakeLTRB(500, 600, 900, 750), p); canvas->restore(); - // fill the clip with yellow color showing that androidFramework_setDeviceClipRestriction - // intersects with the current clip + // fill the clip with yellow color showing that androidFramework_replaceClip is + // in device space canvas->save(); canvas->clipRect(SkRect::MakeLTRB(100, 400, 300, 750), kIntersect_SkClipOp, fDoAAClip); canvas->drawColor(SK_ColorGREEN); - canvas->androidFramework_setDeviceClipRestriction(SkIRect::MakeLTRB(150, 450, 250, 700)); + // should not affect the device-space clip + canvas->rotate(20.f); + canvas->translate(50.f, 50.f); + emulateDeviceRestriction(canvas, SkIRect::MakeLTRB(150, 450, 250, 700)); canvas->drawColor(SK_ColorYELLOW); canvas->restore(); canvas->restore(); } private: - - bool fDoAAClip; + SkIRect fDeviceRestriction; + bool fDoAAClip; typedef GM INHERITED; }; diff --git a/gm/compressed_textures.cpp b/gm/compressed_textures.cpp index d67e2e15282bb..3a41bfe383b7a 100644 --- a/gm/compressed_textures.cpp +++ b/gm/compressed_textures.cpp @@ -21,10 +21,13 @@ #include "include/core/SkRefCnt.h" #include "include/core/SkSize.h" #include "include/core/SkString.h" +#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkCompressedDataUtils.h" #include "src/core/SkMipMap.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDataUtils.h" +#include "src/gpu/GrRecordingContextPriv.h" #include "src/image/SkImage_Base.h" #include "third_party/etc1/etc1.h" diff --git a/gm/constcolorprocessor.cpp b/gm/constcolorprocessor.cpp index ec54bae6c4344..d0168092e4025 100644 --- a/gm/constcolorprocessor.cpp +++ b/gm/constcolorprocessor.cpp @@ -69,7 +69,7 @@ class ConstColorProcessor : public GpuGM { SkTileMode::kClamp); } - void onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + void onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas) override { constexpr GrColor kColors[] = { 0xFFFFFFFF, @@ -119,7 +119,7 @@ class ConstColorProcessor : public GpuGM { GrConstColorProcessor::InputMode mode = (GrConstColorProcessor::InputMode) m; SkPMColor4f color = SkPMColor4f::FromBytes_RGBA(kColors[procColor]); - auto fp = GrConstColorProcessor::Make(color, mode); + auto fp = GrConstColorProcessor::Make(/*inputFP=*/nullptr, color, mode); grPaint.addColorFragmentProcessor(std::move(fp)); renderTargetContext->priv().testingOnly_addDrawOp( diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp index 786879a2a3672..32a8c3687c1d1 100644 --- a/gm/convexpolyeffect.cpp +++ b/gm/convexpolyeffect.cpp @@ -108,7 +108,7 @@ class ConvexPolyEffect : public GpuGM { fRects.addToTail(SkRect::MakeLTRB(100.f, 50.5f, 5.f, 0.5f)); } - void onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + void onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas) override { SkScalar y = 0; static constexpr SkScalar kDX = 12.f; @@ -126,8 +126,8 @@ class ConvexPolyEffect : public GpuGM { path->transform(m, &p); GrClipEdgeType edgeType = (GrClipEdgeType) et; - std::unique_ptr fp(GrConvexPolyEffect::Make(edgeType, p)); - if (!fp) { + auto [success, fp] = GrConvexPolyEffect::Make(/*inputFP=*/nullptr, edgeType, p); + if (!success) { continue; } @@ -165,8 +165,8 @@ class ConvexPolyEffect : public GpuGM { for (int et = 0; et < kGrClipEdgeTypeCnt; ++et) { SkRect rect = iter.get()->makeOffset(x, y); GrClipEdgeType edgeType = (GrClipEdgeType) et; - std::unique_ptr fp(GrConvexPolyEffect::Make(edgeType, rect)); - if (!fp) { + auto [success, fp] = GrConvexPolyEffect::Make(/*inputFP=*/nullptr, edgeType, rect); + if (!success) { continue; } diff --git a/gm/crosscontextimage.cpp b/gm/crosscontextimage.cpp index 8afbf6d4a9284..a80970269bcc1 100644 --- a/gm/crosscontextimage.cpp +++ b/gm/crosscontextimage.cpp @@ -17,6 +17,8 @@ #include "include/core/SkRefCnt.h" #include "include/core/SkString.h" #include "include/core/SkTypes.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "tools/Resources.h" class GrContext; @@ -30,6 +32,12 @@ DEF_SIMPLE_GPU_GM_CAN_FAIL(cross_context_image, context, rtc, canvas, errorMsg, return skiagm::DrawResult::kFail; } + auto direct = context->asDirectContext(); + if (!direct) { + *errorMsg = "CrossContext image creation requires a direct context."; + return skiagm::DrawResult::kSkip; + } + sk_sp images[3]; images[0] = SkImage::MakeFromEncoded(encodedData); @@ -38,8 +46,8 @@ DEF_SIMPLE_GPU_GM_CAN_FAIL(cross_context_image, context, rtc, canvas, errorMsg, SkAssertResult(images[0]->asLegacyBitmap(&bmp) && bmp.peekPixels(&pixmap)); - images[1] = SkImage::MakeCrossContextFromPixmap(context, pixmap, false); - images[2] = SkImage::MakeCrossContextFromPixmap(context, pixmap, true); + images[1] = SkImage::MakeCrossContextFromPixmap(direct, pixmap, false); + images[2] = SkImage::MakeCrossContextFromPixmap(direct, pixmap, true); canvas->translate(10, 10); diff --git a/gm/discard.cpp b/gm/discard.cpp index bdde173ef14d5..492fd1ec7e1f7 100644 --- a/gm/discard.cpp +++ b/gm/discard.cpp @@ -16,6 +16,9 @@ #include "include/core/SkString.h" #include "include/core/SkSurface.h" #include "include/core/SkTypes.h" +#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/utils/SkRandom.h" #include "tools/ToolUtils.h" @@ -31,8 +34,7 @@ namespace skiagm { class DiscardGM : public GpuGM { public: - DiscardGM() { - } + DiscardGM() {} protected: SkString onShortName() override { @@ -43,13 +45,19 @@ class DiscardGM : public GpuGM { return SkISize::Make(100, 100); } - DrawResult onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas, + DrawResult onDraw(GrRecordingContext* context, GrRenderTargetContext*, SkCanvas* canvas, SkString* errorMsg) override { + auto direct = context->asDirectContext(); + if (!direct) { + *errorMsg = "GM relies on having access to a live direct context."; + return DrawResult::kSkip; + } + SkISize size = this->getISize(); size.fWidth /= 10; size.fHeight /= 10; SkImageInfo info = SkImageInfo::MakeN32Premul(size); - auto surface = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info); + sk_sp surface = SkSurface::MakeRenderTarget(direct, SkBudgeted::kNo, info); if (nullptr == surface) { *errorMsg = "Could not create render target."; return DrawResult::kFail; diff --git a/gm/drawquadset.cpp b/gm/drawquadset.cpp index fb24f9df1e01a..6fdcdf5f2669d 100644 --- a/gm/drawquadset.cpp +++ b/gm/drawquadset.cpp @@ -22,7 +22,7 @@ #include "include/core/SkTypeface.h" #include "include/core/SkTypes.h" #include "include/effects/SkGradientShader.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/GrTypesPriv.h" #include "src/core/SkMatrixProvider.h" #include "src/gpu/GrPaint.h" @@ -50,7 +50,7 @@ static void draw_gradient_tiles(SkCanvas* canvas, bool alignGradients) { GrRenderTargetContext* rtc = canvas->internal_private_accessTopLayerRenderTargetContext(); - GrContext* context = canvas->getGrContext(); + auto context = canvas->recordingContext(); auto gradient = SkGradientShader::MakeLinear(pts, colors, nullptr, 2, SkTileMode::kMirror); SkPaint paint; diff --git a/gm/dstreadshuffle.cpp b/gm/dstreadshuffle.cpp index 9e6a7addb0a5f..1737009b8857a 100644 --- a/gm/dstreadshuffle.cpp +++ b/gm/dstreadshuffle.cpp @@ -100,6 +100,7 @@ class DstReadShuffle : public GM { SkFont font(ToolUtils::create_portable_typeface(), 100); font.setEmbolden(true); canvas->drawString(text, 0.f, 100.f, font, *paint); + break; } default: break; diff --git a/gm/exoticformats.cpp b/gm/exoticformats.cpp index 330c74362554b..22ca1deb7945e 100644 --- a/gm/exoticformats.cpp +++ b/gm/exoticformats.cpp @@ -9,9 +9,11 @@ #include "include/core/SkCanvas.h" #include "include/core/SkImage.h" #include "include/core/SkStream.h" +#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkCompressedDataUtils.h" #include "src/core/SkMipMap.h" -#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/gl/GrGLDefines.h" #include "src/image/SkImage_Base.h" @@ -365,7 +367,7 @@ class ExoticFormatsGM : public GM { } - void drawImage(GrContext* context, SkCanvas* canvas, SkImage* image, int x, int y) { + void drawImage(GrRecordingContext* context, SkCanvas* canvas, SkImage* image, int x, int y) { if (!image) { return; } diff --git a/gm/flippity.cpp b/gm/flippity.cpp index 05bfa938b534a..aa5798c962af9 100644 --- a/gm/flippity.cpp +++ b/gm/flippity.cpp @@ -23,7 +23,8 @@ #include "include/core/SkSurface.h" #include "include/core/SkTypeface.h" #include "include/core/SkTypes.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/gpu/GrTypes.h" #include "include/private/SkTArray.h" #include "src/gpu/GrContextPriv.h" @@ -111,7 +112,7 @@ static sk_sp make_text_image(GrContext* context, const char* text, SkCo // Create an image with each corner marked w/ "LL", "LR", etc., with the origin either bottom-left // or top-left. -static sk_sp make_reference_image(GrContext* context, +static sk_sp make_reference_image(GrDirectContext* context, const SkTArray>& labels, bool bottomLeftOrigin) { SkASSERT(kNumLabels == labels.count()); @@ -217,23 +218,20 @@ class FlippityGM : public skiagm::GpuGM { canvas->restore(); } - void drawRow(GrContext* context, SkCanvas* canvas, - bool bottomLeftImage, bool drawSubset, bool drawScaled) { - - sk_sp referenceImage = make_reference_image(context, fLabels, bottomLeftImage); + void drawRow(SkCanvas* canvas, bool bottomLeftImage, bool drawSubset, bool drawScaled) { canvas->save(); canvas->translate(kLabelSize, kLabelSize); for (int i = 0; i < kNumMatrices; ++i) { - this->drawImageWithMatrixAndLabels(canvas, referenceImage.get(), i, - drawSubset, drawScaled); + this->drawImageWithMatrixAndLabels(canvas, fReferenceImages[bottomLeftImage].get(), + i, drawSubset, drawScaled); canvas->translate(kCellSize, 0); } canvas->restore(); } - void makeLabels(GrContext* context) { + void makeLabels(GrDirectContext* context) { if (fLabels.count()) { return; } @@ -253,28 +251,49 @@ class FlippityGM : public skiagm::GpuGM { SkASSERT(kNumLabels == fLabels.count()); } - void onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { + DrawResult onGpuSetup(GrDirectContext* context, SkString* errorMsg) override { + if (!context || context->abandoned()) { + return DrawResult::kSkip; + } + this->makeLabels(context); + fReferenceImages[0] = make_reference_image(context, fLabels, false); + fReferenceImages[1] = make_reference_image(context, fLabels, true); + if (!fReferenceImages[0] || !fReferenceImages[1]) { + *errorMsg = "Failed to create reference images."; + return DrawResult::kFail; + } + + return DrawResult::kOk; + } + + void onGpuTeardown() override { + fLabels.reset(); + fReferenceImages[0] = fReferenceImages[1] = nullptr; + } + + void onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas* canvas) override { + SkASSERT(fReferenceImages[0] && fReferenceImages[1]); canvas->save(); // Top row gets TL image - this->drawRow(context, canvas, false, false, false); + this->drawRow(canvas, false, false, false); canvas->translate(0, kCellSize); // Bottom row gets BL image - this->drawRow(context, canvas, true, false, false); + this->drawRow(canvas, true, false, false); canvas->translate(0, kCellSize); // Third row gets subsets of BL images - this->drawRow(context, canvas, true, true, false); + this->drawRow(canvas, true, true, false); canvas->translate(0, kCellSize); // Fourth row gets scaled subsets of BL images - this->drawRow(context, canvas, true, true, true); + this->drawRow(canvas, true, true, true); canvas->restore(); @@ -289,6 +308,7 @@ class FlippityGM : public skiagm::GpuGM { private: SkTArray> fLabels; + sk_sp fReferenceImages[2]; typedef GM INHERITED; }; diff --git a/gm/fontcache.cpp b/gm/fontcache.cpp index cd78e82ce945d..ddde23c0c4f18 100644 --- a/gm/fontcache.cpp +++ b/gm/fontcache.cpp @@ -67,7 +67,7 @@ class FontCacheGM : public skiagm::GpuGM { fTypefaces[5] = ToolUtils::create_portable_typeface("sans-serif", SkFontStyle::Bold()); } - void onDraw(GrContext*, GrRenderTargetContext*, SkCanvas* canvas) override { + void onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas* canvas) override { this->drawText(canvas); // Debugging tool for GPU. static const bool kShowAtlas = false; diff --git a/gm/fontregen.cpp b/gm/fontregen.cpp index 88b6da722229a..39b23b9a92fcd 100644 --- a/gm/fontregen.cpp +++ b/gm/fontregen.cpp @@ -30,6 +30,8 @@ #include "include/core/SkTypes.h" #include "include/gpu/GrContext.h" #include "include/gpu/GrContextOptions.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkTemplates.h" #include "src/gpu/GrContextPriv.h" @@ -81,12 +83,17 @@ class FontRegenGM : public skiagm::GpuGM { fBlobs[2] = make_blob(kTexts[2], font); } - void onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { + void onDraw(GrRecordingContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { + auto direct = context->asDirectContext(); + if (!direct) { + return; + } + SkPaint paint; paint.setColor(SK_ColorBLACK); canvas->drawTextBlob(fBlobs[0], 10, 80, paint); canvas->drawTextBlob(fBlobs[1], 10, 225, paint); - context->flushAndSubmit(); + direct->flushAndSubmit(); paint.setColor(0xFF010101); canvas->drawTextBlob(fBlobs[0], 10, 305, paint); @@ -95,7 +102,7 @@ class FontRegenGM : public skiagm::GpuGM { // Debugging tool for GPU. static const bool kShowAtlas = false; if (kShowAtlas) { - auto img = context->priv().testingOnly_getFontAtlasImage(kA8_GrMaskFormat); + auto img = direct->priv().testingOnly_getFontAtlasImage(kA8_GrMaskFormat); canvas->drawImage(img, 200, 0); } } @@ -137,12 +144,11 @@ class BadAppleGM : public skiagm::GpuGM { fBlobs[1] = make_blob(kTexts[1], font); } - void onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { + void onDraw(GrRecordingContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { SkPaint paint; paint.setColor(0xFF111111); canvas->drawTextBlob(fBlobs[0], 10, 260, paint); canvas->drawTextBlob(fBlobs[1], 10, 500, paint); - context->flushAndSubmit(); } private: diff --git a/gm/fp_sample_chaining.cpp b/gm/fp_sample_chaining.cpp new file mode 100644 index 0000000000000..4ac66137ac166 --- /dev/null +++ b/gm/fp_sample_chaining.cpp @@ -0,0 +1,388 @@ +/* + * Copyright 2019 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm/gm.h" +#include "include/core/SkFont.h" +#include "include/effects/SkRuntimeEffect.h" +#include "src/gpu/GrBitmapTextureMaker.h" +#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrRenderTargetContextPriv.h" +#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" +#include "src/gpu/ops/GrFillRectOp.h" +#include "tools/ToolUtils.h" + +// Samples child with a constant (literal) matrix +// Scales along X +class ConstantMatrixEffect : public GrFragmentProcessor { +public: + static constexpr GrProcessor::ClassID CLASS_ID = (GrProcessor::ClassID) 3; + + ConstantMatrixEffect(std::unique_ptr child) + : GrFragmentProcessor(CLASS_ID, kNone_OptimizationFlags) { + this->registerChild(std::move(child), + SkSL::SampleUsage::UniformMatrix( + "float3x3(float3(0.5, 0.0, 0.0), " + "float3(0.0, 1.0, 0.0), " + "float3(0.0, 0.0, 1.0))")); + } + + const char* name() const override { return "ConstantMatrixEffect"; } + void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} + bool onIsEqual(const GrFragmentProcessor& that) const override { return this == &that; } + std::unique_ptr clone() const override { return nullptr; } + + GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { + class Impl : public GrGLSLFragmentProcessor { + void emitCode(EmitArgs& args) override { + SkString sample = this->invokeChildWithMatrix(0, args); + args.fFragBuilder->codeAppendf("%s = %s;\n", args.fOutputColor, sample.c_str()); + } + }; + return new Impl; + } +}; + +// Samples child with a uniform matrix (functionally identical to GrMatrixEffect) +// Scales along Y +class UniformMatrixEffect : public GrFragmentProcessor { +public: + static constexpr GrProcessor::ClassID CLASS_ID = (GrProcessor::ClassID) 4; + + UniformMatrixEffect(std::unique_ptr child) + : GrFragmentProcessor(CLASS_ID, kNone_OptimizationFlags) { + this->registerChild(std::move(child), SkSL::SampleUsage::UniformMatrix("matrix")); + } + + const char* name() const override { return "UniformMatrixEffect"; } + void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} + bool onIsEqual(const GrFragmentProcessor& that) const override { return this == &that; } + std::unique_ptr clone() const override { return nullptr; } + + GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { + class Impl : public GrGLSLFragmentProcessor { + void emitCode(EmitArgs& args) override { + fMatrixVar = args.fUniformHandler->addUniform(&args.fFp, kFragment_GrShaderFlag, + kFloat3x3_GrSLType, "matrix"); + SkString sample = this->invokeChildWithMatrix(0, args); + args.fFragBuilder->codeAppendf("%s = %s;\n", args.fOutputColor, sample.c_str()); + } + void onSetData(const GrGLSLProgramDataManager& pdman, + const GrFragmentProcessor& proc) override { + pdman.setSkMatrix(fMatrixVar, SkMatrix::Scale(1, 0.5f)); + } + UniformHandle fMatrixVar; + }; + return new Impl; + } +}; + +// Samples child with a variable matrix +// Translates along X +// Typically, kVariable would be due to multiple sample(matrix) invocations, but this artificially +// uses kVariable with a single (constant) matrix. +class VariableMatrixEffect : public GrFragmentProcessor { +public: + static constexpr GrProcessor::ClassID CLASS_ID = (GrProcessor::ClassID) 5; + + VariableMatrixEffect(std::unique_ptr child) + : GrFragmentProcessor(CLASS_ID, kNone_OptimizationFlags) { + this->registerChild(std::move(child), SkSL::SampleUsage::VariableMatrix()); + } + + const char* name() const override { return "VariableMatrixEffect"; } + void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} + bool onIsEqual(const GrFragmentProcessor& that) const override { return this == &that; } + std::unique_ptr clone() const override { return nullptr; } + + GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { + class Impl : public GrGLSLFragmentProcessor { + void emitCode(EmitArgs& args) override { + SkString sample = this->invokeChildWithMatrix( + 0, args, "float3x3(1, 0, 0, 0, 1, 0, 8, 0, 1)"); + args.fFragBuilder->codeAppendf("%s = %s;\n", args.fOutputColor, sample.c_str()); + } + }; + return new Impl; + } +}; + +// Samples child with explicit coords +// Translates along Y +class ExplicitCoordEffect : public GrFragmentProcessor { +public: + static constexpr GrProcessor::ClassID CLASS_ID = (GrProcessor::ClassID) 6; + + ExplicitCoordEffect(std::unique_ptr child) + : GrFragmentProcessor(CLASS_ID, kNone_OptimizationFlags) { + this->registerChild(std::move(child), SkSL::SampleUsage::Explicit()); + this->setUsesSampleCoordsDirectly(); + } + + const char* name() const override { return "ExplicitCoordEffect"; } + void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} + bool onIsEqual(const GrFragmentProcessor& that) const override { return this == &that; } + std::unique_ptr clone() const override { return nullptr; } + + GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { + class Impl : public GrGLSLFragmentProcessor { + void emitCode(EmitArgs& args) override { + args.fFragBuilder->codeAppendf("float2 coord = %s + float2(0, 8);", + args.fSampleCoord); + SkString sample = this->invokeChild(0, args, "coord"); + args.fFragBuilder->codeAppendf("%s = %s;\n", args.fOutputColor, sample.c_str()); + } + }; + return new Impl; + } +}; + +// Generates test pattern +class TestPatternEffect : public GrFragmentProcessor { +public: + static constexpr GrProcessor::ClassID CLASS_ID = (GrProcessor::ClassID) 7; + + TestPatternEffect() : GrFragmentProcessor(CLASS_ID, kNone_OptimizationFlags) { + this->setUsesSampleCoordsDirectly(); + } + + const char* name() const override { return "TestPatternEffect"; } + void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} + bool onIsEqual(const GrFragmentProcessor& that) const override { return this == &that; } + std::unique_ptr clone() const override { return nullptr; } + + GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { + class Impl : public GrGLSLFragmentProcessor { + void emitCode(EmitArgs& args) override { + auto fb = args.fFragBuilder; + fb->codeAppendf("float2 coord = %s / 64.0;", args.fSampleCoord); + fb->codeAppendf("coord = floor(coord * 4) / 3;"); + fb->codeAppendf("%s = half4(half2(coord.rg), 0, 1);\n", args.fOutputColor); + } + }; + return new Impl; + } +}; + +SkBitmap make_test_bitmap() { + SkBitmap bitmap; + bitmap.allocN32Pixels(64, 64); + SkCanvas canvas(bitmap); + + SkFont font(ToolUtils::create_portable_typeface()); + const char* alpha = "ABCDEFGHIJKLMNOP"; + + for (int i = 0; i < 16; ++i) { + int tx = i % 4, + ty = i / 4; + int x = tx * 16, + y = ty * 16; + SkPaint paint; + paint.setColor4f({ tx / 3.0f, ty / 3.0f, 0.0f, 1.0f }); + canvas.drawRect(SkRect::MakeXYWH(x, y, 16, 16), paint); + paint.setColor4f({ (3-tx) / 3.0f, (3-ty)/3.0f, 1.0f, 1.0f }); + canvas.drawSimpleText(alpha + i, 1, SkTextEncoding::kUTF8, x + 3, y + 13, font, paint); + } + + return bitmap; +} + +enum EffectType { + kConstant, + kUniform, + kVariable, + kExplicit, +}; + +static std::unique_ptr wrap(std::unique_ptr fp, + EffectType effectType) { + switch (effectType) { + case kConstant: + return std::unique_ptr(new ConstantMatrixEffect(std::move(fp))); + case kUniform: + return std::unique_ptr(new UniformMatrixEffect(std::move(fp))); + case kVariable: + return std::unique_ptr(new VariableMatrixEffect(std::move(fp))); + case kExplicit: + return std::unique_ptr(new ExplicitCoordEffect(std::move(fp))); + } + SkUNREACHABLE; +} + +DEF_SIMPLE_GPU_GM(fp_sample_chaining, ctx, rtCtx, canvas, 380, 306) { + SkBitmap bmp = make_test_bitmap(); + + GrBitmapTextureMaker maker(ctx, bmp, GrImageTexGenPolicy::kDraw); + int x = 10, y = 10; + + auto nextCol = [&] { x += (64 + 10); }; + auto nextRow = [&] { x = 10; y += (64 + 10); }; + + auto draw = [&](std::initializer_list effects) { + // Enable TestPatternEffect to get a fully procedural inner effect. It's not quite as nice + // visually (no text labels in each box), but it avoids the extra GrMatrixEffect. + // Switching it on actually triggers *more* shader compilation failures. +#if 0 + auto fp = std::unique_ptr(new TestPatternEffect()); +#else + auto view = maker.view(GrMipMapped::kNo); + auto fp = GrTextureEffect::Make(std::move(view), maker.alphaType()); +#endif + for (EffectType effectType : effects) { + fp = wrap(std::move(fp), effectType); + } + GrPaint paint; + paint.addColorFragmentProcessor(std::move(fp)); + rtCtx->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::Translate(x, y), + SkRect::MakeIWH(64, 64)); + nextCol(); + }; + + // Reminder, in every case, the chain is more complicated than it seems, because the + // GrTextureEffect is wrapped in a GrMatrixEffect, which is subject to the same bugs that + // we're testing (particularly the bug about owner/base in UniformMatrixEffect). + + // First row: no transform, then each one independently applied + draw({}); // Identity (4 rows and columns) + draw({ kConstant }); // Scale X axis by 2x (2 visible columns) + draw({ kUniform }); // Scale Y axis by 2x (2 visible rows) + draw({ kVariable }); // Translate left by 8px + draw({ kExplicit }); // Translate up by 8px + nextRow(); + + // Second row: transform duplicated + draw({ kConstant, kUniform }); // Scale XY by 2x (2 rows and columns) + draw({ kConstant, kConstant }); // Scale X axis by 4x (1 visible column) + draw({ kUniform, kUniform }); // Scale Y axis by 4x (1 visible row) + draw({ kVariable, kVariable }); // Translate left by 16px + draw({ kExplicit, kExplicit }); // Translate up by 16px + nextRow(); + + // Remember, these are applied inside out: + draw({ kConstant, kExplicit }); // Scale X by 2x and translate up by 8px + draw({ kConstant, kVariable }); // Scale X by 2x and translate left by 8px + draw({ kUniform, kVariable }); // Scale Y by 2x and translate left by 8px + draw({ kUniform, kExplicit }); // Scale Y by 2x and translate up by 8px + draw({ kVariable, kExplicit }); // Translate left and up by 8px + nextRow(); + + draw({ kExplicit, kExplicit, kConstant }); // Scale X by 2x and translate up by 16px + draw({ kVariable, kConstant }); // Scale X by 2x and translate left by 16px + draw({ kVariable, kVariable, kUniform }); // Scale Y by 2x and translate left by 16px + draw({ kExplicit, kUniform }); // Scale Y by 2x and translate up by 16px + draw({ kExplicit, kUniform, kVariable, kConstant }); // Scale XY by 2x and translate xy 16px +} + +const char* gConstantMatrixSkSL = R"( + in shader child; + void main(float2 xy, inout half4 color) { + color = sample(child, float3x3(0.5, 0.0, 0.0, + 0.0, 1.0, 0.0, + 0.0, 0.0, 1.0)); + } +)"; + +const char* gUniformMatrixSkSL = R"( + in shader child; + uniform float3x3 matrix; + void main(float2 xy, inout half4 color) { + color = sample(child, matrix); + } +)"; + +// This form (uniform * constant) is currently detected as variable, thanks to our limited analysis +// when scanning for sample matrices. With that pulled into a separate local, it's highly unlikely +// we'll ever treat this as anything else. +const char* gVariableMatrixSkSL = R"( + in shader child; + uniform float3x3 matrix; + void main(float2 xy, inout half4 color) { + float3x3 varMatrix = matrix * 0.5; + color = sample(child, varMatrix); + } +)"; + +const char* gExplicitCoordSkSL = R"( + in shader child; + void main(float2 xy, inout half4 color) { + color = sample(child, xy + float2(0, 8)); + } +)"; + +// Version of fp_sample_chaining that uses SkRuntimeEffect +DEF_SIMPLE_GM(sksl_sample_chaining, canvas, 380, 306) { + SkBitmap bmp = make_test_bitmap(); + + sk_sp effects[4] = { + std::get<0>(SkRuntimeEffect::Make(SkString(gConstantMatrixSkSL))), + std::get<0>(SkRuntimeEffect::Make(SkString(gUniformMatrixSkSL))), + std::get<0>(SkRuntimeEffect::Make(SkString(gVariableMatrixSkSL))), + std::get<0>(SkRuntimeEffect::Make(SkString(gExplicitCoordSkSL))), + }; + + canvas->translate(10, 10); + canvas->save(); + auto nextCol = [&] { canvas->translate(64 + 10, 0); }; + auto nextRow = [&] { canvas->restore(); canvas->translate(0, 64 + 10); canvas->save(); }; + + auto draw = [&](std::initializer_list effectTypes) { + auto shader = bmp.makeShader(); + + for (EffectType effectType : effectTypes) { + SkRuntimeShaderBuilder builder(effects[effectType]); + builder.child("child") = shader; + switch (effectType) { + case kUniform: + builder.input("matrix") = SkMatrix::Scale(1.0f, 0.5f); + break; + case kVariable: + builder.input("matrix") = SkMatrix::Translate(8, 0); + break; + default: + break; + } + shader = builder.makeShader(nullptr, true); + } + SkPaint paint; + paint.setShader(shader); + canvas->drawRect(SkRect::MakeWH(64, 64), paint); + nextCol(); + }; + + // Reminder, in every case, the chain is more complicated than it seems, because the + // GrTextureEffect is wrapped in a GrMatrixEffect, which is subject to the same bugs that + // we're testing (particularly the bug about owner/base in UniformMatrixEffect). + + // First row: no transform, then each one independently applied + draw({}); // Identity (4 rows and columns) + draw({ kConstant }); // Scale X axis by 2x (2 visible columns) + draw({ kUniform }); // Scale Y axis by 2x (2 visible rows) + draw({ kVariable }); // Translate left by 8px + draw({ kExplicit }); // Translate up by 8px + nextRow(); + + // Second row: transform duplicated + draw({ kConstant, kUniform }); // Scale XY by 2x (2 rows and columns) + draw({ kConstant, kConstant }); // Scale X axis by 4x (1 visible column) + draw({ kUniform, kUniform }); // Scale Y axis by 4x (1 visible row) + draw({ kVariable, kVariable }); // Translate left by 16px + draw({ kExplicit, kExplicit }); // Translate up by 16px + nextRow(); + + // Remember, these are applied inside out: + draw({ kConstant, kExplicit }); // Scale X by 2x and translate up by 8px + draw({ kConstant, kVariable }); // Scale X by 2x and translate left by 8px + draw({ kUniform, kVariable }); // Scale Y by 2x and translate left by 8px + draw({ kUniform, kExplicit }); // Scale Y by 2x and translate up by 8px + draw({ kVariable, kExplicit }); // Translate left and up by 8px + nextRow(); + + draw({ kExplicit, kExplicit, kConstant }); // Scale X by 2x and translate up by 16px + draw({ kVariable, kConstant }); // Scale X by 2x and translate left by 16px + draw({ kVariable, kVariable, kUniform }); // Scale Y by 2x and translate left by 16px + draw({ kExplicit, kUniform }); // Scale Y by 2x and translate up by 16px + draw({ kExplicit, kUniform, kVariable, kConstant }); // Scale XY by 2x and translate xy 16px +} diff --git a/gm/fpcoordinateoverride.cpp b/gm/fpcoordinateoverride.cpp index c238da4377748..ad9a3dc3b6e74 100644 --- a/gm/fpcoordinateoverride.cpp +++ b/gm/fpcoordinateoverride.cpp @@ -21,7 +21,6 @@ #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrRenderTargetContextPriv.h" @@ -38,8 +37,7 @@ class SampleCoordEffect : public GrFragmentProcessor { SampleCoordEffect(std::unique_ptr child) : INHERITED(CLASS_ID, kNone_OptimizationFlags) { - child->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); + this->registerChild(std::move(child), SkSL::SampleUsage::Explicit()); } const char* name() const override { return "SampleCoordEffect"; } diff --git a/gm/fwidth_squircle.cpp b/gm/fwidth_squircle.cpp index 0386a02390bb4..d95c495739520 100644 --- a/gm/fwidth_squircle.cpp +++ b/gm/fwidth_squircle.cpp @@ -15,7 +15,7 @@ #include "include/core/SkRefCnt.h" #include "include/core/SkString.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/GrTypesPriv.h" #include "src/gpu/GrBuffer.h" #include "src/gpu/GrCaps.h" @@ -129,8 +129,8 @@ class FwidthSquircleTestProcessor::Impl : public GrGLSLGeometryProcessor { f->codeAppendf("%s = half4(coverage);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange&) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { const auto& proc = primProc.cast(); pdman.setSkMatrix(fViewMatrixHandle, proc.fViewMatrix); } @@ -197,7 +197,7 @@ class FwidthSquircleTestOp : public GrDrawOp { SkArenaAlloc* arena = context->priv().recordTimeAllocator(); // This is equivalent to a GrOpFlushState::detachAppliedClip - GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip::Disabled(); fProgramInfo = this->createProgramInfo(context->priv().caps(), arena, writeView, std::move(appliedClip), dstProxyView); diff --git a/gm/gm.cpp b/gm/gm.cpp index 4a49c2ae7af20..6b862ba3c3920 100644 --- a/gm/gm.cpp +++ b/gm/gm.cpp @@ -19,7 +19,7 @@ #include "include/core/SkShader.h" #include "include/core/SkTileMode.h" #include "include/core/SkTypeface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkTraceEvent.h" #include "tools/ToolUtils.h" @@ -64,14 +64,46 @@ static void draw_gpu_only_message(SkCanvas* canvas) { canvas->drawPaint(paint); } +static void handle_gm_failure(SkCanvas* canvas, DrawResult result, const SkString& errorMsg) { + if (DrawResult::kFail == result) { + draw_failure_message(canvas, "DRAW FAILED: %s", errorMsg.c_str()); + } else if (SkString(GM::kErrorMsg_DrawSkippedGpuOnly) == errorMsg) { + draw_gpu_only_message(canvas); + } else { + draw_failure_message(canvas, "DRAW SKIPPED: %s", errorMsg.c_str()); + } +} + GM::GM(SkColor bgColor) { fMode = kGM_Mode; fBGColor = bgColor; - fHaveCalledOnceBeforeDraw = false; } GM::~GM() {} +DrawResult GM::gpuSetup(GrDirectContext* context, SkCanvas* canvas, SkString* errorMsg) { + TRACE_EVENT1("GM", TRACE_FUNC, "name", TRACE_STR_COPY(this->getName())); + if (!fGpuSetup) { + // When drawn in viewer, gpuSetup will be called multiple times with the same + // GrContext. + fGpuSetup = true; + fGpuSetupResult = this->onGpuSetup(context, errorMsg); + } + if (DrawResult::kOk != fGpuSetupResult) { + handle_gm_failure(canvas, fGpuSetupResult, *errorMsg); + } + + return fGpuSetupResult; +} + +void GM::gpuTeardown() { + this->onGpuTeardown(); + + // After 'gpuTeardown' a GM can be reused with a different GrContext. Reset the flag + // so 'onGpuSetup' will be called. + fGpuSetup = false; +} + DrawResult GM::draw(SkCanvas* canvas, SkString* errorMsg) { TRACE_EVENT1("GM", TRACE_FUNC, "name", TRACE_STR_COPY(this->getName())); this->drawBackground(canvas); @@ -80,31 +112,18 @@ DrawResult GM::draw(SkCanvas* canvas, SkString* errorMsg) { DrawResult GM::drawContent(SkCanvas* canvas, SkString* errorMsg) { TRACE_EVENT0("GM", TRACE_FUNC); - if (!fHaveCalledOnceBeforeDraw) { - fHaveCalledOnceBeforeDraw = true; - this->onOnceBeforeDraw(); - } + this->onceBeforeDraw(); SkAutoCanvasRestore acr(canvas, true); DrawResult drawResult = this->onDraw(canvas, errorMsg); if (DrawResult::kOk != drawResult) { - if (DrawResult::kFail == drawResult) { - draw_failure_message(canvas, "DRAW FAILED: %s", errorMsg->c_str()); - } else if (SkString(kErrorMsg_DrawSkippedGpuOnly) == *errorMsg) { - draw_gpu_only_message(canvas); - } else { - draw_failure_message(canvas, "DRAW SKIPPED: %s", errorMsg->c_str()); - } + handle_gm_failure(canvas, drawResult, *errorMsg); } return drawResult; } void GM::drawBackground(SkCanvas* canvas) { TRACE_EVENT0("GM", TRACE_FUNC); - if (!fHaveCalledOnceBeforeDraw) { - fHaveCalledOnceBeforeDraw = true; - this->onOnceBeforeDraw(); - } - SkAutoCanvasRestore acr(canvas, true); + this->onceBeforeDraw(); canvas->drawColor(fBGColor, SkBlendMode::kSrc); } @@ -123,8 +142,8 @@ DrawResult SimpleGM::onDraw(SkCanvas* canvas, SkString* errorMsg) { SkISize SimpleGpuGM::onISize() { return fSize; } SkString SimpleGpuGM::onShortName() { return fName; } -DrawResult SimpleGpuGM::onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, - SkString* errorMsg) { +DrawResult SimpleGpuGM::onDraw(GrRecordingContext* ctx, GrRenderTargetContext* rtc, + SkCanvas* canvas, SkString* errorMsg) { return fDrawProc(ctx, rtc, canvas, errorMsg); } @@ -168,17 +187,18 @@ void GM::drawSizeBounds(SkCanvas* canvas, SkColor color) { // need to explicitly declare this, or we get some weird infinite loop llist template GMRegistry* GMRegistry::gHead; -DrawResult GpuGM::onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, - SkString* errorMsg) { +DrawResult GpuGM::onDraw(GrRecordingContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, + SkString* errorMsg) { this->onDraw(ctx, rtc, canvas); return DrawResult::kOk; } -void GpuGM::onDraw(GrContext*, GrRenderTargetContext*, SkCanvas*) { +void GpuGM::onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas*) { SK_ABORT("Not implemented."); } DrawResult GpuGM::onDraw(SkCanvas* canvas, SkString* errorMsg) { - GrContext* ctx = canvas->getGrContext(); + + auto ctx = canvas->recordingContext(); GrRenderTargetContext* rtc = canvas->internal_private_accessTopLayerRenderTargetContext(); if (!ctx || !rtc) { *errorMsg = kErrorMsg_DrawSkippedGpuOnly; diff --git a/gm/gm.h b/gm/gm.h index 1bebe6b3c2ddf..bec5fe6a72db1 100644 --- a/gm/gm.h +++ b/gm/gm.h @@ -19,7 +19,8 @@ #include -class GrContext; +class GrDirectContext; +class GrRecordingContext; class GrRenderTargetContext; class SkCanvas; class SkMetaData; @@ -62,14 +63,16 @@ struct GrContextOptions; #define DEF_SIMPLE_GPU_GM(NAME, GR_CONTEXT, RENDER_TARGET_CONTEXT, CANVAS, W, H) \ DEF_SIMPLE_GPU_GM_BG(NAME, GR_CONTEXT, RENDER_TARGET_CONTEXT, CANVAS, W, H, SK_ColorWHITE) #define DEF_SIMPLE_GPU_GM_BG(NAME, GR_CONTEXT, RENDER_TARGET_CONTEXT, CANVAS, W, H, BGCOLOR) \ - static void SK_MACRO_CONCAT(NAME,_GM_inner)(GrContext*, GrRenderTargetContext*, SkCanvas*); \ + static void SK_MACRO_CONCAT(NAME,_GM_inner)(GrRecordingContext*, GrRenderTargetContext*, \ + SkCanvas*); \ DEF_SIMPLE_GPU_GM_BG_CAN_FAIL(NAME, GR_CONTEXT, RENDER_TARGET_CONTEXT, CANVAS,, W, H, \ BGCOLOR) { \ SK_MACRO_CONCAT(NAME,_GM_inner)(GR_CONTEXT, RENDER_TARGET_CONTEXT, CANVAS); \ return skiagm::DrawResult::kOk; \ } \ void SK_MACRO_CONCAT(NAME,_GM_inner)( \ - GrContext* GR_CONTEXT, GrRenderTargetContext* RENDER_TARGET_CONTEXT, SkCanvas* CANVAS) + GrRecordingContext* GR_CONTEXT, GrRenderTargetContext* RENDER_TARGET_CONTEXT, \ + SkCanvas* CANVAS) #define DEF_SIMPLE_GPU_GM_CAN_FAIL(NAME, GR_CONTEXT, RENDER_TARGET_CONTEXT, CANVAS, ERR_MSG, W, H) \ DEF_SIMPLE_GPU_GM_BG_CAN_FAIL(NAME, GR_CONTEXT, RENDER_TARGET_CONTEXT, CANVAS, \ @@ -77,18 +80,18 @@ struct GrContextOptions; #define DEF_SIMPLE_GPU_GM_BG_CAN_FAIL(NAME, GR_CONTEXT, RENDER_TARGET_CONTEXT, CANVAS, ERR_MSG, W, \ H, BGCOLOR) \ static skiagm::DrawResult SK_MACRO_CONCAT(NAME,_GM)( \ - GrContext*, GrRenderTargetContext*, SkCanvas*, SkString*); \ + GrRecordingContext*, GrRenderTargetContext*, SkCanvas*, SkString*); \ DEF_GM(return new skiagm::SimpleGpuGM(BGCOLOR, SkString(#NAME), {W,H}, \ SK_MACRO_CONCAT(NAME,_GM));) \ skiagm::DrawResult SK_MACRO_CONCAT(NAME,_GM)( \ - GrContext* GR_CONTEXT, GrRenderTargetContext* RENDER_TARGET_CONTEXT, SkCanvas* CANVAS, \ - SkString* ERR_MSG) + GrRecordingContext* GR_CONTEXT, GrRenderTargetContext* RENDER_TARGET_CONTEXT, \ + SkCanvas* CANVAS, SkString* ERR_MSG) namespace skiagm { enum class DrawResult { - kOk, // Test drew successfully. - kFail, // Test failed to draw. + kOk, // Test drew successfully. + kFail, // Test failed to draw. kSkip // Test is not applicable in this context and should be skipped. }; @@ -110,6 +113,20 @@ namespace skiagm { static constexpr char kErrorMsg_DrawSkippedGpuOnly[] = "This test is for GPU configs only."; + DrawResult gpuSetup(GrDirectContext* context, SkCanvas* canvas) { + SkString errorMsg; + return this->gpuSetup(context, canvas, &errorMsg); + } + DrawResult gpuSetup(GrDirectContext*, SkCanvas*, SkString* errorMsg); + void gpuTeardown(); + + void onceBeforeDraw() { + if (!fHaveCalledOnceBeforeDraw) { + fHaveCalledOnceBeforeDraw = true; + this->onOnceBeforeDraw(); + } + } + DrawResult draw(SkCanvas* canvas) { SkString errorMsg; return this->draw(canvas, &errorMsg); @@ -152,8 +169,11 @@ namespace skiagm { virtual std::unique_ptr getVerifiers() const; protected: + // onGpuSetup is called once before any other processing with a direct context. + virtual DrawResult onGpuSetup(GrDirectContext*, SkString*) { return DrawResult::kOk; } + virtual void onGpuTeardown() {} virtual void onOnceBeforeDraw(); - virtual DrawResult onDraw(SkCanvas* canvas, SkString* errorMsg); + virtual DrawResult onDraw(SkCanvas*, SkString* errorMsg); virtual void onDraw(SkCanvas*); virtual SkISize onISize() = 0; @@ -164,10 +184,12 @@ namespace skiagm { virtual void onSetControls(const SkMetaData&); private: - Mode fMode; - SkString fShortName; - SkColor fBGColor; - bool fHaveCalledOnceBeforeDraw; + Mode fMode; + SkString fShortName; + SkColor fBGColor; + bool fHaveCalledOnceBeforeDraw = false; + bool fGpuSetup = false; + DrawResult fGpuSetupResult = DrawResult::kOk; }; using GMFactory = std::unique_ptr (*)(); @@ -189,9 +211,9 @@ namespace skiagm { using GM::onDraw; DrawResult onDraw(SkCanvas*, SkString* errorMsg) final; - virtual DrawResult onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, + virtual DrawResult onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas*, SkString* errorMsg); - virtual void onDraw(GrContext*, GrRenderTargetContext*, SkCanvas*); + virtual void onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas*); }; // SimpleGM is intended for basic GMs that can define their entire implementation inside a @@ -214,14 +236,15 @@ namespace skiagm { class SimpleGpuGM : public GpuGM { public: - using DrawProc = DrawResult(*)(GrContext*, GrRenderTargetContext*, SkCanvas*, SkString*); + using DrawProc = DrawResult(*)(GrRecordingContext*, GrRenderTargetContext*, + SkCanvas*, SkString* errorMsg); SimpleGpuGM(SkColor bgColor, const SkString& name, const SkISize& size, DrawProc drawProc) : GpuGM(bgColor), fName(name), fSize(size), fDrawProc(drawProc) {} private: SkISize onISize() override; SkString onShortName() override; - DrawResult onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, + DrawResult onDraw(GrRecordingContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, SkString* errorMsg) override; const SkString fName; diff --git a/gm/gpu_blur_utils.cpp b/gm/gpu_blur_utils.cpp index 60dcd22cfdcab..af996753c46e2 100644 --- a/gm/gpu_blur_utils.cpp +++ b/gm/gpu_blur_utils.cpp @@ -8,14 +8,15 @@ #include "gm/gm.h" #include "include/effects/SkGradientShader.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkGpuBlurUtils.h" -#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrStyle.h" #include "src/gpu/SkGr.h" #include "src/gpu/effects/GrXfermodeFragmentProcessor.h" #include "src/image/SkImage_Base.h" -static GrSurfaceProxyView blur(GrContext* ctx, +static GrSurfaceProxyView blur(GrRecordingContext* ctx, GrSurfaceProxyView src, SkIRect dstB, SkIRect srcB, @@ -31,9 +32,16 @@ static GrSurfaceProxyView blur(GrContext* ctx, return resultRTC->readSurfaceView(); }; -static void run(GrContext* ctx, GrRenderTargetContext* rtc, bool subsetSrc, bool ref) { +static void run(GrRecordingContext* ctx, GrRenderTargetContext* rtc, bool subsetSrc, bool ref) { + // TODO: once MakeRenderTarget can take a GrRecordingContext this family of tests no + // longer needs to be blacklisted for the OOPR configs + auto direct = ctx->asDirectContext(); + if (!direct) { + return; + } + auto srcII = SkImageInfo::Make(60, 60, kRGBA_8888_SkColorType, kPremul_SkAlphaType); - auto surf = SkSurface::MakeRenderTarget(ctx, SkBudgeted::kYes, srcII); + auto surf = SkSurface::MakeRenderTarget(direct, SkBudgeted::kYes, srcII); GrSurfaceProxyView src; if (surf) { SkScalar w = surf->width(); @@ -65,7 +73,7 @@ static void run(GrContext* ctx, GrRenderTargetContext* rtc, bool subsetSrc, bool surf->getCanvas()->drawLine({7.f*w/8.f, 0.f}, {7.f*h/8.f, h}, paint); auto img = surf->makeImageSnapshot(); - if (auto v = as_IB(img)->view(ctx)) { + if (auto v = as_IB(img)->view(direct)) { src = *v; } } @@ -204,8 +212,8 @@ static void run(GrContext* ctx, GrRenderTargetContext* rtc, bool subsetSrc, bool GrPaint paint; // Compose against white (default paint color) and then replace the dst // (SkBlendMode::kSrc). - fp = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(fp), - SkBlendMode::kSrcOver); + fp = GrXfermodeFragmentProcessor::Make(std::move(fp), /*dst=*/nullptr, + SkBlendMode::kSrcOver); paint.addColorFragmentProcessor(std::move(fp)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); rtc->fillRectToRect(nullptr, std::move(paint), GrAA::kNo, m, diff --git a/gm/image.cpp b/gm/image.cpp index 6211f48610f74..390d668857376 100644 --- a/gm/image.cpp +++ b/gm/image.cpp @@ -30,6 +30,7 @@ #include "include/core/SkSurface.h" #include "include/core/SkTypeface.h" #include "include/core/SkTypes.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkMalloc.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkReadBuffer.h" @@ -286,6 +287,11 @@ DEF_GM( return new ScalePixelsGM; ) /////////////////////////////////////////////////////////////////////////////////////////////////// DEF_SIMPLE_GPU_GM(new_texture_image, context, rtc, canvas, 280, 60) { + auto direct = context->asDirectContext(); + if (!direct) { + return; + } + auto render_image = [](SkCanvas* canvas) { canvas->clear(SK_ColorBLUE); SkPaint paint; @@ -331,8 +337,8 @@ DEF_SIMPLE_GPU_GM(new_texture_image, context, rtc, canvas, 280, 60) { SkImage::BitDepth::kU8, srgbColorSpace); }, // Create a texture image - [context, render_image]() -> sk_sp { - auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, + [direct, render_image]() -> sk_sp { + auto surface(SkSurface::MakeRenderTarget(direct, SkBudgeted::kYes, SkImageInfo::MakeS32(kSize, kSize, kPremul_SkAlphaType))); if (!surface) { @@ -348,7 +354,7 @@ DEF_SIMPLE_GPU_GM(new_texture_image, context, rtc, canvas, 280, 60) { for (auto factory : imageFactories) { auto image(factory()); if (image) { - sk_sp texImage(image->makeTextureImage(context)); + sk_sp texImage(image->makeTextureImage(direct)); if (texImage) { canvas->drawImage(texImage, 0, 0); } diff --git a/gm/imagefilterstransformed.cpp b/gm/imagefilterstransformed.cpp index 298dde6cd5237..bc91411c6b1df 100644 --- a/gm/imagefilterstransformed.cpp +++ b/gm/imagefilterstransformed.cpp @@ -25,7 +25,9 @@ #include "include/core/SkTypes.h" #include "include/effects/SkGradientShader.h" #include "include/effects/SkImageFilters.h" +#include "tools/Resources.h" #include "tools/ToolUtils.h" +#include "tools/timer/TimeUtils.h" #include @@ -161,3 +163,56 @@ DEF_SIMPLE_GM(rotate_imagefilter, canvas, 500, 500) { canvas->translate(0, 150); } } + +class ImageFilterMatrixWLocalMatrix : public skiagm::GM { +public: + + // Start at 132 degrees, since that resulted in a skipped draw before the fix to + // SkLocalMatrixImageFilter's computeFastBounds() function. + ImageFilterMatrixWLocalMatrix() : fDegrees(132.f) {} + +protected: + SkString onShortName() override { + return SkString("imagefilter_matrix_localmatrix"); + } + + SkISize onISize() override { + return SkISize::Make(512, 512); + } + + bool onAnimate(double nanos) override { + // Animate the rotation angle to ensure the local matrix bounds modifications work + // for a variety of transformations. + fDegrees = TimeUtils::Scaled(1e-9f * nanos, 360.f); + return true; + } + + void onOnceBeforeDraw() override { + fImage = GetResourceAsImage("images/mandrill_256.png"); + } + + void onDraw(SkCanvas* canvas) override { + SkMatrix localMatrix; + localMatrix.preTranslate(128, 128); + localMatrix.preScale(2.0f, 2.0f); + + // This matrix applies a rotate around the center of the image (prior to the simulated + // hi-dpi 2x device scale). + SkMatrix filterMatrix; + filterMatrix.setRotate(fDegrees, 64, 64); + + sk_sp filter = + SkImageFilter::MakeMatrixFilter(filterMatrix, kLow_SkFilterQuality, nullptr) + ->makeWithLocalMatrix(localMatrix); + + SkPaint p; + p.setImageFilter(filter); + canvas->drawImage(fImage.get(), 128, 128, &p); + } + +private: + SkScalar fDegrees; + sk_sp fImage; +}; + +DEF_GM(return new ImageFilterMatrixWLocalMatrix();) diff --git a/gm/imagefromyuvtextures.cpp b/gm/imagefromyuvtextures.cpp index 15a98297d41d3..324e1901207cd 100644 --- a/gm/imagefromyuvtextures.cpp +++ b/gm/imagefromyuvtextures.cpp @@ -23,12 +23,15 @@ #include "include/core/SkTypes.h" #include "include/core/SkYUVAIndex.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/GrTypes.h" #include "include/private/SkTo.h" #include "src/core/SkMathPriv.h" #include "src/core/SkYUVMath.h" #include "tools/Resources.h" +#include "tools/gpu/YUVUtils.h" + +using sk_gpu_test::YUVABackendReleaseContext; class GrRenderTargetContext; @@ -46,11 +49,7 @@ class ImageFromYUVTextures : public GpuGM { SkISize onISize() override { return {1420, 610}; } - void onOnceBeforeDraw() override { - fRGBABmp = this->createBmpAndPlanes("images/mandrill_32.png", fYUVABmps); - } - - SkBitmap createBmpAndPlanes(const char* name, SkBitmap yuvaBmps[4]) { + static SkBitmap CreateBmpAndPlanes(const char* name, SkBitmap yuvaBmps[4]) { SkBitmap bmp; if (!GetResourceAsBitmap(name, &bmp)) { return {}; @@ -120,73 +119,141 @@ class ImageFromYUVTextures : public GpuGM { return rgbaBmp; } - void createYUVTextures(SkBitmap bmps[4], GrContext* context, GrBackendTexture textures[4]) { + static bool CreateYUVBackendTextures(GrDirectContext* context, SkBitmap bmps[4], + SkYUVAIndex indices[4], + YUVABackendReleaseContext* beContext) { for (int i = 0; i < 4; ++i) { - textures[i] = context->createBackendTexture(bmps[i].pixmap(), GrRenderable::kNo, - GrProtected::kNo); + GrBackendTexture tmp = context->createBackendTexture( + bmps[i].pixmap(), GrRenderable::kNo, GrProtected::kNo, + YUVABackendReleaseContext::CreationCompleteProc(i), + beContext); + if (!tmp.isValid()) { + return false; + } + + beContext->set(i, tmp); } + + for (int i = 0; i < 4; ++i) { + auto chanMask = beContext->beTexture(i).getBackendFormat().channelMask(); + // We expect the single channel bitmaps to produce single channel textures. + SkASSERT(chanMask && SkIsPow2(chanMask)); + if (chanMask & kGray_SkColorChannelFlag) { + indices[i].fChannel = SkColorChannel::kR; + } else { + indices[i].fChannel = static_cast(31 - SkCLZ(chanMask)); + } + indices[i].fIndex = i; + } + + return true; } - void createResultTexture(GrContext* context, SkISize size, GrBackendTexture* resultTexture) { - *resultTexture = context->createBackendTexture( - size.width(), size.height(), kRGBA_8888_SkColorType, SkColors::kTransparent, - GrMipMapped::kNo, GrRenderable::kYes, GrProtected::kNo); + sk_sp makeYUVAImage(GrDirectContext* context) { + auto releaseContext = new YUVABackendReleaseContext(context); + SkYUVAIndex indices[4]; + + if (!CreateYUVBackendTextures(context, fYUVABmps, indices, releaseContext)) { + YUVABackendReleaseContext::Unwind(context, releaseContext, false); + return nullptr; + } + + return SkImage::MakeFromYUVATextures(context, + kJPEG_SkYUVColorSpace, + releaseContext->beTextures(), + indices, + fRGBABmp.dimensions(), + kTopLeft_GrSurfaceOrigin, + nullptr, + YUVABackendReleaseContext::Release, + releaseContext); } - void deleteBackendTextures(GrContext* context, GrBackendTexture textures[], int n) { - if (context->abandoned()) { - return; + sk_sp createReferenceImage(GrDirectContext* context) { + auto planeReleaseContext = new YUVABackendReleaseContext(context); + SkYUVAIndex indices[4]; + + if (!CreateYUVBackendTextures(context, fYUVABmps, indices, planeReleaseContext)) { + YUVABackendReleaseContext::Unwind(context, planeReleaseContext, false); + return nullptr; } - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - context->flush(flushInfo); - context->submit(true); + auto rgbaReleaseContext = new YUVABackendReleaseContext(context); - for (int i = 0; i < n; ++i) { - context->deleteBackendTexture(textures[i]); + GrBackendTexture resultTexture = context->createBackendTexture( + fRGBABmp.dimensions().width(), fRGBABmp.dimensions().height(), + kRGBA_8888_SkColorType, SkColors::kTransparent, + GrMipMapped::kNo, GrRenderable::kYes, GrProtected::kNo, + YUVABackendReleaseContext::CreationCompleteProc(0), + rgbaReleaseContext); + if (!resultTexture.isValid()) { + YUVABackendReleaseContext::Unwind(context, planeReleaseContext, false); + YUVABackendReleaseContext::Unwind(context, rgbaReleaseContext, false); + return nullptr; } + + rgbaReleaseContext->set(0, resultTexture); + + auto tmp = SkImage::MakeFromYUVATexturesCopyWithExternalBackend( + context, + kJPEG_SkYUVColorSpace, + planeReleaseContext->beTextures(), + indices, + fRGBABmp.dimensions(), + kTopLeft_GrSurfaceOrigin, + resultTexture, + nullptr, + YUVABackendReleaseContext::Release, + rgbaReleaseContext); + YUVABackendReleaseContext::Unwind(context, planeReleaseContext, true); + return tmp; } - void onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { - GrBackendTexture yuvaTextures[4]; + DrawResult onGpuSetup(GrDirectContext* context, SkString* errorMsg) override { + if (!context || context->abandoned()) { + return DrawResult::kSkip; + } - this->createYUVTextures(fYUVABmps, context, yuvaTextures); - SkYUVAIndex indices[4]; - for (int i = 0; i < 4; ++i) { - if (!yuvaTextures[i].isValid()) { - return; - } - auto chanMask = yuvaTextures[i].getBackendFormat().channelMask(); - // We expect the single channel bitmaps to produce single channel textures. - SkASSERT(chanMask && SkIsPow2(chanMask)); - if (chanMask & kGray_SkColorChannelFlag) { - indices[i].fChannel = SkColorChannel::kR; - } else { - indices[i].fChannel = static_cast(31 - SkCLZ(chanMask)); + fRGBABmp = CreateBmpAndPlanes("images/mandrill_32.png", fYUVABmps); + + // We make a version of this image for each draw because, if any draw flattens it to + // RGBA, then all subsequent draws would use the RGBA texture. + for (int i = 0; i < kNumImages; ++i) { + fYUVAImages[i] = this->makeYUVAImage(context); + if (!fYUVAImages[i]) { + *errorMsg = "Couldn't create src YUVA image."; + return DrawResult::kFail; } - indices[i].fIndex = i; } - // We remake this image before each draw because if any draw flattens it to RGBA then - // all subsequent draws use the RGBA texture. - auto makeImage1 = [&]() { - return SkImage::MakeFromYUVATextures(context, - kJPEG_SkYUVColorSpace, - yuvaTextures, - indices, - fRGBABmp.dimensions(), - kTopLeft_GrSurfaceOrigin); - }; + fReferenceImage = this->createReferenceImage(context); + if (!fReferenceImage) { + *errorMsg = "Couldn't create reference YUVA image."; + return DrawResult::kFail; + } + + // Some backends (e.g., Vulkan) require all work be completed for backend textures + // before they are deleted. Since we don't know when we'll next have access to a + // direct context, flush all the work now. + context->flush(); + context->submit(true); + + return DrawResult::kOk; + } - GrBackendTexture resultTexture; - this->createResultTexture(context, fRGBABmp.dimensions(), &resultTexture); - auto image2 = SkImage::MakeFromYUVTexturesCopyWithExternalBackend(context, - kJPEG_SkYUVColorSpace, - yuvaTextures, - kTopLeft_GrSurfaceOrigin, - resultTexture); + void onGpuTeardown() override { + for (sk_sp& image : fYUVAImages) { + image.reset(); + } + fReferenceImage.reset(); + } + + SkImage* getYUVAImage(int index) { + SkASSERT(index >= 0 && index < kNumImages); + return fYUVAImages[index].get(); + } + void onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas* canvas) override { auto draw_image = [canvas](SkImage* image, SkFilterQuality fq) -> SkSize { if (!image) { return {0, 0}; @@ -226,6 +293,7 @@ class ImageFromYUVTextures : public GpuGM { }; canvas->translate(kPad, kPad); + int imageIndex = 0; using DrawSig = SkSize(SkImage* image, SkFilterQuality fq); using DF = std::function; for (const auto& draw : {DF(draw_image), DF(draw_image_rect), DF(draw_image_shader)}) { @@ -236,12 +304,12 @@ class ImageFromYUVTextures : public GpuGM { kMedium_SkFilterQuality, kHigh_SkFilterQuality}) { canvas->save(); canvas->scale(scale, scale); - auto s1 = draw(makeImage1().get(), fq); + auto s1 = draw(this->getYUVAImage(imageIndex++), fq); canvas->restore(); canvas->translate(kPad + SkScalarCeilToScalar(scale*s1.width()), 0); canvas->save(); canvas->scale(scale, scale); - auto s2 = draw(image2.get(), fq); + auto s2 = draw(fReferenceImage.get(), fq); canvas->restore(); canvas->translate(kPad + SkScalarCeilToScalar(scale*s2.width()), 0); h = std::max({h, s1.height(), s2.height()}); @@ -250,15 +318,17 @@ class ImageFromYUVTextures : public GpuGM { canvas->translate(0, kPad + SkScalarCeilToScalar(scale*h)); } } - - this->deleteBackendTextures(context, &resultTexture, 1); - this->deleteBackendTextures(context, yuvaTextures, 4); } private: - SkBitmap fRGBABmp; + SkBitmap fRGBABmp; // TODO: oddly, it looks like this could just be an SkISize SkBitmap fYUVABmps[4]; + // 3 draws x 3 scales x 4 filter qualities + static constexpr int kNumImages = 3 * 3 * 4; + sk_sp fYUVAImages[kNumImages]; + sk_sp fReferenceImage; + static constexpr SkScalar kPad = 10.0f; typedef GM INHERITED; diff --git a/gm/mac_aa_explorer.cpp b/gm/mac_aa_explorer.cpp index 599973562ede2..572ddf59046d4 100644 --- a/gm/mac_aa_explorer.cpp +++ b/gm/mac_aa_explorer.cpp @@ -50,7 +50,7 @@ static CGContextRef make_cg_ctx(const SkPixmap& pm) { switch (pm.colorType()) { case kRGBA_8888_SkColorType: - info = kCGBitmapByteOrder32Host | kCGImageAlphaNoneSkipFirst; + info = kCGBitmapByteOrder32Host | (CGBitmapInfo)kCGImageAlphaNoneSkipFirst; cs = CGColorSpaceCreateDeviceRGB(); break; case kGray_8_SkColorType: diff --git a/gm/mixercolorfilter.cpp b/gm/mixercolorfilter.cpp index 7132f46cabb18..4419eaae0e5d0 100644 --- a/gm/mixercolorfilter.cpp +++ b/gm/mixercolorfilter.cpp @@ -59,8 +59,7 @@ static sk_sp MakeTintColorFilter(SkColor lo, SkColor hi) { 0, 0, 0, (a_hi - a_lo) / 255.0f, SkIntToScalar(a_lo) / 255.0f, }; - return SkColorFilters::Matrix(tint_matrix) - ->makeComposed(SkLumaColorFilter::Make()); + return SkColorFilters::Matrix(tint_matrix)->makeComposed(SkLumaColorFilter::Make()); } namespace { diff --git a/gm/preservefillrule.cpp b/gm/preservefillrule.cpp index 33cfe61d2db8c..2a64034711146 100644 --- a/gm/preservefillrule.cpp +++ b/gm/preservefillrule.cpp @@ -10,8 +10,10 @@ #include "include/core/SkPath.h" #include "include/gpu/GrContext.h" #include "include/gpu/GrContextOptions.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDrawingManager.h" +#include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/ccpr/GrCCPathCache.h" #include "src/gpu/ccpr/GrCoverageCountingPathRenderer.h" @@ -58,7 +60,7 @@ class PreserveFillRuleGM : public GpuGM { ctxOptions->fAllowPathMaskCaching = true; } - DrawResult onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, + DrawResult onDraw(GrRecordingContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, SkString* errorMsg) override { using CoverageType = GrCCAtlas::CoverageType; @@ -106,7 +108,7 @@ class PreserveFillRuleGM : public GpuGM { canvas->drawPath(star7_evenOdd, paint); canvas->drawPath(star5_winding, paint); canvas->drawPath(star5_evenOdd, paint); - rtc->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo()); + rtc->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo(), nullptr); // Ensure the path cache is behaving in such a way that we are actually testing what we // think we are. diff --git a/gm/rectangletexture.cpp b/gm/rectangletexture.cpp index 9bcc4cde90226..703631ed084a9 100644 --- a/gm/rectangletexture.cpp +++ b/gm/rectangletexture.cpp @@ -28,17 +28,13 @@ #include "include/core/SkTypes.h" #include "include/effects/SkGradientShader.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/GrTypes.h" -#include "include/gpu/gl/GrGLFunctions.h" -#include "include/gpu/gl/GrGLInterface.h" -#include "include/gpu/gl/GrGLTypes.h" -#include "include/private/GrTypesPriv.h" +#include "src/core/SkAutoPixmapStorage.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" -#include "src/gpu/gl/GrGLContext.h" +#include "src/gpu/gl/GrGLCaps.h" #include "src/gpu/gl/GrGLDefines.h" -#include "src/gpu/gl/GrGLUtil.h" #include #include @@ -98,87 +94,78 @@ class RectangleTexture : public GpuGM { SkUNREACHABLE; } - static const GrGLContext* GetGLContextIfSupported(GrContext* context) { - if (context->backend() != GrBackendApi::kOpenGL) { - return nullptr; - } - auto* caps = static_cast(context->priv().caps()); - if (!caps->rectangleTextureSupport()) { - return nullptr; - } - return context->priv().getGpu()->glContextForTesting(); - } - - sk_sp createRectangleTextureImg(GrContext* context, GrSurfaceOrigin origin, + sk_sp createRectangleTextureImg(GrDirectContext* context, GrSurfaceOrigin origin, const SkBitmap content) { SkASSERT(content.colorType() == kRGBA_8888_SkColorType); - - const GrGLContext* glCtx = GetGLContextIfSupported(context); - if (!glCtx) { + auto format = GrBackendFormat::MakeGL(GR_GL_RGBA8, GR_GL_TEXTURE_RECTANGLE); + auto bet = context->createBackendTexture(content.width(), content.height(), format, + GrMipMapped::kNo, GrRenderable::kNo); + if (!bet.isValid()) { return nullptr; } - - const GrGLInterface* gl = glCtx->glInterface(); - // Useful for debugging whether errors result from use of RECTANGLE - // static constexpr GrGLenum kTarget = GR_GL_TEXTURE_2D; - static constexpr GrGLenum kTarget = GR_GL_TEXTURE_RECTANGLE; - GrGLuint id = 0; - GR_GL_CALL(gl, GenTextures(1, &id)); - GR_GL_CALL(gl, BindTexture(kTarget, id)); - GR_GL_CALL(gl, TexParameteri(kTarget, GR_GL_TEXTURE_MAG_FILTER, GR_GL_NEAREST)); - GR_GL_CALL(gl, TexParameteri(kTarget, GR_GL_TEXTURE_MIN_FILTER, GR_GL_NEAREST)); - GR_GL_CALL(gl, TexParameteri(kTarget, GR_GL_TEXTURE_WRAP_S, GR_GL_CLAMP_TO_EDGE)); - GR_GL_CALL(gl, TexParameteri(kTarget, GR_GL_TEXTURE_WRAP_T, GR_GL_CLAMP_TO_EDGE)); - std::unique_ptr tempPixels; - auto src = content.getAddr32(0, 0); - int h = content.height(); - int w = content.width(); + const SkPixmap* pm = &content.pixmap(); + SkAutoPixmapStorage tempPM; if (origin == kBottomLeft_GrSurfaceOrigin) { - tempPixels.reset(new uint32_t[w * h]); - for (int y = 0; y < h; ++y) { - std::copy_n(src + w*(h - y - 1), w, tempPixels.get() + w*y); + tempPM.alloc(pm->info()); + const uint32_t* src = pm->addr32(); + uint32_t* dst = tempPM.writable_addr32(0, content.height() - 1); + for (int y = 0; y < content.height(); ++y, + src += pm->rowBytesAsPixels(), + dst -= tempPM.rowBytesAsPixels()) { + std::copy_n(src, content.width(), dst); } - src = tempPixels.get(); + pm = &tempPM; } - GR_GL_CALL(gl, TexImage2D(kTarget, 0, GR_GL_RGBA, w, h, 0, GR_GL_RGBA, GR_GL_UNSIGNED_BYTE, - src)); - - context->resetContext(); - GrGLTextureInfo info; - info.fID = id; - info.fTarget = kTarget; - info.fFormat = GR_GL_RGBA8; - - GrBackendTexture rectangleTex(w, h, GrMipMapped::kNo, info); - - if (sk_sp image = SkImage::MakeFromAdoptedTexture( - context, rectangleTex, origin, content.colorType(), content.alphaType())) { - return image; + if (!context->updateBackendTexture(bet, pm, 1, nullptr, nullptr)) { + context->deleteBackendTexture(bet); } - GR_GL_CALL(gl, DeleteTextures(1, &id)); - return nullptr; + return SkImage::MakeFromAdoptedTexture(context, bet, origin, kRGBA_8888_SkColorType); } - DrawResult onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas, - SkString* errorMsg) override { - if (!GetGLContextIfSupported(context)) { + DrawResult onGpuSetup(GrDirectContext* context, SkString* errorMsg) override { + if (!context || context->abandoned()) { + return DrawResult::kSkip; + } + + if (context->backend() != GrBackendApi::kOpenGL_GrBackend || + !static_cast(context->priv().caps())->rectangleTextureSupport()) { *errorMsg = "This GM requires an OpenGL context that supports texture rectangles."; return DrawResult::kSkip; } auto gradCircle = this->makeImagePixels(50, ImageType::kGradientCircle); - static constexpr SkScalar kPad = 5.f; - sk_sp gradImgs[] = { - this->createRectangleTextureImg(context, kTopLeft_GrSurfaceOrigin, gradCircle), - this->createRectangleTextureImg(context, kBottomLeft_GrSurfaceOrigin, gradCircle), - }; - SkASSERT(SkToBool(gradImgs[0]) == SkToBool(gradImgs[1])); - if (!gradImgs[0]) { - *errorMsg = "Could not create rectangle texture image."; + fGradImgs[0] = this->createRectangleTextureImg(context, kTopLeft_GrSurfaceOrigin, + gradCircle); + fGradImgs[1] = this->createRectangleTextureImg(context, kBottomLeft_GrSurfaceOrigin, + gradCircle); + SkASSERT(SkToBool(fGradImgs[0]) == SkToBool(fGradImgs[1])); + if (!fGradImgs[0]) { + *errorMsg = "Could not create gradient rectangle texture images."; + return DrawResult::kFail; + } + + fSmallImg = this->createRectangleTextureImg(context, kTopLeft_GrSurfaceOrigin, + this->makeImagePixels(2, ImageType::k2x2)); + if (!fSmallImg) { + *errorMsg = "Could not create 2x2 rectangle texture image."; return DrawResult::kFail; } + return DrawResult::kOk; + } + + void onGpuTeardown() override { + fGradImgs[0] = fGradImgs[1] = nullptr; + fSmallImg = nullptr; + } + + DrawResult onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas* canvas, + SkString*) override { + SkASSERT(fGradImgs[0] && fGradImgs[1] && fSmallImg); + + static constexpr SkScalar kPad = 5.f; + constexpr SkFilterQuality kQualities[] = { kNone_SkFilterQuality, kLow_SkFilterQuality, @@ -189,8 +176,8 @@ class RectangleTexture : public GpuGM { constexpr SkScalar kScales[] = {1.0f, 1.2f, 0.75f}; canvas->translate(kPad, kPad); - for (size_t i = 0; i < SK_ARRAY_COUNT(gradImgs); ++i) { - auto img = gradImgs[i]; + for (size_t i = 0; i < kNumGradImages; ++i) { + auto img = fGradImgs[i]; int w = img->width(); int h = img->height(); for (auto s : kScales) { @@ -206,22 +193,22 @@ class RectangleTexture : public GpuGM { // clamp/clamp shader SkPaint clampPaint; clampPaint.setFilterQuality(q); - clampPaint.setShader(gradImgs[i]->makeShader()); + clampPaint.setShader(fGradImgs[i]->makeShader()); canvas->drawRect(SkRect::MakeWH(1.5f*w, 1.5f*h), clampPaint); canvas->translate(1.5f*w + kPad, 0); // repeat/mirror shader SkPaint repeatPaint; repeatPaint.setFilterQuality(q); - repeatPaint.setShader(gradImgs[i]->makeShader(SkTileMode::kRepeat, - SkTileMode::kMirror)); + repeatPaint.setShader(fGradImgs[i]->makeShader(SkTileMode::kRepeat, + SkTileMode::kMirror)); canvas->drawRect(SkRect::MakeWH(1.5f*w, 1.5f*h), repeatPaint); canvas->translate(1.5f*w + kPad, 0); // drawImageRect with kStrict auto srcRect = SkRect::MakeXYWH(.25f*w, .25f*h, .50f*w, .50f*h); auto dstRect = SkRect::MakeXYWH( 0, 0, .50f*w, .50f*h); - canvas->drawImageRect(gradImgs[i], srcRect, dstRect, &plainPaint, + canvas->drawImageRect(fGradImgs[i], srcRect, dstRect, &plainPaint, SkCanvas::kStrict_SrcRectConstraint); canvas->translate(.5f*w + kPad, 0); } @@ -230,11 +217,9 @@ class RectangleTexture : public GpuGM { } } - auto smallImg = this->createRectangleTextureImg(context, kTopLeft_GrSurfaceOrigin, - this->makeImagePixels(2, ImageType::k2x2)); static constexpr SkScalar kOutset = 25.f; canvas->translate(kOutset, kOutset); - auto dstRect = SkRect::Make(smallImg->dimensions()).makeOutset(kOutset, kOutset); + auto dstRect = SkRect::Make(fSmallImg->dimensions()).makeOutset(kOutset, kOutset); for (int fq = kNone_SkFilterQuality; fq <= kLast_SkFilterQuality; ++fq) { if (fq == kMedium_SkFilterQuality) { @@ -248,8 +233,8 @@ class RectangleTexture : public GpuGM { SkMatrix lm; lm.setRotate(45.f, 1, 1); lm.postScale(6.5f, 6.5f); - auto shader = smallImg->makeShader(static_cast(tx), - static_cast(ty), &lm); + auto shader = fSmallImg->makeShader(static_cast(tx), + static_cast(ty), &lm); SkPaint paint; paint.setShader(std::move(shader)); paint.setFilterQuality(static_cast(fq)); @@ -267,6 +252,11 @@ class RectangleTexture : public GpuGM { } private: + static const int kNumGradImages = 2; + + sk_sp fGradImgs[kNumGradImages]; + sk_sp fSmallImg; + typedef GM INHERITED; }; diff --git a/gm/rrects.cpp b/gm/rrects.cpp index bf3b0afb1da62..4dd5523a031a8 100644 --- a/gm/rrects.cpp +++ b/gm/rrects.cpp @@ -17,7 +17,6 @@ #include "include/core/SkSize.h" #include "include/core/SkString.h" #include "include/core/SkTypes.h" -#include "include/gpu/GrContext.h" #include "include/private/GrSharedEnums.h" #include "include/private/GrTypesPriv.h" #include "src/gpu/GrCaps.h" @@ -82,7 +81,7 @@ class RRectGM : public GM { DrawResult onDraw(SkCanvas* canvas, SkString* errorMsg) override { GrRenderTargetContext* renderTargetContext = canvas->internal_private_accessTopLayerRenderTargetContext(); - GrContext* context = canvas->getGrContext(); + auto context = canvas->recordingContext(); if (kEffect_Type == fType && (!renderTargetContext || !context)) { *errorMsg = kErrorMsg_DrawSkippedGpuOnly; return DrawResult::kSkip; @@ -120,8 +119,9 @@ class RRectGM : public GM { rrect.offset(SkIntToScalar(x), SkIntToScalar(y)); GrClipEdgeType edgeType = (GrClipEdgeType) et; const auto& caps = *renderTargetContext->caps()->shaderCaps(); - auto fp = GrRRectEffect::Make(edgeType, rrect, caps); - if (fp) { + auto [success, fp] = GrRRectEffect::Make(/*inputFP=*/nullptr, + edgeType, rrect, caps); + if (success) { GrPaint grPaint; grPaint.setXPFactory(GrPorterDuffXPFactory::Get(SkBlendMode::kSrc)); grPaint.addCoverageFragmentProcessor(std::move(fp)); diff --git a/gm/runtimeshader.cpp b/gm/runtimeshader.cpp index 6491f8586d78c..23caaa38dee8a 100644 --- a/gm/runtimeshader.cpp +++ b/gm/runtimeshader.cpp @@ -115,10 +115,10 @@ class ThresholdRT : public skiagm::GM { } void main(float2 xy, inout half4 color) { - half4 before = sample(before_map, xy); - half4 after = sample(after_map, xy); + half4 before = sample(before_map); + half4 after = sample(after_map); - float m = smooth_cutoff(sample(threshold_map, xy).r); + float m = smooth_cutoff(sample(threshold_map).a); color = mix(before, after, half(m)); } )"; @@ -135,12 +135,7 @@ class ThresholdRT : public skiagm::GM { SkISize onISize() override { return {256, 256}; } - DrawResult onDraw(SkCanvas* canvas, SkString* errorMsg) override { - if (canvas->getGrContext() == nullptr) { - // until SkSL can handle child processors on the raster backend - return DrawResult::kSkip; - } - + void onDraw(SkCanvas* canvas) override { struct { float cutoff, slope; } uni = { @@ -164,8 +159,6 @@ class ThresholdRT : public skiagm::GM { draw(256, 0, fThreshold); draw( 0, 256, fBefore); draw(256, 256, fAfter); - - return DrawResult::kOk; } bool onAnimate(double nanos) override { @@ -258,7 +251,7 @@ class ColorCubeRT : public skiagm::GM { uniform float inv_size; void main(float2 xy, inout half4 color) { - float4 c = float4(unpremul(sample(input, xy))); + float4 c = float4(unpremul(sample(input))); // Map to cube coords: float3 cubeCoords = float3(c.rg * rg_scale + rg_bias, c.b * b_scale); @@ -286,12 +279,7 @@ class ColorCubeRT : public skiagm::GM { SkISize onISize() override { return {512, 512}; } - DrawResult onDraw(SkCanvas* canvas, SkString* errorMsg) override { - if (canvas->getGrContext() == nullptr) { - // until SkSL can handle child processors on the raster backend - return DrawResult::kSkip; - } - + void onDraw(SkCanvas* canvas) override { // First we draw the unmodified image, and a copy that was sepia-toned in Photoshop: canvas->drawImage(fMandrill, 0, 0); canvas->drawImage(fMandrillSepia, 0, 256); @@ -326,8 +314,6 @@ class ColorCubeRT : public skiagm::GM { paint.setShader(builder.makeShader(nullptr, true)); canvas->translate(0, 256); canvas->drawRect({ 0, 0, 256, 256 }, paint); - - return DrawResult::kOk; } }; DEF_GM(return new ColorCubeRT;) diff --git a/gm/sample_matrix_constant.cpp b/gm/sample_matrix_constant.cpp index 25fc92619dc0c..eaa603d49d6e8 100644 --- a/gm/sample_matrix_constant.cpp +++ b/gm/sample_matrix_constant.cpp @@ -21,11 +21,11 @@ class SampleMatrixConstantEffect : public GrFragmentProcessor { SampleMatrixConstantEffect(std::unique_ptr child) : INHERITED(CLASS_ID, kNone_OptimizationFlags) { - child->setSampleMatrix(SkSL::SampleMatrix(SkSL::SampleMatrix::Kind::kConstantOrUniform, - child.get(), "float3x3(float3(0.5, 0.0, 0.0), " - "float3(0.0, 0.5, 0.0), " - "float3(0.0, 0.0, 1.0))")); - this->registerChildProcessor(std::move(child)); + this->registerChild(std::move(child), + SkSL::SampleUsage::UniformMatrix( + "float3x3(float3(0.5, 0.0, 0.0), " + "float3(0.0, 0.5, 0.0), " + "float3(0.0, 0.0, 1.0))")); } const char* name() const override { return "SampleMatrixConstantEffect"; } @@ -46,7 +46,7 @@ class SampleMatrixConstantEffect : public GrFragmentProcessor { class GLSLSampleMatrixConstantEffect : public GrGLSLFragmentProcessor { void emitCode(EmitArgs& args) override { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - SkString sample = this->invokeChild(0, args); + SkString sample = this->invokeChildWithMatrix(0, args); fragBuilder->codeAppendf("%s = %s;\n", args.fOutputColor, sample.c_str()); } }; @@ -55,15 +55,25 @@ GrGLSLFragmentProcessor* SampleMatrixConstantEffect::onCreateGLSLInstance() cons return new GLSLSampleMatrixConstantEffect(); } -DEF_SIMPLE_GPU_GM(sample_matrix_constant, ctx, rtCtx, canvas, 512, 256) { - auto draw = [rtCtx](std::unique_ptr baseFP, int tx, int ty) { - auto fp = std::unique_ptr( - new SampleMatrixConstantEffect(std::move(baseFP))); +DEF_SIMPLE_GPU_GM(sample_matrix_constant, ctx, rtCtx, canvas, 1024, 256) { + auto wrap = [](std::unique_ptr baseFP) { + return std::unique_ptr( + new SampleMatrixConstantEffect(std::move(baseFP))); + }; + auto draw = [rtCtx, &wrap](std::unique_ptr baseFP, int tx, int ty) { + auto fp = wrap(std::move(baseFP)); GrPaint paint; paint.addColorFragmentProcessor(std::move(fp)); rtCtx->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::Translate(tx, ty), SkRect::MakeIWH(256, 256)); }; + auto draw2 = [rtCtx, &wrap](std::unique_ptr baseFP, int tx, int ty) { + auto fp = wrap(wrap(std::move(baseFP))); + GrPaint paint; + paint.addColorFragmentProcessor(std::move(fp)); + rtCtx->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::Translate(tx, ty), + SkRect::MakeIWH(256, 256)); + }; { SkBitmap bmp; @@ -73,6 +83,10 @@ DEF_SIMPLE_GPU_GM(sample_matrix_constant, ctx, rtCtx, canvas, 512, 256) { std::unique_ptr imgFP = GrTextureEffect::Make(std::move(view), bmp.alphaType(), SkMatrix()); draw(std::move(imgFP), 0, 0); + view = maker.view(GrMipMapped::kNo); + imgFP = + GrTextureEffect::Make(std::move(view), bmp.alphaType(), SkMatrix()); + draw2(std::move(imgFP), 256, 0); } { @@ -87,6 +101,8 @@ DEF_SIMPLE_GPU_GM(sample_matrix_constant, ctx, rtCtx, canvas, 512, 256) { GrColorInfo colorInfo; GrFPArgs args(ctx, matrixProvider, kHigh_SkFilterQuality, &colorInfo); std::unique_ptr gradientFP = as_SB(shader)->asFragmentProcessor(args); - draw(std::move(gradientFP), 256, 0); + draw(std::move(gradientFP), 512, 0); + gradientFP = as_SB(shader)->asFragmentProcessor(args); + draw2(std::move(gradientFP), 768, 0); } } diff --git a/gm/sample_matrix_variable.cpp b/gm/sample_matrix_variable.cpp index 63abd2bb89615..092820a879f84 100644 --- a/gm/sample_matrix_variable.cpp +++ b/gm/sample_matrix_variable.cpp @@ -25,8 +25,7 @@ class SampleMatrixVariableEffect : public GrFragmentProcessor { : INHERITED(CLASS_ID, kNone_OptimizationFlags) , fXOffset(xOffset) , fYOffset(yOffset) { - child->setSampleMatrix(SkSL::SampleMatrix(SkSL::SampleMatrix::Kind::kVariable)); - this->registerChildProcessor(std::move(child)); + this->registerChild(std::move(child), SkSL::SampleUsage::VariableMatrix()); } const char* name() const override { return "SampleMatrixVariableEffect"; } @@ -101,6 +100,6 @@ DEF_SIMPLE_GPU_GM(sample_matrix_variable, ctx, rtCtx, canvas, 512, 256) { GrColorInfo colorInfo; GrFPArgs args(ctx, matrixProvider, kHigh_SkFilterQuality, &colorInfo); std::unique_ptr gradientFP = as_SB(shader)->asFragmentProcessor(args); - draw(std::move(gradientFP), -0.5f, 1.0f, 256, 0); + draw(std::move(gradientFP), -128, 256, 256, 0); } } diff --git a/gm/samplelocations.cpp b/gm/samplelocations.cpp index f0aa9811d9e8a..79878062bee17 100644 --- a/gm/samplelocations.cpp +++ b/gm/samplelocations.cpp @@ -16,8 +16,8 @@ #include "include/core/SkString.h" #include "include/core/SkTypes.h" #include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/gpu/GrTypes.h" -#include "include/private/GrRecordingContext.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkColorData.h" #include "src/gpu/GrBuffer.h" @@ -85,7 +85,8 @@ class SampleLocationsGM : public GpuGM { } SkISize onISize() override { return SkISize::Make(200, 200); } - DrawResult onDraw(GrContext*, GrRenderTargetContext*, SkCanvas*, SkString* errorMsg) override; + DrawResult onDraw(GrRecordingContext*, GrRenderTargetContext*, + SkCanvas*, SkString* errorMsg) override; const GradType fGradType; const GrSurfaceOrigin fOrigin; @@ -194,8 +195,7 @@ class SampleLocationsTestProcessor::Impl : public GrGLSLGeometryProcessor { f->codeAppendf("}"); } - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - const CoordTransformRange&) override {} + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override {} }; GrGLSLPrimitiveProcessor* SampleLocationsTestProcessor::createGLSLInstance( @@ -274,7 +274,7 @@ class SampleLocationsTestOp : public GrDrawOp { SkArenaAlloc* arena = context->priv().recordTimeAllocator(); // This is equivalent to a GrOpFlushState::detachAppliedClip - GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip::Disabled(); fProgramInfo = this->createProgramInfo(context->priv().caps(), arena, writeView, std::move(appliedClip), dstProxyView); @@ -311,8 +311,8 @@ class SampleLocationsTestOp : public GrDrawOp { //////////////////////////////////////////////////////////////////////////////////////////////////// // Test. -DrawResult SampleLocationsGM::onDraw( - GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, SkString* errorMsg) { +DrawResult SampleLocationsGM::onDraw(GrRecordingContext* ctx, GrRenderTargetContext* rtc, + SkCanvas* canvas, SkString* errorMsg) { if (!ctx->priv().caps()->sampleLocationsSupport()) { *errorMsg = "Requires support for sample locations."; return DrawResult::kSkip; diff --git a/gm/savelayer.cpp b/gm/savelayer.cpp index 6108bde8d4e6b..9ce7be1cc9211 100644 --- a/gm/savelayer.cpp +++ b/gm/savelayer.cpp @@ -134,118 +134,6 @@ DEF_SIMPLE_GM(savelayer_initfromprev, canvas, 256, 256) { canvas->restore(); }; -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK -static void draw_mask(SkCanvas* canvas, int size) { - const SkScalar cx = size * SK_ScalarHalf, - cy = cx; - const SkColor colors[] = { 0x00000000, 0xffff0000, 0x00000000, 0xffff0000, 0x00000000, - 0xffff0000, 0x00000000, 0xffff0000, 0x00000000 }; - - SkPaint paint; - paint.setAntiAlias(true); - paint.setShader(SkGradientShader::MakeSweep(cx, cy, colors, nullptr, SK_ARRAY_COUNT(colors))); - canvas->drawPaint(paint); - - paint.setShader(SkGradientShader::MakeRadial({cx, cy}, size / 4, colors, nullptr, 2, - SkTileMode::kClamp)); - canvas->drawCircle(cx, cy, size / 4, paint); -} - -DEF_SIMPLE_GM(savelayer_clipmask, canvas, 1200, 1200) { - static constexpr int kSize = 100; - static constexpr SkRect kLayerBounds = { kSize * 0.25f, kSize * 0.25f, - kSize * 0.75f, kSize * 0.75f }; - static constexpr struct { - const SkRect* bounds; - const SkScalar matrix[9]; - } kConfigs[] = { - { nullptr, { 1 , 0 , 0, 0 , 1 , 0, 0, 0, 1 } }, - { nullptr, { 2 , 0 , 0, 0 , 2 , 0, 0, 0, 1 } }, - { nullptr, { 2 , 0 , -50, 0 , 2 , -50, 0, 0, 1 } }, - { nullptr, { 0.707f, -0.707f, 50, 0.707f, 0.707f, -20, 0, 0, 1 } }, - { nullptr, { 0.5f , 0 , 25, 0 , 0.5f , 25, 0, 0, 1 } }, - - { &kLayerBounds, { 1 , 0 , 0, 0 , 1 , 0, 0, 0, 1 } }, - { &kLayerBounds, { 2 , 0 , 0, 0 , 2 , 0, 0, 0, 1 } }, - { &kLayerBounds, { 2 , 0 , -50, 0 , 2 , -50, 0, 0, 1 } }, - { &kLayerBounds, { 0.707f, -0.707f, 50, 0.707f, 0.707f, -20, 0, 0, 1 } }, - { &kLayerBounds, { 0.5f , 0 , 25, 0 , 0.5f , 25, 0, 0, 1 } }, - }; - - using MaskMakerFunc = sk_sp (*)(int size); - static const MaskMakerFunc kMaskMakers[] = { - [](int size) -> sk_sp { - auto surf = SkSurface::MakeRaster(SkImageInfo::MakeA8(size, size)); - draw_mask(surf->getCanvas(), size); - return surf->makeImageSnapshot(); - }, - - [](int size) -> sk_sp { - auto surf = SkSurface::MakeRasterN32Premul(size, size); - draw_mask(surf->getCanvas(), size); - return surf->makeImageSnapshot(); - }, - - [](int size) -> sk_sp { - SkPictureRecorder recorder; - draw_mask(recorder.beginRecording(size, size), size); - return SkImage::MakeFromPicture(recorder.finishRecordingAsPicture(), - SkISize::Make(size, size), - nullptr, nullptr, - SkImage::BitDepth::kU8, - SkColorSpace::MakeSRGB()); - } - }; - - using PaintMakerFunc = SkPaint (*)(); - static const PaintMakerFunc kPaintMakers[] = { - []() -> SkPaint { return SkPaint(); }, - []() -> SkPaint { - SkPaint p; p.setImageFilter(SkImageFilters::Blur(2, 2, nullptr)); return p; - }, - []() -> SkPaint { SkPaint p; p.setBlendMode(SkBlendMode::kSrcOut); return p; }, - }; - - canvas->drawColor(0xffcccccc); - - SkMatrix clipMatrix; - SkCanvas::SaveLayerRec rec; - rec.fClipMatrix = &clipMatrix; - - for (const auto& paintMaker : kPaintMakers) { - auto layerPaint = paintMaker(); - rec.fPaint = &layerPaint; - - for (const auto& maskMaker : kMaskMakers) { - sk_sp mask = maskMaker(kSize); - rec.fClipMask = mask.get(); - - canvas->save(); - for (const auto cfg : kConfigs) { - rec.fBounds = cfg.bounds; - clipMatrix.set9(cfg.matrix); - canvas->saveLayer(rec); - - SkPaint paint; - paint.setColor(0xff0000ff); - canvas->drawRect(SkRect::MakeWH(50, 50), paint); - paint.setColor(0xffff0000); - canvas->drawRect(SkRect::MakeXYWH(50, 0, 50, 50), paint); - paint.setColor(0xff00ff00); - canvas->drawRect(SkRect::MakeXYWH(50, 50, 50, 50), paint); - paint.setColor(0xffffff00); - canvas->drawRect(SkRect::MakeXYWH(0, 50, 50, 50), paint); - - canvas->restore(); - canvas->translate(120, 0); - } - canvas->restore(); - canvas->translate(0, 120); - } - } -} -#endif - DEF_SIMPLE_GM(savelayer_coverage, canvas, 500, 500) { canvas->saveLayer(nullptr, nullptr); @@ -284,67 +172,6 @@ DEF_SIMPLE_GM(savelayer_coverage, canvas, 500, 500) { canvas->restore(); } -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK -DEF_SIMPLE_GM(savelayer_clipmask_maskfilter, canvas, 500, 500) { - // Offscreen surface for making the clip mask and mask filter images - auto surf = SkSurface::MakeRaster(SkImageInfo::MakeA8(100, 100)); - SkPaint maskPaint; - maskPaint.setColor(SK_ColorWHITE); - maskPaint.setAntiAlias(true); - - // Draw a centered circle for the mask filter - surf->getCanvas()->clear(SK_ColorTRANSPARENT); - surf->getCanvas()->drawCircle(50.f, 50.f, 50.f, maskPaint); - auto maskFilterImage = surf->makeImageSnapshot(); - sk_sp maskFilter = SkShaderMaskFilter::Make(maskFilterImage->makeShader()); - - // Cut out a cross for the clip mask - surf->getCanvas()->clear(SK_ColorTRANSPARENT); - surf->getCanvas()->drawRect(SkRect::MakeLTRB(0.f, 0.f, 40.f, 40.f), maskPaint); - surf->getCanvas()->drawRect(SkRect::MakeLTRB(60.f, 0.f, 100.f, 40.f), maskPaint); - surf->getCanvas()->drawRect(SkRect::MakeLTRB(0.f, 60.f, 40.f, 100.f), maskPaint); - surf->getCanvas()->drawRect(SkRect::MakeLTRB(60.f, 60.f, 100.f, 100.f), maskPaint); - auto clipMaskImage = surf->makeImageSnapshot(); - SkMatrix clipMatrix = SkMatrix::I(); - SkRect clipBounds = SkRect::MakeWH(100, 100); - - // On the main canvas, save a 100x100 layer three times, applying clip mask, mask filter, or - // both, translating across the GM for each configuration. Since the mask filter is provided - // on the layer restore paint, it must be ignored by the restore since coverage is not well - // defined. - canvas->clear(SK_ColorGRAY); - - canvas->translate(25.f, 0.f); - - // Clip mask only - SkCanvas::SaveLayerRec rec; - rec.fBounds = &clipBounds; - rec.fClipMask = clipMaskImage.get(); - rec.fClipMatrix = &clipMatrix; - canvas->saveLayer(rec); - canvas->clear(SK_ColorWHITE); - canvas->restore(); - - canvas->translate(125.f, 0.f); - - // Mask filter only (should be ignored, producing a white square) - maskPaint.setMaskFilter(maskFilter); - rec.fClipMask = nullptr; - rec.fPaint = &maskPaint; - canvas->saveLayer(rec); - canvas->clear(SK_ColorWHITE); - canvas->restore(); - - canvas->translate(125.f, 0.f); - - // Both (mask filter is ignored, but clip mask should not, so should look like first draw) - rec.fClipMask = clipMaskImage.get(); - canvas->saveLayer(rec); - canvas->clear(SK_ColorWHITE); - canvas->restore(); -} -#endif - static void draw_cell(SkCanvas* canvas, sk_sp blob, SkColor c, SkScalar w, SkScalar h, bool useDrawBehind) { SkRect r = SkRect::MakeWH(w, h); diff --git a/gm/simpleaaclip.cpp b/gm/simpleaaclip.cpp index b28aaf1b48e90..9267b7c795cfd 100644 --- a/gm/simpleaaclip.cpp +++ b/gm/simpleaaclip.cpp @@ -151,7 +151,7 @@ class SimpleClipGM : public GM { } SkISize onISize() override { - return SkISize::Make(640, 480); + return SkISize::Make(500, 240); } void onDraw(SkCanvas* canvas) override { @@ -163,10 +163,6 @@ class SimpleClipGM : public GM { } gOps[] = { {SK_ColorBLACK, "Difference", kDifference_SkClipOp}, {SK_ColorRED, "Intersect", kIntersect_SkClipOp}, - {ToolUtils::color_to_565(0xFF008800), "Union", kUnion_SkClipOp}, - {SK_ColorGREEN, "Rev Diff", kReverseDifference_SkClipOp}, - {SK_ColorYELLOW, "Replace", kReplace_SkClipOp}, - {SK_ColorBLUE, "XOR", kXOR_SkClipOp}, }; SkPaint textPaint; diff --git a/gm/strokes.cpp b/gm/strokes.cpp index 9b3b1a46380e9..51fd97f5dfb90 100644 --- a/gm/strokes.cpp +++ b/gm/strokes.cpp @@ -188,9 +188,9 @@ class TeenyStrokesGM : public skiagm::GM { p.setStyle(SkPaint::kStroke_Style); p.setColor(color); canvas->translate(50, 0); - canvas->save(); + canvas->save(); p.setStrokeWidth(scale * 5); - canvas->scale(1 / scale, 1 / scale); + canvas->scale(1 / scale, 1 / scale); canvas->drawLine(20 * scale, 20 * scale, 20 * scale, 100 * scale, p); canvas->drawLine(20 * scale, 20 * scale, 100 * scale, 100 * scale, p); canvas->restore(); @@ -212,7 +212,7 @@ DEF_SIMPLE_GM(CubicStroke, canvas, 384, 384) { p.setAntiAlias(true); p.setStyle(SkPaint::kStroke_Style); p.setStrokeWidth(1.0720f); - SkPath path; + SkPath path; path.moveTo(-6000,-6000); path.cubicTo(-3500,5500,-500,5500,2500,-6500); canvas->drawPath(path, p); diff --git a/gm/swizzle.cpp b/gm/swizzle.cpp new file mode 100644 index 0000000000000..2d298b2d72678 --- /dev/null +++ b/gm/swizzle.cpp @@ -0,0 +1,43 @@ +/* + * Copyright 2019 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm/gm.h" +#include "include/core/SkCanvas.h" +#include "include/core/SkImageInfo.h" +#include "include/core/SkMatrix.h" +#include "include/core/SkRect.h" +#include "include/core/SkTypes.h" +#include "include/gpu/GrContext.h" +#include "src/gpu/GrBitmapTextureMaker.h" +#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrFragmentProcessor.h" +#include "src/gpu/GrRenderTargetContext.h" +#include "src/gpu/GrRenderTargetContextPriv.h" +#include "src/gpu/ops/GrFillRectOp.h" +#include "tools/Resources.h" +#include "tools/ToolUtils.h" + +DEF_SIMPLE_GPU_GM(swizzle, ctx, rtCtx, canvas, 512, 512) { + SkRect bounds = SkRect::MakeIWH(512, 512); + + SkBitmap bmp; + GetResourceAsBitmap("images/mandrill_512_q075.jpg", &bmp); + GrBitmapTextureMaker maker(ctx, bmp, GrImageTexGenPolicy::kDraw); + auto view = maker.view(GrMipMapped::kNo); + if (!view) { + return; + } + std::unique_ptr imgFP = + GrTextureEffect::Make(std::move(view), bmp.alphaType(), SkMatrix()); + auto fp = GrFragmentProcessor::SwizzleOutput(std::move(imgFP), GrSwizzle("grb1")); + + GrPaint grPaint; + grPaint.addColorFragmentProcessor(std::move(fp)); + + rtCtx->priv().testingOnly_addDrawOp( + GrFillRectOp::MakeNonAARect(ctx, std::move(grPaint), SkMatrix(), bounds)); +} diff --git a/gm/tablecolorfilter.cpp b/gm/tablecolorfilter.cpp index b4bbd12d5ef8f..5b6fa86cb25a7 100644 --- a/gm/tablecolorfilter.cpp +++ b/gm/tablecolorfilter.cpp @@ -131,7 +131,6 @@ class TableColorFilterGM : public skiagm::GM { canvas->drawColor(0xFFDDDDDD); canvas->translate(20, 20); - static sk_sp (*gColorFilterMakers[])() = { make_null_cf, make_cf0, make_cf1, make_cf2, make_cf3 }; @@ -142,7 +141,7 @@ class TableColorFilterGM : public skiagm::GM { // - A first line with the original bitmap, followed by the image drawn once // with each of the N color filters // - N lines of the bitmap drawn N times, this will cover all N*N combinations of - // pair of color filters in order to test the collpsing of consecutive table + // pair of color filters in order to test the collapsing of consecutive table // color filters. // // Here is a graphical representation of the result for 2 bitmaps and 2 filters diff --git a/gm/tessellation.cpp b/gm/tessellation.cpp index 64c4a83410f71..2cfc62d019298 100644 --- a/gm/tessellation.cpp +++ b/gm/tessellation.cpp @@ -49,7 +49,7 @@ constexpr static int kHeight = (int)kRect.fBottom + 21; class TessellationGM : public GpuGM { SkString onShortName() override { return SkString("tessellation"); } SkISize onISize() override { return {kWidth, kHeight}; } - DrawResult onDraw(GrContext*, GrRenderTargetContext*, SkCanvas*, SkString*) override; + DrawResult onDraw(GrRecordingContext*, GrRenderTargetContext*, SkCanvas*, SkString*) override; }; @@ -80,8 +80,8 @@ class TessellationTestTriShader : public GrGeometryProcessor { this->writeFragmentShader(args.fFragBuilder, args.fOutputColor, args.fOutputCoverage); } void writeFragmentShader(GrGLSLFPFragmentBuilder*, const char* color, const char* coverage); - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - const CoordTransformRange&) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& proc) override { pdman.setSkMatrix(fViewMatrixUniform, proc.cast().fViewMatrix); } @@ -92,16 +92,21 @@ class TessellationTestTriShader : public GrGeometryProcessor { return new Impl; } - SkString getTessControlShaderGLSL(const char* versionAndExtensionDecls, + SkString getTessControlShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const override; - SkString getTessEvaluationShaderGLSL(const char* versionAndExtensionDecls, + SkString getTessEvaluationShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const override; const SkMatrix fViewMatrix; }; SkString TessellationTestTriShader::getTessControlShaderGLSL( - const char* versionAndExtensionDecls, const GrShaderCaps&) const { + const GrGLSLPrimitiveProcessor*, const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const { SkString code(versionAndExtensionDecls); code.append(R"( layout(vertices = 3) out; @@ -119,7 +124,8 @@ SkString TessellationTestTriShader::getTessControlShaderGLSL( } SkString TessellationTestTriShader::getTessEvaluationShaderGLSL( - const char* versionAndExtensionDecls, const GrShaderCaps&) const { + const GrGLSLPrimitiveProcessor*, const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const { SkString code(versionAndExtensionDecls); code.append(R"( layout(triangles, equal_spacing, cw) in; @@ -192,8 +198,8 @@ class TessellationTestRectShader : public GrGeometryProcessor { this->writeFragmentShader(args.fFragBuilder, args.fOutputColor, args.fOutputCoverage); } void writeFragmentShader(GrGLSLFPFragmentBuilder*, const char* color, const char* coverage); - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - const CoordTransformRange&) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& proc) override { pdman.setSkMatrix(fViewMatrixUniform, proc.cast().fViewMatrix); } @@ -204,16 +210,21 @@ class TessellationTestRectShader : public GrGeometryProcessor { return new Impl; } - SkString getTessControlShaderGLSL(const char* versionAndExtensionDecls, + SkString getTessControlShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const override; - SkString getTessEvaluationShaderGLSL(const char* versionAndExtensionDecls, + SkString getTessEvaluationShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const override; const SkMatrix fViewMatrix; }; SkString TessellationTestRectShader::getTessControlShaderGLSL( - const char* versionAndExtensionDecls, const GrShaderCaps& caps) const { + const GrGLSLPrimitiveProcessor*, const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps& caps) const { SkString code(versionAndExtensionDecls); code.append(R"( layout(vertices = 1) out; @@ -235,7 +246,8 @@ SkString TessellationTestRectShader::getTessControlShaderGLSL( } SkString TessellationTestRectShader::getTessEvaluationShaderGLSL( - const char* versionAndExtensionDecls, const GrShaderCaps& caps) const { + const GrGLSLPrimitiveProcessor*, const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps& caps) const { SkString code(versionAndExtensionDecls); code.appendf(R"( layout(quads, equal_spacing, cw) in; @@ -366,8 +378,8 @@ static SkPath build_outset_triangle(const std::array* tri) { return outset; } -DrawResult TessellationGM::onDraw(GrContext* ctx, GrRenderTargetContext* rtc, SkCanvas* canvas, - SkString* errorMsg) { +DrawResult TessellationGM::onDraw(GrRecordingContext* ctx, GrRenderTargetContext* rtc, + SkCanvas* canvas, SkString* errorMsg) { if (!ctx->priv().caps()->shaderCaps()->tessellationSupport()) { *errorMsg = "Requires GPU tessellation support."; return DrawResult::kSkip; diff --git a/gm/texelsubset.cpp b/gm/texelsubset.cpp index 75d335b469517..dbf092e175f7a 100644 --- a/gm/texelsubset.cpp +++ b/gm/texelsubset.cpp @@ -75,7 +75,7 @@ class TexelSubset : public GpuGM { SkASSERT(fBitmap.dimensions() == kImageSize); } - DrawResult onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + DrawResult onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas, SkString* errorMsg) override { GrMipMapped mipMapped = fFilter == GrSamplerState::Filter::kMipMap && context->priv().caps()->mipMapSupport() diff --git a/gm/textblobrandomfont.cpp b/gm/textblobrandomfont.cpp index 0160a3eb4c155..d8a2a30ecd25d 100644 --- a/gm/textblobrandomfont.cpp +++ b/gm/textblobrandomfont.cpp @@ -23,7 +23,8 @@ #include "include/core/SkSurfaceProps.h" #include "include/core/SkTextBlob.h" #include "include/core/SkTypeface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "tools/ToolUtils.h" #include "tools/fonts/RandomScalerContext.h" @@ -106,7 +107,7 @@ class TextBlobRandomFont : public GpuGM { return SkISize::Make(kWidth, kHeight); } - DrawResult onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas, + DrawResult onDraw(GrRecordingContext* context, GrRenderTargetContext*, SkCanvas* canvas, SkString* errorMsg) override { // This GM exists to test a specific feature of the GPU backend. // This GM uses ToolUtils::makeSurface which doesn't work well with vias. @@ -147,8 +148,10 @@ class TextBlobRandomFont : public GpuGM { surface->draw(canvas, 0, 0, nullptr); yOffset += stride; - // free gpu resources and verify - context->freeGpuResources(); + if (auto direct = context->asDirectContext()) { + // free gpu resources and verify + direct->freeGpuResources(); + } canvas->rotate(-0.05f); canvas->drawTextBlob(fBlob, 10, yOffset, paint); diff --git a/gm/textblobuseaftergpufree.cpp b/gm/textblobuseaftergpufree.cpp index 0cefcd1951db4..a1558b9a652a7 100644 --- a/gm/textblobuseaftergpufree.cpp +++ b/gm/textblobuseaftergpufree.cpp @@ -15,7 +15,7 @@ #include "include/core/SkString.h" #include "include/core/SkTextBlob.h" #include "include/core/SkTypeface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "tools/ToolUtils.h" #include @@ -37,7 +37,7 @@ class TextBlobUseAfterGpuFree : public GpuGM { return SkISize::Make(kWidth, kHeight); } - void onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { + void onDraw(GrRecordingContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { const char text[] = "Hamburgefons"; SkFont font(ToolUtils::create_portable_typeface(), 20); @@ -51,7 +51,9 @@ class TextBlobUseAfterGpuFree : public GpuGM { canvas->drawTextBlob(blob, 20, 60, SkPaint()); // This text should look fine - context->freeGpuResources(); + if (auto direct = context->asDirectContext()) { + direct->freeGpuResources(); + } canvas->drawTextBlob(blob, 20, 160, SkPaint()); } diff --git a/gm/verifiers/gmverifier.cpp b/gm/verifiers/gmverifier.cpp index 4f92b77d54c42..8e725ff6e0a8e 100644 --- a/gm/verifiers/gmverifier.cpp +++ b/gm/verifiers/gmverifier.cpp @@ -67,7 +67,10 @@ SkBitmap GMVerifier::RenderGoldBmp(skiagm::GM* gm, const SkColorInfo& colorInfo) SkBitmap goldBmp; goldBmp.allocPixels(SkImageInfo::Make(size, colorInfo)); SkCanvas canvas(goldBmp); - gm->draw(&canvas); + + if (gm->gpuSetup(nullptr, &canvas) == DrawResult::kOk) { + gm->draw(&canvas); + } // Convert into common verifier colorspace. SkBitmap goldVerifierBmp; diff --git a/gm/wacky_yuv_formats.cpp b/gm/wacky_yuv_formats.cpp index 59810b852f029..5f0ac590fbc75 100644 --- a/gm/wacky_yuv_formats.cpp +++ b/gm/wacky_yuv_formats.cpp @@ -36,7 +36,8 @@ #include "include/core/SkYUVASizeInfo.h" #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrConfig.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/gpu/GrTypes.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkTArray.h" @@ -44,9 +45,10 @@ #include "include/private/SkTemplates.h" #include "include/utils/SkTextUtils.h" #include "src/core/SkYUVMath.h" -#include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrGpu.h" +#include "src/gpu/GrCaps.h" +#include "src/gpu/GrRecordingContextPriv.h" #include "tools/ToolUtils.h" +#include "tools/gpu/YUVUtils.h" #include #include @@ -54,6 +56,7 @@ #include #include +using sk_gpu_test::YUVABackendReleaseContext; class GrRenderTargetContext; static const int kTileWidthHeight = 128; @@ -324,7 +327,7 @@ static bool is_colorType_texturable(const GrCaps* caps, GrColorType ct) { return caps->isFormatTexturable(format); } -static bool is_format_natively_supported(GrContext* context, YUVFormat yuvFormat) { +static bool is_format_natively_supported(GrRecordingContext* context, YUVFormat yuvFormat) { const GrCaps* caps = context->priv().caps(); @@ -1008,8 +1011,11 @@ static void draw_row_label(SkCanvas* canvas, int y, int yuvFormat) { canvas->drawString(rowLabel, 0, y, font, paint); } -static GrBackendTexture create_yuva_texture(GrContext* context, const SkBitmap& bm) { - return context->createBackendTexture(&bm.pixmap(), 1, GrRenderable::kNo, GrProtected::kNo); +static GrBackendTexture create_yuva_texture(GrDirectContext* context, const SkBitmap& bm, int index, + YUVABackendReleaseContext* releaseContext) { + return context->createBackendTexture(bm.pixmap(), GrRenderable::kNo, GrProtected::kNo, + YUVABackendReleaseContext::CreationCompleteProc(index), + releaseContext); } static sk_sp yuv_to_rgb_colorfilter() { @@ -1125,7 +1131,7 @@ class WackyYUVFormatsGM : public GM { kLabelHeight + numRows * (wh + kPad)); } - void onOnceBeforeDraw() override { + void createBitmaps() { SkPoint origin = { kTileWidthHeight/2.0f, kTileWidthHeight/2.0f }; float outerRadius = kTileWidthHeight/2.0f - 20.0f; float innerRadius = 20.0f; @@ -1158,11 +1164,14 @@ class WackyYUVFormatsGM : public GM { const SkYUVAIndex yuvaIndices[4], int numTextures, SkISize imageSize) { - GrBackendTexture shrunkTextures[4]; + auto releaseContext = new YUVABackendReleaseContext(context); for (int i = 0; i < numTextures; ++i) { - SkColorType ct = get_color_type(yuvaTextures[i].getBackendFormat()); + const GrBackendTexture& curTex = yuvaTextures[i]; + + SkColorType ct = get_color_type(curTex.getBackendFormat()); if (ct == kUnknown_SkColorType || !context->colorTypeSupportedAsSurface(ct)) { + YUVABackendReleaseContext::Unwind(context, releaseContext, true); return nullptr; } @@ -1170,33 +1179,37 @@ class WackyYUVFormatsGM : public GM { // We disallow resizing AYUV and Y410 formats on the GPU bc resizing them w/ a // premul draw combines the YUV channels w/ the A channel in an inappropriate // manner. + YUVABackendReleaseContext::Unwind(context, releaseContext, true); return nullptr; } - SkISize shrunkPlaneSize = { yuvaTextures[i].width() / 2, yuvaTextures[i].height() / 2 }; + SkISize shrunkPlaneSize = {curTex.width() / 2, curTex.height() / 2 }; - sk_sp wrappedOrig = SkImage::MakeFromTexture(context, yuvaTextures[i], + sk_sp wrappedOrig = SkImage::MakeFromTexture(context, curTex, kTopLeft_GrSurfaceOrigin, ct, kPremul_SkAlphaType, nullptr); - shrunkTextures[i] = context->createBackendTexture(shrunkPlaneSize.width(), - shrunkPlaneSize.height(), - yuvaTextures[i].getBackendFormat(), - GrMipMapped::kNo, - GrRenderable::kYes); - if (!shrunkTextures[i].isValid()) { + GrBackendTexture tmp = context->createBackendTexture(shrunkPlaneSize.width(), + shrunkPlaneSize.height(), + curTex.getBackendFormat(), + GrMipMapped::kNo, + GrRenderable::kYes); + if (!tmp.isValid()) { + YUVABackendReleaseContext::Unwind(context, releaseContext, true); return nullptr; } - // Store this away so it will be cleaned up at the end. - fBackendTextures.push_back(shrunkTextures[i]); + releaseContext->set(i, tmp); + // uninitialized beTextures don't have any pending work + releaseContext->setCreationComplete(i); - sk_sp s = SkSurface::MakeFromBackendTexture(context, shrunkTextures[i], + sk_sp s = SkSurface::MakeFromBackendTexture(context, tmp, kTopLeft_GrSurfaceOrigin, 0, ct, nullptr, nullptr); if (!s) { + YUVABackendReleaseContext::Unwind(context, releaseContext, true); return nullptr; } SkCanvas* c = s->getCanvas(); @@ -1215,13 +1228,16 @@ class WackyYUVFormatsGM : public GM { return SkImage::MakeFromYUVATextures(context, yuvColorSpace, - shrunkTextures, + releaseContext->beTextures(), yuvaIndices, shrunkImageSize, - kTopLeft_GrSurfaceOrigin); + kTopLeft_GrSurfaceOrigin, + nullptr, + YUVABackendReleaseContext::Release, + releaseContext); } - void createImages(GrContext* context) { + bool createImages(GrDirectContext* context) { int counter = 0; for (bool opaque : { false, true }) { for (int cs = kJPEG_SkYUVColorSpace; cs <= kLastEnum_SkYUVColorSpace; ++cs) { @@ -1235,30 +1251,34 @@ class WackyYUVFormatsGM : public GM { int numTextures = create_YUV(planes, format, resultBMs, opaque); if (context) { + fGpuGeneratedImages = true; + if (context->abandoned()) { - return; + return false; } if (!is_format_natively_supported(context, format)) { continue; } - GrBackendTexture yuvaTextures[4]; - SkPixmap yuvaPixmaps[4]; + auto releaseCtx = new YUVABackendReleaseContext(context); for (int i = 0; i < numTextures; ++i) { - yuvaTextures[i] = create_yuva_texture(context, resultBMs[i]); - if (yuvaTextures[i].isValid()) { - fBackendTextures.push_back(yuvaTextures[i]); + GrBackendTexture tmp = create_yuva_texture(context, resultBMs[i], i, + releaseCtx); + if (!tmp.isValid()) { + YUVABackendReleaseContext::Unwind(context, releaseCtx, false); + return false; } - yuvaPixmaps[i] = resultBMs[i].pixmap(); + releaseCtx->set(i, tmp); } SkYUVAIndex yuvaIndices[4]; const auto& planarConfig = YUVAFormatPlanarConfig(format); bool externalAlphaPlane = !opaque && !planarConfig.hasAlpha(); - if (!planarConfig.getYUVAIndices(yuvaTextures, numTextures, + if (!planarConfig.getYUVAIndices(releaseCtx->beTextures(), numTextures, externalAlphaPlane, yuvaIndices)) { + YUVABackendReleaseContext::Unwind(context, releaseCtx, false); continue; } @@ -1268,10 +1288,11 @@ class WackyYUVFormatsGM : public GM { format, (SkYUVColorSpace)cs, opaque, - yuvaTextures, + releaseCtx->beTextures(), yuvaIndices, numTextures, fOriginalBMs[opaque].dimensions()); + YUVABackendReleaseContext::Unwind(context, releaseCtx, true); } else { int counterMod = counter % 3; if (fUseDomain && counterMod == 0) { @@ -1280,35 +1301,51 @@ class WackyYUVFormatsGM : public GM { counterMod = 1; } + const SkISize imgSize { fOriginalBMs[opaque].width(), + fOriginalBMs[opaque].height() }; + switch (counterMod) { - case 0: - fImages[opaque][cs][format] = SkImage::MakeFromYUVATexturesCopy( - context, - (SkYUVColorSpace)cs, - yuvaTextures, - yuvaIndices, - { fOriginalBMs[opaque].width(), fOriginalBMs[opaque].height() }, - kTopLeft_GrSurfaceOrigin); - break; - case 1: - fImages[opaque][cs][format] = SkImage::MakeFromYUVATextures( - context, - (SkYUVColorSpace)cs, - yuvaTextures, - yuvaIndices, - { fOriginalBMs[opaque].width(), fOriginalBMs[opaque].height() }, - kTopLeft_GrSurfaceOrigin); - break; - case 2: - default: - fImages[opaque][cs][format] = SkImage::MakeFromYUVAPixmaps( - context, - (SkYUVColorSpace)cs, - yuvaPixmaps, - yuvaIndices, - { fOriginalBMs[opaque].width(), fOriginalBMs[opaque].height() }, - kTopLeft_GrSurfaceOrigin, true); - break; + case 0: + fImages[opaque][cs][format] = SkImage::MakeFromYUVATexturesCopy( + context, + (SkYUVColorSpace)cs, + releaseCtx->beTextures(), + yuvaIndices, + imgSize, + kTopLeft_GrSurfaceOrigin); + YUVABackendReleaseContext::Unwind(context, releaseCtx, true); + break; + case 1: + fImages[opaque][cs][format] = SkImage::MakeFromYUVATextures( + context, + (SkYUVColorSpace)cs, + releaseCtx->beTextures(), + yuvaIndices, + imgSize, + kTopLeft_GrSurfaceOrigin, + nullptr, + YUVABackendReleaseContext::Release, + releaseCtx); + break; + case 2: + default: { + // TODO: we did a lot of work to delete these here + YUVABackendReleaseContext::Unwind(context, releaseCtx, false); + + SkPixmap yuvaPixmaps[4]; + for (int i = 0; i < numTextures; ++i) { + yuvaPixmaps[i] = resultBMs[i].pixmap(); + } + + fImages[opaque][cs][format] = SkImage::MakeFromYUVAPixmaps( + context, + (SkYUVColorSpace)cs, + yuvaPixmaps, + yuvaIndices, + imgSize, + kTopLeft_GrSurfaceOrigin, true); + break; + } } ++counter; } @@ -1322,11 +1359,46 @@ class WackyYUVFormatsGM : public GM { } } } + + if (context) { + // Some backends (e.g., Vulkan) require all work be completed for backend textures + // before they are deleted. Since we don't know when we'll next have access to a + // direct context, flush all the work now. + context->flush(); + context->submit(true); + } + + return true; } - void onDraw(SkCanvas* canvas) override { - this->createImages(canvas->getGrContext()); + DrawResult onGpuSetup(GrDirectContext* context, SkString* errorMsg) override { + this->createBitmaps(); + + if (context && context->abandoned()) { + // This isn't a GpuGM so a null 'context' is okay but an abandoned context + // if forbidden. + return DrawResult::kSkip; + } + if (!this->createImages(context)) { + *errorMsg = "Failed to create YUV images"; + return DrawResult::kFail; + } + + return DrawResult::kOk; + } + + void onGpuTeardown() override { + for (int i = 0; i < 2; ++i) { + for (int j = 0; j <= kLastEnum_SkYUVColorSpace; ++j) { + for (int k = 0; k <= kLast_YUVFormat; ++k) { + fImages[i][j][k] = nullptr; + } + } + } + } + + void onDraw(SkCanvas* canvas) override { float cellWidth = kTileWidthHeight, cellHeight = kTileWidthHeight; if (fUseDomain) { cellWidth *= 1.5f; @@ -1338,7 +1410,7 @@ class WackyYUVFormatsGM : public GM { SkRect srcRect = SkRect::MakeWH(fOriginalBMs[0].width(), fOriginalBMs[0].height()); SkRect dstRect = SkRect::MakeXYWH(kLabelWidth, 0.f, srcRect.width(), srcRect.height()); if (fQuarterSize) { - if (canvas->getGrContext()) { + if (fGpuGeneratedImages) { // The src is only shrunk on the GPU srcRect = SkRect::MakeWH(fOriginalBMs[0].width()/2.0f, fOriginalBMs[0].height()/2.0f); @@ -1396,29 +1468,16 @@ class WackyYUVFormatsGM : public GM { dstRect.offset(cellWidth + kPad, 0.f); } } - if (auto context = canvas->getGrContext()) { - if (!context->abandoned()) { - context->flushAndSubmit(); - GrGpu* gpu = context->priv().getGpu(); - SkASSERT(gpu); - gpu->testingOnly_flushGpuAndSync(); - for (const auto& tex : fBackendTextures) { - context->deleteBackendTexture(tex); - } - fBackendTextures.reset(); - } - } - SkASSERT(!fBackendTextures.count()); } private: SkBitmap fOriginalBMs[2]; sk_sp fImages[2][kLastEnum_SkYUVColorSpace + 1][kLast_YUVFormat + 1]; - SkTArray fBackendTextures; bool fUseTargetColorSpace; bool fUseDomain; bool fQuarterSize; sk_sp fTargetColorSpace; + bool fGpuGeneratedImages = false; typedef GM INHERITED; }; @@ -1443,12 +1502,12 @@ class YUVMakeColorSpaceGM : public GpuGM { SkISize onISize() override { int numCols = 4; // (transparent, opaque) x (untagged, tagged) - int numRows = 5; // original, YUV, subset, readPixels, makeNonTextureImage + int numRows = 5; // original, YUV, subset, makeNonTextureImage, readPixels return SkISize::Make(numCols * (kTileWidthHeight + kPad) + kPad, numRows * (kTileWidthHeight + kPad) + kPad); } - void onOnceBeforeDraw() override { + void createBitmaps() { SkPoint origin = { kTileWidthHeight/2.0f, kTileWidthHeight/2.0f }; float outerRadius = kTileWidthHeight/2.0f - 20.0f; float innerRadius = 20.0f; @@ -1470,7 +1529,7 @@ class YUVMakeColorSpaceGM : public GpuGM { fTargetColorSpace = SkColorSpace::MakeSRGB()->makeColorSpin(); } - void createImages(GrContext* context) { + bool createImages(GrDirectContext* context) { for (bool opaque : { false, true }) { PlaneData planes; extract_planes(fOriginalBMs[opaque], kJPEG_SkYUVColorSpace, &planes); @@ -1482,36 +1541,82 @@ class YUVMakeColorSpaceGM : public GpuGM { auto& planarConfig = YUVAFormatPlanarConfig(kAYUV_YUVFormat); int numPlanes = planarConfig.numPlanes(); - GrBackendTexture yuvaTextures[4]; + auto releaseContext = new YUVABackendReleaseContext(context); + auto srgbReleaseContext = new YUVABackendReleaseContext(context); + for (int i = 0; i < numPlanes; ++i) { - yuvaTextures[i] = create_yuva_texture(context, resultBMs[i]); - if (yuvaTextures[i].isValid()) { - fBackendTextures.push_back(yuvaTextures[i]); + GrBackendTexture tmp = create_yuva_texture(context, resultBMs[i], i, + releaseContext); + if (!tmp.isValid()) { + YUVABackendReleaseContext::Unwind(context, releaseContext, false); + YUVABackendReleaseContext::Unwind(context, srgbReleaseContext, false); + return false; } + + releaseContext->set(i, tmp); + + tmp = create_yuva_texture(context, resultBMs[i], i, srgbReleaseContext); + if (!tmp.isValid()) { + YUVABackendReleaseContext::Unwind(context, releaseContext, false); + YUVABackendReleaseContext::Unwind(context, srgbReleaseContext, false); + return false; + } + + srgbReleaseContext->set(i, tmp); } SkYUVAIndex yuvaIndices[4]; - planarConfig.getYUVAIndices(yuvaTextures, numPlanes, false, yuvaIndices); + planarConfig.getYUVAIndices(releaseContext->beTextures(), numPlanes, + false, yuvaIndices); + fImages[opaque][0] = SkImage::MakeFromYUVATextures( context, kJPEG_SkYUVColorSpace, - yuvaTextures, + releaseContext->beTextures(), yuvaIndices, { fOriginalBMs[opaque].width(), fOriginalBMs[opaque].height() }, - kTopLeft_GrSurfaceOrigin); + kTopLeft_GrSurfaceOrigin, nullptr, + YUVABackendReleaseContext::Release, releaseContext); fImages[opaque][1] = SkImage::MakeFromYUVATextures( context, kJPEG_SkYUVColorSpace, - yuvaTextures, + srgbReleaseContext->beTextures(), yuvaIndices, { fOriginalBMs[opaque].width(), fOriginalBMs[opaque].height() }, kTopLeft_GrSurfaceOrigin, - SkColorSpace::MakeSRGB()); + SkColorSpace::MakeSRGB(), + YUVABackendReleaseContext::Release, srgbReleaseContext); + } + + // Some backends (e.g., Vulkan) require all work be completed for backend textures before + // they are deleted. Since we don't know when we'll next have access to a direct context, + // flush all the work now. + context->flush(); + context->submit(true); + + return true; + } + + DrawResult onGpuSetup(GrDirectContext* context, SkString* errorMsg) override { + if (!context || context->abandoned()) { + return DrawResult::kSkip; + } + + this->createBitmaps(); + if (!this->createImages(context)) { + *errorMsg = "Failed to create YUV images"; + return DrawResult::kFail; } + + return DrawResult::kOk; + } + + void onGpuTeardown() override { + fImages[0][0] = fImages[0][1] = fImages[1][0] = fImages[1][1] = nullptr; } - void onDraw(GrContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { - this->createImages(context); + void onDraw(GrRecordingContext* context, GrRenderTargetContext*, SkCanvas* canvas) override { + SkASSERT(fImages[0][0] && fImages[0][1] && fImages[1][0] && fImages[1][1]); int x = kPad; for (int tagged : { 0, 1 }) { @@ -1530,7 +1635,7 @@ class YUVMakeColorSpaceGM : public GpuGM { y += kTileWidthHeight + kPad; auto subset = yuv->makeSubset(SkIRect::MakeWH(kTileWidthHeight / 2, - kTileWidthHeight / 2)); + kTileWidthHeight / 2)); canvas->drawImage(subset, x, y); y += kTileWidthHeight + kPad; @@ -1546,21 +1651,11 @@ class YUVMakeColorSpaceGM : public GpuGM { x += kTileWidthHeight + kPad; } } - - context->flushAndSubmit(); - GrGpu* gpu = context->priv().getGpu(); - SkASSERT(gpu); - gpu->testingOnly_flushGpuAndSync(); - for (const auto& tex : fBackendTextures) { - context->deleteBackendTexture(tex); - } - fBackendTextures.reset(); } private: SkBitmap fOriginalBMs[2]; sk_sp fImages[2][2]; - SkTArray fBackendTextures; sk_sp fTargetColorSpace; typedef GM INHERITED; diff --git a/gm/widebuttcaps.cpp b/gm/widebuttcaps.cpp new file mode 100644 index 0000000000000..b2df5fecd381e --- /dev/null +++ b/gm/widebuttcaps.cpp @@ -0,0 +1,84 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm/gm.h" +#include "include/core/SkCanvas.h" +#include "include/core/SkPath.h" +#include "include/core/SkPoint.h" + +static constexpr float kStrokeWidth = 100; + +class WideButtCaps : public skiagm::GM { +public: + WideButtCaps() {} + +protected: + + SkString onShortName() override { + return SkString("widebuttcaps"); + } + + SkISize onISize() override { + return SkISize::Make(120 * 4, 120 * 3 + 140); + } + + void onOnceBeforeDraw() override { + fStrokePaint.setAntiAlias(true); + fStrokePaint.setStrokeWidth(kStrokeWidth); + fStrokePaint.setColor(SK_ColorGREEN); + fStrokePaint.setStyle(SkPaint::kStroke_Style); + } + + void onDraw(SkCanvas* canvas) override { + SkAutoCanvasRestore arc(canvas, true); + canvas->translate(60, 60); + canvas->clear(SK_ColorBLACK); + + this->drawStrokes(canvas, + SkPath().lineTo(10,0).lineTo(10,10), + SkPath().cubicTo(10,0, 10,0, 10,10)); + canvas->translate(0, 120); + + this->drawStrokes(canvas, + SkPath().lineTo(0,-10).lineTo(0,10), + SkPath().cubicTo(0,-10, 0,-10, 0,10)); + canvas->translate(0, 120); + + this->drawStrokes(canvas, + SkPath().lineTo(0,-10).lineTo(10,-10).lineTo(10,10).lineTo(0,10), + SkPath().cubicTo(0,-10, 10,10, 0,10)); + canvas->translate(0, 140); + + this->drawStrokes(canvas, + SkPath().lineTo(0,-10).lineTo(10,-10).lineTo(10,0).lineTo(0,0), + SkPath().cubicTo(0,-10, 10,0, 0,0)); + canvas->translate(0, 120); + } + + void drawStrokes(SkCanvas* canvas, const SkPath& path, const SkPath& cubic) { + SkAutoCanvasRestore arc(canvas, true); + fStrokePaint.setStrokeJoin(SkPaint::kBevel_Join); + canvas->drawPath(path, fStrokePaint); + + canvas->translate(120, 0); + fStrokePaint.setStrokeJoin(SkPaint::kRound_Join); + canvas->drawPath(path, fStrokePaint); + + canvas->translate(120, 0); + fStrokePaint.setStrokeJoin(SkPaint::kMiter_Join); + canvas->drawPath(path, fStrokePaint); + + canvas->translate(120, 0); + canvas->drawPath(cubic, fStrokePaint); + } + +private: + SkPaint fStrokePaint; + typedef GM INHERITED; +}; + +DEF_GM( return new WideButtCaps; ) diff --git a/gm/windowrectangles.cpp b/gm/windowrectangles.cpp index 932b83f986f67..e5fc14431bd12 100644 --- a/gm/windowrectangles.cpp +++ b/gm/windowrectangles.cpp @@ -21,7 +21,7 @@ #include "include/core/SkString.h" #include "include/core/SkTypes.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkColorData.h" #include "src/core/SkClipOpPriv.h" @@ -29,8 +29,6 @@ #include "src/gpu/GrAppliedClip.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrClip.h" -#include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrFragmentProcessor.h" #include "src/gpu/GrPaint.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -108,6 +106,9 @@ DrawResult WindowRectanglesGM::onCoverClipStack(const SkClipStack& stack, SkCanv SkClipOp op = element->getOp(); bool isAA = element->isAA(); switch (element->getDeviceSpaceType()) { + case SkClipStack::Element::DeviceSpaceType::kShader: + canvas->clipShader(element->refShader(), op); + break; case SkClipStack::Element::DeviceSpaceType::kPath: canvas->clipPath(element->getDeviceSpacePath(), op, isAA); break; @@ -150,30 +151,26 @@ class WindowRectanglesMaskGM : public WindowRectanglesBaseGM { constexpr static int kMaskCheckerSize = 5; SkString onShortName() final { return SkString("windowrectangles_mask"); } DrawResult onCoverClipStack(const SkClipStack&, SkCanvas*, SkString* errorMsg) final; - void visualizeAlphaMask(GrContext*, GrRenderTargetContext*, const GrReducedClip&, GrPaint&&); - void visualizeStencilMask(GrContext*, GrRenderTargetContext*, const GrReducedClip&, GrPaint&&); + void visualizeAlphaMask(GrRecordingContext*, GrRenderTargetContext*, + const GrReducedClip&, GrPaint&&); + void visualizeStencilMask(GrRecordingContext*, GrRenderTargetContext*, + const GrReducedClip&, GrPaint&&); void stencilCheckerboard(GrRenderTargetContext*, bool flip); }; -/** - * Base class for GrClips that visualize a clip mask. - */ -class MaskOnlyClipBase : public GrClip { -private: - bool quickContains(const SkRect&) const final { return false; } - bool isRRect(const SkRect& rtBounds, SkRRect* rr, GrAA*) const final { return false; } -}; - /** * This class clips a cover by an alpha mask. We use it to visualize the alpha clip mask. */ -class AlphaOnlyClip final : public MaskOnlyClipBase { +class AlphaOnlyClip final : public GrClip { public: AlphaOnlyClip(GrSurfaceProxyView mask, int x, int y) : fMask(std::move(mask)), fX(x), fY(y) {} private: - bool apply(GrRecordingContext* ctx, GrRenderTargetContext*, bool, bool, GrAppliedClip* out, - SkRect* bounds) const override { + SkIRect getConservativeBounds() const final { + return SkIRect::MakeXYWH(fX, fY, fMask.width(), fMask.height()); + } + Effect apply(GrRecordingContext* ctx, GrRenderTargetContext*, bool, bool, + GrAppliedClip* out, SkRect* bounds) const override { GrSamplerState samplerState(GrSamplerState::WrapMode::kClampToBorder, GrSamplerState::Filter::kNearest); auto m = SkMatrix::Translate(-fX, -fY); @@ -183,7 +180,7 @@ class AlphaOnlyClip final : public MaskOnlyClipBase { domain, *ctx->priv().caps()); fp = GrDeviceSpaceEffect::Make(std::move(fp)); out->addCoverageFP(std::move(fp)); - return true; + return Effect::kClipped; } GrSurfaceProxyView fMask; int fX; @@ -193,14 +190,13 @@ class AlphaOnlyClip final : public MaskOnlyClipBase { /** * Makes a clip object that enforces the stencil clip bit. Used to visualize the stencil mask. */ -static const GrStencilClip* make_stencil_only_clip() { - static const GrStencilClip kClip(SkClipStack::kEmptyGenID); - return &kClip; -} +static GrStencilClip make_stencil_only_clip(GrRenderTargetContext* rtc) { + return GrStencilClip(rtc->dimensions(), SkClipStack::kEmptyGenID); +}; DrawResult WindowRectanglesMaskGM::onCoverClipStack(const SkClipStack& stack, SkCanvas* canvas, - SkString* errorMsg) { - GrContext* ctx = canvas->getGrContext(); + SkString* errorMsg) { + auto ctx = canvas->recordingContext(); GrRenderTargetContext* rtc = canvas->internal_private_accessTopLayerRenderTargetContext(); if (!ctx || !rtc) { *errorMsg = kErrorMsg_DrawSkippedGpuOnly; @@ -225,7 +221,7 @@ DrawResult WindowRectanglesMaskGM::onCoverClipStack(const SkClipStack& stack, Sk return DrawResult::kOk; } -void WindowRectanglesMaskGM::visualizeAlphaMask(GrContext* ctx, GrRenderTargetContext* rtc, +void WindowRectanglesMaskGM::visualizeAlphaMask(GrRecordingContext* ctx, GrRenderTargetContext* rtc, const GrReducedClip& reducedClip, GrPaint&& paint) { const int padRight = (kDeviceRect.right() - kCoverRect.right()) / 2; const int padBottom = (kDeviceRect.bottom() - kCoverRect.bottom()) / 2; @@ -242,9 +238,10 @@ void WindowRectanglesMaskGM::visualizeAlphaMask(GrContext* ctx, GrRenderTargetCo maskRTC->clear(SK_PMColor4fWHITE); GrPaint stencilPaint; stencilPaint.setCoverageSetOpXPFactory(SkRegion::kDifference_Op, false); - maskRTC->priv().stencilRect(make_stencil_only_clip(), &GrUserStencilSettings::kUnused, + GrStencilClip stencilClip = make_stencil_only_clip(maskRTC.get()); + maskRTC->priv().stencilRect(&stencilClip, &GrUserStencilSettings::kUnused, std::move(stencilPaint), GrAA::kNo, SkMatrix::I(), - SkRect::MakeIWH(maskRTC->width(), maskRTC->height())); + SkRect::Make(maskRTC->dimensions())); reducedClip.drawAlphaClipMask(maskRTC.get()); int x = kCoverRect.x() - kDeviceRect.x(), @@ -253,12 +250,13 @@ void WindowRectanglesMaskGM::visualizeAlphaMask(GrContext* ctx, GrRenderTargetCo // Now visualize the alpha mask by drawing a rect over the area where it is defined. The regions // inside window rectangles or outside the scissor should still have the initial checkerboard // intact. (This verifies we didn't spend any time modifying those pixels in the mask.) - AlphaOnlyClip clip(maskRTC->readSurfaceView(), x, y); - rtc->drawRect(&clip, std::move(paint), GrAA::kYes, SkMatrix::I(), + AlphaOnlyClip alphaClip(maskRTC->readSurfaceView(), x, y); + rtc->drawRect(&alphaClip, std::move(paint), GrAA::kYes, SkMatrix::I(), SkRect::Make(SkIRect::MakeXYWH(x, y, maskRTC->width(), maskRTC->height()))); } -void WindowRectanglesMaskGM::visualizeStencilMask(GrContext* ctx, GrRenderTargetContext* rtc, +void WindowRectanglesMaskGM::visualizeStencilMask(GrRecordingContext* ctx, + GrRenderTargetContext* rtc, const GrReducedClip& reducedClip, GrPaint&& paint) { if (ctx->abandoned()) { @@ -275,7 +273,8 @@ void WindowRectanglesMaskGM::visualizeStencilMask(GrContext* ctx, GrRenderTarget // Now visualize the stencil mask by covering the entire render target. The regions inside // window rectangles or outside the scissor should still have the initial checkerboard intact. // (This verifies we didn't spend any time modifying those pixels in the mask.) - rtc->drawPaint(make_stencil_only_clip(), std::move(paint), SkMatrix::I()); + GrStencilClip clip = make_stencil_only_clip(rtc); + rtc->drawPaint(&clip, std::move(paint), SkMatrix::I()); } void WindowRectanglesMaskGM::stencilCheckerboard(GrRenderTargetContext* rtc, bool flip) { diff --git a/gm/xfermodes.cpp b/gm/xfermodes.cpp index 6ddabe75c1d87..d98b7f010ac85 100644 --- a/gm/xfermodes.cpp +++ b/gm/xfermodes.cpp @@ -154,7 +154,7 @@ class XfermodesGM : public skiagm::GM { canvas->saveLayer(&bounds, &p); restoreNeeded = true; p.setBlendMode(SkBlendMode::kSrcOver); - // Fall through. + [[fallthrough]]; } case kQuarterClear_SrcType: { SkScalar halfW = SkIntToScalar(W) / 2; @@ -175,7 +175,7 @@ class XfermodesGM : public skiagm::GM { SkScalar h = SkIntToScalar(H); SkRect r = SkRect::MakeXYWH(x, y + h / 4, w, h * 23 / 60); canvas->clipRect(r); - // Fall through. + [[fallthrough]]; } case kRectangle_SrcType: { SkScalar w = SkIntToScalar(W); @@ -188,10 +188,10 @@ class XfermodesGM : public skiagm::GM { } case kSmallRectangleImageWithAlpha_SrcType: m.postScale(SK_ScalarHalf, SK_ScalarHalf, x, y); - // Fall through. + [[fallthrough]]; case kRectangleImageWithAlpha_SrcType: p.setAlpha(0x88); - // Fall through. + [[fallthrough]]; case kRectangleImage_SrcType: { SkAutoCanvasRestore acr(canvas, true); canvas->concat(m); diff --git a/gm/ycbcrimage.cpp b/gm/ycbcrimage.cpp new file mode 100644 index 0000000000000..3d6e78c1d758b --- /dev/null +++ b/gm/ycbcrimage.cpp @@ -0,0 +1,120 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "gm/gm.h" + +// This test only works with the Vulkan backend. +#ifdef SK_VULKAN + +#include "include/core/SkCanvas.h" +#include "include/core/SkImage.h" +#include "include/core/SkPaint.h" +#include "include/core/SkSize.h" +#include "include/core/SkString.h" +#include "include/gpu/GrDirectContext.h" +#include "tools/gpu/vk/VkYcbcrSamplerHelper.h" + +static void release_ycbcrhelper(void* releaseContext) { + VkYcbcrSamplerHelper* ycbcrHelper = reinterpret_cast(releaseContext); + delete ycbcrHelper; +} + +namespace skiagm { + +// This GM exercises the native YCbCr image format on Vulkan +class YCbCrImageGM : public GpuGM { +public: + YCbCrImageGM() { + this->setBGColor(0xFFCCCCCC); + } + +protected: + + SkString onShortName() override { + return SkString("ycbcrimage"); + } + + SkISize onISize() override { + return SkISize::Make(2*kPad+kImageSize, 2*kPad+kImageSize); + } + + DrawResult createYCbCrImage(GrContext* context, SkString* errorMsg) { + std::unique_ptr ycbcrHelper(new VkYcbcrSamplerHelper(context)); + + if (!ycbcrHelper->isYCbCrSupported()) { + *errorMsg = "YCbCr sampling not supported."; + return skiagm::DrawResult::kSkip; + } + + if (!ycbcrHelper->createBackendTexture(kImageSize, kImageSize)) { + *errorMsg = "Failed to create I420 backend texture."; + return skiagm::DrawResult::kFail; + } + + SkASSERT(!fYCbCrImage); + fYCbCrImage = SkImage::MakeFromTexture(context, ycbcrHelper->backendTexture(), + kTopLeft_GrSurfaceOrigin, kRGB_888x_SkColorType, + kPremul_SkAlphaType, nullptr, + release_ycbcrhelper, ycbcrHelper.get()); + if (!fYCbCrImage) { + *errorMsg = "Failed to create I420 image."; + return DrawResult::kFail; + } + + ycbcrHelper.release(); + return DrawResult::kOk; + } + + DrawResult onGpuSetup(GrDirectContext* context, SkString* errorMsg) override { + if (!context || context->abandoned()) { + return DrawResult::kSkip; + } + + if (context->backend() != GrBackendApi::kVulkan) { + *errorMsg = "This GM requires a Vulkan context."; + return DrawResult::kSkip; + } + + DrawResult result = this->createYCbCrImage(context, errorMsg); + if (result != DrawResult::kOk) { + return result; + } + + return DrawResult::kOk; + } + + void onGpuTeardown() override { + fYCbCrImage = nullptr; + } + + DrawResult onDraw(GrRecordingContext*, GrRenderTargetContext*, + SkCanvas* canvas, SkString*) override { + SkASSERT(fYCbCrImage); + + SkPaint paint; + paint.setFilterQuality(kLow_SkFilterQuality); + + canvas->drawImage(fYCbCrImage, kPad, kPad, &paint); + return DrawResult::kOk; + } + +private: + static const int kImageSize = 112; + static const int kPad = 8; + + sk_sp fYCbCrImage; + + typedef GpuGM INHERITED; +}; + +////////////////////////////////////////////////////////////////////////////// + +DEF_GM(return new YCbCrImageGM;) + +} // skiagm + +#endif // SK_VULKAN diff --git a/gm/yuv420_odd_dim.cpp b/gm/yuv420_odd_dim.cpp index 5ddecc93bd648..90478095d2290 100644 --- a/gm/yuv420_odd_dim.cpp +++ b/gm/yuv420_odd_dim.cpp @@ -15,7 +15,7 @@ #include "include/core/SkYUVAIndex.h" #include "include/core/SkYUVASizeInfo.h" #include "include/encode/SkJpegEncoder.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/utils/SkRandom.h" #include "src/core/SkCachedData.h" #include "src/image/SkImage_Base.h" @@ -77,7 +77,7 @@ DEF_SIMPLE_GM_CAN_FAIL(yuv420_odd_dim, canvas, errMsg, kScale* kImageDim.width(), kScale* kImageDim.height()) { auto image = make_image(canvas->getGrContext()); if (!image) { - if (canvas->getGrContext() && canvas->getGrContext()->abandoned()) { + if (canvas->recordingContext() && canvas->recordingContext()->abandoned()) { return skiagm::DrawResult::kOk; } return skiagm::DrawResult::kFail; diff --git a/gm/yuvtorgbeffect.cpp b/gm/yuvtorgbeffect.cpp index 61c3f0576fbd7..9133fca4e04c7 100644 --- a/gm/yuvtorgbeffect.cpp +++ b/gm/yuvtorgbeffect.cpp @@ -92,7 +92,7 @@ class YUVtoRGBEffect : public GpuGM { } } - DrawResult onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + DrawResult onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas, SkString* errorMsg) override { GrSurfaceProxyView views[3]; @@ -208,7 +208,7 @@ class YUVNV12toRGBEffect : public GpuGM { } } - DrawResult onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + DrawResult onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas, SkString* errorMsg) override { GrSurfaceProxyView views[2]; @@ -292,16 +292,20 @@ class YUVtoRGBSubsetEffect : public GpuGM { SkImageInfo vinfo = SkImageInfo::MakeA8(VSIZE, VSIZE); fBitmaps[2].allocPixels(vinfo); - int innerY = 149; + unsigned char innerY[16] = {149, 160, 130, 105, + 160, 130, 105, 149, + 130, 105, 149, 160, + 105, 149, 160, 130}; unsigned char innerU[4] = {43, 75, 145, 200}; unsigned char innerV[4] = {88, 180, 200, 43}; int outerYUV[] = {128, 128, 128}; for (int i = 0; i < 3; ++i) { fBitmaps[i].eraseColor(SkColorSetARGB(outerYUV[i], 0, 0, 0)); } - fBitmaps[0].eraseARGB(innerY, 0, 0, 0); + SkPixmap innerYPM(SkImageInfo::MakeA8(4, 4), innerY, 4); SkPixmap innerUPM(SkImageInfo::MakeA8(2, 2), innerU, 2); SkPixmap innerVPM(SkImageInfo::MakeA8(2, 2), innerV, 2); + fBitmaps[0].writePixels(innerYPM, 2, 2); fBitmaps[1].writePixels(innerUPM, 1, 1); fBitmaps[2].writePixels(innerVPM, 1, 1); for (auto& fBitmap : fBitmaps) { @@ -309,7 +313,7 @@ class YUVtoRGBSubsetEffect : public GpuGM { } } - DrawResult onDraw(GrContext* context, GrRenderTargetContext* renderTargetContext, + DrawResult onDraw(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, SkCanvas* canvas, SkString* errorMsg) override { GrSurfaceProxyView views[3]; diff --git a/gn/BUILD.gn b/gn/BUILD.gn index 8b571141009ce..894d3121be58e 100644 --- a/gn/BUILD.gn +++ b/gn/BUILD.gn @@ -15,6 +15,7 @@ declare_args() { extra_ldflags = [] malloc = "" + werror = false xcode_sysroot = "" } @@ -479,9 +480,6 @@ config("warnings") { "-Wdeprecated-writable-str", ] } - if (!is_win || is_clang) { - cflags += [ "-Wno-implicit-fallthrough" ] - } } config("warnings_except_public_headers") { if (!is_win || is_clang) { diff --git a/gn/BUILDCONFIG.gn b/gn/BUILDCONFIG.gn index 5fb933aa81f3e..cc2e16e25f2ed 100644 --- a/gn/BUILDCONFIG.gn +++ b/gn/BUILDCONFIG.gn @@ -29,8 +29,6 @@ declare_args() { clang_win = "" clang_win_version = "" - - werror = false } declare_args() { is_debug = !is_official_build diff --git a/gn/compile_processors.py b/gn/compile_processors.py index 922b6539de1fe..c006532df4f38 100755 --- a/gn/compile_processors.py +++ b/gn/compile_processors.py @@ -11,14 +11,21 @@ skslc = sys.argv[1] clangFormat = sys.argv[2] -processors = sys.argv[3:] +fetchClangFormat = sys.argv[3] +processors = sys.argv[4:] + +exeSuffix = '.exe' if sys.platform.startswith('win') else ''; + for p in processors: print("Recompiling " + p + "...") try: + if not os.path.isfile(clangFormat + exeSuffix): + subprocess.check_call([sys.executable, fetchClangFormat]); + noExt, _ = os.path.splitext(p) head, tail = os.path.split(noExt) targetDir = os.path.join(head, "generated") - if not os.path.exists(targetDir): + if not os.path.isdir(targetDir): os.mkdir(targetDir) target = os.path.join(targetDir, tail) subprocess.check_output([skslc, p, target + ".h"]) diff --git a/gn/core.gni b/gn/core.gni index cf65c77ed24ba..56769b4728708 100644 --- a/gn/core.gni +++ b/gn/core.gni @@ -58,6 +58,7 @@ skia_core_public = [ "$_include/core/SkOverdrawCanvas.h", "$_include/core/SkPaint.h", "$_include/core/SkPath.h", + "$_include/core/SkPathBuilder.h", "$_include/core/SkPathEffect.h", "$_include/core/SkPathMeasure.h", "$_include/core/SkPixelRef.h", @@ -268,17 +269,11 @@ skia_core_sources = [ "$_src/core/SkMipMap.cpp", "$_src/core/SkMipMap.h", "$_src/core/SkModeColorFilter.cpp", + "$_src/core/SkModeColorFilter.h", "$_src/core/SkNextID.h", "$_src/core/SkOSFile.h", "$_src/core/SkOpts.cpp", "$_src/core/SkOpts.h", - "$_src/core/SkOpts_avx.cpp", - "$_src/core/SkOpts_crc32.cpp", - "$_src/core/SkOpts_hsw.cpp", - "$_src/core/SkOpts_skx.cpp", - "$_src/core/SkOpts_sse41.cpp", - "$_src/core/SkOpts_sse42.cpp", - "$_src/core/SkOpts_ssse3.cpp", "$_src/core/SkOrderedReadBuffer.h", "$_src/core/SkOverdrawCanvas.cpp", "$_src/core/SkPaint.cpp", @@ -286,6 +281,7 @@ skia_core_sources = [ "$_src/core/SkPaintPriv.cpp", "$_src/core/SkPaintPriv.h", "$_src/core/SkPath.cpp", + "$_src/core/SkPathBuilder.cpp", "$_src/core/SkPathEffect.cpp", "$_src/core/SkPathMeasure.cpp", "$_src/core/SkPathPriv.h", @@ -309,7 +305,6 @@ skia_core_sources = [ "$_src/core/SkRasterPipelineBlitter.cpp", "$_src/core/SkReadBuffer.cpp", "$_src/core/SkReadBuffer.h", - "$_src/core/SkReader32.h", "$_src/core/SkRecord.cpp", "$_src/core/SkRecordDraw.cpp", "$_src/core/SkRecordOpts.cpp", @@ -424,6 +419,8 @@ skia_core_sources = [ "$_src/image/SkImage_Lazy.cpp", "$_src/image/SkImage_Lazy.h", "$_src/image/SkImage_Raster.cpp", + "$_src/image/SkRescaleAndReadPixels.cpp", + "$_src/image/SkRescaleAndReadPixels.h", "$_src/image/SkSurface.cpp", "$_src/image/SkSurface_Base.h", diff --git a/gn/flutter_defines.gni b/gn/flutter_defines.gni index 2c3708b928bd1..90d6933726faa 100644 --- a/gn/flutter_defines.gni +++ b/gn/flutter_defines.gni @@ -11,8 +11,7 @@ flutter_defines = [ # Remove software rasterizers to save some code size. "SK_DISABLE_AAA", - # Flutter doesn't deserialize anything. - "SK_DISABLE_READBUFFER", + # Flutter doesn't deserialize effects. "SK_DISABLE_EFFECT_DESERIALIZATION", # Staging diff --git a/gn/gm.gni b/gn/gm.gni index 77605da2962e0..f358ebefdd4ef 100644 --- a/gn/gm.gni +++ b/gn/gm.gni @@ -175,6 +175,7 @@ gm_sources = [ "$_gm/fontregen.cpp", "$_gm/fontscaler.cpp", "$_gm/fontscalerdistortable.cpp", + "$_gm/fp_sample_chaining.cpp", "$_gm/fpcoordinateoverride.cpp", "$_gm/fwidth_squircle.cpp", "$_gm/gammatext.cpp", @@ -349,6 +350,7 @@ gm_sources = [ "$_gm/stroketext.cpp", "$_gm/subsetshader.cpp", "$_gm/surface.cpp", + "$_gm/swizzle.cpp", "$_gm/tablecolorfilter.cpp", "$_gm/tallstretchedbitmaps.cpp", "$_gm/tessellation.cpp", @@ -385,11 +387,13 @@ gm_sources = [ "$_gm/vertices.cpp", "$_gm/verylargebitmap.cpp", "$_gm/wacky_yuv_formats.cpp", + "$_gm/widebuttcaps.cpp", "$_gm/windowrectangles.cpp", "$_gm/xfermodeimagefilter.cpp", "$_gm/xfermodes.cpp", "$_gm/xfermodes2.cpp", "$_gm/xfermodes3.cpp", + "$_gm/ycbcrimage.cpp", "$_gm/yuv420_odd_dim.cpp", "$_gm/yuvtorgbeffect.cpp", ] diff --git a/gn/gn_to_bp.py b/gn/gn_to_bp.py index 10a099511f49d..4256993fe23b5 100755 --- a/gn/gn_to_bp.py +++ b/gn/gn_to_bp.py @@ -288,30 +288,31 @@ # We'll run GN to get the main source lists and include directories for Skia. def generate_args(target_os, enable_gpu): d = { - 'is_official_build': 'true', + 'is_official_build': 'true', # gn_to_bp_utils' GetArchSources will take care of architecture-specific # files. - 'target_cpu': '"none"', + 'target_cpu': '"none"', - 'skia_enable_android_utils': 'true', + 'skia_enable_android_utils': 'true', # Use the custom FontMgr, as the framework will handle fonts. - 'skia_enable_fontmgr_custom': 'false', - 'skia_enable_fontmgr_custom_empty': 'true', - 'skia_enable_fontmgr_android': 'false', - 'skia_enable_fontmgr_win': 'false', - 'skia_enable_fontmgr_win_gdi': 'false', - 'skia_use_fonthost_mac': 'false', + 'skia_enable_fontmgr_custom_directory': 'false', + 'skia_enable_fontmgr_custom_embedded': 'false', + 'skia_enable_fontmgr_custom_empty': 'true', + 'skia_enable_fontmgr_android': 'false', + 'skia_enable_fontmgr_win': 'false', + 'skia_enable_fontmgr_win_gdi': 'false', + 'skia_use_fonthost_mac': 'false', # enable features used in skia_nanobench - 'skia_enable_sksl_interpreter': 'true', - 'skia_tools_require_resources': 'true', - - 'skia_use_freetype': 'true', - 'skia_use_fontconfig': 'false', - 'skia_use_fixed_gamma_text': 'true', - 'skia_include_multiframe_procs': 'false', - 'skia_libgifcodec_path': '"third_party/libgifcodec"', + 'skia_enable_sksl_interpreter': 'true', + 'skia_tools_require_resources': 'true', + + 'skia_use_freetype': 'true', + 'skia_use_fontconfig': 'false', + 'skia_use_fixed_gamma_text': 'true', + 'skia_include_multiframe_procs': 'false', + 'skia_libgifcodec_path': '"third_party/libgifcodec"', } d['target_os'] = target_os if target_os == '"android"': @@ -494,7 +495,8 @@ def bpfmt(indent, lst, sort=True): defs['sse41'] + defs['sse42'] + defs['avx' ] + - defs['hsw' ])), + defs['hsw' ] + + defs['skx' ])), 'dm_includes' : bpfmt(8, dm_includes), 'dm_srcs' : bpfmt(8, dm_srcs), diff --git a/gn/gpu.gni b/gn/gpu.gni index fce18479ad8ec..9a40c935ac759 100644 --- a/gn/gpu.gni +++ b/gn/gpu.gni @@ -16,14 +16,15 @@ skia_gpu_sources = [ "$_include/gpu/GrContext.h", "$_include/gpu/GrContextOptions.h", "$_include/gpu/GrContextThreadSafeProxy.h", + "$_include/gpu/GrDirectContext.h", "$_include/gpu/GrDriverBugWorkarounds.h", + "$_include/gpu/GrRecordingContext.h", "$_include/gpu/GrTypes.h", # Private includes "$_include/private/GrContext_Base.h", "$_include/private/GrGLTypesPriv.h", "$_include/private/GrImageContext.h", - "$_include/private/GrRecordingContext.h", "$_include/private/GrResourceKey.h", "$_include/private/GrSingleOwner.h", "$_include/private/GrTypesPriv.h", @@ -35,10 +36,12 @@ skia_gpu_sources = [ "$_src/gpu/GrAuditTrail.cpp", "$_src/gpu/GrAuditTrail.h", "$_src/gpu/GrAutoLocaleSetter.h", + "$_src/gpu/GrBackendSemaphore.cpp", "$_src/gpu/GrBackendSurface.cpp", "$_src/gpu/GrBackendSurfaceMutableStateImpl.h", "$_src/gpu/GrBackendTextureImageGenerator.cpp", "$_src/gpu/GrBackendTextureImageGenerator.h", + "$_src/gpu/GrBackendUtils.h", "$_src/gpu/GrBaseContextPriv.h", "$_src/gpu/GrBitmapTextureMaker.cpp", "$_src/gpu/GrBitmapTextureMaker.h", @@ -79,6 +82,7 @@ skia_gpu_sources = [ "$_src/gpu/GrDefaultGeoProcFactory.h", "$_src/gpu/GrDeferredProxyUploader.h", "$_src/gpu/GrDeferredUpload.h", + "$_src/gpu/GrDirectContext.cpp", "$_src/gpu/GrDistanceFieldGenFromVector.cpp", "$_src/gpu/GrDistanceFieldGenFromVector.h", "$_src/gpu/GrDrawOpAtlas.cpp", @@ -107,12 +111,12 @@ skia_gpu_sources = [ "$_src/gpu/GrGpuResource.h", "$_src/gpu/GrGpuResourceCacheAccess.h", "$_src/gpu/GrGpuResourcePriv.h", + "$_src/gpu/GrHashMapWithCache.h", "$_src/gpu/GrImageContext.cpp", "$_src/gpu/GrImageContextPriv.h", "$_src/gpu/GrImageInfo.h", "$_src/gpu/GrImageTextureMaker.cpp", "$_src/gpu/GrImageTextureMaker.h", - "$_src/gpu/GrLegacyDirectContext.cpp", "$_src/gpu/GrManagedResource.cpp", "$_src/gpu/GrManagedResource.h", "$_src/gpu/GrMemoryPool.cpp", @@ -185,6 +189,7 @@ skia_gpu_sources = [ "$_src/gpu/GrSPIRVUniformHandler.h", "$_src/gpu/GrSPIRVVaryingHandler.cpp", "$_src/gpu/GrSPIRVVaryingHandler.h", + "$_src/gpu/GrSTArenaList.h", "$_src/gpu/GrSWMaskHelper.cpp", "$_src/gpu/GrSWMaskHelper.h", "$_src/gpu/GrSamplePatternDictionary.cpp", @@ -253,6 +258,7 @@ skia_gpu_sources = [ "$_src/gpu/GrTriangulator.h", "$_src/gpu/GrUniformDataManager.cpp", "$_src/gpu/GrUniformDataManager.h", + "$_src/gpu/GrUnrefDDLTask.h", "$_src/gpu/GrUserStencilSettings.h", "$_src/gpu/GrWaitRenderTask.cpp", "$_src/gpu/GrWaitRenderTask.h", @@ -336,8 +342,6 @@ skia_gpu_sources = [ "$_src/gpu/effects/generated/GrMixerEffect.h", "$_src/gpu/effects/generated/GrOverrideInputFragmentProcessor.cpp", "$_src/gpu/effects/generated/GrOverrideInputFragmentProcessor.h", - "$_src/gpu/effects/generated/GrPremulInputFragmentProcessor.cpp", - "$_src/gpu/effects/generated/GrPremulInputFragmentProcessor.h", "$_src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp", "$_src/gpu/effects/generated/GrRGBToHSLFilterEffect.h", "$_src/gpu/effects/generated/GrRRectBlurEffect.cpp", @@ -368,8 +372,6 @@ skia_gpu_sources = [ "$_src/gpu/ops/GrAtlasTextOp.h", "$_src/gpu/ops/GrClearOp.cpp", "$_src/gpu/ops/GrClearOp.h", - "$_src/gpu/ops/GrClearStencilClipOp.cpp", - "$_src/gpu/ops/GrClearStencilClipOp.h", "$_src/gpu/ops/GrDashLinePathRenderer.cpp", "$_src/gpu/ops/GrDashLinePathRenderer.h", "$_src/gpu/ops/GrDashOp.cpp", @@ -451,8 +453,14 @@ skia_gpu_sources = [ "$_src/gpu/tessellate/GrResolveLevelCounter.h", "$_src/gpu/tessellate/GrStencilPathShader.cpp", "$_src/gpu/tessellate/GrStencilPathShader.h", + "$_src/gpu/tessellate/GrStrokeGeometry.cpp", + "$_src/gpu/tessellate/GrStrokeGeometry.h", "$_src/gpu/tessellate/GrTessellatePathOp.cpp", "$_src/gpu/tessellate/GrTessellatePathOp.h", + "$_src/gpu/tessellate/GrTessellateStrokeOp.cpp", + "$_src/gpu/tessellate/GrTessellateStrokeOp.h", + "$_src/gpu/tessellate/GrTessellateStrokeShader.cpp", + "$_src/gpu/tessellate/GrTessellateStrokeShader.h", "$_src/gpu/tessellate/GrTessellationPathRenderer.cpp", "$_src/gpu/tessellate/GrTessellationPathRenderer.h", "$_src/gpu/tessellate/GrVectorXform.h", @@ -465,14 +473,14 @@ skia_gpu_sources = [ "$_src/gpu/text/GrDistanceFieldAdjustTable.h", "$_src/gpu/text/GrSDFMaskFilter.cpp", "$_src/gpu/text/GrSDFMaskFilter.h", + "$_src/gpu/text/GrSDFTOptions.cpp", + "$_src/gpu/text/GrSDFTOptions.h", "$_src/gpu/text/GrStrikeCache.cpp", "$_src/gpu/text/GrStrikeCache.h", "$_src/gpu/text/GrTextBlob.cpp", "$_src/gpu/text/GrTextBlob.h", "$_src/gpu/text/GrTextBlobCache.cpp", "$_src/gpu/text/GrTextBlobCache.h", - "$_src/gpu/text/GrTextContext.cpp", - "$_src/gpu/text/GrTextContext.h", "$_src/gpu/text/GrTextTarget.h", # GLSL @@ -763,6 +771,8 @@ skia_direct3d_sources = [ "$_src/gpu/d3d/GrD3DCpuDescriptorManager.h", "$_src/gpu/d3d/GrD3DDescriptorHeap.cpp", "$_src/gpu/d3d/GrD3DDescriptorHeap.h", + "$_src/gpu/d3d/GrD3DDescriptorTableManager.cpp", + "$_src/gpu/d3d/GrD3DDescriptorTableManager.h", "$_src/gpu/d3d/GrD3DGpu.cpp", "$_src/gpu/d3d/GrD3DGpu.h", "$_src/gpu/d3d/GrD3DOpsRenderPass.cpp", @@ -780,6 +790,8 @@ skia_direct3d_sources = [ "$_src/gpu/d3d/GrD3DResourceState.h", "$_src/gpu/d3d/GrD3DRootSignature.cpp", "$_src/gpu/d3d/GrD3DRootSignature.h", + "$_src/gpu/d3d/GrD3DSemaphore.cpp", + "$_src/gpu/d3d/GrD3DSemaphore.h", "$_src/gpu/d3d/GrD3DStencilAttachment.cpp", "$_src/gpu/d3d/GrD3DStencilAttachment.h", "$_src/gpu/d3d/GrD3DTexture.cpp", diff --git a/gn/is_clang.py b/gn/is_clang.py index 3b6bb45b09875..4eddc5e75a3b7 100755 --- a/gn/is_clang.py +++ b/gn/is_clang.py @@ -11,8 +11,8 @@ import sys cc,cxx = sys.argv[1:3] -if ('clang' in subprocess.check_output('%s --version' % cc, shell=True) and - 'clang' in subprocess.check_output('%s --version' % cxx, shell=True)): +if (b'clang' in subprocess.check_output('%s --version' % cc, shell=True) and + b'clang' in subprocess.check_output('%s --version' % cxx, shell=True)): print('true') else: print('false') diff --git a/gn/opts.gni b/gn/opts.gni index 4c0cead112298..3d0f3896f3ae1 100644 --- a/gn/opts.gni +++ b/gn/opts.gni @@ -18,3 +18,4 @@ sse41 = [ "$_src/opts/SkOpts_sse41.cpp" ] sse42 = [ "$_src/opts/SkOpts_sse42.cpp" ] avx = [ "$_src/opts/SkOpts_avx.cpp" ] hsw = [ "$_src/opts/SkOpts_hsw.cpp" ] +skx = [ "$_src/opts/SkOpts_skx.cpp" ] diff --git a/gn/rm.py b/gn/rm.py new file mode 100755 index 0000000000000..daac924ba8509 --- /dev/null +++ b/gn/rm.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# +# Copyright 2016 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import os +import shutil +import sys + +dst, = sys.argv[1:] + +if os.path.exists(dst): + if os.path.isdir(dst): + shutil.rmtree(dst) + else: + os.remove(dst) diff --git a/gn/run_sksllex.py b/gn/run_sksllex.py index 5a970df784d91..cc427ff51a710 100755 --- a/gn/run_sksllex.py +++ b/gn/run_sksllex.py @@ -11,11 +11,19 @@ sksllex = sys.argv[1] clangFormat = sys.argv[2] -src = sys.argv[3] +fetchClangFormat = sys.argv[3] +src = sys.argv[4] + +exeSuffix = '.exe' if sys.platform.startswith('win') else ''; + try: subprocess.check_output([sksllex, src + "/sksl/lex/sksl.lex", "Lexer", "Token", src + "/sksl/SkSLLexer.h", src + "/sksl/SkSLLexer.cpp"]) + + if not os.path.isfile(clangFormat + exeSuffix): + subprocess.check_call([sys.executable, fetchClangFormat]); + subprocess.check_call(clangFormat + " -i \"" + src + "/sksl/SkSLLexer.h\"", shell=True) subprocess.check_call(clangFormat + " -i \"" + src + diff --git a/gn/samples.gni b/gn/samples.gni index ae173e5058c17..b80073b704c97 100644 --- a/gn/samples.gni +++ b/gn/samples.gni @@ -43,6 +43,7 @@ samples_sources = [ "$_samplecode/SampleFillType.cpp", "$_samplecode/SampleFilter2.cpp", "$_samplecode/SampleFilterQuality.cpp", + "$_samplecode/SampleFitCubicToCircle.cpp", "$_samplecode/SampleFlutterAnimate.cpp", "$_samplecode/SampleGlyphTransform.cpp", "$_samplecode/SampleGradients.cpp", diff --git a/gn/shared_sources.gni b/gn/shared_sources.gni index 71500113a630b..e710a0e0b6f0c 100644 --- a/gn/shared_sources.gni +++ b/gn/shared_sources.gni @@ -26,4 +26,5 @@ skia_opts = { sse42_sources = sse42 avx_sources = avx hsw_sources = hsw + skx_sources = skx } diff --git a/gn/skia.gni b/gn/skia.gni index c72c95081e460..635b1e58ac71a 100644 --- a/gn/skia.gni +++ b/gn/skia.gni @@ -23,10 +23,12 @@ declare_args() { skia_enable_gpu = true skia_enable_pdf = true skia_enable_skottie = !(is_win && is_component_build) + skia_enable_skrive = true skia_enable_sksl_interpreter = is_skia_dev_build skia_enable_skvm_jit = - is_skia_dev_build && ((target_cpu == "x64" && (is_linux || is_mac)) || - (target_cpu == "arm64" && is_android)) + is_skia_dev_build && + ((target_cpu == "x64" && (is_linux || is_mac || is_win)) || + (target_cpu == "arm64" && is_android)) skia_enable_tools = is_skia_dev_build skia_enable_gpu_debug_layers = is_skia_dev_build && is_debug skia_generate_workarounds = false @@ -48,7 +50,7 @@ declare_args() { skia_use_ffmpeg = false skia_use_fixed_gamma_text = is_android skia_use_fontconfig = is_linux - skia_use_fonthost_mac = is_mac + skia_use_fonthost_mac = is_mac || is_ios skia_use_freetype = is_android || is_fuchsia || is_linux skia_use_harfbuzz = true skia_use_gl = !is_fuchsia @@ -93,9 +95,12 @@ declare_args() { declare_args() { skia_enable_fontmgr_android = skia_use_expat && skia_use_freetype - skia_enable_fontmgr_custom = - is_linux && skia_use_freetype && !skia_use_fontconfig - skia_enable_fontmgr_custom_empty = is_fuchsia && skia_use_freetype + skia_enable_fontmgr_custom_directory = skia_use_freetype && !is_fuchsia + skia_enable_fontmgr_custom_embedded = skia_use_freetype && !is_fuchsia + skia_enable_fontmgr_custom_empty = skia_use_freetype + skia_enable_fontmgr_fontconfig = skia_use_freetype && skia_use_fontconfig + skia_enable_fontmgr_FontConfigInterface = + skia_use_freetype && skia_use_fontconfig skia_enable_nvpr = !skia_enable_flutter_defines skia_enable_spirv_validation = is_skia_dev_build && is_debug && !skia_use_dawn skia_use_dng_sdk = @@ -107,5 +112,30 @@ declare_args() { skia_use_vma = skia_use_vulkan } +declare_args() { + # skia_fontmgr_factory should define SkFontMgr::Factory() + if (skia_enable_fontmgr_empty) { + skia_fontmgr_factory = ":fontmgr_empty_factory" + } else if (is_android && skia_enable_fontmgr_android) { + skia_fontmgr_factory = ":fontmgr_android_factory" + } else if (is_win && skia_enable_fontmgr_win) { + skia_fontmgr_factory = ":fontmgr_win_factory" + } else if ((is_mac || is_ios) && skia_use_fonthost_mac) { + skia_fontmgr_factory = ":fontmgr_mac_ct_factory" + } else if (skia_enable_fontmgr_fontconfig) { + skia_fontmgr_factory = ":fontmgr_fontconfig_factory" + } else if (skia_enable_fontmgr_custom_directory) { + skia_fontmgr_factory = ":fontmgr_custom_directory_factory" + } else if (skia_enable_fontmgr_custom_embedded) { + skia_fontmgr_factory = ":fontmgr_custom_embedded_factory" + } else if (skia_enable_fontmgr_custom_empty) { + skia_fontmgr_factory = ":fontmgr_custom_empty_factory" + } else { + #"src/ports/SkFontMgr_FontConfigInterface_factory.cpp" #WontFix + #"src/ports/SkFontMgr_win_gdi_factory.cpp" # WontFix + skia_fontmgr_factory = ":fontmgr_empty_factory" + } +} + # Our tools require static linking (they use non-exported symbols), and the GPU backend. skia_enable_tools = skia_enable_tools && !is_component_build && skia_enable_gpu diff --git a/gn/sksl.gni b/gn/sksl.gni index 6fa1b8f8a3529..aa80bd7256ae3 100644 --- a/gn/sksl.gni +++ b/gn/sksl.gni @@ -5,11 +5,15 @@ # Things are easiest for everyone if these source paths are absolute. _src = get_path_info("../src", "abspath") +_include = get_path_info("../include", "abspath") skia_sksl_sources = [ + "$_include/private/SkSLSampleUsage.h", "$_src/sksl/SkSLASTFile.h", "$_src/sksl/SkSLASTNode.cpp", "$_src/sksl/SkSLASTNode.h", + "$_src/sksl/SkSLAnalysis.cpp", + "$_src/sksl/SkSLAnalysis.h", "$_src/sksl/SkSLByteCode.cpp", "$_src/sksl/SkSLByteCode.h", "$_src/sksl/SkSLByteCodeGenerator.cpp", @@ -32,8 +36,7 @@ skia_sksl_sources = [ "$_src/sksl/SkSLParser.cpp", "$_src/sksl/SkSLParser.h", "$_src/sksl/SkSLPosition.h", - "$_src/sksl/SkSLSampleMatrix.cpp", - "$_src/sksl/SkSLSampleMatrix.h", + "$_src/sksl/SkSLSampleUsage.cpp", "$_src/sksl/SkSLSectionAndParameterHelper.cpp", "$_src/sksl/SkSLSectionAndParameterHelper.h", "$_src/sksl/SkSLString.cpp", @@ -91,7 +94,6 @@ skia_gpu_processor_sources = [ "$_src/gpu/effects/GrMagnifierEffect.fp", "$_src/gpu/effects/GrMixerEffect.fp", "$_src/gpu/effects/GrOverrideInputFragmentProcessor.fp", - "$_src/gpu/effects/GrPremulInputFragmentProcessor.fp", "$_src/gpu/effects/GrRGBToHSLFilterEffect.fp", "$_src/gpu/effects/GrRRectBlurEffect.fp", "$_src/gpu/effects/GrRectBlurEffect.fp", diff --git a/gn/tests.gni b/gn/tests.gni index aadfae725c7f1..70ef573bbcb77 100644 --- a/gn/tests.gni +++ b/gn/tests.gni @@ -103,6 +103,7 @@ tests_sources = [ "$_tests/GrCCPRTest.cpp", "$_tests/GrContextAbandonTest.cpp", "$_tests/GrContextFactoryTest.cpp", + "$_tests/GrContextOOM.cpp", "$_tests/GrFinishedFlushTest.cpp", "$_tests/GrMemoryPoolTest.cpp", "$_tests/GrMeshTest.cpp", @@ -185,7 +186,9 @@ tests_sources = [ "$_tests/PaintImageFilterTest.cpp", "$_tests/PaintTest.cpp", "$_tests/ParametricStageTest.cpp", + "$_tests/ParseColorTest.cpp", "$_tests/ParsePathTest.cpp", + "$_tests/PathBuilderTest.cpp", "$_tests/PathCoverageTest.cpp", "$_tests/PathMeasureTest.cpp", "$_tests/PathRendererCacheTests.cpp", @@ -212,7 +215,6 @@ tests_sources = [ "$_tests/RandomTest.cpp", "$_tests/ReadPixelsTest.cpp", "$_tests/ReadWriteAlphaTest.cpp", - "$_tests/Reader32Test.cpp", "$_tests/RecordDrawTest.cpp", "$_tests/RecordOptsTest.cpp", "$_tests/RecordPatternTest.cpp", diff --git a/gn/toolchain/BUILD.gn b/gn/toolchain/BUILD.gn index 1832835f1ab94..45177109462af 100644 --- a/gn/toolchain/BUILD.gn +++ b/gn/toolchain/BUILD.gn @@ -42,9 +42,12 @@ declare_args() { dlsymutil_pool_depth = exec_script("num_cpus.py", [], "value") } +# For 'shell' see https://ninja-build.org/manual.html#ref_rule_command if (host_os == "win") { - stamp = "cmd.exe /c echo >" + shell = "cmd.exe /c " + stamp = "$shell echo >" } else { + shell = "" stamp = "touch" } @@ -64,10 +67,10 @@ toolchain("msvc") { if (target_cpu == "x86") { # Toolchain asset includes a script that configures for x86 building. # We don't support x86 builds with local MSVC installations. - env_setup = "cmd /c $win_sdk/bin/SetEnv.cmd /x86 && " + env_setup = "$shell $win_sdk/bin/SetEnv.cmd /x86 && " } else if (target_cpu == "arm64") { # ARM64 compiler is incomplete - it relies on DLLs located in the host toolchain directory. - env_setup = "cmd /C set \"PATH=%PATH%;$win_vc\\Tools\\MSVC\\$win_toolchain_version\\bin\\HostX64\\x64\" && " + env_setup = "$shell set \"PATH=%PATH%;$win_vc\\Tools\\MSVC\\$win_toolchain_version\\bin\\HostX64\\x64\" && " } cl_m32_flag = "" @@ -266,7 +269,8 @@ template("gcc_like_toolchain") { } else { rspfile = "{{output}}.rsp" rspfile_content = "{{inputs}}" - command = "$ar rcs {{output}} @$rspfile" + rm_py = rebase_path("../rm.py") + command = "$shell python \"$rm_py\" \"{{output}}\" && $ar rcs {{output}} @$rspfile" } outputs = diff --git a/gn/utils.gni b/gn/utils.gni index 1b968fc3c139f..18481f9a60791 100644 --- a/gn/utils.gni +++ b/gn/utils.gni @@ -78,9 +78,12 @@ skia_utils_sources = [ "$_src/utils/SkThreadUtils_win.cpp", "$_src/utils/SkUTF.cpp", "$_src/utils/SkUTF.h", - "$_src/utils/SkWhitelistTypefaces.cpp", #mac + "$_src/utils/mac/SkCGBase.h", + "$_src/utils/mac/SkCGGeometry.h", + "$_src/utils/mac/SkCTFontSmoothBehavior.cpp", + "$_src/utils/mac/SkCTFontSmoothBehavior.h", "$_src/utils/mac/SkCreateCGImageRef.cpp", "$_src/utils/mac/SkUniqueCFRef.h", diff --git a/go.mod b/go.mod index c6202b5ed3dc9..cf80655829bda 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module go.skia.org/skia go 1.12 require ( - cloud.google.com/go/storage v1.9.0 + cloud.google.com/go/storage v1.10.0 github.com/99designs/goodies v0.0.0-20140916053233-ec7f410f2ff2 // indirect github.com/Azure/go-autorest v11.1.2+incompatible // indirect github.com/VividCortex/godaemon v0.0.0-20150910212227-3d9f6e0b234f // indirect @@ -16,21 +16,22 @@ require ( github.com/huin/goserial v0.0.0-20121012073615-7b90efdb22b1 // indirect github.com/jackc/fake v0.0.0-20150926172116-812a484cc733 // indirect github.com/jackc/pgx v3.2.0+incompatible // indirect + github.com/kisielk/errcheck v1.3.0 // indirect github.com/luci/gtreap v0.0.0-20161228054646-35df89791e8f // indirect github.com/pkg/errors v0.9.1 - github.com/prometheus/common v0.10.0 // indirect github.com/rogpeppe/go-internal v1.5.0 // indirect - github.com/stretchr/testify v1.6.0 + github.com/stretchr/testify v1.6.1 github.com/vektra/mockery v1.1.2 // indirect - go.chromium.org/luci v0.0.0-20200604042319-a5a7ce1799fa // indirect - go.skia.org/infra v0.0.0-20200603202721-a6e610f118bb + go.chromium.org/luci v0.0.0-20200707033358-8fb6a0ac9ee5 // indirect + go.skia.org/infra v0.0.0-20200706211051-88e733d409bf golang.org/x/exp v0.0.0-20200228211341-fcea875c7e85 // indirect golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8 // indirect golang.org/x/mobile v0.0.0-20191002175909-6d0d39b2ca82 // indirect + golang.org/x/net v0.0.0-20200707034311-ab3426394381 // indirect golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d - golang.org/x/tools v0.0.0-20200604042327-9b20fe4cabe8 // indirect + golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7 // indirect golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 - google.golang.org/api v0.26.0 - gopkg.in/yaml.v3 v3.0.0-20200603094226-e3079894b1e8 // indirect + google.golang.org/api v0.28.0 + google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df // indirect sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e // indirect ) diff --git a/go.sum b/go.sum index 16f23b6d85198..8515b0e446c6f 100644 --- a/go.sum +++ b/go.sum @@ -25,6 +25,12 @@ cloud.google.com/go v0.56.0 h1:WRz29PgAsVEyPSDHyk+0fpEkwEFyfhHn+JbksT6gIL4= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0 h1:EpMNVUorLiZIELdMZbCYX/ByTFCdoYopYAGxaGVz9ms= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.58.0 h1:vtAfVc723K3xKq1BQydk/FyCldnaNFhGhpJxaJzgRMQ= +cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg= +cloud.google.com/go v0.59.0 h1:BM3svUDU3itpc2m5cu5wCyThIYNDlFlts9GASw31GW8= +cloud.google.com/go v0.59.0/go.mod h1:qJxNOVCRTxHfwLhvDxxSI9vQc1zI59b9pEglp1Iv60E= +cloud.google.com/go v0.60.0 h1:R+tDlceO7Ss+zyvtsdhTxacDyZ1k99xwskQ4FT7ruoM= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= @@ -36,10 +42,14 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigtable v1.3.0 h1:PAplkJLXheOLlK5PPyy4/HXtPzHn+1/LaYDWIeGxnio= cloud.google.com/go/bigtable v1.3.0/go.mod h1:z5EyKrPE8OQmeg4h5MNdKvuSnI9CCT49Ki3f23aBzio= +cloud.google.com/go/bigtable v1.4.0 h1:53CVzqOOfDOZLgwdbxktMY7FVcg+V7VbFIvz6TT6+x4= +cloud.google.com/go/bigtable v1.4.0/go.mod h1:AgdyvSw1ksn4wdYT4sXDZSXlaaM6WpdWQyD7DE5ggPM= cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.2.0 h1:906wMszEeOl3+WoaxXeoBpZbSWmZ/q2xRHMIVLBLCJc= +cloud.google.com/go/datastore v1.2.0/go.mod h1:FKd9dFEjRui5757lkOJ7z/eKtL74o5hsbY0o6Z0ozz8= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.2.0 h1:zrl+2VJAYC/C6WzEPnkqZIBeHyHFs/UmtzJdXU4Bvmo= cloud.google.com/go/firestore v1.2.0/go.mod h1:iISCjWnTpnoJT1R287xRdjvQHJrxQOpeah4phb5D3h0= @@ -67,8 +77,12 @@ cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35 cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.9.0 h1:oXnZyBjHB6hC8TnSle0AWW6pGJ29EuSo5ww+SFmdNBg= cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU= +cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= contrib.go.opencensus.io/exporter/stackdriver v0.13.1 h1:RX9W6FelAqTVnBi/bRXJLXr9n18v4QkQwZYIdnNS51I= contrib.go.opencensus.io/exporter/stackdriver v0.13.1/go.mod h1:z2tyTZtPmQ2HvWH4cOmVDgtY+1lomfKdbLnkJvZdc8c= +contrib.go.opencensus.io/exporter/stackdriver v0.13.2 h1:5lKLBwUuq4S6pTbYaBtWmnay3eJfKNS3qL8M8HM5fM4= +contrib.go.opencensus.io/exporter/stackdriver v0.13.2/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/99designs/goodies v0.0.0-20140916053233-ec7f410f2ff2/go.mod h1:cbC1BMQYOqZ70I8LEvH53q53MzD33COOamPrxo0Y3Wk= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -111,6 +125,8 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/godaemon v0.0.0-20150910212227-3d9f6e0b234f/go.mod h1:Y8CJ3IwPIAkMhv/rRUWIlczaeqd9ty9yrl+nc2AbaL4= github.com/a8m/envsubst v1.1.0 h1:d+14SVq1lbI+JuxhEqYduWofZ0/qQHatwm3TBzvdzaE= github.com/a8m/envsubst v1.1.0/go.mod h1:91m2Q6AZE0w4WD/laQam2MtWq6FxJVm7UqcB30DeYxw= +github.com/a8m/envsubst v1.2.0 h1:yvzAhJD2QKdo35Ut03wIfXQmg+ta3wC/1bskfZynz+Q= +github.com/a8m/envsubst v1.2.0/go.mod h1:PpvLvNWa+Rvu/10qXmFbFiGICIU5hZvFJNPCCkUaObg= github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -165,6 +181,16 @@ github.com/aws/aws-sdk-go v1.31.8 h1:qbA8nsLYcqtGjMGDogqykuO0LyUONkP9YlsKu1SVV5M github.com/aws/aws-sdk-go v1.31.8/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.31.9 h1:n+b34ydVfgC30j0Qm69yaapmjejQPW2BoDBX7Uy/tLI= github.com/aws/aws-sdk-go v1.31.9/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.31.10 h1:33jOMifUSdOP9pvNEOj+PGwljzunc8bJvKKNF/JuGzo= +github.com/aws/aws-sdk-go v1.31.10/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.31.11 h1:Uz7VGg3giOV9Z4SlLdXO6RHafArHbK59vSc6mnzYjGU= +github.com/aws/aws-sdk-go v1.31.11/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.31.14 h1:uRC2riabEXPMHl1CDylsfCod5DKjiOSXhYvxg/Eb9V8= +github.com/aws/aws-sdk-go v1.31.14/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.32.13 h1:zzyXF7SUxJcJa3hTcYCl1/Ey+kh2N8TjK5tWnL0wieo= +github.com/aws/aws-sdk-go v1.32.13/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.33.1 h1:yz9XmNzPshz/lhfAZvLfMnIS9HPo8+boGRcWqDVX+T0= +github.com/aws/aws-sdk-go v1.33.1/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= @@ -346,6 +372,8 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-github/v29 v29.0.3 h1:IktKCTwU//aFHnpA+2SLIi7Oo9uhAzgsdZNbcAqhgdc= @@ -372,6 +400,7 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -440,6 +469,8 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs= github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huin/goserial v0.0.0-20121012073615-7b90efdb22b1/go.mod h1:x4wgpgRJT44loaDTf8/wWCkvTlhrKlVlaHATk7Leqlw= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -497,6 +528,8 @@ github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCV github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= @@ -512,9 +545,12 @@ github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0 h1:reN85Pxc5larApoH1keMBiu2GWtPqXQ1nc9gx+jOU+E= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.3.0 h1:LT9MIcYaA4MhK2jGb1DIWjJY8nnzC/bBqgKYhbWq+lk= +github.com/kisielk/errcheck v1.3.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -573,6 +609,8 @@ github.com/mitchellh/mapstructure v1.3.0 h1:iDwIio/3gk2QtLLEsqU5lInaMzos0hDTz8a6 github.com/mitchellh/mapstructure v1.3.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.3.1 h1:cCBH2gTD2K0OtLlv/Y5H01VQCqmlDxz30kS5Y5bqfLA= github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg= +github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= @@ -638,6 +676,7 @@ github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= @@ -650,6 +689,10 @@ github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.6.0 h1:YVPodQOcK15POxhgARIvnDRVpLcuK8mglnMrWfyrw6A= github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4= +github.com/prometheus/client_golang v1.7.0 h1:wCi7urQOGBsYcQROHqpUUX4ct84xp40t9R9JX0FuA/U= +github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE= @@ -678,6 +721,10 @@ github.com/prometheus/procfs v0.0.10 h1:QJQN3jYQhkamO4mhfUWqdDH2asK7ONOI9MTWjyAx github.com/prometheus/procfs v0.0.10/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.0.11 h1:DhHlBtkHWPYi8O2y31JkK0TF+DGM+51OopZjH/Ia5qI= github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.0 h1:jhMy6QXfi3y2HEzFoyuCj40z4OZIIHHPtFyCMftmvKA= +github.com/prometheus/procfs v0.1.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -707,6 +754,12 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/skia-dev/go-systemd v0.0.0-20181025131956-1cc903e82ae4 h1:KPlmEyLo5r9hnWZq8O0B0Rj4AcRv/tJMqEgS6p0JMeQ= github.com/skia-dev/go-systemd v0.0.0-20181025131956-1cc903e82ae4/go.mod h1:TUH3112UTh2tzE4XSwBwt7bCKnQbI7TPpAd0cbQ9RzY= +github.com/skia-dev/go2ts v1.1.0 h1:jcd0AIOe7PxizwPsInBQA8X3cgLm4tGint/LMIKb1DE= +github.com/skia-dev/go2ts v1.1.0/go.mod h1:pE59J8wf5IHSMtPhH8PmWq5ZTLt6p1Ih+4ODd9fkGXk= +github.com/skia-dev/go2ts v1.3.0 h1:0MJfc4SBAlx+7ZeGsQA5zCKg59hcNapoi7AdqIGT9lo= +github.com/skia-dev/go2ts v1.3.0/go.mod h1:pE59J8wf5IHSMtPhH8PmWq5ZTLt6p1Ih+4ODd9fkGXk= +github.com/skia-dev/go2ts v1.3.1 h1:3uw+9eCAaXjQE646bOccvBDDCw6R+PHwXUZAhhXXQzg= +github.com/skia-dev/go2ts v1.3.1/go.mod h1:pE59J8wf5IHSMtPhH8PmWq5ZTLt6p1Ih+4ODd9fkGXk= github.com/skia-dev/google-api-go-client v0.10.1-0.20200109184256-16c3d6f408b2 h1:Id5JdSD66PKQQiiVFG1VXDVCT5U3DcDzJSReXRxKRLk= github.com/skia-dev/google-api-go-client v0.10.1-0.20200109184256-16c3d6f408b2/go.mod h1:N0iTzjbw95ZVfOL7wVngmVXE2kG0NP+LYlq3QMwf9Qo= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= @@ -721,6 +774,8 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.1 h1:GPTpEAuNr98px18yNQ66JllNil98wfRZ/5Ukny8FeQA= +github.com/spf13/afero v1.3.1/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= @@ -758,6 +813,8 @@ github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.0 h1:jlIyCplCJFULU/01vCkhKuTyc3OorI3bJFuw6obfgho= github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= @@ -798,6 +855,7 @@ github.com/yosuke-furukawa/json5 v0.1.1 h1:0F9mNwTvOuDNH243hoPqvf+dxa5QsKnZzU20u github.com/yosuke-furukawa/json5 v0.1.1/go.mod h1:sw49aWDqNdRJ6DYUtIQiaA3xyj2IL9tjeNYmX2ixwcU= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zeebo/bencode v1.0.0 h1:zgop0Wu1nu4IexAZeCZ5qbsjU4O1vMrfCrVgUjbHVuA= github.com/zeebo/bencode v1.0.0/go.mod h1:Ct7CkrWIQuLWAy9M3atFHYq4kG9Ao/SsY5cdtCXmp9Y= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= @@ -882,6 +940,32 @@ go.chromium.org/luci v0.0.0-20200603035826-6f83db364f7f h1:7JuZujdZDxrgVL5ZEs2gY go.chromium.org/luci v0.0.0-20200603035826-6f83db364f7f/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= go.chromium.org/luci v0.0.0-20200604042319-a5a7ce1799fa h1:E42yWOcJQIhOnOGH6by9wWIQT7H7pyyBsYJVlOsLrI4= go.chromium.org/luci v0.0.0-20200604042319-a5a7ce1799fa/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200605045204-39c0f2d93834 h1:9v7x9nGhW8VpQxHTmCDLEE1aORWrO33u6c2UUAUUMWg= +go.chromium.org/luci v0.0.0-20200605045204-39c0f2d93834/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200605231454-b70b93d4ae6d h1:wQ9yA9PJfTskgIfszZS+y9n7oNrYNutFZxItzpjQM+g= +go.chromium.org/luci v0.0.0-20200605231454-b70b93d4ae6d/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200606210838-0cf95fe43711 h1:w40rE6vljasTHsgSantm2YEmUgO3V8AfNcx+RBp0bmQ= +go.chromium.org/luci v0.0.0-20200606210838-0cf95fe43711/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200607214229-335dfe308d12 h1:SW4K2pCWkD9JJIJejDmMdvsmoaOBLdgk/a5J3WcPggU= +go.chromium.org/luci v0.0.0-20200607214229-335dfe308d12/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200610031951-aa35210c29b0 h1:t1mvHoACc3BTwLszzxklvj5DhFgeF2bM0srv6yPP4r4= +go.chromium.org/luci v0.0.0-20200610031951-aa35210c29b0/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200616031706-d0fdf43f911f h1:YzAEJZzV9ML+5k5a99zUa0TVzg5LguU0Mh680T9H7Go= +go.chromium.org/luci v0.0.0-20200616031706-d0fdf43f911f/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200617043411-34dd37734506 h1:SimW6kdpOPUzQxbfsGjmC6/MGj2+2Qe9JFfUPtWH4Ac= +go.chromium.org/luci v0.0.0-20200617043411-34dd37734506/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200620051646-b4124b2326a0 h1:KbTWugpDXgM5wSYWAlmp0NPxxj65l3COVTbPxJaoUXs= +go.chromium.org/luci v0.0.0-20200620051646-b4124b2326a0/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200624214209-c1ada0c7a303 h1:P3/DuOPaxxznXpgYVLBevVnGSGFZsxwA1MYOCG+pufg= +go.chromium.org/luci v0.0.0-20200624214209-c1ada0c7a303/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200701021647-c690c0e32e57 h1:8oYI9hlYoLz3NfO1AekWGvi7mrkTPUA+x+hTt52AfTw= +go.chromium.org/luci v0.0.0-20200701021647-c690c0e32e57/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200702032142-448217aee33a h1:lNeTwNatup7rExN+iy/yYRHx9ZP0bEZnyhQ0K0uUhHI= +go.chromium.org/luci v0.0.0-20200702032142-448217aee33a/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200706010025-fa1f2bddad9a h1:jS3SDgnlOpSc0s4aPpewBI3y+G6pEY5dOsZYknXH7+c= +go.chromium.org/luci v0.0.0-20200706010025-fa1f2bddad9a/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= +go.chromium.org/luci v0.0.0-20200707033358-8fb6a0ac9ee5 h1:P9lJR5u5PNQQcyL4g7LVDsr6rsqtsPzxzJJfnTBxaKM= +go.chromium.org/luci v0.0.0-20200707033358-8fb6a0ac9ee5/go.mod h1:MIQewVTLvOvc0UioV0JNqTNO/RspKFS0XEeoKrOxsdM= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.mongodb.org/mongo-driver v1.1.0/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -894,6 +978,8 @@ go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.skia.org/infra v0.0.0-20200426051548-d5561681c574 h1:ncyx3a9Y+Z+dWmTxoZpiP+KAugNHXzBuCN8cgiajXwU= go.skia.org/infra v0.0.0-20200426051548-d5561681c574/go.mod h1:oBRD8ErmsFrK7iGrag6lV1O0mGWUHkUEKnJMz5bLIuo= go.skia.org/infra v0.0.0-20200427173615-ee504c19b426 h1:TgOSfFggLtGANTRzWQZcnIFJvzsjVugqbCewJrs0fHk= @@ -968,6 +1054,24 @@ go.skia.org/infra v0.0.0-20200602205122-4b2f488e41f2 h1:BDmPEnFuRjA1hse1mrtENFdN go.skia.org/infra v0.0.0-20200602205122-4b2f488e41f2/go.mod h1:V3DIL+P3Z02iAcrN6fv12VdGmcGk0Ilnll9AaJMwcJ8= go.skia.org/infra v0.0.0-20200603202721-a6e610f118bb h1:E5FJMOSsxV2rO8BQCCoWmHupW452aZnsPxmyucdSZ2U= go.skia.org/infra v0.0.0-20200603202721-a6e610f118bb/go.mod h1:fWqpZS0bMv6mNkxuLcBO3QT99/esXYMStxWBump650A= +go.skia.org/infra v0.0.0-20200604211856-3c19627e244c h1:b+GM2TnLzcrLmErKUhfAAo+2LszF4ytZ0a3JRxPcsTg= +go.skia.org/infra v0.0.0-20200604211856-3c19627e244c/go.mod h1:rZheB7d1g56dFa1+ppg+MM+eLIFOU0FtWjOH9qt0+js= +go.skia.org/infra v0.0.0-20200605163027-b867fb6b6232 h1:1Ijp82P9IWeUQxp5GksR9lNpewQrapamOoL5bM4U6Zg= +go.skia.org/infra v0.0.0-20200605163027-b867fb6b6232/go.mod h1:rUspbipWPw+4biwgLMMx4G+N98efd9fe9bGN5w3McX0= +go.skia.org/infra v0.0.0-20200607051952-f5b0a6c1ff19 h1:r7jv7+kc3/GWF6V6F41DGewz8I88JPZ/8SJgIOzAO4g= +go.skia.org/infra v0.0.0-20200607051952-f5b0a6c1ff19/go.mod h1:rUspbipWPw+4biwgLMMx4G+N98efd9fe9bGN5w3McX0= +go.skia.org/infra v0.0.0-20200616030136-5b68b7891c11 h1:7mRcsdA0SA+ZBlr/hIaqyObrLOJJiLoNDtIQfcm4HXM= +go.skia.org/infra v0.0.0-20200616030136-5b68b7891c11/go.mod h1:zZzuuDGdQ4PWDlSeT6XES2oeGAN0MC3Si7jAqktPpj0= +go.skia.org/infra v0.0.0-20200616185547-28019d8c7381 h1:ufnikxI51+amDAf+4DtT31CmmfF0qAyRHMxt44rqp9o= +go.skia.org/infra v0.0.0-20200616185547-28019d8c7381/go.mod h1:zZzuuDGdQ4PWDlSeT6XES2oeGAN0MC3Si7jAqktPpj0= +go.skia.org/infra v0.0.0-20200620150920-23b7fda631d5 h1:3vYt68R8Bw8eYBbuh0e/olkspGyJqIbcfMNGJjc1x3A= +go.skia.org/infra v0.0.0-20200620150920-23b7fda631d5/go.mod h1:pMsp+TR1J9uXYYdx1eb5CN6l89l0h9jloETXMKmesPM= +go.skia.org/infra v0.0.0-20200624212929-6c6f866a7d58 h1:z1yyY9tpiiqrgeskjVoJhTZoI7xXRc8tQYEACM7I8TA= +go.skia.org/infra v0.0.0-20200624212929-6c6f866a7d58/go.mod h1:pMsp+TR1J9uXYYdx1eb5CN6l89l0h9jloETXMKmesPM= +go.skia.org/infra v0.0.0-20200701232717-f65049e8d199 h1:xzgNDs+qemaawIcCrv4i9nWMwb6PMznZY/7KJu/t61A= +go.skia.org/infra v0.0.0-20200701232717-f65049e8d199/go.mod h1:31exDrG21U2Ipqt0Ao2zlJM/GEMS/0za5zovLSJH1c0= +go.skia.org/infra v0.0.0-20200706211051-88e733d409bf h1:a8WuucYFZoZH56L9Vxb8sGTIYMfLzEjeaE29ZmG/QJM= +go.skia.org/infra v0.0.0-20200706211051-88e733d409bf/go.mod h1:9X0Tt0jgyjgQ3GlJyjSUVoVahWlmQ4gCAI0Ba2ouh8w= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= @@ -1003,6 +1107,10 @@ golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37 h1:cg5LA/zNPRzIXIWSCxQW10 golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200602180216-279210d13fed h1:g4KENRiCMEx58Q7/ecwfT0N2o8z35Fnbsjig/Alf2T4= golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9 h1:vEg9joUBmeBcK9iSJftGNf3coIG4HqZElCPehJsfAYM= +golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1110,6 +1218,10 @@ golang.org/x/net v0.0.0-20200528225125-3c3fba18258b h1:IYiJPiJfzktmDAO1HQiwjMjwj golang.org/x/net v0.0.0-20200528225125-3c3fba18258b/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM= golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1128,6 +1240,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1206,18 +1320,30 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zr golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980 h1:OjiUf46hAmXblsZdnoSXsEUSKU8r1UEzcL5RVZ4gO9Y= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200620081246-981b61492c35 h1:wb/9mP8eUAmHfkM8RmpeLq6nUA7c2i5+bQOtcDftjaE= +golang.org/x/sys v0.0.0-20200620081246-981b61492c35/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4 h1:5/PjkGUjvEU5Gl6BxmvKRPpqo2uNMv4rcHBMwzk/st8= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s= +golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1345,6 +1471,32 @@ golang.org/x/tools v0.0.0-20200601175630-2caf76543d99 h1:deddXmhOJb/bvD/4M/j2AUM golang.org/x/tools v0.0.0-20200601175630-2caf76543d99/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200604042327-9b20fe4cabe8 h1:8Xr1qwxn90MXYKftwNxIO2g4J+26naghxFS5rYiTZww= golang.org/x/tools v0.0.0-20200604042327-9b20fe4cabe8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200604183345-4d5ea46c79fe h1:nHJ3EpvC/Nk6Gc4FTwTQ3YOBAODRx412L5jEPjgJcEg= +golang.org/x/tools v0.0.0-20200604183345-4d5ea46c79fe/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6 h1:5Y8c5HBW6hBYnGEE3AbJPV0R8RsQmg1/eaJrpvasns0= +golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200609164405-eb789aa7ce50/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200612220849-54c614fe050c/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200615222825-6aa8f57aacd9 h1:cwgUY+1ja2qxWb2dyaCoixaA66WGWmrijSlxaM+JM/g= +golang.org/x/tools v0.0.0-20200615222825-6aa8f57aacd9/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200617042924-7f3f4b10a808 h1:t4rDo0JMqBOEHVnboBBPY/e1U1exx2OO5lL/TcfJM28= +golang.org/x/tools v0.0.0-20200617042924-7f3f4b10a808/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2 h1:FD4wDsP+CQUqh2V12OBOt90pLHVToe58P++fUu3ggV4= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619210111-0f592d2728bb h1:/7SQoPdMxZ0c/Zu9tBJgMbRE/BmK6i9QXflNJXKAmw0= +golang.org/x/tools v0.0.0-20200619210111-0f592d2728bb/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff h1:foic6oVZ4MKltJC6MXzuFZFswE7NCjjtc0Hxbyblawc= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200701041122-1837592efa10/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200701221012-f01a4bec33ec h1:YBEOZz3haVTr7CIxw2aKLMIED46tia+Er/qC82KAHu0= +golang.org/x/tools v0.0.0-20200701221012-f01a4bec33ec/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200702044944-0cc1aa72b347/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7 h1:JxpwOnW/RU5vsiwsDw3eqto/7ccehcv162Xma5/FHoI= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1385,6 +1537,10 @@ google.golang.org/api v0.25.0 h1:LodzhlzZEUfhXzNUMIfVlf9Gr6Ua5MMtoFWh7+f47qA= google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.26.0 h1:VJZ8h6E8ip82FRpQl848c5vAadxlTXrUh8RzQzSRm08= google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.27.0 h1:L02vxokXh9byvvyTw3PLA4MmNri7cY29nliyK4MnIxY= +google.golang.org/api v0.27.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0 h1:jMF5hhVfMkTZwHW1SDpKq5CkgWLXOb31Foaca9Zr3oM= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1475,6 +1631,29 @@ google.golang.org/genproto v0.0.0-20200602104108-2bb8d6132df6 h1:fsxmG3uIxSjgTNy google.golang.org/genproto v0.0.0-20200602104108-2bb8d6132df6/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736 h1:+IE3xTD+6Eb7QWG5JFp+dQr/XjKpjmrNkh4pdjTdHEs= google.golang.org/genproto v0.0.0-20200603110839-e855014d5736/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200604104852-0b0486081ffb h1:ek2py5bOqzR7MR/6obzk0rXUgYCLmjyLnaO9ssT+l6w= +google.golang.org/genproto v0.0.0-20200604104852-0b0486081ffb/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200605102947-12044bf5ea91 h1:ES+5k7Xz+sYByd2L7mvcanaIuY0Iz3L3O6OhN+cRdu8= +google.golang.org/genproto v0.0.0-20200605102947-12044bf5ea91/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200612171551-7676ae05be11/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200615140333-fd031eab31e7 h1:1N7l1PuXZwEK7OhHdmKQROOM75PnUjABGwvVRbLBgFk= +google.golang.org/genproto v0.0.0-20200615140333-fd031eab31e7/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200617032506-f1bdc9086088 h1:XXo4PvhJkaWYIkwn7bX7mcdB8RdcOvn12HbaUUAwX3E= +google.golang.org/genproto v0.0.0-20200617032506-f1bdc9086088/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790 h1:FGjyjrQGURdc98leD1P65IdQD9Zlr4McvRcqIlV6OSs= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200620020550-bd6e04640131 h1:IXNofpkLhv80L3TJQvj2YQLnMHZgAktycswvtXwQiRk= +google.golang.org/genproto v0.0.0-20200620020550-bd6e04640131/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200623002339-fbb79eadd5eb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200624020401-64a14ca9d1ad h1:uAwc13+y0Y8QZLTYhLCu6lHhnG99ecQU5FYTj8zxAng= +google.golang.org/genproto v0.0.0-20200624020401-64a14ca9d1ad/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200701001935-0939c5918c31/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200702021140-07506425bd67 h1:4BC1C1i30F3MZeiIO6y6IIo4DxrtOwITK87bQl3lhFA= +google.golang.org/genproto v0.0.0-20200702021140-07506425bd67/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df h1:HWF6nM8ruGdu1K8IXFR+i2oT3YP+iBfZzCbC9zUfcWo= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1 h1:Hz2g2wirWK7H0qIIhGIqRGTuMwTE8HEKFnDZZ7lm9NU= @@ -1499,6 +1678,8 @@ google.golang.org/grpc v1.29.0 h1:2pJjwYOdkZ9HlN4sWRYBg9ttH5bCOlsueaM+b/oYjwo= google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1512,6 +1693,8 @@ google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1567,6 +1750,10 @@ gopkg.in/yaml.v3 v3.0.0-20200602174320-3e3e88ca92fa h1:5lGs+2OAqZvyIo1XjvoyXoDb8 gopkg.in/yaml.v3 v3.0.0-20200602174320-3e3e88ca92fa/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200603094226-e3079894b1e8 h1:jL/vaozO53FMfZLySWM+4nulF3gQEC6q5jH90LPomDo= gopkg.in/yaml.v3 v3.0.0-20200603094226-e3079894b1e8/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo= +gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 h1:tQIYjPdBoyREyB9XMu+nnTclpTYkz2zFM+lzLJFO4gQ= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1583,14 +1770,20 @@ k8s.io/api v0.18.2 h1:wG5g5ZmSVgm5B+eHMIbI9EGATS2L8Z72rda19RIEgY8= k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= k8s.io/api v0.18.3 h1:2AJaUQdgUZLoDZHrun21PW2Nx9+ll6cUzvn3IKhSIn0= k8s.io/api v0.18.3/go.mod h1:UOaMwERbqJMfeeeHc8XJKawj4P9TgDRnViIqqBeH2QA= +k8s.io/api v0.18.5 h1:fKbCxr+U3fu7k6jB+QeYPD/c6xKYeSJ2KVWmyUypuWM= +k8s.io/api v0.18.5/go.mod h1:tN+e/2nbdGKOAH55NMV8oGrMG+3uRlA9GaRfvnCCSNk= k8s.io/apimachinery v0.18.2 h1:44CmtbmkzVDAhCpRVSiP2R5PPrC2RtlIv/MoB8xpdRA= k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= k8s.io/apimachinery v0.18.3 h1:pOGcbVAhxADgUYnjS08EFXs9QMl8qaH5U4fr5LGUrSk= k8s.io/apimachinery v0.18.3/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= +k8s.io/apimachinery v0.18.5 h1:Lh6tgsM9FMkC12K5T5QjRm7rDs6aQN5JHkA0JomULDM= +k8s.io/apimachinery v0.18.5/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= k8s.io/client-go v0.18.2 h1:aLB0iaD4nmwh7arT2wIn+lMnAq7OswjaejkQ8p9bBYE= k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= k8s.io/client-go v0.18.3 h1:QaJzz92tsN67oorwzmoB0a9r9ZVHuD5ryjbCKP0U22k= k8s.io/client-go v0.18.3/go.mod h1:4a/dpQEvzAhT1BbuWW09qvIaGw6Gbu1gZYiQZIi1DMw= +k8s.io/client-go v0.18.5 h1:cLhGZdOmyPhwtt20Lrb7uAqxxB1uvY+NTmNJvno1oKA= +k8s.io/client-go v0.18.5/go.mod h1:EsiD+7Fx+bRckKWZXnAXRKKetm1WuzPagH4iOSC8x58= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= diff --git a/include/android/SkAndroidFrameworkUtils.h b/include/android/SkAndroidFrameworkUtils.h index d0f7d44fad207..dc3a6ebc07402 100644 --- a/include/android/SkAndroidFrameworkUtils.h +++ b/include/android/SkAndroidFrameworkUtils.h @@ -14,6 +14,7 @@ #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK class SkCanvas; +struct SkIRect; struct SkRect; class SkSurface; @@ -41,6 +42,14 @@ class SkAndroidFrameworkUtils { static int SaveBehind(SkCanvas* canvas, const SkRect* subset); + // Operating within the canvas' clip stack, this resets the geometry of the clip to be an + // intersection with the device-space 'rect'. If 'rect' is null, this will use the rect that + // was last set using androidFramework_setDeviceClipRestriction on the canvas. If that was never + // set, it will restrict the clip to the canvas' dimensions. + // + // TODO: Eventually, make 'rect' non-optional and no longer store the restriction per canvas. + static void ReplaceClip(SkCanvas* canvas, const SkIRect* rect = nullptr); + /** * Unrolls a chain of nested SkPaintFilterCanvas to return the base wrapped canvas. * diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index 8fd0e373b70c5..9ea55edb9d249 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -33,6 +33,7 @@ #include class GrContext; +class GrRecordingContext; class GrRenderTargetContext; class SkBaseDevice; class SkBitmap; @@ -289,6 +290,11 @@ class SK_API SkCanvas { */ virtual GrContext* getGrContext(); + /** + * Experimental. SkCanvases can actually only guarantee a GrRecordingContext. + */ + virtual GrRecordingContext* recordingContext(); + /** Sometimes a canvas is owned by a surface. If it is, getSurface() will return a bare * pointer to that surface, else this will return nullptr. */ @@ -684,37 +690,6 @@ class SK_API SkCanvas { , fSaveLayerFlags(saveLayerFlags) {} -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - /** Experimental. Not ready for general use. - Sets fBounds, fPaint, fBackdrop, fClipMask, fClipMatrix, and fSaveLayerFlags. - clipMatrix uses alpha channel of image, transformed by clipMatrix, to clip - layer when drawn to SkCanvas. - - @param bounds layer dimensions; may be nullptr - @param paint graphics state applied to layer when overlaying prior - layer; may be nullptr - @param backdrop If not null, this causes the current layer to be filtered by - backdrop, and then drawn into the new layer - (respecting the current clip). - If null, the new layer is initialized with transparent-black. - @param clipMask clip applied to layer; may be nullptr - @param clipMatrix matrix applied to clipMask; may be nullptr to use - identity matrix - @param saveLayerFlags SaveLayerRec options to modify layer - @return SaveLayerRec fully specified - */ - SaveLayerRec(const SkRect* bounds, const SkPaint* paint, const SkImageFilter* backdrop, - const SkImage* clipMask, const SkMatrix* clipMatrix, - SaveLayerFlags saveLayerFlags) - : fBounds(bounds) - , fPaint(paint) - , fBackdrop(backdrop) - , fClipMask(clipMask) - , fClipMatrix(clipMatrix) - , fSaveLayerFlags(saveLayerFlags) - {} -#endif - /** hints at layer size limit */ const SkRect* fBounds = nullptr; @@ -729,13 +704,6 @@ class SK_API SkCanvas { */ const SkImageFilter* fBackdrop = nullptr; -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - /** clips layer with mask alpha */ - const SkImage* fClipMask = nullptr; - - /** transforms mask alpha used to clip */ - const SkMatrix* fClipMatrix = nullptr; -#endif /** preserves LCD text, creates with prior layer contents */ SaveLayerFlags fSaveLayerFlags = 0; }; @@ -956,6 +924,8 @@ class SK_API SkCanvas { Pass an empty rect to disable maximum clip. This private API is for use by Android framework only. + DEPRECATED: Replace usage with SkAndroidFrameworkUtils::replaceClip() + @param rect maximum allowed clip in device coordinates */ void androidFramework_setDeviceClipRestriction(const SkIRect& rect); @@ -2759,8 +2729,7 @@ class SK_API SkCanvas { void internalDrawPaint(const SkPaint& paint); void internalSaveLayer(const SaveLayerRec&, SaveLayerStrategy); void internalSaveBehind(const SkRect*); - void internalDrawDevice(SkBaseDevice*, const SkPaint*, SkImage* clipImage, - const SkMatrix& clipMatrix); + void internalDrawDevice(SkBaseDevice*, const SkPaint*); void internalConcat44(const SkM44&); @@ -2786,6 +2755,13 @@ class SK_API SkCanvas { */ bool androidFramework_isClipAA() const; + /** + * Reset the clip to be just the intersection with the global-space 'rect'. This operates within + * the save/restore stack of the canvas, so restore() will bring back any saved clip. However, + * since 'rect' is already in global space, it is not modified by the canvas matrix. + */ + void androidFramework_replaceClip(const SkIRect& rect); + virtual SkPaintFilterCanvas* internal_private_asPaintFilterCanvas() const { return nullptr; } /** diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h index 1222862f39969..b9f680835a684 100644 --- a/include/core/SkColorFilter.h +++ b/include/core/SkColorFilter.h @@ -11,70 +11,44 @@ #include "include/core/SkBlendMode.h" #include "include/core/SkColor.h" #include "include/core/SkFlattenable.h" -#include "include/core/SkRefCnt.h" -class GrColorInfo; -class GrFragmentProcessor; -class GrRecordingContext; -class SkArenaAlloc; -class SkBitmap; class SkColorMatrix; -class SkColorSpace; -struct SkStageRec; - -namespace skvm { - class Builder; - struct F32; - struct Uniforms; - struct Color; -} /** - * ColorFilters are optional objects in the drawing pipeline. When present in - * a paint, they are called with the "src" colors, and return new colors, which - * are then passed onto the next stage (either ImageFilter or Xfermode). - * - * All subclasses are required to be reentrant-safe : it must be legal to share - * the same instance between several threads. - */ +* ColorFilters are optional objects in the drawing pipeline. When present in +* a paint, they are called with the "src" colors, and return new colors, which +* are then passed onto the next stage (either ImageFilter or Xfermode). +* +* All subclasses are required to be reentrant-safe : it must be legal to share +* the same instance between several threads. +*/ class SK_API SkColorFilter : public SkFlattenable { public: // DEPRECATED. skbug.com/8941 - bool asColorMode(SkColor* color, SkBlendMode* mode) const { - return this->onAsAColorMode(color, mode); - } + bool asColorMode(SkColor* color, SkBlendMode* mode) const; /** If the filter can be represented by a source color plus Mode, this * returns true, and sets (if not NULL) the color and mode appropriately. * If not, this returns false and ignores the parameters. */ - bool asAColorMode(SkColor* color, SkBlendMode* mode) const { - return this->onAsAColorMode(color, mode); - } + bool asAColorMode(SkColor* color, SkBlendMode* mode) const; /** If the filter can be represented by a 5x4 matrix, this * returns true, and sets the matrix appropriately. * If not, this returns false and ignores the parameter. */ - bool asAColorMatrix(float matrix[20]) const { - return this->onAsAColorMatrix(matrix); - } - - bool appendStages(const SkStageRec& rec, bool shaderIsOpaque) const; - - skvm::Color program(skvm::Builder*, skvm::Color, - SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const; + bool asAColorMatrix(float matrix[20]) const; + // deprecated, use isAlphaUnchanged() enum Flags { - /** If set the filter methods will not change the alpha channel of the colors. - */ kAlphaUnchanged_Flag = 1 << 0, }; + uint32_t getFlags() const; + - /** Returns the flags for this filter. Override in subclasses to return custom flags. - */ - virtual uint32_t getFlags() const { return 0; } + // Returns true if the filter is guaranteed to never change the alpha of a color it filters. + bool isAlphaUnchanged() const; SkColor filterColor(SkColor) const; @@ -92,52 +66,13 @@ class SK_API SkColorFilter : public SkFlattenable { */ sk_sp makeComposed(sk_sp inner) const; -#if SK_SUPPORT_GPU - /** - * A subclass may implement this factory function to work with the GPU backend. It returns - * a GrFragmentProcessor that implemets the color filter in GPU shader code. - * - * The fragment processor receives a premultiplied input color and produces a premultiplied - * output color. - * - * A null return indicates that the color filter isn't implemented for the GPU backend. - */ - virtual std::unique_ptr asFragmentProcessor( - GrRecordingContext*, const GrColorInfo& dstColorInfo) const; -#endif - - bool affectsTransparentBlack() const { - return this->filterColor(SK_ColorTRANSPARENT) != SK_ColorTRANSPARENT; - } - - static void RegisterFlattenables(); - static SkFlattenable::Type GetFlattenableType() { return kSkColorFilter_Type; } - SkFlattenable::Type getFlattenableType() const override { - return kSkColorFilter_Type; - } - - static sk_sp Deserialize(const void* data, size_t size, - const SkDeserialProcs* procs = nullptr) { - return sk_sp(static_cast( - SkFlattenable::Deserialize( - kSkColorFilter_Type, data, size, procs).release())); - } - -protected: - SkColorFilter() {} - - virtual bool onAsAColorMatrix(float[20]) const; - virtual bool onAsAColorMode(SkColor* color, SkBlendMode* bmode) const; - private: - virtual bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const = 0; - - virtual skvm::Color onProgram(skvm::Builder*, skvm::Color, - SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const = 0; + SkColorFilter() = default; + friend class SkColorFilterBase; typedef SkFlattenable INHERITED; }; diff --git a/include/core/SkDeferredDisplayList.h b/include/core/SkDeferredDisplayList.h index f63d94636dacb..f6985a014eff5 100644 --- a/include/core/SkDeferredDisplayList.h +++ b/include/core/SkDeferredDisplayList.h @@ -15,19 +15,21 @@ class SkDeferredDisplayListPriv; #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/SkTArray.h" #include class GrRenderTask; class GrRenderTargetProxy; struct GrCCPerOpsTaskPaths; +#else +using GrRenderTargetProxy = SkRefCnt; #endif /* * This class contains pre-processed gpu operations that can be replayed into * an SkSurface via SkSurface::draw(SkDeferredDisplayList*). */ -class SkDeferredDisplayList { +class SkDeferredDisplayList : public SkNVRefCnt { public: SK_API ~SkDeferredDisplayList(); @@ -83,6 +85,7 @@ class SkDeferredDisplayList { }; SK_API SkDeferredDisplayList(const SkSurfaceCharacterization& characterization, + sk_sp fTargetProxy, sk_sp); #if SK_SUPPORT_GPU @@ -108,6 +111,7 @@ class SkDeferredDisplayList { SkTArray> fRenderTasks; SkTArray fProgramData; + sk_sp fTargetProxy; sk_sp fLazyProxyData; #endif }; diff --git a/include/core/SkDeferredDisplayListRecorder.h b/include/core/SkDeferredDisplayListRecorder.h index ecb61f851b497..94a8ac5c51dd6 100644 --- a/include/core/SkDeferredDisplayListRecorder.h +++ b/include/core/SkDeferredDisplayListRecorder.h @@ -50,7 +50,7 @@ class SK_API SkDeferredDisplayListRecorder { // Note: ownership of the SkCanvas is not transferred via this call. SkCanvas* getCanvas(); - std::unique_ptr detach(); + sk_sp detach(); using PromiseImageTextureContext = void*; using PromiseImageTextureFulfillProc = @@ -158,6 +158,7 @@ class SK_API SkDeferredDisplayListRecorder { #if SK_SUPPORT_GPU sk_sp fContext; + sk_sp fTargetProxy; sk_sp fLazyProxyData; sk_sp fSurface; #endif diff --git a/include/core/SkFlattenable.h b/include/core/SkFlattenable.h index 2f6928296295f..bb9d70faef6c6 100644 --- a/include/core/SkFlattenable.h +++ b/include/core/SkFlattenable.h @@ -95,12 +95,23 @@ class SK_API SkFlattenable : public SkRefCnt { typedef SkRefCnt INHERITED; }; -#define SK_REGISTER_FLATTENABLE(type) SkFlattenable::Register(#type, type::CreateProc) - -#define SK_FLATTENABLE_HOOKS(type) \ - static sk_sp CreateProc(SkReadBuffer&); \ - friend class SkFlattenable::PrivateInitializer; \ - Factory getFactory() const override { return type::CreateProc; } \ - const char* getTypeName() const override { return #type; } +#if defined(SK_DISABLE_EFFECT_DESERIALIZATION) + #define SK_REGISTER_FLATTENABLE(type) do{}while(false) + + #define SK_FLATTENABLE_HOOKS(type) \ + static sk_sp CreateProc(SkReadBuffer&); \ + friend class SkFlattenable::PrivateInitializer; \ + Factory getFactory() const override { return nullptr; } \ + const char* getTypeName() const override { return #type; } +#else + #define SK_REGISTER_FLATTENABLE(type) \ + SkFlattenable::Register(#type, type::CreateProc) + + #define SK_FLATTENABLE_HOOKS(type) \ + static sk_sp CreateProc(SkReadBuffer&); \ + friend class SkFlattenable::PrivateInitializer; \ + Factory getFactory() const override { return type::CreateProc; } \ + const char* getTypeName() const override { return #type; } +#endif #endif diff --git a/include/core/SkFontMgr.h b/include/core/SkFontMgr.h index 39a6bab36e22a..a2abc9c4c0724 100644 --- a/include/core/SkFontMgr.h +++ b/include/core/SkFontMgr.h @@ -87,8 +87,6 @@ class SK_API SkFontMgr : public SkRefCnt { const char* bcp47[], int bcp47Count, SkUnichar character) const; - SkTypeface* matchFaceStyle(const SkTypeface*, const SkFontStyle&) const; - /** * Create a typeface for the specified data and TTC index (pass 0 for none) * or NULL if the data is not recognized. The caller must call unref() on @@ -146,7 +144,7 @@ class SK_API SkFontMgr : public SkRefCnt { virtual sk_sp onMakeFromStreamIndex(std::unique_ptr, int ttcIndex) const = 0; virtual sk_sp onMakeFromStreamArgs(std::unique_ptr, - const SkFontArguments&) const; + const SkFontArguments&) const = 0; virtual sk_sp onMakeFromFontData(std::unique_ptr) const; virtual sk_sp onMakeFromFile(const char path[], int ttcIndex) const = 0; diff --git a/include/core/SkImage.h b/include/core/SkImage.h index 14ab044665bb0..341ed0283c8c9 100644 --- a/include/core/SkImage.h +++ b/include/core/SkImage.h @@ -493,16 +493,21 @@ class SK_API SkImage : public SkRefCnt { /** Creates an SkImage by storing the specified YUVA planes into an image, to be rendered via multitexturing. - @param context GPU context - @param yuvColorSpace How the YUV values are converted to RGB - @param yuvaTextures array of (up to four) YUVA textures on GPU which contain the, - possibly interleaved, YUVA planes - @param yuvaIndices array indicating which texture in yuvaTextures, and channel - in that texture, maps to each component of YUVA. - @param imageSize size of the resulting image - @param imageOrigin origin of the resulting image. - @param imageColorSpace range of colors of the resulting image; may be nullptr - @return created SkImage, or nullptr + When all the provided backend textures can be released 'textureReleaseProc' will be called + with 'releaseContext'. It will be called even if this method fails. + + @param context GPU context + @param yuvColorSpace How the YUV values are converted to RGB + @param yuvaTextures array of (up to four) YUVA textures on GPU which contain the, + possibly interleaved, YUVA planes + @param yuvaIndices array indicating which texture in yuvaTextures, and channel + in that texture, maps to each component of YUVA. + @param imageSize size of the resulting image + @param imageOrigin origin of the resulting image. + @param imageColorSpace range of colors of the resulting image; may be nullptr + @param textureReleaseProc called when the backend textures can be released + @param releaseContext state passed to textureReleaseProc + @return created SkImage, or nullptr */ static sk_sp MakeFromYUVATextures(GrContext* context, SkYUVColorSpace yuvColorSpace, @@ -510,7 +515,9 @@ class SK_API SkImage : public SkRefCnt { const SkYUVAIndex yuvaIndices[4], SkISize imageSize, GrSurfaceOrigin imageOrigin, - sk_sp imageColorSpace = nullptr); + sk_sp imageColorSpace = nullptr, + TextureReleaseProc textureReleaseProc = nullptr, + ReleaseContext releaseContext = nullptr); /** Creates SkImage from pixmap array representing YUVA data. SkImage is uploaded to GPU back-end using context. @@ -767,6 +774,9 @@ class SK_API SkImage : public SkRefCnt { SkTileMode rules to fill drawn area outside SkImage. localMatrix permits transforming SkImage before SkCanvas matrix is applied. + Note: since no filter-quality is specified, it will be determined at draw time using + the paint. + @param tmx tiling in the x direction @param tmy tiling in the y direction @param localMatrix SkImage transformation, or nullptr @@ -778,6 +788,9 @@ class SK_API SkImage : public SkRefCnt { return this->makeShader(tmx, tmy, &localMatrix); } + sk_sp makeShader(SkTileMode tmx, SkTileMode tmy, const SkMatrix* localMatrix, + SkFilterQuality) const; + /** Creates SkShader from SkImage. SkShader dimensions are taken from SkImage. SkShader uses SkShader::kClamp_TileMode to fill drawn area outside SkImage. localMatrix permits transforming SkImage before SkCanvas matrix is applied. @@ -833,22 +846,21 @@ class SK_API SkImage : public SkRefCnt { have the same context ID as the context backing the image then this is a no-op. If the image was not used in any non-culled draws recorded on the passed GrContext then - this is a no-op unless the GrFlushInfo contains semaphores, a finish proc, or uses - kSyncCpu_GrFlushFlag. Those are respected even when the image has not been used. + this is a no-op unless the GrFlushInfo contains semaphores or a finish proc. Those are + respected even when the image has not been used. @param context the context on which to flush pending usages of the image. @param info flush options */ GrSemaphoresSubmitted flush(GrContext* context, const GrFlushInfo& flushInfo); + void flush(GrContext* context) { this->flush(context, {}); } + /** Version of flush() that uses a default GrFlushInfo. Also submits the flushed work to the GPU. */ void flushAndSubmit(GrContext*); - /** Deprecated. */ - void flush(GrContext* context) { this->flushAndSubmit(context); } - /** Retrieves the back-end texture. If SkImage has no back-end texture, an invalid object is returned. Call GrBackendTexture::isValid to determine if the result is valid. @@ -946,6 +958,108 @@ class SK_API SkImage : public SkRefCnt { bool readPixels(const SkPixmap& dst, int srcX, int srcY, CachingHint cachingHint = kAllow_CachingHint) const; + /** The result from asyncRescaleAndReadPixels() or asyncRescaleAndReadPixelsYUV420(). */ + class AsyncReadResult { + public: + AsyncReadResult(const AsyncReadResult&) = delete; + AsyncReadResult(AsyncReadResult&&) = delete; + AsyncReadResult& operator=(const AsyncReadResult&) = delete; + AsyncReadResult& operator=(AsyncReadResult&&) = delete; + + virtual ~AsyncReadResult() = default; + virtual int count() const = 0; + virtual const void* data(int i) const = 0; + virtual size_t rowBytes(int i) const = 0; + + protected: + AsyncReadResult() = default; + }; + + /** Client-provided context that is passed to client-provided ReadPixelsContext. */ + using ReadPixelsContext = void*; + + /** Client-provided callback to asyncRescaleAndReadPixels() or + asyncRescaleAndReadPixelsYUV420() that is called when read result is ready or on failure. + */ + using ReadPixelsCallback = void(ReadPixelsContext, std::unique_ptr); + + enum class RescaleGamma : bool { kSrc, kLinear }; + + /** Makes image pixel data available to caller, possibly asynchronously. It can also rescale + the image pixels. + + Currently asynchronous reads are only supported on the GPU backend and only when the + underlying 3D API supports transfer buffers and CPU/GPU synchronization primitives. In all + other cases this operates synchronously. + + Data is read from the source sub-rectangle, is optionally converted to a linear gamma, is + rescaled to the size indicated by 'info', is then converted to the color space, color type, + and alpha type of 'info'. A 'srcRect' that is not contained by the bounds of the image + causes failure. + + When the pixel data is ready the caller's ReadPixelsCallback is called with a + AsyncReadResult containing pixel data in the requested color type, alpha type, and color + space. The AsyncReadResult will have count() == 1. Upon failure the callback is called with + nullptr for AsyncReadResult. For a GPU image this flushes work but a submit must occur to + guarantee a finite time before the callback is called. + + The data is valid for the lifetime of AsyncReadResult with the exception that if the SkImage + is GPU-backed the data is immediately invalidated if the GrContext is abandoned or + destroyed. + + @param info info of the requested pixels + @param srcRect subrectangle of image to read + @param rescaleGamma controls whether rescaling is done in the image's gamma or whether + the source data is transformed to a linear gamma before rescaling. + @param rescaleQuality controls the quality (and cost) of the rescaling + @param callback function to call with result of the read + @param context passed to callback + */ + void asyncRescaleAndReadPixels(const SkImageInfo& info, + const SkIRect& srcRect, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context); + + /** + Similar to asyncRescaleAndReadPixels but performs an additional conversion to YUV. The + RGB->YUV conversion is controlled by 'yuvColorSpace'. The YUV data is returned as three + planes ordered y, u, v. The u and v planes are half the width and height of the resized + rectangle. The y, u, and v values are single bytes. Currently this fails if 'dstSize' + width and height are not even. A 'srcRect' that is not contained by the bounds of the + image causes failure. + + When the pixel data is ready the caller's ReadPixelsCallback is called with a + AsyncReadResult containing the planar data. The AsyncReadResult will have count() == 3. + Upon failure the callback is called with nullptr for AsyncReadResult. For a GPU image this + flushes work but a submit must occur to guarantee a finite time before the callback is + called. + + The data is valid for the lifetime of AsyncReadResult with the exception that if the SkImage + is GPU-backed the data is immediately invalidated if the GrContext is abandoned or + destroyed. + + @param yuvColorSpace The transformation from RGB to YUV. Applied to the resized image + after it is converted to dstColorSpace. + @param dstColorSpace The color space to convert the resized image to, after rescaling. + @param srcRect The portion of the image to rescale and convert to YUV planes. + @param dstSize The size to rescale srcRect to + @param rescaleGamma controls whether rescaling is done in the image's gamma or whether + the source data is transformed to a linear gamma before rescaling. + @param rescaleQuality controls the quality (and cost) of the rescaling + @param callback function to call with the planar read result + @param context passed to callback + */ + void asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, + sk_sp dstColorSpace, + const SkIRect& srcRect, + const SkISize& dstSize, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context); + /** Copies SkImage to dst, scaling pixels to fit dst.width() and dst.height(), and converting pixels to match dst.colorType() and dst.alphaType(). Returns true if pixels are copied. Returns false if dst.addr() is nullptr, or dst.rowBytes() is diff --git a/include/core/SkM44.h b/include/core/SkM44.h index 63b3ac140bee6..0a6d48168bb48 100644 --- a/include/core/SkM44.h +++ b/include/core/SkM44.h @@ -28,11 +28,13 @@ struct SkV2 { SkV2 operator*(SkV2 v) const { return {x*v.x, y*v.y}; } friend SkV2 operator*(SkV2 v, SkScalar s) { return {v.x*s, v.y*s}; } friend SkV2 operator*(SkScalar s, SkV2 v) { return {v.x*s, v.y*s}; } + friend SkV2 operator/(SkV2 v, SkScalar s) { return {v.x/s, v.y/s}; } void operator+=(SkV2 v) { *this = *this + v; } void operator-=(SkV2 v) { *this = *this - v; } void operator*=(SkV2 v) { *this = *this * v; } void operator*=(SkScalar s) { *this = *this * s; } + void operator/=(SkScalar s) { *this = *this / s; } SkScalar lengthSquared() const { return Dot(*this, *this); } SkScalar length() const { return SkScalarSqrt(this->lengthSquared()); } diff --git a/include/core/SkMatrix.h b/include/core/SkMatrix.h index 524070a742a5e..f54bb557cdca4 100644 --- a/include/core/SkMatrix.h +++ b/include/core/SkMatrix.h @@ -1891,7 +1891,6 @@ class SK_API SkMatrix { friend class SkPerspIter; friend class SkMatrixPriv; - friend class SkReader32; friend class SerializationTest; }; SK_END_REQUIRE_DENSE diff --git a/include/core/SkMilestone.h b/include/core/SkMilestone.h index 1cc0de2620331..267b8606d40f0 100644 --- a/include/core/SkMilestone.h +++ b/include/core/SkMilestone.h @@ -5,5 +5,5 @@ * found in the LICENSE file. */ #ifndef SK_MILESTONE -#define SK_MILESTONE 85 +#define SK_MILESTONE 86 #endif diff --git a/include/core/SkPath.h b/include/core/SkPath.h index 8331372915279..b2bf355df26ec 100644 --- a/include/core/SkPath.h +++ b/include/core/SkPath.h @@ -40,6 +40,29 @@ class SkWStream; */ class SK_API SkPath { public: + /** + * Create a new path with the specified segments. + * + * The points and weights arrays are read in order, based on the sequence of verbs. + * + * Move 1 point + * Line 1 point + * Quad 2 points + * Conic 2 points and 1 weight + * Cubic 3 points + * Close 0 points + * + * If an illegal sequence of verbs is encountered, or the specified number of points + * or weights is not sufficient given the verbs, an empty Path is returned. + * + * A legal sequence of verbs consists of any number of Contours. A contour always begins + * with a Move verb, followed by 0 or more segments: Line, Quad, Conic, Cubic, followed + * by an optional Close. + */ + static SkPath Make(const SkPoint[], int pointCount, + const uint8_t[], int verbCount, + const SkScalar[], int conicWeightCount, + SkPathFillType, bool isVolatile = false); /** Constructs an empty SkPath. By default, SkPath has no verbs, no SkPoint, and no weights. FillType is set to kWinding. @@ -1759,6 +1782,8 @@ class SK_API SkPath { bool isValid() const { return this->isValidImpl() && fPathRef->isValid(); } private: + SkPath(sk_sp, SkPathFillType, bool isVolatile); + sk_sp fPathRef; int fLastMoveToIndex; mutable std::atomic fConvexity; // SkPathConvexityType @@ -1843,6 +1868,7 @@ class SK_API SkPath { friend class SkAutoPathBoundsUpdate; friend class SkAutoDisableOvalCheck; friend class SkAutoDisableDirectionCheck; + friend class SkPathBuilder; friend class SkPathEdgeIter; friend class SkPathWriter; friend class SkOpBuilder; diff --git a/include/core/SkPathBuilder.h b/include/core/SkPathBuilder.h new file mode 100644 index 0000000000000..6e911289aa3ea --- /dev/null +++ b/include/core/SkPathBuilder.h @@ -0,0 +1,96 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkPathBuilder_DEFINED +#define SkPathBuilder_DEFINED + +#include "include/core/SkMatrix.h" +#include "include/core/SkPath.h" +#include "include/core/SkPathTypes.h" +#include "include/private/SkTDArray.h" + +class SkPathBuilder { +public: + SkPathBuilder(); + ~SkPathBuilder(); + + SkPath snapshot(); // the builder is unchanged after returning this path + SkPath detach(); // the builder is reset to empty after returning this path + + void setFillType(SkPathFillType ft) { fFillType = ft; } + void setIsVolatile(bool isVolatile) { fIsVolatile = isVolatile; } + + SkPathBuilder& reset(); + + SkPathBuilder& moveTo(SkPoint pt); + SkPathBuilder& lineTo(SkPoint pt); + SkPathBuilder& quadTo(SkPoint pt1, SkPoint pt2); + SkPathBuilder& conicTo(SkPoint pt1, SkPoint pt2, SkScalar w); + SkPathBuilder& cubicTo(SkPoint pt1, SkPoint pt2, SkPoint pt3); + SkPathBuilder& close(); + + SkPathBuilder& moveTo(SkScalar x, SkScalar y) { return this->moveTo(SkPoint::Make(x, y)); } + SkPathBuilder& lineTo(SkScalar x, SkScalar y) { return this->lineTo(SkPoint::Make(x, y)); } + SkPathBuilder& quadTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2) { + return this->quadTo(SkPoint::Make(x1, y1), SkPoint::Make(x2, y2)); + } + SkPathBuilder& quadTo(const SkPoint pts[2]) { return this->quadTo(pts[0], pts[1]); } + SkPathBuilder& conicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar w) { + return this->conicTo(SkPoint::Make(x1, y1), SkPoint::Make(x2, y2), w); + } + SkPathBuilder& conicTo(const SkPoint pts[2], SkScalar w) { + return this->conicTo(pts[0], pts[1], w); + } + SkPathBuilder& cubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2, SkScalar x3, SkScalar y3) { + return this->cubicTo(SkPoint::Make(x1, y1), SkPoint::Make(x2, y2), SkPoint::Make(x3, y3)); + } + SkPathBuilder& cubicTo(const SkPoint pts[3]) { + return this->cubicTo(pts[0], pts[1], pts[2]); + } + + SkPathBuilder& addRect(const SkRect&, SkPathDirection, unsigned startIndex); + SkPathBuilder& addOval(const SkRect&, SkPathDirection, unsigned startIndex); + SkPathBuilder& addRRect(const SkRRect&, SkPathDirection, unsigned startIndex); + + SkPathBuilder& addRect(const SkRect& rect, SkPathDirection dir = SkPathDirection::kCW) { + return this->addRect(rect, dir, 0); + } + SkPathBuilder& addOval(const SkRect& rect, SkPathDirection dir = SkPathDirection::kCW) { + return this->addOval(rect, dir, 0); + } + SkPathBuilder& addRRect(const SkRRect& rect, SkPathDirection dir = SkPathDirection::kCW) { + return this->addRRect(rect, dir, 0); + } + + void incReserve(int extraPtCount, int extraVerbCount); + void incReserve(int extraPtCount) { + this->incReserve(extraPtCount, extraPtCount); + } + +private: + SkTDArray fPts; + SkTDArray fVerbs; + SkTDArray fConicWeights; + + SkPathFillType fFillType; + bool fIsVolatile; + + unsigned fSegmentMask; + SkPoint fLastMovePoint; + bool fNeedsMoveVerb; + + int countVerbs() const { return fVerbs.count(); } + + void ensureMove() { + if (fNeedsMoveVerb) { + this->moveTo(fLastMovePoint); + } + } +}; + +#endif + diff --git a/include/core/SkString.h b/include/core/SkString.h index 0982e00337410..2d738444edebb 100644 --- a/include/core/SkString.h +++ b/include/core/SkString.h @@ -18,6 +18,7 @@ #include #include #include +#include /* Some helper functions for C strings */ static inline bool SkStrStartsWith(const char string[], const char prefixStr[]) { @@ -128,6 +129,7 @@ class SK_API SkString { SkString(const char text[], size_t len); SkString(const SkString&); SkString(SkString&&); + explicit SkString(const std::string&); ~SkString(); bool isEmpty() const { return 0 == fRec->fLength; } @@ -181,8 +183,10 @@ class SK_API SkString { char& operator[](size_t n) { return this->writable_str()[n]; } void reset(); - /** Destructive resize, does not preserve contents. */ - void resize(size_t len) { this->set(nullptr, len); } + /** String contents are preserved on resize. (For destructive resize, `set(nullptr, length)`.) + * `resize` automatically reserves an extra byte at the end of the buffer for a null terminator. + */ + void resize(size_t len); void set(const SkString& src) { *this = src; } void set(const char text[]); void set(const char text[], size_t len); @@ -219,6 +223,7 @@ class SK_API SkString { void prependScalar(SkScalar value) { this->insertScalar((size_t)-1, value); } void printf(const char format[], ...) SK_PRINTF_LIKE(2, 3); + void printVAList(const char format[], va_list); void appendf(const char format[], ...) SK_PRINTF_LIKE(2, 3); void appendVAList(const char format[], va_list); void prependf(const char format[], ...) SK_PRINTF_LIKE(2, 3); @@ -239,20 +244,18 @@ class SK_API SkString { private: struct Rec { public: - constexpr Rec(uint32_t len, int32_t refCnt) - : fLength(len), fRefCnt(refCnt), fBeginningOfData(0) - { } + constexpr Rec(uint32_t len, int32_t refCnt) : fLength(len), fRefCnt(refCnt) {} static sk_sp Make(const char text[], size_t len); - uint32_t fLength; // logically size_t, but we want it to stay 32bits - mutable std::atomic fRefCnt; - char fBeginningOfData; - char* data() { return &fBeginningOfData; } const char* data() const { return &fBeginningOfData; } - void ref() const; void unref() const; bool unique() const; + + uint32_t fLength; // logically size_t, but we want it to stay 32 bits + mutable std::atomic fRefCnt; + char fBeginningOfData = '\0'; + private: // Ensure the unsized delete is called. void operator delete(void* p) { ::operator delete(p); } diff --git a/include/core/SkSurface.h b/include/core/SkSurface.h index 57521d8088be0..a665bb261ff71 100644 --- a/include/core/SkSurface.h +++ b/include/core/SkSurface.h @@ -28,6 +28,7 @@ class SkPaint; class SkSurfaceCharacterization; class GrBackendRenderTarget; class GrBackendSemaphore; +class GrBackendSurfaceMutableState; class GrBackendTexture; class GrContext; class GrRecordingContext; @@ -530,6 +531,11 @@ class SK_API SkSurface : public SkRefCnt { */ GrContext* getContext(); + /** + * Experimental. SkSurfaces can actually only guarantee a GrRecordingContext. + */ + GrRecordingContext* recordingContext(); + enum BackendHandleAccess { kFlushRead_BackendHandleAccess, //!< back-end object is readable kFlushWrite_BackendHandleAccess, //!< back-end object is writable @@ -768,22 +774,7 @@ class SK_API SkSurface : public SkRefCnt { */ bool readPixels(const SkBitmap& dst, int srcX, int srcY); - /** The result from asyncRescaleAndReadPixels() or asyncRescaleAndReadPixelsYUV420(). */ - class AsyncReadResult { - public: - AsyncReadResult(const AsyncReadResult&) = delete; - AsyncReadResult(AsyncReadResult&&) = delete; - AsyncReadResult& operator=(const AsyncReadResult&) = delete; - AsyncReadResult& operator=(AsyncReadResult&&) = delete; - - virtual ~AsyncReadResult() = default; - virtual int count() const = 0; - virtual const void* data(int i) const = 0; - virtual size_t rowBytes(int i) const = 0; - - protected: - AsyncReadResult() = default; - }; + using AsyncReadResult = SkImage::AsyncReadResult; /** Client-provided context that is passed to client-provided ReadPixelsContext. */ using ReadPixelsContext = void*; @@ -796,7 +787,7 @@ class SK_API SkSurface : public SkRefCnt { /** Controls the gamma that rescaling occurs in for asyncRescaleAndReadPixels() and asyncRescaleAndReadPixelsYUV420(). */ - enum RescaleGamma : bool { kSrc, kLinear }; + using RescaleGamma = SkImage::RescaleGamma; /** Makes surface pixel data available to caller, possibly asynchronously. It can also rescale the surface pixels. @@ -828,9 +819,12 @@ class SK_API SkSurface : public SkRefCnt { @param callback function to call with result of the read @param context passed to callback */ - void asyncRescaleAndReadPixels(const SkImageInfo& info, const SkIRect& srcRect, - RescaleGamma rescaleGamma, SkFilterQuality rescaleQuality, - ReadPixelsCallback callback, ReadPixelsContext context); + void asyncRescaleAndReadPixels(const SkImageInfo& info, + const SkIRect& srcRect, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context); /** Similar to asyncRescaleAndReadPixels but performs an additional conversion to YUV. The @@ -868,7 +862,7 @@ class SK_API SkSurface : public SkRefCnt { RescaleGamma rescaleGamma, SkFilterQuality rescaleQuality, ReadPixelsCallback callback, - ReadPixelsContext); + ReadPixelsContext context); /** Copies SkRect of pixels from the src SkPixmap to the SkSurface. @@ -970,6 +964,51 @@ class SK_API SkSurface : public SkRefCnt { */ GrSemaphoresSubmitted flush(BackendSurfaceAccess access, const GrFlushInfo& info); + /** Issues pending SkSurface commands to the GPU-backed API objects and resolves any SkSurface + MSAA. A call to GrContext::submit is always required to ensure work is actually sent to the + gpu. Some specific API details: + GL: Commands are actually sent to the driver, but glFlush is never called. Thus some + sync objects from the flush will not be valid until a submission occurs. + + Vulkan/Metal/D3D/Dawn: Commands are recorded to the backend APIs corresponding command + buffer or encoder objects. However, these objects are not sent to the gpu until a + submission occurs. + + The GrFlushInfo describes additional options to flush. Please see documentation at + GrFlushInfo for more info. + + If a GrBackendSurfaceMutableState is passed in, at the end of the flush we will transition + the surface to be in the state requested by the GrBackendSurfaceMutableState. If the surface + (or SkImage or GrBackendSurface wrapping the same backend object) is used again after this + flush the state may be changed and no longer match what is requested here. This is often + used if the surface will be used for presenting or external use and the client wants backend + object to be prepped for that use. A finishedProc or semaphore on the GrFlushInfo will also + include the work for any requested state change. + + If the return is GrSemaphoresSubmitted::kYes, only initialized GrBackendSemaphores will be + submitted to the gpu during the next submit call (it is possible Skia failed to create a + subset of the semaphores). The client should not wait on these semaphores until after submit + has been called, but must keep them alive until then. If a submit flag was passed in with + the flush these valid semaphores can we waited on immediately. If this call returns + GrSemaphoresSubmitted::kNo, the GPU backend will not submit any semaphores to be signaled on + the GPU. Thus the client should not have the GPU wait on any of the semaphores passed in + with the GrFlushInfo. Regardless of whether semaphores were submitted to the GPU or not, the + client is still responsible for deleting any initialized semaphores. + Regardleess of semaphore submission the context will still be flushed. It should be + emphasized that a return value of GrSemaphoresSubmitted::kNo does not mean the flush did not + happen. It simply means there were no semaphores submitted to the GPU. A caller should only + take this as a failure if they passed in semaphores to be submitted. + + Pending surface commands are flushed regardless of the return result. + + @param info flush options + @param access optional state change request after flush + */ + GrSemaphoresSubmitted flush(const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState = nullptr); + + void flush() { this->flush({}); } + /** Inserts a list of GPU semaphores that the current GPU-backed API must wait on before executing any more commands on the GPU for this surface. Skia will take ownership of the underlying semaphores and delete them once they have been signaled and waited on. @@ -1007,7 +1046,7 @@ class SK_API SkSurface : public SkRefCnt { example: https://fiddle.skia.org/c/@Surface_draw_2 */ - bool draw(SkDeferredDisplayList* deferredDisplayList); + bool draw(sk_sp deferredDisplayList); protected: SkSurface(int width, int height, const SkSurfaceProps* surfaceProps); diff --git a/include/core/SkTypes.h b/include/core/SkTypes.h index 65a67ebdcb6b2..93eeb548ff1c1 100644 --- a/include/core/SkTypes.h +++ b/include/core/SkTypes.h @@ -279,22 +279,20 @@ # define SK_DUMP_GOOGLE3_STACK() #endif -#ifdef SK_BUILD_FOR_WIN - // Lets visual studio follow error back to source - #define SK_DUMP_LINE_FORMAT(message) \ - SkDebugf("%s(%d): fatal error: \"%s\"\n", __FILE__, __LINE__, message) -#else - #define SK_DUMP_LINE_FORMAT(message) \ - SkDebugf("%s:%d: fatal error: \"%s\"\n", __FILE__, __LINE__, message) -#endif - #ifndef SK_ABORT -# define SK_ABORT(message) \ +# ifdef SK_BUILD_FOR_WIN + // This style lets Visual Studio follow errors back to the source file. +# define SK_DUMP_LINE_FORMAT "%s(%d)" +# else +# define SK_DUMP_LINE_FORMAT "%s:%d" +# endif +# define SK_ABORT(message, ...) \ do { \ - SK_DUMP_LINE_FORMAT(message); \ - SK_DUMP_GOOGLE3_STACK(); \ - sk_abort_no_print(); \ - SkUNREACHABLE; \ + SkDebugf(SK_DUMP_LINE_FORMAT ": fatal error: \"" message "\"\n", \ + __FILE__, __LINE__, ##__VA_ARGS__); \ + SK_DUMP_GOOGLE3_STACK(); \ + sk_abort_no_print(); \ + SkUNREACHABLE; \ } while (false) #endif @@ -450,16 +448,16 @@ SK_API extern void sk_abort_no_print(void); // x - 4; // } #define SkASSERT_RELEASE(cond) \ - static_cast( (cond) ? (void)0 : []{ SK_ABORT("assert(" #cond ")"); }() ) + static_cast( (cond) ? (void)0 : []{ SK_ABORT("assert(%s)", #cond); }() ) #ifdef SK_DEBUG #define SkASSERT(cond) SkASSERT_RELEASE(cond) #define SkASSERTF(cond, fmt, ...) static_cast( (cond) ? (void)0 : [&]{ \ SkDebugf(fmt"\n", __VA_ARGS__); \ - SK_ABORT("assert(" #cond ")"); \ + SK_ABORT("assert(%s)", #cond); \ }() ) - #define SkDEBUGFAIL(message) SK_ABORT(message) - #define SkDEBUGFAILF(fmt, ...) SkASSERTF(false, fmt, ##__VA_ARGS__) + #define SkDEBUGFAIL(message) SK_ABORT("%s", message) + #define SkDEBUGFAILF(fmt, ...) SK_ABORT(fmt, ##__VA_ARGS__) #define SkDEBUGCODE(...) __VA_ARGS__ #define SkDEBUGF(...) SkDebugf(__VA_ARGS__) #define SkAssertResult(cond) SkASSERT(cond) diff --git a/include/docs/SkPDFDocument.h b/include/docs/SkPDFDocument.h index db525b99b7b6b..28b07f5b46734 100644 --- a/include/docs/SkPDFDocument.h +++ b/include/docs/SkPDFDocument.h @@ -88,13 +88,18 @@ class SK_API AttributeList : SkNoncopyable { // and then a value of the proper type according to the spec. void appendInt(const char* owner, const char* name, int value); void appendFloat(const char* owner, const char* name, float value); - void appendString(const char* owner, const char* name, const char* value); + void appendName(const char* owner, const char* attrName, const char* value); + void appendString(const char* owner, const char* attrName, const char* value); void appendFloatArray(const char* owner, const char* name, const std::vector& value); + // Deprecated. void appendStringArray(const char* owner, - const char* name, - const std::vector& value); + const char* attrName, + const std::vector& values); + void appendNodeIdArray(const char* owner, + const char* attrName, + const std::vector& nodeIds); private: friend class ::SkPDFTagTree; @@ -116,10 +121,6 @@ struct StructureElementNode { SkString fAlt; SkString fLang; - // Deprecated. Use fChildVector instead. - StructureElementNode* fChildren = nullptr; - size_t fChildCount = 0; - // Deprecated. Use fTypeString instead. DocumentStructureType fType = DocumentStructureType::kNonStruct; }; diff --git a/include/effects/SkLumaColorFilter.h b/include/effects/SkLumaColorFilter.h index 038461d3d2c90..0d6eacb0ae24e 100644 --- a/include/effects/SkLumaColorFilter.h +++ b/include/effects/SkLumaColorFilter.h @@ -30,30 +30,14 @@ class SkRasterPipeline; * not luminance, a dot-product of linear color channels. So at least * SkLumaColorFilter and feColorMatrix+luminanceToAlpha agree there.) */ - - #include "include/core/SkFlattenable.h" - -class SK_API SkLumaColorFilter : public SkColorFilter { +class SK_API SkLumaColorFilter { public: static sk_sp Make(); -#if SK_SUPPORT_GPU - std::unique_ptr asFragmentProcessor(GrRecordingContext*, - const GrColorInfo&) const override; -#endif - -protected: - void flatten(SkWriteBuffer&) const override; - private: - SK_FLATTENABLE_HOOKS(SkLumaColorFilter) - - SkLumaColorFilter(); - bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override; - skvm::Color onProgram(skvm::Builder*, skvm::Color, - SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const override; + friend class SkFlattenable; - typedef SkColorFilter INHERITED; + static void RegisterFlattenable(); }; #endif diff --git a/include/effects/SkRuntimeEffect.h b/include/effects/SkRuntimeEffect.h index d570de6a01386..ac2233e6727be 100644 --- a/include/effects/SkRuntimeEffect.h +++ b/include/effects/SkRuntimeEffect.h @@ -9,8 +9,11 @@ #define SkRuntimeEffect_DEFINED #include "include/core/SkData.h" +#include "include/core/SkMatrix.h" #include "include/core/SkString.h" +#include "include/private/SkSLSampleUsage.h" +#include #include #if SK_SUPPORT_GPU @@ -20,7 +23,6 @@ class GrShaderCaps; class SkColorFilter; -class SkMatrix; class SkShader; namespace SkSL { @@ -129,20 +131,28 @@ class SK_API SkRuntimeEffect : public SkRefCnt { // Returns index of the named child, or -1 if not found int findChild(const char* name) const; + bool usesSampleCoords() const { return fMainFunctionHasSampleCoords; } + static void RegisterFlattenables(); ~SkRuntimeEffect(); private: - SkRuntimeEffect(SkString sksl, std::unique_ptr baseProgram, - std::vector&& inAndUniformVars, std::vector&& children, - std::vector&& varyings, size_t uniformSize); + SkRuntimeEffect(SkString sksl, + std::unique_ptr baseProgram, + std::vector&& inAndUniformVars, + std::vector&& children, + std::vector&& sampleUsages, + std::vector&& varyings, + size_t uniformSize, + bool mainHasSampleCoords); using SpecializeResult = std::tuple, SkString>; SpecializeResult specialize(SkSL::Program& baseProgram, const void* inputs, const SkSL::SharedCompiler&) const; #if SK_SUPPORT_GPU - friend class GrSkSLFP; // toPipelineStage + friend class GrSkSLFP; // toPipelineStage + friend class GrGLSLSkSLFP; // fSampleUsages // This re-compiles the program from scratch, using the supplied shader caps. // This is necessary to get the correct values of settings. @@ -169,9 +179,11 @@ class SK_API SkRuntimeEffect : public SkRefCnt { std::unique_ptr fBaseProgram; std::vector fInAndUniformVars; std::vector fChildren; + std::vector fSampleUsages; std::vector fVaryings; size_t fUniformSize; + bool fMainFunctionHasSampleCoords; }; /** @@ -218,6 +230,20 @@ struct SkRuntimeShaderBuilder { return *this; } + BuilderInput& operator=(const SkMatrix& val) { + if (!fVar) { + SkDEBUGFAIL("Assigning to missing variable"); + } else if (fVar->sizeInBytes() != 9 * sizeof(float)) { + SkDEBUGFAIL("Incorrect value size"); + } else { + float* data = SkTAddOffset(fOwner->fInputs->writable_data(), fVar->fOffset); + data[0] = val.get(0); data[1] = val.get(3); data[2] = val.get(6); + data[3] = val.get(1); data[4] = val.get(4); data[5] = val.get(7); + data[6] = val.get(2); data[7] = val.get(5); data[8] = val.get(8); + } + return *this; + } + SkRuntimeShaderBuilder* fOwner; const SkRuntimeEffect::Variable* fVar; // nullptr if the variable was not found }; diff --git a/include/gpu/GrBackendSemaphore.h b/include/gpu/GrBackendSemaphore.h index cbeb2e974c9f8..c3e60fb0f963d 100644 --- a/include/gpu/GrBackendSemaphore.h +++ b/include/gpu/GrBackendSemaphore.h @@ -13,6 +13,9 @@ #include "include/gpu/gl/GrGLTypes.h" #include "include/gpu/mtl/GrMtlTypes.h" #include "include/gpu/vk/GrVkTypes.h" +#ifdef SK_DIRECT3D +#include "include/gpu/d3d/GrD3DTypesMinimal.h" +#endif /** * Wrapper class for passing into and receiving data from Ganesh about a backend semaphore object. @@ -23,6 +26,14 @@ class GrBackendSemaphore { // until either initGL or initVulkan are called which will set the appropriate GrBackend. GrBackendSemaphore() : fBackend(GrBackendApi::kOpenGL), fGLSync(0), fIsInitialized(false) {} +#ifdef SK_DIRECT3D + // We only need to specify these if Direct3D is enabled, because it requires special copy + // characteristics. + ~GrBackendSemaphore(); + GrBackendSemaphore(const GrBackendSemaphore&); + GrBackendSemaphore& operator=(const GrBackendSemaphore&); +#endif + void initGL(GrGLsync sync) { fBackend = GrBackendApi::kOpenGL; fGLSync = sync; @@ -52,6 +63,14 @@ class GrBackendSemaphore { #endif } +#ifdef SK_DIRECT3D + void initDirect3D(const GrD3DFenceInfo& info) { + fBackend = GrBackendApi::kDirect3D; + this->assignD3DFenceInfo(info); + fIsInitialized = true; + } +#endif + bool isInitialized() const { return fIsInitialized; } GrGLsync glSync() const { @@ -82,12 +101,23 @@ class GrBackendSemaphore { return fMtlValue; } +#ifdef SK_DIRECT3D + bool getD3DFenceInfo(GrD3DFenceInfo* outInfo) const; +#endif + private: +#ifdef SK_DIRECT3D + void assignD3DFenceInfo(const GrD3DFenceInfo& info); +#endif + GrBackendApi fBackend; union { GrGLsync fGLSync; VkSemaphore fVkSemaphore; GrMTLHandle fMtlEvent; // Expected to be an id +#ifdef SK_DIRECT3D + GrD3DFenceInfo* fD3DFenceInfo; +#endif }; uint64_t fMtlValue; bool fIsInitialized; diff --git a/include/gpu/GrBackendSurfaceMutableState.h b/include/gpu/GrBackendSurfaceMutableState.h index 0e5a5dbd12b7c..6425cb5226038 100644 --- a/include/gpu/GrBackendSurfaceMutableState.h +++ b/include/gpu/GrBackendSurfaceMutableState.h @@ -51,6 +51,7 @@ class GrBackendSurfaceMutableState { private: friend class GrBackendSurfaceMutableStateImpl; + friend class GrVkGpu; union { char fDummy; diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h index fd3ba2d108895..7d673120e8465 100644 --- a/include/gpu/GrContext.h +++ b/include/gpu/GrContext.h @@ -13,7 +13,7 @@ #include "include/core/SkTypes.h" #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContextOptions.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" // We shouldn't need this but currently Android is relying on this being include transitively. #include "include/core/SkUnPreMultiply.h" @@ -36,7 +36,6 @@ class GrResourceProvider; class GrStrikeCache; class GrSurfaceProxy; class GrSwizzle; -class GrTextContext; class GrTextureProxy; struct GrVkBackendContext; @@ -62,7 +61,10 @@ class SK_API GrContext : public GrRecordingContext { /** * The Vulkan context (VkQueue, VkDevice, VkInstance) must be kept alive until the returned - * GrContext is first destroyed or abandoned. + * GrContext is destroyed. This also means that any objects created with this GrContext (e.g. + * SkSurfaces, SkImages, etc.) must also be released as they may hold refs on the GrContext. + * Once all these objects and the GrContext are released, then it is safe to delete the vulkan + * objects. */ static sk_sp MakeVulkan(const GrVkBackendContext&, const GrContextOptions&); static sk_sp MakeVulkan(const GrVkBackendContext&); @@ -134,7 +136,10 @@ class SK_API GrContext : public GrRecordingContext { * API calls may crash. * * For Vulkan, even if the device becomes lost, the VkQueue, VkDevice, or VkInstance used to - * create the GrContext must be alive before calling abandonContext. + * create the GrContext must be kept alive even after abandoning the context. Those objects must + * live for the lifetime of the GrContext object itself. The reason for this is so that + * we can continue to delete any outstanding GrBackendTextures/RenderTargets which must be + * cleaned up even in a device lost state. */ void abandonContext() override; @@ -146,6 +151,23 @@ class SK_API GrContext : public GrRecordingContext { */ bool abandoned() override; + /** + * Checks if the underlying 3D API reported an out-of-memory error. If this returns true it is + * reset and will return false until another out-of-memory error is reported by the 3D API. If + * the context is abandoned then this will report false. + * + * Currently this is implemented for: + * + * OpenGL [ES] - Note that client calls to glGetError() may swallow GL_OUT_OF_MEMORY errors and + * therefore hide the error from Skia. Also, it is not advised to use this in combination with + * enabling GrContextOptions::fSkipGLErrorChecks. That option may prevent GrContext from ever + * checking the GL context for OOM. + * + * Vulkan - Reports true if VK_ERROR_OUT_OF_HOST_MEMORY or VK_ERROR_OUT_OF_DEVICE_MEMORY has + * occurred. + */ + bool oomed(); + /** * This is similar to abandonContext() however the underlying 3D context is not yet lost and * the GrContext will cleanup all allocated resources before returning. After returning it will @@ -312,7 +334,7 @@ class SK_API GrContext : public GrRecordingContext { * GrContext::submit. */ void flushAndSubmit() { - this->flush(GrFlushInfo(), GrPrepareForExternalIORequests()); + this->flush(GrFlushInfo()); this->submit(); } @@ -340,43 +362,9 @@ class SK_API GrContext : public GrRecordingContext { * happen. It simply means there were no semaphores submitted to the GPU. A caller should only * take this as a failure if they passed in semaphores to be submitted. */ - GrSemaphoresSubmitted flush(const GrFlushInfo& info) { - return this->flush(info, GrPrepareForExternalIORequests()); - } + GrSemaphoresSubmitted flush(const GrFlushInfo& info); - /** - * Call to ensure all drawing to the context has been flushed to underlying 3D API specific - * objects. A call to GrContext::submit is always required to ensure work is actually sent to - * the gpu. Some specific API details: - * GL: Commands are actually sent to the driver, but glFlush is never called. Thus some - * sync objects from the flush will not be valid until submit is called. - * - * Vulkan/Metal/D3D/Dawn: Commands are recorded to the backend APIs corresponding command - * buffer or encoder objects. However, these objects are not sent to the gpu until - * submit is called. - * - * Note: The default values for GrFlushInfo will submit the work the gpu. - * - * If the return is GrSemaphoresSubmitted::kYes, only initialized GrBackendSemaphores will be - * submitted to the gpu during the next submit call (it is possible Skia failed to create a - * subset of the semaphores). The client should not wait on these semaphores until after submit - * has been called, and must keep them alive until then. If this call returns - * GrSemaphoresSubmitted::kNo, the GPU backend will not submit any semaphores to be signaled on - * the GPU. Thus the client should not have the GPU wait on any of the semaphores passed in with - * the GrFlushInfo. The client is always responsible for deleting any initialized semaphores. - * Regardleess of semaphore submission the context will still be flushed. It should be - * emphasized that a return value of GrSemaphoresSubmitted::kNo does not mean the flush did not - * happen. It simply means there were no semaphores submitted to the GPU. A caller should only - * take this as a failure if they passed in semaphores to be submitted. - * - * If the GrPrepareForExternalIORequests contains valid gpu backed SkSurfaces or SkImages, Skia - * will put the underlying backend objects into a state that is ready for external uses. See - * declaration of GrPreopareForExternalIORequests for more details. Note that the backend - * objects will not be moved to this state until submit has been called. If subsequent flushes - * are called between this and submit, those objects are no longer guaranteed to be in a state - * that is ready for external use. - */ - GrSemaphoresSubmitted flush(const GrFlushInfo&, const GrPrepareForExternalIORequests&); + void flush() { this->flush({}); } /** * Submit outstanding work to the gpu from all previously un-submitted flushes. The return @@ -482,8 +470,8 @@ class SK_API GrContext : public GrRecordingContext { * If possible, create a backend texture initialized to a particular color. The client should * ensure that the returned backend texture is valid. The client can pass in a finishedProc * to be notified when the data has been uploaded by the gpu and the texture can be deleted. The - * client can assume the upload work has been submitted to the gpu. The finishedProc will always - * get called even if we failed to create the GrBackendTexture. + * client is required to call GrContext::submit to send the upload work to the gpu. The + * finishedProc will always get called even if we failed to create the GrBackendTexture. * For the Vulkan backend the layout of the created VkImage will be: * VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL */ @@ -500,8 +488,8 @@ class SK_API GrContext : public GrRecordingContext { * If possible, create a backend texture initialized to a particular color. The client should * ensure that the returned backend texture is valid. The client can pass in a finishedProc * to be notified when the data has been uploaded by the gpu and the texture can be deleted. The - * client can assume the upload work has been submitted to the gpu. The finishedProc will always - * get called even if we failed to create the GrBackendTexture. + * client is required to call GrContext::submit to send the upload work to the gpu. The + * finishedProc will always get called even if we failed to create the GrBackendTexture. * If successful, the created backend texture will be compatible with the provided * SkColorType. * For the Vulkan backend the layout of the created VkImage will be: @@ -520,9 +508,9 @@ class SK_API GrContext : public GrRecordingContext { * If possible, create a backend texture initialized to a particular color that is * compatible with the provided characterization. The client should ensure that the * returned backend texture is valid. The client can pass in a finishedProc to be notified when - * the data has been uploaded by the gpu and the texture can be deleted. The client can assume - * the upload work has been submitted to the gpu. The finishedProc will always get called even - * if we failed to create the GrBackendTexture. + * the data has been uploaded by the gpu and the texture can be deleted. The client is required + * to call GrContext::submit to send the upload work to the gpu. The finishedProc will always + * get called even if we failed to create the GrBackendTexture. * For the Vulkan backend the layout of the created VkImage will be: * VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL if texturaeble * VK_IMAGE_LAYOUT_UNDEFINED if not textureable @@ -536,11 +524,12 @@ class SK_API GrContext : public GrRecordingContext { * If possible, create a backend texture initialized with the provided pixmap data. The client * should ensure that the returned backend texture is valid. The client can pass in a * finishedProc to be notified when the data has been uploaded by the gpu and the texture can be - * deleted. The client can assume the upload work has been submitted to the gpu. The - * finishedProc will always get called even if we failed to create the GrBackendTexture. + * deleted. The client is required to call GrContext::submit to send the upload work to the gpu. + * The finishedProc will always get called even if we failed to create the GrBackendTexture. * If successful, the created backend texture will be compatible with the provided * pixmap(s). Compatible, in this case, means that the backend format will be the result - * of calling defaultBackendFormat on the base pixmap's colortype. + * of calling defaultBackendFormat on the base pixmap's colortype. The src data can be deleted + * when this call returns. * If numLevels is 1 a non-mipMapped texture will result. If a mipMapped texture is desired * the data for all the mipmap levels must be provided. In the mipmapped case all the * colortypes of the provided pixmaps must be the same. Additionally, all the miplevels @@ -568,8 +557,8 @@ class SK_API GrContext : public GrRecordingContext { * If possible, updates a backend texture to be filled to a particular color. The client should * check the return value to see if the update was successful. The client can pass in a * finishedProc to be notified when the data has been uploaded by the gpu and the texture can be - * deleted. The client can assume the upload work has been submitted to the gpu. The - * finishedProc will always get called even if we failed to update the GrBackendTexture. + * deleted. The client is required to call GrContext::submit to send the upload work to the gpu. + * The finishedProc will always get called even if we failed to update the GrBackendTexture. * For the Vulkan backend after a successful update the layout of the created VkImage will be: * VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL */ @@ -582,10 +571,11 @@ class SK_API GrContext : public GrRecordingContext { * If possible, updates a backend texture filled with the provided pixmap data. The client * should check the return value to see if the update was successful. The client can pass in a * finishedProc to be notified when the data has been uploaded by the gpu and the texture can be - * deleted. The client can assume the upload work has been submitted to the gpu. The - * finishedProc will always get called even if we failed to create the GrBackendTexture. + * deleted. The client is required to call GrContext::submit to send the upload work to the gpu. + * The finishedProc will always get called even if we failed to create the GrBackendTexture. * The backend texture must be compatible with the provided pixmap(s). Compatible, in this case, - * means that the backend format is compatible with the base pixmap's colortype. + * means that the backend format is compatible with the base pixmap's colortype. The src data + * can be deleted when this call returns. * If the backend texture is mip mapped, the data for all the mipmap levels must be provided. * In the mipmapped case all the colortypes of the provided pixmaps must be the same. * Additionally, all the miplevels must be sized correctly (please see @@ -614,8 +604,8 @@ class SK_API GrContext : public GrRecordingContext { *If possible, create a compressed backend texture initialized to a particular color. The * client should ensure that the returned backend texture is valid. The client can pass in a * finishedProc to be notified when the data has been uploaded by the gpu and the texture can be - * deleted. The client can assume the upload work has been submitted to the gpu. The - * finishedProc will always get called even if we failed to create the GrBackendTexture. + * deleted. The client is required to call GrContext::submit to send the upload work to the gpu. + * The finishedProc will always get called even if we failed to create the GrBackendTexture. * For the Vulkan backend the layout of the created VkImage will be: * VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL */ @@ -639,8 +629,8 @@ class SK_API GrContext : public GrRecordingContext { * If possible, create a backend texture initialized with the provided raw data. The client * should ensure that the returned backend texture is valid. The client can pass in a * finishedProc to be notified when the data has been uploaded by the gpu and the texture can be - * deleted. The client can assume the upload work has been submitted to the gpu. The - * finishedProc will always get called even if we failed to create the GrBackendTexture + * deleted. The client is required to call GrContext::submit to send the upload work to the gpu. + * The finishedProc will always get called even if we failed to create the GrBackendTexture * If numLevels is 1 a non-mipMapped texture will result. If a mipMapped texture is desired * the data for all the mipmap levels must be provided. Additionally, all the miplevels * must be sized correctly (please see SkMipMap::ComputeLevelSize and ComputeLevelCount). @@ -663,6 +653,26 @@ class SK_API GrContext : public GrRecordingContext { GrGpuFinishedProc finishedProc = nullptr, GrGpuFinishedContext finishedContext = nullptr); + /** + * Updates the state of the GrBackendTexture/RenderTarget to have the passed in + * GrBackendSurfaceMutableState. All objects that wrap the backend surface (i.e. SkSurfaces and + * SkImages) will also be aware of this state change. This call does not submit the state change + * to the gpu, but requires the client to call GrContext::submit to send it to the GPU. The work + * for this call is ordered linearly with all other calls that require GrContext::submit to be + * called (e.g updateBackendTexture and flush). If finishedProc is not null then it will be + * called with finishedContext after the state transition is known to have occurred on the GPU. + * + * See GrBackendSurfaceMutableState to see what state can be set via this call. + */ + bool setBackendTextureState(const GrBackendTexture&, + const GrBackendSurfaceMutableState&, + GrGpuFinishedProc finishedProc = nullptr, + GrGpuFinishedContext finishedContext = nullptr); + bool setBackendRenderTargetState(const GrBackendRenderTarget&, + const GrBackendSurfaceMutableState&, + GrGpuFinishedProc finishedProc = nullptr, + GrGpuFinishedContext finishedContext = nullptr); + void deleteBackendTexture(GrBackendTexture); // This interface allows clients to pre-compile shaders and populate the runtime program cache. @@ -694,8 +704,6 @@ class SK_API GrContext : public GrRecordingContext { bool init() override; - GrContext* asDirectContext() override { return this; } - virtual GrAtlasManager* onGetAtlasManager() = 0; private: diff --git a/include/gpu/GrContextOptions.h b/include/gpu/GrContextOptions.h index 1d762bf6f103c..2f3d5b92e5e1b 100644 --- a/include/gpu/GrContextOptions.h +++ b/include/gpu/GrContextOptions.h @@ -134,16 +134,20 @@ struct SK_API GrContextOptions { /** * Below this threshold size in device space distance field fonts won't be used. Distance field - * fonts don't support hinting which is more important at smaller sizes. A negative value means - * use the default threshold. + * fonts don't support hinting which is more important at smaller sizes. */ - float fMinDistanceFieldFontSize = -1.f; + float fMinDistanceFieldFontSize = 18; /** - * Above this threshold size in device space glyphs are drawn as individual paths. A negative - * value means use the default threshold. + * Above this threshold size in device space glyphs are drawn as individual paths. */ - float fGlyphsAsPathsFontSize = -1.f; +#if defined(SK_BUILD_FOR_ANDROID) + float fGlyphsAsPathsFontSize = 384; +#elif defined(SK_BUILD_FOR_MAC) + float fGlyphsAsPathsFontSize = 256; +#else + float fGlyphsAsPathsFontSize = 324; +#endif /** * Can the glyph atlas use multiple textures. If allowed, the each texture's size is bound by @@ -257,6 +261,11 @@ struct SK_API GrContextOptions { */ bool fClearAllTextures = false; + /** + * Randomly generate a (false) GL_OUT_OF_MEMORY error + */ + bool fRandomGLOOM = false; + /** * Include or exclude specific GPU path renderers. */ diff --git a/include/gpu/GrContextThreadSafeProxy.h b/include/gpu/GrContextThreadSafeProxy.h index ca4cb313dcd4b..8a92f8dedb87e 100644 --- a/include/gpu/GrContextThreadSafeProxy.h +++ b/include/gpu/GrContextThreadSafeProxy.h @@ -18,6 +18,7 @@ class GrBackendFormat; class GrCaps; class GrContextThreadSafeProxyPriv; +class GrTextBlobCache; class SkSurfaceCharacterization; class SkSurfaceProps; @@ -108,11 +109,12 @@ class SK_API GrContextThreadSafeProxy final : public SkNVRefCnt); - const GrBackendApi fBackend; - const GrContextOptions fOptions; - const uint32_t fContextID; - sk_sp fCaps; - std::atomic fAbandoned{false}; + const GrBackendApi fBackend; + const GrContextOptions fOptions; + const uint32_t fContextID; + sk_sp fCaps; + std::unique_ptr fTextBlobCache; + std::atomic fAbandoned{false}; }; #endif diff --git a/include/gpu/GrDirectContext.h b/include/gpu/GrDirectContext.h new file mode 100644 index 0000000000000..c5489b11c9cb1 --- /dev/null +++ b/include/gpu/GrDirectContext.h @@ -0,0 +1,41 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrDirectContext_DEFINED +#define GrDirectContext_DEFINED + +#include "include/gpu/GrContext.h" + +class GrAtlasManager; + +class GrDirectContext : public GrContext { +public: + GrDirectContext(GrBackendApi backend, const GrContextOptions& options); + + ~GrDirectContext() override; + + void abandonContext() override; + + void releaseResourcesAndAbandonContext() override; + + void freeGpuResources() override; + +protected: + bool init() override; + + GrAtlasManager* onGetAtlasManager() override { return fAtlasManager; } + + GrDirectContext* asDirectContext() override { return this; } + +private: + GrAtlasManager* fAtlasManager; + + typedef GrContext INHERITED; +}; + + +#endif diff --git a/include/private/GrRecordingContext.h b/include/gpu/GrRecordingContext.h similarity index 90% rename from include/private/GrRecordingContext.h rename to include/gpu/GrRecordingContext.h index 945ed3e9e61c6..0e80dd2fd6e90 100644 --- a/include/private/GrRecordingContext.h +++ b/include/gpu/GrRecordingContext.h @@ -34,6 +34,14 @@ class GrRecordingContext : public GrImageContext { return INHERITED::defaultBackendFormat(ct, renderable); } + /** + * Reports whether the GrDirectContext associated with this GrRecordingContext is abandoned. + * When called on a GrDirectContext it may actively check whether the underlying 3D API + * device/context has been disconnected before reporting the status. If so, calling this + * method will transition the GrDirectContext to the abandoned state. + */ + bool abandoned() override { return INHERITED::abandoned(); } + // Provides access to functions that aren't part of the public API. GrRecordingContextPriv priv(); const GrRecordingContextPriv priv() const; @@ -76,13 +84,16 @@ class GrRecordingContext : public GrImageContext { }; GrRecordingContext(sk_sp); - bool init() override; void setupDrawingManager(bool sortOpsTasks, bool reduceOpsTaskSplitting); void abandonContext() override; GrDrawingManager* drawingManager(); + // There is no going back from this method. It should only be called to control the timing + // during abandon or destruction of the context. + void destroyDrawingManager(); + Arenas arenas() { return fArenas.get(); } // This entry point should only be used for DDL creation where we want the ops' lifetime to // match that of the DDL. @@ -173,8 +184,6 @@ class GrRecordingContext : public GrImageContext { std::unique_ptr fDrawingManager; - std::unique_ptr fTextBlobCache; - std::unique_ptr fAuditTrail; #ifdef GR_TEST_UTILS diff --git a/include/gpu/GrTypes.h b/include/gpu/GrTypes.h index be16416f32de6..50de318b0c1b0 100644 --- a/include/gpu/GrTypes.h +++ b/include/gpu/GrTypes.h @@ -225,12 +225,6 @@ enum GrGLBackendState { */ static const uint32_t kAll_GrBackendState = 0xffffffff; -enum GrFlushFlags { - kNone_GrFlushFlags = 0, - // Deprecated: Use syncCpu call on submit instead. - kSyncCpu_GrFlushFlag = 0x1, -}; - typedef void* GrGpuFinishedContext; typedef void (*GrGpuFinishedProc)(GrGpuFinishedContext finishedContext); @@ -273,7 +267,6 @@ typedef void (*GrGpuSubmittedProc)(GrGpuSubmittedContext submittedContext, bool * backend APIs the same in terms of how the submitted procs are treated. */ struct GrFlushInfo { - GrFlushFlags fFlags = kNone_GrFlushFlags; int fNumSemaphores = 0; GrBackendSemaphore* fSignalSemaphores = nullptr; GrGpuFinishedProc fFinishedProc = nullptr; @@ -284,41 +277,11 @@ struct GrFlushInfo { /** * Enum used as return value when flush with semaphores so the client knows whether the valid - semaphores will be submitted on the next GrContext::submit call. + * semaphores will be submitted on the next GrContext::submit call. */ enum class GrSemaphoresSubmitted : bool { kNo = false, kYes = true }; -/** - * Array of SkImages and SkSurfaces which Skia will prepare for external use when passed into a - * flush call on GrContext. All the SkImages and SkSurfaces must be GPU backed. - * - * If fPrepareSurfaceForPresent is not nullptr, then it must be an array the size of fNumSurfaces. - * Each entry in the array corresponds to the SkSurface at the same index in the fSurfaces array. If - * an entry is true, then that surface will be prepared for both external use and present. - * - * Currently this only has an effect if the backend API is Vulkan. In this case, all the underlying - * VkImages associated with the SkImages and SkSurfaces will be transitioned into the VkQueueFamily - * in which they were originally wrapped or created with. This allows a client to wrap a VkImage - * from a queue which is different from the graphics queue and then have Skia transition it back to - * that queue without needing to delete the SkImage or SkSurface. If the an SkSurface is also - * flagged to be prepared for present, then its VkImageLayout will be set to - * VK_IMAGE_LAYOUT_PRESENT_SRC_KHR if the VK_KHR_swapchain extension has been enabled for the - * GrContext and the original queue is not VK_QUEUE_FAMILY_EXTERNAL or VK_QUEUE_FAMILY_FOREIGN_EXT. - * - * If an SkSurface or SkImage is used again, it will be transitioned back to the graphics queue and - * whatever layout is needed for its use. - */ -struct GrPrepareForExternalIORequests { - int fNumImages = 0; - SkImage** fImages = nullptr; - int fNumSurfaces = 0; - SkSurface** fSurfaces = nullptr; - bool* fPrepareSurfaceForPresent = nullptr; - - bool hasRequests() const { return fNumImages || fNumSurfaces; } -}; - #endif diff --git a/include/gpu/d3d/GrD3DTypes.h b/include/gpu/d3d/GrD3DTypes.h index c5bcfff649d95..ba68bae1b3f63 100644 --- a/include/gpu/d3d/GrD3DTypes.h +++ b/include/gpu/d3d/GrD3DTypes.h @@ -198,4 +198,14 @@ struct GrD3DTextureResourceInfo { #endif }; +struct GrD3DFenceInfo { + GrD3DFenceInfo() + : fFence(nullptr) + , fValue(0) { + } + + gr_cp fFence; + uint64_t fValue; // signal value for the fence +}; + #endif diff --git a/include/gpu/d3d/GrD3DTypesMinimal.h b/include/gpu/d3d/GrD3DTypesMinimal.h index 5027d08ce950b..704113e51c303 100644 --- a/include/gpu/d3d/GrD3DTypesMinimal.h +++ b/include/gpu/d3d/GrD3DTypesMinimal.h @@ -19,5 +19,6 @@ struct ID3D12Resource; typedef int GrD3DResourceStateEnum; struct GrD3DTextureResourceInfo; +struct GrD3DFenceInfo; #endif diff --git a/include/gpu/gl/GrGLInterface.h b/include/gpu/gl/GrGLInterface.h index 17655bdbedbb1..c571314cae47a 100644 --- a/include/gpu/gl/GrGLInterface.h +++ b/include/gpu/gl/GrGLInterface.h @@ -49,6 +49,13 @@ struct SK_API GrGLInterface : public SkRefCnt { private: typedef SkRefCnt INHERITED; +#if GR_GL_CHECK_ERROR + // This is here to avoid having our debug code that checks for a GL error after most GL calls + // accidentally swallow an OOM that should be reported. + mutable bool fOOMed = false; + bool fSuppressErrorLogging = false; +#endif + public: GrGLInterface(); @@ -57,6 +64,19 @@ struct SK_API GrGLInterface : public SkRefCnt { // extensions. bool validate() const; +#if GR_GL_CHECK_ERROR + GrGLenum checkError(const char* location, const char* call) const; + bool checkAndResetOOMed() const; + void suppressErrorLogging(); +#endif + +#if GR_TEST_UTILS + GrGLInterface(const GrGLInterface& that) + : fStandard(that.fStandard) + , fExtensions(that.fExtensions) + , fFunctions(that.fFunctions) {} +#endif + // Indicates the type of GL implementation union { GrGLStandard fStandard; diff --git a/include/gpu/mock/GrMockTypes.h b/include/gpu/mock/GrMockTypes.h index b4c55c81d5b53..897a83105ebea 100644 --- a/include/gpu/mock/GrMockTypes.h +++ b/include/gpu/mock/GrMockTypes.h @@ -110,12 +110,12 @@ struct GrMockOptions { // GrCaps options. bool fMipMapSupport = false; bool fDrawInstancedSupport = false; - bool fTessellationSupport = false; bool fHalfFloatVertexAttributeSupport = false; uint32_t fMapBufferFlags = 0; int fMaxTextureSize = 2048; int fMaxRenderTargetSize = 2048; int fMaxVertexAttributes = 16; + int fMaxTessellationSegments = 0; ConfigOptions fConfigOptions[kGrColorTypeCnt]; ConfigOptions fCompressedOptions[SkImage::kCompressionTypeCount]; diff --git a/include/gpu/vk/GrVkMemoryAllocator.h b/include/gpu/vk/GrVkMemoryAllocator.h index 5102496b83193..b25d5458d9068 100644 --- a/include/gpu/vk/GrVkMemoryAllocator.h +++ b/include/gpu/vk/GrVkMemoryAllocator.h @@ -50,11 +50,43 @@ class GrVkMemoryAllocator : public SkRefCnt { kGpuWritesCpuReads, }; - virtual bool allocateMemoryForImage(VkImage image, AllocationPropertyFlags flags, - GrVkBackendMemory*) = 0; + // DEPRECATED: Use and implement allocateImageMemory instead + virtual bool allocateMemoryForImage(VkImage, AllocationPropertyFlags, GrVkBackendMemory*) { + // The default implementation here is so clients can delete this virtual as the switch to + // the new one which returns a VkResult. + return false; + } + + virtual VkResult allocateImageMemory(VkImage image, AllocationPropertyFlags flags, + GrVkBackendMemory* memory) { + bool result = this->allocateMemoryForImage(image, flags, memory); + // VK_ERROR_INITIALIZATION_FAILED is a bogus result to return from this function, but it is + // just something to return that is not VK_SUCCESS and can't be interpreted by a caller to + // mean something specific happened like device lost or oom. This will be removed once we + // update clients to implement this virtual. + return result ? VK_SUCCESS : VK_ERROR_INITIALIZATION_FAILED; + } + + // DEPRECATED: Use and implement allocateBufferMemory instead + virtual bool allocateMemoryForBuffer(VkBuffer, BufferUsage, AllocationPropertyFlags, + GrVkBackendMemory*) { + // The default implementation here is so clients can delete this virtual as the switch to + // the new one which returns a VkResult. + return false; + } + + virtual VkResult allocateBufferMemory(VkBuffer buffer, + BufferUsage usage, + AllocationPropertyFlags flags, + GrVkBackendMemory* memory) { + bool result = this->allocateMemoryForBuffer(buffer, usage, flags, memory); + // VK_ERROR_INITIALIZATION_FAILED is a bogus result to return from this function, but it is + // just something to return that is not VK_SUCCESS and can't be interpreted by a caller to + // mean something specific happened like device lost or oom. This will be removed once we + // update clients to implement this virtual. + return result ? VK_SUCCESS : VK_ERROR_INITIALIZATION_FAILED; + } - virtual bool allocateMemoryForBuffer(VkBuffer buffer, BufferUsage usage, - AllocationPropertyFlags flags, GrVkBackendMemory*) = 0; // Fills out the passed in GrVkAlloc struct for the passed in GrVkBackendMemory. virtual void getAllocInfo(const GrVkBackendMemory&, GrVkAlloc*) const = 0; @@ -62,7 +94,15 @@ class GrVkMemoryAllocator : public SkRefCnt { // Maps the entire allocation and returns a pointer to the start of the allocation. The // implementation may map more memory than just the allocation, but the returned pointer must // point at the start of the memory for the requested allocation. - virtual void* mapMemory(const GrVkBackendMemory&) = 0; + virtual void* mapMemory(const GrVkBackendMemory&) { return nullptr; } + virtual VkResult mapMemory(const GrVkBackendMemory& memory, void** data) { + *data = this->mapMemory(memory); + // VK_ERROR_INITIALIZATION_FAILED is a bogus result to return from this function, but it is + // just something to return that is not VK_SUCCESS and can't be interpreted by a caller to + // mean something specific happened like device lost or oom. This will be removed once we + // update clients to implement this virtual. + return *data ? VK_SUCCESS : VK_ERROR_INITIALIZATION_FAILED; + } virtual void unmapMemory(const GrVkBackendMemory&) = 0; // The following two calls are used for managing non-coherent memory. The offset is relative to @@ -70,10 +110,18 @@ class GrVkMemoryAllocator : public SkRefCnt { // must make sure that the offset + size passed in is less that or equal to the allocation size. // It is the responsibility of the implementation to make sure all alignment requirements are // followed. The client should not have to deal with any sort of alignment issues. - virtual void flushMappedMemory(const GrVkBackendMemory&, VkDeviceSize offset, - VkDeviceSize size) = 0; - virtual void invalidateMappedMemory(const GrVkBackendMemory&, VkDeviceSize offset, - VkDeviceSize size)= 0; + virtual void flushMappedMemory(const GrVkBackendMemory&, VkDeviceSize, VkDeviceSize) {} + virtual VkResult flushMemory(const GrVkBackendMemory& memory, VkDeviceSize offset, + VkDeviceSize size) { + this->flushMappedMemory(memory, offset, size); + return VK_SUCCESS; + } + virtual void invalidateMappedMemory(const GrVkBackendMemory&, VkDeviceSize, VkDeviceSize) {} + virtual VkResult invalidateMemory(const GrVkBackendMemory& memory, VkDeviceSize offset, + VkDeviceSize size) { + this->invalidateMappedMemory(memory, offset, size); + return VK_SUCCESS; + } virtual void freeMemory(const GrVkBackendMemory&) = 0; diff --git a/include/ports/SkFontMgr_indirect.h b/include/ports/SkFontMgr_indirect.h index 4cdd445afb1d1..7a53d66c367ae 100644 --- a/include/ports/SkFontMgr_indirect.h +++ b/include/ports/SkFontMgr_indirect.h @@ -51,6 +51,8 @@ class SK_API SkFontMgr_Indirect : public SkFontMgr { const SkFontStyle& fontStyle) const override; sk_sp onMakeFromStreamIndex(std::unique_ptr, int ttcIndex) const override; + sk_sp onMakeFromStreamArgs(std::unique_ptr stream, + const SkFontArguments& args) const override; sk_sp onMakeFromFile(const char path[], int ttcIndex) const override; sk_sp onMakeFromData(sk_sp, int ttcIndex) const override; sk_sp onLegacyMakeTypeface(const char familyName[], SkFontStyle) const override; diff --git a/include/ports/SkFontMgr_mac_ct.h b/include/ports/SkFontMgr_mac_ct.h new file mode 100644 index 0000000000000..45cba65b5da3c --- /dev/null +++ b/include/ports/SkFontMgr_mac_ct.h @@ -0,0 +1,27 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkFontMgr_mac_ct_DEFINED +#define SkFontMgr_mac_ct_DEFINED + +#include "include/core/SkRefCnt.h" +#include "include/core/SkTypes.h" + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#endif + +class SkFontMgr; + +/** Create a font manager for CoreText. If the collection is nullptr the system default will be used. */ +SK_API extern sk_sp SkFontMgr_New_CoreText(CTFontCollectionRef); + +#endif // SkFontMgr_mac_ct_DEFINED diff --git a/include/private/GrContext_Base.h b/include/private/GrContext_Base.h index 326c9107724e5..42d8f710ef0de 100644 --- a/include/private/GrContext_Base.h +++ b/include/private/GrContext_Base.h @@ -15,8 +15,8 @@ class GrBaseContextPriv; class GrCaps; -class GrContext; class GrContextThreadSafeProxy; +class GrDirectContext; class GrImageContext; class GrRecordingContext; @@ -24,6 +24,11 @@ class GrContext_Base : public SkRefCnt { public: virtual ~GrContext_Base(); + /* + * Safely downcast to a GrDirectContext. + */ + virtual GrDirectContext* asDirectContext() { return nullptr; } + /* * The 3D API backing this context */ @@ -77,7 +82,6 @@ class GrContext_Base : public SkRefCnt { virtual GrImageContext* asImageContext() { return nullptr; } virtual GrRecordingContext* asRecordingContext() { return nullptr; } - virtual GrContext* asDirectContext() { return nullptr; } sk_sp fThreadSafeProxy; diff --git a/include/private/GrSharedEnums.h b/include/private/GrSharedEnums.h index d745b70bd4369..cdb0f80b14d29 100644 --- a/include/private/GrSharedEnums.h +++ b/include/private/GrSharedEnums.h @@ -15,17 +15,15 @@ /** * We have coverage effects that clip rendering to the edge of some geometric primitive. * This enum specifies how that clipping is performed. Not all factories that take a - * GrProcessorEdgeType will succeed with all values and it is up to the caller to check for - * a NULL return. + * GrProcessorEdgeType will succeed with all values and it is up to the caller to verify success. */ enum class GrClipEdgeType { kFillBW, kFillAA, kInverseFillBW, kInverseFillAA, - kHairlineAA, - kLast = kHairlineAA + kLast = kInverseFillAA }; enum class PMConversion { diff --git a/include/private/GrTypesPriv.h b/include/private/GrTypesPriv.h index 644c3ae9e5345..28114fdea1035 100644 --- a/include/private/GrTypesPriv.h +++ b/include/private/GrTypesPriv.h @@ -121,18 +121,16 @@ static const int kMaskFormatCount = kLast_GrMaskFormat + 1; /** * Return the number of bytes-per-pixel for the specified mask format. */ -static inline int GrMaskFormatBytesPerPixel(GrMaskFormat format) { +inline constexpr int GrMaskFormatBytesPerPixel(GrMaskFormat format) { SkASSERT(format < kMaskFormatCount); // kA8 (0) -> 1 // kA565 (1) -> 2 // kARGB (2) -> 4 - static const int sBytesPerPixel[] = {1, 2, 4}; - static_assert(SK_ARRAY_COUNT(sBytesPerPixel) == kMaskFormatCount, "array_size_mismatch"); static_assert(kA8_GrMaskFormat == 0, "enum_order_dependency"); static_assert(kA565_GrMaskFormat == 1, "enum_order_dependency"); static_assert(kARGB_GrMaskFormat == 2, "enum_order_dependency"); - return sBytesPerPixel[(int)format]; + return SkTo(1u << format); } /** Ownership rules for external GPU resources imported into Skia. */ @@ -657,10 +655,8 @@ static inline GrClipEdgeType GrInvertProcessorEdgeType(const GrClipEdgeType edge return GrClipEdgeType::kFillBW; case GrClipEdgeType::kInverseFillAA: return GrClipEdgeType::kFillAA; - case GrClipEdgeType::kHairlineAA: - SK_ABORT("Hairline fill isn't invertible."); } - return GrClipEdgeType::kFillAA; // suppress warning. + SkUNREACHABLE; } /** @@ -832,6 +828,8 @@ enum class GrColorType { kR_16, kR_F16, kGray_F16, + kBGRA_4444, + kARGB_4444, kLast = kGray_F16 }; @@ -869,6 +867,8 @@ static constexpr SkColorType GrColorTypeToSkColorType(GrColorType ct) { case GrColorType::kR_16: return kUnknown_SkColorType; case GrColorType::kR_F16: return kUnknown_SkColorType; case GrColorType::kGray_F16: return kUnknown_SkColorType; + case GrColorType::kARGB_4444: return kUnknown_SkColorType; + case GrColorType::kBGRA_4444: return kUnknown_SkColorType; } SkUNREACHABLE; } @@ -936,6 +936,8 @@ static constexpr uint32_t GrColorTypeChannelFlags(GrColorType ct) { case GrColorType::kR_16: return kRed_SkColorChannelFlag; case GrColorType::kR_F16: return kRed_SkColorChannelFlag; case GrColorType::kGray_F16: return kGray_SkColorChannelFlag; + case GrColorType::kARGB_4444: return kRGBA_SkColorChannelFlags; + case GrColorType::kBGRA_4444: return kRGBA_SkColorChannelFlags; } SkUNREACHABLE; } @@ -1087,6 +1089,10 @@ static constexpr GrColorTypeDesc GrGetColorTypeDesc(GrColorType ct) { return GrColorTypeDesc::MakeR(16, GrColorTypeEncoding::kFloat); case GrColorType::kGray_F16: return GrColorTypeDesc::MakeGray(16, GrColorTypeEncoding::kFloat); + case GrColorType::kARGB_4444: + return GrColorTypeDesc::MakeRGBA(4, GrColorTypeEncoding::kUnorm); + case GrColorType::kBGRA_4444: + return GrColorTypeDesc::MakeRGBA(4, GrColorTypeEncoding::kUnorm); } SkUNREACHABLE; } @@ -1149,6 +1155,8 @@ static constexpr size_t GrColorTypeBytesPerPixel(GrColorType ct) { case GrColorType::kR_16: return 2; case GrColorType::kR_F16: return 2; case GrColorType::kGray_F16: return 2; + case GrColorType::kARGB_4444: return 2; + case GrColorType::kBGRA_4444: return 2; } SkUNREACHABLE; } @@ -1241,6 +1249,8 @@ static constexpr const char* GrColorTypeToStr(GrColorType ct) { case GrColorType::kR_16: return "kR_16"; case GrColorType::kR_F16: return "kR_F16"; case GrColorType::kGray_F16: return "kGray_F16"; + case GrColorType::kARGB_4444: return "kARGB_4444"; + case GrColorType::kBGRA_4444: return "kBGRA_4444"; } SkUNREACHABLE; } diff --git a/include/private/GrVkTypesPriv.h b/include/private/GrVkTypesPriv.h index 07b6a2ce38acb..b46cf8bf9149a 100644 --- a/include/private/GrVkTypesPriv.h +++ b/include/private/GrVkTypesPriv.h @@ -53,7 +53,6 @@ class GrVkSharedImageInfo { return *this; } - void setImageLayout(VkImageLayout layout) { // Defaulting to use std::memory_order_seq_cst fLayout.store(layout); diff --git a/include/private/SkBitmaskEnum.h b/include/private/SkBitmaskEnum.h index ca254a34cd487..b25045359d837 100644 --- a/include/private/SkBitmaskEnum.h +++ b/include/private/SkBitmaskEnum.h @@ -40,6 +40,17 @@ std::enable_if_t::value, E&> constexpr operator&=(E return l = l & r; } +template +std::enable_if_t::value, E> constexpr operator^(E l, E r) { + using U = std::underlying_type_t; + return static_cast(static_cast(l) ^ static_cast(r)); +} + +template +std::enable_if_t::value, E&> constexpr operator^=(E& l, E r) { + return l = l ^ r; +} + template std::enable_if_t::value, E> constexpr operator~(E e) { return static_cast(~static_cast>(e)); diff --git a/include/private/SkFloatingPoint.h b/include/private/SkFloatingPoint.h index 110dda2ae4dae..9eb05622b635e 100644 --- a/include/private/SkFloatingPoint.h +++ b/include/private/SkFloatingPoint.h @@ -159,7 +159,7 @@ static inline int64_t sk_float_saturate2int64(float x) { // Cast double to float, ignoring any warning about too-large finite values being cast to float. // Clang thinks this is undefined, but it's actually implementation defined to return either // the largest float or infinity (one of the two bracketing representable floats). Good enough! -[[clang::no_sanitize("float-cast-overflow")]] +SK_ATTRIBUTE(no_sanitize("float-cast-overflow")) static inline float sk_double_to_float(double x) { return static_cast(x); } @@ -226,12 +226,12 @@ static inline float sk_float_rsqrt(float x) { // IEEE defines how float divide behaves for non-finite values and zero-denoms, but C does not // so we have a helper that suppresses the possible undefined-behavior warnings. -[[clang::no_sanitize("float-divide-by-zero")]] +SK_ATTRIBUTE(no_sanitize("float-divide-by-zero")) static inline float sk_ieee_float_divide(float numer, float denom) { return numer / denom; } -[[clang::no_sanitize("float-divide-by-zero")]] +SK_ATTRIBUTE(no_sanitize("float-divide-by-zero")) static inline double sk_ieee_double_divide(double numer, double denom) { return numer / denom; } diff --git a/include/private/SkPathRef.h b/include/private/SkPathRef.h index 7afe4f9a52e0e..f9533d72615dd 100644 --- a/include/private/SkPathRef.h +++ b/include/private/SkPathRef.h @@ -42,6 +42,24 @@ class SkWBuffer; class SK_API SkPathRef final : public SkNVRefCnt { public: + SkPathRef(SkTDArray points, SkTDArray verbs, SkTDArray weights, + unsigned segmentMask) + : fPoints(std::move(points)) + , fVerbs(std::move(verbs)) + , fConicWeights(std::move(weights)) + { + fBoundsIsDirty = true; // this also invalidates fIsFinite + fGenerationID = kEmptyGenID; + fSegmentMask = segmentMask; + fIsOval = false; + fIsRRect = false; + // The next two values don't matter unless fIsOval or fIsRRect are true. + fRRectOrOvalIsCCW = false; + fRRectOrOvalStartIdx = 0xAC; + SkDEBUGCODE(fEditorsAttached.store(0);) + SkDEBUGCODE(this->validate();) + } + class Editor { public: Editor(sk_sp* pathRef, diff --git a/include/private/SkSLSampleUsage.h b/include/private/SkSLSampleUsage.h new file mode 100644 index 0000000000000..c6d33fe584c42 --- /dev/null +++ b/include/private/SkSLSampleUsage.h @@ -0,0 +1,92 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkSLSampleUsage_DEFINED +#define SkSLSampleUsage_DEFINED + +#include + +namespace SkSL { + +/** + * Represents all of the ways that a fragment processor is sampled by its parent. + */ +struct SampleUsage { + enum class Kind { + // No sample(child, matrix) call affects the FP. + kNone, + // The FP is sampled with a matrix whose value is fixed and based only on literals or + // uniforms, and thus the transform can be hoisted to the vertex shader (assuming that + // its parent can also be hoisted, i.e. not sampled explicitly). + kUniform, + // The FP is sampled with a non-literal/uniform value, or matrix-sampled multiple times, + // and thus the transform cannot be hoisted to the vertex shader. + kVariable + }; + + // Make a SampleUsage that corresponds to no sampling of the child at all + SampleUsage() = default; + + // This corresponds to sample(child, color, matrix) calls where every call site in the FP has + // the same matrix, and that matrix's value is uniform (some expression only involving literals + // and uniform variables). + static SampleUsage UniformMatrix(std::string expression, bool hasPerspective = true) { + return SampleUsage(Kind::kUniform, std::move(expression), hasPerspective, false, false); + } + + // This corresponds to sample(child, color, matrix) where the 3rd argument is an expression that + // can't be hoisted to the vertex shader, or where the expression used is not the same at all + // call sites in the FP. + static SampleUsage VariableMatrix(bool hasPerspective = true) { + return SampleUsage(Kind::kVariable, "", hasPerspective, false, false); + } + + static SampleUsage Explicit() { + return SampleUsage(Kind::kNone, "", false, true, false); + } + + static SampleUsage PassThrough() { + return SampleUsage(Kind::kNone, "", false, false, true); + } + + SampleUsage merge(const SampleUsage& other); + + bool isSampled() const { + return this->hasMatrix() || fExplicitCoords || fPassThrough; + } + + bool hasMatrix() const { return fKind != Kind::kNone; } + bool hasUniformMatrix() const { return fKind == Kind::kUniform; } + bool hasVariableMatrix() const { return fKind == Kind::kVariable; } + + Kind fKind = Kind::kNone; + // The uniform expression representing the matrix (only valid when kind == kUniform) + std::string fExpression; + // FIXME: We can expand this to track a more general matrix type to allow for optimizations on + // identity or scale+translate matrices too. + bool fHasPerspective = false; + + bool fExplicitCoords = false; + bool fPassThrough = false; + + SampleUsage(Kind kind, + std::string expression, + bool hasPerspective, + bool explicitCoords, + bool passThrough) + : fKind(kind) + , fExpression(expression) + , fHasPerspective(hasPerspective) + , fExplicitCoords(explicitCoords) + , fPassThrough(passThrough) {} + + std::string constructor(std::string perspectiveExpression) const; +}; + +} // namespace + +#endif diff --git a/include/private/SkTArray.h b/include/private/SkTArray.h index 4a87e11dd47a3..cc59aa6ba8b0a 100644 --- a/include/private/SkTArray.h +++ b/include/private/SkTArray.h @@ -369,6 +369,9 @@ template class SkTArray { return fItemArray[i]; } + T& at(int i) { return (*this)[i]; } + const T& at(int i) const { return (*this)[i]; } + /** * equivalent to operator[](0) */ diff --git a/include/private/SkVx.h b/include/private/SkVx.h index 696c6d6768bb6..d3dc6c957b3a0 100644 --- a/include/private/SkVx.h +++ b/include/private/SkVx.h @@ -34,6 +34,11 @@ #include #endif +#if defined __wasm_simd128__ + // WASM SIMD intrinsics definitions: https://github.com/llvm/llvm-project/blob/master/clang/lib/Headers/wasm_simd128.h + #include +#endif + #if !defined(__clang__) && defined(__GNUC__) && defined(__mips64) // GCC 7 hits an internal compiler error when targeting MIPS64. #define SKVX_ALIGNMENT @@ -605,6 +610,92 @@ static inline Vec approx_scale(const Vec& x, const Vec min(const Vec<4,float>& x, const Vec<4,float>& y) { + return to_vec<4,float>(wasm_f32x4_min(to_vext(x), to_vext(y))); + } + static inline Vec<4,float> max(const Vec<4,float>& x, const Vec<4,float>& y) { + return to_vec<4,float>(wasm_f32x4_max(to_vext(x), to_vext(y))); + } + static inline Vec<4,float> sqrt(const Vec<4,float>& x) { + return to_vec<4,float>(wasm_f32x4_sqrt(to_vext(x))); + } + static inline Vec<4,float> abs(const Vec<4,float>& x) { + return to_vec<4,float>(wasm_f32x4_abs(to_vext(x))); + } + static inline Vec<4,float> rcp(const Vec<4,float>& x) { + return 1.0f / x; + } + static inline Vec<4,float> rsqrt(const Vec<4,float>& x) { + return 1.0f / sqrt(x); + } + static inline Vec<4,float> mad(const Vec<4,float>& f, + const Vec<4,float>& m, + const Vec<4,float>& a) { + return f*m+a; + } + + static inline Vec<2,double> min(const Vec<2,double>& x, const Vec<2,double>& y) { + return to_vec<2,double>(wasm_f64x2_min(to_vext(x), to_vext(y))); + } + static inline Vec<2,double> max(const Vec<2,double>& x, const Vec<2,double>& y) { + return to_vec<2,double>(wasm_f64x2_max(to_vext(x), to_vext(y))); + } + static inline Vec<2,double> sqrt(const Vec<2,double>& x) { + return to_vec<2,double>(wasm_f64x2_sqrt(to_vext(x))); + } + static inline Vec<2,double> abs(const Vec<2,double>& x) { + return to_vec<2,double>(wasm_f64x2_abs(to_vext(x))); + } + static inline Vec<2,double> rcp(const Vec<2,double>& x) { + return 1.0f / x; + } + static inline Vec<2,double> rsqrt(const Vec<2,double>& x) { + return 1.0f / sqrt(x); + } + static inline Vec<2,double> mad(const Vec<2,double>& f, + const Vec<2,double>& m, + const Vec<2,double>& a) { + return to_vec<2,double>(wasm_f64x2_add( + wasm_f64x2_mul(to_vext(f), to_vext(m)), + to_vext(a) + )); + } + + static inline Vec<4,int32_t> any(const Vec<4,int32_t>& x) { + return to_vec<4,int32_t>(wasm_i32x4_any_true(to_vext(x))); + } + static inline Vec<4,int32_t> all(const Vec<4,int32_t>& x) { + return to_vec<4,int32_t>(wasm_i32x4_all_true(to_vext(x))); + } + static inline Vec<4,int32_t> min(const Vec<4,int32_t>& x, const Vec<4,int32_t>& y) { + return to_vec<4,int32_t>(wasm_i32x4_min(to_vext(x), to_vext(y))); + } + static inline Vec<4,int32_t> max(const Vec<4,int32_t>& x, const Vec<4,int32_t>& y) { + return to_vec<4,int32_t>(wasm_i32x4_max(to_vext(x), to_vext(y))); + } + static inline Vec<4,int32_t> abs(const Vec<4,int32_t>& x) { + return to_vec<4,int32_t>(wasm_i32x4_abs(to_vext(x))); + } + + static inline Vec<4,uint32_t> any(const Vec<4,uint32_t>& x) { + return to_vec<4,uint32_t>(wasm_i32x4_any_true(to_vext(x))); + } + static inline Vec<4,uint32_t> all(const Vec<4,uint32_t>& x) { + return to_vec<4,uint32_t>(wasm_i32x4_all_true(to_vext(x))); + } + static inline Vec<4,uint32_t> min(const Vec<4,uint32_t>& x, + const Vec<4,uint32_t>& y) { + return to_vec<4,uint32_t>(wasm_u32x4_min(to_vext(x), to_vext(y))); + } + static inline Vec<4,uint32_t> max(const Vec<4,uint32_t>& x, + const Vec<4,uint32_t>& y) { + return to_vec<4,uint32_t>(wasm_u32x4_max(to_vext(x), to_vext(y))); + } + #endif + #endif // !defined(SKNX_NO_SIMD) } // namespace skvx diff --git a/infra/bots/assets/android_ndk_darwin/VERSION b/infra/bots/assets/android_ndk_darwin/VERSION index f11c82a4cb6cc..9a037142aa3c1 100644 --- a/infra/bots/assets/android_ndk_darwin/VERSION +++ b/infra/bots/assets/android_ndk_darwin/VERSION @@ -1 +1 @@ -9 \ No newline at end of file +10 \ No newline at end of file diff --git a/infra/bots/assets/android_ndk_darwin/create.py b/infra/bots/assets/android_ndk_darwin/create.py index fabeed0210c40..23f3a52a58509 100755 --- a/infra/bots/assets/android_ndk_darwin/create.py +++ b/infra/bots/assets/android_ndk_darwin/create.py @@ -15,7 +15,7 @@ import shutil import subprocess -NDK_VER = "android-ndk-r20" +NDK_VER = "android-ndk-r21d" NDK_URL = \ "https://dl.google.com/android/repository/%s-darwin-x86_64.zip" % NDK_VER diff --git a/infra/bots/assets/android_ndk_linux/VERSION b/infra/bots/assets/android_ndk_linux/VERSION index 3f10ffe7a4c47..19c7bdba7b1e9 100644 --- a/infra/bots/assets/android_ndk_linux/VERSION +++ b/infra/bots/assets/android_ndk_linux/VERSION @@ -1 +1 @@ -15 \ No newline at end of file +16 \ No newline at end of file diff --git a/infra/bots/assets/android_ndk_linux/create.py b/infra/bots/assets/android_ndk_linux/create.py index 2e573eacd1ab9..dbf5f6242ecc5 100755 --- a/infra/bots/assets/android_ndk_linux/create.py +++ b/infra/bots/assets/android_ndk_linux/create.py @@ -15,7 +15,7 @@ import shutil import subprocess -NDK_VER = "android-ndk-r20" +NDK_VER = "android-ndk-r21d" NDK_URL = \ "https://dl.google.com/android/repository/%s-linux-x86_64.zip" % NDK_VER diff --git a/infra/bots/assets/android_ndk_windows/VERSION b/infra/bots/assets/android_ndk_windows/VERSION index 9a037142aa3c1..9d607966b721a 100644 --- a/infra/bots/assets/android_ndk_windows/VERSION +++ b/infra/bots/assets/android_ndk_windows/VERSION @@ -1 +1 @@ -10 \ No newline at end of file +11 \ No newline at end of file diff --git a/infra/bots/assets/android_ndk_windows/create.py b/infra/bots/assets/android_ndk_windows/create.py index bd1fc92d7ee14..2afacd0f420be 100755 --- a/infra/bots/assets/android_ndk_windows/create.py +++ b/infra/bots/assets/android_ndk_windows/create.py @@ -15,7 +15,7 @@ import shutil import subprocess -NDK_VER = "android-ndk-r20" +NDK_VER = "android-ndk-r21d" NDK_URL = \ "https://dl.google.com/android/repository/%s-windows-x86_64.zip" % NDK_VER @@ -27,11 +27,6 @@ def create_asset(target_dir): shutil.move(f, target_dir) subprocess.check_call(["rm", "ndk.zip"]) - # Some of these files have paths that exceed 260 characters when downloaded - # as a CIPD package. Luckily they're just tests. We don't need them. - shutil.rmtree(os.path.join(target_dir, - 'sources', 'cxx-stl', 'llvm-libc++', 'test')) - def main(): parser = argparse.ArgumentParser() diff --git a/infra/bots/assets/linux_vulkan_sdk/VERSION b/infra/bots/assets/linux_vulkan_sdk/VERSION index bf0d87ab1b2b0..7813681f5b41c 100644 --- a/infra/bots/assets/linux_vulkan_sdk/VERSION +++ b/infra/bots/assets/linux_vulkan_sdk/VERSION @@ -1 +1 @@ -4 \ No newline at end of file +5 \ No newline at end of file diff --git a/infra/bots/assets/linux_vulkan_sdk/create.py b/infra/bots/assets/linux_vulkan_sdk/create.py index 5beb05453ba59..e51976a250a86 100755 --- a/infra/bots/assets/linux_vulkan_sdk/create.py +++ b/infra/bots/assets/linux_vulkan_sdk/create.py @@ -15,7 +15,7 @@ import sys import utils -SDK_VERSION='1.1.130.0' +SDK_VERSION='1.2.141.0' SDK_URL=('https://sdk.lunarg.com/sdk/download/%s/linux/' 'vulkansdk-linux-x86_64-%s.tar.gz' % (SDK_VERSION, SDK_VERSION)) diff --git a/infra/bots/assets/skp/VERSION b/infra/bots/assets/skp/VERSION index 104fcf5b4e281..030d25b2869af 100644 --- a/infra/bots/assets/skp/VERSION +++ b/infra/bots/assets/skp/VERSION @@ -1 +1 @@ -243 \ No newline at end of file +248 \ No newline at end of file diff --git a/infra/bots/assets/xcode-11.4.1/VERSION b/infra/bots/assets/xcode-11.4.1/VERSION new file mode 100644 index 0000000000000..c227083464fb9 --- /dev/null +++ b/infra/bots/assets/xcode-11.4.1/VERSION @@ -0,0 +1 @@ +0 \ No newline at end of file diff --git a/infra/bots/assets/xcode-11.4.1/common.py b/infra/bots/assets/xcode-11.4.1/common.py new file mode 100755 index 0000000000000..caa0ad899c2dc --- /dev/null +++ b/infra/bots/assets/xcode-11.4.1/common.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +# +# Copyright 2017 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Common vars used by scripts in this directory.""" + + +import os +import sys + +FILE_DIR = os.path.dirname(os.path.abspath(__file__)) +INFRA_BOTS_DIR = os.path.realpath(os.path.join(FILE_DIR, os.pardir, os.pardir)) + +sys.path.insert(0, INFRA_BOTS_DIR) +from assets import assets + +ASSET_NAME = os.path.basename(FILE_DIR) + + +def run(cmd): + """Run a command, eg. "upload" or "download". """ + assets.main([cmd, ASSET_NAME] + sys.argv[1:]) diff --git a/infra/bots/assets/xcode-11.4.1/download.py b/infra/bots/assets/xcode-11.4.1/download.py new file mode 100755 index 0000000000000..ca999e03783f9 --- /dev/null +++ b/infra/bots/assets/xcode-11.4.1/download.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# +# Copyright 2017 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Download the current version of the asset.""" + + +import common + + +if __name__ == '__main__': + common.run('download') diff --git a/infra/bots/assets/xcode-11.4.1/upload.py b/infra/bots/assets/xcode-11.4.1/upload.py new file mode 100755 index 0000000000000..bdfbda783ea6f --- /dev/null +++ b/infra/bots/assets/xcode-11.4.1/upload.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python +# +# Copyright 2017 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + + +"""Upload a new version of the asset.""" + + +import common + + +if __name__ == '__main__': + common.run('upload') diff --git a/infra/bots/compile.isolate b/infra/bots/compile.isolate index c2238933473d1..d1e5ffa5e49e0 100644 --- a/infra/bots/compile.isolate +++ b/infra/bots/compile.isolate @@ -19,24 +19,13 @@ '../../dm', '../../docs/examples', '../../example', - '../../experimental/Networking/SkSockets.cpp', - '../../experimental/Networking/SkSockets.h', - '../../experimental/c-api-example/skia-c-example.c', - '../../experimental/ffmpeg', - '../../experimental/minimal_ios_mtl_skia_app/BUILD.gn', - '../../experimental/minimal_ios_mtl_skia_app/main.mm', - '../../experimental/skottiekit/skottiekit_bindings.cpp', - '../../experimental/svg/model', - '../../experimental/tools/coreGraphicsPdf2png.cpp', - '../../experimental/wasm-skp-debugger/debugger_bindings.cpp', - '../../experimental/xform', + '../../experimental', '../../fuzz', '../../gm', '../../gn', '../../include', '../../modules', - '../../platform_tools/android/apps/arcore/src/main/cpp', - '../../platform_tools/android/apps/skottie/src/main/cpp', + '../../platform_tools/android/apps/skottie/skottielib/src/main/cpp/native-lib.cpp', '../../platform_tools/android/launcher/skia_launcher.cpp', '../../platform_tools/android/vulkan/Skia_Vulkan_Android.h', '../../platform_tools/ios/app/LaunchScreen.storyboard', diff --git a/infra/bots/gen_tasks_logic/dm_flags.go b/infra/bots/gen_tasks_logic/dm_flags.go index 83e649dffbdc7..b83696fd5c44d 100644 --- a/infra/bots/gen_tasks_logic/dm_flags.go +++ b/infra/bots/gen_tasks_logic/dm_flags.go @@ -346,6 +346,11 @@ func (b *taskBuilder) dmFlags(internalHardwareLabel string) { blacklist("_ test _ Programs") } + if b.extraConfig("CommandBuffer") { + // skbug.com/10412 + blacklist("_ test _ GLBackendAllocationTest") + } + // skbug.com/9033 - these devices run out of memory on this test // when opList splitting reduction is enabled if b.gpu() && (b.model("Nexus7", "NVIDIA_Shield", "Nexus5x") || @@ -353,11 +358,6 @@ func (b *taskBuilder) dmFlags(internalHardwareLabel string) { blacklist("_", "gm", "_", "savelayer_clipmask") } - // skbug.com/9123 - if b.extraConfig("CommandBuffer") && b.gpu("IntelIris5100") { - blacklist("_", "test", "_", "AsyncReadPixels") - } - // skbug.com/9043 - these devices render this test incorrectly // when opList splitting reduction is enabled if b.gpu() && b.extraConfig("Vulkan") && (b.gpu("RadeonR9M470X", "RadeonHD7770")) { @@ -385,6 +385,9 @@ func (b *taskBuilder) dmFlags(internalHardwareLabel string) { } } } + if b.extraConfig("Direct3D") { + configs = []string{"d3d"} + } // Test 1010102 on our Linux/NVIDIA bots and the persistent cache config // on the GL bots. @@ -470,6 +473,12 @@ func (b *taskBuilder) dmFlags(internalHardwareLabel string) { args = append(args, "--skpViewportSize", "2048") args = append(args, "--gpuThreads", "0") } + if b.extraConfig("OOPRDDL") { + // This bot generates the real oopr/DDL images for the large skps and the GMs + configs = suffix(filter(configs, "gl", "vk", "mtl"), "ooprddl") + args = append(args, "--skpViewportSize", "2048") + args = append(args, "--gpuThreads", "0") + } } // Sharding. @@ -559,6 +568,46 @@ func (b *taskBuilder) dmFlags(internalHardwareLabel string) { blacklist("_ test _ InitialTextureClear") } + if b.extraConfig("OOPRDDL") { + // This batch all call readpixels + blacklist("_ gm _ async_rescale_and_read_dog_down") + blacklist("_ gm _ async_rescale_and_read_dog_up") + blacklist("_ gm _ async_rescale_and_read_no_bleed") + blacklist("_ gm _ async_rescale_and_read_rose") + blacklist("_ gm _ async_rescale_and_read_text_down") + blacklist("_ gm _ async_rescale_and_read_text_up") + blacklist("_ gm _ async_rescale_and_read_text_up_large") + blacklist("_ gm _ async_rescale_and_read_yuv420_rose") + blacklist("_ gm _ async_yuv_no_scale") + blacklist("_ gm _ drawbitmaprect-subset") + blacklist("_ gm _ drawbitmaprect") + blacklist("_ gm _ image_subset") + blacklist("_ gm _ p3") + blacklist("_ gm _ p3_ovals") + blacklist("_ gm _ readpixels") + blacklist("_ gm _ scale-pixels ") + blacklist("_ gm _ zero_length_paths_aa") + blacklist("_ gm _ zero_length_paths_bw") + blacklist("_ gm _ zero_length_paths_dbl_aa") + blacklist("_ gm _ zero_length_paths_dbl_bw") + // This one explicitly rejects DDL recording + blacklist("_ gm _ blurrect_compare") + // These two trip up on CCPR behavior + blacklist("_ gm _ preservefillrule_big") + blacklist("_ gm _ preservefillrule_little") + // These two rely on munging the resource limits + blacklist("_ gm _ bitmaptiled_fractional_horizontal") + blacklist("_ gm _ bitmaptiled_fractional_vertical") + // These two require a direct context + blacklist("_ gm _ new_texture_image ") + blacklist("_ gm _ fontregen ") + // This family of gms can be re-enabled once MakeRenderTarget can take a GrRecordingContext + blacklist("_ gm _ gpu_blur_utils") + blacklist("_ gm _ gpu_blur_utils_subset_rect") + blacklist("_ gm _ gpu_blur_utils_subset_ref") + blacklist("_ gm _ gpu_blur_utils_ref") + } + if b.model("TecnoSpark3Pro") { // skbug.com/9421 blacklist("_ test _ InitialTextureClear") @@ -832,6 +881,7 @@ func (b *taskBuilder) dmFlags(internalHardwareLabel string) { match = append(match, "~WritePixels") // skia:4711 match = append(match, "~PremulAlphaRoundTrip_Gpu") // skia:7501 match = append(match, "~ReimportImageTextureWithMipLevels") // skia:8090 + match = append(match, "~MorphologyFilterRadiusWithMirrorCTM_Gpu") // skia:10383 } if b.model("GalaxyS6") { @@ -914,6 +964,33 @@ func (b *taskBuilder) dmFlags(internalHardwareLabel string) { match = append(match, "~WritePixelsNonTextureMSAA_Gpu") } + if b.extraConfig("Direct3D") { + // skia:9935 + match = append(match, "~^ColorTypeBackendAllocationTest$") + match = append(match, "~^CompressedBackendAllocationTest$") + match = append(match, "~^DDLSkSurfaceFlush$") + match = append(match, "~^GrBackendTextureImageMipMappedTest$") + match = append(match, "~^GrMeshTest$") + match = append(match, "~^GrSurfaceRenderability$") + match = append(match, "~^GrTextureMipMapInvalidationTest$") + match = append(match, "~^PremulAlphaRoundTrip_Gpu$") + match = append(match, "~^ReplaceSurfaceBackendTexture$") + match = append(match, "~^SkImage_makeTextureImage$") + match = append(match, "~^TextureIdleStateTest$") + match = append(match, "~^TextureProxyTest$") + } + if b.extraConfig("Direct3D") && b.matchOs("Win") { + // skia:9935 + match = append(match, "~^ImageAsyncReadPixels$") + } + if b.extraConfig("Direct3D") && b.gpu("RadeonHD7770") && b.matchOs("Win") { + // skia:9935 + match = append(match, "~^SurfaceAsyncReadPixels$") + match = append(match, "~^MorphologyFilterRadiusWithMirrorCTM_Gpu$") + match = append(match, "~^ReadPixels_Gpu$") + match = append(match, "~^ReadPixels_Texture$") + } + if b.extraConfig("ANGLE") { // skia:7835 match = append(match, "~BlurMaskBiggerThanDest") diff --git a/infra/bots/gen_tasks_logic/gen_tasks_logic.go b/infra/bots/gen_tasks_logic/gen_tasks_logic.go index 1d77328576312..c25023686e7c4 100644 --- a/infra/bots/gen_tasks_logic/gen_tasks_logic.go +++ b/infra/bots/gen_tasks_logic/gen_tasks_logic.go @@ -441,9 +441,10 @@ func (b *jobBuilder) deriveCompileTaskName() string { ignore := []string{ "Skpbench", "AbandonGpuContext", "PreAbandonGpuContext", "Valgrind", "ReleaseAndAbandonGpuContext", "CCPR", "FSAA", "FAAA", "FDAA", "NativeFonts", "GDI", - "NoGPUThreads", "ProcDump", "DDL1", "DDL3", "T8888", "DDLTotal", "DDLRecord", "9x9", - "BonusConfigs", "SkottieTracing", "SkottieWASM", "GpuTess", "NonNVPR", "Mskp", - "Docker", "PDF", "SkVM", "Puppeteer", "SkottieFrames"} + "NoGPUThreads", "ProcDump", "DDL1", "DDL3", "OOPRDDL", "T8888", + "DDLTotal", "DDLRecord", "9x9", "BonusConfigs", "SkottieTracing", "SkottieWASM", + "GpuTess", "NonNVPR", "Mskp", "Docker", "PDF", "SkVM", "Puppeteer", + "SkottieFrames", "RenderSKP"} keep := make([]string, 0, len(ec)) for _, part := range ec { if !In(part, ignore) { @@ -589,6 +590,7 @@ func (b *taskBuilder) defaultSwarmDimensions() { "Pixel3": {"blueline", "PQ1A.190105.004"}, "Pixel3a": {"sargo", "QP1A.190711.020"}, "Pixel4": {"flame", "QD1A.190821.011.C4"}, + "Pixel4XL": {"coral", "QD1A.190821.011.C4"}, "TecnoSpark3Pro": {"TECNO-KB8", "PPR1.180610.011"}, }[b.parts["model"]] if !ok { @@ -1301,7 +1303,11 @@ func (b *jobBuilder) dm() { isolate = "canvaskit.isolate" recipe = "test_canvaskit" } else if b.extraConfig("LottieWeb") { - isolate = "lottie_web.isolate" + // lottie_ci.isolate differs from lottie_web.isolate in that it includes more of the files, + // especially those brought in via DEPS in the lottie-ci repo. The main difference between + // Perf.+LottieWeb and Test.+LottieWeb is that the former pulls in the lottie build via + // npm and the latter always tests at lottie's ToT. + isolate = "lottie_ci.isolate" recipe = "test_lottie_web" } b.recipeProp("gold_hashes_url", b.cfg.GoldHashesURL) @@ -1400,41 +1406,64 @@ func (b *jobBuilder) puppeteer() { compileTaskName := b.compile() b.addTask(b.Name, func(b *taskBuilder) { b.defaultSwarmDimensions() - b.isolate("perf_puppeteer.isolate") - b.cmd( - "./perf_puppeteer_skottie_frames", - "--project_id", "skia-swarming-bots", - "--git_hash", specs.PLACEHOLDER_REVISION, - "--task_id", specs.PLACEHOLDER_TASK_ID, - "--task_name", b.Name, - "--canvaskit_bin_path", "./build", - "--lotties_path", "./lotties_with_assets", - "--node_bin_path", "./node/node/bin", - "--benchmark_path", "./tools/perf-canvaskit-puppeteer", - "--output_path", OUTPUT_PERF, - "--os_trace", b.parts["os"], - "--model_trace", b.parts["model"], - "--cpu_or_gpu_trace", b.parts["cpu_or_gpu"], - "--cpu_or_gpu_value_trace", b.parts["cpu_or_gpu_value"], - "--alsologtostderr", - ) - b.serviceAccount(b.cfg.ServiceAccountCompile) - // This CIPD package was made by hand with the following invocation: - // cipd create -name skia/internal/lotties_with_assets -in ./lotties/ -tag version:0 - // cipd acl-edit skia/internal/lotties_with_assets -reader group:project-skia-external-task-accounts - // cipd acl-edit skia/internal/lotties_with_assets -reader user:pool-skia@chromium-swarm.iam.gserviceaccount.com - // Where lotties is a hand-selected set of lottie animations and (optionally) assets used in - // them (e.g. fonts, images). - b.cipd(&specs.CipdPackage{ - Name: "skia/internal/lotties_with_assets", - Path: "lotties_with_assets", - Version: "version:0", - }) b.usesNode() b.cipd(CIPD_PKG_LUCI_AUTH) b.dep(b.buildTaskDrivers(), compileTaskName) b.output(OUTPUT_PERF) b.timeout(20 * time.Minute) + b.isolate("perf_puppeteer.isolate") + b.serviceAccount(b.cfg.ServiceAccountCompile) + + if b.extraConfig("SkottieFrames") { + b.cmd( + "./perf_puppeteer_skottie_frames", + "--project_id", "skia-swarming-bots", + "--git_hash", specs.PLACEHOLDER_REVISION, + "--task_id", specs.PLACEHOLDER_TASK_ID, + "--task_name", b.Name, + "--canvaskit_bin_path", "./build", + "--lotties_path", "./lotties_with_assets", + "--node_bin_path", "./node/node/bin", + "--benchmark_path", "./tools/perf-canvaskit-puppeteer", + "--output_path", OUTPUT_PERF, + "--os_trace", b.parts["os"], + "--model_trace", b.parts["model"], + "--cpu_or_gpu_trace", b.parts["cpu_or_gpu"], + "--cpu_or_gpu_value_trace", b.parts["cpu_or_gpu_value"], + "--alsologtostderr", + ) + // This CIPD package was made by hand with the following invocation: + // cipd create -name skia/internal/lotties_with_assets -in ./lotties/ -tag version:0 + // cipd acl-edit skia/internal/lotties_with_assets -reader group:project-skia-external-task-accounts + // cipd acl-edit skia/internal/lotties_with_assets -reader user:pool-skia@chromium-swarm.iam.gserviceaccount.com + // Where lotties is a hand-selected set of lottie animations and (optionally) assets used in + // them (e.g. fonts, images). + b.cipd(&specs.CipdPackage{ + Name: "skia/internal/lotties_with_assets", + Path: "lotties_with_assets", + Version: "version:0", + }) + } else if b.extraConfig("RenderSKP") { + b.cmd( + "./perf_puppeteer_render_skps", + "--project_id", "skia-swarming-bots", + "--git_hash", specs.PLACEHOLDER_REVISION, + "--task_id", specs.PLACEHOLDER_TASK_ID, + "--task_name", b.Name, + "--canvaskit_bin_path", "./build", + "--skps_path", "./skp", + "--node_bin_path", "./node/node/bin", + "--benchmark_path", "./tools/perf-canvaskit-puppeteer", + "--output_path", OUTPUT_PERF, + "--os_trace", b.parts["os"], + "--model_trace", b.parts["model"], + "--cpu_or_gpu_trace", b.parts["cpu_or_gpu"], + "--cpu_or_gpu_value_trace", b.parts["cpu_or_gpu_value"], + "--alsologtostderr", + ) + b.asset("skp") + } + }) // Upload results to Perf after. diff --git a/infra/bots/jobs.json b/infra/bots/jobs.json index 4fe5f6f7c52e6..07c9d14484c1c 100644 --- a/infra/bots/jobs.json +++ b/infra/bots/jobs.json @@ -197,8 +197,8 @@ "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan", "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android", "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan", - "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android", - "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan", + "Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android", + "Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan", "Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android", "Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All", "Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All", @@ -228,6 +228,7 @@ "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit", "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM", "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames", + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_RenderSKP", "Perf-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit", "Perf-Debian10-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb", "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All", @@ -250,6 +251,7 @@ "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan", "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM", "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames", + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_RenderSKP", "Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb", "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All", "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE", @@ -331,6 +333,7 @@ "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR", "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL1_Vulkan", "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL3_Vulkan", + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan", "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads", "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android", "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan", @@ -346,6 +349,7 @@ "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android", "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan", "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan", + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan", "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan", "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android", "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan", @@ -365,6 +369,7 @@ "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android", "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan", "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan", + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan", "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan", "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android", "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan", @@ -372,10 +377,10 @@ "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan", "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android", "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan", - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android", - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan", - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android", - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan", + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android", + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan", + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android", + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan", "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android", "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android", "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All", @@ -451,10 +456,14 @@ "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan", "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN", "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN_Vulkan", + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN", + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN_Vulkan", "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL", "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All", "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN", "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan", + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN", + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN_Vulkan", "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN", "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan", "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All", @@ -469,10 +478,12 @@ "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal", + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal", + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal", "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts", "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN", @@ -506,12 +517,16 @@ "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_ASAN", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN", + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN_Vulkan", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan", "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41", @@ -575,9 +590,11 @@ "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan", "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All", "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE", + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D", "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan", "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All", "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE", + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D", "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan", "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All", "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE", @@ -586,8 +603,10 @@ "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE", "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan", "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All", + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D", "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan", "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All", + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D", "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan", "Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All", "Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE", @@ -595,11 +614,15 @@ "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All", "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN", "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM", "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All", + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM", "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All", "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All", "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All", + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM", "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All", + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM", "Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All", "Test-Win7-Clang-Golo-CPU-AVX512-x86-Release-All", "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All", diff --git a/infra/bots/lottie_ci.isolate b/infra/bots/lottie_ci.isolate new file mode 100644 index 0000000000000..09b724935372b --- /dev/null +++ b/infra/bots/lottie_ci.isolate @@ -0,0 +1,13 @@ +{ + 'includes': [ + 'swarm_recipe.isolate', + ], + 'variables': { + 'files': [ + '../../../lottie', + '../../tools/lottie-web-perf', + '../../tools/lottiecap', + '../lottiecap', + ], + }, +} diff --git a/infra/bots/recipe_modules/flavor/android.py b/infra/bots/recipe_modules/flavor/android.py index 5fcb80a58c114..d8fb0a1ab3061 100644 --- a/infra/bots/recipe_modules/flavor/android.py +++ b/infra/bots/recipe_modules/flavor/android.py @@ -42,7 +42,7 @@ def __init__(self, m, app_name): # on the list, we fail the task to avoid perf inconsistencies. self.rootable_blacklist = ['GalaxyS6', 'GalaxyS7_G930FD', 'GalaxyS9', 'GalaxyS20', 'MotoG4', 'NVIDIA_Shield', - 'P30', 'TecnoSpark3Pro'] + 'P30', 'Pixel4XL', 'TecnoSpark3Pro'] # Maps device type -> CPU ids that should be scaled for nanobench. # Many devices have two (or more) different CPUs (e.g. big.LITTLE @@ -350,7 +350,7 @@ def _scale_cpu(self, cpu, target_percent): def _asan_setup_path(self): return self.m.vars.slave_dir.join( 'android_ndk_linux', 'toolchains', 'llvm', 'prebuilt', 'linux-x86_64', - 'lib64', 'clang', '8.0.7', 'bin', 'asan_device_setup') + 'lib64', 'clang', '9.0.8', 'bin', 'asan_device_setup') def install(self): diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json index f1bae984cee90..82664214725de 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android_ASAN.json @@ -146,7 +146,7 @@ "-u", "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\nASAN_SETUP = sys.argv[2]\n\ndef wait_for_device():\n while True:\n time.sleep(5)\n print 'Waiting for device'\n subprocess.check_output([ADB, 'wait-for-device'])\n bit1 = subprocess.check_output([ADB, 'shell', 'getprop',\n 'dev.bootcomplete'])\n bit2 = subprocess.check_output([ADB, 'shell', 'getprop',\n 'sys.boot_completed'])\n if '1' in bit1 and '1' in bit2:\n print 'Device detected'\n break\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\noutput = subprocess.check_output([ADB, 'disable-verity'])\nprint output\n\nif 'already disabled' not in output:\n print 'Rebooting device'\n subprocess.check_output([ADB, 'reboot'])\n wait_for_device()\n\ndef installASAN(revert=False):\n # ASAN setup script is idempotent, either it installs it or\n # says it's installed. Returns True on success, false otherwise.\n out = subprocess.check_output([ADB, 'wait-for-device'])\n print out\n cmd = [ASAN_SETUP]\n if revert:\n cmd = [ASAN_SETUP, '--revert']\n process = subprocess.Popen(cmd, env={'ADB': ADB},\n stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n\n # this also blocks until command finishes\n (stdout, stderr) = process.communicate()\n print stdout\n print 'Stderr: %s' % stderr\n return process.returncode == 0\n\nif not installASAN():\n print 'Trying to revert the ASAN install and then re-install'\n # ASAN script sometimes has issues if it was interrupted or partially applied\n # Try reverting it, then re-enabling it\n if not installASAN(revert=True):\n raise Exception('reverting ASAN install failed')\n\n # Sleep because device does not reboot instantly\n time.sleep(10)\n\n if not installASAN():\n raise Exception('Tried twice to setup ASAN and failed.')\n\n# Sleep because device does not reboot instantly\ntime.sleep(10)\nwait_for_device()\n# Sleep again to hopefully avoid error \"secure_mkdirs failed: No such file or\n# directory\" when pushing resources to the device.\ntime.sleep(60)\n", "/opt/infra-android/tools/adb", - "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/8.0.7/bin/asan_device_setup" + "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/bin/asan_device_setup" ], "env": { "CHROME_HEADLESS": "1", @@ -1385,7 +1385,7 @@ }, { "cmd": [ - "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/8.0.7/bin/asan_device_setup", + "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/bin/asan_device_setup", "--revert" ], "env": { diff --git a/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json b/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json index ed73fdc79e000..e1a60bf6a3c3c 100644 --- a/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json +++ b/infra/bots/recipes/test.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm-Debug-All-Android_ASAN.json @@ -50,7 +50,7 @@ "-u", "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\nASAN_SETUP = sys.argv[2]\n\ndef wait_for_device():\n while True:\n time.sleep(5)\n print 'Waiting for device'\n subprocess.check_output([ADB, 'wait-for-device'])\n bit1 = subprocess.check_output([ADB, 'shell', 'getprop',\n 'dev.bootcomplete'])\n bit2 = subprocess.check_output([ADB, 'shell', 'getprop',\n 'sys.boot_completed'])\n if '1' in bit1 and '1' in bit2:\n print 'Device detected'\n break\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\noutput = subprocess.check_output([ADB, 'disable-verity'])\nprint output\n\nif 'already disabled' not in output:\n print 'Rebooting device'\n subprocess.check_output([ADB, 'reboot'])\n wait_for_device()\n\ndef installASAN(revert=False):\n # ASAN setup script is idempotent, either it installs it or\n # says it's installed. Returns True on success, false otherwise.\n out = subprocess.check_output([ADB, 'wait-for-device'])\n print out\n cmd = [ASAN_SETUP]\n if revert:\n cmd = [ASAN_SETUP, '--revert']\n process = subprocess.Popen(cmd, env={'ADB': ADB},\n stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n\n # this also blocks until command finishes\n (stdout, stderr) = process.communicate()\n print stdout\n print 'Stderr: %s' % stderr\n return process.returncode == 0\n\nif not installASAN():\n print 'Trying to revert the ASAN install and then re-install'\n # ASAN script sometimes has issues if it was interrupted or partially applied\n # Try reverting it, then re-enabling it\n if not installASAN(revert=True):\n raise Exception('reverting ASAN install failed')\n\n # Sleep because device does not reboot instantly\n time.sleep(10)\n\n if not installASAN():\n raise Exception('Tried twice to setup ASAN and failed.')\n\n# Sleep because device does not reboot instantly\ntime.sleep(10)\nwait_for_device()\n# Sleep again to hopefully avoid error \"secure_mkdirs failed: No such file or\n# directory\" when pushing resources to the device.\ntime.sleep(60)\n", "/usr/bin/adb.1.0.35", - "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/8.0.7/bin/asan_device_setup" + "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/bin/asan_device_setup" ], "env": { "CHROME_HEADLESS": "1", @@ -1133,7 +1133,7 @@ }, { "cmd": [ - "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/8.0.7/bin/asan_device_setup", + "[START_DIR]/android_ndk_linux/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/9.0.8/bin/asan_device_setup", "--revert" ], "env": { diff --git a/infra/bots/recipes/test_lottie_web.expected/Test-Debian10-none-GCE-CPU-AVX2-x86_64-Debug-All-LottieWeb.json b/infra/bots/recipes/test_lottie_web.expected/Test-Debian10-none-GCE-CPU-AVX2-x86_64-Debug-All-LottieWeb.json index ee4ebcb344851..08b38add20512 100644 --- a/infra/bots/recipes/test_lottie_web.expected/Test-Debian10-none-GCE-CPU-AVX2-x86_64-Debug-All-LottieWeb.json +++ b/infra/bots/recipes/test_lottie_web.expected/Test-Debian10-none-GCE-CPU-AVX2-x86_64-Debug-All-LottieWeb.json @@ -45,31 +45,12 @@ "cmd": [ "python", "-u", - "\nimport os\nimport sys\n\nlottie_files_dir = sys.argv[1]\nout_dir = sys.argv[2]\nlottie_build = sys.argv[3]\n\n# Make sure all the lottie files are readable by everyone so we can see\n# them in the docker container.\nos.system('chmod 0644 %s/*' % lottie_files_dir)\nos.system('chmod 0644 %s/*' % lottie_build)\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\n# This typically means that the non-privileged docker won't be able to write.\nos.chmod(out_dir, 0o777)\n", - "/tmp/lottie_files", - "[START_DIR]/[SWARM_OUT_DIR]", - "[START_DIR]/lottie/build/player" + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" ], - "infra_step": true, - "name": "Set up for docker", + "name": "get swarming bot id", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@lottie_files_dir = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@lottie_build = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make sure all the lottie files are readable by everyone so we can see@@@", - "@@@STEP_LOG_LINE@python.inline@# them in the docker container.@@@", - "@@@STEP_LOG_LINE@python.inline@os.system('chmod 0644 %s/*' % lottie_files_dir)@@@", - "@@@STEP_LOG_LINE@python.inline@os.system('chmod 0644 %s/*' % lottie_build)@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Prepare output folder, api.file.ensure_directory doesn't touch@@@", - "@@@STEP_LOG_LINE@python.inline@# the permissions of the out directory if it already exists.@@@", - "@@@STEP_LOG_LINE@python.inline@# This typically means that the non-privileged docker won't be able to write.@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(out_dir, 0o777)@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, @@ -77,42 +58,129 @@ "cmd": [ "python", "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" ], - "name": "get swarming bot id", + "name": "get swarming task id", "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, + { + "cmd": [], + "name": "Docker setup" + }, { "cmd": [ "python", "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "import os\nprint '%d:%d' % (os.getuid(), os.getgid())\n" ], - "name": "get swarming task id", + "name": "Docker setup.Get uid and gid", "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_LINE@python.inline@print '%d:%d' % (os.getuid(), os.getgid())@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/[SWARM_OUT_DIR]" + ], + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "[START_DIR]/[SWARM_OUT_DIR]" + ], + "infra_step": true, + "name": "Docker setup.chmod 777 [START_DIR]/[SWARM_OUT_DIR]", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "[START_DIR]" + ], + "infra_step": true, + "name": "Docker setup.chmod 755 [START_DIR]", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "[START_DIR]/skia/infra/lottiecap/docker/lottiecap_gold.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/lottiecap/docker/lottiecap_gold.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "[START_DIR]/lottie/build/player" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/lottie/build/player", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "/tmp/lottie_files" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r /tmp/lottie_files", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, { "cmd": [ "docker", "run", "--shm-size=2gb", "--rm", - "-v", - "[START_DIR]:/SRC", - "-v", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "-v", - "[START_DIR]/lottie/build/player:/LOTTIE_BUILD", - "-v", - "/tmp/lottie_files:/LOTTIE_FILES", + "--user", + "13:17", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "--mount", + "type=bind,source=[START_DIR]/lottie/build/player,target=/LOTTIE_BUILD", + "--mount", + "type=bind,source=/tmp/lottie_files,target=/LOTTIE_FILES", "gcr.io/skia-public/gold-lottie-web-puppeteer:v2", "/SRC/skia/infra/lottiecap/docker/lottiecap_gold.sh", "--builder", @@ -135,7 +203,7 @@ "DOCKER_CONFIG": "/home/chrome-bot/.docker", "PATH": ":RECIPE_REPO[depot_tools]" }, - "name": "Create lottie-web Gold output with Docker" + "name": "Generate LottieWeb Gold output with Docker" }, { "name": "$result" diff --git a/infra/bots/recipes/test_lottie_web.expected/lottie_web_trybot.json b/infra/bots/recipes/test_lottie_web.expected/lottie_web_trybot.json index 217a3b7d46bff..a405b72354b7b 100644 --- a/infra/bots/recipes/test_lottie_web.expected/lottie_web_trybot.json +++ b/infra/bots/recipes/test_lottie_web.expected/lottie_web_trybot.json @@ -45,31 +45,12 @@ "cmd": [ "python", "-u", - "\nimport os\nimport sys\n\nlottie_files_dir = sys.argv[1]\nout_dir = sys.argv[2]\nlottie_build = sys.argv[3]\n\n# Make sure all the lottie files are readable by everyone so we can see\n# them in the docker container.\nos.system('chmod 0644 %s/*' % lottie_files_dir)\nos.system('chmod 0644 %s/*' % lottie_build)\n\n# Prepare output folder, api.file.ensure_directory doesn't touch\n# the permissions of the out directory if it already exists.\n# This typically means that the non-privileged docker won't be able to write.\nos.chmod(out_dir, 0o777)\n", - "/tmp/lottie_files", - "[START_DIR]/[SWARM_OUT_DIR]", - "[START_DIR]/lottie/build/player" + "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" ], - "infra_step": true, - "name": "Set up for docker", + "name": "get swarming bot id", "~followup_annotations": [ - "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@import sys@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@lottie_files_dir = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@out_dir = sys.argv[2]@@@", - "@@@STEP_LOG_LINE@python.inline@lottie_build = sys.argv[3]@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Make sure all the lottie files are readable by everyone so we can see@@@", - "@@@STEP_LOG_LINE@python.inline@# them in the docker container.@@@", - "@@@STEP_LOG_LINE@python.inline@os.system('chmod 0644 %s/*' % lottie_files_dir)@@@", - "@@@STEP_LOG_LINE@python.inline@os.system('chmod 0644 %s/*' % lottie_build)@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@# Prepare output folder, api.file.ensure_directory doesn't touch@@@", - "@@@STEP_LOG_LINE@python.inline@# the permissions of the out directory if it already exists.@@@", - "@@@STEP_LOG_LINE@python.inline@# This typically means that the non-privileged docker won't be able to write.@@@", - "@@@STEP_LOG_LINE@python.inline@os.chmod(out_dir, 0o777)@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, @@ -77,42 +58,129 @@ "cmd": [ "python", "-u", - "import os\nprint os.environ.get('SWARMING_BOT_ID', '')\n" + "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" ], - "name": "get swarming bot id", + "name": "get swarming task id", "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_BOT_ID', '')@@@", + "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, + { + "cmd": [], + "name": "Docker setup" + }, { "cmd": [ "python", "-u", - "import os\nprint os.environ.get('SWARMING_TASK_ID', '')\n" + "import os\nprint '%d:%d' % (os.getuid(), os.getgid())\n" ], - "name": "get swarming task id", + "name": "Docker setup.Get uid and gid", "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@", "@@@STEP_LOG_LINE@python.inline@import os@@@", - "@@@STEP_LOG_LINE@python.inline@print os.environ.get('SWARMING_TASK_ID', '')@@@", + "@@@STEP_LOG_LINE@python.inline@print '%d:%d' % (os.getuid(), os.getgid())@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, + { + "cmd": [ + "vpython", + "-u", + "RECIPE_MODULE[recipe_engine::file]/resources/fileutil.py", + "--json-output", + "/path/to/tmp/json", + "ensure-directory", + "--mode", + "0777", + "[START_DIR]/[SWARM_OUT_DIR]" + ], + "infra_step": true, + "name": "Docker setup.mkdirs out_dir", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "777", + "[START_DIR]/[SWARM_OUT_DIR]" + ], + "infra_step": true, + "name": "Docker setup.chmod 777 [START_DIR]/[SWARM_OUT_DIR]", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "755", + "[START_DIR]" + ], + "infra_step": true, + "name": "Docker setup.chmod 755 [START_DIR]", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "0755", + "[START_DIR]/skia/infra/lottiecap/docker/lottiecap_gold.sh" + ], + "infra_step": true, + "name": "Docker setup.chmod 0755 [START_DIR]/skia/infra/lottiecap/docker/lottiecap_gold.sh", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "[START_DIR]/lottie/build/player" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r [START_DIR]/lottie/build/player", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, + { + "cmd": [ + "chmod", + "-R", + "a+r", + "/tmp/lottie_files" + ], + "infra_step": true, + "name": "Docker setup.chmod -R a+r /tmp/lottie_files", + "~followup_annotations": [ + "@@@STEP_NEST_LEVEL@1@@@" + ] + }, { "cmd": [ "docker", "run", "--shm-size=2gb", "--rm", - "-v", - "[START_DIR]:/SRC", - "-v", - "[START_DIR]/[SWARM_OUT_DIR]:/OUT", - "-v", - "[START_DIR]/lottie/build/player:/LOTTIE_BUILD", - "-v", - "/tmp/lottie_files:/LOTTIE_FILES", + "--user", + "13:17", + "--mount", + "type=bind,source=[START_DIR],target=/SRC", + "--mount", + "type=bind,source=[START_DIR]/[SWARM_OUT_DIR],target=/OUT", + "--mount", + "type=bind,source=[START_DIR]/lottie/build/player,target=/LOTTIE_BUILD", + "--mount", + "type=bind,source=/tmp/lottie_files,target=/LOTTIE_FILES", "gcr.io/skia-public/gold-lottie-web-puppeteer:v2", "/SRC/skia/infra/lottiecap/docker/lottiecap_gold.sh", "--builder", @@ -141,7 +209,7 @@ "DOCKER_CONFIG": "/home/chrome-bot/.docker", "PATH": ":RECIPE_REPO[depot_tools]" }, - "name": "Create lottie-web Gold output with Docker" + "name": "Generate LottieWeb Gold output with Docker" }, { "name": "$result" diff --git a/infra/bots/recipes/test_lottie_web.py b/infra/bots/recipes/test_lottie_web.py index 694b5fa887b1c..d9c5add1ab2f1 100644 --- a/infra/bots/recipes/test_lottie_web.py +++ b/infra/bots/recipes/test_lottie_web.py @@ -6,12 +6,12 @@ DEPS = [ 'checkout', + 'docker', 'env', 'infra', 'recipe_engine/file', 'recipe_engine/path', 'recipe_engine/properties', - 'recipe_engine/python', 'recipe_engine/step', 'run', 'vars', @@ -19,7 +19,7 @@ DOCKER_IMAGE = 'gcr.io/skia-public/gold-lottie-web-puppeteer:v2' -LOTTIECAP_SCRIPT = '/SRC/skia/infra/lottiecap/docker/lottiecap_gold.sh' +LOTTIECAP_SCRIPT = 'skia/infra/lottiecap/docker/lottiecap_gold.sh' def RunSteps(api): @@ -44,61 +44,44 @@ def RunSteps(api): api.file.rmtree('remove previous lottie files', lottie_files_dir) api.file.copytree('copy lottie files', lottie_files_src, lottie_files_dir) - api.python.inline( - name='Set up for docker', - program=''' -import os -import sys - -lottie_files_dir = sys.argv[1] -out_dir = sys.argv[2] -lottie_build = sys.argv[3] - -# Make sure all the lottie files are readable by everyone so we can see -# them in the docker container. -os.system('chmod 0644 %s/*' % lottie_files_dir) -os.system('chmod 0644 %s/*' % lottie_build) - -# Prepare output folder, api.file.ensure_directory doesn't touch -# the permissions of the out directory if it already exists. -# This typically means that the non-privileged docker won't be able to write. -os.chmod(out_dir, 0o777) -''', - args=[lottie_files_dir, out_dir, lottie_build], - infra_step=True) - - cmd = ['docker', 'run', '--shm-size=2gb', '--rm', - '-v', '%s:/SRC' % checkout_root, - '-v', '%s:/OUT' % out_dir, - '-v', '%s:/LOTTIE_BUILD' % lottie_build, - '-v', '%s:/LOTTIE_FILES' % lottie_files_dir] - - cmd.extend([ - DOCKER_IMAGE, LOTTIECAP_SCRIPT, - '--builder', api.vars.builder_name, - '--git_hash', api.properties['revision'], - '--buildbucket_build_id', api.properties.get('buildbucket_build_id', - ''), - '--bot_id', api.vars.swarming_bot_id, - '--task_id', api.vars.swarming_task_id, - '--browser', 'Chrome', - '--config', api.vars.configuration, - ]) + recursive_read = [lottie_build, lottie_files_dir] + + docker_args = [ + '--mount', + 'type=bind,source=%s,target=/LOTTIE_BUILD' % lottie_build, + '--mount', + 'type=bind,source=%s,target=/LOTTIE_FILES' % lottie_files_dir + ] + + args = [ + '--builder', api.vars.builder_name, + '--git_hash', api.properties['revision'], + '--buildbucket_build_id', api.properties.get('buildbucket_build_id', + ''), + '--bot_id', api.vars.swarming_bot_id, + '--task_id', api.vars.swarming_task_id, + '--browser', 'Chrome', + '--config', api.vars.configuration, + ] if api.vars.is_trybot: - cmd.extend([ + args.extend([ '--issue', api.vars.issue, '--patchset', api.vars.patchset, '--patch_storage', api.vars.patch_storage, ]) - # Override DOCKER_CONFIG set by Kitchen. - env = {'DOCKER_CONFIG': '/home/chrome-bot/.docker'} - with api.env(env): - api.run( - api.step, - 'Create lottie-web Gold output with Docker', - cmd=cmd) + api.docker.run( + name='Generate LottieWeb Gold output with Docker', + docker_image=DOCKER_IMAGE, + src_dir=checkout_root, + out_dir=out_dir, + script=checkout_root.join(LOTTIECAP_SCRIPT), + args=args, + docker_args=docker_args, + recursive_read=recursive_read, + attempts=3, + ) def GenTests(api): diff --git a/infra/bots/task_drivers/perf_puppeteer_render_skps/perf_puppeteer_render_skps.go b/infra/bots/task_drivers/perf_puppeteer_render_skps/perf_puppeteer_render_skps.go new file mode 100644 index 0000000000000..66fda3c9bdcc8 --- /dev/null +++ b/infra/bots/task_drivers/perf_puppeteer_render_skps/perf_puppeteer_render_skps.go @@ -0,0 +1,349 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// This executable is meant to be a general way to gather perf data using puppeteer. The logic +// (e.g. what bench to run, how to process that particular output) is selected using the ExtraConfig +// part of the task name. +package main + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "math" + "os" + "path/filepath" + "sort" + "strings" + + "go.skia.org/infra/go/exec" + "go.skia.org/infra/go/skerr" + "go.skia.org/infra/go/sklog" + "go.skia.org/infra/task_driver/go/lib/os_steps" + "go.skia.org/infra/task_driver/go/td" +) + +func main() { + var ( + // Required properties for this task. + projectID = flag.String("project_id", "", "ID of the Google Cloud project.") + taskName = flag.String("task_name", "", "Name of the task.") + benchmarkPath = flag.String("benchmark_path", "", "Path to location of the benchmark files (e.g. //tools/perf-puppeteer).") + outputPath = flag.String("output_path", "", "Perf Output will be produced here") + gitHash = flag.String("git_hash", "", "Git hash this data corresponds to") + taskID = flag.String("task_id", "", "task id this data was generated on") + nodeBinPath = flag.String("node_bin_path", "", "Path to the node bin directory (should have npm also). This directory *must* be on the PATH when this executable is called, otherwise, the wrong node or npm version may be found (e.g. the one on the system), even if we are explicitly calling npm with the absolute path.") + + // These flags feed into the perf trace keys associated with the output data. + osTrace = flag.String("os_trace", "", "OS this is running on.") + modelTrace = flag.String("model_trace", "", "Description of host machine.") + cpuOrGPUTrace = flag.String("cpu_or_gpu_trace", "", "If this is a CPU or GPU configuration.") + cpuOrGPUValueTrace = flag.String("cpu_or_gpu_value_trace", "", "The hardware of this CPU/GPU") + + // Flags that may be required for certain configs + canvaskitBinPath = flag.String("canvaskit_bin_path", "", "The location of a canvaskit.js and canvaskit.wasm") + skpsPath = flag.String("skps_path", "", "Path to location of skps.") + + // Debugging flags. + local = flag.Bool("local", false, "True if running locally (as opposed to on the bots)") + outputSteps = flag.String("o", "", "If provided, dump a JSON blob of step data to the given file. Prints to stdout if '-' is given.") + ) + + // Setup. + ctx := td.StartRun(projectID, taskID, taskName, outputSteps, local) + defer td.EndRun(ctx) + + keys := map[string]string{ + "os": *osTrace, + "model": *modelTrace, + perfKeyCpuOrGPU: *cpuOrGPUTrace, + "cpu_or_gpu_value": *cpuOrGPUValueTrace, + } + + outputWithoutResults, err := makePerfObj(*gitHash, *taskID, os.Getenv("SWARMING_BOT_ID"), keys) + if err != nil { + td.Fatal(ctx, skerr.Wrap(err)) + } + // Absolute paths work more consistently than relative paths. + nodeBinAbsPath := getAbsoluteOfRequiredFlag(ctx, *nodeBinPath, "node_bin_path") + benchmarkAbsPath := getAbsoluteOfRequiredFlag(ctx, *benchmarkPath, "benchmark_path") + canvaskitBinAbsPath := getAbsoluteOfRequiredFlag(ctx, *canvaskitBinPath, "canvaskit_bin_path") + skpsAbsPath := getAbsoluteOfRequiredFlag(ctx, *skpsPath, "skps_path") + outputAbsPath := getAbsoluteOfRequiredFlag(ctx, *outputPath, "output_path") + + if err := setup(ctx, benchmarkAbsPath, nodeBinAbsPath); err != nil { + td.Fatal(ctx, skerr.Wrap(err)) + } + + if err := benchSKPs(ctx, outputWithoutResults, benchmarkAbsPath, canvaskitBinAbsPath, skpsAbsPath, nodeBinAbsPath); err != nil { + td.Fatal(ctx, skerr.Wrap(err)) + } + + // outputFile name should be unique between tasks, so as to avoid having duplicate name files + // uploaded to GCS. + outputFile := filepath.Join(outputAbsPath, fmt.Sprintf("perf-%s.json", *taskID)) + if err := processSKPData(ctx, outputWithoutResults, benchmarkAbsPath, outputFile); err != nil { + td.Fatal(ctx, skerr.Wrap(err)) + } +} + +func getAbsoluteOfRequiredFlag(ctx context.Context, nonEmptyPath, flag string) string { + if nonEmptyPath == "" { + td.Fatalf(ctx, "--%s must be specified", flag) + } + absPath, err := filepath.Abs(nonEmptyPath) + if err != nil { + td.Fatal(ctx, skerr.Wrap(err)) + } + return absPath +} + +const perfKeyCpuOrGPU = "cpu_or_gpu" + +func makePerfObj(gitHash, taskID, machineID string, keys map[string]string) (perfJSONFormat, error) { + rv := perfJSONFormat{} + if gitHash == "" { + return rv, skerr.Fmt("Must provide --git_hash") + } + if taskID == "" { + return rv, skerr.Fmt("Must provide --task_id") + } + rv.GitHash = gitHash + rv.SwarmingTaskID = taskID + rv.SwarmingMachineID = machineID + rv.Key = keys + rv.Key["arch"] = "wasm" + rv.Key["browser"] = "Chromium" + rv.Key["configuration"] = "Release" + rv.Key["extra_config"] = "RenderSKP" + rv.Key["binary"] = "CanvasKit" + rv.Results = map[string]map[string]perfResult{} + return rv, nil +} + +func setup(ctx context.Context, benchmarkPath, nodeBinPath string) error { + ctx = td.StartStep(ctx, td.Props("setup").Infra()) + defer td.EndStep(ctx) + + if _, err := exec.RunCwd(ctx, benchmarkPath, filepath.Join(nodeBinPath, "npm"), "ci"); err != nil { + return td.FailStep(ctx, skerr.Wrap(err)) + } + + // This is very important to make sure chrome is not running because we want to run chrome + // with an unlocked framerate (see --disable-frame-rate-limit and --disable-gpu-vsync in + // perf-canvaskit-with-puppeteer.js) and that won't happen if there is already an existing + // chrome instance running when we try to run puppeteer. killall will return an error (e.g. + // a non-zero error code) if there isn't already a chrome instance running. We can safely + // ignore that error as we never expect there to be chrome running. + _, _ = exec.RunSimple(ctx, "killall chrome") + + if err := os.MkdirAll(filepath.Join(benchmarkPath, "out"), 0777); err != nil { + return td.FailStep(ctx, skerr.Wrap(err)) + } + return nil +} + +// benchSKPs serves skps from a folder and runs the RenderSKPs benchmark on each of them +// individually. The benchmark is run N times to reduce the noise of the resulting data. +// The output for each will be a JSON file in $benchmarkPath/out/ corresponding to the skp name +// and the iteration it was. +func benchSKPs(ctx context.Context, perf perfJSONFormat, benchmarkPath, canvaskitBinPath, skpsPath, nodeBinPath string) error { + ctx = td.StartStep(ctx, td.Props("perf skps in "+skpsPath)) + defer td.EndStep(ctx) + + // We expect the skpsPath to a directory with skp files in it. + var skpFiles []string + err := td.Do(ctx, td.Props("locate skpfiles"), func(ctx context.Context) error { + return filepath.Walk(skpsPath, func(path string, info os.FileInfo, _ error) error { + if path == skpsPath { + return nil + } + if info.IsDir() { + return filepath.SkipDir + } + skpFiles = append(skpFiles, path) + return nil + }) + }) + if err != nil { + return td.FailStep(ctx, skerr.Wrap(err)) + } + + sklog.Infof("Identified %d skp files to benchmark", len(skpFiles)) + + for _, skp := range skpFiles { + name := filepath.Base(skp) + err = td.Do(ctx, td.Props(fmt.Sprintf("Benchmark %s", name)), func(ctx context.Context) error { + // See comment in setup about why we specify the absolute path for node. + args := []string{filepath.Join(nodeBinPath, "node"), + "perf-canvaskit-with-puppeteer", + "--bench_html", "render-skp.html", + "--canvaskit_js", filepath.Join(canvaskitBinPath, "canvaskit.js"), + "--canvaskit_wasm", filepath.Join(canvaskitBinPath, "canvaskit.wasm"), + "--input_skp", skp, + "--output", filepath.Join(benchmarkPath, "out", name+".json"), + } + if perf.Key[perfKeyCpuOrGPU] != "CPU" { + args = append(args, "--use_gpu") + } + _, err := exec.RunCwd(ctx, benchmarkPath, args...) + if err != nil { + return skerr.Wrap(err) + } + return nil + }) + if err != nil { + return td.FailStep(ctx, skerr.Wrap(err)) + } + } + return nil +} + +// TODO(kjlubick,jcgregorio) Could this code directly refer to the struct in Perf? +type perfJSONFormat struct { + GitHash string `json:"gitHash"` + SwarmingTaskID string `json:"swarming_task_id"` + SwarmingMachineID string `json:"swarming_machine_id"` + Key map[string]string `json:"key"` + // Maps bench name -> "config" -> result key -> value + Results map[string]map[string]perfResult `json:"results"` +} + +type perfResult map[string]float32 + +// processSKPData looks at the result of benchSKPs, computes summary data on +// those files and adds them as Results into the provided perf object. The perf object is then +// written in JSON format to outputPath. +func processSKPData(ctx context.Context, perf perfJSONFormat, benchmarkPath, outputFilePath string) error { + perfJSONPath := filepath.Join(benchmarkPath, "out") + ctx = td.StartStep(ctx, td.Props("process perf output "+perfJSONPath)) + defer td.EndStep(ctx) + + var jsonInputs []string + err := td.Do(ctx, td.Props("locate input JSON files"), func(ctx context.Context) error { + return filepath.Walk(perfJSONPath, func(path string, info os.FileInfo, _ error) error { + if strings.HasSuffix(path, ".json") { + jsonInputs = append(jsonInputs, path) + return nil + } + return nil + }) + }) + if err != nil { + return td.FailStep(ctx, skerr.Wrap(err)) + } + + sklog.Infof("Identified %d JSON inputs to process", len(jsonInputs)) + + for _, skp := range jsonInputs { + err = td.Do(ctx, td.Props("Process "+skp), func(ctx context.Context) error { + name := strings.TrimSuffix(filepath.Base(skp), ".json") + config := "software" + if perf.Key[perfKeyCpuOrGPU] != "CPU" { + config = "webgl2" + } + + b, err := os_steps.ReadFile(ctx, skp) + if err != nil { + return skerr.Wrap(err) + } + metrics, err := parseSKPData(b) + if err != nil { + return skerr.Wrap(err) + } + + perf.Results[name] = map[string]perfResult{ + config: metrics, + } + return nil + }) + if err != nil { + return td.FailStep(ctx, skerr.Wrap(err)) + } + } + + err = td.Do(ctx, td.Props("Writing perf JSON file to "+outputFilePath), func(ctx context.Context) error { + if err := os.MkdirAll(filepath.Dir(outputFilePath), 0777); err != nil { + return skerr.Wrap(err) + } + b, err := json.MarshalIndent(perf, "", " ") + if err != nil { + return skerr.Wrap(err) + } + if err = ioutil.WriteFile(outputFilePath, b, 0666); err != nil { + return skerr.Wrap(err) + } + return nil + }) + if err != nil { + return td.FailStep(ctx, skerr.Wrap(err)) + } + + return nil +} + +type skpPerfData struct { + WithoutFlushMS []float32 `json:"without_flush_ms"` + WithFlushMS []float32 `json:"with_flush_ms"` + TotalFrameMS []float32 `json:"total_frame_ms"` + SKPLoadMS float32 `json:"skp_load_ms"` +} + +func parseSKPData(b []byte) (perfResult, error) { + var data skpPerfData + if err := json.Unmarshal(b, &data); err != nil { + return nil, skerr.Wrap(err) + } + + avgWithoutFlushMS, medianWithoutFlushMS, stddevWithoutFlushMS := summarize(data.WithoutFlushMS) + avgWithFlushMS, medianWithFlushMS, stddevWithFlushMS := summarize(data.WithFlushMS) + avgTotalFrameMS, medianTotalFrameMS, stddevTotalFrameMS := summarize(data.TotalFrameMS) + + return map[string]float32{ + "avg_render_without_flush_ms": avgWithoutFlushMS, + "median_render_without_flush_ms": medianWithoutFlushMS, + "stddev_render_without_flush_ms": stddevWithoutFlushMS, + + "avg_render_with_flush_ms": avgWithFlushMS, + "median_render_with_flush_ms": medianWithFlushMS, + "stddev_render_with_flush_ms": stddevWithFlushMS, + + "avg_render_frame_ms": avgTotalFrameMS, + "median_render_frame_ms": medianTotalFrameMS, + "stddev_render_frame_ms": stddevTotalFrameMS, + + "skp_load_ms": data.SKPLoadMS, + }, nil +} + +func summarize(input []float32) (float32, float32, float32) { + // Make a copy of the data so we don't mutate the order of the original + sorted := make([]float32, len(input)) + copy(sorted, input) + sort.Slice(sorted, func(i, j int) bool { + return sorted[i] < sorted[j] + }) + + avg := computeAverage(sorted) + variance := float32(0) + for i := 0; i < len(sorted); i++ { + variance += (sorted[i] - avg) * (sorted[i] - avg) + } + stddev := float32(math.Sqrt(float64(variance / float32(len(sorted))))) + + medIdx := (len(sorted) * 50) / 100 + + return avg, sorted[medIdx], stddev +} + +func computeAverage(d []float32) float32 { + avg := float32(0) + for i := 0; i < len(d); i++ { + avg += d[i] + } + avg /= float32(len(d)) + return avg +} diff --git a/infra/bots/task_drivers/perf_puppeteer_render_skps/perf_puppeteer_render_skps_test.go b/infra/bots/task_drivers/perf_puppeteer_render_skps/perf_puppeteer_render_skps_test.go new file mode 100644 index 0000000000000..c7583e7a3497d --- /dev/null +++ b/infra/bots/task_drivers/perf_puppeteer_render_skps/perf_puppeteer_render_skps_test.go @@ -0,0 +1,248 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package main + +import ( + "context" + "io/ioutil" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "go.skia.org/infra/go/exec" + "go.skia.org/infra/go/testutils" + "go.skia.org/infra/task_driver/go/td" +) + +func TestSetup_NPMInitializedChromeStoppedBenchmarkOutCreated(t *testing.T) { + benchmarkPath, err := ioutil.TempDir("", "benchmark") + require.NoError(t, err) + defer testutils.RemoveAll(t, benchmarkPath) + + const fakeNodeBinPath = "/fake/path/to/node/bin" + + res := td.RunTestSteps(t, false, func(ctx context.Context) error { + mock := exec.CommandCollector{} + ctx = td.WithExecRunFn(ctx, mock.Run) + err := setup(ctx, benchmarkPath, fakeNodeBinPath) + if err != nil { + assert.NoError(t, err) + return err + } + cmds := mock.Commands() + require.Len(t, cmds, 2) + cmd := cmds[0] + assert.Equal(t, "/fake/path/to/node/bin/npm", cmd.Name) + assert.Equal(t, []string{"ci"}, cmd.Args) + + cmd = cmds[1] + assert.Equal(t, "killall", cmd.Name) + assert.Equal(t, []string{"chrome"}, cmd.Args) + return nil + }) + require.Empty(t, res.Errors) + require.Empty(t, res.Exceptions) + + fi, err := os.Stat(filepath.Join(benchmarkPath, "out")) + require.NoError(t, err) + assert.True(t, fi.IsDir()) +} + +func TestBenchSKPs_CPUHasNoUseGPUFlag(t *testing.T) { + skps, err := ioutil.TempDir("", "skps") + require.NoError(t, err) + defer testutils.RemoveAll(t, skps) + + require.NoError(t, ioutil.WriteFile(filepath.Join(skps, "first_skp"), []byte("doesnt matter"), 0777)) + + const fakeNodeBinPath = "/fake/path/to/node/bin" + const fakeCanvasKitPath = "/fake/path/to/canvaskit" + const fakeBenchmarkPath = "/fake/path/to/perf-puppeteer" + + perfObj := perfJSONFormat{ + Key: map[string]string{ + perfKeyCpuOrGPU: "CPU", + }, + } + + res := td.RunTestSteps(t, false, func(ctx context.Context) error { + mock := exec.CommandCollector{} + ctx = td.WithExecRunFn(ctx, mock.Run) + err := benchSKPs(ctx, perfObj, fakeBenchmarkPath, fakeCanvasKitPath, skps, fakeNodeBinPath) + if err != nil { + assert.NoError(t, err) + return err + } + require.Len(t, mock.Commands(), 1) + cmd := mock.Commands()[0] + assert.Equal(t, "/fake/path/to/node/bin/node", cmd.Name) + assert.Equal(t, []string{"perf-canvaskit-with-puppeteer", + "--bench_html", "render-skp.html", + "--canvaskit_js", "/fake/path/to/canvaskit/canvaskit.js", + "--canvaskit_wasm", "/fake/path/to/canvaskit/canvaskit.wasm", + "--input_skp", filepath.Join(skps, "first_skp"), + "--output", "/fake/path/to/perf-puppeteer/out/first_skp.json"}, cmd.Args) + return nil + }) + require.Empty(t, res.Errors) + require.Empty(t, res.Exceptions) +} + +func TestBenchSKPs_GPUHasFlag(t *testing.T) { + skps, err := ioutil.TempDir("", "skps") + require.NoError(t, err) + defer testutils.RemoveAll(t, skps) + + require.NoError(t, ioutil.WriteFile(filepath.Join(skps, "first_skp"), []byte("doesnt matter"), 0777)) + + const fakeNodeBinPath = "/fake/path/to/node/bin" + const fakeCanvasKitPath = "/fake/path/to/canvaskit" + const fakeBenchmarkPath = "/fake/path/to/perf-puppeteer" + + perfObj := perfJSONFormat{ + Key: map[string]string{ + perfKeyCpuOrGPU: "GPU", + }, + } + + res := td.RunTestSteps(t, false, func(ctx context.Context) error { + mock := exec.CommandCollector{} + ctx = td.WithExecRunFn(ctx, mock.Run) + err := benchSKPs(ctx, perfObj, fakeBenchmarkPath, fakeCanvasKitPath, skps, fakeNodeBinPath) + if err != nil { + assert.NoError(t, err) + return err + } + require.Len(t, mock.Commands(), 1) + cmd := mock.Commands()[0] + assert.Equal(t, "/fake/path/to/node/bin/node", cmd.Name) + assert.Equal(t, []string{"perf-canvaskit-with-puppeteer", + "--bench_html", "render-skp.html", + "--canvaskit_js", "/fake/path/to/canvaskit/canvaskit.js", + "--canvaskit_wasm", "/fake/path/to/canvaskit/canvaskit.wasm", + "--input_skp", filepath.Join(skps, "first_skp"), + "--output", "/fake/path/to/perf-puppeteer/out/first_skp.json", + "--use_gpu"}, cmd.Args) + return nil + }) + require.Empty(t, res.Errors) + require.Empty(t, res.Exceptions) +} + +func TestProcessSkottieFramesData_GPUTwoInputsGetSummarizedAndCombined(t *testing.T) { + input, err := ioutil.TempDir("", "inputs") + require.NoError(t, err) + defer testutils.RemoveAll(t, input) + err = writeFilesToDisk(filepath.Join(input, "out"), map[string]string{ + "first_skp.json": firstSKP, + "second_skp.json": secondSKP, + }) + require.NoError(t, err) + output, err := ioutil.TempDir("", "perf") + require.NoError(t, err) + defer testutils.RemoveAll(t, output) + + // These are based off of realistic values. + keys := map[string]string{ + "os": "Ubuntu18", + "model": "Golo", + perfKeyCpuOrGPU: "GPU", + "cpu_or_gpu_value": "QuadroP400", + } + + perfObj, err := makePerfObj(someGitHash, someTaskID, someMachineID, keys) + require.NoError(t, err) + + outputFile := filepath.Join(output, "perf-taskid1352.json") + res := td.RunTestSteps(t, false, func(ctx context.Context) error { + return processSKPData(ctx, perfObj, input, outputFile) + }) + require.Empty(t, res.Errors) + require.Empty(t, res.Exceptions) + + b, err := ioutil.ReadFile(outputFile) + require.NoError(t, err) + + assert.Equal(t, `{ + "gitHash": "032631e490db494128e0610a19adce4cab9706d1", + "swarming_task_id": "4bdd43ed7c906c11", + "swarming_machine_id": "skia-e-gce-203", + "key": { + "arch": "wasm", + "binary": "CanvasKit", + "browser": "Chromium", + "configuration": "Release", + "cpu_or_gpu": "GPU", + "cpu_or_gpu_value": "QuadroP400", + "extra_config": "RenderSKP", + "model": "Golo", + "os": "Ubuntu18" + }, + "results": { + "first_skp": { + "webgl2": { + "avg_render_frame_ms": 150.065, + "avg_render_with_flush_ms": 133.91167, + "avg_render_without_flush_ms": 45.398335, + "median_render_frame_ms": 143.71, + "median_render_with_flush_ms": 125.185, + "median_render_without_flush_ms": 37.445, + "skp_load_ms": 1.715, + "stddev_render_frame_ms": 15.210527, + "stddev_render_with_flush_ms": 15.47429, + "stddev_render_without_flush_ms": 21.69691 + } + }, + "second_skp": { + "webgl2": { + "avg_render_frame_ms": 316.7317, + "avg_render_with_flush_ms": 233.91167, + "avg_render_without_flush_ms": 85.39834, + "median_render_frame_ms": 243.71, + "median_render_with_flush_ms": 225.185, + "median_render_without_flush_ms": 67.445, + "skp_load_ms": 3.715, + "stddev_render_frame_ms": 109.164635, + "stddev_render_with_flush_ms": 15.474287, + "stddev_render_without_flush_ms": 43.27188 + } + } + } +}`, string(b)) +} + +func writeFilesToDisk(path string, fileNamesToContent map[string]string) error { + if err := os.MkdirAll(path, 0777); err != nil { + return err + } + for name, content := range fileNamesToContent { + if err := ioutil.WriteFile(filepath.Join(path, name), []byte(content), 0666); err != nil { + return err + } + } + return nil +} + +const ( + someGitHash = "032631e490db494128e0610a19adce4cab9706d1" + someTaskID = "4bdd43ed7c906c11" + someMachineID = "skia-e-gce-203" +) + +const firstSKP = `{ + "without_flush_ms": [23.71, 37.445, 75.04], + "with_flush_ms": [125.185, 120.895, 155.655], + "total_frame_ms": [143.71, 135.445, 171.04], + "skp_load_ms":1.715 +}` + +const secondSKP = `{ + "without_flush_ms": [43.71, 67.445, 145.04], + "with_flush_ms": [225.185, 220.895, 255.655], + "total_frame_ms": [243.71, 235.445, 471.04], + "skp_load_ms":3.715 +}` diff --git a/infra/bots/task_drivers/perf_puppeteer_skottie_frames/perf_puppeteer_skottie_frames.go b/infra/bots/task_drivers/perf_puppeteer_skottie_frames/perf_puppeteer_skottie_frames.go index e901d83e93019..cb6284f0c2dc8 100644 --- a/infra/bots/task_drivers/perf_puppeteer_skottie_frames/perf_puppeteer_skottie_frames.go +++ b/infra/bots/task_drivers/perf_puppeteer_skottie_frames/perf_puppeteer_skottie_frames.go @@ -74,7 +74,6 @@ func main() { lottiesAbsPath := getAbsoluteOfRequiredFlag(ctx, *lottiesPath, "lotties_path") outputAbsPath := getAbsoluteOfRequiredFlag(ctx, *outputPath, "output_path") - // Run the infra tests. if err := setup(ctx, benchmarkAbsPath, nodeBinAbsPath); err != nil { td.Fatal(ctx, skerr.Wrap(err)) } diff --git a/infra/bots/task_drivers/perf_puppeteer_skottie_frames/perf_puppeteer_skottie_frames_test.go b/infra/bots/task_drivers/perf_puppeteer_skottie_frames/perf_puppeteer_skottie_frames_test.go index 624406a374a43..dbcbf9a947160 100644 --- a/infra/bots/task_drivers/perf_puppeteer_skottie_frames/perf_puppeteer_skottie_frames_test.go +++ b/infra/bots/task_drivers/perf_puppeteer_skottie_frames/perf_puppeteer_skottie_frames_test.go @@ -7,7 +7,6 @@ package main import ( "context" "io/ioutil" - "math/rand" "os" "path/filepath" "testing" @@ -15,12 +14,14 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.skia.org/infra/go/exec" + "go.skia.org/infra/go/testutils" "go.skia.org/infra/task_driver/go/td" ) func TestSetup_NPMInitializedBenchmarkOutCreated(t *testing.T) { benchmarkPath, err := ioutil.TempDir("", "benchmark") require.NoError(t, err) + defer testutils.RemoveAll(t, benchmarkPath) const fakeNodeBinPath = "/fake/path/to/node/bin" @@ -49,6 +50,7 @@ func TestSetup_NPMInitializedBenchmarkOutCreated(t *testing.T) { func TestBenchSkottieFrames_CPUHasNoUseGPUFlag(t *testing.T) { lotties, err := ioutil.TempDir("", "lotties") require.NoError(t, err) + defer testutils.RemoveAll(t, lotties) require.NoError(t, os.MkdirAll(filepath.Join(lotties, "animation_1"), 0777)) @@ -89,6 +91,7 @@ func TestBenchSkottieFrames_CPUHasNoUseGPUFlag(t *testing.T) { func TestBenchSkottieFrames_GPUHasFlag(t *testing.T) { lotties, err := ioutil.TempDir("", "lotties") require.NoError(t, err) + defer testutils.RemoveAll(t, lotties) require.NoError(t, os.MkdirAll(filepath.Join(lotties, "animation_1"), 0777)) @@ -134,6 +137,7 @@ func TestBenchSkottieFrames_GPUHasFlag(t *testing.T) { func TestProcessSkottieFramesData_CPUTwoInputsGetSummarizedAndCombined(t *testing.T) { input, err := ioutil.TempDir("", "inputs") require.NoError(t, err) + defer testutils.RemoveAll(t, input) err = writeFilesToDisk(filepath.Join(input, "out"), map[string]string{ "first_animation.json": skottieFramesSampleOne, "second_animation.json": skottieFramesSampleTwo, @@ -141,6 +145,7 @@ func TestProcessSkottieFramesData_CPUTwoInputsGetSummarizedAndCombined(t *testin require.NoError(t, err) output, err := ioutil.TempDir("", "perf") require.NoError(t, err) + defer testutils.RemoveAll(t, output) keys := map[string]string{ "os": "Debian10", @@ -225,6 +230,7 @@ func TestProcessSkottieFramesData_CPUTwoInputsGetSummarizedAndCombined(t *testin func TestProcessSkottieFramesData_GPUTwoInputsGetSummarizedAndCombined(t *testing.T) { input, err := ioutil.TempDir("", "inputs") require.NoError(t, err) + defer testutils.RemoveAll(t, input) err = writeFilesToDisk(filepath.Join(input, "out"), map[string]string{ "first_animation.json": skottieFramesSampleOne, "second_animation.json": skottieFramesSampleTwo, @@ -232,6 +238,7 @@ func TestProcessSkottieFramesData_GPUTwoInputsGetSummarizedAndCombined(t *testin require.NoError(t, err) output, err := ioutil.TempDir("", "perf") require.NoError(t, err) + defer testutils.RemoveAll(t, output) // These are based off of realistic values. keys := map[string]string{ @@ -250,8 +257,6 @@ func TestProcessSkottieFramesData_GPUTwoInputsGetSummarizedAndCombined(t *testin }) require.Empty(t, res.Errors) - // Re-seed the RNG, so we can get the filename the code wrote to. - rand.Seed(0) b, err := ioutil.ReadFile(outputFile) require.NoError(t, err) diff --git a/infra/bots/tasks.json b/infra/bots/tasks.json index b9504612f11fd..f9ae7f6e88a86 100755 --- a/infra/bots/tasks.json +++ b/infra/bots/tasks.json @@ -1002,14 +1002,14 @@ "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" ] }, - "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { + "Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android": { "tasks": [ - "Upload-Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android" + "Upload-Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android" ] }, - "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { + "Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "tasks": [ - "Upload-Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan" + "Upload-Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan" ] }, "Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { @@ -1147,6 +1147,11 @@ "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit" ] }, + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_RenderSKP": { + "tasks": [ + "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_RenderSKP" + ] + }, "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames": { "tasks": [ "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames" @@ -1262,6 +1267,11 @@ "Upload-Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ] }, + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_RenderSKP": { + "tasks": [ + "Upload-Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_RenderSKP" + ] + }, "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames": { "tasks": [ "Upload-Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames" @@ -1677,6 +1687,11 @@ "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL3_Vulkan" ] }, + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan": { + "tasks": [ + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan" + ] + }, "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads": { "tasks": [ "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads" @@ -1752,6 +1767,11 @@ "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan" ] }, + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan": { + "tasks": [ + "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan" + ] + }, "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan": { "tasks": [ "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan" @@ -1847,6 +1867,11 @@ "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan" ] }, + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan": { + "tasks": [ + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan" + ] + }, "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan": { "tasks": [ "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan" @@ -1882,24 +1907,24 @@ "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" ] }, - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android": { + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android": { "tasks": [ - "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android" + "Upload-Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android" ] }, - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { "tasks": [ - "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan" + "Upload-Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan" ] }, - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android": { "tasks": [ - "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android" + "Upload-Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android" ] }, - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "tasks": [ - "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan" + "Upload-Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan" ] }, "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android": { @@ -2257,6 +2282,16 @@ "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL3_ASAN_Vulkan" ] }, + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN": { + "tasks": [ + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN" + ] + }, + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN_Vulkan": { + "tasks": [ + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN_Vulkan" + ] + }, "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL": { "tasks": [ "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL" @@ -2277,6 +2312,16 @@ "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan" ] }, + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN": { + "tasks": [ + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN" + ] + }, + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN_Vulkan": { + "tasks": [ + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN_Vulkan" + ] + }, "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN": { "tasks": [ "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN" @@ -2373,6 +2418,11 @@ "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal" ] }, + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal": { + "tasks": [ + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal" + ] + }, "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { "tasks": [ "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All" @@ -2398,6 +2448,11 @@ "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts" ] }, + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal": { + "tasks": [ + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal" + ] + }, "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN": { "tasks": [ "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN" @@ -2561,6 +2616,16 @@ "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan" ] }, + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_ASAN": { + "tasks": [ + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_ASAN" + ] + }, + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan": { + "tasks": [ + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan" + ] + }, "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext": { "tasks": [ "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext" @@ -2586,6 +2651,16 @@ "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan" ] }, + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN": { + "tasks": [ + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN" + ] + }, + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN_Vulkan": { + "tasks": [ + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN_Vulkan" + ] + }, "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext": { "tasks": [ "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext" @@ -2904,6 +2979,11 @@ "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE" ] }, + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D": { + "tasks": [ + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D" + ] + }, "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan": { "tasks": [ "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan" @@ -2919,6 +2999,11 @@ "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE" ] }, + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D": { + "tasks": [ + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D" + ] + }, "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan": { "tasks": [ "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan" @@ -2959,6 +3044,11 @@ "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All" ] }, + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D": { + "tasks": [ + "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D" + ] + }, "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "tasks": [ "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan" @@ -2969,6 +3059,11 @@ "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All" ] }, + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D": { + "tasks": [ + "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D" + ] + }, "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "tasks": [ "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" @@ -3004,11 +3099,21 @@ "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs" ] }, + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { + "tasks": [ + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM" + ] + }, "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "tasks": [ "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" ] }, + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM": { + "tasks": [ + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM" + ] + }, "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All": { "tasks": [ "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All" @@ -3024,11 +3129,21 @@ "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All" ] }, + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { + "tasks": [ + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM" + ] + }, "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { "tasks": [ "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All" ] }, + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM": { + "tasks": [ + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM" + ] + }, "Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All": { "tasks": [ "Upload-Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All" @@ -3200,32 +3315,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -3276,22 +3391,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -3346,22 +3461,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -3416,22 +3531,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -3486,22 +3601,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -3556,17 +3671,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/armhf_sysroot", @@ -3636,22 +3751,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -3706,22 +3821,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -3776,22 +3891,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -3846,17 +3961,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/armhf_sysroot", @@ -3926,22 +4041,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -3996,22 +4111,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4066,22 +4181,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4136,22 +4251,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4206,22 +4321,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4276,22 +4391,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4346,22 +4461,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4424,32 +4539,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -4508,32 +4623,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -4584,22 +4699,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4654,22 +4769,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4728,17 +4843,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -4803,22 +4918,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4873,22 +4988,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -4943,22 +5058,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -5013,22 +5128,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -5099,32 +5214,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -5183,17 +5298,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5262,17 +5377,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5341,17 +5456,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5416,17 +5531,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/chromebook_x86_64_gles", @@ -5495,17 +5610,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5574,17 +5689,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5663,17 +5778,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5742,17 +5857,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5821,17 +5936,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5900,17 +6015,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -5984,17 +6099,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6068,17 +6183,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6147,17 +6262,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6226,17 +6341,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6305,17 +6420,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6384,17 +6499,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6463,17 +6578,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6558,32 +6673,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6648,17 +6763,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/chromebook_x86_64_gles", @@ -6727,17 +6842,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6806,17 +6921,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6893,32 +7008,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -6986,17 +7101,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7065,17 +7180,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7144,17 +7259,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7223,17 +7338,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7302,17 +7417,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7381,17 +7496,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7465,17 +7580,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7544,17 +7659,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7623,17 +7738,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7702,17 +7817,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7785,17 +7900,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7864,17 +7979,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -7943,17 +8058,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8022,17 +8137,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8101,17 +8216,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8180,17 +8295,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8259,17 +8374,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8338,17 +8453,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8417,17 +8532,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8496,17 +8611,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8575,17 +8690,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8654,17 +8769,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8733,17 +8848,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8812,17 +8927,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8891,17 +9006,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -8978,37 +9093,37 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -9067,17 +9182,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/chromebook_x86_64_gles", @@ -9147,17 +9262,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/chromebook_x86_64_gles", @@ -9231,17 +9346,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9318,17 +9433,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9397,22 +9512,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_darwin", "path": "android_ndk_darwin", - "version": "version:9" + "version": "version:10" } ], "command": [ @@ -9474,17 +9589,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9561,17 +9676,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9648,17 +9763,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9735,17 +9850,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9822,17 +9937,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9909,17 +10024,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -9991,17 +10106,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10073,17 +10188,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10167,32 +10282,32 @@ { "name": "infra/3pp/tools/git/mac-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10263,17 +10378,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10345,17 +10460,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10427,17 +10542,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10521,32 +10636,32 @@ { "name": "infra/3pp/tools/git/mac-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10617,17 +10732,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10699,17 +10814,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10781,17 +10896,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/mac_toolchain/${platform}", @@ -10860,17 +10975,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -10936,17 +11051,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11012,17 +11127,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11088,17 +11203,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11164,22 +11279,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/android_ndk_windows", "path": "n", - "version": "version:10" + "version": "version:11" } ], "command": [ @@ -11239,17 +11354,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11315,17 +11430,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11391,17 +11506,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11467,17 +11582,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11543,17 +11658,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11619,17 +11734,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11695,17 +11810,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11771,17 +11886,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11847,17 +11962,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -11928,17 +12043,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -12004,17 +12119,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -12080,17 +12195,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -12156,17 +12271,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -12232,17 +12347,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -12308,17 +12423,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -12384,17 +12499,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -12460,17 +12575,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_win", @@ -12536,17 +12651,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -12607,17 +12722,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -12678,17 +12793,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -12749,17 +12864,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -12820,17 +12935,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -12891,17 +13006,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -12962,17 +13077,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -13033,17 +13148,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -13104,17 +13219,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -13175,17 +13290,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -13246,17 +13361,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -13317,17 +13432,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -13388,17 +13503,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -13459,17 +13574,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -13537,32 +13652,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -13634,32 +13749,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -13731,32 +13846,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -13828,32 +13943,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -13925,32 +14040,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -14022,32 +14137,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -14119,32 +14234,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -14216,32 +14331,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -14313,32 +14428,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/bloaty", @@ -14447,32 +14562,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/go", @@ -14537,17 +14652,17 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/go", @@ -14625,7 +14740,7 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build", @@ -14635,27 +14750,27 @@ { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -14715,32 +14830,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -14803,17 +14918,17 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/go", @@ -14853,22 +14968,22 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -14927,32 +15042,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ccache_linux", @@ -15026,17 +15141,17 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -15111,17 +15226,17 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -15204,7 +15319,7 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/gsutil", @@ -15214,27 +15329,27 @@ { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/go", @@ -15312,7 +15427,7 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/gsutil", @@ -15322,27 +15437,27 @@ { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/go_win", @@ -15393,7 +15508,7 @@ { "name": "skia/bots/android_ndk_linux", "path": "android_ndk_linux", - "version": "version:15" + "version": "version:16" } ], "command": [ @@ -15441,7 +15556,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" } ], "command": [ @@ -15551,17 +15666,17 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -15631,17 +15746,17 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -15712,17 +15827,17 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -15804,32 +15919,32 @@ { "name": "infra/3pp/tools/git/linux-amd64", "path": "cipd_bin_packages", - "version": "version:2.27.0-rc2.chromium.6" + "version": "version:2.27.0.chromium.6" }, { "name": "infra/tools/git/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/git-credential-luci/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/go", @@ -15882,17 +15997,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -15949,17 +16064,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/lottie-samples", @@ -16021,17 +16136,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16088,17 +16203,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16155,17 +16270,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16222,17 +16337,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16289,17 +16404,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16356,17 +16471,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16423,17 +16538,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16490,17 +16605,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16557,17 +16672,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16624,17 +16739,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/text_blob_traces", @@ -16696,17 +16811,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/text_blob_traces", @@ -16768,17 +16883,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16835,17 +16950,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16902,17 +17017,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -16969,17 +17084,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17036,17 +17151,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17103,17 +17218,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/text_blob_traces", @@ -17175,17 +17290,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17242,17 +17357,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/text_blob_traces", @@ -17314,17 +17429,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17381,17 +17496,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17448,17 +17563,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17515,17 +17630,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17582,17 +17697,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17649,17 +17764,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17715,17 +17830,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17781,17 +17896,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17847,17 +17962,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17914,17 +18029,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -17980,17 +18095,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18047,17 +18162,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18114,17 +18229,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18181,17 +18296,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18248,17 +18363,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18315,17 +18430,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18371,7 +18486,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { + "Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -18382,17 +18497,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18401,7 +18516,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android\",\"do_upload\":\"true\",\"nanobench_flags\":\"[\\\"nanobench\\\",\\\"--pre_log\\\",\\\"--gpuStatsDump\\\",\\\"true\\\",\\\"--scales\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--match\\\",\\\"~blurroundrect\\\",\\\"~patch_grid\\\",\\\"~desk_carsvg\\\",\\\"~inc0.gif\\\",\\\"~inc1.gif\\\",\\\"~incInterlaced.gif\\\",\\\"~inc0.jpg\\\",\\\"~incGray.jpg\\\",\\\"~inc0.wbmp\\\",\\\"~inc1.wbmp\\\",\\\"~inc0.webp\\\",\\\"~inc1.webp\\\",\\\"~inc0.ico\\\",\\\"~inc1.ico\\\",\\\"~inc0.png\\\",\\\"~inc1.png\\\",\\\"~inc2.png\\\",\\\"~inc12.png\\\",\\\"~inc13.png\\\",\\\"~inc14.png\\\",\\\"~inc0.webp\\\",\\\"~inc1.webp\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel4\\\",\\\"os\\\",\\\"Android\\\"]\",\"nanobench_properties\":\"{\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\"}\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android\",\"do_upload\":\"true\",\"nanobench_flags\":\"[\\\"nanobench\\\",\\\"--pre_log\\\",\\\"--gpuStatsDump\\\",\\\"true\\\",\\\"--scales\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--match\\\",\\\"~blurroundrect\\\",\\\"~patch_grid\\\",\\\"~desk_carsvg\\\",\\\"~inc0.gif\\\",\\\"~inc1.gif\\\",\\\"~incInterlaced.gif\\\",\\\"~inc0.jpg\\\",\\\"~incGray.jpg\\\",\\\"~inc0.wbmp\\\",\\\"~inc1.wbmp\\\",\\\"~inc0.webp\\\",\\\"~inc1.webp\\\",\\\"~inc0.ico\\\",\\\"~inc1.ico\\\",\\\"~inc0.png\\\",\\\"~inc1.png\\\",\\\"~inc2.png\\\",\\\"~inc12.png\\\",\\\"~inc13.png\\\",\\\"~inc14.png\\\",\\\"~inc0.webp\\\",\\\"~inc1.webp\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel4XL\\\",\\\"os\\\",\\\"Android\\\"]\",\"nanobench_properties\":\"{\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\"}\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -18413,7 +18528,7 @@ ], "dimensions": [ "device_os:QD1A.190821.011.C4", - "device_type:flame", + "device_type:coral", "os:Android", "pool:Skia" ], @@ -18438,7 +18553,7 @@ "perf" ] }, - "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { + "Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -18449,17 +18564,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18468,7 +18583,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "perf", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"do_upload\":\"true\",\"nanobench_flags\":\"[\\\"nanobench\\\",\\\"--pre_log\\\",\\\"--gpuStatsDump\\\",\\\"true\\\",\\\"--scales\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--match\\\",\\\"~blurroundrect\\\",\\\"~patch_grid\\\",\\\"~desk_carsvg\\\",\\\"~inc0.gif\\\",\\\"~inc1.gif\\\",\\\"~incInterlaced.gif\\\",\\\"~inc0.jpg\\\",\\\"~incGray.jpg\\\",\\\"~inc0.wbmp\\\",\\\"~inc1.wbmp\\\",\\\"~inc0.webp\\\",\\\"~inc1.webp\\\",\\\"~inc0.ico\\\",\\\"~inc1.ico\\\",\\\"~inc0.png\\\",\\\"~inc1.png\\\",\\\"~inc2.png\\\",\\\"~inc12.png\\\",\\\"~inc13.png\\\",\\\"~inc14.png\\\",\\\"~inc0.webp\\\",\\\"~inc1.webp\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel4\\\",\\\"os\\\",\\\"Android\\\"]\",\"nanobench_properties\":\"{\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\"}\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"do_upload\":\"true\",\"nanobench_flags\":\"[\\\"nanobench\\\",\\\"--pre_log\\\",\\\"--gpuStatsDump\\\",\\\"true\\\",\\\"--scales\\\",\\\"1.0\\\",\\\"1.1\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--match\\\",\\\"~blurroundrect\\\",\\\"~patch_grid\\\",\\\"~desk_carsvg\\\",\\\"~inc0.gif\\\",\\\"~inc1.gif\\\",\\\"~incInterlaced.gif\\\",\\\"~inc0.jpg\\\",\\\"~incGray.jpg\\\",\\\"~inc0.wbmp\\\",\\\"~inc1.wbmp\\\",\\\"~inc0.webp\\\",\\\"~inc1.webp\\\",\\\"~inc0.ico\\\",\\\"~inc1.ico\\\",\\\"~inc0.png\\\",\\\"~inc1.png\\\",\\\"~inc2.png\\\",\\\"~inc12.png\\\",\\\"~inc13.png\\\",\\\"~inc14.png\\\",\\\"~inc0.webp\\\",\\\"~inc1.webp\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel4XL\\\",\\\"os\\\",\\\"Android\\\"]\",\"nanobench_properties\":\"{\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\"}\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"perf\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -18480,7 +18595,7 @@ ], "dimensions": [ "device_os:QD1A.190821.011.C4", - "device_type:flame", + "device_type:coral", "os:Android", "pool:Skia" ], @@ -18516,17 +18631,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18583,17 +18698,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18650,17 +18765,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18717,17 +18832,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18784,17 +18899,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18851,17 +18966,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18918,17 +19033,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -18985,17 +19100,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -19010,7 +19125,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19069,17 +19184,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -19094,7 +19209,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19153,17 +19268,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -19173,7 +19288,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19232,17 +19347,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -19252,7 +19367,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19311,17 +19426,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -19331,7 +19446,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19390,17 +19505,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -19410,7 +19525,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19469,17 +19584,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/lottie-samples", @@ -19494,7 +19609,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19553,17 +19668,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -19573,7 +19688,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19632,17 +19747,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -19652,7 +19767,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19710,17 +19825,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -19735,7 +19850,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19793,22 +19908,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -19823,7 +19938,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19881,17 +19996,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -19901,7 +20016,7 @@ { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -19916,7 +20031,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -19974,17 +20089,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -19999,7 +20114,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -20057,17 +20172,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/lottie-samples", @@ -20087,7 +20202,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -20145,22 +20260,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -20175,7 +20290,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -20233,17 +20348,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -20258,7 +20373,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -20316,17 +20431,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -20341,7 +20456,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -20399,17 +20514,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -20464,17 +20579,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -20529,17 +20644,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -20583,12 +20698,83 @@ "perf" ] }, + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_RenderSKP": { + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/node", + "path": "node", + "version": "version:3" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + } + ], + "command": [ + "./perf_puppeteer_render_skps", + "--project_id", + "skia-swarming-bots", + "--git_hash", + "<(REVISION)", + "--task_id", + "<(TASK_ID)", + "--task_name", + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_RenderSKP", + "--canvaskit_bin_path", + "./build", + "--skps_path", + "./skp", + "--node_bin_path", + "./node/node/bin", + "--benchmark_path", + "./tools/perf-canvaskit-puppeteer", + "--output_path", + "perf", + "--os_trace", + "Debian10", + "--model_trace", + "GCE", + "--cpu_or_gpu_trace", + "CPU", + "--cpu_or_gpu_value_trace", + "AVX2", + "--alsologtostderr" + ], + "dependencies": [ + "Build-Debian10-EMCC-wasm-Release-CanvasKit_CPU", + "Housekeeper-PerCommit-BuildTaskDrivers" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "node/node/bin" + ] + }, + "execution_timeout_ns": 1200000000000, + "io_timeout_ns": 1200000000000, + "isolate": "perf_puppeteer.isolate", + "outputs": [ + "perf" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames": { "cipd_packages": [ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/node", @@ -20665,17 +20851,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/lottie-samples", @@ -20695,7 +20881,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -20754,17 +20940,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -20819,17 +21005,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/lottie-samples", @@ -20849,7 +21035,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -20907,17 +21093,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -20927,7 +21113,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -20985,17 +21171,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21005,7 +21191,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21063,17 +21249,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21083,7 +21269,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21141,17 +21327,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21161,7 +21347,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21219,17 +21405,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21239,7 +21425,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21297,17 +21483,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21317,7 +21503,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21375,17 +21561,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21395,7 +21581,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21453,17 +21639,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21473,7 +21659,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21532,17 +21718,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21552,7 +21738,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21611,17 +21797,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21631,7 +21817,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21690,17 +21876,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21710,7 +21896,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21768,17 +21954,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21788,7 +21974,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21846,17 +22032,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -21866,7 +22052,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -21924,17 +22110,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -21949,7 +22135,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22007,17 +22193,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -22027,7 +22213,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22085,17 +22271,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -22110,7 +22296,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22168,17 +22354,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -22188,7 +22374,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22252,22 +22438,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -22277,7 +22463,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22324,12 +22510,82 @@ "perf" ] }, + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_RenderSKP": { + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/node", + "path": "node", + "version": "version:3" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + } + ], + "command": [ + "./perf_puppeteer_render_skps", + "--project_id", + "skia-swarming-bots", + "--git_hash", + "<(REVISION)", + "--task_id", + "<(TASK_ID)", + "--task_name", + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_RenderSKP", + "--canvaskit_bin_path", + "./build", + "--skps_path", + "./skp", + "--node_bin_path", + "./node/node/bin", + "--benchmark_path", + "./tools/perf-canvaskit-puppeteer", + "--output_path", + "perf", + "--os_trace", + "Ubuntu18", + "--model_trace", + "Golo", + "--cpu_or_gpu_trace", + "GPU", + "--cpu_or_gpu_value_trace", + "QuadroP400", + "--alsologtostderr" + ], + "dependencies": [ + "Build-Debian10-EMCC-wasm-Release-CanvasKit", + "Housekeeper-PerCommit-BuildTaskDrivers" + ], + "dimensions": [ + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "node/node/bin" + ] + }, + "execution_timeout_ns": 1200000000000, + "io_timeout_ns": 1200000000000, + "isolate": "perf_puppeteer.isolate", + "outputs": [ + "perf" + ], + "service_account": "skia-external-compile-tasks@skia-swarming-bots.iam.gserviceaccount.com" + }, "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames": { "cipd_packages": [ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/node", @@ -22405,17 +22661,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/lottie-samples", @@ -22435,7 +22691,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22493,17 +22749,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/lottie-samples", @@ -22523,7 +22779,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22585,17 +22841,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -22605,7 +22861,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22668,17 +22924,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -22688,7 +22944,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22751,17 +23007,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -22771,7 +23027,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22834,17 +23090,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -22854,7 +23110,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -22917,17 +23173,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -22937,7 +23193,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23000,17 +23256,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23020,7 +23276,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23083,17 +23339,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23103,7 +23359,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23166,17 +23422,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23186,7 +23442,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23249,17 +23505,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mskp", @@ -23269,7 +23525,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" } ], "command": [ @@ -23327,17 +23583,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mskp", @@ -23347,7 +23603,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" } ], "command": [ @@ -23405,17 +23661,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23425,7 +23681,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23488,17 +23744,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23508,7 +23764,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23571,17 +23827,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23591,7 +23847,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23654,17 +23910,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23674,7 +23930,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23737,17 +23993,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23757,7 +24013,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23820,17 +24076,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23840,7 +24096,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23903,17 +24159,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -23923,7 +24179,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -23986,17 +24242,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24006,7 +24262,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24069,17 +24325,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24089,7 +24345,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24152,17 +24408,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24172,7 +24428,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24235,17 +24491,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24255,7 +24511,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24318,17 +24574,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24338,7 +24594,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24401,17 +24657,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24421,7 +24677,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24484,17 +24740,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24504,7 +24760,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24567,17 +24823,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24587,7 +24843,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24650,17 +24906,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24670,7 +24926,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24733,17 +24989,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24753,7 +25009,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24816,17 +25072,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24836,7 +25092,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24899,17 +25155,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -24919,7 +25175,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -24982,17 +25238,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -25002,7 +25258,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -25065,17 +25321,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -25085,7 +25341,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -25148,17 +25404,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -25168,7 +25424,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -25232,17 +25488,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -25252,7 +25508,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -25316,17 +25572,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -25336,7 +25592,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -25395,17 +25651,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -25467,17 +25723,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -25539,17 +25795,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -25611,17 +25867,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -25683,17 +25939,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-12.4", @@ -25755,17 +26011,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-12.4", @@ -25827,17 +26083,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -25899,17 +26155,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -25971,17 +26227,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -26043,17 +26299,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -26115,17 +26371,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26134,7 +26390,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Mali400MP2\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"AndroidOne\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bigblurs\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"dropshadowimagefilter\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"filterfastbounds\\\",\\\"gles\\\",\\\"gm\\\",\\\"_\\\",\\\"imageblurtiled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersclipped\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersscaled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imageresizetiled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"matrixconvolution\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"strokedlines\\\",\\\"glesmsaa4\\\",\\\"gm\\\",\\\"_\\\",\\\"imageblurtiled\\\",\\\"glesmsaa4\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersbase\\\",\\\"--match\\\",\\\"~WritePixels\\\",\\\"~PremulAlphaRoundTrip_Gpu\\\",\\\"~ReimportImageTextureWithMipLevels\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Mali400MP2\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"AndroidOne\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bigblurs\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"dropshadowimagefilter\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"filterfastbounds\\\",\\\"gles\\\",\\\"gm\\\",\\\"_\\\",\\\"imageblurtiled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersclipped\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersscaled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imageresizetiled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"matrixconvolution\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"strokedlines\\\",\\\"glesmsaa4\\\",\\\"gm\\\",\\\"_\\\",\\\"imageblurtiled\\\",\\\"glesmsaa4\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersbase\\\",\\\"--match\\\",\\\"~WritePixels\\\",\\\"~PremulAlphaRoundTrip_Gpu\\\",\\\"~ReimportImageTextureWithMipLevels\\\",\\\"~MorphologyFilterRadiusWithMirrorCTM_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -26182,17 +26438,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26201,7 +26457,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Mali400MP2\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"AndroidOne\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bigblurs\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"dropshadowimagefilter\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"filterfastbounds\\\",\\\"gles\\\",\\\"gm\\\",\\\"_\\\",\\\"imageblurtiled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersclipped\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersscaled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imageresizetiled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"matrixconvolution\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"strokedlines\\\",\\\"glesmsaa4\\\",\\\"gm\\\",\\\"_\\\",\\\"imageblurtiled\\\",\\\"glesmsaa4\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersbase\\\",\\\"--match\\\",\\\"~WritePixels\\\",\\\"~PremulAlphaRoundTrip_Gpu\\\",\\\"~ReimportImageTextureWithMipLevels\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Mali400MP2\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"AndroidOne\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bigblurs\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"dropshadowimagefilter\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"filterfastbounds\\\",\\\"gles\\\",\\\"gm\\\",\\\"_\\\",\\\"imageblurtiled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersclipped\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersscaled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"imageresizetiled\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"matrixconvolution\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"strokedlines\\\",\\\"glesmsaa4\\\",\\\"gm\\\",\\\"_\\\",\\\"imageblurtiled\\\",\\\"glesmsaa4\\\",\\\"gm\\\",\\\"_\\\",\\\"imagefiltersbase\\\",\\\"--match\\\",\\\"~WritePixels\\\",\\\"~PremulAlphaRoundTrip_Gpu\\\",\\\"~ReimportImageTextureWithMipLevels\\\",\\\"~MorphologyFilterRadiusWithMirrorCTM_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -26249,17 +26505,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26316,17 +26572,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26383,17 +26639,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26450,17 +26706,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26517,17 +26773,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26584,17 +26840,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26651,17 +26907,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26718,17 +26974,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26785,17 +27041,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26852,17 +27108,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26919,17 +27175,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -26986,17 +27242,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27053,17 +27309,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27120,17 +27376,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27187,17 +27443,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27254,17 +27510,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27321,17 +27577,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27388,17 +27644,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27455,17 +27711,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27522,17 +27778,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27589,17 +27845,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27656,17 +27912,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27723,17 +27979,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27790,17 +28046,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27857,17 +28113,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27925,17 +28181,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -27993,17 +28249,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28060,17 +28316,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28127,17 +28383,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28194,17 +28450,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28262,17 +28518,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28330,17 +28586,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28397,17 +28653,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28464,17 +28720,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28520,7 +28776,7 @@ "test" ] }, - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads": { + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan": { "caches": [ { "name": "vpython", @@ -28531,17 +28787,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28550,7 +28806,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android_Vulkan_NoGPUThreads\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android_OOPRDDL_Vulkan\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -28587,7 +28843,7 @@ "test" ] }, - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -28598,17 +28854,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28617,11 +28873,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android_Vulkan_NoGPUThreads\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android", + "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -28654,7 +28910,7 @@ "test" ] }, - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -28665,17 +28921,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28684,11 +28940,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android_Vulkan", + "Build-Debian10-Clang-arm64-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -28721,7 +28977,7 @@ "test" ] }, - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -28732,17 +28988,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28751,7 +29007,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android_Vulkan_NoGPUThreads\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -28788,7 +29044,7 @@ "test" ] }, - "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android": { + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -28799,17 +29055,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28818,19 +29074,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon800\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraX1\\\",\\\"extra_config\\\",\\\"Android_Vulkan_NoGPUThreads\\\",\\\"model\\\",\\\"NVIDIA_Shield\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Android", + "Build-Debian10-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:M4B30Z_3437181", - "device_type:hammerhead", + "device_os:OPR6.170623.010_3507953_1441.7411", + "device_type:foster", "os:Android", "pool:Skia" ], @@ -28855,7 +29111,7 @@ "test" ] }, - "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { + "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -28866,17 +29122,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28885,11 +29141,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon800\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon800\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Android", + "Build-Debian10-Clang-arm-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -28922,7 +29178,7 @@ "test" ] }, - "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android": { + "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -28933,17 +29189,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -28952,11 +29208,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno330\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"encode-platform\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon800\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Android", + "Build-Debian10-Clang-arm-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -28989,7 +29245,7 @@ "test" ] }, - "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android": { + "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -29000,17 +29256,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29019,11 +29275,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno330\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"encode-platform\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno330\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"encode-platform\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Android", + "Build-Debian10-Clang-arm-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -29056,7 +29312,7 @@ "test" ] }, - "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android": { + "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -29067,17 +29323,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29086,19 +29342,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno418\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5x\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"encode-platform\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno330\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"encode-platform\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android", + "Build-Debian10-Clang-arm-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:OPR6.170623.023", - "device_type:bullhead", + "device_os:M4B30Z_3437181", + "device_type:hammerhead", "os:Android", "pool:Skia" ], @@ -29123,7 +29379,7 @@ "test" ] }, - "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { + "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -29134,17 +29390,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29153,11 +29409,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno418\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5x\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"encode-platform\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno418\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5x\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"encode-platform\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android", + "Build-Debian10-Clang-arm64-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -29190,7 +29446,7 @@ "test" ] }, - "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android": { + "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -29201,17 +29457,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29220,19 +29476,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Tegra3\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus7\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--threads\\\",\\\"0\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno418\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus5x\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"encode-platform\\\",\\\"--noRAW_threading\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Android", + "Build-Debian10-Clang-arm64-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:LMY47V_1836172", - "device_type:grouper", + "device_os:OPR6.170623.023", + "device_type:bullhead", "os:Android", "pool:Skia" ], @@ -29257,7 +29513,7 @@ "test" ] }, - "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { + "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -29268,17 +29524,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29287,11 +29543,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Tegra3\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus7\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--threads\\\",\\\"0\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Tegra3\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus7\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--threads\\\",\\\"0\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Android", + "Build-Debian10-Clang-arm-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -29324,7 +29580,7 @@ "test" ] }, - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android": { + "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -29335,17 +29591,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29354,19 +29610,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Tegra3\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Nexus7\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--threads\\\",\\\"0\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorOptimizationValidationTest\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android", + "Build-Debian10-Clang-arm-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:HUAWEIELE-L29", - "device_type:HWELE", + "device_os:LMY47V_1836172", + "device_type:grouper", "os:Android", "pool:Skia" ], @@ -29391,7 +29647,7 @@ "test" ] }, - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan": { + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -29402,17 +29658,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29421,11 +29677,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_DDL1_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", + "Build-Debian10-Clang-arm64-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -29458,7 +29714,7 @@ "test" ] }, - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan": { + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -29469,17 +29725,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29488,7 +29744,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_DDL3_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_DDL1_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -29525,7 +29781,7 @@ "test" ] }, - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan": { + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -29536,17 +29792,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29555,7 +29811,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_DDL3_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -29592,7 +29848,7 @@ "test" ] }, - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan": { "caches": [ { "name": "vpython", @@ -29603,17 +29859,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29622,11 +29878,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_OOPRDDL_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android", + "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -29659,7 +29915,7 @@ "test" ] }, - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -29670,17 +29926,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29689,11 +29945,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android_Vulkan", + "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -29726,7 +29982,7 @@ "test" ] }, - "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm-Debug-All-Android_ASAN": { + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -29737,17 +29993,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29756,20 +30012,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm-Debug-All-Android_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon821\\\",\\\"extra_config\\\",\\\"Android_ASAN\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--match\\\",\\\"~BadImage\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm-Debug-All-Android_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Android_ASAN", + "Build-Debian10-Clang-arm64-Release-Android", "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateAndroidNDKLinux", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", + "device_os:HUAWEIELE-L29", + "device_type:HWELE", "os:Android", "pool:Skia" ], @@ -29789,12 +30044,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android": { + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -29805,17 +30060,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29824,19 +30079,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon821\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliG76\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"P30\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android", + "Build-Debian10-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", + "device_os:HUAWEIELE-L29", + "device_type:HWELE", "os:Android", "pool:Skia" ], @@ -29861,7 +30116,7 @@ "test" ] }, - "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android_ASAN": { + "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm-Debug-All-Android_ASAN": { "caches": [ { "name": "vpython", @@ -29872,17 +30127,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -29891,11 +30146,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon821\\\",\\\"extra_config\\\",\\\"Android_ASAN\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm-Debug-All-Android_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon821\\\",\\\"extra_config\\\",\\\"Android_ASAN\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--match\\\",\\\"~BadImage\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm-Debug-All-Android_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android_ASAN", + "Build-Debian10-Clang-arm-Debug-Android_ASAN", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateAndroidNDKLinux", "Housekeeper-PerCommit-IsolateSKP", @@ -29929,141 +30184,7 @@ "test" ] }, - "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon821\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" - ], - "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", - "os:Android", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 14400000000000, - "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "test" - ] - }, - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" - ], - "dimensions": [ - "device_os:PPR1.180610.009", - "device_type:sailfish", - "os:Android", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 14400000000000, - "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "test" - ] - }, - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR": { + "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -30074,17 +30195,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30093,7 +30214,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android_CCPR\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--pr\\\",\\\"ccpr\\\",\\\"--cc\\\",\\\"true\\\",\\\"--cachePathMasks\\\",\\\"false\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon821\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -30130,7 +30251,7 @@ "test" ] }, - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan": { + "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android_ASAN": { "caches": [ { "name": "vpython", @@ -30141,17 +30262,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30160,12 +30281,13 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~CopySurface\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon821\\\",\\\"extra_config\\\",\\\"Android_ASAN\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", + "Build-Debian10-Clang-arm64-Debug-Android_ASAN", "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateAndroidNDKLinux", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" @@ -30192,12 +30314,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { + "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -30208,17 +30330,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30227,7 +30349,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon821\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -30264,7 +30386,7 @@ "test" ] }, - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -30275,17 +30397,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30294,11 +30416,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~CopySurface\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android_Vulkan", + "Build-Debian10-Clang-arm64-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -30331,7 +30453,7 @@ "test" ] }, - "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android": { + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR": { "caches": [ { "name": "vpython", @@ -30342,17 +30464,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30361,7 +30483,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno540\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel2XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"glestestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android_CCPR\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--pr\\\",\\\"ccpr\\\",\\\"--cc\\\",\\\"true\\\",\\\"--cachePathMasks\\\",\\\"false\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -30373,7 +30495,7 @@ ], "dimensions": [ "device_os:PPR1.180610.009", - "device_type:taimen", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -30398,7 +30520,7 @@ "test" ] }, - "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan": { + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -30409,17 +30531,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30428,7 +30550,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno540\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel2XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~CopySurface\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -30440,7 +30562,7 @@ ], "dimensions": [ "device_os:PPR1.180610.009", - "device_type:taimen", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -30465,7 +30587,7 @@ "test" ] }, - "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -30476,17 +30598,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30495,7 +30617,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno540\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel2XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"glestestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -30507,7 +30629,7 @@ ], "dimensions": [ "device_os:PPR1.180610.009", - "device_type:taimen", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -30532,7 +30654,7 @@ "test" ] }, - "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -30543,17 +30665,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30562,7 +30684,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno540\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel2XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno530\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~CopySurface\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -30574,7 +30696,7 @@ ], "dimensions": [ "device_os:PPR1.180610.009", - "device_type:taimen", + "device_type:sailfish", "os:Android", "pool:Skia" ], @@ -30599,7 +30721,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android": { + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -30610,17 +30732,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30629,7 +30751,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno540\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel2XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"glestestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -30640,8 +30762,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:taimen", "os:Android", "pool:Skia" ], @@ -30666,7 +30788,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan": { + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -30677,17 +30799,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30696,7 +30818,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_DDL1_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno540\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel2XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -30707,8 +30829,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:taimen", "os:Android", "pool:Skia" ], @@ -30733,7 +30855,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan": { + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -30744,17 +30866,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30763,19 +30885,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_DDL3_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno540\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel2XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"glestestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", + "Build-Debian10-Clang-arm64-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:taimen", "os:Android", "pool:Skia" ], @@ -30800,7 +30922,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan": { + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -30811,17 +30933,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30830,19 +30952,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno540\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel2XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", + "Build-Debian10-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PQ1A.190105.004", - "device_type:blueline", + "device_os:PPR1.180610.009", + "device_type:taimen", "os:Android", "pool:Skia" ], @@ -30867,7 +30989,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -30878,17 +31000,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30897,11 +31019,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android", + "Build-Debian10-Clang-arm64-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -30934,7 +31056,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -30945,17 +31067,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -30964,11 +31086,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_DDL1_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android_Vulkan", + "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", @@ -31001,7 +31123,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android": { + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -31012,17 +31134,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31031,19 +31153,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno615\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel3a\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_DDL3_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android", + "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QP1A.190711.020", - "device_type:sargo", + "device_os:PQ1A.190105.004", + "device_type:blueline", "os:Android", "pool:Skia" ], @@ -31068,7 +31190,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan": { + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan": { "caches": [ { "name": "vpython", @@ -31079,17 +31201,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31098,7 +31220,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno615\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel3a\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_OOPRDDL_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"DDL\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -31109,8 +31231,8 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QP1A.190711.020", - "device_type:sargo", + "device_os:PQ1A.190105.004", + "device_type:blueline", "os:Android", "pool:Skia" ], @@ -31135,7 +31257,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -31146,17 +31268,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31165,19 +31287,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno615\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel3a\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android", + "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QP1A.190711.020", - "device_type:sargo", + "device_os:PQ1A.190105.004", + "device_type:blueline", "os:Android", "pool:Skia" ], @@ -31202,7 +31324,7 @@ "test" ] }, - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -31213,17 +31335,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31232,19 +31354,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno615\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel3a\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android_Vulkan", + "Build-Debian10-Clang-arm64-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QP1A.190711.020", - "device_type:sargo", + "device_os:PQ1A.190105.004", + "device_type:blueline", "os:Android", "pool:Skia" ], @@ -31269,7 +31391,7 @@ "test" ] }, - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android": { + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -31280,17 +31402,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31299,19 +31421,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel4\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel3\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android", + "Build-Debian10-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QD1A.190821.011.C4", - "device_type:flame", + "device_os:PQ1A.190105.004", + "device_type:blueline", "os:Android", "pool:Skia" ], @@ -31336,7 +31458,7 @@ "test" ] }, - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -31347,17 +31469,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31366,19 +31488,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel4\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno615\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel3a\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", + "Build-Debian10-Clang-arm64-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QD1A.190821.011.C4", - "device_type:flame", + "device_os:QP1A.190711.020", + "device_type:sargo", "os:Android", "pool:Skia" ], @@ -31403,7 +31525,7 @@ "test" ] }, - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -31414,17 +31536,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31433,19 +31555,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel4\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno615\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel3a\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android", + "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QD1A.190821.011.C4", - "device_type:flame", + "device_os:QP1A.190711.020", + "device_type:sargo", "os:Android", "pool:Skia" ], @@ -31470,7 +31592,7 @@ "test" ] }, - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -31481,17 +31603,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31500,19 +31622,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel4\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno615\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel3a\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm64-Release-Android_Vulkan", + "Build-Debian10-Clang-arm64-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:QD1A.190821.011.C4", - "device_type:flame", + "device_os:QP1A.190711.020", + "device_type:sargo", "os:Android", "pool:Skia" ], @@ -31537,7 +31659,7 @@ "test" ] }, - "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android": { + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -31548,17 +31670,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31567,19 +31689,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGE8320\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"TecnoSpark3Pro\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Programs\\\",\\\"~ProcessorCloneTest\\\",\\\"~ProcessorOptimizationValidationTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno615\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel3a\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--dontReduceOpsTaskSplitting\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Android", + "Build-Debian10-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.011", - "device_type:TECNO-KB8", + "device_os:QP1A.190711.020", + "device_type:sargo", "os:Android", "pool:Skia" ], @@ -31604,7 +31726,7 @@ "test" ] }, - "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -31615,17 +31737,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31634,19 +31756,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGE8320\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"TecnoSpark3Pro\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Programs\\\",\\\"~ProcessorCloneTest\\\",\\\"~ProcessorOptimizationValidationTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel4XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Android", + "Build-Debian10-Clang-arm64-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_os:PPR1.180610.011", - "device_type:TECNO-KB8", + "device_os:QD1A.190821.011.C4", + "device_type:coral", "os:Android", "pool:Skia" ], @@ -31671,7 +31793,7 @@ "test" ] }, - "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All": { + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -31682,17 +31804,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31701,21 +31823,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT764\\\",\\\"model\\\",\\\"ASUSChromebookFlipC100\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel4XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", + "Build-Debian10-Clang-arm64-Debug-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT764", - "os:ChromeOS", - "pool:Skia", - "release_version:10575.22.0" + "device_os:QD1A.190821.011.C4", + "device_type:coral", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -31738,7 +31860,7 @@ "test" ] }, - "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -31749,17 +31871,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31768,21 +31890,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT764\\\",\\\"model\\\",\\\"ASUSChromebookFlipC100\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"Pixel4XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Chromebook_GLES", + "Build-Debian10-Clang-arm64-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT764", - "os:ChromeOS", - "pool:Skia", - "release_version:10575.22.0" + "device_os:QD1A.190821.011.C4", + "device_type:coral", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -31805,7 +31927,7 @@ "test" ] }, - "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All": { + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -31816,17 +31938,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31835,21 +31957,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraK1\\\",\\\"model\\\",\\\"AcerChromebook13_CB5_311\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno640\\\",\\\"extra_config\\\",\\\"Android_Vulkan\\\",\\\"model\\\",\\\"Pixel4XL\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"~WritePixelsMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", + "Build-Debian10-Clang-arm64-Release-Android_Vulkan", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:TegraK1", - "os:ChromeOS", - "pool:Skia", - "release_version:10575.22.0" + "device_os:QD1A.190821.011.C4", + "device_type:coral", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -31872,7 +31994,7 @@ "test" ] }, - "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { + "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -31883,17 +32005,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31902,21 +32024,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraK1\\\",\\\"model\\\",\\\"AcerChromebook13_CB5_311\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGE8320\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"TecnoSpark3Pro\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Programs\\\",\\\"~ProcessorCloneTest\\\",\\\"~ProcessorOptimizationValidationTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Chromebook_GLES", + "Build-Debian10-Clang-arm-Debug-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:TegraK1", - "os:ChromeOS", - "pool:Skia", - "release_version:10575.22.0" + "device_os:PPR1.180610.011", + "device_type:TECNO-KB8", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -31939,7 +32061,7 @@ "test" ] }, - "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All": { + "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -31950,17 +32072,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -31969,21 +32091,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6250\\\",\\\"model\\\",\\\"AcerChromebookR13Convertible\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~gradients_view_perspective_nodither\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGE8320\\\",\\\"extra_config\\\",\\\"Android\\\",\\\"model\\\",\\\"TecnoSpark3Pro\\\",\\\"os\\\",\\\"Android\\\",\\\"style\\\",\\\"default\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Programs\\\",\\\"~ProcessorCloneTest\\\",\\\"~ProcessorOptimizationValidationTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", + "Build-Debian10-Clang-arm-Release-Android", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:PowerVRGX6250", - "os:ChromeOS", - "pool:Skia", - "release_version:10575.22.0" + "device_os:PPR1.180610.011", + "device_type:TECNO-KB8", + "os:Android", + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -32006,7 +32128,7 @@ "test" ] }, - "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { + "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -32017,17 +32139,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32036,18 +32158,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6250\\\",\\\"model\\\",\\\"AcerChromebookR13Convertible\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~gradients_view_perspective_nodither\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT764\\\",\\\"model\\\",\\\"ASUSChromebookFlipC100\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Chromebook_GLES", + "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:PowerVRGX6250", + "gpu:MaliT764", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -32073,7 +32195,7 @@ "test" ] }, - "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All": { + "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { "caches": [ { "name": "vpython", @@ -32084,17 +32206,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32103,18 +32225,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHDGraphics615\\\",\\\"model\\\",\\\"Pixelbook\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT764\\\",\\\"model\\\",\\\"ASUSChromebookFlipC100\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES_Docker", + "Build-Debian10-Clang-arm-Release-Chromebook_GLES", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:IntelHDGraphics615", + "gpu:MaliT764", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -32140,7 +32262,7 @@ "test" ] }, - "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { + "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -32151,17 +32273,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32170,18 +32292,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHDGraphics615\\\",\\\"model\\\",\\\"Pixelbook\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraK1\\\",\\\"model\\\",\\\"AcerChromebook13_CB5_311\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES_Docker", + "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:IntelHDGraphics615", + "gpu:TegraK1", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -32207,7 +32329,7 @@ "test" ] }, - "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All": { + "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { "caches": [ { "name": "vpython", @@ -32218,17 +32340,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32237,18 +32359,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT604\\\",\\\"model\\\",\\\"SamsungChromebook2012\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"TegraK1\\\",\\\"model\\\",\\\"AcerChromebook13_CB5_311\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", + "Build-Debian10-Clang-arm-Release-Chromebook_GLES", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT604", + "gpu:TegraK1", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -32274,7 +32396,7 @@ "test" ] }, - "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { + "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -32285,17 +32407,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32304,18 +32426,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT604\\\",\\\"model\\\",\\\"SamsungChromebook2012\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6250\\\",\\\"model\\\",\\\"AcerChromebookR13Convertible\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~gradients_view_perspective_nodither\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Chromebook_GLES", + "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT604", + "gpu:PowerVRGX6250", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -32341,7 +32463,7 @@ "test" ] }, - "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All": { + "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { "caches": [ { "name": "vpython", @@ -32352,17 +32474,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32371,18 +32493,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT860\\\",\\\"model\\\",\\\"SamsungChromebookPlus\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6250\\\",\\\"model\\\",\\\"AcerChromebookR13Convertible\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~gradients_view_perspective_nodither\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", + "Build-Debian10-Clang-arm-Release-Chromebook_GLES", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT860", + "gpu:PowerVRGX6250", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -32408,7 +32530,7 @@ "test" ] }, - "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { + "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -32419,17 +32541,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32438,18 +32560,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT860\\\",\\\"model\\\",\\\"SamsungChromebookPlus\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHDGraphics615\\\",\\\"model\\\",\\\"Pixelbook\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-arm-Release-Chromebook_GLES", + "Build-Debian9-Clang-x86_64-Debug-Chromebook_GLES_Docker", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "gpu:MaliT860", + "gpu:IntelHDGraphics615", "os:ChromeOS", "pool:Skia", "release_version:10575.22.0" @@ -32475,7 +32597,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All": { + "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -32486,32 +32608,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:40" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:243" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32520,18 +32627,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHDGraphics615\\\",\\\"model\\\",\\\"Pixelbook\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86-Debug", - "Housekeeper-PerCommit-BundleRecipes" + "Build-Debian9-Clang-x86_64-Release-Chromebook_GLES_Docker", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-10.3", - "pool:Skia" + "gpu:IntelHDGraphics615", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -32542,19 +32652,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 21600000000000, + "execution_timeout_ns": 14400000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 21600000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { + "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -32565,32 +32675,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:40" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:243" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32599,18 +32694,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT604\\\",\\\"model\\\",\\\"SamsungChromebook2012\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug", - "Housekeeper-PerCommit-BundleRecipes" + "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-10.3", - "pool:Skia" + "gpu:MaliT604", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -32633,7 +32731,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN": { + "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { "caches": [ { "name": "vpython", @@ -32644,37 +32742,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:40" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:243" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32683,18 +32761,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"~8888\\\",\\\"svg\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT604\\\",\\\"model\\\",\\\"SamsungChromebook2012\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-ASAN", - "Housekeeper-PerCommit-BundleRecipes" + "Build-Debian10-Clang-arm-Release-Chromebook_GLES", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-10.3", - "pool:Skia" + "gpu:MaliT604", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -32712,12 +32793,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs": { + "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -32728,32 +32809,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:40" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:243" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32762,18 +32828,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT860\\\",\\\"model\\\",\\\"SamsungChromebookPlus\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug", - "Housekeeper-PerCommit-BundleRecipes" + "Build-Debian10-Clang-arm-Debug-Chromebook_GLES", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-10.3", - "pool:Skia" + "gpu:MaliT860", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -32796,7 +32865,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { "caches": [ { "name": "vpython", @@ -32807,32 +32876,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:40" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:243" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -32841,18 +32895,21 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"MaliT860\\\",\\\"model\\\",\\\"SamsungChromebookPlus\\\",\\\"os\\\",\\\"ChromeOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug", - "Housekeeper-PerCommit-BundleRecipes" + "Build-Debian10-Clang-arm-Release-Chromebook_GLES", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Debian-10.3", - "pool:Skia" + "gpu:MaliT860", + "os:ChromeOS", + "pool:Skia", + "release_version:10575.22.0" ], "env_prefixes": { "PATH": [ @@ -32875,7 +32932,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -32886,17 +32943,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -32906,7 +32963,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -32920,11 +32977,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SK_USE_DISCARDABLE_SCALEDIMAGECACHE\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"0\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE", + "Build-Debian10-Clang-x86-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -32942,19 +32999,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, + "execution_timeout_ns": 21600000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 21600000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -32965,17 +33022,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -32985,7 +33042,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -32999,11 +33056,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SafeStack\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-SafeStack", + "Build-Debian10-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -33033,7 +33090,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN": { "caches": [ { "name": "vpython", @@ -33044,17 +33101,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/skimage", @@ -33064,7 +33126,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33078,11 +33140,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SkVM\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--skvm\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"~8888\\\",\\\"svg\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug", + "Build-Debian10-Clang-x86_64-Debug-ASAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -33107,12 +33169,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM_ASAN": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -33123,22 +33185,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -33148,7 +33205,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33162,11 +33219,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SkVM_ASAN\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--skvm\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-ASAN", + "Build-Debian10-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -33191,12 +33248,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -33207,17 +33264,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -33227,7 +33284,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33241,11 +33298,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Wuffs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-Wuffs", + "Build-Debian10-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -33275,7 +33332,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_00_16-ASAN_BonusConfigs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { "caches": [ { "name": "vpython", @@ -33286,22 +33343,96 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SK_USE_DISCARDABLE_SCALEDIMAGECACHE\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"0\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Debian10-Clang-x86_64-Debug-SK_USE_DISCARDABLE_SCALEDIMAGECACHE", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -33311,7 +33442,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33325,11 +33456,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_00_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"00\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_00_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SafeStack\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-ASAN", + "Build-Debian10-Clang-x86_64-Debug-SafeStack", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -33354,12 +33485,91 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_01_16-ASAN_BonusConfigs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SkVM\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--skvm\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Debian10-Clang-x86_64-Debug", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM_ASAN": { "caches": [ { "name": "vpython", @@ -33370,17 +33580,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -33395,7 +33605,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33409,7 +33619,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_01_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"01\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_01_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SkVM_ASAN\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--skvm\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -33443,7 +33653,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_02_16-ASAN_BonusConfigs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs": { "caches": [ { "name": "vpython", @@ -33454,17 +33664,96 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Wuffs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Debian10-Clang-x86_64-Debug-Wuffs", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_00_16-ASAN_BonusConfigs": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -33479,7 +33768,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33493,7 +33782,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_02_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"02\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_02_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_00_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"00\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_00_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -33527,7 +33816,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_03_16-ASAN_BonusConfigs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_01_16-ASAN_BonusConfigs": { "caches": [ { "name": "vpython", @@ -33538,17 +33827,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -33563,7 +33852,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33577,7 +33866,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_03_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"03\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_03_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_01_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"01\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_01_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -33611,7 +33900,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_04_16-ASAN_BonusConfigs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_02_16-ASAN_BonusConfigs": { "caches": [ { "name": "vpython", @@ -33622,17 +33911,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -33647,7 +33936,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33661,7 +33950,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_04_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"04\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_04_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_02_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"02\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_02_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -33695,7 +33984,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_05_16-ASAN_BonusConfigs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_03_16-ASAN_BonusConfigs": { "caches": [ { "name": "vpython", @@ -33706,17 +33995,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -33731,7 +34020,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33745,7 +34034,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_05_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"05\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_05_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_03_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"03\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_03_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -33779,7 +34068,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_06_16-ASAN_BonusConfigs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_04_16-ASAN_BonusConfigs": { "caches": [ { "name": "vpython", @@ -33790,17 +34079,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -33815,7 +34104,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33829,7 +34118,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_06_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"06\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_06_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_04_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"04\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_04_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -33863,7 +34152,7 @@ "test" ] }, - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_07_16-ASAN_BonusConfigs": { + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_05_16-ASAN_BonusConfigs": { "caches": [ { "name": "vpython", @@ -33874,17 +34163,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -33899,7 +34188,175 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_05_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"05\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_05_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Debian10-Clang-x86_64-Debug-ASAN", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 1, + "outputs": [ + "test" + ] + }, + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_06_16-ASAN_BonusConfigs": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_06_16-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--shard\\\",\\\"06\\\",\\\"--shards\\\",\\\"16\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_06_16-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Debian10-Clang-x86_64-Debug-ASAN", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 1, + "outputs": [ + "test" + ] + }, + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-Shard_07_16-ASAN_BonusConfigs": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" }, { "name": "skia/bots/svg", @@ -33958,17 +34415,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -33983,7 +34440,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34042,17 +34499,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34067,7 +34524,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34126,17 +34583,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34151,7 +34608,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34210,17 +34667,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34235,7 +34692,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34294,17 +34751,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34319,7 +34776,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34378,17 +34835,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34403,7 +34860,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34462,17 +34919,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34487,7 +34944,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34546,17 +35003,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34571,7 +35028,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34630,17 +35087,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -34650,7 +35107,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34709,17 +35166,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -34729,7 +35186,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34788,17 +35245,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -34808,7 +35265,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34867,17 +35324,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34892,7 +35349,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -34951,17 +35408,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -34976,7 +35433,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35035,17 +35492,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35055,7 +35512,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35114,17 +35571,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35134,7 +35591,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35193,17 +35650,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35213,7 +35670,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35272,17 +35729,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35292,7 +35749,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35351,17 +35808,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35371,7 +35828,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35430,17 +35887,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -35455,7 +35912,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35514,17 +35971,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -35539,7 +35996,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35598,17 +36055,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -35623,7 +36080,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35682,17 +36139,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35702,7 +36159,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35760,17 +36217,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35780,7 +36237,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35838,17 +36295,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35858,7 +36315,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35916,17 +36373,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -35936,7 +36393,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -35994,17 +36451,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -36014,7 +36471,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36073,17 +36530,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -36098,7 +36555,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36157,17 +36614,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -36177,7 +36634,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36236,17 +36693,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -36261,7 +36718,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36319,22 +36776,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -36349,7 +36806,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36407,17 +36864,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -36432,7 +36889,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36490,22 +36947,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -36520,7 +36977,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36578,17 +37035,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -36598,7 +37055,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36658,17 +37115,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -36683,7 +37140,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36741,17 +37198,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -36761,7 +37218,7 @@ { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -36776,7 +37233,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36834,17 +37291,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -36859,7 +37316,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -36917,22 +37374,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -36947,7 +37404,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37005,17 +37462,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -37035,7 +37492,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37093,17 +37550,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -37113,7 +37570,7 @@ { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -37128,7 +37585,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37175,7 +37632,7 @@ "test" ] }, - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN": { "caches": [ { "name": "vpython", @@ -37186,110 +37643,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:15" - }, - { - "name": "skia/bots/opencl_intel_neo_linux", - "path": "opencl_intel_neo_linux", - "version": "version:1" - }, - { - "name": "skia/bots/opencl_ocl_icd_linux", - "path": "opencl_ocl_icd_linux", - "version": "version:0" - }, - { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:40" - }, - { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:243" - }, - { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "compute_test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-OpenCL", - "Housekeeper-PerCommit-BundleRecipes" - ], - "dimensions": [ - "gpu:8086:5926", - "os:Debian-10.3", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 14400000000000, - "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, - "outputs": [ - "test" - ] - }, - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -37304,7 +37673,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37318,11 +37687,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"OOPRDDL_ASAN\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release", + "Build-Debian10-Clang-x86_64-Debug-ASAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -37346,12 +37715,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN_Vulkan": { "caches": [ { "name": "vpython", @@ -37362,23 +37731,28 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", "path": "clang_linux", "version": "version:20" }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" + }, { "name": "skia/bots/mesa_intel_driver_linux", "path": "mesa_intel_driver_linux", @@ -37392,7 +37766,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37406,11 +37780,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"DDL3_TSAN\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glddl\\\",\\\"ddl2-gl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"OOPRDDL_ASAN_Vulkan\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~VkHeapTests\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OOPRDDL_ASAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-TSAN", + "Build-Debian10-Clang-x86_64-Debug-ASAN_Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -37439,7 +37813,7 @@ "test" ] }, - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL": { "caches": [ { "name": "vpython", @@ -37450,32 +37824,32 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:15" }, { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:4" + "name": "skia/bots/opencl_intel_neo_linux", + "path": "opencl_intel_neo_linux", + "version": "version:1" }, { - "name": "skia/bots/mesa_intel_driver_linux", - "path": "mesa_intel_driver_linux", - "version": "version:15" + "name": "skia/bots/opencl_ocl_icd_linux", + "path": "opencl_ocl_icd_linux", + "version": "version:0" }, { "name": "skia/bots/skimage", @@ -37485,7 +37859,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37498,12 +37872,12 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"DDL3_TSAN_Vulkan\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~VkHeapTests\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "compute_test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-OpenCL\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-TSAN_Vulkan", + "Build-Debian10-Clang-x86_64-Debug-OpenCL", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -37527,12 +37901,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -37543,22 +37917,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -37573,7 +37942,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37587,11 +37956,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"TSAN\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-TSAN", + "Build-Debian10-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -37615,12 +37984,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN": { "caches": [ { "name": "vpython", @@ -37631,22 +38000,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:4" + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -37661,7 +38030,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37675,11 +38044,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~VkHeapTests\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"DDL3_TSAN\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glddl\\\",\\\"ddl2-gl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-Vulkan", + "Build-Debian10-Clang-x86_64-Release-TSAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -37703,12 +38072,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan": { "caches": [ { "name": "vpython", @@ -37719,17 +38088,27 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -37744,7 +38123,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37758,15 +38137,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelBayTrail\\\",\\\"model\\\",\\\"NUCDE3815TYKHE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"DDL3_TSAN_Vulkan\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~VkHeapTests\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-DDL3_TSAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug", + "Build-Debian10-Clang-x86_64-Release-TSAN_Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:0f31", + "gpu:8086:5926", "os:Debian-10.3", "pool:Skia" ], @@ -37786,12 +38165,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN": { "caches": [ { "name": "vpython", @@ -37802,17 +38181,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -37827,7 +38211,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37841,15 +38225,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelBayTrail\\\",\\\"model\\\",\\\"NUCDE3815TYKHE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"OOPRDDL_TSAN\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release", + "Build-Debian10-Clang-x86_64-Release-TSAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:0f31", + "gpu:8086:5926", "os:Debian-10.3", "pool:Skia" ], @@ -37869,12 +38253,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN_Vulkan": { "caches": [ { "name": "vpython", @@ -37885,17 +38269,27 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -37910,7 +38304,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -37924,15 +38318,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD2000\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"OOPRDDL_TSAN_Vulkan\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~VkHeapTests\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-OOPRDDL_TSAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug", + "Build-Debian10-Clang-x86_64-Release-TSAN_Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:0102", + "gpu:8086:5926", "os:Debian-10.3", "pool:Skia" ], @@ -37952,12 +38346,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN": { "caches": [ { "name": "vpython", @@ -37968,17 +38362,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/mesa_intel_driver_linux", @@ -37993,7 +38392,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -38007,15 +38406,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD2000\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"TSAN\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release", + "Build-Debian10-Clang-x86_64-Release-TSAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:0102", + "gpu:8086:5926", "os:Debian-10.3", "pool:Skia" ], @@ -38035,12 +38434,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -38051,17 +38450,42 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:15" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -38069,20 +38493,18 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test_pathkit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris640\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC7i5BNK\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~VkHeapTests\\\",\\\"~Programs\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-EMCC-asmjs-Release-PathKit", + "Build-Debian10-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", + "gpu:8086:5926", "os:Debian-10.3", - "pool:Skia", - "docker_installed:true" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -38099,13 +38521,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "pathkit.isolate", + "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { + "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -38116,17 +38538,37 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:15" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -38134,20 +38576,18 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test_canvaskit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelBayTrail\\\",\\\"model\\\",\\\"NUCDE3815TYKHE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-EMCC-wasm-Release-CanvasKit_CPU", + "Build-Debian10-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", + "gpu:8086:0f31", "os:Debian-10.3", - "pool:Skia", - "docker_installed:true" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -38164,13 +38604,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "canvaskit.isolate", + "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { + "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -38181,17 +38621,37 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:15" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -38199,20 +38659,18 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test_pathkit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelBayTrail\\\",\\\"model\\\",\\\"NUCDE3815TYKHE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-EMCC-wasm-Release-PathKit", + "Build-Debian10-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", + "gpu:8086:0f31", "os:Debian-10.3", - "pool:Skia", - "docker_installed:true" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -38229,13 +38687,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "pathkit.isolate", + "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { + "Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -38246,17 +38704,37 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:15" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -38264,20 +38742,18 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test_canvaskit", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD2000\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-EMCC-wasm-Release-CanvasKit", + "Build-Debian10-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", + "gpu:8086:0102", "os:Debian-10.3", - "pool:Skia", - "docker_installed:true" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -38294,13 +38770,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "canvaskit.isolate", + "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": { + "Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -38311,17 +38787,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/mesa_intel_driver_linux", + "path": "mesa_intel_driver_linux", + "version": "version:15" }, { "name": "skia/bots/skimage", @@ -38331,7 +38812,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -38345,19 +38826,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"GCC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Docker\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD2000\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"gltestthreading\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdblendmodes\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"lcdoverlap\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"textbloblooper\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_with_backdrop\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_shaders_bw\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext_blob_persp\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect_ref\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"orientation\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"stroketext\\\",\\\"gltestthreading\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-GCC-x86-Debug-Docker", + "Build-Debian10-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", + "gpu:8086:0102", "os:Debian-10.3", - "pool:Skia", - "docker_installed:true" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -38368,19 +38847,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 21600000000000, + "execution_timeout_ns": 14400000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 21600000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker": { + "Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -38391,32 +38870,82 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test_pathkit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Debian10-EMCC-asmjs-Release-PathKit", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia", + "docker_installed:true" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "pathkit.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { + "caches": [ { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:40" + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:243" + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -38424,12 +38953,12 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"GCC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Docker\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test_canvaskit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-GCC-x86-Release-Docker", + "Build-Debian10-EMCC-wasm-Release-CanvasKit_CPU", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -38454,13 +38983,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "test_skia_bundled.isolate", + "isolate": "canvaskit.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker": { + "Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -38471,32 +39000,82 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test_pathkit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Debian10-EMCC-wasm-Release-PathKit", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia", + "docker_installed:true" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "pathkit.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { + "caches": [ { - "name": "skia/bots/skimage", - "path": "skimage", - "version": "version:40" + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/skp", - "path": "skp", - "version": "version:243" + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/svg", - "path": "svg", - "version": "version:9" + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -38504,12 +39083,12 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"GCC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Docker\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test_canvaskit", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-GCC-x86_64-Debug-Docker", + "Build-Debian10-EMCC-wasm-Release-CanvasKit", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -38534,13 +39113,13 @@ "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, "io_timeout_ns": 14400000000000, - "isolate": "test_skia_bundled.isolate", + "isolate": "canvaskit.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker": { + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": { "caches": [ { "name": "vpython", @@ -38551,17 +39130,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -38571,7 +39150,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -38585,11 +39164,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"GCC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Docker\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"GCC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Docker\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-GCC-x86_64-Release-Docker", + "Build-Debian10-GCC-x86-Debug-Docker", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -38608,19 +39187,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, + "execution_timeout_ns": 21600000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 21600000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All": { + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker": { "caches": [ { "name": "vpython", @@ -38631,17 +39210,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -38651,7 +39230,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -38665,17 +39244,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"GCC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Docker\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug", + "Build-Debian10-GCC-x86-Release-Docker", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", - "pool:Skia" + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -38698,7 +39279,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer": { + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker": { "caches": [ { "name": "vpython", @@ -38709,17 +39290,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -38729,7 +39310,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -38743,17 +39324,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"CommandBuffer\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"commandbuffer\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"GCC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Docker\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-CommandBuffer", + "Build-Debian10-GCC-x86_64-Debug-Docker", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", - "pool:Skia" + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -38776,7 +39359,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal": { + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker": { "caches": [ { "name": "vpython", @@ -38787,17 +39370,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -38807,7 +39390,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -38821,17 +39404,19 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"DDL1_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"GCC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"Docker\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Debian10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-Metal", + "Build-Debian10-GCC-x86_64-Release-Docker", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:591e", - "os:Mac-10.13.6", - "pool:Skia" + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Debian-10.3", + "pool:Skia", + "docker_installed:true" ], "env_prefixes": { "PATH": [ @@ -38854,7 +39439,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -38865,17 +39450,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -38885,7 +39470,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -38899,11 +39484,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"DDL3_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"mtlddl\\\",\\\"ddl2-mtl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-Metal", + "Build-Mac-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -38932,7 +39517,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -38943,17 +39528,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -38963,7 +39548,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -38977,11 +39562,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"CommandBuffer\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"commandbuffer\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GLBackendAllocationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-Metal", + "Build-Mac-Clang-x86_64-Debug-CommandBuffer", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -39010,7 +39595,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal": { "caches": [ { "name": "vpython", @@ -39021,17 +39606,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39041,7 +39626,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39055,11 +39640,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"DDL1_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release", + "Build-Mac-Clang-x86_64-Debug-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -39088,7 +39673,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal": { "caches": [ { "name": "vpython", @@ -39099,17 +39684,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39119,7 +39704,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39133,11 +39718,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"DDL1_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"DDL3_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"mtlddl\\\",\\\"ddl2-mtl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-Metal", + "Build-Mac-Clang-x86_64-Debug-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -39166,7 +39751,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -39177,17 +39762,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39197,7 +39782,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39211,11 +39796,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"DDL3_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"mtlddl\\\",\\\"ddl2-mtl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-Metal", + "Build-Mac-Clang-x86_64-Debug-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -39244,7 +39829,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal": { "caches": [ { "name": "vpython", @@ -39255,17 +39840,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39275,7 +39860,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39289,11 +39874,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"OOPRDDL_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"mtlooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-Metal", + "Build-Mac-Clang-x86_64-Debug-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -39322,7 +39907,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -39333,17 +39918,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39353,7 +39938,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39367,7 +39952,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -39400,7 +39985,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal": { "caches": [ { "name": "vpython", @@ -39411,17 +39996,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39431,7 +40016,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39445,15 +40030,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"DDL1_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-ASAN", + "Build-Mac-Clang-x86_64-Release-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -39473,12 +40058,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal": { "caches": [ { "name": "vpython", @@ -39489,17 +40074,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39509,7 +40094,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39523,15 +40108,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"DDL3_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"mtlddl\\\",\\\"ddl2-mtl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug", + "Build-Mac-Clang-x86_64-Release-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -39556,7 +40141,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -39567,17 +40152,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39587,7 +40172,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39601,15 +40186,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"PDF\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--rasterize_pdf\\\",\\\"--config\\\",\\\"pdf\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"pdf\\\",\\\"gm\\\",\\\"_\\\",\\\"lattice2\\\",\\\"pdf\\\",\\\"gm\\\",\\\"_\\\",\\\"hairmodes\\\",\\\"pdf\\\",\\\"gm\\\",\\\"_\\\",\\\"longpathdash\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug", + "Build-Mac-Clang-x86_64-Release-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -39634,7 +40219,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -39645,17 +40230,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39665,7 +40250,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39679,7 +40264,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -39687,7 +40272,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -39712,7 +40297,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All-TSAN": { + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal": { "caches": [ { "name": "vpython", @@ -39723,17 +40308,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39743,7 +40328,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39757,15 +40342,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All-TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"TSAN\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All-TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD615\\\",\\\"extra_config\\\",\\\"OOPRDDL_Metal\\\",\\\"model\\\",\\\"MacBook10.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"mtlooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^SRGBReadWritePixels$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-TSAN", + "Build-Mac-Clang-x86_64-Release-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4870HQ", + "gpu:8086:591e", "os:Mac-10.13.6", "pool:Skia" ], @@ -39785,12 +40370,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN": { + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN": { "caches": [ { "name": "vpython", @@ -39801,17 +40386,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39821,7 +40406,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39835,7 +40420,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -39843,7 +40428,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -39868,7 +40453,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN_Metal": { + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -39879,17 +40464,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39899,7 +40484,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39913,15 +40498,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"ASAN_Metal\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-ASAN_Metal", + "Build-Mac-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -39941,12 +40526,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer": { + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF": { "caches": [ { "name": "vpython", @@ -39957,17 +40542,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -39977,7 +40562,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -39991,15 +40576,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"CommandBuffer\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"commandbuffer\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"PDF\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--rasterize_pdf\\\",\\\"--config\\\",\\\"pdf\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"pdf\\\",\\\"gm\\\",\\\"_\\\",\\\"lattice2\\\",\\\"pdf\\\",\\\"gm\\\",\\\"_\\\",\\\"hairmodes\\\",\\\"pdf\\\",\\\"gm\\\",\\\"_\\\",\\\"longpathdash\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-CommandBuffer", + "Build-Mac-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -40024,7 +40609,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-OpenCL": { + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -40035,17 +40620,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40055,7 +40640,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40068,16 +40653,16 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compute_test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-OpenCL\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-OpenCL", + "Build-Mac-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -40102,7 +40687,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All": { + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All-TSAN": { "caches": [ { "name": "vpython", @@ -40113,17 +40698,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40133,7 +40718,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40147,15 +40732,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All-TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"TSAN\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All-TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release", + "Build-Mac-Clang-x86_64-Release-TSAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6821-4.0.20-3.2.8", + "cpu:x86-64-i7-4870HQ", "os:Mac-10.13.6", "pool:Skia" ], @@ -40175,12 +40760,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN": { "caches": [ { "name": "vpython", @@ -40191,17 +40776,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40211,7 +40796,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40225,11 +40810,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-Metal", + "Build-Mac-Clang-x86_64-Debug-ASAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -40253,12 +40838,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN_Metal": { "caches": [ { "name": "vpython", @@ -40269,17 +40854,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40289,7 +40874,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40303,11 +40888,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"TSAN\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"ASAN_Metal\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-ASAN_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-TSAN", + "Build-Mac-Clang-x86_64-Debug-ASAN_Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -40336,7 +40921,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN_Metal": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -40347,17 +40932,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40367,7 +40952,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40381,11 +40966,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"TSAN_Metal\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"CommandBuffer\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"commandbuffer\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GLBackendAllocationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-TSAN_Metal", + "Build-Mac-Clang-x86_64-Debug-CommandBuffer", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -40409,12 +40994,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-OpenCL": { "caches": [ { "name": "vpython", @@ -40425,17 +41010,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40445,7 +41030,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40458,17 +41043,16 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "compute_test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-OpenCL\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug", + "Build-Mac-Clang-x86_64-Debug-OpenCL", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4578U", - "gpu:8086:0a2e", + "gpu:1002:6821-4.0.20-3.2.8", "os:Mac-10.13.6", "pool:Skia" ], @@ -40493,7 +41077,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -40504,17 +41088,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40524,7 +41108,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40538,16 +41122,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"extra_config\\\",\\\"CommandBuffer\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"commandbuffer\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"AsyncReadPixels\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-CommandBuffer", + "Build-Mac-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4578U", - "gpu:8086:0a2e", + "gpu:1002:6821-4.0.20-3.2.8", "os:Mac-10.13.6", "pool:Skia" ], @@ -40572,7 +41155,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -40583,17 +41166,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40603,7 +41186,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40617,16 +41200,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-Metal", + "Build-Mac-Clang-x86_64-Release-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4578U", - "gpu:8086:0a2e", + "gpu:1002:6821-4.0.20-3.2.8", "os:Mac-10.13.6", "pool:Skia" ], @@ -40651,7 +41233,7 @@ "test" ] }, - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN": { "caches": [ { "name": "vpython", @@ -40662,17 +41244,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40682,7 +41264,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40696,16 +41278,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"TSAN\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release", + "Build-Mac-Clang-x86_64-Release-TSAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-4578U", - "gpu:8086:0a2e", + "gpu:1002:6821-4.0.20-3.2.8", "os:Mac-10.13.6", "pool:Skia" ], @@ -40725,12 +41306,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal": { + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN_Metal": { "caches": [ { "name": "vpython", @@ -40741,17 +41322,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40761,7 +41342,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40775,11 +41356,89 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN_Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD8870M\\\",\\\"extra_config\\\",\\\"TSAN_Metal\\\",\\\"model\\\",\\\"MacBookPro11.5\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"~WritePixelsNonTextureMSAA_Gpu\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-TSAN_Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-Metal", + "Build-Mac-Clang-x86_64-Release-TSAN_Metal", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "gpu:1002:6821-4.0.20-3.2.8", + "os:Mac-10.13.6", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 1, + "outputs": [ + "test" + ] + }, + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -40809,7 +41468,7 @@ "test" ] }, - "Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -40820,17 +41479,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40840,7 +41499,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40854,15 +41513,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"VMware7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"extra_config\\\",\\\"CommandBuffer\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"commandbuffer\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GLBackendAllocationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug", + "Build-Mac-Clang-x86_64-Debug-CommandBuffer", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "cpu:x86-64-i7-4578U", + "gpu:8086:0a2e", "os:Mac-10.13.6", "pool:Skia" ], @@ -40887,7 +41547,7 @@ "test" ] }, - "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -40898,17 +41558,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40918,7 +41578,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -40932,16 +41592,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"VMware7.1\\\",\\\"os\\\",\\\"Mac10.14\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug", + "Build-Mac-Clang-x86_64-Debug-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", - "os:Mac-10.14.6", + "cpu:x86-64-i7-4578U", + "gpu:8086:0a2e", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -40965,7 +41626,7 @@ "test" ] }, - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -40976,17 +41637,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -40996,7 +41657,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41010,16 +41671,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug", + "Build-Mac-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.15.1", + "cpu:x86-64-i7-4578U", + "gpu:8086:0a2e", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -41043,7 +41705,7 @@ "test" ] }, - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -41054,17 +41716,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41074,7 +41736,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41088,16 +41750,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"extra_config\\\",\\\"CommandBuffer\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"commandbuffer\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris5100\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacMini7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-CommandBuffer", + "Build-Mac-Clang-x86_64-Release-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.15.1", + "cpu:x86-64-i7-4578U", + "gpu:8086:0a2e", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -41121,7 +41784,7 @@ "test" ] }, - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { + "Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -41132,17 +41795,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41152,7 +41815,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41166,16 +41829,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"VMware7.1\\\",\\\"os\\\",\\\"Mac10.13\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Debug-Metal", + "Build-Mac-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.15.1", + "cpu:x86-64-E5-2697_v2", + "os:Mac-10.13.6", "pool:Skia" ], "env_prefixes": { @@ -41199,7 +41862,7 @@ "test" ] }, - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts": { + "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -41210,17 +41873,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41230,7 +41893,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41244,7 +41907,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"VMware7.1\\\",\\\"os\\\",\\\"Mac10.14\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -41252,8 +41915,8 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1626", - "os:Mac-10.15.1", + "cpu:x86-64-E5-2697_v2", + "os:Mac-10.14.6", "pool:Skia" ], "env_prefixes": { @@ -41277,7 +41940,7 @@ "test" ] }, - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -41288,17 +41951,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41308,7 +41971,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41322,11 +41985,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release", + "Build-Mac-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -41355,7 +42018,7 @@ "test" ] }, - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -41366,17 +42029,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41386,7 +42049,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41400,11 +42063,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"extra_config\\\",\\\"CommandBuffer\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"commandbuffer\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GLBackendAllocationTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-x86_64-Release-Metal", + "Build-Mac-Clang-x86_64-Debug-CommandBuffer", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -41433,7 +42096,7 @@ "test" ] }, - "Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -41442,24 +42105,97 @@ ], "cipd_packages": [ { - "name": "infra/3pp/tools/cpython/${platform}", + "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-x86_64-Debug-Metal", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "gpu:8086:1626", + "os:Mac-10.15.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41469,7 +42205,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41483,7 +42219,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"VMware7.1\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -41491,7 +42227,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-E5-2697_v2", + "gpu:8086:1626", "os:Mac-10.15.1", "pool:Skia" ], @@ -41516,7 +42252,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -41527,22 +42263,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41552,7 +42283,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41566,16 +42297,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"gl1010102\\\",\\\"gltestpersistentcache\\\",\\\"gltestglslcache\\\",\\\"gltestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-ASAN", + "Build-Mac-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "gpu:8086:1626", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -41594,12 +42325,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1": { + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -41610,17 +42341,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41630,7 +42361,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41644,16 +42375,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL1\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"gl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD6000\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"MacBookAir7.2\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ProcessorCloneTest$\\\",\\\"~^GrMeshTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug", + "Build-Mac-Clang-x86_64-Release-Metal", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "gpu:8086:1626", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -41677,7 +42408,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan": { + "Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -41685,25 +42416,25 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -41713,7 +42444,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41727,16 +42458,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL1_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"VMware7.1\\\",\\\"os\\\",\\\"Mac10.15\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug-Vulkan", + "Build-Mac-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-430.14", - "os:Ubuntu-18.04", + "cpu:x86-64-E5-2697_v2", + "os:Mac-10.15.1", "pool:Skia" ], "env_prefixes": { @@ -41760,7 +42491,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN": { "caches": [ { "name": "vpython", @@ -41771,17 +42502,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/clang_linux", @@ -41796,7 +42527,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41810,7 +42541,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL3_ASAN\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glddl\\\",\\\"ddl2-gl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"gl1010102\\\",\\\"gltestpersistentcache\\\",\\\"gltestglslcache\\\",\\\"gltestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -41843,7 +42574,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1": { "caches": [ { "name": "vpython", @@ -41854,22 +42585,100 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL1\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"gl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Debian10-Clang-x86_64-Debug", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -41879,7 +42688,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41893,7 +42702,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL3_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL1_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--pr\\\",\\\"~small\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -41926,7 +42735,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN": { "caches": [ { "name": "vpython", @@ -41937,17 +42746,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/skimage", @@ -41957,7 +42771,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -41971,11 +42785,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"PreAbandonGpuContext\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--preAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL3_ASAN\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glddl\\\",\\\"ddl2-gl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Debug", + "Build-Debian10-Clang-x86_64-Debug-ASAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -41999,12 +42813,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -42015,22 +42829,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -42040,7 +42854,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42054,7 +42868,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"vk1010102\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL3_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -42087,7 +42901,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_ASAN": { "caches": [ { "name": "vpython", @@ -42098,17 +42912,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/skimage", @@ -42118,7 +42937,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42132,11 +42951,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"gl1010102\\\",\\\"gltestpersistentcache\\\",\\\"gltestglslcache\\\",\\\"gltestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"OOPRDDL_ASAN\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release", + "Build-Debian10-Clang-x86_64-Debug-ASAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -42160,12 +42979,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan": { "caches": [ { "name": "vpython", @@ -42176,22 +42995,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -42201,7 +43020,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42215,11 +43034,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL3_TSAN\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glddl\\\",\\\"ddl2-gl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"OOPRDDL_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-TSAN", + "Build-Debian10-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -42243,12 +43062,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext": { "caches": [ { "name": "vpython", @@ -42259,27 +43078,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -42289,7 +43098,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42303,11 +43112,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL3_TSAN_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"PreAbandonGpuContext\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--preAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-PreAbandonGpuContext\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-TSAN_Vulkan", + "Build-Debian10-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -42331,12 +43140,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -42347,17 +43156,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -42367,7 +43181,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42381,11 +43195,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"PreAbandonGpuContext\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--preAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"vk1010102\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release", + "Build-Debian10-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -42414,7 +43228,7 @@ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -42425,27 +43239,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/clang_linux", - "path": "clang_linux", - "version": "version:20" - }, - { - "name": "skia/bots/linux_vulkan_sdk", - "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -42455,7 +43259,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42469,11 +43273,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"TSAN_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"gl1010102\\\",\\\"gltestpersistentcache\\\",\\\"gltestglslcache\\\",\\\"gltestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-TSAN_Vulkan", + "Build-Debian10-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -42497,12 +43301,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN": { "caches": [ { "name": "vpython", @@ -42513,17 +43317,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/skimage", @@ -42533,17 +43342,12 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/valgrind", - "path": "valgrind", - "version": "version:9" } ], "command": [ @@ -42552,18 +43356,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"gl1010102\\\",\\\"gltestpersistentcache\\\",\\\"gltestglslcache\\\",\\\"gltestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Threaded\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--abandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL3_TSAN\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glddl\\\",\\\"ddl2-gl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41", + "Build-Debian10-Clang-x86_64-Release-TSAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ "gpu:10de:1cb3-430.14", "os:Ubuntu-18.04", - "pool:Skia", - "valgrind:1" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -42574,19 +43377,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 32400000000000, - "expiration_ns": 172800000000000, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 32400000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan": { "caches": [ { "name": "vpython", @@ -42597,17 +43400,27 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -42617,17 +43430,12 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/valgrind", - "path": "valgrind", - "version": "version:9" } ], "command": [ @@ -42636,18 +43444,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Threaded\\\",\\\"~multipicturedraw_\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--preAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"DDL3_TSAN_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkddl\\\",\\\"ddl2-vk\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-DDL3_TSAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41", + "Build-Debian10-Clang-x86_64-Release-TSAN_Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ "gpu:10de:1cb3-430.14", "os:Ubuntu-18.04", - "pool:Skia", - "valgrind:1" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -42658,19 +43465,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 32400000000000, - "expiration_ns": 172800000000000, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 32400000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN": { "caches": [ { "name": "vpython", @@ -42681,17 +43488,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/skimage", @@ -42701,17 +43513,12 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" - }, - { - "name": "skia/bots/valgrind", - "path": "valgrind", - "version": "version:9" } ], "command": [ @@ -42720,18 +43527,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Valgrind_SK_CPU_LIMIT_SSE41\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"gl1010102\\\",\\\"gltestpersistentcache\\\",\\\"gltestglslcache\\\",\\\"gltestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Threaded\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"OOPRDDL_TSAN\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"glooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41", + "Build-Debian10-Clang-x86_64-Release-TSAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ "gpu:10de:1cb3-430.14", "os:Ubuntu-18.04", - "pool:Skia", - "valgrind:1" + "pool:Skia" ], "env_prefixes": { "PATH": [ @@ -42742,19 +43548,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 32400000000000, - "expiration_ns": 172800000000000, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 32400000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN_Vulkan": { "caches": [ { "name": "vpython", @@ -42765,22 +43571,27 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" }, { "name": "skia/bots/linux_vulkan_sdk", "path": "linux_vulkan_sdk", - "version": "version:4" + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -42790,7 +43601,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42804,11 +43615,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"vk1010102\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"OOPRDDL_TSAN_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"DDL\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--skpViewportSize\\\",\\\"2048\\\",\\\"--gpuThreads\\\",\\\"0\\\",\\\"--config\\\",\\\"vkooprddl\\\",\\\"--src\\\",\\\"gm\\\",\\\"skp\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_yuv420_rose\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"async_yuv_no_scale\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect-subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"drawbitmaprect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"image_subset\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"p3_ovals\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"scale-pixels\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_aa\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"zero_length_paths_dbl_bw\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_big\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"preservefillrule_little\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_horizontal\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmaptiled_fractional_vertical\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"new_texture_image\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"fontregen\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_rect\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_subset_ref\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"gpu_blur_utils_ref\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-OOPRDDL_TSAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Debian10-Clang-x86_64-Release-Vulkan", + "Build-Debian10-Clang-x86_64-Release-TSAN_Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -42832,12 +43643,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext": { "caches": [ { "name": "vpython", @@ -42845,25 +43656,20 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -42873,7 +43679,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42887,16 +43693,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"PreAbandonGpuContext\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--preAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-PreAbandonGpuContext\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Debian10-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6646-26.20.13031.18002", - "os:Windows-10-18363", + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", "pool:Skia" ], "env_prefixes": { @@ -42920,7 +43726,7 @@ "test" ] }, - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan": { "caches": [ { "name": "vpython", @@ -42928,25 +43734,30 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/clang_linux", + "path": "clang_linux", + "version": "version:20" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -42956,7 +43767,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -42970,16 +43781,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"TSAN_Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~ReadWriteAlpha\\\",\\\"~RGBA4444TextureTest\\\",\\\"~RGB565TextureTest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-TSAN_Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ANGLE", + "Build-Debian10-Clang-x86_64-Release-TSAN_Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6646-26.20.13031.18002", - "os:Windows-10-18363", + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", "pool:Skia" ], "env_prefixes": { @@ -42998,12 +43809,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -43011,25 +43822,20 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43039,12 +43845,17 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/valgrind", + "path": "valgrind", + "version": "version:9" } ], "command": [ @@ -43053,17 +43864,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"VkDrawableImportTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"gl1010102\\\",\\\"gltestpersistentcache\\\",\\\"gltestglslcache\\\",\\\"gltestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Threaded\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--abandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_AbandonGpuContext_SK_CPU_LIMIT_SSE41\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-Vulkan", + "Build-Debian10-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6646-26.20.13031.18002", - "os:Windows-10-18363", - "pool:Skia" + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia", + "valgrind:1" ], "env_prefixes": { "PATH": [ @@ -43074,19 +43886,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, + "execution_timeout_ns": 32400000000000, + "expiration_ns": 172800000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 32400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -43094,25 +43906,20 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43122,12 +43929,17 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/valgrind", + "path": "valgrind", + "version": "version:9" } ], "command": [ @@ -43136,17 +43948,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Threaded\\\",\\\"~multipicturedraw_\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--preAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_PreAbandonGpuContext_SK_CPU_LIMIT_SSE41\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Debian10-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6646-26.20.13031.18002", - "os:Windows-10-18363", - "pool:Skia" + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia", + "valgrind:1" ], "env_prefixes": { "PATH": [ @@ -43157,19 +43970,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, + "execution_timeout_ns": 32400000000000, + "expiration_ns": 172800000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 32400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -43177,25 +43990,20 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43205,12 +44013,17 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", "path": "svg", "version": "version:9" + }, + { + "name": "skia/bots/valgrind", + "path": "valgrind", + "version": "version:9" } ], "command": [ @@ -43219,17 +44032,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Valgrind_SK_CPU_LIMIT_SSE41\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"gl1010102\\\",\\\"gltestpersistentcache\\\",\\\"gltestglslcache\\\",\\\"gltestprecompile\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"gl1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"atlastext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"dftext\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_b\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_h_f\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"glyph_pos_n_f\\\",\\\"gltestpersistentcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestglslcache\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"gltestprecompile\\\",\\\"gm\\\",\\\"_\\\",\\\"tessellation\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"InitialTextureClear\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~Threaded\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Valgrind_SK_CPU_LIMIT_SSE41\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-ANGLE", + "Build-Debian10-Clang-x86_64-Release-SK_CPU_LIMIT_SSE41", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6646-26.20.13031.18002", - "os:Windows-10-18363", - "pool:Skia" + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", + "pool:Skia", + "valgrind:1" ], "env_prefixes": { "PATH": [ @@ -43240,19 +44054,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, - "expiration_ns": 72000000000000, + "execution_timeout_ns": 32400000000000, + "expiration_ns": 172800000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 32400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan": { + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -43260,25 +44074,25 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/linux_vulkan_sdk", + "path": "linux_vulkan_sdk", + "version": "version:5" }, { "name": "skia/bots/skimage", @@ -43288,7 +44102,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43302,16 +44116,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"VkDrawableImportTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Ubuntu18\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"vk1010102\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"vk1010102\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-Vulkan", + "Build-Debian10-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:6646-26.20.13031.18002", - "os:Windows-10-18363", + "gpu:10de:1cb3-430.14", + "os:Ubuntu-18.04", "pool:Skia" ], "env_prefixes": { @@ -43335,7 +44149,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -43351,17 +44165,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43371,7 +44185,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43385,7 +44199,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GT610\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -43393,8 +44207,8 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:104a-23.21.13.9101", - "os:Windows-10-16299", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43418,7 +44232,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -43434,17 +44248,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43454,7 +44268,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43468,7 +44282,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GT610\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -43476,8 +44290,8 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:104a-23.21.13.9101", - "os:Windows-10-16299", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43501,7 +44315,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -43517,17 +44331,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43537,7 +44351,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43551,16 +44365,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GT610\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"VkDrawableImportTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:104a-23.21.13.9101", - "os:Windows-10-16299", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43584,7 +44398,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -43600,17 +44414,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43620,7 +44434,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43634,16 +44448,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GT610\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-ANGLE", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:104a-23.21.13.9101", - "os:Windows-10-16299", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43667,7 +44481,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -43683,17 +44497,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43703,7 +44517,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43717,16 +44531,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Release-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", - "os:Windows-10-16299", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43750,7 +44564,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -43766,17 +44580,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43786,7 +44600,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43800,16 +44614,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonR9M470X\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"AlphaR2\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"VkDrawableImportTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ANGLE", + "Build-Win-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", - "os:Windows-10-16299", + "gpu:1002:6646-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -43833,7 +44647,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs": { + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -43849,17 +44663,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43869,7 +44683,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43883,7 +44697,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"BonusConfigs\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"glbetex\\\",\\\"glbert\\\",\\\"glenarrow\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GT610\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -43891,7 +44705,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", + "gpu:10de:104a-23.21.13.9101", "os:Windows-10-16299", "pool:Skia" ], @@ -43916,7 +44730,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn": { + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -43932,17 +44746,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -43952,7 +44766,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -43966,15 +44780,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Dawn\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"dawn\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GT610\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-Dawn", + "Build-Win-Clang-x86_64-Debug-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", + "gpu:10de:104a-23.21.13.9101", "os:Windows-10-16299", "pool:Skia" ], @@ -43999,7 +44813,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess": { + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -44015,17 +44829,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44035,7 +44849,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44049,15 +44863,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"GpuTess\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--pr\\\",\\\"tess\\\",\\\"--config\\\",\\\"glmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GT610\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", + "gpu:10de:104a-23.21.13.9101", "os:Windows-10-16299", "pool:Skia" ], @@ -44082,7 +44896,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR": { + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -44098,17 +44912,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44118,7 +44932,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44132,15 +44946,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"NonNVPR\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--pr\\\",\\\"~nvpr\\\",\\\"--config\\\",\\\"gl\\\",\\\"glmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GT610\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Release-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", + "gpu:10de:104a-23.21.13.9101", "os:Windows-10-16299", "pool:Skia" ], @@ -44165,7 +44979,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ReleaseAndAbandonGpuContext": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -44181,17 +44995,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44201,7 +45015,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44215,7 +45029,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ReleaseAndAbandonGpuContext\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ReleaseAndAbandonGpuContext\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--releaseAndAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ReleaseAndAbandonGpuContext\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -44248,7 +45062,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -44264,17 +45078,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44284,7 +45098,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44298,11 +45112,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-Vulkan", + "Build-Win-Clang-x86_64-Debug-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -44331,7 +45145,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -44347,22 +45161,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "skia/bots/procdump_win", - "path": "procdump_win", - "version": "version:0" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44372,7 +45181,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44386,11 +45195,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan_ProcDump\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"BonusConfigs\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"glbetex\\\",\\\"glbert\\\",\\\"glenarrow\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-Vulkan", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -44419,7 +45228,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn": { "caches": [ { "name": "vpython", @@ -44435,17 +45244,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44455,7 +45264,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44469,11 +45278,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Dawn\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"dawn\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug-Dawn", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -44502,7 +45311,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess": { "caches": [ { "name": "vpython", @@ -44518,17 +45327,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44538,7 +45347,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44552,11 +45361,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"GpuTess\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--pr\\\",\\\"tess\\\",\\\"--config\\\",\\\"glmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-ANGLE", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -44585,7 +45394,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR": { "caches": [ { "name": "vpython", @@ -44601,17 +45410,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44621,7 +45430,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44635,11 +45444,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"BonusConfigs\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"glbetex\\\",\\\"glbert\\\",\\\"glenarrow\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"NonNVPR\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--pr\\\",\\\"~nvpr\\\",\\\"--config\\\",\\\"gl\\\",\\\"glmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -44668,7 +45477,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ReleaseAndAbandonGpuContext": { "caches": [ { "name": "vpython", @@ -44684,17 +45493,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44704,7 +45513,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44718,11 +45527,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ReleaseAndAbandonGpuContext\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--releaseAndAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ReleaseAndAbandonGpuContext\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ReleaseAndAbandonGpuContext\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--releaseAndAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ReleaseAndAbandonGpuContext\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -44751,7 +45560,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -44767,17 +45576,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44787,7 +45596,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44801,11 +45610,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-Vulkan", + "Build-Win-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -44834,7 +45643,7 @@ "test" ] }, - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump": { "caches": [ { "name": "vpython", @@ -44850,17 +45659,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/procdump_win", @@ -44875,7 +45684,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44889,11 +45698,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan_ProcDump\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan_ProcDump\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-Vulkan", + "Build-Win-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -44922,7 +45731,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -44938,17 +45747,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -44958,7 +45767,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -44972,16 +45781,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-i7-5557U", - "os:Windows-10-18363", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45005,7 +45814,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -45021,17 +45830,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45041,7 +45850,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45055,16 +45864,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris6100\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Release-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18363", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45088,7 +45897,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -45104,17 +45913,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45124,7 +45933,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45138,16 +45947,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris6100\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"angle_d3d9_es2\\\",\\\"gm\\\",\\\"_\\\",\\\"lighting\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"BonusConfigs\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"glbetex\\\",\\\"glbert\\\",\\\"glenarrow\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ANGLE", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18363", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45171,7 +45980,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext": { "caches": [ { "name": "vpython", @@ -45187,17 +45996,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45207,7 +46016,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45221,7 +46030,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris6100\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"ReleaseAndAbandonGpuContext\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\",\\\"--releaseAndAbandonGpuContext\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ReleaseAndAbandonGpuContext\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -45229,8 +46038,8 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18363", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45254,7 +46063,7 @@ "test" ] }, - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -45270,17 +46079,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45290,7 +46099,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45304,16 +46113,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris6100\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"angle_d3d9_es2\\\",\\\"gm\\\",\\\"_\\\",\\\"lighting\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"~^ProcessorOptimizationValidationTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-ANGLE", + "Build-Win-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:162b-20.19.15.4963", - "os:Windows-10-18363", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45337,7 +46146,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All": { + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump": { "caches": [ { "name": "vpython", @@ -45353,17 +46162,22 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/procdump_win", + "path": "procdump_win", + "version": "version:0" }, { "name": "skia/bots/skimage", @@ -45373,7 +46187,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45387,16 +46201,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan_ProcDump\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1926-26.20.100.7463", - "os:Windows-10-18363", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -45420,7 +46234,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -45436,17 +46250,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45456,7 +46270,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45470,15 +46284,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ANGLE", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1926-26.20.100.7463", + "cpu:x86-64-i7-5557U", "os:Windows-10-18363", "pool:Skia" ], @@ -45503,7 +46317,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-OpenCL": { + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -45519,17 +46333,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45539,7 +46353,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45552,16 +46366,16 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compute_test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-OpenCL\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris6100\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-OpenCL", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1926-26.20.100.7463", + "gpu:8086:162b-20.19.15.4963", "os:Windows-10-18363", "pool:Skia" ], @@ -45586,7 +46400,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -45602,17 +46416,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45622,7 +46436,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45636,15 +46450,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris6100\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"angle_d3d9_es2\\\",\\\"gm\\\",\\\"_\\\",\\\"lighting\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-Vulkan", + "Build-Win-Clang-x86_64-Debug-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1926-26.20.100.7463", + "gpu:8086:162b-20.19.15.4963", "os:Windows-10-18363", "pool:Skia" ], @@ -45669,7 +46483,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All": { + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -45685,17 +46499,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45705,7 +46519,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45719,7 +46533,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris6100\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -45727,7 +46541,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1926-26.20.100.7463", + "gpu:8086:162b-20.19.15.4963", "os:Windows-10-18363", "pool:Skia" ], @@ -45752,7 +46566,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -45768,17 +46582,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45788,7 +46602,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45802,7 +46616,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris6100\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC5i7RYH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"ProcessorCloneTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"angle_d3d9_es2\\\",\\\"gm\\\",\\\"_\\\",\\\"lighting\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"~^ProcessorOptimizationValidationTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -45810,7 +46624,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:1926-26.20.100.7463", + "gpu:8086:162b-20.19.15.4963", "os:Windows-10-18363", "pool:Skia" ], @@ -45835,7 +46649,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -45851,17 +46665,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45871,7 +46685,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45885,11 +46699,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -45918,7 +46732,7 @@ "test" ] }, - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -45934,17 +46748,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -45954,7 +46768,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -45968,11 +46782,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-Vulkan", + "Build-Win-Clang-x86_64-Debug-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -46001,7 +46815,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-OpenCL": { "caches": [ { "name": "vpython", @@ -46017,17 +46831,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46037,7 +46851,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46050,16 +46864,16 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "compute_test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-OpenCL\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Debug-OpenCL", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:3ea5-26.20.100.7463", + "gpu:8086:1926-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46084,7 +46898,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -46100,17 +46914,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46120,7 +46934,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46134,15 +46948,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ANGLE", + "Build-Win-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:3ea5-26.20.100.7463", + "gpu:8086:1926-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46167,7 +46981,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-OpenCL": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -46183,17 +46997,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46203,7 +47017,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46216,16 +47030,16 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "compute_test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-OpenCL\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-OpenCL", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:3ea5-26.20.100.7463", + "gpu:8086:1926-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46250,7 +47064,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -46266,17 +47080,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46286,7 +47100,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46300,15 +47114,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-Vulkan", + "Build-Win-Clang-x86_64-Release-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:3ea5-26.20.100.7463", + "gpu:8086:1926-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46333,7 +47147,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -46349,17 +47163,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46369,7 +47183,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46383,7 +47197,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -46391,7 +47205,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:3ea5-26.20.100.7463", + "gpu:8086:1926-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46416,7 +47230,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -46432,17 +47246,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46452,7 +47266,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46466,15 +47280,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris540\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC6i5SYK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-ANGLE", + "Build-Win-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:3ea5-26.20.100.7463", + "gpu:8086:1926-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46499,7 +47313,7 @@ "test" ] }, - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -46515,17 +47329,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46535,7 +47349,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46549,11 +47363,11 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-Vulkan", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ @@ -46582,7 +47396,7 @@ "test" ] }, - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -46598,17 +47412,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46618,7 +47432,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46632,15 +47446,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD4400\\\",\\\"model\\\",\\\"NUCD34010WYKH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Debug-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:0a16-20.19.15.4963", + "gpu:8086:3ea5-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46665,7 +47479,7 @@ "test" ] }, - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-OpenCL": { "caches": [ { "name": "vpython", @@ -46681,17 +47495,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46701,7 +47515,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46714,16 +47528,16 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD4400\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUCD34010WYKH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"angle_d3d9_es2\\\",\\\"gm\\\",\\\"_\\\",\\\"lighting\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "compute_test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-OpenCL\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ANGLE", + "Build-Win-Clang-x86_64-Debug-OpenCL", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:0a16-20.19.15.4963", + "gpu:8086:3ea5-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46748,7 +47562,7 @@ "test" ] }, - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -46764,17 +47578,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46784,7 +47598,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46798,15 +47612,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD4400\\\",\\\"model\\\",\\\"NUCD34010WYKH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:0a16-20.19.15.4963", + "gpu:8086:3ea5-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46831,7 +47645,7 @@ "test" ] }, - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -46847,17 +47661,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46867,7 +47681,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46881,15 +47695,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD4400\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUCD34010WYKH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"angle_d3d9_es2\\\",\\\"gm\\\",\\\"_\\\",\\\"lighting\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-ANGLE", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:8086:0a16-20.19.15.4963", + "gpu:8086:3ea5-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46914,7 +47728,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -46930,17 +47744,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -46950,7 +47764,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -46964,15 +47778,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Release-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:11c0-26.21.14.4120", + "gpu:8086:3ea5-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -46997,7 +47811,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -47013,17 +47827,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47033,7 +47847,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47047,15 +47861,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelIris655\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"NUC8i5BEK\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ANGLE", + "Build-Win-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:11c0-26.21.14.4120", + "gpu:8086:3ea5-26.20.100.7463", "os:Windows-10-18363", "pool:Skia" ], @@ -47080,7 +47894,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -47096,17 +47910,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47116,7 +47930,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47130,15 +47944,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~FloatingPointTextureTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD4400\\\",\\\"model\\\",\\\"NUCD34010WYKH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-Vulkan", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:11c0-26.21.14.4120", + "gpu:8086:0a16-20.19.15.4963", "os:Windows-10-18363", "pool:Skia" ], @@ -47163,7 +47977,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All": { + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -47179,17 +47993,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47199,7 +48013,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47213,15 +48027,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD4400\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUCD34010WYKH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"angle_d3d9_es2\\\",\\\"gm\\\",\\\"_\\\",\\\"lighting\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:11c0-26.21.14.4120", + "gpu:8086:0a16-20.19.15.4963", "os:Windows-10-18363", "pool:Skia" ], @@ -47246,7 +48060,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -47262,17 +48076,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47282,7 +48096,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47296,15 +48110,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD4400\\\",\\\"model\\\",\\\"NUCD34010WYKH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-ANGLE", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:11c0-26.21.14.4120", + "gpu:8086:0a16-20.19.15.4963", "os:Windows-10-18363", "pool:Skia" ], @@ -47329,7 +48143,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -47345,17 +48159,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47365,7 +48179,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47379,15 +48193,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~FloatingPointTextureTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"IntelHD4400\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"NUCD34010WYKH\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"angle_d3d9_es2\\\",\\\"gm\\\",\\\"_\\\",\\\"lighting\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-Vulkan", + "Build-Win-Clang-x86_64-Release-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:11c0-26.21.14.4120", + "gpu:8086:0a16-20.19.15.4963", "os:Windows-10-18363", "pool:Skia" ], @@ -47412,7 +48226,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -47428,17 +48242,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47448,7 +48262,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47462,7 +48276,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -47470,7 +48284,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:683d-26.20.13031.18002", + "gpu:10de:11c0-26.21.14.4120", "os:Windows-10-18363", "pool:Skia" ], @@ -47495,7 +48309,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -47511,17 +48325,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47531,7 +48345,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47545,7 +48359,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -47553,7 +48367,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:683d-26.20.13031.18002", + "gpu:10de:11c0-26.21.14.4120", "os:Windows-10-18363", "pool:Skia" ], @@ -47578,7 +48392,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -47594,17 +48408,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47614,7 +48428,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47628,7 +48442,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"VkDrawableImportTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~FloatingPointTextureTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -47636,7 +48450,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:683d-26.20.13031.18002", + "gpu:10de:11c0-26.21.14.4120", "os:Windows-10-18363", "pool:Skia" ], @@ -47661,7 +48475,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -47677,17 +48491,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47697,7 +48511,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47711,7 +48525,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -47719,7 +48533,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:683d-26.20.13031.18002", + "gpu:10de:11c0-26.21.14.4120", "os:Windows-10-18363", "pool:Skia" ], @@ -47744,7 +48558,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -47760,17 +48574,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47780,7 +48594,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47794,7 +48608,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -47802,7 +48616,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:683d-26.20.13031.18002", + "gpu:10de:11c0-26.21.14.4120", "os:Windows-10-18363", "pool:Skia" ], @@ -47827,7 +48641,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -47843,17 +48657,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47863,7 +48677,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47877,7 +48691,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"VkDrawableImportTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX660\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"savelayer_clipmask\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~FloatingPointTextureTest$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -47885,7 +48699,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:1002:683d-26.20.13031.18002", + "gpu:10de:11c0-26.21.14.4120", "os:Windows-10-18363", "pool:Skia" ], @@ -47910,7 +48724,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -47926,17 +48740,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -47946,7 +48760,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -47960,7 +48774,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -47968,7 +48782,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1401-26.21.14.4120", + "gpu:1002:683d-26.20.13031.18002", "os:Windows-10-18363", "pool:Skia" ], @@ -47993,7 +48807,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -48009,17 +48823,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48029,7 +48843,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48043,7 +48857,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -48051,7 +48865,7 @@ "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1401-26.21.14.4120", + "gpu:1002:683d-26.20.13031.18002", "os:Windows-10-18363", "pool:Skia" ], @@ -48076,7 +48890,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D": { "caches": [ { "name": "vpython", @@ -48092,17 +48906,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48112,7 +48926,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48126,15 +48940,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"Direct3D\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"d3d\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ColorTypeBackendAllocationTest$\\\",\\\"~^CompressedBackendAllocationTest$\\\",\\\"~^DDLSkSurfaceFlush$\\\",\\\"~^GrBackendTextureImageMipMappedTest$\\\",\\\"~^GrMeshTest$\\\",\\\"~^GrSurfaceRenderability$\\\",\\\"~^GrTextureMipMapInvalidationTest$\\\",\\\"~^PremulAlphaRoundTrip_Gpu$\\\",\\\"~^ReplaceSurfaceBackendTexture$\\\",\\\"~^SkImage_makeTextureImage$\\\",\\\"~^TextureIdleStateTest$\\\",\\\"~^TextureProxyTest$\\\",\\\"~^ImageAsyncReadPixels$\\\",\\\"~^SurfaceAsyncReadPixels$\\\",\\\"~^MorphologyFilterRadiusWithMirrorCTM_Gpu$\\\",\\\"~^ReadPixels_Gpu$\\\",\\\"~^ReadPixels_Texture$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-Vulkan", + "Build-Win-Clang-x86_64-Debug-Direct3D", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1401-26.21.14.4120", + "gpu:1002:683d-26.20.13031.18002", "os:Windows-10-18363", "pool:Skia" ], @@ -48159,7 +48973,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -48175,17 +48989,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48195,7 +49009,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48209,15 +49023,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"VkDrawableImportTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1401-26.21.14.4120", + "gpu:1002:683d-26.20.13031.18002", "os:Windows-10-18363", "pool:Skia" ], @@ -48242,7 +49056,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -48258,17 +49072,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48278,7 +49092,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48292,15 +49106,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-ANGLE", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1401-26.21.14.4120", + "gpu:1002:683d-26.20.13031.18002", "os:Windows-10-18363", "pool:Skia" ], @@ -48325,7 +49139,7 @@ "test" ] }, - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -48341,17 +49155,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48361,7 +49175,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48375,15 +49189,15 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release-Vulkan", + "Build-Win-Clang-x86_64-Release-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1401-26.21.14.4120", + "gpu:1002:683d-26.20.13031.18002", "os:Windows-10-18363", "pool:Skia" ], @@ -48408,7 +49222,7 @@ "test" ] }, - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D": { "caches": [ { "name": "vpython", @@ -48424,17 +49238,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48444,7 +49258,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48458,16 +49272,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"Direct3D\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"d3d\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ColorTypeBackendAllocationTest$\\\",\\\"~^CompressedBackendAllocationTest$\\\",\\\"~^DDLSkSurfaceFlush$\\\",\\\"~^GrBackendTextureImageMipMappedTest$\\\",\\\"~^GrMeshTest$\\\",\\\"~^GrSurfaceRenderability$\\\",\\\"~^GrTextureMipMapInvalidationTest$\\\",\\\"~^PremulAlphaRoundTrip_Gpu$\\\",\\\"~^ReplaceSurfaceBackendTexture$\\\",\\\"~^SkImage_makeTextureImage$\\\",\\\"~^TextureIdleStateTest$\\\",\\\"~^TextureProxyTest$\\\",\\\"~^ImageAsyncReadPixels$\\\",\\\"~^SurfaceAsyncReadPixels$\\\",\\\"~^MorphologyFilterRadiusWithMirrorCTM_Gpu$\\\",\\\"~^ReadPixels_Gpu$\\\",\\\"~^ReadPixels_Texture$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-x86_64-Debug", + "Build-Win-Clang-x86_64-Release-Direct3D", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", - "os:Windows-10-16299", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -48491,7 +49305,7 @@ "test" ] }, - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -48507,17 +49321,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48527,7 +49341,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48541,16 +49355,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"RadeonHD7770\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleA\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"VkDrawableImportTest\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-x86_64-Debug-Vulkan", + "Build-Win-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", - "os:Windows-10-16299", + "gpu:1002:683d-26.20.13031.18002", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -48574,7 +49388,7 @@ "test" ] }, - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -48590,17 +49404,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48610,7 +49424,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48624,16 +49438,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-x86_64-Release", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", - "os:Windows-10-16299", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -48657,7 +49471,7 @@ "test" ] }, - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -48673,17 +49487,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48693,7 +49507,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48707,16 +49521,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-x86_64-Release-Vulkan", + "Build-Win-Clang-x86_64-Debug-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:10de:1cb3-25.21.14.1678", - "os:Windows-10-16299", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -48740,7 +49554,7 @@ "test" ] }, - "Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -48748,20 +49562,25 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48771,7 +49590,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48785,16 +49604,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon850\\\",\\\"model\\\",\\\"LenovoYogaC630\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-arm64-Debug", + "Build-Win-Clang-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:arm64-64-Snapdragon850", - "os:Windows-10", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -48818,7 +49637,7 @@ "test" ] }, - "Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -48826,20 +49645,25 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48849,7 +49673,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48863,16 +49687,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"LenovoYogaC630\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"GrDefaultPathRendererTest\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"PinnedImageTest\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-arm64-Debug-ANGLE", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "gpu:Adreno630", - "os:Windows-10", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -48896,7 +49720,7 @@ "test" ] }, - "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -48912,17 +49736,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -48932,7 +49756,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -48946,17 +49770,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es2\\\",\\\"angle_gl_es2\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es2_msaa8\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_gl_es3\\\",\\\"angle_gl_es2_msaa8\\\",\\\"angle_gl_es3_msaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86-Debug", + "Build-Win-Clang-x86_64-Release-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -48968,19 +49791,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 21600000000000, + "execution_timeout_ns": 14400000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 21600000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All": { + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -48996,17 +49819,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49016,7 +49839,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49030,17 +49853,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"GTX960\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"ShuttleC\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86-Release", + "Build-Win-Clang-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "gpu:10de:1401-26.21.14.4120", + "os:Windows-10-18363", "pool:Skia" ], "env_prefixes": { @@ -49064,7 +49886,7 @@ "test" ] }, - "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -49080,17 +49902,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49100,7 +49922,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49114,17 +49936,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ASAN", + "Build-Win-MSVC-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -49143,12 +49964,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D": { "caches": [ { "name": "vpython", @@ -49164,17 +49985,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49184,7 +50005,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49198,17 +50019,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"verylargebitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"verylarge_picture_image\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Direct3D\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"d3d\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ColorTypeBackendAllocationTest$\\\",\\\"~^CompressedBackendAllocationTest$\\\",\\\"~^DDLSkSurfaceFlush$\\\",\\\"~^GrBackendTextureImageMipMappedTest$\\\",\\\"~^GrMeshTest$\\\",\\\"~^GrSurfaceRenderability$\\\",\\\"~^GrTextureMipMapInvalidationTest$\\\",\\\"~^PremulAlphaRoundTrip_Gpu$\\\",\\\"~^ReplaceSurfaceBackendTexture$\\\",\\\"~^SkImage_makeTextureImage$\\\",\\\"~^TextureIdleStateTest$\\\",\\\"~^TextureProxyTest$\\\",\\\"~^ImageAsyncReadPixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug-ASAN", + "Build-Win-MSVC-x86_64-Debug-Direct3D", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -49227,12 +50047,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 1, + "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -49248,17 +50068,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49268,7 +50088,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49282,17 +50102,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-MSVC-x86_64-Debug-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -49316,7 +50135,7 @@ "test" ] }, - "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -49332,17 +50151,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49352,7 +50171,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49366,17 +50185,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gl\\\",\\\"gldft\\\",\\\"glsrgb\\\",\\\"glmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glsrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-x86-Debug", + "Build-Win-MSVC-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -49388,19 +50206,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 21600000000000, + "execution_timeout_ns": 14400000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 21600000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D": { "caches": [ { "name": "vpython", @@ -49416,17 +50234,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49436,7 +50254,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49450,17 +50268,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Direct3D\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"d3d\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--match\\\",\\\"~^ColorTypeBackendAllocationTest$\\\",\\\"~^CompressedBackendAllocationTest$\\\",\\\"~^DDLSkSurfaceFlush$\\\",\\\"~^GrBackendTextureImageMipMappedTest$\\\",\\\"~^GrMeshTest$\\\",\\\"~^GrSurfaceRenderability$\\\",\\\"~^GrTextureMipMapInvalidationTest$\\\",\\\"~^PremulAlphaRoundTrip_Gpu$\\\",\\\"~^ReplaceSurfaceBackendTexture$\\\",\\\"~^SkImage_makeTextureImage$\\\",\\\"~^TextureIdleStateTest$\\\",\\\"~^TextureProxyTest$\\\",\\\"~^ImageAsyncReadPixels$\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-x86-Release", + "Build-Win-MSVC-x86_64-Release-Direct3D", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -49484,7 +50301,7 @@ "test" ] }, - "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -49500,17 +50317,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49520,7 +50337,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49534,17 +50351,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"QuadroP400\\\",\\\"extra_config\\\",\\\"Vulkan\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"vk\\\",\\\"vkmsaa8\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-x86_64-Debug", + "Build-Win-MSVC-x86_64-Release-Vulkan", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "gpu:10de:1cb3-25.21.14.1678", + "os:Windows-10-16299", "pool:Skia" ], "env_prefixes": { @@ -49568,7 +50384,7 @@ "test" ] }, - "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { + "Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -49576,25 +50392,20 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49604,7 +50415,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49618,17 +50429,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Snapdragon850\\\",\\\"model\\\",\\\"LenovoYogaC630\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-MSVC-x86_64-Release", + "Build-Win-MSVC-arm64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "machine_type:n1-standard-16", - "os:Windows-Server-17763", + "cpu:arm64-64-Snapdragon850", + "os:Windows-10", "pool:Skia" ], "env_prefixes": { @@ -49652,7 +50462,7 @@ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All": { + "Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -49660,25 +50470,20 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49688,7 +50493,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49702,16 +50507,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"Adreno630\\\",\\\"extra_config\\\",\\\"ANGLE\\\",\\\"model\\\",\\\"LenovoYogaC630\\\",\\\"os\\\",\\\"Win10\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"angle_d3d11_es3\\\",\\\"angle_d3d11_es3_msaa8\\\",\\\"angle_d3d9_es2\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"Programs\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"GrDefaultPathRendererTest\\\",\\\"_\\\",\\\"tests\\\",\\\"_\\\",\\\"PinnedImageTest\\\",\\\"--match\\\",\\\"~BlurMaskBiggerThanDest\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86-Debug", + "Build-Win-MSVC-arm64-Debug-ANGLE", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-7-SP1", + "gpu:Adreno630", + "os:Windows-10", "pool:Skia" ], "env_prefixes": { @@ -49723,19 +50528,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 21600000000000, + "execution_timeout_ns": 14400000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 21600000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX512-x86-Release-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -49751,17 +50556,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49771,7 +50576,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49785,16 +50590,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86-Release", + "Build-Win-Clang-x86-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -49806,19 +50612,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, + "execution_timeout_ns": 21600000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 21600000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All": { "caches": [ { "name": "vpython", @@ -49834,17 +50640,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49854,7 +50660,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49868,16 +50674,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -49901,7 +50708,7 @@ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN": { "caches": [ { "name": "vpython", @@ -49917,17 +50724,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -49937,7 +50744,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -49951,16 +50758,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Debug-ASAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -49979,12 +50787,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts_GDI": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs": { "caches": [ { "name": "vpython", @@ -50000,17 +50808,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -50020,7 +50828,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -50034,16 +50842,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts_GDI\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"extra_config\\\",\\\"NativeFonts_GDI\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--gdi\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts_GDI\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"ASAN_BonusConfigs\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"g8\\\",\\\"565\\\",\\\"pic-8888\\\",\\\"serialize-8888\\\",\\\"f16\\\",\\\"srgb\\\",\\\"esrgb\\\",\\\"narrow\\\",\\\"enarrow\\\",\\\"p3\\\",\\\"ep3\\\",\\\"rec2020\\\",\\\"erec2020\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"dstreadshuffle\\\",\\\"g8\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"g8\\\",\\\"colorImage\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_batch_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"strict_constraint_no_red_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fast_constraint_red_is_allowed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"c_gms\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"colortype_xfermodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_0.75_0\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds_1_-0.25\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_bounds\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_match\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"fontmgr_iter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemasksubset\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_domain\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_crop_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"imagemakewithfilter_ref\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapfilters\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"bitmapshaders\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"convex_poly_clip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"extractalpha\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_checkerboard_32_32_g8\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"filterbitmap_image_mandrill_64\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadows\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"simpleaaclip_aaclip\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes_npot\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"scaled_tilemodes\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"typefacerendering_pfaMac\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"parsedpaths\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"ImageGeneratorExternal_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"shadow_utils\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"persp_images\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"all_bitmap_configs\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"makecolorspace\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"readpixels\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"draw_image_set_rect_to_rect\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"compositor_quads_shader\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"wacky_yuv_formats_qtr\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"analytic_antialias_convex\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"verylargebitmap\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"verylarge_picture_image\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"drawfilter\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-picture\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-raster\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"image-cacherator-from-ctable\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_bw\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"complexclip4_aa\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"p3\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up_large\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_text_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_up\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_dog_down\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_rose\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"async_rescale_and_read_no_bleed\\\",\\\"pic-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"serialize-8888\\\",\\\"gm\\\",\\\"_\\\",\\\"blurrect_compare\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-ASAN_BonusConfigs\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"false\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-Clang-x86_64-Debug-ASAN", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50062,12 +50871,12 @@ }, "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", - "max_attempts": 2, + "max_attempts": 1, "outputs": [ "test" ] }, - "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Release-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { "caches": [ { "name": "vpython", @@ -50083,17 +50892,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -50103,7 +50912,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -50117,16 +50926,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SkVM\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--skvm\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-Clang-x86_64-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-7-SP1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50150,7 +50960,7 @@ "test" ] }, - "Test-Win8-Clang-Golo-CPU-AVX512-x86-Debug-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -50166,17 +50976,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -50186,7 +50996,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -50200,16 +51010,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX512-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win8\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"abnormal.wbmp\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win8-Clang-Golo-CPU-AVX512-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86-Debug", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-8.1-SP0", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50221,19 +51032,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 21600000000000, + "execution_timeout_ns": 14400000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 21600000000000, + "io_timeout_ns": 14400000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win8-Clang-Golo-CPU-AVX512-x86-Release-All": { + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM": { "caches": [ { "name": "vpython", @@ -50249,17 +51060,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -50269,7 +51080,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -50283,16 +51094,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX512-x86-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win8\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"abnormal.wbmp\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win8-Clang-Golo-CPU-AVX512-x86-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SkVM\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--skvm\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86-Release", + "Build-Win-Clang-x86_64-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-8.1-SP0", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50316,7 +51128,7 @@ "test" ] }, - "Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Debug-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -50332,17 +51144,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -50352,7 +51164,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -50366,16 +51178,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win8\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Debug", + "Build-Win-MSVC-x86-Debug", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-8.1-SP0", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50387,19 +51200,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, + "execution_timeout_ns": 21600000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 21600000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Release-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All": { "caches": [ { "name": "vpython", @@ -50415,17 +51228,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/skimage", @@ -50435,7 +51248,7 @@ { "name": "skia/bots/skp", "path": "skp", - "version": "version:243" + "version": "version:248" }, { "name": "skia/bots/svg", @@ -50449,16 +51262,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win8\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Win-Clang-x86_64-Release", + "Build-Win-MSVC-x86-Release", "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", - "os:Windows-8.1-SP0", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50482,7 +51296,7 @@ "test" ] }, - "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -50490,25 +51304,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -50517,20 +51346,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7800\\\",\\\"model\\\",\\\"iPadPro\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Debug-iOS", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-MSVC-x86_64-Debug", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPad6,3", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50554,7 +51380,7 @@ "test" ] }, - "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All-Metal": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { "caches": [ { "name": "vpython", @@ -50562,25 +51388,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -50589,20 +51430,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7800\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPadPro\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SkVM\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--skvm\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Debug-iOS_Metal", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-MSVC-x86_64-Debug", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPad6,3", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50626,7 +51464,7 @@ "test" ] }, - "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -50634,25 +51472,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -50661,20 +51514,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7800\\\",\\\"model\\\",\\\"iPadPro\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Release-iOS", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-MSVC-x86_64-Release", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPad6,3", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50698,7 +51548,7 @@ "test" ] }, - "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal": { + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM": { "caches": [ { "name": "vpython", @@ -50706,25 +51556,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -50733,20 +51598,17 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7800\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPadPro\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"MSVC\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX2\\\",\\\"extra_config\\\",\\\"SkVM\\\",\\\"model\\\",\\\"GCE\\\",\\\"os\\\",\\\"Win2019\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--skvm\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Release-iOS_Metal", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-MSVC-x86_64-Release", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPad6,3", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:x86-64-Haswell_GCE", + "machine_type:n1-standard-16", + "os:Windows-Server-17763", "pool:Skia" ], "env_prefixes": { @@ -50770,7 +51632,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All": { + "Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -50778,25 +51640,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -50805,20 +51682,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA13\\\",\\\"model\\\",\\\"iPhone11\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Debug-iOS", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86-Debug", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone12,1", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -50830,19 +51703,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, + "execution_timeout_ns": 21600000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 21600000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All-Metal": { + "Test-Win7-Clang-Golo-CPU-AVX512-x86-Release-All": { "caches": [ { "name": "vpython", @@ -50850,25 +51723,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -50877,20 +51765,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA13\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone11\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Debug-iOS_Metal", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86-Release", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone12,1", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -50914,7 +51798,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All": { + "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -50922,25 +51806,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -50949,20 +51848,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA13\\\",\\\"model\\\",\\\"iPhone11\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Release-iOS", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Debug", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone12,1", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -50986,7 +51881,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal": { + "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -50994,25 +51889,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -51021,20 +51931,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA13\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone11\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"extra_config\\\",\\\"NativeFonts\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Release-iOS_Metal", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Debug", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone12,1", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -51058,7 +51964,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All": { + "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts_GDI": { "caches": [ { "name": "vpython", @@ -51066,25 +51972,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-12.4", - "path": "ios-dev-image-12.4", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -51093,20 +52014,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6450\\\",\\\"model\\\",\\\"iPhone6\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts_GDI\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"extra_config\\\",\\\"NativeFonts_GDI\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--gdi\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Debug-All-NativeFonts_GDI\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Debug-iOS", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Debug", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone7,2", - "libimobiledevice:1582155448", - "os:iOS-12.4.5", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -51130,7 +52047,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All-Metal": { + "Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -51138,25 +52055,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-12.4", - "path": "ios-dev-image-12.4", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -51165,20 +52097,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6450\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone6\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win7\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win7-Clang-Golo-CPU-AVX512-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Debug-iOS_Metal", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Release", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone7,2", - "libimobiledevice:1582155448", - "os:iOS-12.4.5", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-7-SP1", "pool:Skia" ], "env_prefixes": { @@ -51202,7 +52130,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All": { + "Test-Win8-Clang-Golo-CPU-AVX512-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -51210,25 +52138,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-12.4", - "path": "ios-dev-image-12.4", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -51237,20 +52180,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6450\\\",\\\"model\\\",\\\"iPhone6\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX512-x86-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win8\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"abnormal.wbmp\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win8-Clang-Golo-CPU-AVX512-x86-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Release-iOS", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86-Debug", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone7,2", - "libimobiledevice:1582155448", - "os:iOS-12.4.5", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-8.1-SP0", "pool:Skia" ], "env_prefixes": { @@ -51262,19 +52201,19 @@ "cache/vpython" ] }, - "execution_timeout_ns": 14400000000000, + "execution_timeout_ns": 21600000000000, "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 14400000000000, + "io_timeout_ns": 21600000000000, "isolate": "test_skia_bundled.isolate", "max_attempts": 2, "outputs": [ "test" ] }, - "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal": { + "Test-Win8-Clang-Golo-CPU-AVX512-x86-Release-All": { "caches": [ { "name": "vpython", @@ -51282,25 +52221,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-12.4", - "path": "ios-dev-image-12.4", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -51309,20 +52263,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6450\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone6\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX512-x86-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win8\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--threads\\\",\\\"4\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"image\\\",\\\"f16\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"abnormal.wbmp\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win8-Clang-Golo-CPU-AVX512-x86-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Release-iOS_Metal", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86-Release", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone7,2", - "libimobiledevice:1582155448", - "os:iOS-12.4.5", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-8.1-SP0", "pool:Skia" ], "env_prefixes": { @@ -51346,7 +52296,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All": { + "Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -51354,25 +52304,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -51381,20 +52346,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7600\\\",\\\"model\\\",\\\"iPhone7\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win8\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Debug-iOS", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Debug", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone9,1", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-8.1-SP0", "pool:Skia" ], "env_prefixes": { @@ -51418,7 +52379,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal": { + "Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -51426,25 +52387,40 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { - "name": "skia/bots/ios-dev-image-13.3", - "path": "ios-dev-image-13.3", - "version": "version:0" + "name": "skia/bots/skimage", + "path": "skimage", + "version": "version:40" + }, + { + "name": "skia/bots/skp", + "path": "skp", + "version": "version:248" + }, + { + "name": "skia/bots/svg", + "path": "svg", + "version": "version:9" } ], "command": [ @@ -51453,20 +52429,16 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7600\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone7\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"x86_64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"CPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AVX512\\\",\\\"model\\\",\\\"Golo\\\",\\\"os\\\",\\\"Win8\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nogpu\\\",\\\"--config\\\",\\\"8888\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"pal8os2v2-16.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"gm\\\",\\\"_\\\",\\\"composeshader_bitmap\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"testimgari.jpg\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle8-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rle4-height-negative.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-Win8-Clang-Golo-CPU-AVX512-x86_64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Debug-iOS_Metal", - "Housekeeper-PerCommit-BundleRecipes", - "Housekeeper-PerCommit-IsolateSKP", - "Housekeeper-PerCommit-IsolateSVG", - "Housekeeper-PerCommit-IsolateSkImage" + "Build-Win-Clang-x86_64-Release", + "Housekeeper-PerCommit-BundleRecipes" ], "dimensions": [ - "device_type:iPhone9,1", - "libimobiledevice:1582155448", - "os:iOS-13.3.1", + "cpu:Intel64_Family_6_Model_85_Stepping_7__GenuineIntel", + "os:Windows-8.1-SP0", "pool:Skia" ], "env_prefixes": { @@ -51490,7 +52462,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All": { + "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -51501,17 +52473,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -51525,18 +52497,18 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7600\\\",\\\"model\\\",\\\"iPhone7\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7800\\\",\\\"model\\\",\\\"iPadPro\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "Build-Mac-Clang-arm64-Release-iOS", + "Build-Mac-Clang-arm64-Debug-iOS", "Housekeeper-PerCommit-BundleRecipes", "Housekeeper-PerCommit-IsolateSKP", "Housekeeper-PerCommit-IsolateSVG", "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone9,1", + "device_type:iPad6,3", "libimobiledevice:1582155448", "os:iOS-13.3.1", "pool:Skia" @@ -51562,7 +52534,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal": { + "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -51573,17 +52545,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -51597,7 +52569,151 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7600\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone7\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7800\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPadPro\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Debug-iOS_Metal", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPad6,3", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7800\\\",\\\"model\\\",\\\"iPadPro\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Release-iOS", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPad6,3", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7800\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPadPro\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -51608,7 +52724,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone9,1", + "device_type:iPad6,3", "libimobiledevice:1582155448", "os:iOS-13.3.1", "pool:Skia" @@ -51634,7 +52750,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All": { + "Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -51645,17 +52761,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -51669,7 +52785,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA11\\\",\\\"model\\\",\\\"iPhone8\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA13\\\",\\\"model\\\",\\\"iPhone11\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -51680,7 +52796,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone10,1", + "device_type:iPhone12,1", "libimobiledevice:1582155448", "os:iOS-13.3.1", "pool:Skia" @@ -51706,7 +52822,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All-Metal": { + "Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -51717,17 +52833,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -51741,7 +52857,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA11\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone8\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA13\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone11\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -51752,7 +52868,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone10,1", + "device_type:iPhone12,1", "libimobiledevice:1582155448", "os:iOS-13.3.1", "pool:Skia" @@ -51778,7 +52894,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All": { + "Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -51789,17 +52905,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -51813,7 +52929,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA11\\\",\\\"model\\\",\\\"iPhone8\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA13\\\",\\\"model\\\",\\\"iPhone11\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -51824,7 +52940,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone10,1", + "device_type:iPhone12,1", "libimobiledevice:1582155448", "os:iOS-13.3.1", "pool:Skia" @@ -51850,7 +52966,7 @@ "test" ] }, - "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal": { + "Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -51861,17 +52977,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "skia/bots/ios-dev-image-13.3", @@ -51885,7 +53001,7 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "test", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA11\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone8\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA13\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone11\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ @@ -51896,7 +53012,7 @@ "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "device_type:iPhone10,1", + "device_type:iPhone12,1", "libimobiledevice:1582155448", "os:iOS-13.3.1", "pool:Skia" @@ -51922,7 +53038,7 @@ "test" ] }, - "Upload-BuildStats-Debian10-EMCC-asmjs-Release-PathKit": { + "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -51931,24 +53047,96 @@ ], "cipd_packages": [ { - "name": "infra/gsutil", + "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "version:4.46" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, + { + "name": "skia/bots/ios-dev-image-12.4", + "path": "ios-dev-image-12.4", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6450\\\",\\\"model\\\",\\\"iPhone6\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Debug-iOS", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone7,2", + "libimobiledevice:1582155448", + "os:iOS-12.4.5", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-12.4", + "path": "ios-dev-image-12.4", + "version": "version:0" } ], "command": [ @@ -51956,19 +53144,21 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_buildstats_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian10-EMCC-asmjs-Release-PathKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6450\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone6\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "BuildStats-Debian10-EMCC-asmjs-Release-PathKit", - "Housekeeper-PerCommit-BundleRecipes" + "Build-Mac-Clang-arm64-Debug-iOS_Metal", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" ], "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-10.3", + "device_type:iPhone7,2", + "libimobiledevice:1582155448", + "os:iOS-12.4.5", "pool:Skia" ], "env_prefixes": { @@ -51980,16 +53170,1543 @@ "cache/vpython" ] }, - "execution_timeout_ns": 3600000000000, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, "extra_tags": { "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "outputs": [ + "test" + ] }, - "Upload-BuildStats-Debian10-EMCC-wasm-Release-CanvasKit": { + "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-12.4", + "path": "ios-dev-image-12.4", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6450\\\",\\\"model\\\",\\\"iPhone6\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Release-iOS", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone7,2", + "libimobiledevice:1582155448", + "os:iOS-12.4.5", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-12.4", + "path": "ios-dev-image-12.4", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGX6450\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone6\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Release-iOS_Metal", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone7,2", + "libimobiledevice:1582155448", + "os:iOS-12.4.5", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7600\\\",\\\"model\\\",\\\"iPhone7\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Debug-iOS", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone9,1", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7600\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone7\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Debug-iOS_Metal", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone9,1", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7600\\\",\\\"model\\\",\\\"iPhone7\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Release-iOS", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone9,1", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"PowerVRGT7600\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone7\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Release-iOS_Metal", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone9,1", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA11\\\",\\\"model\\\",\\\"iPhone8\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Debug-iOS", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone10,1", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Debug\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA11\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone8\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Debug-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Debug-iOS_Metal", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone10,1", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA11\\\",\\\"model\\\",\\\"iPhone8\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"gles\\\",\\\"glesdft\\\",\\\"glessrgb\\\",\\\"glesmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"glessrgb\\\",\\\"image\\\",\\\"_\\\",\\\"_\\\",\\\"gles\\\",\\\"skp\\\",\\\"_\\\",\\\"_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Release-iOS", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone10,1", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "skia/bots/ios-dev-image-13.3", + "path": "ios-dev-image-13.3", + "version": "version:0" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "test", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal\",\"dm_flags\":\"[\\\"dm\\\",\\\"--nameByHash\\\",\\\"--key\\\",\\\"arch\\\",\\\"arm64\\\",\\\"compiler\\\",\\\"Clang\\\",\\\"configuration\\\",\\\"Release\\\",\\\"cpu_or_gpu\\\",\\\"GPU\\\",\\\"cpu_or_gpu_value\\\",\\\"AppleA11\\\",\\\"extra_config\\\",\\\"Metal\\\",\\\"model\\\",\\\"iPhone8\\\",\\\"os\\\",\\\"iOS\\\",\\\"style\\\",\\\"default\\\",\\\"--randomProcessorTest\\\",\\\"--nocpu\\\",\\\"--config\\\",\\\"mtl\\\",\\\"mtlmsaa4\\\",\\\"--src\\\",\\\"tests\\\",\\\"gm\\\",\\\"image\\\",\\\"colorImage\\\",\\\"svg\\\",\\\"--blacklist\\\",\\\"_\\\",\\\"svg\\\",\\\"_\\\",\\\"svgparse_\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgba32abf.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24prof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"rgb24lprof.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"8bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"4bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"32bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"24bpp-pixeldata-cropped.bmp\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"frame_larger_than_image.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc2.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc3.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc4.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc5.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc6.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc7.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc8.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc9.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc10.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc11.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc12.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc13.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc14.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.png\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"incInterlaced.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc1.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"inc0.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"butterfly.gif\\\",\\\"_\\\",\\\"image\\\",\\\"gen_platf\\\",\\\"error\\\",\\\"_\\\",\\\"test\\\",\\\"_\\\",\\\"GrStyledShape\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced1.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced2.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\"interlaced3.png\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".arw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".cr2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".dng\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".nrw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".orf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".raf\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".rw2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".pef\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".srw\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ARW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".CR2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".DNG\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".NRW\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".ORF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RAF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".RW2\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".PEF\\\",\\\"_\\\",\\\"image\\\",\\\"_\\\",\\\".SRW\\\",\\\"--nonativeFonts\\\",\\\"--verbose\\\"]\",\"dm_properties\":\"{\\\"buildbucket_build_id\\\":\\\"<(BUILDBUCKET_BUILD_ID)\\\",\\\"builder\\\":\\\"Test-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal\\\",\\\"gitHash\\\":\\\"<(REVISION)\\\",\\\"issue\\\":\\\"<(ISSUE)\\\",\\\"patch_storage\\\":\\\"<(PATCH_STORAGE)\\\",\\\"patchset\\\":\\\"<(PATCHSET)\\\",\\\"swarming_bot_id\\\":\\\"${SWARMING_BOT_ID}\\\",\\\"swarming_task_id\\\":\\\"${SWARMING_TASK_ID}\\\",\\\"task_id\\\":\\\"<(TASK_ID)\\\"}\",\"do_upload\":\"true\",\"gold_hashes_url\":\"https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt\",\"images\":\"true\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"resources\":\"true\",\"revision\":\"<(REVISION)\",\"skps\":\"true\",\"svgs\":\"true\",\"swarm_out_dir\":\"test\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Build-Mac-Clang-arm64-Release-iOS_Metal", + "Housekeeper-PerCommit-BundleRecipes", + "Housekeeper-PerCommit-IsolateSKP", + "Housekeeper-PerCommit-IsolateSVG", + "Housekeeper-PerCommit-IsolateSkImage" + ], + "dimensions": [ + "device_type:iPhone10,1", + "libimobiledevice:1582155448", + "os:iOS-13.3.1", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 14400000000000, + "expiration_ns": 72000000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 14400000000000, + "isolate": "test_skia_bundled.isolate", + "max_attempts": 2, + "outputs": [ + "test" + ] + }, + "Upload-BuildStats-Debian10-EMCC-asmjs-Release-PathKit": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian10-EMCC-asmjs-Release-PathKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "BuildStats-Debian10-EMCC-asmjs-Release-PathKit", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-BuildStats-Debian10-EMCC-wasm-Release-CanvasKit": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian10-EMCC-wasm-Release-CanvasKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "BuildStats-Debian10-EMCC-wasm-Release-CanvasKit", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-BuildStats-Debian10-EMCC-wasm-Release-CanvasKit_CPU": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian10-EMCC-wasm-Release-CanvasKit_CPU\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "BuildStats-Debian10-EMCC-wasm-Release-CanvasKit_CPU", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-BuildStats-Debian10-EMCC-wasm-Release-PathKit": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian10-EMCC-wasm-Release-PathKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "BuildStats-Debian10-EMCC-wasm-Release-PathKit", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-BuildStats-Debian9-Clang-arm-Release-Flutter_Android_Docker": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_buildstats_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-Clang-arm-Release-Flutter_Android_Docker\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "BuildStats-Debian9-Clang-arm-Release-Flutter_Android_Docker", + "Housekeeper-PerCommit-BundleRecipes" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -52005,17 +54722,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52023,13 +54740,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_buildstats_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian10-EMCC-wasm-Release-CanvasKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "BuildStats-Debian10-EMCC-wasm-Release-CanvasKit", - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52056,7 +54773,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-BuildStats-Debian10-EMCC-wasm-Release-CanvasKit_CPU": { + "Upload-Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -52072,17 +54789,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52090,13 +54807,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_buildstats_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian10-EMCC-wasm-Release-CanvasKit_CPU\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "BuildStats-Debian10-EMCC-wasm-Release-CanvasKit_CPU", - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52123,7 +54840,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-BuildStats-Debian10-EMCC-wasm-Release-PathKit": { + "Upload-Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -52139,17 +54856,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52157,13 +54874,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_buildstats_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian10-EMCC-wasm-Release-PathKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "BuildStats-Debian10-EMCC-wasm-Release-PathKit", - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52190,7 +54907,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-BuildStats-Debian9-Clang-arm-Release-Flutter_Android_Docker": { + "Upload-Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -52206,17 +54923,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52224,13 +54941,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_buildstats_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"BuildStats-Debian9-Clang-arm-Release-Flutter_Android_Docker\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ - "BuildStats-Debian9-Clang-arm-Release-Flutter_Android_Docker", - "Housekeeper-PerCommit-BundleRecipes" + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52257,7 +54974,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android": { + "Upload-Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -52273,17 +54990,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52292,12 +55009,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52324,7 +55041,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing": { + "Upload-Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -52340,17 +55057,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52359,12 +55076,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android_SkottieTracing" + "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52391,7 +55108,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -52407,17 +55124,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52426,12 +55143,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52458,7 +55175,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -52474,17 +55191,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52493,12 +55210,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52525,7 +55242,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -52541,17 +55258,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52560,12 +55277,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52592,7 +55309,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads": { + "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -52608,17 +55325,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52627,12 +55344,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52659,7 +55376,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -52675,17 +55392,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52694,12 +55411,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android" + "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52726,7 +55443,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -52742,17 +55459,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52761,12 +55478,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52793,7 +55510,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -52809,17 +55526,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52828,12 +55545,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android" + "Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52860,7 +55577,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs": { "caches": [ { "name": "vpython", @@ -52876,17 +55593,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52895,12 +55612,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52927,7 +55644,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android": { + "Upload-Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -52943,17 +55660,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -52962,12 +55679,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android" + "Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -52994,7 +55711,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android": { + "Upload-Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -53010,17 +55727,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53029,12 +55746,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android" + "Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53061,7 +55778,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -53077,17 +55794,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53096,12 +55813,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android" + "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53128,7 +55845,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads": { + "Upload-Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -53144,17 +55861,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53163,12 +55880,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads" + "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53195,7 +55912,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -53211,17 +55928,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53230,12 +55947,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53262,7 +55979,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench": { "caches": [ { "name": "vpython", @@ -53278,17 +55995,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53297,12 +56014,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53329,7 +56046,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench": { "caches": [ { "name": "vpython", @@ -53345,17 +56062,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53364,12 +56081,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53396,7 +56113,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench": { "caches": [ { "name": "vpython", @@ -53412,17 +56129,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53431,12 +56148,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53463,7 +56180,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -53479,17 +56196,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53498,12 +56215,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53530,7 +56247,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android": { + "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench": { "caches": [ { "name": "vpython", @@ -53546,17 +56263,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53565,12 +56282,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android" + "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53597,7 +56314,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs": { + "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -53613,17 +56330,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53632,12 +56349,146 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Nexus5x-CPU-Snapdragon808-arm64-Release-All-Android_Wuffs" + "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53664,7 +56515,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -53680,17 +56531,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53699,12 +56550,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" + "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53731,7 +56582,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { + "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -53747,17 +56598,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53766,12 +56617,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android" + "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53798,7 +56649,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -53814,17 +56665,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53833,12 +56684,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android" + "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53865,7 +56716,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -53881,17 +56732,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53900,12 +56751,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan" + "Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53932,7 +56783,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { + "Upload-Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -53948,17 +56799,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -53967,12 +56818,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android" + "Perf-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -53999,7 +56850,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench": { + "Upload-Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -54015,17 +56866,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54034,12 +56885,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_CCPR_Skpbench" + "Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54066,7 +56917,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench": { + "Upload-Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { "caches": [ { "name": "vpython", @@ -54082,17 +56933,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54101,12 +56952,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Mskp_Skpbench" + "Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54133,7 +56984,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench": { + "Upload-Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { "caches": [ { "name": "vpython", @@ -54149,17 +57000,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54168,12 +57019,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Skpbench" + "Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54200,7 +57051,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { "caches": [ { "name": "vpython", @@ -54216,17 +57067,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54235,12 +57086,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan" + "Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54267,7 +57118,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench": { + "Upload-Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -54283,17 +57134,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54302,12 +57153,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan_Skpbench" + "Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54334,7 +57185,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { + "Upload-Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { "caches": [ { "name": "vpython", @@ -54350,17 +57201,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54369,12 +57220,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" + "Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54401,7 +57252,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { "caches": [ { "name": "vpython", @@ -54417,17 +57268,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54436,12 +57287,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" + "Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54468,7 +57319,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { + "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -54484,17 +57335,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54503,12 +57354,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android" + "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54535,7 +57386,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -54551,17 +57402,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54570,12 +57421,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" + "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54602,7 +57453,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { + "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { "caches": [ { "name": "vpython", @@ -54618,17 +57469,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54637,12 +57488,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" + "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54669,7 +57520,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { "caches": [ { "name": "vpython", @@ -54685,17 +57536,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54704,12 +57555,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" + "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54736,7 +57587,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { + "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing": { "caches": [ { "name": "vpython", @@ -54752,17 +57603,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54771,12 +57622,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android" + "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54803,7 +57654,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { + "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs": { "caches": [ { "name": "vpython", @@ -54819,17 +57670,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54838,12 +57689,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan" + "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54870,7 +57721,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { + "Upload-Perf-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -54886,17 +57737,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54905,12 +57756,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android" + "Perf-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -54937,7 +57788,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { + "Upload-Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -54953,17 +57804,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -54972,12 +57823,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All" + "Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55004,7 +57855,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { + "Upload-Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -55020,17 +57871,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55039,12 +57890,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All" + "Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55071,7 +57922,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { + "Upload-Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -55087,17 +57938,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55106,12 +57957,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All" + "Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55138,7 +57989,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { + "Upload-Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing": { "caches": [ { "name": "vpython", @@ -55154,17 +58005,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55173,12 +58024,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All" + "Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55205,7 +58056,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { + "Upload-Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -55221,17 +58072,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55240,12 +58091,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All" + "Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55272,7 +58123,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { + "Upload-Perf-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -55288,17 +58139,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55307,12 +58158,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All" + "Perf-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55339,7 +58190,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Perf-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -55355,17 +58206,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55374,12 +58225,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Perf-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55406,7 +58257,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { + "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -55422,17 +58273,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55441,12 +58292,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs" + "Perf-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55473,7 +58324,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { + "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -55489,17 +58340,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55508,12 +58359,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast" + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55540,7 +58391,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { + "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -55556,17 +58407,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55575,12 +58426,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER" + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55607,7 +58458,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing": { + "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_RenderSKP": { "caches": [ { "name": "vpython", @@ -55623,17 +58474,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55642,12 +58493,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_RenderSKP\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkottieTracing" + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_RenderSKP" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55674,7 +58525,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs": { + "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames": { "caches": [ { "name": "vpython", @@ -55690,17 +58541,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55709,12 +58560,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Wuffs" + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55741,7 +58592,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All": { + "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM": { "caches": [ { "name": "vpython", @@ -55757,17 +58608,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55776,12 +58627,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All" + "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55808,7 +58659,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { + "Upload-Perf-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -55824,17 +58675,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55843,12 +58694,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All" + "Perf-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55875,7 +58726,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { + "Upload-Perf-Debian10-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb": { "caches": [ { "name": "vpython", @@ -55891,17 +58742,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55910,12 +58761,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan" + "Perf-Debian10-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -55942,7 +58793,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { + "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -55958,17 +58809,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -55977,12 +58828,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All" + "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56009,7 +58860,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing": { + "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -56025,17 +58876,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56044,12 +58895,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-SkottieTracing" + "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56076,7 +58927,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { + "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -56092,17 +58943,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56111,12 +58962,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan" + "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56143,7 +58994,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { + "Upload-Perf-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -56159,17 +59010,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56178,12 +59029,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All" + "Perf-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56210,7 +59061,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { + "Upload-Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -56226,17 +59077,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56245,12 +59096,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All" + "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56277,7 +59128,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { + "Upload-Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -56293,17 +59144,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56312,12 +59163,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit" + "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56344,7 +59195,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { + "Upload-Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -56360,17 +59211,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56379,12 +59230,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit" + "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56411,7 +59262,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { + "Upload-Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -56427,17 +59278,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56446,12 +59297,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit" + "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56478,7 +59329,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames": { + "Upload-Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -56494,17 +59345,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56513,12 +59364,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-Puppeteer_SkottieFrames" + "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56545,7 +59396,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM": { + "Upload-Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -56561,17 +59412,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56580,12 +59431,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-SkottieWASM" + "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56612,7 +59463,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { + "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -56628,17 +59479,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56647,12 +59498,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit" + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56679,7 +59530,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Debian10-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb": { + "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -56695,17 +59546,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56714,12 +59565,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Debian10-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Debian10-none-GCE-CPU-AVX2-x86_64-Release-All-LottieWeb" + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56746,7 +59597,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { + "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -56762,17 +59613,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56781,12 +59632,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All" + "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56813,7 +59664,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer": { + "Upload-Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -56829,17 +59680,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56848,12 +59699,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-CommandBuffer" + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56880,7 +59731,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { + "Upload-Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -56896,17 +59747,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56915,12 +59766,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal" + "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -56947,7 +59798,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All": { + "Upload-Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_RenderSKP": { "caches": [ { "name": "vpython", @@ -56963,17 +59814,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -56982,12 +59833,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_RenderSKP\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All" + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_RenderSKP" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57014,7 +59865,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All": { + "Upload-Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames": { "caches": [ { "name": "vpython", @@ -57030,17 +59881,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57049,12 +59900,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All" + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57081,7 +59932,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer": { + "Upload-Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM": { "caches": [ { "name": "vpython", @@ -57097,17 +59948,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57116,12 +59967,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-CommandBuffer" + "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57148,7 +59999,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal": { + "Upload-Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb": { "caches": [ { "name": "vpython", @@ -57164,17 +60015,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57183,12 +60034,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal" + "Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57215,7 +60066,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -57224,72 +60075,10 @@ ], "cipd_packages": [ { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.46" - }, - { - "name": "infra/tools/luci-auth/${platform}", + "name": "infra/3pp/tools/cpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "version:2.7.17.chromium.24" }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-10.3", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 3600000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Upload-Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -57298,17 +60087,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57317,12 +60106,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-CommandBuffer" + "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57349,7 +60138,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal": { + "Upload-Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -57358,72 +60147,10 @@ ], "cipd_packages": [ { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.46" - }, - { - "name": "infra/tools/luci-auth/${platform}", + "name": "infra/3pp/tools/cpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "version:2.7.17.chromium.24" }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-10.3", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 3600000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -57432,17 +60159,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57451,12 +60178,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" + "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57483,7 +60210,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer": { + "Upload-Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -57492,72 +60219,10 @@ ], "cipd_packages": [ { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.46" - }, - { - "name": "infra/tools/luci-auth/${platform}", + "name": "infra/3pp/tools/cpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "version:2.7.17.chromium.24" }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-CommandBuffer" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-10.3", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 3600000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Upload-Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -57566,17 +60231,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57585,12 +60250,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal" + "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57617,7 +60282,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -57625,6 +60290,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -57633,17 +60303,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57652,12 +60322,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" + "Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57684,7 +60354,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Upload-Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -57692,6 +60362,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -57700,17 +60375,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57719,12 +60394,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" + "Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57751,7 +60426,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames": { + "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -57759,6 +60434,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -57767,17 +60447,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57786,12 +60466,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-Puppeteer_SkottieFrames" + "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57818,7 +60498,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM": { + "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -57826,6 +60506,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -57834,17 +60519,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57853,12 +60538,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Ubuntu18-EMCC-Golo-GPU-QuadroP400-wasm-Release-All-SkottieWASM" + "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57885,7 +60570,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb": { + "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -57893,6 +60578,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -57901,17 +60591,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57920,12 +60610,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Ubuntu18-none-Golo-GPU-QuadroP400-x86_64-Release-All-LottieWeb" + "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -57952,7 +60642,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench": { "caches": [ { "name": "vpython", @@ -57973,17 +60663,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -57992,12 +60682,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All" + "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58024,7 +60714,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE": { + "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9": { "caches": [ { "name": "vpython", @@ -58045,17 +60735,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58064,12 +60754,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE" + "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58096,7 +60786,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan": { + "Upload-Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -58117,17 +60807,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58136,12 +60826,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan" + "Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58168,7 +60858,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -58189,17 +60879,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58208,12 +60898,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All" + "Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58240,7 +60930,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE": { + "Upload-Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -58261,17 +60951,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58280,12 +60970,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE" + "Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58312,7 +61002,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -58333,17 +61023,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58352,12 +61042,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" + "Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58384,7 +61074,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE": { + "Upload-Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -58405,17 +61095,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58424,12 +61114,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE" + "Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58456,7 +61146,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Upload-Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -58477,17 +61167,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58496,12 +61186,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" + "Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58528,7 +61218,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench": { + "Upload-Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -58549,17 +61239,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58568,12 +61258,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench" + "Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58600,7 +61290,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9": { + "Upload-Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -58621,17 +61311,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58640,12 +61330,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_Skpbench_DDLTotal_9x9" + "Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58672,7 +61362,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -58693,17 +61383,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58712,12 +61402,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All" + "Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58744,7 +61434,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE": { + "Upload-Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -58765,17 +61455,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58784,12 +61474,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE" + "Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58816,7 +61506,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -58837,17 +61527,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58856,12 +61546,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All" + "Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58888,7 +61578,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE": { + "Upload-Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -58909,17 +61599,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -58928,12 +61618,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE" + "Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -58960,7 +61650,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan": { + "Upload-Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -58981,17 +61671,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59000,12 +61690,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan" + "Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59032,7 +61722,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -59053,17 +61743,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59072,12 +61762,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All" + "Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59104,7 +61794,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE": { + "Upload-Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -59125,17 +61815,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59144,12 +61834,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE" + "Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59176,7 +61866,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan": { + "Upload-Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -59197,17 +61887,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59216,12 +61906,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan" + "Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59248,7 +61938,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -59269,17 +61959,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59288,12 +61978,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All" + "Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59320,7 +62010,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE": { + "Upload-Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -59341,17 +62031,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59360,12 +62050,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE" + "Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59392,7 +62082,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All": { + "Upload-Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -59413,17 +62103,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59432,12 +62122,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All" + "Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59464,7 +62154,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE": { + "Upload-Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -59485,17 +62175,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59504,12 +62194,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE" + "Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59536,7 +62226,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan": { + "Upload-Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -59557,17 +62247,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59576,12 +62266,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan" + "Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59608,7 +62298,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All": { + "Upload-Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -59629,17 +62319,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59648,12 +62338,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All" + "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59680,7 +62370,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE": { + "Upload-Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -59689,10 +62379,72 @@ ], "cipd_packages": [ { - "name": "infra/3pp/tools/cpython/${platform}", + "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -59701,17 +62453,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59720,12 +62472,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE" + "Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59752,7 +62504,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan": { + "Upload-Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -59760,11 +62512,6 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -59773,17 +62520,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59792,12 +62539,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan" + "Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59824,7 +62571,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All": { + "Upload-Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -59832,11 +62579,6 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -59845,17 +62587,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59864,12 +62606,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All" + "Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59896,7 +62638,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE": { + "Upload-Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -59904,11 +62646,6 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -59917,17 +62654,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -59936,12 +62673,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE" + "Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -59968,7 +62705,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan": { + "Upload-Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -59976,11 +62713,6 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -59989,17 +62721,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60008,12 +62740,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan" + "Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60040,7 +62772,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Upload-Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -60048,11 +62780,6 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -60061,17 +62788,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60080,12 +62807,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All" + "Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60112,7 +62839,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Upload-Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -60120,11 +62847,6 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -60133,17 +62855,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60152,12 +62874,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" + "Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60184,7 +62906,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All": { "caches": [ { "name": "vpython", @@ -60193,10 +62915,72 @@ ], "cipd_packages": [ { - "name": "infra/3pp/tools/cpython/${platform}", + "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_nano_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -60205,17 +62989,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60224,12 +63008,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60256,7 +63040,7 @@ "max_attempts": 2, "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All": { + "Upload-Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -60272,17 +63056,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60290,13 +63074,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All" + "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60321,9 +63105,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal": { + "Upload-Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -60339,17 +63123,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60357,13 +63141,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPadPro-GPU-PowerVRGT7800-arm64-Release-All-Metal" + "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60388,9 +63172,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All": { + "Upload-Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -60406,17 +63190,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60424,13 +63208,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All" + "Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60455,9 +63239,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal": { + "Upload-Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -60473,17 +63257,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60491,13 +63275,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPhone11-GPU-AppleA13-arm64-Release-All-Metal" + "Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60522,9 +63306,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All": { + "Upload-Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -60540,17 +63324,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60558,13 +63342,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All" + "Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60589,9 +63373,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal": { + "Upload-Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -60607,17 +63391,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60625,13 +63409,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPhone6-GPU-PowerVRGX6450-arm64-Release-All-Metal" + "Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60656,9 +63440,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All": { + "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -60674,17 +63458,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60692,13 +63476,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All" + "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60723,9 +63507,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal": { + "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -60741,17 +63525,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60759,13 +63543,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPhone7-GPU-PowerVRGT7600-arm64-Release-All-Metal" + "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60790,9 +63574,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All": { + "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -60808,17 +63592,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60826,13 +63610,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All" + "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60857,9 +63641,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal": { + "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts": { "caches": [ { "name": "vpython", @@ -60875,17 +63659,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60893,13 +63677,13 @@ "-u", "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", - "upload_nano_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal\",\"gs_bucket\":\"skia-perf\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Perf-iOS-Clang-iPhone8-GPU-AppleA11-arm64-Release-All-Metal" + "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60924,9 +63708,9 @@ "io_timeout_ns": 3600000000000, "isolate": "swarm_recipe.isolate", "max_attempts": 2, - "service_account": "skia-external-nano-uploader@skia-swarming-bots.iam.gserviceaccount.com" + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android": { + "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -60942,17 +63726,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -60961,12 +63745,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Debug-All-Android" + "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -60993,7 +63777,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android": { + "Upload-Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -61009,17 +63793,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61028,12 +63812,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-AndroidOne-GPU-Mali400MP2-arm-Release-All-Android" + "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61060,7 +63844,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -61076,17 +63860,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61095,12 +63879,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android" + "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61127,7 +63911,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -61143,17 +63927,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61162,12 +63946,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61194,7 +63978,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -61210,17 +63994,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61229,12 +64013,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android" + "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61261,7 +64045,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan": { + "Upload-Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -61277,17 +64061,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61296,12 +64080,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS20-GPU-MaliG77-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61328,7 +64112,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -61344,17 +64128,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61363,12 +64147,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android" + "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61395,7 +64179,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads": { + "Upload-Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -61411,17 +64195,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61430,12 +64214,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Debug-All-Android_NoGPUThreads" + "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61462,7 +64246,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -61478,17 +64262,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61497,12 +64281,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android" + "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61529,7 +64313,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts": { + "Upload-Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -61545,17 +64329,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61564,12 +64348,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NativeFonts" + "Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61596,7 +64380,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads": { + "Upload-Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -61612,17 +64396,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61631,12 +64415,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS6-GPU-MaliT760-arm64-Release-All-Android_NoGPUThreads" + "Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61663,7 +64447,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -61679,17 +64463,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61698,12 +64482,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61730,7 +64514,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android_NativeFonts": { "caches": [ { "name": "vpython", @@ -61746,17 +64530,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61765,12 +64549,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android_NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android_NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61797,7 +64581,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -61813,17 +64597,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61832,12 +64616,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61864,7 +64648,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan": { + "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -61880,17 +64664,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61899,12 +64683,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS7_G930FD-GPU-MaliT880-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61931,7 +64715,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -61947,17 +64731,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -61966,12 +64750,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -61998,7 +64782,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -62014,17 +64798,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62033,12 +64817,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62065,7 +64849,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -62081,17 +64865,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62100,12 +64884,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62132,7 +64916,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -62148,17 +64932,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62167,12 +64951,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-GalaxyS9-GPU-MaliG72-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62199,7 +64983,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Debug-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR": { "caches": [ { "name": "vpython", @@ -62215,17 +64999,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62234,12 +65018,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62266,7 +65050,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -62282,17 +65066,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62301,12 +65085,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-MotoG4-GPU-Adreno405-arm-Release-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62333,7 +65117,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -62349,17 +65133,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62368,12 +65152,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL3_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL3_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62400,7 +65184,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android_NativeFonts": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan": { "caches": [ { "name": "vpython", @@ -62416,17 +65200,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62435,12 +65219,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android_NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Debug-All-Android_NativeFonts" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_OOPRDDL_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62467,7 +65251,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads": { "caches": [ { "name": "vpython", @@ -62483,17 +65267,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62502,12 +65286,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm-Release-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62534,7 +65318,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -62550,17 +65334,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62569,12 +65353,146 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Debug-All-Android" + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62601,7 +65519,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -62617,17 +65535,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62636,12 +65554,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-CPU-TegraX1-arm64-Release-All-Android" + "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62668,7 +65586,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_NoGPUThreads": { + "Upload-Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -62684,17 +65602,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62703,12 +65621,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Debug-All-Android_NoGPUThreads" + "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62735,7 +65653,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads": { + "Upload-Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -62751,17 +65669,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62770,12 +65688,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_NoGPUThreads" + "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62802,7 +65720,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan": { + "Upload-Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -62818,17 +65736,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62837,12 +65755,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm-Release-All-Android_Vulkan" + "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62869,7 +65787,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR": { + "Upload-Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -62885,17 +65803,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62904,12 +65822,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_CCPR" + "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -62936,7 +65854,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL1_Vulkan": { + "Upload-Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -62952,17 +65870,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -62971,12 +65889,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL1_Vulkan" + "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63003,7 +65921,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL3_Vulkan": { + "Upload-Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -63019,17 +65937,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63038,12 +65956,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL3_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_DDL3_Vulkan" + "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63070,7 +65988,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads": { + "Upload-Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -63086,17 +66004,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63105,12 +66023,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Debug-All-Android_Vulkan_NoGPUThreads" + "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63137,7 +66055,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -63153,17 +66071,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63172,12 +66090,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63204,7 +66122,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan": { + "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -63220,17 +66138,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63239,12 +66157,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63271,7 +66189,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads": { + "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -63287,17 +66205,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63306,12 +66224,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-NVIDIA_Shield-GPU-TegraX1-arm64-Release-All-Android_Vulkan_NoGPUThreads" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63338,7 +66256,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android": { + "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan": { "caches": [ { "name": "vpython", @@ -63354,17 +66272,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63373,12 +66291,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Debug-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_OOPRDDL_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63405,7 +66323,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android": { + "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -63421,17 +66339,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63440,12 +66358,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Nexus5-CPU-Snapdragon800-arm-Release-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63472,7 +66390,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android": { + "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -63488,17 +66406,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63507,12 +66425,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Debug-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63539,7 +66457,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android": { + "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -63555,17 +66473,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63574,12 +66492,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Nexus5-GPU-Adreno330-arm-Release-All-Android" + "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63606,7 +66524,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -63622,17 +66540,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63641,12 +66559,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63673,7 +66591,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -63689,17 +66607,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63708,12 +66626,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Release-All-Android" + "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63740,7 +66658,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android": { + "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -63756,17 +66674,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63775,12 +66693,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Debug-All-Android" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63807,7 +66725,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android": { + "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR": { "caches": [ { "name": "vpython", @@ -63823,17 +66741,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63842,12 +66760,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Nexus7-GPU-Tegra3-arm-Release-All-Android" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63874,7 +66792,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -63890,17 +66808,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63909,12 +66827,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -63941,7 +66859,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan": { + "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -63957,17 +66875,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -63976,12 +66894,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL1_Vulkan" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64008,7 +66926,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan": { + "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -64024,17 +66942,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64043,12 +66961,146 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_DDL3_Vulkan" + "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64075,7 +67127,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -64091,17 +67143,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64110,12 +67162,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64142,7 +67194,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -64158,17 +67210,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64177,12 +67229,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android" + "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64209,7 +67261,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan": { + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -64225,17 +67277,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64244,12 +67296,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-P30-GPU-MaliG76-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64276,7 +67328,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -64292,17 +67344,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64311,12 +67363,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64343,7 +67395,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -64359,17 +67411,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64378,12 +67430,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel-CPU-Snapdragon821-arm64-Release-All-Android" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64410,7 +67462,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan": { "caches": [ { "name": "vpython", @@ -64426,17 +67478,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64445,12 +67497,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_OOPRDDL_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64477,7 +67529,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR": { + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -64493,17 +67545,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64512,12 +67564,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_CCPR" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64544,7 +67596,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -64560,17 +67612,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64579,12 +67631,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64611,7 +67663,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -64627,17 +67679,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64646,12 +67698,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android" + "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64678,7 +67730,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan": { + "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -64694,17 +67746,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64713,12 +67765,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64745,7 +67797,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -64761,17 +67813,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64780,12 +67832,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64812,7 +67864,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -64828,17 +67880,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64847,12 +67899,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64879,7 +67931,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -64895,17 +67947,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64914,12 +67966,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android" + "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -64946,7 +67998,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan": { + "Upload-Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -64962,17 +68014,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -64981,12 +68033,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel2XL-GPU-Adreno540-arm64-Release-All-Android_Vulkan" + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65013,7 +68065,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android": { + "Upload-Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -65029,17 +68081,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65048,12 +68100,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android" + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Debug-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65080,7 +68132,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan": { + "Upload-Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android": { "caches": [ { "name": "vpython", @@ -65096,17 +68148,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65115,12 +68167,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL1_Vulkan" + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65147,7 +68199,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan": { + "Upload-Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { "caches": [ { "name": "vpython", @@ -65163,17 +68215,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65182,12 +68234,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_DDL3_Vulkan" + "Test-Android-Clang-Pixel4XL-GPU-Adreno640-arm64-Release-All-Android_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65214,7 +68266,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android": { "caches": [ { "name": "vpython", @@ -65230,17 +68282,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65249,12 +68301,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Debug-All-Android_Vulkan" + "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65281,7 +68333,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android": { + "Upload-Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { "caches": [ { "name": "vpython", @@ -65297,17 +68349,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65316,12 +68368,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android" + "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65348,7 +68400,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan": { + "Upload-Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -65364,17 +68416,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65383,12 +68435,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3-GPU-Adreno630-arm64-Release-All-Android_Vulkan" + "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65415,7 +68467,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android": { + "Upload-Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { "caches": [ { "name": "vpython", @@ -65431,17 +68483,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65450,12 +68502,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android" + "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65482,7 +68534,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -65498,17 +68550,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65517,12 +68569,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Debug-All-Android_Vulkan" + "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65549,7 +68601,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android": { + "Upload-Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { "caches": [ { "name": "vpython", @@ -65565,17 +68617,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65584,12 +68636,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android" + "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65616,7 +68668,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan": { + "Upload-Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -65632,17 +68684,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65651,12 +68703,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel3a-GPU-Adreno615-arm64-Release-All-Android_Vulkan" + "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65683,7 +68735,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android": { + "Upload-Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { "caches": [ { "name": "vpython", @@ -65699,17 +68751,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65718,12 +68770,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android" + "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65750,7 +68802,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan": { + "Upload-Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -65766,17 +68818,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65785,12 +68837,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Debug-All-Android_Vulkan" + "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65817,7 +68869,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android": { + "Upload-Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -65833,17 +68885,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65852,12 +68904,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android" + "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65884,7 +68936,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan": { + "Upload-Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -65900,17 +68952,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65919,12 +68971,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-Pixel4-GPU-Adreno640-arm64-Release-All-Android_Vulkan" + "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -65951,7 +69003,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android": { + "Upload-Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { "caches": [ { "name": "vpython", @@ -65967,17 +69019,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -65986,12 +69038,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Debug-All-Android" + "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66018,7 +69070,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android": { + "Upload-Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All": { "caches": [ { "name": "vpython", @@ -66034,17 +69086,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66053,12 +69105,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Android-Clang-TecnoSpark3Pro-GPU-PowerVRGE8320-arm-Release-All-Android" + "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66085,7 +69137,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All": { + "Upload-Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { "caches": [ { "name": "vpython", @@ -66101,17 +69153,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66120,12 +69172,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Debug-All" + "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66152,7 +69204,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -66168,17 +69220,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66187,12 +69239,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-ASUSChromebookFlipC100-GPU-MaliT764-arm-Release-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66219,7 +69271,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -66235,17 +69287,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66254,12 +69306,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Debug-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66286,7 +69338,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -66302,17 +69354,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66321,12 +69373,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-AcerChromebook13_CB5_311-GPU-TegraK1-arm-Release-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66353,7 +69405,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -66369,17 +69421,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66388,12 +69440,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Debug-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66420,7 +69472,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { "caches": [ { "name": "vpython", @@ -66436,17 +69488,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66455,12 +69507,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-AcerChromebookR13Convertible-GPU-PowerVRGX6250-arm-Release-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66487,7 +69539,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack": { "caches": [ { "name": "vpython", @@ -66503,17 +69555,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66522,12 +69574,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Debug-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66554,7 +69606,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { "caches": [ { "name": "vpython", @@ -66570,17 +69622,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66589,12 +69641,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-Pixelbook-GPU-IntelHDGraphics615-x86_64-Release-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66621,7 +69673,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs": { "caches": [ { "name": "vpython", @@ -66637,17 +69689,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66656,12 +69708,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Debug-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66688,7 +69740,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -66704,17 +69756,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66723,12 +69775,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-SamsungChromebook2012-GPU-MaliT604-arm-Release-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66755,7 +69807,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -66771,17 +69823,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66790,12 +69842,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Debug-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66822,7 +69874,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { "caches": [ { "name": "vpython", @@ -66838,17 +69890,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66857,12 +69909,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-ChromeOS-Clang-SamsungChromebookPlus-GPU-MaliT860-arm-Release-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66889,7 +69941,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD": { "caches": [ { "name": "vpython", @@ -66905,17 +69957,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66924,12 +69976,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86-Debug-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -66956,7 +70008,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2": { "caches": [ { "name": "vpython", @@ -66972,17 +70024,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -66991,12 +70043,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67023,7 +70075,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41": { "caches": [ { "name": "vpython", @@ -67039,17 +70091,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67058,12 +70110,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-BonusConfigs" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67090,7 +70142,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { "caches": [ { "name": "vpython", @@ -67106,17 +70158,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67125,12 +70177,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-NativeFonts" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67157,7 +70209,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM": { "caches": [ { "name": "vpython", @@ -67173,17 +70225,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67192,12 +70244,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SK_USE_DISCARDABLE_SCALEDIMAGECACHE" + "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67224,7 +70276,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -67240,17 +70292,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67259,12 +70311,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SafeStack" + "Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67291,7 +70343,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { + "Upload-Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -67307,17 +70359,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67326,12 +70378,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM" + "Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67358,7 +70410,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs": { + "Upload-Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -67374,17 +70426,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67393,12 +70445,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Debug-All-Wuffs" + "Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67425,7 +70477,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -67441,17 +70493,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67460,12 +70512,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67492,7 +70544,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs": { + "Upload-Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader": { "caches": [ { "name": "vpython", @@ -67508,17 +70560,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67527,12 +70579,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-BonusConfigs" + "Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67559,7 +70611,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast": { + "Upload-Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader": { "caches": [ { "name": "vpython", @@ -67575,17 +70627,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67594,12 +70646,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-Fast" + "Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67626,7 +70678,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD": { + "Upload-Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -67642,17 +70694,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67661,12 +70713,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SKNX_NO_SIMD" + "Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67693,7 +70745,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2": { + "Upload-Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -67709,17 +70761,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67728,12 +70780,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE2" + "Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67760,7 +70812,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41": { + "Upload-Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -67776,17 +70828,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67795,12 +70847,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_CPU_LIMIT_SSE41" + "Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67827,7 +70879,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER": { + "Upload-Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -67843,17 +70895,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67862,12 +70914,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SK_FORCE_RASTER_PIPELINE_BLITTER" + "Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67894,7 +70946,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM": { + "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -67910,17 +70962,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67929,12 +70981,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM" + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -67961,7 +71013,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Debug-All": { + "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1": { "caches": [ { "name": "vpython", @@ -67977,17 +71029,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -67996,12 +71048,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Debug-All" + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68028,7 +71080,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All": { + "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -68044,17 +71096,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68063,12 +71115,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-AVX512-x86_64-Release-All" + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68095,7 +71147,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Debug-All": { + "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -68111,17 +71163,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68130,12 +71182,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Debug-All" + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68162,7 +71214,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Release-All": { + "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -68178,17 +71230,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68197,12 +71249,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-CPU-Rome-x86_64-Release-All" + "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68229,7 +71281,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader": { + "Upload-Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -68245,17 +71297,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68264,12 +71316,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Debug-All-SwiftShader" + "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68296,7 +71348,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader": { + "Upload-Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -68312,17 +71364,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68331,12 +71383,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-GCE-GPU-SwiftShader-x86_64-Release-All-SwiftShader" + "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68363,7 +71415,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All": { + "Upload-Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -68379,17 +71431,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68398,12 +71450,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All" + "Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68430,7 +71482,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan": { + "Upload-Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -68446,17 +71498,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68465,12 +71517,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Debug-All-Vulkan" + "Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68497,7 +71549,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All": { + "Upload-Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -68513,17 +71565,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68532,12 +71584,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All" + "Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68564,7 +71616,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan": { + "Upload-Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -68580,17 +71632,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68599,12 +71651,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC5PPYH-GPU-IntelHD405-x86_64-Release-All-Vulkan" + "Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68631,7 +71683,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All": { + "Upload-Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { "caches": [ { "name": "vpython", @@ -68647,17 +71699,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68666,12 +71718,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All" + "Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68698,7 +71750,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1": { + "Upload-Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { "caches": [ { "name": "vpython", @@ -68714,17 +71766,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68733,12 +71785,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1" + "Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68765,7 +71817,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan": { + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": { "caches": [ { "name": "vpython", @@ -68781,17 +71833,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68800,12 +71852,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Debug-All-DDL1_Vulkan" + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68832,7 +71884,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All": { + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker": { "caches": [ { "name": "vpython", @@ -68848,17 +71900,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68867,12 +71919,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All" + "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68899,7 +71951,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan": { + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker": { "caches": [ { "name": "vpython", @@ -68915,17 +71967,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -68934,12 +71986,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUC7i5BNK-GPU-IntelIris640-x86_64-Release-All-Vulkan" + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -68966,7 +72018,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All": { + "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker": { "caches": [ { "name": "vpython", @@ -68982,17 +72034,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69001,12 +72053,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Debug-All" + "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69033,7 +72085,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -69049,17 +72101,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69068,12 +72120,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-NUCDE3815TYKHE-GPU-IntelBayTrail-x86_64-Release-All" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69100,7 +72152,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -69116,17 +72168,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69135,12 +72187,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Debug-All" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69167,7 +72219,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal": { "caches": [ { "name": "vpython", @@ -69183,17 +72235,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69202,12 +72254,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-Clang-ShuttleA-GPU-IntelHD2000-x86_64-Release-All" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69234,7 +72286,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal": { "caches": [ { "name": "vpython", @@ -69250,17 +72302,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69269,12 +72321,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-EMCC-GCE-CPU-AVX2-asmjs-Release-All-PathKit" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69301,7 +72353,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -69317,17 +72369,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69336,12 +72388,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-CanvasKit" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69368,7 +72420,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal": { "caches": [ { "name": "vpython", @@ -69384,17 +72436,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69403,12 +72455,79 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-EMCC-GCE-CPU-AVX2-wasm-Release-All-PathKit" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-OOPRDDL_Metal" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69435,208 +72554,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.46" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-EMCC-GCE-GPU-AVX2-wasm-Release-All-CanvasKit" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-10.3", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 3600000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.46" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Debug-All-Docker" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-10.3", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 3600000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker": { - "caches": [ - { - "name": "vpython", - "path": "cache/vpython" - } - ], - "cipd_packages": [ - { - "name": "infra/gsutil", - "path": "cipd_bin_packages", - "version": "version:4.46" - }, - { - "name": "infra/tools/luci-auth/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/kitchen/${platform}", - "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - }, - { - "name": "infra/tools/luci/vpython/${platform}", - "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" - } - ], - "command": [ - "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", - "-u", - "skia/infra/bots/run_recipe.py", - "${ISOLATED_OUTDIR}", - "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", - "skia" - ], - "dependencies": [ - "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-GCC-GCE-CPU-AVX2-x86-Release-All-Docker" - ], - "dimensions": [ - "cpu:x86-64-Haswell_GCE", - "gpu:none", - "machine_type:n1-highmem-2", - "os:Debian-10.3", - "pool:Skia" - ], - "env_prefixes": { - "PATH": [ - "cipd_bin_packages", - "cipd_bin_packages/bin" - ], - "VPYTHON_VIRTUALENV_ROOT": [ - "cache/vpython" - ] - }, - "execution_timeout_ns": 3600000000000, - "extra_tags": { - "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" - }, - "io_timeout_ns": 3600000000000, - "isolate": "swarm_recipe.isolate", - "max_attempts": 2, - "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" - }, - "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal": { "caches": [ { "name": "vpython", @@ -69652,17 +72570,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69671,12 +72589,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Debug-All-Docker" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69703,7 +72621,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal": { "caches": [ { "name": "vpython", @@ -69719,17 +72637,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69738,12 +72656,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Debian10-GCC-GCE-CPU-AVX2-x86_64-Release-All-Docker" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69770,7 +72688,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -69786,17 +72704,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69805,12 +72723,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69837,7 +72755,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -69853,17 +72771,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69872,12 +72790,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-CommandBuffer" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69904,7 +72822,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal": { + "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal": { "caches": [ { "name": "vpython", @@ -69920,17 +72838,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -69939,12 +72857,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL1_Metal" + "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-OOPRDDL_Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -69971,7 +72889,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal": { + "Upload-Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -69987,17 +72905,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70006,12 +72924,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-DDL3_Metal" + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70038,7 +72956,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal": { + "Upload-Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF": { "caches": [ { "name": "vpython", @@ -70054,17 +72972,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70073,12 +72991,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Debug-All-Metal" + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70105,7 +73023,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All": { + "Upload-Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -70121,17 +73039,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70140,12 +73058,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All" + "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70172,7 +73090,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal": { + "Upload-Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -70188,17 +73106,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70207,12 +73125,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL1_Metal" + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70239,7 +73157,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal": { + "Upload-Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -70255,17 +73173,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70274,12 +73192,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-DDL3_Metal" + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70306,7 +73224,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal": { + "Upload-Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -70322,17 +73240,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70341,12 +73259,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-Metal" + "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70373,7 +73291,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts": { + "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -70389,17 +73307,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70408,12 +73326,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBook10.1-GPU-IntelHD615-x86_64-Release-All-NativeFonts" + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70440,7 +73358,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -70456,17 +73374,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70475,12 +73393,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-NativeFonts" + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70507,7 +73425,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF": { + "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -70523,17 +73441,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70542,12 +73460,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Debug-All-PDF" + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70574,7 +73492,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All": { + "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -70590,17 +73508,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70609,12 +73527,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBookPro11.5-CPU-AVX2-x86_64-Release-All" + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70641,7 +73559,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer": { + "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -70657,17 +73575,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70676,12 +73594,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Debug-All-CommandBuffer" + "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70708,7 +73626,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All": { + "Upload-Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -70724,17 +73642,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70743,12 +73661,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All" + "Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70775,7 +73693,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal": { + "Upload-Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -70791,17 +73709,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70810,12 +73728,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacBookPro11.5-GPU-RadeonHD8870M-x86_64-Release-All-Metal" + "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70842,7 +73760,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -70858,17 +73776,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70877,12 +73795,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70909,7 +73827,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { "caches": [ { "name": "vpython", @@ -70925,17 +73843,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -70944,12 +73862,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-CommandBuffer" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -70976,7 +73894,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { "caches": [ { "name": "vpython", @@ -70992,17 +73910,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71011,12 +73929,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Debug-All-Metal" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71043,7 +73961,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -71059,17 +73977,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71078,12 +73996,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71110,7 +74028,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -71126,17 +74044,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71145,12 +74063,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-MacMini7.1-GPU-IntelIris5100-x86_64-Release-All-Metal" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71177,7 +74095,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { "caches": [ { "name": "vpython", @@ -71193,17 +74111,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71212,12 +74130,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.13-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" + "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71244,7 +74162,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Upload-Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -71252,6 +74170,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -71260,17 +74183,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71279,12 +74202,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.14-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" + "Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71311,7 +74234,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All": { + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1": { "caches": [ { "name": "vpython", @@ -71327,17 +74250,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71346,12 +74269,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71378,7 +74301,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer": { + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan": { "caches": [ { "name": "vpython", @@ -71394,17 +74317,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71413,12 +74336,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-CommandBuffer" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71445,7 +74368,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal": { + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan": { "caches": [ { "name": "vpython", @@ -71461,17 +74384,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71480,12 +74403,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-Metal" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71512,7 +74435,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts": { + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan": { "caches": [ { "name": "vpython", @@ -71528,17 +74451,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71547,12 +74470,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Debug-All-NativeFonts" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-OOPRDDL_Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71579,7 +74502,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All": { + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -71595,17 +74518,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71614,12 +74537,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71646,7 +74569,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal": { + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -71662,17 +74585,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71681,12 +74604,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.15-Clang-MacBookAir7.2-GPU-IntelHD6000-x86_64-Release-All-Metal" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71713,7 +74636,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts": { + "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -71721,11 +74644,6 @@ } ], "cipd_packages": [ - { - "name": "infra/3pp/tools/cpython/${platform}", - "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" - }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -71734,17 +74652,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71753,12 +74671,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Mac10.15-Clang-VMware7.1-CPU-AVX-x86_64-Debug-All-NativeFonts" + "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71785,7 +74703,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1": { + "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -71793,6 +74711,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -71801,17 +74724,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71820,12 +74743,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1" + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71852,7 +74775,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan": { + "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -71860,6 +74783,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -71868,17 +74796,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71887,12 +74815,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL1_Vulkan" + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71919,7 +74847,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan": { + "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -71927,6 +74855,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -71935,17 +74868,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -71954,12 +74887,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-DDL3_Vulkan" + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -71986,7 +74919,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -71994,6 +74927,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -72002,17 +74940,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72021,12 +74959,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan" + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72053,7 +74991,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -72061,6 +74999,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -72069,17 +75012,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72088,12 +75031,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72120,7 +75063,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -72128,6 +75071,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -72136,17 +75084,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72155,12 +75103,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Ubuntu18-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" + "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72187,7 +75135,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -72208,17 +75156,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72227,12 +75175,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All" + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72259,7 +75207,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -72280,17 +75228,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72299,12 +75247,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72331,7 +75279,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -72352,17 +75300,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72371,12 +75319,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Debug-All-Vulkan" + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72403,7 +75351,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All": { + "Upload-Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -72424,17 +75372,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72443,12 +75391,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All" + "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72475,7 +75423,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -72496,17 +75444,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72515,12 +75463,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72547,7 +75495,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -72568,17 +75516,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72587,12 +75535,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-AlphaR2-GPU-RadeonR9M470X-x86_64-Release-All-Vulkan" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72619,7 +75567,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -72640,17 +75588,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72659,12 +75607,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72691,7 +75639,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn": { "caches": [ { "name": "vpython", @@ -72712,17 +75660,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72731,12 +75679,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72763,7 +75711,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess": { "caches": [ { "name": "vpython", @@ -72784,17 +75732,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72803,12 +75751,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72835,7 +75783,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR": { "caches": [ { "name": "vpython", @@ -72856,17 +75804,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72875,12 +75823,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-GT610-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72907,7 +75855,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -72928,17 +75876,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -72947,12 +75895,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -72979,7 +75927,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump": { "caches": [ { "name": "vpython", @@ -73000,17 +75948,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73019,12 +75967,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73051,7 +75999,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -73072,17 +76020,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73091,12 +76039,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-BonusConfigs" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73123,7 +76071,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -73144,17 +76092,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73163,12 +76111,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Dawn" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73195,7 +76143,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs": { "caches": [ { "name": "vpython", @@ -73216,17 +76164,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73235,12 +76183,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-GpuTess" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73267,7 +76215,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -73288,17 +76236,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73307,12 +76255,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-NonNVPR" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73339,7 +76287,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump": { "caches": [ { "name": "vpython", @@ -73360,17 +76308,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73379,12 +76327,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan" + "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73411,7 +76359,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump": { + "Upload-Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -73432,17 +76380,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73451,12 +76399,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan_ProcDump" + "Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73483,7 +76431,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Upload-Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -73504,17 +76452,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73523,12 +76471,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All" + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73555,7 +76503,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -73576,17 +76524,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73595,12 +76543,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73627,7 +76575,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs": { + "Upload-Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -73648,17 +76596,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73667,12 +76615,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-BonusConfigs" + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73699,7 +76647,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Upload-Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -73720,17 +76668,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73739,12 +76687,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" + "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73771,7 +76719,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump": { + "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -73792,17 +76740,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73811,12 +76759,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan_ProcDump" + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73843,7 +76791,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts": { + "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -73864,17 +76812,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73883,12 +76831,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC5i7RYH-CPU-AVX2-x86_64-Debug-All-NativeFonts" + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73915,7 +76863,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -73936,17 +76884,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -73955,12 +76903,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All" + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -73987,7 +76935,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -74008,17 +76956,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74027,12 +76975,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74059,7 +77007,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All": { + "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -74080,17 +77028,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74099,12 +77047,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All" + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74131,7 +77079,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts": { "caches": [ { "name": "vpython", @@ -74152,17 +77100,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74171,12 +77119,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC5i7RYH-GPU-IntelIris6100-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74203,7 +77151,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -74224,17 +77172,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74243,12 +77191,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All" + "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74275,7 +77223,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -74296,17 +77244,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74315,12 +77263,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74347,7 +77295,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -74368,17 +77316,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74387,12 +77335,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Debug-All-Vulkan" + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74419,7 +77367,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All": { + "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -74440,17 +77388,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74459,12 +77407,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All" + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74491,7 +77439,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -74512,17 +77460,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74531,12 +77479,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74563,7 +77511,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts": { + "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -74584,17 +77532,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74603,12 +77551,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-NativeFonts" + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74635,7 +77583,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan": { + "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -74656,17 +77604,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74675,12 +77623,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC6i5SYK-GPU-IntelIris540-x86_64-Release-All-Vulkan" + "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74707,7 +77655,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -74728,17 +77676,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74747,12 +77695,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All" + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74779,7 +77727,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -74800,17 +77748,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74819,12 +77767,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74851,7 +77799,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -74872,17 +77820,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74891,12 +77839,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Debug-All-Vulkan" + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74923,7 +77871,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All": { + "Upload-Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -74944,17 +77892,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -74963,12 +77911,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All" + "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -74995,7 +77943,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -75016,17 +77964,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75035,12 +77983,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75067,7 +78015,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -75088,17 +78036,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75107,12 +78055,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUC8i5BEK-GPU-IntelIris655-x86_64-Release-All-Vulkan" + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75139,7 +78087,79 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, + { + "name": "infra/gsutil", + "path": "cipd_bin_packages", + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -75160,17 +78180,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75179,12 +78199,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All" + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75211,7 +78231,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -75232,17 +78252,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75251,12 +78271,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75283,7 +78303,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -75304,17 +78324,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75323,12 +78343,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All" + "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75355,7 +78375,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -75376,17 +78396,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75395,12 +78415,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-NUCD34010WYKH-GPU-IntelHD4400-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75427,7 +78447,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -75448,17 +78468,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75467,12 +78487,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All" + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75499,7 +78519,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D": { "caches": [ { "name": "vpython", @@ -75520,17 +78540,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75539,12 +78559,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Direct3D" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75571,7 +78591,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -75592,17 +78612,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75611,12 +78631,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Debug-All-Vulkan" + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75643,7 +78663,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -75664,17 +78684,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75683,12 +78703,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All" + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75715,7 +78735,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -75736,17 +78756,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75755,12 +78775,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75787,7 +78807,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D": { "caches": [ { "name": "vpython", @@ -75808,17 +78828,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75827,12 +78847,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-GTX660-x86_64-Release-All-Vulkan" + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Direct3D" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75859,7 +78879,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -75880,17 +78900,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75899,12 +78919,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All" + "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -75931,7 +78951,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -75952,17 +78972,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -75971,12 +78991,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-ANGLE" + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76003,7 +79023,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE": { "caches": [ { "name": "vpython", @@ -76024,17 +79044,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76043,12 +79063,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Debug-All-Vulkan" + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76075,7 +79095,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All": { + "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -76096,17 +79116,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76115,12 +79135,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All" + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76147,7 +79167,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -76168,17 +79188,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76187,12 +79207,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-ANGLE" + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76219,7 +79239,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan": { + "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE": { "caches": [ { "name": "vpython", @@ -76240,17 +79260,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76259,12 +79279,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleA-GPU-RadeonHD7770-x86_64-Release-All-Vulkan" + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76291,7 +79311,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All": { + "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -76312,17 +79332,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76331,12 +79351,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All" + "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76363,7 +79383,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE": { + "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -76384,17 +79404,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76403,12 +79423,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-ANGLE" + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76435,7 +79455,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D": { "caches": [ { "name": "vpython", @@ -76456,17 +79476,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76475,12 +79495,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Debug-All-Vulkan" + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Direct3D" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76507,7 +79527,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All": { + "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { "caches": [ { "name": "vpython", @@ -76528,17 +79548,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76547,12 +79567,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All" + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76579,7 +79599,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE": { + "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -76600,17 +79620,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76619,12 +79639,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-ANGLE" + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76651,7 +79671,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan": { + "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D": { "caches": [ { "name": "vpython", @@ -76672,17 +79692,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76691,12 +79711,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-Clang-ShuttleC-GPU-GTX960-x86_64-Release-All-Vulkan" + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Direct3D" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76723,7 +79743,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All": { + "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { "caches": [ { "name": "vpython", @@ -76744,17 +79764,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76763,12 +79783,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All" + "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76795,7 +79815,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan": { + "Upload-Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All": { "caches": [ { "name": "vpython", @@ -76804,10 +79824,72 @@ ], "cipd_packages": [ { - "name": "infra/3pp/tools/cpython/${platform}", + "name": "infra/gsutil", "path": "cipd_bin_packages", - "version": "version:2.7.17.chromium.24" + "version": "version:4.46" + }, + { + "name": "infra/tools/luci-auth/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + }, + { + "name": "infra/tools/luci/kitchen/${platform}", + "path": ".", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, + { + "name": "infra/tools/luci/vpython/${platform}", + "path": "cipd_bin_packages", + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" + } + ], + "command": [ + "cipd_bin_packages/vpython${EXECUTABLE_SUFFIX}", + "-u", + "skia/infra/bots/run_recipe.py", + "${ISOLATED_OUTDIR}", + "upload_dm_results", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "skia" + ], + "dependencies": [ + "Housekeeper-PerCommit-BundleRecipes", + "Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All" + ], + "dimensions": [ + "cpu:x86-64-Haswell_GCE", + "gpu:none", + "machine_type:n1-highmem-2", + "os:Debian-10.3", + "pool:Skia" + ], + "env_prefixes": { + "PATH": [ + "cipd_bin_packages", + "cipd_bin_packages/bin" + ], + "VPYTHON_VIRTUALENV_ROOT": [ + "cache/vpython" + ] + }, + "execution_timeout_ns": 3600000000000, + "extra_tags": { + "log_location": "logdog://logs.chromium.org/skia/${SWARMING_TASK_ID}/+/annotations" + }, + "io_timeout_ns": 3600000000000, + "isolate": "swarm_recipe.isolate", + "max_attempts": 2, + "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" + }, + "Upload-Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE": { + "caches": [ + { + "name": "vpython", + "path": "cache/vpython" + } + ], + "cipd_packages": [ { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -76816,17 +79898,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76835,12 +79917,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Debug-All-Vulkan" + "Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76867,7 +79949,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -76888,17 +79970,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76907,12 +79989,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -76939,7 +80021,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All": { "caches": [ { "name": "vpython", @@ -76960,17 +80042,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -76979,12 +80061,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-MSVC-Golo-GPU-QuadroP400-x86_64-Release-All-Vulkan" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77011,7 +80093,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { "caches": [ { "name": "vpython", @@ -77019,6 +80101,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -77027,17 +80114,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77046,12 +80133,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-MSVC-LenovoYogaC630-CPU-Snapdragon850-arm64-Debug-All" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Debug-All-SkVM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77078,7 +80165,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -77086,6 +80173,11 @@ } ], "cipd_packages": [ + { + "name": "infra/3pp/tools/cpython/${platform}", + "path": "cipd_bin_packages", + "version": "version:2.7.17.chromium.24" + }, { "name": "infra/gsutil", "path": "cipd_bin_packages", @@ -77094,17 +80186,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77113,12 +80205,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win10-MSVC-LenovoYogaC630-GPU-Adreno630-arm64-Debug-All-ANGLE" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77145,7 +80237,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All": { + "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM": { "caches": [ { "name": "vpython", @@ -77166,17 +80258,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77185,12 +80277,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Debug-All" + "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All-SkVM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77217,7 +80309,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All": { "caches": [ { "name": "vpython", @@ -77238,17 +80330,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77257,12 +80349,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win2019-Clang-GCE-CPU-AVX2-x86-Release-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77289,7 +80381,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All": { "caches": [ { "name": "vpython", @@ -77310,17 +80402,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77329,12 +80421,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win2019-Clang-GCE-CPU-AVX2-x86_64-Release-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77361,7 +80453,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { "caches": [ { "name": "vpython", @@ -77382,17 +80474,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77401,12 +80493,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Debug-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77433,7 +80525,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM": { "caches": [ { "name": "vpython", @@ -77454,17 +80546,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77473,12 +80565,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win2019-MSVC-GCE-CPU-AVX2-x86-Release-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All-SkVM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77505,7 +80597,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { "caches": [ { "name": "vpython", @@ -77526,17 +80618,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77545,12 +80637,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Debug-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77577,7 +80669,7 @@ "max_attempts": 2, "service_account": "skia-external-gm-uploader@skia-swarming-bots.iam.gserviceaccount.com" }, - "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All": { + "Upload-Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM": { "caches": [ { "name": "vpython", @@ -77598,17 +80690,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77617,12 +80709,12 @@ "skia/infra/bots/run_recipe.py", "${ISOLATED_OUTDIR}", "upload_dm_results", - "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", + "{\"$kitchen\":{\"devshell\":true,\"git_auth\":true},\"buildbucket_build_id\":\"<(BUILDBUCKET_BUILD_ID)\",\"buildername\":\"Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM\",\"gs_bucket\":\"skia-infra-gm\",\"patch_issue\":\"<(ISSUE_INT)\",\"patch_ref\":\"<(PATCH_REF)\",\"patch_repo\":\"<(PATCH_REPO)\",\"patch_set\":\"<(PATCHSET_INT)\",\"patch_storage\":\"<(PATCH_STORAGE)\",\"repository\":\"<(REPO)\",\"revision\":\"<(REVISION)\",\"swarm_out_dir\":\"output_ignored\",\"task_id\":\"<(TASK_ID)\"}", "skia" ], "dependencies": [ "Housekeeper-PerCommit-BundleRecipes", - "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All" + "Test-Win2019-MSVC-GCE-CPU-AVX2-x86_64-Release-All-SkVM" ], "dimensions": [ "cpu:x86-64-Haswell_GCE", @@ -77670,17 +80762,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77742,17 +80834,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77814,17 +80906,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77886,17 +80978,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -77958,17 +81050,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78030,17 +81122,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78102,17 +81194,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78174,17 +81266,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78246,17 +81338,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78318,17 +81410,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78385,17 +81477,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78452,17 +81544,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78519,17 +81611,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78586,17 +81678,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78653,17 +81745,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78720,17 +81812,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78787,17 +81879,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78854,17 +81946,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78921,17 +82013,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -78988,17 +82080,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79055,17 +82147,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79122,17 +82214,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79189,17 +82281,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79256,17 +82348,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79323,17 +82415,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79390,17 +82482,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79457,17 +82549,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79524,17 +82616,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79591,17 +82683,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ @@ -79658,17 +82750,17 @@ { "name": "infra/tools/luci-auth/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/kitchen/${platform}", "path": ".", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" }, { "name": "infra/tools/luci/vpython/${platform}", "path": "cipd_bin_packages", - "version": "git_revision:36809f9486cc4246142f92897b7e15f6564bd94f" + "version": "git_revision:8a7b755ecfb83110accd8f4bda62394a7c85f89d" } ], "command": [ diff --git a/modules/canvaskit/CHANGELOG.md b/modules/canvaskit/CHANGELOG.md index 0853407a3584a..732ebb5b11aab 100644 --- a/modules/canvaskit/CHANGELOG.md +++ b/modules/canvaskit/CHANGELOG.md @@ -6,6 +6,53 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + - Added `CanvasKit.MakeImageFromCanvasImageSource` which takes either an HTMLImageElement, + SVGImageElement, HTMLVideoElement, HTMLCanvasElement, ImageBitmap, or OffscreenCanvas and returns + an SkImage. This function is an alternative to `CanvasKit.MakeImageFromEncoded` for creating + SkImages when loading and decoding images. In the future, codesize of CanvasKit may be able to be + reduced by removing image codecs in wasm, if browser APIs for decoding images are used along with + `CanvasKit.MakeImageFromCanvasImageSource` instead of `CanvasKit.MakeImageFromEncoded`. + - Three usage examples of `CanvasKit.MakeImageFromCanvasImageSource` in core.spec.ts. + - Added support for asynchronous callbacks in perfs and tests. + - `CanvasKit.SkPath.MakeFromVerbsPointsWeights` and `CanvasKit.SkPath.addVerbsPointsWeights` for + supplying many path operations (e.g. moveTo, cubicTo) at once. + - The object returned by `CanvasKit.malloc` now has a `subarray` method which works exactly like + the normal TypedArray version. The TypedArray which it returns is also backed by WASM memory + and when passed into CanvasKit will be used w/o copying the data (just like + `Malloc.toTypedArray`). + - `SkM44.setupCamera` to return a 4x4 matrix which sets up a perspective view from a camera. + +### Changed + - In all places where color arrays are accepted (gradient makers, drawAtlas, and MakeSkVertices), + You can now provide either flat Float32Arrays of float colors, Uint32Arrays of int colors, or + 2d Arrays of Float32Array(4) colors. The one thing you should not pass is an Array of numbers, + since canvaskit wouldn't be able to tell whether they're ints or floats without checking them all. + The fastest choice for gradients is the flat Float32Array, the fastest choice for drawAtlas and + MakeSkVertices is the flat Uint32Array. + - Color arrays may also be objects created with CanvasKit.Malloc + +### Fixed + - `TextStyle.color` can correctly be a Malloc'd Float32Array. + +### Deprecated + - `CanvasKit.MakePathFromCmds` has been renamed to `CanvasKit.SkPath.MakeFromCmds`. The alias + will be removed in an upcoming release. + +## [0.16.2] - 2020-06-05 + +### Fixed + - A bug where loading fonts (and other memory intensive calls) would cause CanvasKit + to infrequently crash with + `TypeError: Cannot perform %TypedArray%.prototype.set on a neutered ArrayBuffer`. + - Incorrectly freeing Malloced colors passed into computeTonalColors. + +## [0.16.1] - 2020-06-04 + +### Fixed + - Colors are unsigned to be compatible with Flutter Web and previous behavior, not + signed ints. + ## [0.16.0] - 2020-06-03 ### Added diff --git a/modules/canvaskit/Makefile b/modules/canvaskit/Makefile index 772a4a39b0e8c..4b42445109352 100644 --- a/modules/canvaskit/Makefile +++ b/modules/canvaskit/Makefile @@ -40,6 +40,14 @@ debug_cpu: cp ../../out/canvaskit_wasm_debug/canvaskit.wasm ./canvaskit/bin cp ../../out/canvaskit_wasm_debug/canvaskit.wasm.map ./canvaskit/bin +experimental_simd: + # Does an incremental build where possible. + ./compile.sh simd + mkdir -p ./canvaskit/bin + cp ../../out/canvaskit_wasm_experimental_simd/canvaskit.js ./canvaskit/bin + cp ../../out/canvaskit_wasm_experimental_simd/canvaskit.wasm ./canvaskit/bin + cp ../../out/canvaskit_wasm_experimental_simd/canvaskit.wasm.map ./canvaskit/bin + debug_viewer: # Does an incremental build where possible. ./compile.sh debug viewer diff --git a/modules/canvaskit/README.md b/modules/canvaskit/README.md index a392d08e136dd..48a197021f7d8 100644 --- a/modules/canvaskit/README.md +++ b/modules/canvaskit/README.md @@ -6,6 +6,13 @@ compilation. [1]: https://emscripten.org/docs/getting_started/downloads.html +## MacOS specific notes +Make sure you have Python3 installed, otherwise the downloading emscripten toolchain +can fail with errors about SSL certificates. + +See also +for a solution to Python3 using the wrong certificates. + # Compile and Run Local Example ``` diff --git a/modules/canvaskit/canvaskit/example.html b/modules/canvaskit/canvaskit/example.html index 0d8dad8393b1d..68f343f05dea4 100644 --- a/modules/canvaskit/canvaskit/example.html +++ b/modules/canvaskit/canvaskit/example.html @@ -40,6 +40,7 @@

CanvasKit expands the functionality of a stock HTML canvas

+

CanvasKit can allow for text shaping (e.g. breaking, kerning)

@@ -86,6 +87,7 @@

CanvasKit can allow for text shaping (e.g. breaking, kerning)

TextShapingAPI2(...results); }); Promise.all([ckLoaded, loadTestImage]).then((results) => {AtlasAPI1(...results)}); + Promise.all([ckLoaded, loadTestImage]).then((results) => {DecodeAPI(...results)}); function DrawingExample(CanvasKit, robotoData) { if (!robotoData || !CanvasKit) { @@ -1180,8 +1182,8 @@

CanvasKit can allow for text shaping (e.g. breaking, kerning)

dsts.push(0, .8, 200, 100); const colors = new CanvasKit.SkColorBuilder(); - colors.push(CanvasKit.Color(85, 170, 10, 0.5)); // light green - colors.push(CanvasKit.Color(51, 51, 191, 0.5)); // light blue + colors.push(CanvasKit.ColorAsInt(85, 170, 10, 128)); // light green + colors.push(CanvasKit.ColorAsInt(51, 51, 191, 128)); // light blue let i = 0; @@ -1213,4 +1215,23 @@

CanvasKit can allow for text shaping (e.g. breaking, kerning)

surface.requestAnimationFrame(drawFrame); } + + async function DecodeAPI(CanvasKit, imgData) { + if (!CanvasKit || !imgData) { + return; + } + const surface = CanvasKit.MakeCanvasSurface('decode'); + if (!surface) { + console.error('Could not make surface'); + return; + } + const blob = new Blob([ imgData ]); + // ImageBitmap is not supported in Safari + const imageBitmap = await createImageBitmap(blob); + const img = await CanvasKit.MakeImageFromCanvasImageSource(imageBitmap); + + surface.drawOnce((canvas) => { + canvas.drawImage(img, 0, 0, null); + }); + } diff --git a/modules/canvaskit/canvaskit/extra.html b/modules/canvaskit/canvaskit/extra.html index 720273cf17539..ebc711501c311 100644 --- a/modules/canvaskit/canvaskit/extra.html +++ b/modules/canvaskit/canvaskit/extra.html @@ -438,36 +438,6 @@

Support for extended color spaces

surface.drawOnce(drawFrame); } - // Return the inverse of an SkM44. throw an error if it's not invertible - function mustInvert(m) { - const m2 = CanvasKit.SkM44.invert(m); - if (m2 === null) { - throw "Matrix not invertible"; - } - return m2; - } - - // TODO(nifong): This function is in desperate need of some explanation of what it does - // cam is a object having eye, coa, up, near, far, angle - function saveCamera(canvas, /* rect */ area, /* scalar */ zscale, cam) { - const camera = CanvasKit.SkM44.lookat(cam.eye, cam.coa, cam.up); - const perspective = CanvasKit.SkM44.perspective(cam.near, cam.far, cam.angle); - // Calculate viewport scale. Even through we know these values are all constants in this - // example it might be handy to change the size later. - const center = [(area.fLeft + area.fRight)/2, (area.fTop + area.fBottom)/2, 0]; - const viewScale = [(area.fRight - area.fLeft)/2, (area.fBottom - area.fTop)/2, zscale]; - const viewport = CanvasKit.SkM44.multiply( - CanvasKit.SkM44.translated(center), - CanvasKit.SkM44.scaled(viewScale)); - - // want "world" to be in our big coordinates (e.g. area), so apply this inverse - // as part of our "camera". - canvas.concat(CanvasKit.SkM44.multiply(viewport, perspective)); - canvas.concat(CanvasKit.SkM44.multiply(camera, mustInvert(viewport))); - // Mark the matrix to make it available to the shader by this name. - canvas.markCTM('local_to_world'); - } - function Camera3D(canvas, textureImgData, normalImgData, robotoData) { const surface = CanvasKit.MakeCanvasSurface('camera3d'); if (!surface) { @@ -618,13 +588,13 @@

Support for extended color spaces

function setClickToWorld(canvas, matrix) { const l2d = canvas.getLocalToDevice(); - worldToClick = CanvasKit.SkM44.multiply(mustInvert(matrix), l2d); - clickToWorld = mustInvert(worldToClick); + worldToClick = CanvasKit.SkM44.multiply(CanvasKit.SkM44.mustInvert(matrix), l2d); + clickToWorld = CanvasKit.SkM44.mustInvert(worldToClick); } function drawCubeFace(canvas, m, color) { const trans = new CanvasKit.SkM44.translated([vSphereRadius/2, vSphereRadius/2, 0]); - canvas.concat(CanvasKit.SkM44.multiply(trans, m, mustInvert(trans))); + canvas.concat(CanvasKit.SkM44.multiply(trans, m, CanvasKit.SkM44.mustInvert(trans))); const znormal = front(canvas.getLocalToDevice()); if (znormal < 0) { return; // skip faces facing backwards @@ -645,7 +615,10 @@

Support for extended color spaces

canvas.save(); canvas.translate(vSphereCenter[0] - vSphereRadius/2, vSphereCenter[1] - vSphereRadius/2); // pass surface dimensions as viewport size. - saveCamera(canvas, CanvasKit.LTRBRect(0, 0, vSphereRadius, vSphereRadius), vSphereRadius/2, cam); + canvas.concat(CanvasKit.SkM44.setupCamera( + CanvasKit.LTRBRect(0, 0, vSphereRadius, vSphereRadius), vSphereRadius/2, cam)); + // Mark the matrix to make it available to the shader by this name. + canvas.markCTM('local_to_world'); setClickToWorld(canvas, clickM); for (let f of faces) { const saveCount = canvas.getSaveCount(); @@ -863,7 +836,8 @@

Support for extended color spaces

} canvas.save(); // Set up 3D view enviroment - saveCamera(canvas, CanvasKit.LTRBRect(0, 0, sizeX, sizeY), halfDim, cam); + canvas.concat(CanvasKit.SkM44.setupCamera( + CanvasKit.LTRBRect(0, 0, sizeX, sizeY), halfDim, cam)); // Rotate the whole paragraph as a unit. const paraRotPoint = [halfDim, halfDim, 1]; diff --git a/modules/canvaskit/canvaskit/package.json b/modules/canvaskit/canvaskit/package.json index 0fc3e15b177ef..8577a172204d7 100644 --- a/modules/canvaskit/canvaskit/package.json +++ b/modules/canvaskit/canvaskit/package.json @@ -1,6 +1,6 @@ { "name": "canvaskit-wasm", - "version": "0.16.0", + "version": "0.16.2", "description": "A WASM version of Skia's Canvas API", "main": "bin/canvaskit.js", "homepage": "https://github.com/google/skia/tree/master/modules/canvaskit", diff --git a/modules/canvaskit/canvaskit/viewer.html b/modules/canvaskit/canvaskit/viewer.html index e5695293aabf9..69c2a69a3a95c 100644 --- a/modules/canvaskit/canvaskit/viewer.html +++ b/modules/canvaskit/canvaskit/viewer.html @@ -68,20 +68,20 @@ htmlCanvas.height = height; slide.load(width, height); - if (flags.msaa > 1) { - let ctx = CanvasKit.GetWebGLContext(htmlCanvas); - let grContext = CanvasKit.MakeGrContext(ctx); - let sampleCnt = parseInt(flags.msaa); - surface = CanvasKit.MakeOffscreenFramebuffer(grContext, width, height, sampleCnt); - if (!surface) { - throw 'Could not create offscreen msaa render target.'; - } - surface.isMSAA = true; - } else { - surface = CanvasKit.MakeCanvasSurface(htmlCanvas); - if (!surface) { - throw 'Could not make canvas surface'; - } + // For the msaa flag, only check if the key exists in flags. That way we don't need to assign it + // a value in the location hash. i.e.,: http://.../viewer.html#msaa + const doMSAA = ('msaa' in flags); + // Create the WebGL context with our desired attribs before calling MakeWebGLCanvasSurface. + CanvasKit.GetWebGLContext(htmlCanvas, {antialias: doMSAA}); + const surface = CanvasKit.MakeWebGLCanvasSurface(htmlCanvas, null); + if (!surface) { + throw 'Could not make canvas surface'; + } + if (doMSAA && surface.sampleCnt() <= 1) { + // We requested antialias on the canvas but did not get MSAA. Since we don't know what type of + // AA is in use right now (if any), this surface is unusable. + throw 'MSAA rendering to the on-screen canvas is not supported. ' + + 'Please try again without MSAA.'; } window.onmousedown = (event) => (event.button === 0) && Mouse(CanvasKit.InputState.Down, event); @@ -178,10 +178,6 @@ canvas.scale(canvasScale, canvasScale); canvas.clear(CanvasKit.WHITE); slide.draw(canvas); - if (surface.isMSAA) { - let [w, h] = [surface.width(), surface.height()]; - CanvasKit.BlitOffscreenFramebuffer(surface, 0,0,w,h, 0,0,w,h, CanvasKit.GLFilter.Nearest); - } canvas.restore(); // HINT: Launch chrome with --disable-frame-rate-limit and --disable-gpu-vsync in order to diff --git a/modules/canvaskit/canvaskit_bindings.cpp b/modules/canvaskit/canvaskit_bindings.cpp index e119f4c47b767..e9c195ee117ad 100644 --- a/modules/canvaskit/canvaskit_bindings.cpp +++ b/modules/canvaskit/canvaskit_bindings.cpp @@ -67,7 +67,7 @@ #include "include/gpu/gl/GrGLInterface.h" #include "include/gpu/gl/GrGLTypes.h" -#include +#include #include #endif @@ -151,24 +151,28 @@ sk_sp MakeGrContext(EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context) } sk_sp MakeOnScreenGLSurface(sk_sp grContext, int width, int height, - sk_sp colorSpace) { + sk_sp colorSpace) { + // WebGL should already be clearing the color and stencil buffers, but do it again here to + // ensure Skia receives them in the expected state. + glBindFramebuffer(GL_FRAMEBUFFER, 0); glClearColor(0, 0, 0, 0); glClearStencil(0); glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + grContext->resetContext(kRenderTarget_GrGLBackendState | kMisc_GrGLBackendState); - // Wrap the frame buffer object attached to the screen in a Skia render - // target so Skia can render to it - GrGLint buffer; - glGetIntegerv(GL_FRAMEBUFFER_BINDING, &buffer); + // The on-screen canvas is FBO 0. Wrap it in a Skia render target so Skia can render to it. GrGLFramebufferInfo info; - info.fFBOID = (GrGLuint) buffer; + info.fFBOID = 0; + + GrGLint sampleCnt; + glGetIntegerv(GL_SAMPLES, &sampleCnt); GrGLint stencil; glGetIntegerv(GL_STENCIL_BITS, &stencil); const auto colorSettings = ColorSettings(colorSpace); info.fFormat = colorSettings.pixFormat; - GrBackendRenderTarget target(width, height, 0, stencil, info); + GrBackendRenderTarget target(width, height, sampleCnt, stencil, info); sk_sp surface(SkSurface::MakeFromBackendRenderTarget(grContext.get(), target, kBottomLeft_GrSurfaceOrigin, colorSettings.colorType, colorSpace, nullptr)); return surface; @@ -484,6 +488,76 @@ SkPathOrNull MakePathFromCmds(uintptr_t /* float* */ cptr, int numCmds) { return emscripten::val(path); } +void PathAddVerbsPointsWeights(SkPath& path, uintptr_t /* uint8_t* */ verbsPtr, int numVerbs, + uintptr_t /* float* */ ptsPtr, int numPts, + uintptr_t /* float* */ wtsPtr, int numWts) { + const uint8_t* verbs = reinterpret_cast(verbsPtr); + const float* pts = reinterpret_cast(ptsPtr); + const float* weights = reinterpret_cast(wtsPtr); + + #define CHECK_NUM_POINTS(n) \ + if ((ptIdx + n) > numPts) { \ + SkDebugf("Not enough points to match the verbs. Saw %d points\n", numPts); \ + return; \ + } + #define CHECK_NUM_WEIGHTS(n) \ + if ((wtIdx + n) > numWts) { \ + SkDebugf("Not enough weights to match the verbs. Saw %d weights\n", numWts); \ + return; \ + } + + path.incReserve(numPts); + int ptIdx = 0; + int wtIdx = 0; + for (int v = 0; v < numVerbs; ++v) { + switch (verbs[v]) { + case MOVE: + CHECK_NUM_POINTS(2); + path.moveTo(pts[ptIdx], pts[ptIdx+1]); + ptIdx += 2; + break; + case LINE: + CHECK_NUM_POINTS(2); + path.lineTo(pts[ptIdx], pts[ptIdx+1]); + ptIdx += 2; + break; + case QUAD: + CHECK_NUM_POINTS(4); + path.quadTo(pts[ptIdx], pts[ptIdx+1], pts[ptIdx+2], pts[ptIdx+3]); + ptIdx += 4; + break; + case CONIC: + CHECK_NUM_POINTS(4); + CHECK_NUM_WEIGHTS(1); + path.conicTo(pts[ptIdx], pts[ptIdx+1], pts[ptIdx+2], pts[ptIdx+3], + weights[wtIdx]); + ptIdx += 4; + wtIdx++; + break; + case CUBIC: + CHECK_NUM_POINTS(6); + path.cubicTo(pts[ptIdx ], pts[ptIdx+1], + pts[ptIdx+2], pts[ptIdx+3], + pts[ptIdx+4], pts[ptIdx+5]); + ptIdx += 6; + break; + case CLOSE: + path.close(); + break; + } + } + #undef CHECK_NUM_POINTS + #undef CHECK_NUM_WEIGHTS +} + +SkPath MakePathFromVerbsPointsWeights(uintptr_t /* uint8_t* */ verbsPtr, int numVerbs, + uintptr_t ptsPtr, int numPts, + uintptr_t wtsPtr, int numWts) { + SkPath path; + PathAddVerbsPointsWeights(path, verbsPtr, numVerbs, ptsPtr, numPts, wtsPtr, numWts); + return path; +} + //======================================================================================== // Path Effects //======================================================================================== @@ -755,7 +829,6 @@ EMSCRIPTEN_BINDINGS(Skia) { // Adds a little helper because emscripten doesn't expose default params. return SkMaskFilter::MakeBlur(style, sigma, respectCTM); }), allow_raw_pointers()); - function("_MakePathFromCmds", &MakePathFromCmds); #ifdef SK_INCLUDE_PATHOPS function("MakePathFromOp", &MakePathFromOp); #endif @@ -772,19 +845,33 @@ EMSCRIPTEN_BINDINGS(Skia) { return SkImage::MakeRasterData(info, pixelData, rowBytes); }), allow_raw_pointers()); + + // Here and in other gradient functions, cPtr is a pointer to an array of data + // representing colors. whether this is an array of SkColor or SkColor4f is indicated + // by the colorType argument. Only RGBA_8888 and RGBA_F32 are accepted. function("_MakeLinearGradientShader", optional_override([](SkPoint start, SkPoint end, - uintptr_t /* SkColor4f* */ cPtr, + uintptr_t cPtr, SkColorType colorType, uintptr_t /* SkScalar* */ pPtr, int count, SkTileMode mode, uint32_t flags, uintptr_t /* SkScalar* */ mPtr, sk_sp colorSpace)->sk_sp { SkPoint points[] = { start, end }; // See comment above for uintptr_t explanation - const SkColor4f* colors = reinterpret_cast(cPtr); const SkScalar* positions = reinterpret_cast(pPtr); OptionalMatrix localMatrix(mPtr); - return SkGradientShader::MakeLinear(points, colors, colorSpace, positions, count, + + if (colorType == SkColorType::kRGBA_F32_SkColorType) { + const SkColor4f* colors = reinterpret_cast(cPtr); + return SkGradientShader::MakeLinear(points, colors, colorSpace, positions, count, + mode, flags, &localMatrix); + } else if (colorType == SkColorType::kRGBA_8888_SkColorType) { + const SkColor* colors = reinterpret_cast(cPtr); + return SkGradientShader::MakeLinear(points, colors, positions, count, mode, flags, &localMatrix); + } else { + SkDebugf("%d is not an accepted colorType\n", colorType); + return nullptr; + } }), allow_raw_pointers()); #ifdef SK_SERIALIZE_SKP function("_MakeSkPicture", optional_override([](uintptr_t /* unint8_t* */ dPtr, @@ -797,20 +884,29 @@ EMSCRIPTEN_BINDINGS(Skia) { }), allow_raw_pointers()); #endif function("_MakeRadialGradientShader", optional_override([](SkPoint center, SkScalar radius, - uintptr_t /* SkColor4f* */ cPtr, + uintptr_t cPtr, SkColorType colorType, uintptr_t /* SkScalar* */ pPtr, int count, SkTileMode mode, uint32_t flags, uintptr_t /* SkScalar* */ mPtr, sk_sp colorSpace)->sk_sp { // See comment above for uintptr_t explanation - const SkColor4f* colors = reinterpret_cast(cPtr); const SkScalar* positions = reinterpret_cast(pPtr); OptionalMatrix localMatrix(mPtr); - return SkGradientShader::MakeRadial(center, radius, colors, colorSpace, positions, count, - mode, flags, &localMatrix); + if (colorType == SkColorType::kRGBA_F32_SkColorType) { + const SkColor4f* colors = reinterpret_cast(cPtr); + return SkGradientShader::MakeRadial(center, radius, colors, colorSpace, positions, count, + mode, flags, &localMatrix); + } else if (colorType == SkColorType::kRGBA_8888_SkColorType) { + const SkColor* colors = reinterpret_cast(cPtr); + return SkGradientShader::MakeRadial(center, radius, colors, positions, count, + mode, flags, &localMatrix); + } else { + SkDebugf("%d is not an accepted colorType\n", colorType); + return nullptr; + } }), allow_raw_pointers()); function("_MakeSweepGradientShader", optional_override([](SkScalar cx, SkScalar cy, - uintptr_t /* SkColor4f* */ cPtr, + uintptr_t cPtr, SkColorType colorType, uintptr_t /* SkScalar* */ pPtr, int count, SkTileMode mode, SkScalar startAngle, SkScalar endAngle, @@ -818,28 +914,49 @@ EMSCRIPTEN_BINDINGS(Skia) { uintptr_t /* SkScalar* */ mPtr, sk_sp colorSpace)->sk_sp { // See comment above for uintptr_t explanation - const SkColor4f* colors = reinterpret_cast(cPtr); const SkScalar* positions = reinterpret_cast(pPtr); OptionalMatrix localMatrix(mPtr); - return SkGradientShader::MakeSweep(cx, cy, colors, colorSpace, positions, count, - mode, startAngle, endAngle, flags, - &localMatrix); + if (colorType == SkColorType::kRGBA_F32_SkColorType) { + const SkColor4f* colors = reinterpret_cast(cPtr); + return SkGradientShader::MakeSweep(cx, cy, colors, colorSpace, positions, count, + mode, startAngle, endAngle, flags, + &localMatrix); + } else if (colorType == SkColorType::kRGBA_8888_SkColorType) { + const SkColor* colors = reinterpret_cast(cPtr); + return SkGradientShader::MakeSweep(cx, cy, colors, positions, count, + mode, startAngle, endAngle, flags, + &localMatrix); + } else { + SkDebugf("%d is not an accepted colorType\n", colorType); + return nullptr; + } }), allow_raw_pointers()); function("_MakeTwoPointConicalGradientShader", optional_override([]( SkPoint start, SkScalar startRadius, SkPoint end, SkScalar endRadius, - uintptr_t /* SkColor4f* */ cPtr, + uintptr_t cPtr, SkColorType colorType, uintptr_t /* SkScalar* */ pPtr, int count, SkTileMode mode, uint32_t flags, uintptr_t /* SkScalar* */ mPtr, sk_sp colorSpace)->sk_sp { // See comment above for uintptr_t explanation - const SkColor4f* colors = reinterpret_cast (cPtr); const SkScalar* positions = reinterpret_cast(pPtr); OptionalMatrix localMatrix(mPtr); - return SkGradientShader::MakeTwoPointConical(start, startRadius, end, endRadius, - colors, colorSpace, positions, count, mode, - flags, &localMatrix); + + if (colorType == SkColorType::kRGBA_F32_SkColorType) { + const SkColor4f* colors = reinterpret_cast(cPtr); + return SkGradientShader::MakeTwoPointConical(start, startRadius, end, endRadius, + colors, colorSpace, positions, count, mode, + flags, &localMatrix); + } else if (colorType == SkColorType::kRGBA_8888_SkColorType) { + const SkColor* colors = reinterpret_cast(cPtr); + return SkGradientShader::MakeTwoPointConical(start, startRadius, end, endRadius, + colors, positions, count, mode, + flags, &localMatrix); + } else { + SkDebugf("%d is not an accepted colorType\n", colorType); + return nullptr; + } }), allow_raw_pointers()); #ifdef SK_GL @@ -898,9 +1015,7 @@ EMSCRIPTEN_BINDINGS(Skia) { self.concat(m); })) .function("drawArc", &SkCanvas::drawArc) - // _drawAtlas takes an SkColor, unlike most private functions handling color. - // This is because it takes an array of colors. Converting it on the Javascript side allows - // an allocation to be avoided here. + // _drawAtlas takes an array of SkColor. There is no SkColor4f override. .function("_drawAtlas", optional_override([](SkCanvas& self, const sk_sp& atlas, uintptr_t /* SkRSXform* */ xptr, uintptr_t /* SkRect* */ rptr, uintptr_t /* SkColor* */ cptr, int count, @@ -921,10 +1036,10 @@ EMSCRIPTEN_BINDINGS(Skia) { .function("_drawColor", optional_override([](SkCanvas& self, uintptr_t /* float* */ cPtr, SkBlendMode mode) { self.drawColor(ptrToSkColor4f(cPtr), mode); })) - .function("drawColorInt", optional_override([](SkCanvas& self, int32_t color) { + .function("drawColorInt", optional_override([](SkCanvas& self, SkColor color) { self.drawColor(color); })) - .function("drawColorInt", optional_override([](SkCanvas& self, int32_t color, SkBlendMode mode) { + .function("drawColorInt", optional_override([](SkCanvas& self, SkColor color, SkBlendMode mode) { self.drawColor(color, mode); })) .function("drawDRRect",optional_override([](SkCanvas& self, const SimpleRRect& o, const SimpleRRect& i, const SkPaint& paint) { @@ -1289,10 +1404,10 @@ EMSCRIPTEN_BINDINGS(Skia) { sk_sp colorSpace) { self.setColor(ptrToSkColor4f(cPtr), colorSpace.get()); })) - .function("setColorInt", optional_override([](SkPaint& self, int32_t color) { + .function("setColorInt", optional_override([](SkPaint& self, SkColor color) { self.setColor(SkColor4f::FromColor(color), nullptr); })) - .function("setColorInt", optional_override([](SkPaint& self, int32_t color, + .function("setColorInt", optional_override([](SkPaint& self, SkColor color, sk_sp colorSpace) { self.setColor(SkColor4f::FromColor(color), colorSpace.get()); })) @@ -1337,6 +1452,8 @@ EMSCRIPTEN_BINDINGS(Skia) { class_("SkPath") .constructor<>() .constructor() + .class_function("_MakeFromCmds", &MakePathFromCmds) + .class_function("_MakeFromVerbsPointsWeights", &MakePathFromVerbsPointsWeights) .function("_addArc", &ApplyAddArc) // interface.js has 3 overloads of addPath .function("_addOval", &ApplyAddOval) @@ -1352,6 +1469,7 @@ EMSCRIPTEN_BINDINGS(Skia) { .function("_addRect", &ApplyAddRect) // interface.js has 4 overloads of addRoundRect .function("_addRoundRect", &ApplyAddRoundRect) + .function("_addVerbsPointsWeights", &PathAddVerbsPointsWeights) .function("_arcTo", &ApplyArcTo) .function("_arcTo", &ApplyArcToAngle) .function("_arcTo", &ApplyArcToArcSize) @@ -1518,10 +1636,20 @@ EMSCRIPTEN_BINDINGS(Skia) { .function("makeSurface", optional_override([](SkSurface& self, SimpleImageInfo sii)->sk_sp { return self.makeSurface(toSkImageInfo(sii)); }), allow_raw_pointers()) - .function("width", &SkSurface::width) +#ifdef SK_GL .function("reportBackendType", optional_override([](SkSurface& self)->std::string { return self.getCanvas()->getGrContext() == nullptr ? "CPU" : "GPU"; - })); + })) + .function("sampleCnt", optional_override([](SkSurface& self)->int { + auto backendRT = self.getBackendRenderTarget(SkSurface::kFlushRead_BackendHandleAccess); + return (backendRT.isValid()) ? backendRT.sampleCnt() : 0; + })) +#else + .function("reportBackendType", optional_override([](SkSurface& self)->std::string { + return "CPU"; + })) +#endif + .function("width", &SkSurface::width); #ifndef SK_NO_FONTS class_("SkTextBlob") diff --git a/modules/canvaskit/compile.sh b/modules/canvaskit/compile.sh index 6fcf1b08c8966..e0f89e3fbb683 100755 --- a/modules/canvaskit/compile.sh +++ b/modules/canvaskit/compile.sh @@ -47,6 +47,12 @@ elif [[ $@ == *profiling* ]]; then echo "Building a build for profiling" RELEASE_CONF+=" --profiling-funcs --closure 0" BUILD_DIR=${BUILD_DIR:="out/canvaskit_wasm_profile"} +elif [[ $@ == *simd* ]]; then + echo "Building a Debug build with SIMD operations" + EXTRA_CFLAGS="\"-DSK_DEBUG\"" + RELEASE_CONF="-O0 -msimd128 --js-opts 0 -s DEMANGLE_SUPPORT=1 -s ASSERTIONS=1 -s GL_ASSERTIONS=1 -g4 \ + --source-map-base /node_modules/canvaskit/bin/ -DSK_DEBUG --pre-js $BASE_DIR/debug.js" + BUILD_DIR=${BUILD_DIR:="out/canvaskit_wasm_experimental_simd"} else BUILD_DIR=${BUILD_DIR:="out/canvaskit_wasm"} fi @@ -72,8 +78,6 @@ SKP_JS="--pre-js $BASE_DIR/skp.js" GN_SKP_FLAGS="" WASM_SKP="-DSK_SERIALIZE_SKP" if [[ $@ == *no_skp* ]]; then - GN_SKP_FLAGS="\"-DSK_DISABLE_READBUFFER\"," - WASM_SKP="-DSK_DISABLE_READBUFFER" SKP_JS="" fi @@ -158,20 +162,18 @@ if [[ $@ == *no_canvas* ]]; then HTML_CANVAS_API="" fi -GN_FONT="skia_enable_fontmgr_empty=false skia_enable_fontmgr_custom_empty=false" +GN_FONT="skia_enable_fontmgr_custom_directory=false " FONT_CFLAGS="" -BUILTIN_FONT="$BASE_DIR/fonts/NotoMono-Regular.ttf.cpp" +BUILTIN_FONT="" FONT_JS="--pre-js $BASE_DIR/font.js" if [[ $@ == *no_font* ]]; then echo "Omitting the built-in font(s), font manager and all code dealing with fonts" - BUILTIN_FONT="" FONT_CFLAGS="-DSK_NO_FONTS" FONT_JS="" - GN_FONT="skia_enable_fontmgr_empty=true skia_enable_fontmgr_custom_empty=false" + GN_FONT+="skia_enable_fontmgr_custom_embedded=false skia_enable_fontmgr_custom_empty=false" elif [[ $@ == *no_embedded_font* ]]; then echo "Omitting the built-in font(s)" - BUILTIN_FONT="" - GN_FONT="skia_enable_fontmgr_empty=false skia_enable_fontmgr_custom_empty=true" + GN_FONT+="skia_enable_fontmgr_custom_embedded=false skia_enable_fontmgr_custom_empty=true" else # Generate the font's binary file (which is covered by .gitignore) python tools/embed_resources.py \ @@ -179,6 +181,8 @@ else --input $BASE_DIR/fonts/NotoMono-Regular.ttf \ --output $BASE_DIR/fonts/NotoMono-Regular.ttf.cpp \ --align 4 + BUILTIN_FONT="$BASE_DIR/fonts/NotoMono-Regular.ttf.cpp" + GN_FONT+="skia_enable_fontmgr_custom_embedded=true skia_enable_fontmgr_custom_empty=false" fi if [[ $@ == *no_alias_font* ]]; then diff --git a/modules/canvaskit/externs.js b/modules/canvaskit/externs.js index 905400e7fc1d6..0a88787c028dc 100644 --- a/modules/canvaskit/externs.js +++ b/modules/canvaskit/externs.js @@ -47,6 +47,7 @@ var CanvasKit = { MakeImage: function() {}, /** @return {CanvasKit.SkImage} */ MakeImageFromEncoded: function() {}, + MakeImageFromCanvasImageSource: function() {}, MakeOnScreenGLSurface: function() {}, MakePathFromCmds: function() {}, MakePathFromOp: function() {}, @@ -81,7 +82,6 @@ var CanvasKit = { _computeTonalColors: function() {}, _MakeImage: function() {}, _MakeLinearGradientShader: function() {}, - _MakePathFromCmds: function() {}, _MakeRadialGradientShader: function() {}, _MakeSweepGradientShader: function() {}, _MakeManagedAnimation: function() {}, @@ -339,6 +339,7 @@ var CanvasKit = { SkM44: { identity: function() {}, invert: function() {}, + mustInvert: function() {}, multiply: function() {}, rotatedUnitSinCos: function() {}, rotated: function() {}, @@ -348,6 +349,7 @@ var CanvasKit = { perspective: function() {}, rc: function() {}, transpose: function() {}, + setupCamera: function() {}, }, SkMatrix: { @@ -433,7 +435,9 @@ var CanvasKit = { }, SkPath: { - // public API (from C++ bindings) + // public API (from C++ and JS bindings) + MakeFromCmds: function() {}, + MakeFromVerbsPointsWeights: function() {}, computeTightBounds: function() {}, contains: function() {}, /** @return {CanvasKit.SkPath} */ @@ -449,15 +453,19 @@ var CanvasKit = { rewind: function() {}, setFillType: function() {}, setIsVolatile: function() {}, + toCmds: function() {}, toSVGString: function() {}, // private API + _MakeFromCmds: function() {}, + _MakeFromVerbsPointsWeights: function() {}, _addArc: function() {}, _addOval: function() {}, _addPath: function() {}, _addRect: function() {}, _addPoly: function() {}, _addRoundRect: function() {}, + _addVerbsPointsWeights: function() {}, _arc: function() {}, _arcTo: function() {}, _close: function() {}, @@ -542,6 +550,7 @@ var CanvasKit = { /** @return {CanvasKit.SkImage} */ makeImageSnapshot: function() {}, makeSurface: function() {}, + sampleCnt: function() {}, reportBackendType: function() {}, grContext: {}, @@ -868,6 +877,7 @@ CanvasKit.SkPath.prototype.addPath = function() {}; CanvasKit.SkPath.prototype.addPoly = function() {}; CanvasKit.SkPath.prototype.addRect = function() {}; CanvasKit.SkPath.prototype.addRoundRect = function() {}; +CanvasKit.SkPath.prototype.addVerbsPointsWeights = function() {}; CanvasKit.SkPath.prototype.arc = function() {}; CanvasKit.SkPath.prototype.arcTo = function() {}; CanvasKit.SkPath.prototype.close = function() {}; @@ -952,6 +962,9 @@ HTMLCanvas.prototype.loadFont = function() {}; HTMLCanvas.prototype.makePath2D = function() {}; HTMLCanvas.prototype.toDataURL = function() {}; +var ImageBitmapRenderingContext = {}; +ImageBitmapRenderingContext.prototype.transferFromImageBitmap = function() {}; + var CanvasRenderingContext2D = {}; CanvasRenderingContext2D.prototype.addHitRegion = function() {}; CanvasRenderingContext2D.prototype.arc = function() {}; diff --git a/modules/canvaskit/font.js b/modules/canvaskit/font.js index eb127bf8c2798..845a8c2f032f6 100644 --- a/modules/canvaskit/font.js +++ b/modules/canvaskit/font.js @@ -65,13 +65,13 @@ CanvasKit._extraInitializations.push(function() { var sizes = []; for (var i = 0; i < fonts.length; i++) { var data = new Uint8Array(fonts[i]); - var dptr = copy1dArray(data, CanvasKit.HEAPU8); + var dptr = copy1dArray(data, "HEAPU8"); dPtrs.push(dptr); sizes.push(data.byteLength); } // Pointers are 32 bit unsigned ints - var datasPtr = copy1dArray(dPtrs, CanvasKit.HEAPU32); - var sizesPtr = copy1dArray(sizes, CanvasKit.HEAPU32); + var datasPtr = copy1dArray(dPtrs, "HEAPU32"); + var sizesPtr = copy1dArray(sizes, "HEAPU32"); var fm = CanvasKit.SkFontMgr._fromData(datasPtr, sizesPtr, fonts.length); // The SkFontMgr has taken ownership of the bytes we allocated in the for loop. CanvasKit._free(datasPtr); @@ -83,7 +83,7 @@ CanvasKit._extraInitializations.push(function() { CanvasKit.SkFontMgr.prototype.MakeTypefaceFromData = function(fontData) { var data = new Uint8Array(fontData); - var fptr = copy1dArray(data, CanvasKit.HEAPU8); + var fptr = copy1dArray(data, "HEAPU8"); var font = this._makeTypefaceFromData(fptr, data.byteLength); if (!font) { SkDebug('Could not decode font data'); diff --git a/modules/canvaskit/future_apis/ImageDecoder.md b/modules/canvaskit/future_apis/ImageDecoder.md new file mode 100644 index 0000000000000..a8092de5646a4 --- /dev/null +++ b/modules/canvaskit/future_apis/ImageDecoder.md @@ -0,0 +1,62 @@ +# ImageDecoder API + +Date Updated: June 16, 2020 + +## Summary and Links + +The [ImageDecoder API](https://github.com/dalecurtis/image-decoder-api/blob/master/explainer.md) +handles decoding of both still and animated images. +Similar to the larger [web codecs](https://github.com/WICG/web-codecs/blob/master/explainer.md) +proposal which is focused more on video and audio. +The ImageDecoder API could be used with `CanvasKit.MakeImageFromCanvasImageSource` +for creating CanvasKit compatible `SkImage`s. +For still images, the `createImageBitmap(blob)` API achieves the same result. + +- [Explainer](https://github.com/dalecurtis/image-decoder-api/blob/master/explainer.md) +- [Prototype](https://chromium-review.googlesource.com/c/chromium/src/+/2145133) +- [Discourse](https://discourse.wicg.io/t/proposal-imagedecoder-api-extension-for-webcodecs/4418) + +Currently available as a prototype behind the `--enable-blink-features=WebCodecs` flag +in Chrome Canary, works in version 85.0.4175.0. + +## Running the prototype + +1. Download and install [Chrome Canary](https://www.google.com/chrome/canary/). Verify that you +have version 85.0.4175.0 or later. +2. Close ALL open instances of chromium browsers, including chrome. +2. Run Chrome Canary with the `--enable-blink-features=WebCodecs` flag. + +**MacOS**: Run `/applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --enable-blink-features=WebCodecs` + +**Windows, Linux**: [https://www.chromium.org/developers/how-tos/run-chromium-with-flags](https://www.chromium.org/developers/how-tos/run-chromium-with-flags) + +3. Navigate to: [http://storage.googleapis.com/dalecurtis/test-gif.html?src=giphy.gif](http://storage.googleapis.com/dalecurtis/test-gif.html?src=giphy.gif) +4. You should see a cute animated cat illustration. + +## Example API Usage with CanvasKit + +With a still image: +```jsx +const response = await fetch(stillImageUrl); // e.g. png or jpeg +const data = await response.arrayBuffer(); + +const imageDecoder = new ImageDecoder({ data }); +const imageBitmap = await imageDecoder.decode(); + +const skImage = CanvasKit.MakeImageFromCanvasImageSource(imageBitmap); +// do something with skImage, such as drawing it +``` + +With an animated image: +```jsx +const response = await fetch(animatedImageUrl); // e.g. gif or mjpeg +const data = await response.arrayBuffer(); + +const imageDecoder = new ImageDecoder({ data }); + +for (let frame = 0; frame < imageDecoder.frameCount; frame++) { + const imageBitmap = await imageDecoder.decode(frame); + const skImage = CanvasKit.MakeImageFromCanvasImageSource(imageBitmap); + // do something with skImage, such as drawing it +} +``` diff --git a/modules/canvaskit/future_apis/WebGPU.md b/modules/canvaskit/future_apis/WebGPU.md new file mode 100644 index 0000000000000..f141f05c8a8d4 --- /dev/null +++ b/modules/canvaskit/future_apis/WebGPU.md @@ -0,0 +1,17 @@ +# WebGPU API + +Date Updated: June 16, 2020 + +## Summary and Links + +WebGPU exposes an API for performing operations, such as rendering and computation, +on a Graphics Processing Unit. [Dawn](https://dawn.googlesource.com/dawn) is the underlying +implementation of WebGPU in chromium. In the future, with +[WebGPU bindings provided by emscripten](https://github.com/emscripten-core/emscripten/pull/10218), +CanvasKit should be able to use a WebGPU rendering device. + +- [W.I.P. Specification](https://gpuweb.github.io/gpuweb/) +- [WebGPU Samples](https://austineng.github.io/webgpu-samples/) +- [Implementation Status](https://github.com/gpuweb/gpuweb/wiki/Implementation-Status) + +Some features are currently available in Chrome Canary behind the `--enable-unsafe-webgpu` flag. diff --git a/modules/canvaskit/helper.js b/modules/canvaskit/helper.js index 9b09165a14a0b..230b1a2306292 100644 --- a/modules/canvaskit/helper.js +++ b/modules/canvaskit/helper.js @@ -17,20 +17,20 @@ CanvasKit.Color = function(r, g, b, a) { return CanvasKit.Color4f(clamp(r)/255, clamp(g)/255, clamp(b)/255, a); } -// Constructs a Color as a 32 bit integer, with 8 bits assigned to each channel. +// Constructs a Color as a 32 bit unsigned integer, with 8 bits assigned to each channel. // Channels are expected to be between 0 and 255 and will be clamped as such. CanvasKit.ColorAsInt = function(r, g, b, a) { // default to opaque if (a === undefined) { a = 255; } - // This is consistent with how Skia represents colors in C++, as a signed int. + // This is consistent with how Skia represents colors in C++, as an unsigned int. // This is also consistent with how Flutter represents colors: // https://github.com/flutter/engine/blob/243bb59c7179a7e701ce478080d6ce990710ae73/lib/web_ui/lib/src/ui/painting.dart#L50 - return ((clamp(a) << 24) | (clamp(r) << 16) | (clamp(g) << 8) | (clamp(b) << 0)) - & 0xFFFFFFFF; // This truncates the int to 32 bits and signals to JS engines they can - // represent the number with an int instead of a double. - ; + return (((clamp(a) << 24) | (clamp(r) << 16) | (clamp(g) << 8) | (clamp(b) << 0) + & 0xFFFFFFF) // This truncates the unsigned to 32 bits and signals to JS engines they can + // represent the number with an int instead of a double. + >>> 0); // This makes the value an unsigned int. } // Construct a 4-float color. // Opaque if opacity is omitted. @@ -153,6 +153,23 @@ function isCanvasKitColor(ob) { function toUint32Color(c) { return ((clamp(c[3]*255) << 24) | (clamp(c[0]*255) << 16) | (clamp(c[1]*255) << 8) | (clamp(c[2]*255) << 0)) >>> 0; } +// Accepts various colors representations and converts them to an array of int colors. +// Does not handle builders. +function assureIntColors(arr) { + if (arr instanceof Float32Array) { + var count = Math.floor(arr.length / 4); + var result = new Uint32Array(count); + for (var i = 0; i < count; i ++) { + result[i] = toUint32Color(arr.slice(i*4, (i+1)*4)); + } + return result; + } else if (arr instanceof Uint32Array) { + return arr; + } else if (arr instanceof Array && arr[0] instanceof Float32Array) { + return arr.map(toUint32Color); + } +} + function uIntColorToCanvasKitColor(c) { return CanvasKit.Color( (c >> 16) & 0xFF, @@ -198,11 +215,11 @@ function almostEqual(floata, floatb) { return Math.abs(floata - floatb) < 0.00001; } - var nullptr = 0; // emscripten doesn't like to take null as uintptr_t // arr can be a normal JS array or a TypedArray -// dest is something like CanvasKit.HEAPF32 +// dest is a string like "HEAPU32" that specifies the type the src array +// should be copied into. // ptr can be optionally provided if the memory was already allocated. function copy1dArray(arr, dest, ptr) { if (!arr || !arr.length) { @@ -212,8 +229,9 @@ function copy1dArray(arr, dest, ptr) { if (arr['_ck']) { return arr.byteOffset; } + var bytesPerElement = CanvasKit[dest].BYTES_PER_ELEMENT; if (!ptr) { - ptr = CanvasKit._malloc(arr.length * dest.BYTES_PER_ELEMENT); + ptr = CanvasKit._malloc(arr.length * bytesPerElement); } // In c++ terms, the WASM heap is a uint8_t*, a long buffer/array of single // byte elements. When we run _malloc, we always get an offset/pointer into @@ -224,7 +242,10 @@ function copy1dArray(arr, dest, ptr) { // Concretely, we need to convert ptr to go from an index into a 1-byte-wide // buffer to an index into a 4-byte-wide buffer (in the case of HEAPF32) // and thus we divide ptr by 4. - dest.set(arr, ptr / dest.BYTES_PER_ELEMENT); + // It is important to make sure we are grabbing the freshest view of the + // memory possible because if we call _malloc and the heap needs to grow, + // the TypedArrayView will no longer be valid. + CanvasKit[dest].set(arr, ptr / bytesPerElement); return ptr; } @@ -232,15 +253,19 @@ function copy1dArray(arr, dest, ptr) { // inside themselves). A common use case is points. // dest is something like CanvasKit.HEAPF32 // ptr can be optionally provided if the memory was already allocated. +// TODO(kjlubick): Remove 2d arrays - everything should be flat. function copy2dArray(arr, dest, ptr) { if (!arr || !arr.length) { return nullptr; } + var bytesPerElement = CanvasKit[dest].BYTES_PER_ELEMENT; if (!ptr) { - ptr = CanvasKit._malloc(arr.length * arr[0].length * dest.BYTES_PER_ELEMENT); + ptr = CanvasKit._malloc(arr.length * arr[0].length * bytesPerElement); } + // Make sure we have a fresh view of the heap after we malloc. + dest = CanvasKit[dest]; var idx = 0; - var adjustedPtr = ptr / dest.BYTES_PER_ELEMENT; + var adjustedPtr = ptr / bytesPerElement; for (var r = 0; r < arr.length; r++) { for (var c = 0; c < arr[0].length; c++) { dest[adjustedPtr + idx] = arr[r][c]; @@ -250,6 +275,36 @@ function copy2dArray(arr, dest, ptr) { return ptr; } +// Copies an array of colors to wasm, returning an object with the pointer +// and info necessary to use the copied colors. +// Accepts either a flat Float32Array, flat Uint32Array or Array of Float32Arrays. +// If color is an object that was allocated with CanvasKit.Malloc, it's pointer is +// returned and no extra copy is performed. +// Array of Float32Arrays is deprecated and planned to be removed, prefer flat +// Float32Array +// TODO(nifong): have this accept color builders. +function copyFlexibleColorArray(colors) { + var result = { + colorPtr: nullptr, + count: colors.length, + colorType: CanvasKit.ColorType.RGBA_F32, + } + if (colors instanceof Float32Array) { + result.colorPtr = copy1dArray(colors, "HEAPF32"); + result.count = colors.length / 4; + + } else if (colors instanceof Uint32Array) { + result.colorPtr = copy1dArray(colors, "HEAPU32"); + result.colorType = CanvasKit.ColorType.RGBA_8888; + + } else if (colors instanceof Array && colors[0] instanceof Float32Array) { + result.colorPtr = copy2dArray(colors, "HEAPF32"); + } else { + throw('Invalid argument to copyFlexibleColorArray, Not a color array '+typeof(colors)); + } + return result; +} + var defaultPerspective = Float32Array.of(0, 0, 1); var _scratch3x3MatrixPtr = nullptr; @@ -273,7 +328,7 @@ function copy3x3MatrixToWasm(matr) { } // This should be an array or typed array. // have to divide the pointer by 4 to "cast" it from bytes to float. - var mPtr = copy1dArray(matr, CanvasKit.HEAPF32, _scratch3x3MatrixPtr); + var mPtr = copy1dArray(matr, "HEAPF32", _scratch3x3MatrixPtr); if (matr.length === 6) { // Overwrite the last 3 floats with the default perspective. The divide // by 4 casts the pointer into a float pointer. @@ -312,7 +367,7 @@ function copy4x4MatrixToWasm(matr) { if (matr.length === 16) { // This should be an array or typed array. // have to divide the pointer by 4 to "cast" it from bytes to float. - return copy1dArray(matr, CanvasKit.HEAPF32, _scratch4x4MatrixPtr); + return copy1dArray(matr, "HEAPF32", _scratch4x4MatrixPtr); } // Upscale the row-major 3x3 or 3x2 matrix into a 4x4 row-major matrix // TODO(skbug.com/10108) This will need to change when we convert our @@ -384,7 +439,7 @@ var _scratchColorPtr = nullptr; var _scratchColor; // the result from CanvasKit.Malloc function copyColorToWasm(color4f, ptr) { - return copy1dArray(color4f, CanvasKit.HEAPF32, ptr || _scratchColorPtr); + return copy1dArray(color4f, "HEAPF32", ptr || _scratchColorPtr); } function copyColorComponentsToWasm(r, g, b, a) { @@ -398,7 +453,7 @@ function copyColorComponentsToWasm(r, g, b, a) { function copyColorToWasmNoScratch(color4f) { // TODO(kjlubick): accept 4 floats or int color - return copy1dArray(color4f, CanvasKit.HEAPF32); + return copy1dArray(color4f, "HEAPF32"); } // copies the four floats at the given pointer in a js Float32Array @@ -426,6 +481,7 @@ var Float32ArrayCache = {}; // [CanvasKit.LINE_VERB, 30, 40], // [CanvasKit.QUAD_VERB, 20, 50, 45, 60], // ]; +// TODO(kjlubick) remove this and Float32ArrayCache (superceded by Malloc). function loadCmdsTypedArray(arr) { var len = 0; for (var r = 0; r < arr.length; r++) { @@ -449,7 +505,7 @@ function loadCmdsTypedArray(arr) { } } - var ptr = copy1dArray(ta, CanvasKit.HEAPF32); + var ptr = copy1dArray(ta, "HEAPF32"); return [ptr, len]; } @@ -539,7 +595,7 @@ CanvasKit.FourFloatArrayHelper.prototype.build = function() { if (this._ptr) { return this._ptr; } - this._ptr = copy1dArray(this._floats, CanvasKit.HEAPF32); + this._ptr = copy1dArray(this._floats, "HEAPF32"); return this._ptr; } @@ -612,7 +668,7 @@ CanvasKit.OneUIntArrayHelper.prototype.build = function() { if (this._ptr) { return this._ptr; } - this._ptr = copy1dArray(this._uints, CanvasKit.HEAPU32); + this._ptr = copy1dArray(this._uints, "HEAPU32"); return this._ptr; } @@ -701,6 +757,11 @@ CanvasKit.Malloc = function(typedArray, len) { 'length': len, 'byteOffset': ptr, typedArray: null, + 'subarray': function(start, end) { + var sa = this['toTypedArray']().subarray(start, end); + sa['_ck'] = true; + return sa; + }, 'toTypedArray': function() { // Check if the previously allocated array is still usable. // If it's falsey, then we haven't created an array yet. @@ -714,7 +775,7 @@ CanvasKit.Malloc = function(typedArray, len) { return this.typedArray; }, }; -} +}; /** * Free frees the memory returned by Malloc. @@ -726,12 +787,12 @@ CanvasKit.Free = function(mallocObj) { // Set these to null to make sure the TypedArrays can be garbage collected. mallocObj['toTypedArray'] = null; mallocObj.typedArray = null; -} +}; // This helper will free the given pointer unless the provided array is one // that was returned by CanvasKit.Malloc. function freeArraysThatAreNotMallocedByUsers(ptr, arr) { - if (!arr || !arr['_ck']) { + if (arr && !arr['_ck']) { CanvasKit._free(ptr); } } diff --git a/modules/canvaskit/interface.js b/modules/canvaskit/interface.js index 94f7f715c0b50..94029aaef7a94 100644 --- a/modules/canvaskit/interface.js +++ b/modules/canvaskit/interface.js @@ -434,6 +434,40 @@ CanvasKit.onRuntimeInitialized = function() { ]; } + // Return the inverse of an SkM44. throw an error if it's not invertible + CanvasKit.SkM44.mustInvert = function(m) { + var m2 = CanvasKit.SkM44.invert(m); + if (m2 === null) { + throw "Matrix not invertible"; + } + return m2; + } + + // returns a matrix that sets up a 3D perspective view from a given camera. + // + // area - a rect describing the viewport. (0, 0, canvas_width, canvas_height) suggested + // zscale - a scalar describing the scale of the z axis. min(width, height)/2 suggested + // cam - an object with the following attributes + // const cam = { + // 'eye' : [0, 0, 1 / Math.tan(Math.PI / 24) - 1], // a 3D point locating the camera + // 'coa' : [0, 0, 0], // center of attention - the 3D point the camera is looking at. + // 'up' : [0, 1, 0], // a unit vector pointing in the camera's up direction, because eye and coa alone leave roll unspecified. + // 'near' : 0.02, // near clipping plane + // 'far' : 4, // far clipping plane + // 'angle': Math.PI / 12, // field of view in radians + // }; + CanvasKit.SkM44.setupCamera = function(area, zscale, cam) { + var camera = CanvasKit.SkM44.lookat(cam['eye'], cam['coa'], cam['up']); + var perspective = CanvasKit.SkM44.perspective(cam['near'], cam['far'], cam['angle']); + var center = [(area.fLeft + area.fRight)/2, (area.fTop + area.fBottom)/2, 0]; + var viewScale = [(area.fRight - area.fLeft)/2, (area.fBottom - area.fTop)/2, zscale]; + var viewport = CanvasKit.SkM44.multiply( + CanvasKit.SkM44.translated(center), + CanvasKit.SkM44.scaled(viewScale)); + return CanvasKit.SkM44.multiply( + viewport, perspective, camera, CanvasKit.SkM44.mustInvert(viewport)); + } + // An SkColorMatrix is a 4x4 color matrix that transforms the 4 color channels // with a 1x4 matrix that post-translates those 4 channels. // For example, the following is the layout with the scale (S) and post-transform @@ -520,7 +554,31 @@ CanvasKit.onRuntimeInitialized = function() { } return m; - } + }; + + CanvasKit.SkPath.MakeFromCmds = function(cmds) { + var ptrLen = loadCmdsTypedArray(cmds); + var path = CanvasKit.SkPath._MakeFromCmds(ptrLen[0], ptrLen[1]); + CanvasKit._free(ptrLen[0]); + return path; + }; + + // Deprecated + CanvasKit.MakePathFromCmds = CanvasKit.SkPath.MakeFromCmds; + + // The weights array is optional (only used for conics). + CanvasKit.SkPath.MakeFromVerbsPointsWeights = function(verbs, pts, weights) { + var verbsPtr = copy1dArray(verbs, "HEAPU8"); + var pointsPtr = copy1dArray(pts, "HEAPF32"); + var weightsPtr = copy1dArray(weights, "HEAPF32"); + var numWeights = (weights && weights.length) || 0; + var path = CanvasKit.SkPath._MakeFromVerbsPointsWeights( + verbsPtr, verbs.length, pointsPtr, pts.length, weightsPtr, numWeights); + freeArraysThatAreNotMallocedByUsers(verbsPtr, verbs); + freeArraysThatAreNotMallocedByUsers(pointsPtr, pts); + freeArraysThatAreNotMallocedByUsers(weightsPtr, weights); + return path; + }; CanvasKit.SkPath.prototype.addArc = function(oval, startAngle, sweepAngle) { // see arc() for the HTMLCanvas version @@ -591,7 +649,7 @@ CanvasKit.onRuntimeInitialized = function() { ptr = points.byteOffset; n = points.length/2; } else { - ptr = copy2dArray(points, CanvasKit.HEAPF32); + ptr = copy2dArray(points, "HEAPF32"); n = points.length; } this._addPoly(ptr, n, close); @@ -641,7 +699,7 @@ CanvasKit.onRuntimeInitialized = function() { SkDebug('addRoundRect needs 8 radii provided. Got ' + radii.length); return null; } - var rptr = copy1dArray(radii, CanvasKit.HEAPF32); + var rptr = copy1dArray(radii, "HEAPF32"); if (args.length === 3 || args.length === 4) { var r = args[0]; var ccw = args[args.length - 1]; @@ -654,6 +712,19 @@ CanvasKit.onRuntimeInitialized = function() { return this; }; + // The weights array is optional (only used for conics). + CanvasKit.SkPath.prototype.addVerbsPointsWeights = function(verbs, points, weights) { + var verbsPtr = copy1dArray(verbs, "HEAPU8"); + var pointsPtr = copy1dArray(points, "HEAPF32"); + var weightsPtr = copy1dArray(weights, "HEAPF32"); + var numWeights = (weights && weights.length) || 0; + this._addVerbsPointsWeights(verbsPtr, verbs.length, pointsPtr, points.length, + weightsPtr, numWeights); + freeArraysThatAreNotMallocedByUsers(verbsPtr, verbs); + freeArraysThatAreNotMallocedByUsers(pointsPtr, points); + freeArraysThatAreNotMallocedByUsers(weightsPtr, weights); + }; + CanvasKit.SkPath.prototype.arc = function(x, y, radius, startAngle, endAngle, ccw) { // emulates the HTMLCanvas behavior. See addArc() for the SkPath version. // Note input angles are radians. @@ -877,16 +948,24 @@ CanvasKit.onRuntimeInitialized = function() { CanvasKit.SkCanvas.prototype.concat44 = CanvasKit.SkCanvas.prototype.concat; // atlas is an SkImage, e.g. from CanvasKit.MakeImageFromEncoded - // srcRects and dstXforms should be CanvasKit.SkRectBuilder and CanvasKit.RSXFormBuilder - // or just arrays of floats in groups of 4. - // colors, if provided, should be a CanvasKit.SkColorBuilder or array of float colors (arrays of 4 floats) + // srcRects, dstXforms, and colors should be CanvasKit.SkRectBuilder, CanvasKit.RSXFormBuilder, + // and CanvasKit.SkColorBuilder (fastest) + // Or they can be an array of floats of length 4*number of destinations. + // colors are optional and used to tint the drawn images using the optional blend mode + // Colors may be an SkColorBuilder, a Uint32Array of int colors, + // a Flat Float32Array of float colors or a 2d Array of Float32Array(4) (deprecated) CanvasKit.SkCanvas.prototype.drawAtlas = function(atlas, srcRects, dstXforms, paint, /*optional*/ blendMode, colors) { if (!atlas || !paint || !srcRects || !dstXforms) { SkDebug('Doing nothing since missing a required input'); return; } - if (srcRects.length !== dstXforms.length || (colors && colors.length !== dstXforms.length)) { + + // builder arguments report the length as the number of rects, but when passed as arrays + // their.length attribute is 4x higher because it's the number of total components of all rects. + // colors is always going to report the same length, at least until floats colors are supported + // by this function. + if (srcRects.length !== dstXforms.length) { SkDebug('Doing nothing since input arrays length mismatches'); return; } @@ -898,14 +977,17 @@ CanvasKit.onRuntimeInitialized = function() { if (srcRects.build) { srcRectPtr = srcRects.build(); } else { - srcRectPtr = copy1dArray(srcRects, CanvasKit.HEAPF32); + srcRectPtr = copy1dArray(srcRects, "HEAPF32"); } + var count = 1; var dstXformPtr; if (dstXforms.build) { dstXformPtr = dstXforms.build(); + count = dstXforms.length; } else { - dstXformPtr = copy1dArray(dstXforms, CanvasKit.HEAPF32); + dstXformPtr = copy1dArray(dstXforms, "HEAPF32"); + count = dstXforms.length / 4; } var colorPtr = nullptr; @@ -913,19 +995,11 @@ CanvasKit.onRuntimeInitialized = function() { if (colors.build) { colorPtr = colors.build(); } else { - if (!isCanvasKitColor(colors[0])) { - SkDebug('DrawAtlas color argument expected to be CanvasKit.SkRectBuilder or array of ' + - 'float arrays, but got '+colors); - return; - } - // convert here - colors = colors.map(toUint32Color); - colorPtr = copy1dArray(colors, CanvasKit.HEAPU32); + colorPtr = copy1dArray(assureIntColors(colors), "HEAPU32"); } } - this._drawAtlas(atlas, dstXformPtr, srcRectPtr, colorPtr, dstXforms.length, - blendMode, paint); + this._drawAtlas(atlas, dstXformPtr, srcRectPtr, colorPtr, count, blendMode, paint); if (srcRectPtr && !srcRects.build) { freeArraysThatAreNotMallocedByUsers(srcRectPtr, srcRects); @@ -968,7 +1042,7 @@ CanvasKit.onRuntimeInitialized = function() { ptr = points.byteOffset; n = points.length/2; } else { - ptr = copy2dArray(points, CanvasKit.HEAPF32); + ptr = copy2dArray(points, "HEAPF32"); n = points.length; } this._drawPoints(mode, ptr, n, paint); @@ -1061,7 +1135,7 @@ CanvasKit.onRuntimeInitialized = function() { colorSpace = colorSpace || CanvasKit.SkColorSpace.SRGB; var srcRowBytes = bytesPerPixel * srcWidth; - var pptr = copy1dArray(pixels, CanvasKit.HEAPU8); + var pptr = copy1dArray(pixels, "HEAPU8"); var ok = this._writePixels({ 'width': srcWidth, 'height': srcHeight, @@ -1085,7 +1159,7 @@ CanvasKit.onRuntimeInitialized = function() { if (!colorMatrix || colorMatrix.length !== 20) { throw 'invalid color matrix'; } - var fptr = copy1dArray(colorMatrix, CanvasKit.HEAPF32); + var fptr = copy1dArray(colorMatrix, "HEAPF32"); // We know skia memcopies the floats, so we can free our memory after the call returns. var m = CanvasKit.SkColorFilter._makeMatrix(fptr); freeArraysThatAreNotMallocedByUsers(fptr, colorMatrix); @@ -1174,7 +1248,7 @@ CanvasKit.onRuntimeInitialized = function() { if (!intervals.length || intervals.length % 2 === 1) { throw 'Intervals array must have even length'; } - var ptr = copy1dArray(intervals, CanvasKit.HEAPF32); + var ptr = copy1dArray(intervals, "HEAPF32"); var dpe = CanvasKit.SkPathEffect._MakeDash(ptr, intervals.length, phase); freeArraysThatAreNotMallocedByUsers(ptr, intervals); return dpe; @@ -1189,67 +1263,67 @@ CanvasKit.onRuntimeInitialized = function() { CanvasKit.SkShader.MakeLinearGradient = function(start, end, colors, pos, mode, localMatrix, flags, colorSpace) { colorSpace = colorSpace || null - var colorPtr = copy2dArray(colors, CanvasKit.HEAPF32); - var posPtr = copy1dArray(pos, CanvasKit.HEAPF32); + var cPtrInfo = copyFlexibleColorArray(colors); + var posPtr = copy1dArray(pos, "HEAPF32"); flags = flags || 0; var localMatrixPtr = copy3x3MatrixToWasm(localMatrix); - var lgs = CanvasKit._MakeLinearGradientShader(start, end, colorPtr, posPtr, - colors.length, mode, flags, localMatrixPtr, colorSpace); + var lgs = CanvasKit._MakeLinearGradientShader(start, end, cPtrInfo.colorPtr, cPtrInfo.colorType, posPtr, + cPtrInfo.count, mode, flags, localMatrixPtr, colorSpace); - CanvasKit._free(colorPtr); - freeArraysThatAreNotMallocedByUsers(posPtr, pos); + freeArraysThatAreNotMallocedByUsers(cPtrInfo.colorPtr, colors); + pos && freeArraysThatAreNotMallocedByUsers(posPtr, pos); return lgs; } CanvasKit.SkShader.MakeRadialGradient = function(center, radius, colors, pos, mode, localMatrix, flags, colorSpace) { colorSpace = colorSpace || null - var colorPtr = copy2dArray(colors, CanvasKit.HEAPF32); - var posPtr = copy1dArray(pos, CanvasKit.HEAPF32); + var cPtrInfo = copyFlexibleColorArray(colors); + var posPtr = copy1dArray(pos, "HEAPF32"); flags = flags || 0; var localMatrixPtr = copy3x3MatrixToWasm(localMatrix); - var rgs = CanvasKit._MakeRadialGradientShader(center, radius, colorPtr, posPtr, - colors.length, mode, flags, localMatrixPtr, colorSpace); + var rgs = CanvasKit._MakeRadialGradientShader(center, radius, cPtrInfo.colorPtr, cPtrInfo.colorType, posPtr, + cPtrInfo.count, mode, flags, localMatrixPtr, colorSpace); - CanvasKit._free(colorPtr); - freeArraysThatAreNotMallocedByUsers(posPtr, pos); + freeArraysThatAreNotMallocedByUsers(cPtrInfo.colorPtr, colors); + pos && freeArraysThatAreNotMallocedByUsers(posPtr, pos); return rgs; } CanvasKit.SkShader.MakeSweepGradient = function(cx, cy, colors, pos, mode, localMatrix, flags, startAngle, endAngle, colorSpace) { colorSpace = colorSpace || null - var colorPtr = copy2dArray(colors, CanvasKit.HEAPF32); - var posPtr = copy1dArray(pos, CanvasKit.HEAPF32); + var cPtrInfo = copyFlexibleColorArray(colors); + var posPtr = copy1dArray(pos, "HEAPF32"); flags = flags || 0; startAngle = startAngle || 0; endAngle = endAngle || 360; var localMatrixPtr = copy3x3MatrixToWasm(localMatrix); - var sgs = CanvasKit._MakeSweepGradientShader(cx, cy, colorPtr, posPtr, - colors.length, mode, + var sgs = CanvasKit._MakeSweepGradientShader(cx, cy, cPtrInfo.colorPtr, cPtrInfo.colorType, posPtr, + cPtrInfo.count, mode, startAngle, endAngle, flags, localMatrixPtr, colorSpace); - CanvasKit._free(colorPtr); - freeArraysThatAreNotMallocedByUsers(posPtr, pos); + freeArraysThatAreNotMallocedByUsers(cPtrInfo.colorPtr, colors); + pos && freeArraysThatAreNotMallocedByUsers(posPtr, pos); return sgs; } CanvasKit.SkShader.MakeTwoPointConicalGradient = function(start, startRadius, end, endRadius, colors, pos, mode, localMatrix, flags, colorSpace) { colorSpace = colorSpace || null - var colorPtr = copy2dArray(colors, CanvasKit.HEAPF32); - var posPtr = copy1dArray(pos, CanvasKit.HEAPF32); + var cPtrInfo = copyFlexibleColorArray(colors); + var posPtr = copy1dArray(pos, "HEAPF32"); flags = flags || 0; var localMatrixPtr = copy3x3MatrixToWasm(localMatrix); var rgs = CanvasKit._MakeTwoPointConicalGradientShader( - start, startRadius, end, endRadius, - colorPtr, posPtr, colors.length, mode, flags, localMatrixPtr, colorSpace); + start, startRadius, end, endRadius, cPtrInfo.colorPtr, cPtrInfo.colorType, + posPtr, cPtrInfo.count, mode, flags, localMatrixPtr, colorSpace); - CanvasKit._free(colorPtr); - freeArraysThatAreNotMallocedByUsers(posPtr, pos); + freeArraysThatAreNotMallocedByUsers(cPtrInfo.colorPtr, colors); + pos && freeArraysThatAreNotMallocedByUsers(posPtr, pos); return rgs; } @@ -1272,19 +1346,25 @@ CanvasKit.onRuntimeInitialized = function() { // ambient: {r, g, b, a}, // spot: {r, g, b, a}, // } -// Returns the same format +// Returns the same format. Note, if malloced colors are passed in, the memory +// housing the passed in colors passed in will be overwritten with the computed +// tonal colors. CanvasKit.computeTonalColors = function(tonalColors) { + // copy the colors into WASM var cPtrAmbi = copyColorToWasmNoScratch(tonalColors['ambient']); var cPtrSpot = copyColorToWasmNoScratch(tonalColors['spot']); + // The output of this function will be the same pointers we passed in. this._computeTonalColors(cPtrAmbi, cPtrSpot); + // Read the results out. var result = { 'ambient': copyColorFromWasm(cPtrAmbi), 'spot': copyColorFromWasm(cPtrSpot), - } - freeArraysThatAreNotMallocedByUsers(cPtrAmbi); - freeArraysThatAreNotMallocedByUsers(cPtrSpot); + }; + // If the user passed us malloced colors in here, we don't want to clean them up. + freeArraysThatAreNotMallocedByUsers(cPtrAmbi, tonalColors['ambient']); + freeArraysThatAreNotMallocedByUsers(cPtrSpot, tonalColors['spot']); return result; -} +}; CanvasKit.LTRBRect = function(l, t, r, b) { return { @@ -1293,7 +1373,7 @@ CanvasKit.LTRBRect = function(l, t, r, b) { fRight: r, fBottom: b, }; -} +}; CanvasKit.XYWHRect = function(x, y, w, h) { return { @@ -1302,7 +1382,7 @@ CanvasKit.XYWHRect = function(x, y, w, h) { fRight: x+w, fBottom: y+h, }; -} +}; // RRectXY returns an RRect with the given rect and a radiusX and radiusY for // all 4 corners. @@ -1318,14 +1398,7 @@ CanvasKit.RRectXY = function(rect, rx, ry) { rx4: rx, ry4: ry, }; -} - -CanvasKit.MakePathFromCmds = function(cmds) { - var ptrLen = loadCmdsTypedArray(cmds); - var path = CanvasKit._MakePathFromCmds(ptrLen[0], ptrLen[1]); - CanvasKit._free(ptrLen[0]); - return path; -} +}; // data is a TypedArray or ArrayBuffer e.g. from fetch().then(resp.arrayBuffer()) CanvasKit.MakeAnimatedImageFromEncoded = function(data) { @@ -1355,7 +1428,40 @@ CanvasKit.MakeImageFromEncoded = function(data) { return img; } -// pixels must be a Uint8Array with bytes representing the pixel values +// A variable to hold a canvasElement which can be reused once created the first time. +var memoizedCanvas2dElement = null; + +// Alternative to CanvasKit.MakeImageFromEncoded. Allows for CanvasKit users to take advantage of +// browser APIs to decode images instead of using codecs included in the CanvasKit wasm binary. +// Expects that the canvasImageSource has already loaded/decoded. +// CanvasImageSource reference: https://developer.mozilla.org/en-US/docs/Web/API/CanvasImageSource +CanvasKit.MakeImageFromCanvasImageSource = function(canvasImageSource) { + var width = canvasImageSource.width; + var height = canvasImageSource.height; + + if (!memoizedCanvas2dElement) { + memoizedCanvas2dElement = document.createElement('canvas'); + } + memoizedCanvas2dElement.width = width; + memoizedCanvas2dElement.height = height; + + var ctx2d = memoizedCanvas2dElement.getContext('2d'); + ctx2d.drawImage(canvasImageSource, 0, 0); + + var imageData = ctx2d.getImageData(0, 0, width, height); + + return CanvasKit.MakeImage( + imageData.data, + width, + height, + CanvasKit.AlphaType.Unpremul, + CanvasKit.ColorType.RGBA_8888, + CanvasKit.SkColorSpace.SRGB + ); +} + +// pixels may be any Typed Array, but Uint8Array or Uint8ClampedArray is recommended, +// with bytes representing the pixel values. // (e.g. each set of 4 bytes could represent RGBA values for a single pixel). CanvasKit.MakeImage = function(pixels, width, height, alphaType, colorType, colorSpace) { var bytesPerPixel = pixels.length / (width * height); @@ -1366,13 +1472,17 @@ CanvasKit.MakeImage = function(pixels, width, height, alphaType, colorType, colo 'colorType': colorType, 'colorSpace': colorSpace, }; - var pptr = copy1dArray(pixels, CanvasKit.HEAPU8); + var pptr = copy1dArray(pixels, "HEAPU8"); // No need to _free pptr, Image takes it with SkData::MakeFromMalloc return CanvasKit._MakeImage(info, pptr, pixels.length, width * bytesPerPixel); } -// colors is an array of float color arrays +// Colors may be a Uint32Array of int colors, a Flat Float32Array of float colors +// or a 2d Array of Float32Array(4) (deprecated) +// the underlying skia function accepts only int colors so it is recommended +// to pass an array of int colors to avoid an extra conversion. +// SkColorBuilder is not accepted. CanvasKit.MakeSkVertices = function(mode, positions, textureCoordinates, colors, indices, isVolatile) { // Default isVolitile to true if not set @@ -1391,21 +1501,23 @@ CanvasKit.MakeSkVertices = function(mode, positions, textureCoordinates, colors, flags |= (1 << 2); } - var builder = new CanvasKit._SkVerticesBuilder(mode, positions.length, idxCount, flags); + var builder = new CanvasKit._SkVerticesBuilder(mode, positions.length, idxCount, flags); - copy2dArray(positions, CanvasKit.HEAPF32, builder.positions()); + copy2dArray(positions, "HEAPF32", builder.positions()); if (builder.texCoords()) { - copy2dArray(textureCoordinates, CanvasKit.HEAPF32, builder.texCoords()); + copy2dArray(textureCoordinates, "HEAPF32", builder.texCoords()); } if (builder.colors()) { - // Convert from canvaskit 4f colors to 32 bit uint colors which builder supports. - copy1dArray(colors.map(toUint32Color), CanvasKit.HEAPU32, builder.colors()); + if (colors.build) { + throw('Color builder not accepted by MakeSkVertices, use array of ints'); + } else { + copy1dArray(assureIntColors(colors), "HEAPU32", builder.colors()); + } } if (builder.indices()) { - copy1dArray(indices, CanvasKit.HEAPU16, builder.indices()); + copy1dArray(indices, "HEAPU16", builder.indices()); } - var idxCount = (indices && indices.length) || 0; // Create the vertices, which owns the memory that the builder had allocated. return builder.detach(); }; diff --git a/modules/canvaskit/paragraph.js b/modules/canvaskit/paragraph.js index f59d07fd666fb..c171a36721d1a 100644 --- a/modules/canvaskit/paragraph.js +++ b/modules/canvaskit/paragraph.js @@ -62,7 +62,7 @@ CanvasKit.TextStyle = function(s) { // Use [''] to tell closure not to minify the names - if (!isCanvasKitColor(s['color'])) { + if (!s['color']) { s['color'] = CanvasKit.BLACK; } @@ -89,7 +89,7 @@ var strPtr = cacheOrCopyString(strings[i]); sPtrs.push(strPtr); } - return copy1dArray(sPtrs, CanvasKit.HEAPU32); + return copy1dArray(sPtrs, "HEAPU32"); } // maps string -> malloc'd pointer diff --git a/modules/canvaskit/particles.js b/modules/canvaskit/particles.js index 830a164ce84e2..24ce748c3481e 100644 --- a/modules/canvaskit/particles.js +++ b/modules/canvaskit/particles.js @@ -38,9 +38,9 @@ CanvasKit.MakeParticles = function(json, assets) { // Not entirely sure if it matters, but the uintptr_t are 32 bits // we want to copy our array of uintptr_t into the right size memory. - var namesPtr = copy1dArray(assetNamePtrs, CanvasKit.HEAPU32); - var assetsPtr = copy1dArray(assetDataPtrs, CanvasKit.HEAPU32); - var assetSizesPtr = copy1dArray(assetSizes, CanvasKit.HEAPU32); + var namesPtr = copy1dArray(assetNamePtrs, "HEAPU32"); + var assetsPtr = copy1dArray(assetDataPtrs, "HEAPU32"); + var assetSizesPtr = copy1dArray(assetSizes, "HEAPU32"); var particles = CanvasKit._MakeParticles(json, assetKeys.length, namesPtr, assetsPtr, assetSizesPtr); @@ -73,4 +73,4 @@ CanvasKit._extraInitializations.push(function() { } return new Float32Array(CanvasKit.HEAPU8.buffer, fptr, numFloats); } -}); \ No newline at end of file +}); diff --git a/modules/canvaskit/perf/assets/test_1500x959.jpg b/modules/canvaskit/perf/assets/test_1500x959.jpg new file mode 100644 index 0000000000000..d27ee59c4aaa0 Binary files /dev/null and b/modules/canvaskit/perf/assets/test_1500x959.jpg differ diff --git a/modules/canvaskit/perf/assets/test_512x512.png b/modules/canvaskit/perf/assets/test_512x512.png new file mode 100644 index 0000000000000..c2efb8108df4a Binary files /dev/null and b/modules/canvaskit/perf/assets/test_512x512.png differ diff --git a/modules/canvaskit/perf/assets/test_64x64.png b/modules/canvaskit/perf/assets/test_64x64.png new file mode 100644 index 0000000000000..a3bb32e9f2204 Binary files /dev/null and b/modules/canvaskit/perf/assets/test_64x64.png differ diff --git a/modules/canvaskit/perf/canvas.bench.js b/modules/canvaskit/perf/canvas.bench.js index 0ad8820e024be..1117ad64f1c9f 100644 --- a/modules/canvaskit/perf/canvas.bench.js +++ b/modules/canvaskit/perf/canvas.bench.js @@ -175,4 +175,63 @@ describe('Basic Canvas ops', () => { benchmarkAndReport('canvas_drawHugeGradient', setup, test, teardown); }); + + function NO_OP() {} + + function htmlImageElementToDataURL(htmlImageElement) { + const canvas = document.createElement('canvas'); + canvas.height = htmlImageElement.height; + canvas.width = htmlImageElement.width; + const ctx = canvas.getContext('2d') + ctx.drawImage(htmlImageElement, 0, 0); + return canvas.toDataURL(); + } + + const TEST_IMAGE_FILENAMES = [ 'test_64x64.png', 'test_512x512.png', 'test_1500x959.jpg']; + // This for loop generates two perf cases for each test image. One uses browser APIs + // to decode an image, and the other uses codecs included in the CanvasKit wasm to decode an + // image. wasm codec Image decoding is faster (50 microseconds vs 20000 microseconds), but + // including codecs in wasm increases the size of the CanvasKit wasm binary. + for (const testImageFilename of TEST_IMAGE_FILENAMES) { + const imageResponsePromise = fetch(`/assets/${testImageFilename}`); + const imageArrayBufferPromise = imageResponsePromise.then((imageResponse) => imageResponse.arrayBuffer()); + + const htmlImageElement = new Image(); + htmlImageElementLoadPromise = new Promise((resolve) => htmlImageElement.addEventListener('load', resolve)); + // Create a data url of the image so that load and decode time can be measured + // while hopefully ignoring the time of getting the image from disk / the network. + imageDataURLPromise = htmlImageElementLoadPromise.then(() => htmlImageElementToDataURL(htmlImageElement)); + htmlImageElement.src = `/assets/${testImageFilename}`; + + it('can decode an image using HTMLImageElement and Canvas2D', async () => { + const imageDataURL = await imageDataURLPromise; + + async function test(ctx) { + const image = new Image(); + // Testing showed that waiting for the load event is faster than waiting for + // image.decode(). + // HTMLImageElement.decode() reference: https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/decode + const promise = new Promise((resolve) => image.addEventListener('load', resolve)); + image.src = imageDataURL; + + await promise; + + const img = await CanvasKit.MakeImageFromCanvasImageSource(image); + img.delete(); + } + + await asyncBenchmarkAndReport(`canvas_${testImageFilename}_HTMLImageElementDecoding`, NO_OP, test, NO_OP); + }); + + it('can decode an image using codecs in wasm', async () => { + const encodedArrayBuffer = await imageArrayBufferPromise; + + function test(ctx) { + const img = CanvasKit.MakeImageFromEncoded(encodedArrayBuffer); + img.delete(); + } + + benchmarkAndReport(`canvas_${testImageFilename}_wasmImageDecoding`, NO_OP, test, NO_OP); + }); + } }); diff --git a/modules/canvaskit/rt_shader.js b/modules/canvaskit/rt_shader.js index 92127c245573d..6dc21f06963dc 100644 --- a/modules/canvaskit/rt_shader.js +++ b/modules/canvaskit/rt_shader.js @@ -2,7 +2,7 @@ CanvasKit._extraInitializations = CanvasKit._extraInitializations || []; CanvasKit._extraInitializations.push(function() { CanvasKit.SkRuntimeEffect.prototype.makeShader = function(floats, isOpaque, localMatrix) { // We don't need to free these floats because they will become owned by the shader. - var fptr = copy1dArray(floats, CanvasKit.HEAPF32); + var fptr = copy1dArray(floats, "HEAPF32"); var localMatrixPtr = copy3x3MatrixToWasm(localMatrix); // Our array has 4 bytes per float, so be sure to account for that before // sending it over the wire. @@ -12,7 +12,7 @@ CanvasKit._extraInitializations.push(function() { // childrenWithShaders is an array of other shaders (e.g. SkImage.makeShader()) CanvasKit.SkRuntimeEffect.prototype.makeShaderWithChildren = function(floats, isOpaque, childrenShaders, localMatrix) { // We don't need to free these floats because they will become owned by the shader. - var fptr = copy1dArray(floats, CanvasKit.HEAPF32); + var fptr = copy1dArray(floats, "HEAPF32"); var localMatrixPtr = copy3x3MatrixToWasm(localMatrix); var barePointers = []; for (var i = 0; i < childrenShaders.length; i++) { @@ -20,7 +20,7 @@ CanvasKit._extraInitializations.push(function() { // and send that over the wire, so it can be re-wrapped as an sk_sp. barePointers.push(childrenShaders[i].$$.ptr); } - var childrenPointers = copy1dArray(barePointers, CanvasKit.HEAPU32); + var childrenPointers = copy1dArray(barePointers, "HEAPU32"); // Our array has 4 bytes per float, so be sure to account for that before // sending it over the wire. return this._makeShaderWithChildren(fptr, floats.length * 4, !!isOpaque, childrenPointers, diff --git a/modules/canvaskit/skottie.js b/modules/canvaskit/skottie.js index 029fb8b05d94b..f07eea51b304f 100644 --- a/modules/canvaskit/skottie.js +++ b/modules/canvaskit/skottie.js @@ -38,9 +38,9 @@ CanvasKit.MakeManagedAnimation = function(json, assets) { // Not entirely sure if it matters, but the uintptr_t are 32 bits // we want to copy our array of uintptr_t into the right size memory. - var namesPtr = copy1dArray(assetNamePtrs, CanvasKit.HEAPU32); - var assetsPtr = copy1dArray(assetDataPtrs, CanvasKit.HEAPU32); - var assetSizesPtr = copy1dArray(assetSizes, CanvasKit.HEAPU32); + var namesPtr = copy1dArray(assetNamePtrs, "HEAPU32"); + var assetsPtr = copy1dArray(assetDataPtrs, "HEAPU32"); + var assetSizesPtr = copy1dArray(assetSizes, "HEAPU32"); var anim = CanvasKit._MakeManagedAnimation(json, assetKeys.length, namesPtr, assetsPtr, assetSizesPtr); diff --git a/modules/canvaskit/tests/assets/map-shield.json b/modules/canvaskit/tests/assets/map-shield.json new file mode 100644 index 0000000000000..1d36cf8a4da98 --- /dev/null +++ b/modules/canvaskit/tests/assets/map-shield.json @@ -0,0 +1 @@ +{"assets":[],"ddd":0,"fr":60,"h":310,"ip":0,"layers":[{"ao":0,"bm":0,"ddd":0,"ind":1,"ip":0,"ks":{"a":{"a":0,"ix":1,"k":[0,0,0]},"o":{"a":0,"ix":11,"k":0},"p":{"a":0,"ix":2,"k":[155,155,0]},"r":{"a":0,"ix":10,"k":-1},"s":{"a":0,"ix":6,"k":[100,100,100]}},"nm":"labels","op":176,"sr":1,"st":0,"ty":3},{"ao":0,"bm":0,"ddd":0,"hasMask":true,"ind":2,"ip":0,"ks":{"a":{"a":0,"ix":1,"k":[0,0,0]},"o":{"a":1,"ix":11,"k":[{"e":[100],"i":{"x":[0.2],"y":[1]},"n":["0p2_1_0p167_0p167"],"o":{"x":[0.167],"y":[0.167]},"s":[0],"t":37},{"e":[100],"i":{"x":[0.2],"y":[1]},"n":["0p2_1_0p159_0"],"o":{"x":[0.159],"y":[0]},"s":[100],"t":55},{"e":[0],"i":{"x":[0.833],"y":[0.833]},"n":["0p833_0p833_0p4_0"],"o":{"x":[0.4],"y":[0]},"s":[100],"t":120},{"t":138}]},"p":{"a":0,"ix":2,"k":[155,155,0]},"r":{"a":0,"ix":10,"k":0},"s":{"a":0,"ix":6,"k":[100,100,100]}},"masksProperties":[{"inv":false,"mode":"a","nm":"Mask 1","o":{"a":0,"ix":3,"k":100},"pt":{"a":1,"ix":1,"k":[{"e":[{"c":true,"i":[[-11.389,0],[-8.039,3.263],[-3.719,2.218],[-3.248,2.606],[-2.518,2.56],[-1.894,2.345],[-2.411,4.16],[-1.615,3.935],[-1.175,5.373],[0,6.983],[0,0],[0,0],[8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.38,-3.446],[-0.592,-2.867],[-0.862,-2.806],[-2.277,-4.562],[-1.79,-2.793],[-2.774,-3.239],[-4.308,-3.494],[-8.453,-3.357]],"o":[[13.667,0],[4.039,-1.639],[3.581,-2.136],[2.795,-2.243],[2.107,-2.142],[2.995,-3.707],[2.108,-3.637],[2.043,-4.977],[1.432,-6.545],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.549],[0.326,2.957],[0.601,2.914],[1.523,4.96],[1.493,2.992],[2.318,3.616],[3.623,4.231],[7.004,5.679],[10.038,3.987]],"v":[[0,90],[33.372,83.404],[45.008,77.573],[55.262,70.45],[63.238,63.239],[69.244,56.505],[77.369,44.687],[82.963,33.318],[87.812,17.771],[90,-2.562],[90,-30.667],[90,-75],[75,-90],[43,-90],[22.5,-90],[0.667,-90],[-28,-90],[-75,-90],[-90,-75],[-90,-47.333],[-90,-38.667],[-90,-25],[-90,-13.5],[-90,-2.562],[-89.425,7.937],[-88.045,16.676],[-85.847,25.26],[-80.128,39.564],[-75.198,48.247],[-67.549,58.542],[-55.626,70.156],[-32.328,83.826]]}],"i":{"x":0.2,"y":1},"n":"0p2_1_0p4_0","o":{"x":0.4,"y":0},"s":[{"c":true,"i":[[-11.916,0.004],[-6.282,0.003],[-5.846,0.003],[-5.461,0.003],[0,0],[4.755,7.529],[5.42,5.779],[-11.092,1.957],[-0.822,15.105],[0,0],[0,0],[9.823,16.074],[5.083,4.934],[11.523,0.734],[8.918,-0.849],[8.66,-3.67],[1.462,-2.498],[1.635,-1.988],[2.375,-2.381],[1.892,-8.314],[4.477,-9.017],[1.595,-5.039],[-1.973,-0.33],[0,0],[0,0],[0.389,-6.824],[-0.384,-3.803],[0,0],[-1.331,-12.597],[6.023,-5.744],[0.231,-5.804],[-20.837,-0.001]],"o":[[6.357,-0.002],[6.282,-0.003],[6.458,-0.003],[15.454,-0.009],[0,-8.895],[-4.339,-6.871],[-6.168,-6.576],[7.959,-1.402],[0,0],[0,0],[-23.315,-11.404],[-5.239,-8.572],[-8.258,-8.017],[-7.331,-0.467],[-11.35,1.081],[-2.54,1.077],[-1.197,2.044],[-2.171,2.641],[-6.857,6.876],[-2.111,9.276],[-1.655,3.333],[-0.436,2.296],[1.871,0.313],[1.919,0],[-1.79,6.199],[-0.111,1.958],[0.164,2.909],[9.053,0.668],[0.952,9.016],[-3.702,3.531],[0,0.036],[10.355,0.001]],"v":[[-1.5,91.321],[17.55,91.314],[35.833,91.305],[53.833,91.294],[79.774,91.277],[73.725,64.976],[56.191,55.627],[55.969,31.929],[81.008,-2.036],[78.54,-4.275],[78.815,-8.471],[58.625,-58],[43.408,-78.092],[14.875,-90.5],[-10.213,-89.989],[-41.701,-82.991],[-48.149,-78.452],[-50.495,-71.941],[-58.659,-66.152],[-70.159,-42.979],[-77.786,-15],[-83.944,-2.16],[-80.935,1.363],[-75.233,1.51],[-72.974,5.114],[-73.796,24.42],[-75.168,32.53],[-70.232,36.166],[-46.019,53.557],[-57.648,75.083],[-71.603,91.276],[-35.5,91.326]]}],"t":30},{"e":[{"c":true,"i":[[-11.389,0],[-8.039,3.263],[-3.719,2.218],[-3.248,2.606],[-2.518,2.56],[-1.894,2.345],[-2.411,4.16],[-1.615,3.935],[-1.175,5.373],[0,6.983],[0,0],[0,0],[8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.38,-3.446],[-0.592,-2.867],[-0.862,-2.806],[-2.277,-4.562],[-1.79,-2.793],[-2.774,-3.239],[-4.308,-3.494],[-8.453,-3.357]],"o":[[13.667,0],[4.039,-1.639],[3.581,-2.136],[2.795,-2.243],[2.107,-2.142],[2.995,-3.707],[2.108,-3.637],[2.043,-4.977],[1.432,-6.545],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.549],[0.326,2.957],[0.601,2.914],[1.523,4.96],[1.493,2.992],[2.318,3.616],[3.623,4.231],[7.004,5.679],[10.038,3.987]],"v":[[0,90],[33.372,83.404],[45.008,77.573],[55.262,70.45],[63.238,63.239],[69.244,56.505],[77.369,44.687],[82.963,33.318],[87.812,17.771],[90,-2.562],[90,-30.667],[90,-75],[75,-90],[43,-90],[22.5,-90],[0.667,-90],[-28,-90],[-75,-90],[-90,-75],[-90,-47.333],[-90,-38.667],[-90,-25],[-90,-13.5],[-90,-2.562],[-89.425,7.937],[-88.045,16.676],[-85.847,25.26],[-80.128,39.564],[-75.198,48.247],[-67.549,58.542],[-55.626,70.156],[-32.328,83.826]]}],"i":{"x":0.833,"y":1},"n":"0p833_1_0p167_0","o":{"x":0.167,"y":0},"s":[{"c":true,"i":[[-11.389,0],[-8.039,3.263],[-3.719,2.218],[-3.248,2.606],[-2.518,2.56],[-1.894,2.345],[-2.411,4.16],[-1.615,3.935],[-1.175,5.373],[0,6.983],[0,0],[0,0],[8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.38,-3.446],[-0.592,-2.867],[-0.862,-2.806],[-2.277,-4.562],[-1.79,-2.793],[-2.774,-3.239],[-4.308,-3.494],[-8.453,-3.357]],"o":[[13.667,0],[4.039,-1.639],[3.581,-2.136],[2.795,-2.243],[2.107,-2.142],[2.995,-3.707],[2.108,-3.637],[2.043,-4.977],[1.432,-6.545],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.549],[0.326,2.957],[0.601,2.914],[1.523,4.96],[1.493,2.992],[2.318,3.616],[3.623,4.231],[7.004,5.679],[10.038,3.987]],"v":[[0,90],[33.372,83.404],[45.008,77.573],[55.262,70.45],[63.238,63.239],[69.244,56.505],[77.369,44.687],[82.963,33.318],[87.812,17.771],[90,-2.562],[90,-30.667],[90,-75],[75,-90],[43,-90],[22.5,-90],[0.667,-90],[-28,-90],[-75,-90],[-90,-75],[-90,-47.333],[-90,-38.667],[-90,-25],[-90,-13.5],[-90,-2.562],[-89.425,7.937],[-88.045,16.676],[-85.847,25.26],[-80.128,39.564],[-75.198,48.247],[-67.549,58.542],[-55.626,70.156],[-32.328,83.826]]}],"t":55},{"e":[{"c":true,"i":[[-11.916,0.004],[-6.282,0.003],[-5.846,0.003],[-5.461,0.003],[0,0],[4.755,7.529],[5.42,5.779],[-11.092,1.957],[-0.822,15.105],[0,0],[0,0],[9.823,16.074],[5.083,4.934],[11.523,0.734],[8.918,-0.849],[8.66,-3.67],[1.462,-2.498],[1.635,-1.988],[2.375,-2.381],[1.892,-8.314],[4.477,-9.017],[1.595,-5.039],[-1.973,-0.33],[0,0],[0,0],[0.389,-6.824],[-0.384,-3.803],[0,0],[-1.331,-12.597],[6.023,-5.744],[0.231,-5.804],[-20.837,-0.001]],"o":[[6.357,-0.002],[6.282,-0.003],[6.458,-0.003],[15.454,-0.009],[0,-8.895],[-4.339,-6.871],[-6.168,-6.576],[7.959,-1.402],[0,0],[0,0],[-23.315,-11.404],[-5.239,-8.572],[-8.258,-8.017],[-7.331,-0.467],[-11.35,1.081],[-2.54,1.077],[-1.197,2.044],[-2.171,2.641],[-6.857,6.876],[-2.111,9.276],[-1.655,3.333],[-0.436,2.296],[1.871,0.313],[1.919,0],[-1.79,6.199],[-0.111,1.957],[0.164,2.909],[9.053,0.668],[0.952,9.016],[-3.702,3.531],[0,0.036],[10.355,0.001]],"v":[[-1.5,91.321],[17.55,91.314],[35.833,91.305],[53.833,91.294],[79.774,91.277],[73.725,64.976],[56.191,55.627],[55.969,31.929],[81.008,-2.036],[78.54,-4.275],[78.815,-8.471],[58.625,-58],[43.408,-78.092],[14.875,-90.5],[-10.213,-89.989],[-41.701,-82.991],[-48.149,-78.452],[-50.495,-71.941],[-58.659,-66.152],[-70.159,-42.979],[-77.786,-15],[-83.944,-2.16],[-80.935,1.363],[-75.233,1.51],[-72.974,5.114],[-73.796,24.42],[-75.168,32.53],[-70.232,36.166],[-46.019,53.557],[-57.648,75.083],[-71.603,91.276],[-35.5,91.326]]}],"i":{"x":0.2,"y":1},"n":"0p2_1_0p4_0","o":{"x":0.4,"y":0},"s":[{"c":true,"i":[[-11.389,0],[-8.039,3.263],[-3.719,2.218],[-3.248,2.606],[-2.518,2.56],[-1.894,2.345],[-2.411,4.16],[-1.615,3.935],[-1.175,5.373],[0,6.983],[0,0],[0,0],[8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.38,-3.446],[-0.592,-2.867],[-0.862,-2.806],[-2.277,-4.562],[-1.79,-2.793],[-2.774,-3.239],[-4.308,-3.494],[-8.453,-3.357]],"o":[[13.667,0],[4.039,-1.639],[3.581,-2.136],[2.795,-2.243],[2.107,-2.142],[2.995,-3.707],[2.108,-3.637],[2.043,-4.977],[1.432,-6.545],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.549],[0.326,2.957],[0.601,2.914],[1.523,4.96],[1.493,2.992],[2.318,3.616],[3.623,4.231],[7.004,5.679],[10.038,3.987]],"v":[[0,90],[33.372,83.404],[45.008,77.573],[55.262,70.45],[63.238,63.239],[69.244,56.505],[77.369,44.687],[82.963,33.318],[87.812,17.771],[90,-2.562],[90,-30.667],[90,-75],[75,-90],[43,-90],[22.5,-90],[0.667,-90],[-28,-90],[-75,-90],[-90,-75],[-90,-47.333],[-90,-38.667],[-90,-25],[-90,-13.5],[-90,-2.562],[-89.425,7.937],[-88.045,16.676],[-85.847,25.26],[-80.128,39.564],[-75.198,48.247],[-67.549,58.542],[-55.626,70.156],[-32.328,83.826]]}],"t":120},{"t":145}]},"x":{"a":0,"ix":4,"k":0}}],"nm":"$Top Band","op":176,"shapes":[{"cix":2,"hd":false,"it":[{"d":1,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"topBandRect","p":{"a":0,"ix":3,"k":[0,-76]},"r":{"a":0,"ix":4,"k":0},"s":{"a":0,"ix":2,"k":[192,29]},"ty":"rc"},{"a":{"a":0,"ix":1,"k":[0,-76]},"nm":"Transform","o":{"a":0,"ix":7,"k":100},"p":{"a":1,"ix":2,"k":[{"e":[0,-76],"i":{"x":0.1,"y":1},"n":"0p1_1_0p167_0p167","o":{"x":0.167,"y":0.167},"s":[0,-107],"t":30,"ti":[0,0],"to":[0,0]},{"e":[0,-76],"i":{"x":0.2,"y":0.2},"n":"0p2_0p2_0p231_0p231","o":{"x":0.231,"y":0.231},"s":[0,-76],"t":55,"ti":[0,0],"to":[0,0]},{"e":[0,-107],"i":{"x":0.833,"y":0.833},"n":"0p833_0p833_0p4_0","o":{"x":0.4,"y":0},"s":[0,-76],"t":120,"ti":[0,0],"to":[0,0]},{"t":145}]},"r":{"a":0,"ix":6,"k":0},"s":{"a":0,"ix":3,"k":[100,100]},"sa":{"a":0,"ix":5,"k":0},"sk":{"a":0,"ix":4,"k":0},"ty":"tr"}],"ix":1,"mn":"ADBE Vector Group","nm":"Group 1","np":1,"ty":"gr"},{"c":{"a":0,"ix":4,"k":[0.799987792969,0.799987792969,0.799987792969,1]},"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"$Top Band Fill","o":{"a":0,"ix":5,"k":100},"r":1,"ty":"fl"}],"sr":1,"st":-2,"ty":4},{"ao":0,"bm":0,"ddd":0,"ind":3,"ip":0,"ks":{"a":{"a":0,"ix":1,"k":[-2.006,-0.22,0]},"o":{"a":0,"ix":11,"k":100},"p":{"a":0,"ix":2,"k":[152.994,154.78,0]},"r":{"a":0,"ix":10,"k":0},"s":{"a":0,"ix":6,"k":[100,100,100]}},"nm":"$Icon","op":176,"shapes":[{"hd":false,"ind":0,"ix":1,"ks":{"a":1,"ix":2,"k":[{"e":[{"c":true,"i":[[-11.389,0],[-8.039,3.263],[-3.719,2.218],[-3.248,2.606],[-2.518,2.56],[-1.894,2.345],[-2.411,4.16],[-1.615,3.935],[-1.175,5.373],[0,6.983],[0,0],[0,0],[8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.38,-3.446],[-0.592,-2.867],[-0.862,-2.806],[-2.277,-4.562],[-1.79,-2.793],[-2.774,-3.239],[-4.308,-3.494],[-8.453,-3.357]],"o":[[13.667,0],[4.039,-1.639],[3.581,-2.136],[2.795,-2.243],[2.107,-2.142],[2.995,-3.707],[2.108,-3.637],[2.043,-4.977],[1.432,-6.545],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.549],[0.326,2.957],[0.601,2.914],[1.523,4.96],[1.493,2.992],[2.318,3.616],[3.623,4.231],[7.004,5.679],[10.038,3.987]],"v":[[0,90],[33.372,83.404],[45.008,77.573],[55.262,70.45],[63.238,63.239],[69.244,56.505],[77.369,44.687],[82.963,33.318],[87.812,17.771],[90,-2.562],[90,-30.667],[90,-75],[75,-90],[43,-90],[22.5,-90],[0.667,-90],[-28,-90],[-75,-90],[-90,-75],[-90,-47.333],[-90,-38.667],[-90,-25],[-90,-13.5],[-90,-2.562],[-89.425,7.937],[-88.045,16.676],[-85.847,25.26],[-80.128,39.564],[-75.198,48.247],[-67.549,58.542],[-55.626,70.156],[-32.328,83.826]]}],"i":{"x":0.2,"y":1},"n":"0p2_1_0p4_0","o":{"x":0.4,"y":0},"s":[{"c":true,"i":[[-11.916,0.004],[-6.282,0.003],[-5.846,0.003],[-5.461,0.003],[0,0],[4.755,7.529],[5.42,5.779],[-11.092,1.957],[-0.822,15.105],[0,0],[0,0],[9.823,16.074],[5.083,4.934],[11.523,0.734],[8.918,-0.849],[8.66,-3.67],[1.462,-2.498],[1.635,-1.988],[2.375,-2.381],[1.892,-8.314],[4.477,-9.017],[1.595,-5.039],[-1.973,-0.33],[0,0],[0,0],[0.389,-6.824],[-0.384,-3.803],[0,0],[-1.331,-12.597],[6.023,-5.744],[0.231,-5.804],[-20.837,-0.001]],"o":[[6.357,-0.002],[6.282,-0.003],[6.458,-0.003],[15.454,-0.009],[0,-8.895],[-4.339,-6.871],[-6.168,-6.576],[7.959,-1.402],[0,0],[0,0],[-23.315,-11.404],[-5.239,-8.572],[-8.258,-8.017],[-7.331,-0.467],[-11.35,1.081],[-2.54,1.077],[-1.197,2.044],[-2.171,2.641],[-6.857,6.876],[-2.111,9.276],[-1.655,3.333],[-0.436,2.296],[1.871,0.313],[1.919,0],[-1.79,6.199],[-0.111,1.958],[0.164,2.909],[9.053,0.668],[0.952,9.016],[-3.702,3.531],[0,0.036],[10.355,0.001]],"v":[[-2,90.821],[17.05,90.814],[35.333,90.805],[53.333,90.794],[79.274,90.777],[73.225,64.476],[55.691,55.127],[55.469,31.429],[80.508,-2.536],[78.04,-4.775],[78.315,-8.971],[58.125,-58.5],[42.908,-78.592],[14.375,-91],[-10.713,-90.489],[-42.201,-83.491],[-48.649,-78.952],[-50.995,-72.441],[-59.159,-66.652],[-70.659,-43.479],[-78.286,-15.5],[-84.444,-2.66],[-81.435,0.863],[-75.733,1.01],[-73.474,4.614],[-74.296,23.92],[-75.668,32.03],[-70.732,35.666],[-46.519,53.057],[-58.148,74.583],[-72.103,90.776],[-36,90.826]]}],"t":30},{"e":[{"c":true,"i":[[-11.389,0],[-8.039,3.263],[-3.719,2.218],[-3.248,2.606],[-2.518,2.56],[-1.894,2.345],[-2.411,4.16],[-1.615,3.935],[-1.175,5.373],[0,6.983],[0,0],[0,0],[8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.38,-3.446],[-0.592,-2.867],[-0.862,-2.806],[-2.277,-4.562],[-1.79,-2.793],[-2.774,-3.239],[-4.308,-3.494],[-8.453,-3.357]],"o":[[13.667,0],[4.039,-1.639],[3.581,-2.136],[2.795,-2.243],[2.107,-2.142],[2.995,-3.707],[2.108,-3.637],[2.043,-4.977],[1.432,-6.545],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.549],[0.326,2.957],[0.601,2.914],[1.523,4.96],[1.493,2.992],[2.318,3.616],[3.623,4.231],[7.004,5.679],[10.038,3.987]],"v":[[0,90],[33.372,83.404],[45.008,77.573],[55.262,70.45],[63.238,63.239],[69.244,56.505],[77.369,44.687],[82.963,33.318],[87.812,17.771],[90,-2.562],[90,-30.667],[90,-75],[75,-90],[43,-90],[22.5,-90],[0.667,-90],[-28,-90],[-75,-90],[-90,-75],[-90,-47.333],[-90,-38.667],[-90,-25],[-90,-13.5],[-90,-2.562],[-89.425,7.937],[-88.045,16.676],[-85.847,25.26],[-80.128,39.564],[-75.198,48.247],[-67.549,58.542],[-55.626,70.156],[-32.328,83.826]]}],"i":{"x":0.833,"y":1},"n":"0p833_1_0p167_0","o":{"x":0.167,"y":0},"s":[{"c":true,"i":[[-11.389,0],[-8.039,3.263],[-3.719,2.218],[-3.248,2.606],[-2.518,2.56],[-1.894,2.345],[-2.411,4.16],[-1.615,3.935],[-1.175,5.373],[0,6.983],[0,0],[0,0],[8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.38,-3.446],[-0.592,-2.867],[-0.862,-2.806],[-2.277,-4.562],[-1.79,-2.793],[-2.774,-3.239],[-4.308,-3.494],[-8.453,-3.357]],"o":[[13.667,0],[4.039,-1.639],[3.581,-2.136],[2.795,-2.243],[2.107,-2.142],[2.995,-3.707],[2.108,-3.637],[2.043,-4.977],[1.432,-6.545],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.549],[0.326,2.957],[0.601,2.914],[1.523,4.96],[1.493,2.992],[2.318,3.616],[3.623,4.231],[7.004,5.679],[10.038,3.987]],"v":[[0,90],[33.372,83.404],[45.008,77.573],[55.262,70.45],[63.238,63.239],[69.244,56.505],[77.369,44.687],[82.963,33.318],[87.812,17.771],[90,-2.562],[90,-30.667],[90,-75],[75,-90],[43,-90],[22.5,-90],[0.667,-90],[-28,-90],[-75,-90],[-90,-75],[-90,-47.333],[-90,-38.667],[-90,-25],[-90,-13.5],[-90,-2.562],[-89.425,7.937],[-88.045,16.676],[-85.847,25.26],[-80.128,39.564],[-75.198,48.247],[-67.549,58.542],[-55.626,70.156],[-32.328,83.826]]}],"t":55},{"e":[{"c":true,"i":[[-11.916,0.004],[-6.282,0.003],[-5.846,0.003],[-5.461,0.003],[0,0],[4.755,7.529],[5.42,5.779],[-11.092,1.957],[-0.822,15.105],[0,0],[0,0],[9.823,16.074],[5.083,4.934],[11.523,0.734],[8.918,-0.849],[8.66,-3.67],[1.462,-2.498],[1.635,-1.988],[2.375,-2.381],[1.892,-8.314],[4.477,-9.017],[1.595,-5.039],[-1.973,-0.33],[0,0],[0,0],[0.389,-6.824],[-0.384,-3.803],[0,0],[-1.331,-12.597],[6.023,-5.744],[0.231,-5.804],[-20.837,-0.001]],"o":[[6.357,-0.002],[6.282,-0.003],[6.458,-0.003],[15.454,-0.009],[0,-8.895],[-4.339,-6.871],[-6.168,-6.576],[7.959,-1.402],[0,0],[0,0],[-23.315,-11.404],[-5.239,-8.572],[-8.258,-8.017],[-7.331,-0.467],[-11.35,1.081],[-2.54,1.077],[-1.197,2.044],[-2.171,2.641],[-6.857,6.876],[-2.111,9.276],[-1.655,3.333],[-0.436,2.296],[1.871,0.313],[1.919,0],[-1.79,6.199],[-0.111,1.957],[0.164,2.909],[9.053,0.668],[0.952,9.016],[-3.702,3.531],[0,0.036],[10.355,0.001]],"v":[[-2,90.821],[17.05,90.814],[35.333,90.805],[53.333,90.794],[79.274,90.777],[73.225,64.476],[55.691,55.127],[55.469,31.429],[80.508,-2.536],[78.04,-4.775],[78.315,-8.971],[58.125,-58.5],[42.908,-78.592],[14.375,-91],[-10.713,-90.489],[-42.201,-83.491],[-48.649,-78.952],[-50.995,-72.441],[-59.159,-66.652],[-70.659,-43.479],[-78.286,-15.5],[-84.444,-2.66],[-81.435,0.863],[-75.733,1.01],[-73.474,4.614],[-74.296,23.92],[-75.668,32.03],[-70.732,35.666],[-46.519,53.057],[-58.148,74.583],[-72.103,90.776],[-36,90.826]]}],"i":{"x":0.2,"y":1},"n":"0p2_1_0p4_0","o":{"x":0.4,"y":0},"s":[{"c":true,"i":[[-11.389,0],[-8.039,3.263],[-3.719,2.218],[-3.248,2.606],[-2.518,2.56],[-1.894,2.345],[-2.411,4.16],[-1.615,3.935],[-1.175,5.373],[0,6.983],[0,0],[0,0],[8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.38,-3.446],[-0.592,-2.867],[-0.862,-2.806],[-2.277,-4.562],[-1.79,-2.793],[-2.774,-3.239],[-4.308,-3.494],[-8.453,-3.357]],"o":[[13.667,0],[4.039,-1.639],[3.581,-2.136],[2.795,-2.243],[2.107,-2.142],[2.995,-3.707],[2.108,-3.637],[2.043,-4.977],[1.432,-6.545],[0,0],[0,0],[0,-8.284],[0,0],[0,0],[0,0],[0,0],[0,0],[-8.284,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3.549],[0.326,2.957],[0.601,2.914],[1.523,4.96],[1.493,2.992],[2.318,3.616],[3.623,4.231],[7.004,5.679],[10.038,3.987]],"v":[[0,90],[33.372,83.404],[45.008,77.573],[55.262,70.45],[63.238,63.239],[69.244,56.505],[77.369,44.687],[82.963,33.318],[87.812,17.771],[90,-2.562],[90,-30.667],[90,-75],[75,-90],[43,-90],[22.5,-90],[0.667,-90],[-28,-90],[-75,-90],[-90,-75],[-90,-47.333],[-90,-38.667],[-90,-25],[-90,-13.5],[-90,-2.562],[-89.425,7.937],[-88.045,16.676],[-85.847,25.26],[-80.128,39.564],[-75.198,48.247],[-67.549,58.542],[-55.626,70.156],[-32.328,83.826]]}],"t":120},{"t":145}]},"mn":"ADBE Vector Shape - Group","nm":"Path 1","ty":"sh"},{"c":{"a":0,"ix":4,"k":[1,1,1,1]},"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"$Icon Fill","o":{"a":0,"ix":5,"k":100},"r":1,"ty":"fl"}],"sr":1,"st":-2,"ty":4},{"ao":0,"bm":0,"ddd":0,"ind":4,"ip":0,"ks":{"a":{"a":0,"ix":1,"k":[0,0,0]},"o":{"a":0,"ix":11,"k":100},"p":{"a":0,"ix":2,"k":[155,155,0]},"r":{"a":0,"ix":10,"k":0},"s":{"a":0,"ix":6,"k":[100,100,100]}},"nm":"$Background","op":176,"shapes":[{"hd":false,"ind":0,"ix":1,"ks":{"a":1,"ix":2,"k":[{"e":[{"c":true,"i":[[-27.049,0],[-18.929,18.947],[0,30.153],[0,0],[16.569,0],[0,0],[0,-16.569],[0,0],[-21.292,-19.685]],"o":[[28.555,0],[19.512,-19.53],[0,0],[0,-16.569],[0,0],[-16.569,0],[0,0],[0,31.695],[18.615,17.21]],"v":[[0,105],[73.376,74.377],[105,-2.562],[105,-75],[75,-105],[-75,-105],[-105,-75],[-105,-2.562],[-70.326,77.311]]}],"i":{"x":0.2,"y":1},"n":"0p2_1_0p4_0","o":{"x":0.4,"y":0},"s":[{"c":true,"i":[[0,0],[0,0],[0,16.542],[0,0],[16.542,0],[0,0],[0,-16.542],[0,0],[-16.542,0]],"o":[[0,0],[16.542,0],[0,0],[0,-16.542],[0,0],[-16.542,0],[0,0],[0,16.542],[0,0]],"v":[[0,105],[75,105],[105,75],[105,-75],[75.375,-105],[-75,-105],[-105,-75],[-105,75],[-75,105]]}],"t":30},{"e":[{"c":true,"i":[[-27.049,0],[-18.929,18.947],[0,30.153],[0,0],[16.569,0],[0,0],[0,-16.569],[0,0],[-21.292,-19.685]],"o":[[28.555,0],[19.512,-19.53],[0,0],[0,-16.569],[0,0],[-16.569,0],[0,0],[0,31.695],[18.615,17.21]],"v":[[0,105],[73.376,74.377],[105,-2.562],[105,-75],[75,-105],[-75,-105],[-105,-75],[-105,-2.562],[-70.326,77.311]]}],"i":{"x":0.833,"y":1},"n":"0p833_1_0p167_0","o":{"x":0.167,"y":0},"s":[{"c":true,"i":[[-27.049,0],[-18.929,18.947],[0,30.153],[0,0],[16.569,0],[0,0],[0,-16.569],[0,0],[-21.292,-19.685]],"o":[[28.555,0],[19.512,-19.53],[0,0],[0,-16.569],[0,0],[-16.569,0],[0,0],[0,31.695],[18.615,17.21]],"v":[[0,105],[73.376,74.377],[105,-2.562],[105,-75],[75,-105],[-75,-105],[-105,-75],[-105,-2.562],[-70.326,77.311]]}],"t":55},{"e":[{"c":true,"i":[[0,0],[0,0],[0,16.542],[0,0],[16.542,0],[0,0],[0,-16.542],[0,0],[-16.542,0]],"o":[[0,0],[16.542,0],[0,0],[0,-16.542],[0,0],[-16.542,0],[0,0],[0,16.542],[0,0]],"v":[[0,105],[75,105],[105,75],[105,-75],[75.375,-105],[-75,-105],[-105,-75],[-105,75],[-75,105]]}],"i":{"x":0.2,"y":1},"n":"0p2_1_0p4_0","o":{"x":0.4,"y":0},"s":[{"c":true,"i":[[-27.049,0],[-18.929,18.947],[0,30.153],[0,0],[16.569,0],[0,0],[0,-16.569],[0,0],[-21.292,-19.685]],"o":[[28.555,0],[19.512,-19.53],[0,0],[0,-16.569],[0,0],[-16.569,0],[0,0],[0,31.695],[18.615,17.21]],"v":[[0,105],[73.376,74.377],[105,-2.562],[105,-75],[75,-105],[-75,-105],[-105,-75],[-105,-2.562],[-70.326,77.311]]}],"t":120},{"t":145}]},"mn":"ADBE Vector Shape - Group","nm":"Path 1","ty":"sh"},{"c":{"a":0,"ix":4,"k":[0.20000000298,0.20000000298,0.20000000298,1]},"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"$Background Fill","o":{"a":0,"ix":5,"k":100},"r":1,"ty":"fl"}],"sr":1,"st":0,"ty":4}],"markers":[{"cm":"$In","dr":25,"tm":30},{"cm":"$Out","dr":25,"tm":120}],"nm":"IconTransition_01","op":176,"v":"5.3.4","w":310} \ No newline at end of file diff --git a/modules/canvaskit/tests/canvas.spec.js b/modules/canvaskit/tests/canvas.spec.js index a5851e41ef618..bb283ed8ca974 100644 --- a/modules/canvaskit/tests/canvas.spec.js +++ b/modules/canvaskit/tests/canvas.spec.js @@ -583,8 +583,31 @@ describe('Canvas Behavior', () => { paint.setAntiAlias(true); const points = [[ 0, 0 ], [ 250, 0 ], [ 100, 100 ], [ 0, 250 ]]; + // 2d float color array const colors = [CanvasKit.RED, CanvasKit.BLUE, - CanvasKit.YELLOW, CanvasKit.CYAN]; + CanvasKit.YELLOW, CanvasKit.CYAN]; + const vertices = CanvasKit.MakeSkVertices(CanvasKit.VertexMode.TriangleFan, + points, null /*textureCoordinates*/, colors, false /*isVolatile*/); + + const bounds = vertices.bounds(); + expect(bounds.fLeft).toEqual(0); + expect(bounds.fTop).toEqual(0); + expect(bounds.fRight).toEqual(250); + expect(bounds.fBottom).toEqual(250); + + canvas.drawVertices(vertices, CanvasKit.BlendMode.Src, paint); + vertices.delete(); + paint.delete(); + }); + + gm('drawvertices_canvas_flat_floats', (canvas) => { + const paint = new CanvasKit.SkPaint(); + paint.setAntiAlias(true); + + const points = [[ 0, 0 ], [ 250, 0 ], [ 100, 100 ], [ 0, 250 ]]; + // 1d float color array + const colors = Float32Array.of(...CanvasKit.RED, ...CanvasKit.BLUE, + ...CanvasKit.YELLOW, ...CanvasKit.CYAN); const vertices = CanvasKit.MakeSkVertices(CanvasKit.VertexMode.TriangleFan, points, null /*textureCoordinates*/, colors, false /*isVolatile*/); diff --git a/modules/canvaskit/tests/canvaskitinit.js b/modules/canvaskit/tests/canvaskitinit.js index fa73e10d958be..04839e008f923 100644 --- a/modules/canvaskit/tests/canvaskitinit.js +++ b/modules/canvaskit/tests/canvaskitinit.js @@ -1,6 +1,6 @@ // The increased timeout is especially needed with larger binaries // like in the debug/gpu build -jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000; +jasmine.DEFAULT_TIMEOUT_INTERVAL = 60000; let CanvasKit = null; const LoadCanvasKit = new Promise((resolve, reject) => { diff --git a/modules/canvaskit/tests/core.spec.js b/modules/canvaskit/tests/core.spec.js index f12998efc56bd..2d776d78ba8e3 100644 --- a/modules/canvaskit/tests/core.spec.js +++ b/modules/canvaskit/tests/core.spec.js @@ -66,6 +66,25 @@ describe('Core canvas behavior', () => { expect(out.spot[3]).toBeCloseTo(expectedSpot[3], 3); }); + it('can compute tonal colors with malloced values', () => { + const ambientColor = CanvasKit.Malloc(Float32Array, 4); + ambientColor.toTypedArray().set(CanvasKit.BLUE); + const spotColor = CanvasKit.Malloc(Float32Array, 4); + spotColor.toTypedArray().set(CanvasKit.RED); + const input = { + ambient: ambientColor, + spot: spotColor, + }; + const out = CanvasKit.computeTonalColors(input); + expect(new Float32Array(out.ambient)).toEqual(CanvasKit.BLACK); + const expectedSpot = [0.173, 0, 0, 0.969]; + expect(out.spot.length).toEqual(4); + expect(out.spot[0]).toBeCloseTo(expectedSpot[0], 3); + expect(out.spot[1]).toBeCloseTo(expectedSpot[1], 3); + expect(out.spot[2]).toBeCloseTo(expectedSpot[2], 3); + expect(out.spot[3]).toBeCloseTo(expectedSpot[3], 3); + }); + // This helper is used for all the MakeImageFromEncoded tests. // TODO(kjlubick): rewrite this and callers to use gm function decodeAndDrawSingleFrameImage(imgName, goldName, done) { @@ -184,6 +203,150 @@ describe('Core canvas behavior', () => { CanvasKit.SkColorSpace.SRGB); canvas.drawImage(img, 1, 1, paint); img.delete(); + paint.delete(); + }); + + gm('draw_atlas_with_builders', (canvas, fetchedByteBuffers) => { + const atlas = CanvasKit.MakeImageFromEncoded(fetchedByteBuffers[0]); + expect(atlas).toBeTruthy(); + canvas.clear(CanvasKit.WHITE); + + const paint = new CanvasKit.SkPaint(); + paint.setColor(CanvasKit.Color(0, 0, 0, 0.8)); + + const srcs = new CanvasKit.SkRectBuilder(); + // left top right bottom + srcs.push( 0, 0, 256, 256); + srcs.push(256, 0, 512, 256); + srcs.push( 0, 256, 256, 512); + srcs.push(256, 256, 512, 512); + + const dsts = new CanvasKit.RSXFormBuilder(); + // scos, ssin, tx, ty + dsts.push(0.5, 0, 20, 20); + dsts.push(0.5, 0, 300, 20); + dsts.push(0.5, 0, 20, 300); + dsts.push(0.5, 0, 300, 300); + + const colors = new CanvasKit.SkColorBuilder(); + // note that the SkColorBuilder expects int colors to be pushed. + // pushing float colors to it only causes weird problems way downstream. + // It does no type checking. + colors.push(CanvasKit.ColorAsInt( 85, 170, 10, 128)); // light green + colors.push(CanvasKit.ColorAsInt( 51, 51, 191, 128)); // light blue + colors.push(CanvasKit.ColorAsInt( 0, 0, 0, 128)); + colors.push(CanvasKit.ColorAsInt(256, 256, 256, 128)); + + canvas.drawAtlas(atlas, srcs, dsts, paint, CanvasKit.BlendMode.Modulate, colors); + + atlas.delete(); + paint.delete(); + }, '/assets/mandrill_512.png') + + gm('draw_atlas_with_arrays', (canvas, fetchedByteBuffers) => { + const atlas = CanvasKit.MakeImageFromEncoded(fetchedByteBuffers[0]); + expect(atlas).toBeTruthy(); + canvas.clear(CanvasKit.WHITE); + + const paint = new CanvasKit.SkPaint(); + paint.setColor(CanvasKit.Color(0, 0, 0, 0.8)); + + const srcs = [ + 0, 0, 256, 256, + 256, 0, 512, 256, + 0, 256, 256, 512, + 256, 256, 512, 512, + ]; + + const dsts = [ + 0.5, 0, 20, 20, + 0.5, 0, 300, 20, + 0.5, 0, 20, 300, + 0.5, 0, 300, 300, + ]; + + const colors = Uint32Array.of( + CanvasKit.ColorAsInt( 85, 170, 10, 128), // light green + CanvasKit.ColorAsInt( 51, 51, 191, 128), // light blue + CanvasKit.ColorAsInt( 0, 0, 0, 128), + CanvasKit.ColorAsInt(256, 256, 256, 128), + ); + + canvas.drawAtlas(atlas, srcs, dsts, paint, CanvasKit.BlendMode.Modulate, colors); + + atlas.delete(); + paint.delete(); + }, '/assets/mandrill_512.png'); + + gm('image_decoding_methods', async (canvas) => { + canvas.clear(CanvasKit.WHITE); + + const IMAGE_FILE_PATHS = [ + '/assets/brickwork-texture.jpg', + '/assets/mandrill_512.png', + '/assets/color_wheel.gif' + ]; + + let row = 1; + // Test 4 different methods of decoding an image for each of the three images in + // IMAGE_FILE_PATHS. + // Resulting SkImages are drawn to visually show that all methods decode correctly. + for (const imageFilePath of IMAGE_FILE_PATHS) { + const response = await fetch(imageFilePath); + const arrayBuffer = await response.arrayBuffer(); + // response.blob() is preferable when you don't need both a Blob *and* an ArrayBuffer. + const blob = new Blob([ arrayBuffer ]); + + // Method 1 - decode TypedArray using wasm codecs: + const skImage1 = CanvasKit.MakeImageFromEncoded(arrayBuffer); + + // Method 2 (slower and does not work in Safari) decode using ImageBitmap: + const imageBitmap = await createImageBitmap(blob); + // Testing showed that transferring an ImageBitmap to a canvas using the 'bitmaprenderer' + // context and passing that canvas to CanvasKit.MakeImageFromCanvasImageSource() is + // marginally faster than passing ImageBitmap to + // CanvasKit.MakeImageFromCanvasImageSource() directly. + const canvasBitmapElement = document.createElement('canvas'); + canvasBitmapElement.width = imageBitmap.width; + canvasBitmapElement.height = imageBitmap.height; + const ctxBitmap = canvasBitmapElement.getContext('bitmaprenderer'); + ctxBitmap.transferFromImageBitmap(imageBitmap); + const skImage2 = CanvasKit.MakeImageFromCanvasImageSource(canvasBitmapElement); + + // Method 3 (slowest) decode using HTMLImageElement directly: + const image = new Image(); + // Testing showed that waiting for a load event is faster than waiting on image.decode() + // HTMLImageElement.decode() reference: https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/decode + const promise1 = new Promise((resolve) => image.addEventListener('load', resolve)); + image.src = imageFilePath; + await promise1; + const skImage3 = CanvasKit.MakeImageFromCanvasImageSource(image); + + // Method 4 (roundabout, but works if all you have is a Blob) decode from Blob using + // HTMLImageElement: + const imageObjectUrl = URL.createObjectURL( blob ); + const image2 = new Image(); + const promise2 = new Promise((resolve) => image2.addEventListener('load', resolve)); + image2.src = imageObjectUrl; + await promise2; + const skImage4 = CanvasKit.MakeImageFromCanvasImageSource(image2); + + // Draw decoded images + const sourceRect = CanvasKit.XYWHRect(0,0, 150, 150); + canvas.drawImageRect(skImage1, sourceRect, CanvasKit.XYWHRect(0,row * 100, 90, 90), null, false); + canvas.drawImageRect(skImage2, sourceRect, CanvasKit.XYWHRect(100,row * 100, 90, 90), null, false); + canvas.drawImageRect(skImage3, sourceRect, CanvasKit.XYWHRect(200,row * 100, 90, 90), null, false); + canvas.drawImageRect(skImage4, sourceRect, CanvasKit.XYWHRect(300,row * 100, 90, 90), null, false); + + row++; + } + //Label images with the method used to decode them + const paint = new CanvasKit.SkPaint(); + const textFont = new CanvasKit.SkFont(null, 7); + canvas.drawText('WASM Decoding', 0, 90, paint, textFont); + canvas.drawText('ImageBitmap Decoding', 100, 90, paint, textFont); + canvas.drawText('HTMLImageEl Decoding', 200, 90, paint, textFont); + canvas.drawText('Blob Decoding', 300, 90, paint, textFont); }); gm('sweep_gradient', (canvas) => { @@ -230,7 +393,10 @@ describe('Core canvas behavior', () => { const lgsPremul = CanvasKit.SkShader.MakeLinearGradient( [100, 0], [150, 100], // start and stop points - [transparentGreen, CanvasKit.BLUE, CanvasKit.RED], + Uint32Array.of( + CanvasKit.ColorAsInt(0, 255, 255, 0), + CanvasKit.ColorAsInt(0, 0, 255, 255), + CanvasKit.ColorAsInt(255, 0, 0, 255)), [0, 0.65, 1.0], CanvasKit.TileMode.Mirror, null, // no local matrix @@ -243,7 +409,7 @@ describe('Core canvas behavior', () => { const lgs45 = CanvasKit.SkShader.MakeLinearGradient( [0, 100], [50, 200], // start and stop points - [transparentGreen, CanvasKit.BLUE, CanvasKit.RED], + Float32Array.of(...transparentGreen, ...CanvasKit.BLUE, ...CanvasKit.RED), [0, 0.65, 1.0], CanvasKit.TileMode.Mirror, CanvasKit.SkMatrix.rotated(Math.PI/4, 0, 100), @@ -253,14 +419,21 @@ describe('Core canvas behavior', () => { canvas.drawRect(r, paint); canvas.drawRect(r, strokePaint); + // malloc'd color array + const colors = CanvasKit.Malloc(Float32Array, 12); + const typedColorsArray = colors.toTypedArray(); + typedColorsArray.set(transparentGreen, 0); + typedColorsArray.set(CanvasKit.BLUE, 4); + typedColorsArray.set(CanvasKit.RED, 8); const lgs45Premul = CanvasKit.SkShader.MakeLinearGradient( [100, 100], [150, 200], // start and stop points - [transparentGreen, CanvasKit.BLUE, CanvasKit.RED], + typedColorsArray, [0, 0.65, 1.0], CanvasKit.TileMode.Mirror, CanvasKit.SkMatrix.rotated(Math.PI/4, 100, 100), 1 // interpolate colors in premul ); + CanvasKit.Free(colors); paint.setShader(lgs45Premul); r = CanvasKit.LTRBRect(100, 100, 200, 200); canvas.drawRect(r, paint); @@ -632,23 +805,26 @@ describe('Core canvas behavior', () => { expect(paint.getColor()).toEqual(Float32Array.of(0.5, 0.6, 0.7, 0.8)); paint.setColorInt(CanvasKit.ColorAsInt(50, 100, 150, 200)); - const color = paint.getColor(); + let color = paint.getColor(); expect(color.length).toEqual(4); - expect(color[0]).toBeCloseTo(50/255, 5); - expect(color[1]).toBeCloseTo(100/255, 5); - expect(color[2]).toBeCloseTo(150/255, 5); - expect(color[3]).toBeCloseTo(200/255, 5); + expect(color[0]).toBeCloseTo(50/255, 5); // Red + expect(color[1]).toBeCloseTo(100/255, 5); // Green + expect(color[2]).toBeCloseTo(150/255, 5); // Blue + expect(color[3]).toBeCloseTo(200/255, 5); // Alpha + + paint.setColorInt(0xFF000000); + expect(paint.getColor()).toEqual(Float32Array.of(0, 0, 0, 1.0)); }); gm('draw shadow', (canvas) => { - const lightRadius = 30; + const lightRadius = 20; const flags = 0; - const lightPos = [250,150,300]; + const lightPos = [500,500,20]; const zPlaneParams = [0,0,1]; const path = starPath(CanvasKit); canvas.drawShadow(path, zPlaneParams, lightPos, lightRadius, - CanvasKit.RED, CanvasKit.MAGENTA, flags); + CanvasKit.BLACK, CanvasKit.MAGENTA, flags); }) describe('ColorSpace Support', () => { @@ -787,4 +963,27 @@ describe('Core canvas behavior', () => { }); }); // end describe('DOMMatrix support') + it('can call subarray on a Malloced object', () => { + const mThings = CanvasKit.Malloc(Float32Array, 6); + mThings.toTypedArray().set([4, 5, 6, 7, 8, 9]); + expectTypedArraysToEqual(Float32Array.of(4, 5, 6, 7, 8, 9), mThings.toTypedArray()); + expectTypedArraysToEqual(Float32Array.of(4, 5, 6, 7, 8, 9), mThings.subarray(0)); + expectTypedArraysToEqual(Float32Array.of(7, 8, 9), mThings.subarray(3)); + expectTypedArraysToEqual(Float32Array.of(7), mThings.subarray(3, 4)); + expectTypedArraysToEqual(Float32Array.of(7, 8), mThings.subarray(3, 5)); + + // mutations on the subarray affect the entire array (because they are backed by the + // same memory) + mThings.subarray(3)[0] = 100.5; + expectTypedArraysToEqual(Float32Array.of(4, 5, 6, 100.5, 8, 9), mThings.toTypedArray()); + CanvasKit.Free(mThings); + }); + + function expectTypedArraysToEqual(expected, actual) { + expect(expected.constructor.name).toEqual(actual.constructor.name); + expect(expected.length).toEqual(actual.length); + for (let i = 0; i < expected.length; i++) { + expect(expected[i]).toBeCloseTo(actual[i], 5, `element ${i}`); + } + } }); diff --git a/modules/canvaskit/tests/matrix.spec.js b/modules/canvaskit/tests/matrix.spec.js index 12a32ba620e8b..a47c42d2e9be1 100644 --- a/modules/canvaskit/tests/matrix.spec.js +++ b/modules/canvaskit/tests/matrix.spec.js @@ -4,10 +4,11 @@ describe('CanvasKit\'s Matrix Helpers', () => { await LoadCanvasKit; }); - const expectArrayCloseTo = (a, b) => { + const expectArrayCloseTo = (a, b, precision) => { + precision = precision || 14 // digits of precision in base 10 expect(a.length).toEqual(b.length); for (let i=0; i { CanvasKit.SkM44.multiply(a, b), CanvasKit.SkM44.identity()); }); + + it('can create a camera setup matrix', () => { + const camAngle = Math.PI / 12; + const cam = { + 'eye' : [0, 0, 1 / Math.tan(camAngle/2) - 1], + 'coa' : [0, 0, 0], + 'up' : [0, 1, 0], + 'near' : 0.02, + 'far' : 4, + 'angle': camAngle, + }; + const mat = CanvasKit.SkM44.setupCamera(CanvasKit.LTRBRect(0, 0, 200, 200), 200, cam); + // these values came from an invocation of setupCamera visually inspected. + const expected = [ + 7.595754, 0, -0.5, 0, + 0, 7.595754, -0.5, 0, + 0, 0, 1.010050, -1324.368418, + 0, 0, -0.005, 7.595754]; + expectArrayCloseTo(mat, expected, 5); + }); }); // describe 4x4 }); \ No newline at end of file diff --git a/modules/canvaskit/tests/paragraph.spec.js b/modules/canvaskit/tests/paragraph.spec.js index be3878e8077a6..8fa3e2accafbe 100644 --- a/modules/canvaskit/tests/paragraph.spec.js +++ b/modules/canvaskit/tests/paragraph.spec.js @@ -73,7 +73,7 @@ describe('Paragraph Behavior', function() { decorationThickness: 1.5, // multiplier based on font size fontSize: 24, }); - builder.pushStyle(blueText) + builder.pushStyle(blueText); builder.addText(`Gosh I hope this wraps at some point, it is such a long line.`) builder.pop(); builder.addText(` I'm done with the blue now. `) @@ -108,7 +108,44 @@ describe('Paragraph Behavior', function() { builder.delete(); }); - // loosely based on SkParagraph_GetRectsForRangeParagraph test in c++ code. + gm('paragraph_foreground_and_background_color', (canvas) => { + const paint = new CanvasKit.SkPaint(); + + paint.setColor(CanvasKit.RED); + paint.setStyle(CanvasKit.PaintStyle.Stroke); + + const fontMgr = CanvasKit.SkFontMgr.FromData(notoSerifFontBuffer); + expect(fontMgr.countFamilies()).toEqual(1); + expect(fontMgr.getFamilyName(0)).toEqual('Noto Serif'); + + const wrapTo = 200; + + const paraStyle = new CanvasKit.ParagraphStyle({ + textStyle: { + foregroundColor: CanvasKit.Color4f(1.0, 0, 0, 0.8), + backgroundColor: CanvasKit.Color4f(0, 0, 1.0, 0.8), + // color should default to black + fontFamilies: ['Noto Serif'], + fontSize: 20, + }, + + textAlign: CanvasKit.TextAlign.Center, + }); + const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr); + builder.addText( + 'This text has a red foregroundColor and a blue backgroundColor.'); + const paragraph = builder.build(); + paragraph.layout(300); + + canvas.drawParagraph(paragraph, 10, 10); + + paint.delete(); + fontMgr.delete(); + paragraph.delete(); + builder.delete(); + }); + + // loosely based on SkParagraph_GetRectsForRangeParagraph test in c++ code. gm('paragraph_rects', (canvas) => { const fontMgr = CanvasKit.SkFontMgr.FromData(notoSerifFontBuffer); @@ -116,9 +153,12 @@ describe('Paragraph Behavior', function() { const hStyle = CanvasKit.RectHeightStyle.Max; const wStyle = CanvasKit.RectWidthStyle.Tight; + const mallocedColor = CanvasKit.Malloc(Float32Array, 4); + mallocedColor.toTypedArray().set([0.9, 0.1, 0.1, 1.0]); + const paraStyle = new CanvasKit.ParagraphStyle({ textStyle: { - color: CanvasKit.BLACK, + color: mallocedColor, fontFamilies: ['Noto Serif'], fontSize: 50, }, @@ -128,6 +168,7 @@ describe('Paragraph Behavior', function() { const builder = CanvasKit.ParagraphBuilder.Make(paraStyle, fontMgr); builder.addText('12345, \"67890\" 12345 67890 12345 67890 12345 67890 12345 67890 12345 67890 12345'); const paragraph = builder.build(); + CanvasKit.Free(mallocedColor); paragraph.layout(wrapTo); @@ -385,7 +426,7 @@ describe('Paragraph Behavior', function() { slant: CanvasKit.FontSlant.Italic, } }); - builder.pushStyle(boldItalic) + builder.pushStyle(boldItalic); builder.addText(`Bold, Italic\n`); // doesn't show up, but we don't crash builder.pop(); builder.addText(`back to normal`); @@ -407,7 +448,7 @@ describe('Paragraph Behavior', function() { it('should not crash if we omit font family on paragraph style', () => { const surface = CanvasKit.MakeCanvasSurface('test'); - expect(surface).toBeTruthy('Could not make surface') + expect(surface).toBeTruthy('Could not make surface'); const canvas = surface.getCanvas(); const paint = new CanvasKit.SkPaint(); @@ -436,7 +477,7 @@ describe('Paragraph Behavior', function() { slant: CanvasKit.FontSlant.Italic, } }); - builder.pushStyle(boldItalic) + builder.pushStyle(boldItalic); builder.addText(`Bold, Italic\n`); builder.pop(); builder.addText(`back to normal`); diff --git a/modules/canvaskit/tests/path.spec.js b/modules/canvaskit/tests/path.spec.js index 08897896a1065..4fb95d1102182 100644 --- a/modules/canvaskit/tests/path.spec.js +++ b/modules/canvaskit/tests/path.spec.js @@ -87,7 +87,7 @@ describe('Path Behavior', () => { [CanvasKit.LINE_VERB, 5, 295], [CanvasKit.LINE_VERB, 205, 5], [CanvasKit.CLOSE_VERB]]; - const path = CanvasKit.MakePathFromCmds(cmds); + const path = CanvasKit.SkPath.MakeFromCmds(cmds); const svgStr = path.toSVGString(); // We output it in terse form, which is different than Wikipedia's version @@ -95,6 +95,122 @@ describe('Path Behavior', () => { path.delete(); }); + it('can create a path with malloced verbs, points, weights', () => { + const mVerbs = CanvasKit.Malloc(Uint8Array, 6); + const mPoints = CanvasKit.Malloc(Float32Array, 18); + const mWeights = CanvasKit.Malloc(Float32Array, 1); + mVerbs.toTypedArray().set([CanvasKit.MOVE_VERB, CanvasKit.LINE_VERB, + CanvasKit.QUAD_VERB, CanvasKit.CONIC_VERB, CanvasKit.CUBIC_VERB, CanvasKit.CLOSE_VERB + ]); + + mPoints.toTypedArray().set([ + 1,2, // moveTo + 3,4, // lineTo + 5,6,7,8, // quadTo + 9,10,11,12, // conicTo + 13,14,15,16,17,18, // cubicTo + ]); + + mWeights.toTypedArray().set([117]); + + let path = CanvasKit.SkPath.MakeFromVerbsPointsWeights(mVerbs, mPoints, mWeights); + + let cmds = path.toCmds(); + expect(cmds).toEqual([ + [CanvasKit.MOVE_VERB, 1, 2], + [CanvasKit.LINE_VERB, 3, 4], + [CanvasKit.QUAD_VERB, 5, 6, 7, 8], + [CanvasKit.CONIC_VERB, 9, 10, 11, 12, 117], + [CanvasKit.CUBIC_VERB, 13, 14, 15, 16, 17, 18], + [CanvasKit.CLOSE_VERB], + ]); + path.delete(); + + // If given insufficient points, it stops early (but doesn't read out of bounds). + path = CanvasKit.SkPath.MakeFromVerbsPointsWeights(mVerbs, mPoints.subarray(0, 10), mWeights); + + cmds = path.toCmds(); + expect(cmds).toEqual([ + [CanvasKit.MOVE_VERB, 1, 2], + [CanvasKit.LINE_VERB, 3, 4], + [CanvasKit.QUAD_VERB, 5, 6, 7, 8], + ]); + path.delete(); + CanvasKit.Free(mVerbs); + CanvasKit.Free(mPoints); + CanvasKit.Free(mWeights); + }); + + it('can create and update a path with verbs and points (no weights)', () => { + const path = CanvasKit.SkPath.MakeFromVerbsPointsWeights( + [CanvasKit.MOVE_VERB, CanvasKit.LINE_VERB], + [1,2, 3,4]); + let cmds = path.toCmds(); + expect(cmds).toEqual([ + [CanvasKit.MOVE_VERB, 1, 2], + [CanvasKit.LINE_VERB, 3, 4] + ]); + + path.addVerbsPointsWeights( + [CanvasKit.QUAD_VERB, CanvasKit.CLOSE_VERB], + [5,6,7,8], + ); + + cmds = path.toCmds(); + expect(cmds).toEqual([ + [CanvasKit.MOVE_VERB, 1, 2], + [CanvasKit.LINE_VERB, 3, 4], + [CanvasKit.QUAD_VERB, 5, 6, 7, 8], + [CanvasKit.CLOSE_VERB] + ]); + path.delete(); + }); + + + it('can add points to a path in bulk', () => { + const mVerbs = CanvasKit.Malloc(Uint8Array, 6); + const mPoints = CanvasKit.Malloc(Float32Array, 18); + const mWeights = CanvasKit.Malloc(Float32Array, 1); + mVerbs.toTypedArray().set([CanvasKit.MOVE_VERB, CanvasKit.LINE_VERB, + CanvasKit.QUAD_VERB, CanvasKit.CONIC_VERB, CanvasKit.CUBIC_VERB, CanvasKit.CLOSE_VERB + ]); + + mPoints.toTypedArray().set([ + 1,2, // moveTo + 3,4, // lineTo + 5,6,7,8, // quadTo + 9,10,11,12, // conicTo + 13,14,15,16,17,18, // cubicTo + ]); + + mWeights.toTypedArray().set([117]); + + const path = new CanvasKit.SkPath(); + path.lineTo(77, 88); + path.addVerbsPointsWeights(mVerbs, mPoints, mWeights); + + let cmds = path.toCmds(); + expect(cmds).toEqual([ + [CanvasKit.MOVE_VERB, 0, 0], + [CanvasKit.LINE_VERB, 77, 88], + [CanvasKit.MOVE_VERB, 1, 2], + [CanvasKit.LINE_VERB, 3, 4], + [CanvasKit.QUAD_VERB, 5, 6, 7, 8], + [CanvasKit.CONIC_VERB, 9, 10, 11, 12, 117], + [CanvasKit.CUBIC_VERB, 13, 14, 15, 16, 17, 18], + [CanvasKit.CLOSE_VERB], + ]); + + path.rewind(); + cmds = path.toCmds(); + expect(cmds).toEqual([]); + + path.delete(); + CanvasKit.Free(mVerbs); + CanvasKit.Free(mPoints); + CanvasKit.Free(mWeights); + }); + gm('offset_path', (canvas) => { const path = starPath(CanvasKit); diff --git a/modules/canvaskit/tests/skottie.spec.js b/modules/canvaskit/tests/skottie.spec.js index b0fe1fcda6535..8c3ff34d127d5 100644 --- a/modules/canvaskit/tests/skottie.spec.js +++ b/modules/canvaskit/tests/skottie.spec.js @@ -18,6 +18,8 @@ describe('Skottie behavior', () => { .then((response) => response.arrayBuffer()); const jsonPromise = fetch('/assets/animated_gif.json') .then((response) => response.text()); + const washPromise = fetch('/assets/map-shield.json') + .then((response) => response.text()); gm('skottie_animgif', (canvas, promises) => { if (!CanvasKit.skottie || !CanvasKit.managed_skottie) { @@ -40,4 +42,20 @@ describe('Skottie behavior', () => { animation.render(canvas, bounds); animation.delete(); }, imgPromise, jsonPromise); + + gm('skottie_setcolor', (canvas, promises) => { + if (!CanvasKit.skottie || !CanvasKit.managed_skottie) { + console.warn('Skipping test because not compiled with skottie'); + return; + } + const bounds = {fLeft: 0, fTop: 0, fRight: 500, fBottom: 500}; + canvas.clear(CanvasKit.WHITE); + + const animation = CanvasKit.MakeManagedAnimation(promises[0]); + expect(animation).toBeTruthy(); + animation.setColor('$Icon.$Icon Fill.Color', CanvasKit.RED); + animation.seek(0.5); + animation.render(canvas, bounds); + animation.delete(); + }, washPromise); }); diff --git a/modules/canvaskit/tests/util.js b/modules/canvaskit/tests/util.js index 52e3700eb0bf3..0458a46f491b4 100644 --- a/modules/canvaskit/tests/util.js +++ b/modules/canvaskit/tests/util.js @@ -27,13 +27,16 @@ const _commonGM = (it, pause, name, callback, assetsToFetchOrPromisesToWaitOn) = // resolve right away and just call the callback. Promise.all(fetchPromises).then((values) => { try { - callback(surface.getCanvas(), values); + // If callback returns a promise, the chained .then + // will wait for it. + return callback(surface.getCanvas(), values); } catch (e) { console.log(`gm ${name} failed with error`, e); expect(e).toBeFalsy(); debugger; done(); } + }).then(() => { surface.flush(); if (pause) { reportSurface(surface, name, null); diff --git a/modules/canvaskit/viewer_bindings.cpp b/modules/canvaskit/viewer_bindings.cpp index cf394f5178ce7..c73408e47f5d8 100644 --- a/modules/canvaskit/viewer_bindings.cpp +++ b/modules/canvaskit/viewer_bindings.cpp @@ -44,75 +44,10 @@ static sk_sp MakeSvgSlide(std::string name, std::string svgText) { return sk_make_sp(SkString(name.c_str()), std::move(stream)); } -static void delete_wrapped_framebuffer(SkSurface::ReleaseContext context) { - GLuint framebuffer = (GLuint)context; - glDeleteFramebuffers(1, &framebuffer); -} - -static sk_sp MakeOffscreenFramebuffer(sk_sp grContext, int width, int height, - int sampleCnt) { - GLuint colorBuffer; - glGenRenderbuffers(1, &colorBuffer); - glBindRenderbuffer(GL_RENDERBUFFER, colorBuffer); - glRenderbufferStorageMultisample(GL_RENDERBUFFER, sampleCnt, GL_RGBA8, width, height); - - GLuint stencilBuffer; - glGenRenderbuffers(1, &stencilBuffer); - glBindRenderbuffer(GL_RENDERBUFFER, stencilBuffer); - glRenderbufferStorageMultisample(GL_RENDERBUFFER, sampleCnt, GL_STENCIL_INDEX8, width, height); - - GLuint framebuffer; - glGenFramebuffers(1, &framebuffer); - glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, - colorBuffer); - glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, - stencilBuffer); - - // Unbind "framebuffer" before orphaning its renderbuffers. (Otherwise they are spec'd to be - // detached from the currently bound framebuffer.) - glBindFramebuffer(GL_FRAMEBUFFER, 0); - glDeleteRenderbuffers(1, &colorBuffer); - glDeleteRenderbuffers(1, &stencilBuffer); - - grContext->resetContext(kRenderTarget_GrGLBackendState); - - GrGLFramebufferInfo glInfo; - glInfo.fFBOID = framebuffer; - glInfo.fFormat = GL_RGBA8; - GrBackendRenderTarget backendRenderTarget(width, height, sampleCnt, 8, glInfo); - return SkSurface::MakeFromBackendRenderTarget(grContext.get(), backendRenderTarget, - kBottomLeft_GrSurfaceOrigin, - SkColorType::kRGBA_8888_SkColorType, nullptr, - nullptr, &delete_wrapped_framebuffer, - (SkSurface::ReleaseContext)framebuffer); -} - -enum class GLFilter { - kNearest = GL_NEAREST, - kLinear = GL_LINEAR -}; - -static void BlitOffscreenFramebuffer(sk_sp surface, int srcX0, int srcY0, int srcX1, int - srcY1, int dstX0, int dstY0, int dstX1, int dstY1, - GLFilter filter) { - surface->flush(SkSurface::BackendSurfaceAccess::kPresent, GrFlushInfo()); - GrGLFramebufferInfo glInfo; - auto backendRT = surface->getBackendRenderTarget(SkSurface::kFlushRead_BackendHandleAccess); - backendRT.getGLFramebufferInfo(&glInfo); - glBindFramebuffer(GL_READ_FRAMEBUFFER, glInfo.fFBOID); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); - glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, GL_COLOR_BUFFER_BIT, - (GLenum)filter); - surface->getContext()->resetContext(kRenderTarget_GrGLBackendState); -} - EMSCRIPTEN_BINDINGS(Viewer) { function("MakeSlide", &MakeSlide); function("MakeSkpSlide", &MakeSkpSlide); function("MakeSvgSlide", &MakeSvgSlide); - function("MakeOffscreenFramebuffer", &MakeOffscreenFramebuffer); - function("BlitOffscreenFramebuffer", &BlitOffscreenFramebuffer); class_("Slide") .smart_ptr>("sk_sp") .function("load", &Slide::load) @@ -122,9 +57,6 @@ EMSCRIPTEN_BINDINGS(Viewer) { })) .function("onChar", &Slide::onChar) .function("onMouse", &Slide::onMouse); - enum_("GLFilter") - .value("Nearest", GLFilter::kNearest) - .value("Linear", GLFilter::kLinear); enum_("InputState") .value("Down", skui::InputState::kDown) .value("Up", skui::InputState::kUp) diff --git a/modules/canvaskit/wasm_tools/SIMD/.gitignore b/modules/canvaskit/wasm_tools/SIMD/.gitignore new file mode 100644 index 0000000000000..9b1960e711fc1 --- /dev/null +++ b/modules/canvaskit/wasm_tools/SIMD/.gitignore @@ -0,0 +1 @@ +output/ \ No newline at end of file diff --git a/modules/canvaskit/wasm_tools/SIMD/build_simd_test.sh b/modules/canvaskit/wasm_tools/SIMD/build_simd_test.sh new file mode 100755 index 0000000000000..c5329b764308d --- /dev/null +++ b/modules/canvaskit/wasm_tools/SIMD/build_simd_test.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Copyright 2020 Google LLC +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +# Requires that emscripten and wasm2wat are added to your PATH. +# Requires, and is verified to work with +# - wasm2wat 1.0.13 (1.0.17) +# - install from here: https://github.com/WebAssembly/wabt +# - emscripten 1.39.16 +# - Chrome Canary 86.0.4186.0 with chrome://flags#enable-webassembly-simd enabled +# +# Example usage: ./build_simd_test.sh simd_float_test.cpp + +# build the file specified as the first argument with SIMD enabled. +em++ $1 -I ../../../../ -msimd128 -Os -s WASM=1 -o output/simd_test.html +# convert the output WASM to a human readable text format (.wat) +wasm2wat --enable-simd output/simd_test.wasm > output/simd_test.wat + +# The following lines output all SIMD operations produced in the output WASM. +# Useful for checking that SIMD instructions are actually being used. +# e.g. for the following C++ code: +# auto vec1 = skvx::Vec<2, double>({11.f, -22.f}) + skvx::Vec<2, double>({13.f, -1.f}); +# it is expected that the f64x2.add operation is present in the output WASM. +echo "The following WASM SIMD operations were used in the compiled code:" +grep -f wasm_simd_types.txt output/simd_test.wat + +# Serve the compiled WASM so output can be manually inspected for correctness. +echo "Go check out http://localhost:8000/output/simd_test.html" +python ../../serve.py diff --git a/modules/canvaskit/wasm_tools/SIMD/simd_float_capabilities.cpp b/modules/canvaskit/wasm_tools/SIMD/simd_float_capabilities.cpp new file mode 100644 index 0000000000000..96f654de71e29 --- /dev/null +++ b/modules/canvaskit/wasm_tools/SIMD/simd_float_capabilities.cpp @@ -0,0 +1,100 @@ +// Copyright 2020 Google LLC +// +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "include/private/SkVx.h" +#include +#include + +// How to read this file: +// - Lines with "//GOOD" are compatible with WASM SIMD and are automatically compiled +// into WASM SIMD operations by emscripten. +// - Lines with "//N/A" are not operations that are compatible with this type of data. +// - Lines with "GOOD (FIXED)" are compatible with WASM SIMD but are NOT automatically +// compiled into WASM SIMD operations by emscripten. Special WASM SIMD intrinsics have been +// specified in skia/include/private/SkVx.h to tell emscripten how to compile them to WASM SIMD +// operations. +// - Lines with "//not available in wasm" do not have compatible WASM SIMD operations. Emscripten +// compiles these operations into non-SIMD WASM. +// - Lines with "//???" may be more complex and it is not clear if they have compatible WASM SIMD +// operations. More work could be needed on these operations. + +// How to use this file for testing WASM SIMDification of operations: +// 1. Reference https://github.com/WebAssembly/simd/blob/master/proposals/simd/SIMD.md +// and https://github.com/llvm/llvm-project/blob/master/clang/lib/Headers/wasm_simd128.h +// to check if a WASM SIMD operation exists which correspond to any given line of code. +// 2. Uncomment that line of code. +// 3. Run `./build_simd_test.sh simd_float_capabilities.cpp` to build and output WASM SIMD operations +// present in the compiled WASM. +// 4. Read the output in the console to see if the WASM SIMD operations you expected were present in +// the resulting compiled WASM. + +int main() { + auto vec1 = skvx::Vec<4, float>({11.f, -22.f, 33.f, -44.f}); + auto vec2 = skvx::Vec<4, float>({-.5f, 100.5f, 100.5f, -.5f}); + + //auto vec3 = skvx::join(vec1, vec2); //not available in wasm + // note: may be possible using "widening" + + //vec1 = vec1 + vec2; //GOOD + //vec1 = vec1 - vec2; //GOOD + //vec1 = vec1 * vec2; //GOOD + //vec1 = vec1 / vec2; //GOOD + + //vec1 = vec1 ^ vec2; //N/A + //vec1 = vec1 & vec2; //N/A + //vec1 = vec1 | vec2; //N/A + + //vec1 = !vec1; //N/A + //vec1 = -vec1; //GOOD + //vec1 = ~vec1; //N/A + + //vec1 = vec1 << 2; //N/A + //vec1 = vec1 >> 2; //N/A + + //auto vec3 = vec1 == vec2; //GOOD + //auto vec3 = vec1 != vec2; //GOOD + //auto vec3 = vec1 <= vec2; //GOOD + //auto vec3 = vec1 >= vec2; //GOOD + //auto vec3 = vec1 < vec2; //GOOD + //auto vec3 = vec1 > vec2; //GOOD + + //auto vec3 = skvx::any(vec1); //N/A + //auto vec3 = skvx::all(vec1); //N/A + + //vec1 = skvx::max(vec1, vec2); //GOOD (FIXED) + //vec1 = skvx::min(vec1, vec2); //GOOD (FIXED) + + //vec1 = skvx::pow(vec1, vec2); //not available in wasm + //vec1 = skvx::atan(vec1); //not available in wasm + //vec1 = ceil(vec1); //not available in wasm, note: maybe could use "comparisons" + //vec1 = skvx::floor(vec1); //not available in wasm + //vec1 = skvx::trunc(vec1); //not available in wasm + // note: maybe possible using trunc_sat_f32x4_s and convert_i32x4_s? + //vec1 = skvx::round(vec1); //not available in wasm + // note: maybe possible using trunc_sat_f32x4_s and convert_i32x4_s? + //vec1 = skvx::sqrt(vec1); //GOOD (FIXED) + //vec1 = skvx::abs(vec1); //GOOD (FIXED) + //vec1 = skvx::sin(vec1); //not available in wasm + //vec1 = skvx::cos(vec1); //not available in wasm + //vec1 = skvx::tan(vec1); //not available in wasm + + //auto vec3 = skvx::lrint(vec1); //??? + // note: may be possible using f32x4.convert_i32x4_s, would need to test correctness. + + //vec1 = skvx::rcp(vec1); //GOOD (FIXED) previous: N/A-BAD, doesn't use SIMD div + //vec1 = skvx::rsqrt(vec1); //GOOD (FIXED) previous: BAD, doesn't use SIMD sqrt or div + //vec1 = skvx::mad(vec1, vec2, vec1); //GOOD (FIXED) previous: BAD doesn't used SIMD add or mul + + //vec1 = skvx::if_then_else(vec1, vec1, vec2); //N/A + + //vec1 = skvx::shuffle<2,1,0,3>(vec1); //GOOD + + //vec1 = skvx::fma(vec1, vec2, vec1); //not available in wasm (no fused multiply-add is available) + //vec1 = skvx::fract(vec1); //??? + + //printf("result: { %f, %f, %f, %f }\n", vec1[0], vec1[1], vec1[2], vec1[3]); + + return 0; +} diff --git a/modules/canvaskit/wasm_tools/SIMD/simd_int_capabilities.cpp b/modules/canvaskit/wasm_tools/SIMD/simd_int_capabilities.cpp new file mode 100644 index 0000000000000..82813664e2f24 --- /dev/null +++ b/modules/canvaskit/wasm_tools/SIMD/simd_int_capabilities.cpp @@ -0,0 +1,98 @@ +// Copyright 2020 Google LLC +// +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "include/private/SkVx.h" +#include +#include + +// How to read this file: +// - Lines with "//GOOD" are compatible with WASM SIMD and are automatically compiled +// into WASM SIMD operations by emscripten. +// - Lines with "//N/A" are operations that are not compatible with this type of data. +// - Lines with "GOOD (FIXED)" are compatible with WASM SIMD but are NOT automatically +// compiled into WASM SIMD operations by emscripten. Special WASM SIMD intrinsics have been +// specified in skia/include/private/SkVx.h to tell emscripten how to compile them to WASM SIMD +// operations. +// - Lines with "//not available in wasm" do not have compatible WASM SIMD operations. Emscripten +// compiles these operations into non-SIMD WASM. +// - Lines with "//???" may be more complex and it is not clear if they have compatible WASM SIMD +// operations. More work could be needed on these operations. + +// How to use this file for testing WASM SIMDification of operations: +// 1. Reference https://github.com/WebAssembly/simd/blob/master/proposals/simd/SIMD.md +// and https://github.com/llvm/llvm-project/blob/master/clang/lib/Headers/wasm_simd128.h +// to check if a WASM SIMD operation exists which correspond to any given line of code. +// 2. Uncomment that line of code. +// 3. Run `./build_simd_test.sh simd_int_capabilities.cpp` to build and output WASM SIMD operations present +// in the compiled WASM. +// 4. Read the output in the console to see if the WASM SIMD operations you expected were present in +// the resulting compiled WASM. + +int main() { + auto vec1 = skvx::Vec<4, int>({3, 7, 11, 23}); + auto vec2 = skvx::Vec<4, int>({1, 9, 27, 41}); + + //auto vec3 = skvx::join(vec1, vec2); //not available in wasm + // note: may be possible using "widening" + + //vec1 = vec1 + vec2; //GOOD + //vec1 = vec1 - vec2; //GOOD + //vec1 = vec1 * vec2; //GOOD + //vec1 = vec1 / vec2; //N/A + + //vec1 = vec1 ^ vec2; //GOOD + //vec1 = vec1 & vec2; //GOOD + //vec1 = vec1 | vec2; //GOOD + + //vec1 = !vec1; //GOOD + //vec1 = -vec1; //GOOD + //vec1 = ~vec1; //GOOD + + //vec1 = vec1 << 2; //GOOD + //vec1 = vec1 >> 2; //GOOD + + //auto vec3 = vec1 == vec2; //GOOD + //auto vec3 = vec1 != vec2; //GOOD + //auto vec3 = vec1 <= vec2; //GOOD + //auto vec3 = vec1 >= vec2; //GOOD + //auto vec3 = vec1 < vec2; //GOOD + //auto vec3 = vec1 > vec2; //GOOD + + //auto vec3 = skvx::any(vec1); //GOOD (FIXED) + //auto vec3 = skvx::all(vec1); //GOOD (FIXED) + + //auto a = skvx::max(vec1, vec2); //GOOD (FIXED) + //auto a = skvx::min(vec1, vec2); //GOOD (FIXED) + + //vec1 = skvx::pow(vec1, vec2); //not available in wasm + //vec1 = skvx::atan(vec1); //not available in wasm + //vec1 = ceil(vec1); //not available in wasm + //vec1 = skvx::floor(vec1); //not available in wasm + //vec1 = skvx::trunc(vec1); //N/A + //vec1 = skvx::round(vec1); //N/A + //vec1 = skvx::sqrt(vec1); //not available in wasm + //vec1 = skvx::abs(vec1); //GOOD (FIXED) + //vec1 = skvx::sin(vec1); //not available in wasm + //vec1 = skvx::cos(vec1); //not available in wasm + //vec1 = skvx::tan(vec1); //not available in wasm + + //auto vec3 = skvx::lrint(vec1); //??? + + //vec1 = skvx::rcp(vec1); //N/A + //vec1 = skvx::rsqrt(vec1); //N/A + //vec1 = skvx::mad(vec1, vec2, vec1); //??? + // note: skvx::mad is probably not used in practice for integers + + //vec1 = skvx::if_then_else(vec1, vec1, vec2); //??? + + //vec1 = skvx::shuffle<2,1,0,3>(vec1); //GOOD + + //vec1 = skvx::fma(vec1, vec2, vec1); //not available in wasm (no fused multiply-add is available) + //vec1 = skvx::fract(vec1); //N/A + + //printf("result: { %i, %i, %i, %i }\n", vec1[0], vec1[1], vec1[2], vec1[3]); + + return 0; +} diff --git a/modules/canvaskit/wasm_tools/SIMD/wasm_simd_types.txt b/modules/canvaskit/wasm_tools/SIMD/wasm_simd_types.txt new file mode 100644 index 0000000000000..20c2cd8502b1d --- /dev/null +++ b/modules/canvaskit/wasm_tools/SIMD/wasm_simd_types.txt @@ -0,0 +1,11 @@ +v128 +v8x16 +v16x8 +v32x4 +v64x2 +i8x16 +i16x8 +i32x4 +i64x2 +f32x4 +f64x2 \ No newline at end of file diff --git a/modules/pathkit/compile.sh b/modules/pathkit/compile.sh index de66cffb50d09..32cd53c0afc1d 100755 --- a/modules/pathkit/compile.sh +++ b/modules/pathkit/compile.sh @@ -93,7 +93,7 @@ echo "Compiling bitcode" --args="cc=\"${EMCC}\" \ cxx=\"${EMCXX}\" \ ar=\"${EMAR}\" \ - extra_cflags=[\"-DSK_DISABLE_READBUFFER=1\",\"-s\", \"WARN_UNALIGNED=1\", + extra_cflags=[\"-s\", \"WARN_UNALIGNED=1\", \"-s\", \"MAIN_MODULE=1\", ${EXTRA_CFLAGS} ] \ @@ -113,7 +113,6 @@ ${EMCXX} $RELEASE_CONF -std=c++17 \ --no-entry \ --pre-js $BASE_DIR/helper.js \ --pre-js $BASE_DIR/chaining.js \ --DSK_DISABLE_READBUFFER=1 \ -fno-rtti -fno-exceptions -DEMSCRIPTEN_HAS_UNBOUND_TYPE_NAMES=0 \ $WASM_CONF \ -s ERROR_ON_UNDEFINED_SYMBOLS=1 \ diff --git a/modules/pathkit/perf/perfReporter.js b/modules/pathkit/perf/perfReporter.js index 35fd3590bc593..d2211d231cb15 100644 --- a/modules/pathkit/perf/perfReporter.js +++ b/modules/pathkit/perf/perfReporter.js @@ -51,6 +51,55 @@ function benchmarkAndReport(benchName, setupFn, testFn, teardownFn) { } } +// The same as benchmarkAndReport, except expects the third parameter, testFn, to return a promise +async function asyncBenchmarkAndReport(benchName, setupFn, testFn, teardownFn) { + try { + let ctx = {}; + // warmup 3 times (arbitrary choice) + setupFn(ctx); + await testFn(ctx); + await testFn(ctx); + await testFn(ctx); + teardownFn(ctx); + + ctx = {}; + setupFn(ctx); + let start = Date.now(); + let now = start; + times = 0; + // See how many times we can do it in 100ms (arbitrary choice) + while (now - start < 100) { + await testFn(ctx); + now = Date.now(); + times++; + } + + teardownFn(ctx); + + // Try to make it go for 2 seconds (arbitrarily chosen) + // Since the pre-try took 100ms, multiply by 20 to get + // approximate tries in 2s (unless now - start >> 100 ms) + let goalTimes = times * 20; + ctx = {}; + setupFn(ctx); + times = 0; + start = Date.now(); + while (times < goalTimes) { + await testFn(ctx); + times++; + } + const end = Date.now(); + teardownFn(ctx); + + const us = (end - start) * 1000 / times; + console.log(benchName, `${us} microseconds`) + return _report(us, benchName); + } catch(e) { + console.error('caught error', e); + return Promise.reject(e); + } +} + function _report(microseconds, benchName) { return fetch(REPORT_URL, { diff --git a/modules/skottie/gm/ExternalProperties.cpp b/modules/skottie/gm/ExternalProperties.cpp index 786a95d0d7e03..0b82ba5654eaa 100644 --- a/modules/skottie/gm/ExternalProperties.cpp +++ b/modules/skottie/gm/ExternalProperties.cpp @@ -25,14 +25,15 @@ static constexpr char kSkottieResource[] = "skottie/skottie_sample_webfont.json" // Dummy web font loader which serves a single local font (checked in under resources/). class FakeWebFontProvider final : public skresources::ResourceProvider { public: - FakeWebFontProvider() : fFontData(GetResourceAsData(kWebFontResource)) {} + FakeWebFontProvider() + : fTypeface(SkTypeface::MakeFromData(GetResourceAsData(kWebFontResource))) {} - sk_sp loadFont(const char[], const char[]) const override { - return fFontData; + sk_sp loadTypeface(const char[], const char[]) const override { + return fTypeface; } private: - sk_sp fFontData; + sk_sp fTypeface; using INHERITED = skresources::ResourceProvider; }; diff --git a/modules/skottie/gm/SkottieGM.cpp b/modules/skottie/gm/SkottieGM.cpp index 03b0b757841be..6365d179b315d 100644 --- a/modules/skottie/gm/SkottieGM.cpp +++ b/modules/skottie/gm/SkottieGM.cpp @@ -25,14 +25,15 @@ static constexpr char kSkottieResource[] = "skottie/skottie_sample_webfont.json" // Dummy web font loader which serves a single local font (checked in under resources/). class FakeWebFontProvider final : public skresources::ResourceProvider { public: - FakeWebFontProvider() : fFontData(GetResourceAsData(kWebFontResource)) {} + FakeWebFontProvider() + : fTypeface(SkTypeface::MakeFromData(GetResourceAsData(kWebFontResource))) {} - sk_sp loadFont(const char[], const char[]) const override { - return fFontData; + sk_sp loadTypeface(const char[], const char[]) const override { + return fTypeface; } private: - sk_sp fFontData; + sk_sp fTypeface; using INHERITED = skresources::ResourceProvider; }; diff --git a/modules/skottie/skottie.gni b/modules/skottie/skottie.gni index 3b64e1dac6ef9..4fa1f3d60c6a2 100644 --- a/modules/skottie/skottie.gni +++ b/modules/skottie/skottie.gni @@ -72,6 +72,7 @@ skia_skottie_sources = [ "$_src/layers/shapelayer/FillStroke.cpp", "$_src/layers/shapelayer/Gradient.cpp", "$_src/layers/shapelayer/MergePaths.cpp", + "$_src/layers/shapelayer/OffsetPaths.cpp", "$_src/layers/shapelayer/Polystar.cpp", "$_src/layers/shapelayer/Rectangle.cpp", "$_src/layers/shapelayer/Repeater.cpp", diff --git a/modules/skottie/src/SkottieTool.cpp b/modules/skottie/src/SkottieTool.cpp index e546c593b89b4..9ce6288e4c977 100644 --- a/modules/skottie/src/SkottieTool.cpp +++ b/modules/skottie/src/SkottieTool.cpp @@ -12,6 +12,7 @@ #include "include/core/SkSurface.h" #include "include/encode/SkPngEncoder.h" #include "modules/skottie/include/Skottie.h" +#include "modules/skottie/utils/SkottieUtils.h" #include "modules/skresources/include/SkResources.h" #include "src/core/SkOSFile.h" #include "src/core/SkTaskGroup.h" @@ -45,6 +46,8 @@ static DEFINE_int(threads, 0, "Number of worker threads (0 -> cores count)."); namespace { +static constexpr SkColor kClearColor = SK_ColorWHITE; + std::unique_ptr MakeFrameStream(size_t idx, const char* ext) { const auto frame_file = SkStringPrintf("0%06zu.%s", idx, ext); auto stream = std::make_unique(SkOSPath::Join(FLAGS_writePath[0], @@ -87,7 +90,7 @@ class PNGSink final : public Sink { SkCanvas* beginFrame(size_t) override { auto* canvas = fSurface->getCanvas(); - canvas->clear(SK_ColorTRANSPARENT); + canvas->clear(kClearColor); return canvas; } @@ -161,7 +164,7 @@ class NullSink final : public Sink { SkCanvas* beginFrame(size_t) override { auto* canvas = fSurface->getCanvas(); - canvas->clear(SK_ColorTRANSPARENT); + canvas->clear(kClearColor); return canvas; } @@ -182,7 +185,7 @@ struct MP4Sink final : public Sink { SkCanvas* beginFrame(size_t) override { SkCanvas* canvas = fSurface->getCanvas(); - canvas->clear(SK_ColorTRANSPARENT); + canvas->clear(kClearColor); return canvas; } @@ -265,6 +268,8 @@ int main(int argc, char** argv) { /*predecode=*/true), /*predecode=*/true)); auto data = SkData::MakeFromFileName(FLAGS_input[0]); + auto precomp_interceptor = + sk_make_sp(rp, "__"); if (!data) { SkDebugf("Could not load %s.\n", FLAGS_input[0]); @@ -334,12 +339,14 @@ int main(int argc, char** argv) { // iOS doesn't support thread_local on versions less than 9.0. auto anim = skottie::Animation::Builder() .setResourceProvider(rp) + .setPrecompInterceptor(precomp_interceptor) .make(static_cast(data->data()), data->size()); auto sink = MakeSink(FLAGS_format[0], scale_matrix); #else thread_local static auto* anim = skottie::Animation::Builder() .setResourceProvider(rp) + .setPrecompInterceptor(precomp_interceptor) .make(static_cast(data->data()), data->size()) .release(); thread_local static auto* sink = MakeSink(FLAGS_format[0], scale_matrix).release(); diff --git a/modules/skottie/src/animator/VectorKeyframeAnimator.cpp b/modules/skottie/src/animator/VectorKeyframeAnimator.cpp index 5d3f09cc35715..008b751efc28a 100644 --- a/modules/skottie/src/animator/VectorKeyframeAnimator.cpp +++ b/modules/skottie/src/animator/VectorKeyframeAnimator.cpp @@ -44,16 +44,7 @@ VectorValue::operator SkV3() const { } VectorValue::operator SkColor() const { - // best effort to turn this into a color - const auto r = this->size() > 0 ? (*this)[0] : 0, - g = this->size() > 1 ? (*this)[1] : 0, - b = this->size() > 2 ? (*this)[2] : 0, - a = this->size() > 3 ? (*this)[3] : 1; - - return SkColorSetARGB(SkScalarRoundToInt(SkTPin(a, 0.0f, 1.0f) * 255), - SkScalarRoundToInt(SkTPin(r, 0.0f, 1.0f) * 255), - SkScalarRoundToInt(SkTPin(g, 0.0f, 1.0f) * 255), - SkScalarRoundToInt(SkTPin(b, 0.0f, 1.0f) * 255)); + return static_cast(*this).toSkColor(); } VectorValue::operator SkColor4f() const { diff --git a/modules/skottie/src/effects/LinearWipeEffect.cpp b/modules/skottie/src/effects/LinearWipeEffect.cpp index abf4668f6f74c..713f97e87945a 100644 --- a/modules/skottie/src/effects/LinearWipeEffect.cpp +++ b/modules/skottie/src/effects/LinearWipeEffect.cpp @@ -54,7 +54,8 @@ class LinearWipeAdapter final : public MaskShaderEffectBase { MaskInfo onMakeMask() const override { if (fCompletion >= 100) { // The layer is fully disabled. - return { nullptr, false }; + // TODO: fix layer controller visibility clash and pass a null shader instead. + return { SkShaders::Color(SK_ColorTRANSPARENT), false }; } if (fCompletion <= 0) { diff --git a/modules/skottie/src/effects/VenetianBlindsEffect.cpp b/modules/skottie/src/effects/VenetianBlindsEffect.cpp index f761ec2b2b808..f21271b8e5dda 100644 --- a/modules/skottie/src/effects/VenetianBlindsEffect.cpp +++ b/modules/skottie/src/effects/VenetianBlindsEffect.cpp @@ -52,7 +52,8 @@ class VenetianBlindsAdapter final : public MaskShaderEffectBase { MaskInfo onMakeMask() const override { if (fCompletion >= 100) { // The layer is fully disabled. - return { nullptr, false }; + // TODO: fix layer controller visibility clash and pass a null shader instead. + return { SkShaders::Color(SK_ColorTRANSPARENT), false }; } if (fCompletion <= 0) { diff --git a/modules/skottie/src/layers/TextLayer.cpp b/modules/skottie/src/layers/TextLayer.cpp index 633b0c8254519..35e9dfe9ca0df 100644 --- a/modules/skottie/src/layers/TextLayer.cpp +++ b/modules/skottie/src/layers/TextLayer.cpp @@ -263,8 +263,14 @@ bool AnimationBuilder::resolveNativeTypefaces() { // 2) system font (family/style) // 3) system default - finfo->fTypeface = - fmgr->makeFromData(fResourceProvider->loadFont(name.c_str(), finfo->fPath.c_str())); + finfo->fTypeface = fResourceProvider->loadTypeface(name.c_str(), finfo->fPath.c_str()); + + // legacy API fallback + // TODO: remove after client migration + if (!finfo->fTypeface) { + finfo->fTypeface = fmgr->makeFromData( + fResourceProvider->loadFont(name.c_str(), finfo->fPath.c_str())); + } if (!finfo->fTypeface) { finfo->fTypeface.reset(fmgr->matchFamilyStyle(finfo->fFamily.c_str(), diff --git a/modules/skottie/src/layers/shapelayer/FillStroke.cpp b/modules/skottie/src/layers/shapelayer/FillStroke.cpp index a635698c08a1e..1193219dcdd9f 100644 --- a/modules/skottie/src/layers/shapelayer/FillStroke.cpp +++ b/modules/skottie/src/layers/shapelayer/FillStroke.cpp @@ -10,7 +10,7 @@ #include "modules/skottie/src/SkottiePriv.h" #include "modules/skottie/src/SkottieValue.h" #include "modules/skottie/src/layers/shapelayer/ShapeLayer.h" -#include "modules/sksg/include/SkSGDashEffect.h" +#include "modules/sksg/include/SkSGGeometryEffect.h" #include "modules/sksg/include/SkSGPaint.h" namespace skottie { diff --git a/modules/skottie/src/layers/shapelayer/OffsetPaths.cpp b/modules/skottie/src/layers/shapelayer/OffsetPaths.cpp new file mode 100644 index 0000000000000..527473ac59cdd --- /dev/null +++ b/modules/skottie/src/layers/shapelayer/OffsetPaths.cpp @@ -0,0 +1,67 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "modules/skottie/src/Adapter.h" +#include "modules/skottie/src/SkottieJson.h" +#include "modules/skottie/src/SkottiePriv.h" +#include "modules/skottie/src/SkottieValue.h" +#include "modules/skottie/src/layers/shapelayer/ShapeLayer.h" +#include "modules/sksg/include/SkSGGeometryEffect.h" + +namespace skottie::internal { + +namespace { + +class OffsetPathsAdapter final : public DiscardableAdapterBase { +public: + OffsetPathsAdapter(const skjson::ObjectValue& joffset, + const AnimationBuilder& abuilder, + sk_sp child) + : INHERITED(sksg::OffsetEffect::Make(std::move(child))) { + static constexpr SkPaint::Join gJoinMap[] = { + SkPaint::kMiter_Join, // 'lj': 1 + SkPaint::kRound_Join, // 'lj': 2 + SkPaint::kBevel_Join, // 'lj': 3 + }; + + const auto join = ParseDefault(joffset["lj"], 1) - 1; + this->node()->setJoin(gJoinMap[SkTPin(join, 0, SK_ARRAY_COUNT(gJoinMap) - 1)]); + + this->bind(abuilder, joffset["a" ], fAmount); + this->bind(abuilder, joffset["ml"], fMiterLimit); + } + +private: + void onSync() override { + this->node()->setOffset(fAmount); + this->node()->setMiterLimit(fMiterLimit); + } + + ScalarValue fAmount = 0, + fMiterLimit = 0; + + using INHERITED = DiscardableAdapterBase; +}; + +} // namespace + +std::vector> ShapeBuilder::AttachOffsetGeometryEffect( + const skjson::ObjectValue& jround, const AnimationBuilder* abuilder, + std::vector>&& geos) { + std::vector> offsetted; + offsetted.reserve(geos.size()); + + for (auto& g : geos) { + offsetted.push_back(abuilder->attachDiscardableAdapter + (jround, *abuilder, std::move(g))); + } + + return offsetted; +} + +} // namespace skottie::internal diff --git a/modules/skottie/src/layers/shapelayer/RoundCorners.cpp b/modules/skottie/src/layers/shapelayer/RoundCorners.cpp index 7baa6d6cbbb81..cf5f1b6d23f25 100644 --- a/modules/skottie/src/layers/shapelayer/RoundCorners.cpp +++ b/modules/skottie/src/layers/shapelayer/RoundCorners.cpp @@ -10,7 +10,7 @@ #include "modules/skottie/src/SkottiePriv.h" #include "modules/skottie/src/SkottieValue.h" #include "modules/skottie/src/layers/shapelayer/ShapeLayer.h" -#include "modules/sksg/include/SkSGRoundEffect.h" +#include "modules/sksg/include/SkSGGeometryEffect.h" namespace skottie { namespace internal { diff --git a/modules/skottie/src/layers/shapelayer/ShapeLayer.cpp b/modules/skottie/src/layers/shapelayer/ShapeLayer.cpp index 3ab93946a92a4..de892d3d3984d 100644 --- a/modules/skottie/src/layers/shapelayer/ShapeLayer.cpp +++ b/modules/skottie/src/layers/shapelayer/ShapeLayer.cpp @@ -12,16 +12,14 @@ #include "modules/skottie/src/SkottiePriv.h" #include "modules/skottie/src/SkottieValue.h" #include "modules/sksg/include/SkSGDraw.h" -#include "modules/sksg/include/SkSGGeometryTransform.h" +#include "modules/sksg/include/SkSGGeometryEffect.h" #include "modules/sksg/include/SkSGGroup.h" #include "modules/sksg/include/SkSGMerge.h" #include "modules/sksg/include/SkSGPaint.h" #include "modules/sksg/include/SkSGPath.h" #include "modules/sksg/include/SkSGRect.h" #include "modules/sksg/include/SkSGRenderEffect.h" -#include "modules/sksg/include/SkSGRoundEffect.h" #include "modules/sksg/include/SkSGTransform.h" -#include "modules/sksg/include/SkSGTrimEffect.h" #include "src/utils/SkJSON.h" #include @@ -49,6 +47,7 @@ static constexpr GeometryEffectAttacherT gGeometryEffectAttachers[] = { ShapeBuilder::AttachMergeGeometryEffect, ShapeBuilder::AttachTrimGeometryEffect, ShapeBuilder::AttachRoundGeometryEffect, + ShapeBuilder::AttachOffsetGeometryEffect, }; using PaintAttacherT = sk_sp (*)(const skjson::ObjectValue&, @@ -101,6 +100,7 @@ const ShapeInfo* FindShapeInfo(const skjson::ObjectValue& jshape) { { "gr", ShapeType::kGroup , 0 }, // group -> Inline handler { "gs", ShapeType::kPaint , 3 }, // gstroke -> AttachGradientStroke { "mm", ShapeType::kGeometryEffect, 0 }, // merge -> AttachMergeGeometryEffect + { "op", ShapeType::kGeometryEffect, 3 }, // offset -> AttachOffsetGeometryEffect { "rc", ShapeType::kGeometry , 1 }, // rrect -> AttachRRectGeometry { "rd", ShapeType::kGeometryEffect, 2 }, // round -> AttachRoundGeometryEffect { "rp", ShapeType::kDrawEffect , 0 }, // repeater -> AttachRepeaterDrawEffect diff --git a/modules/skottie/src/layers/shapelayer/ShapeLayer.h b/modules/skottie/src/layers/shapelayer/ShapeLayer.h index 9ca498122aba0..f7a3b208635a5 100644 --- a/modules/skottie/src/layers/shapelayer/ShapeLayer.h +++ b/modules/skottie/src/layers/shapelayer/ShapeLayer.h @@ -67,6 +67,9 @@ class ShapeBuilder final : SkNoncopyable { static std::vector> AttachRoundGeometryEffect( const skjson::ObjectValue&, const AnimationBuilder*, std::vector>&&); + static std::vector> AttachOffsetGeometryEffect( + const skjson::ObjectValue&, const AnimationBuilder*, + std::vector>&&); static std::vector> AdjustStrokeGeometry( const skjson::ObjectValue&, const AnimationBuilder*, std::vector>&&); diff --git a/modules/skottie/src/layers/shapelayer/TrimPaths.cpp b/modules/skottie/src/layers/shapelayer/TrimPaths.cpp index 7db26ccd466e6..bc2dc153a05d6 100644 --- a/modules/skottie/src/layers/shapelayer/TrimPaths.cpp +++ b/modules/skottie/src/layers/shapelayer/TrimPaths.cpp @@ -10,8 +10,8 @@ #include "modules/skottie/src/SkottiePriv.h" #include "modules/skottie/src/SkottieValue.h" #include "modules/skottie/src/layers/shapelayer/ShapeLayer.h" +#include "modules/sksg/include/SkSGGeometryEffect.h" #include "modules/sksg/include/SkSGMerge.h" -#include "modules/sksg/include/SkSGTrimEffect.h" #include diff --git a/modules/skottie/src/text/TextAdapter.cpp b/modules/skottie/src/text/TextAdapter.cpp index 5b531c54f9295..5d3b0d721e81f 100644 --- a/modules/skottie/src/text/TextAdapter.cpp +++ b/modules/skottie/src/text/TextAdapter.cpp @@ -345,9 +345,11 @@ void TextAdapter::onSync() { } size_t grouping_span_index = 0; + SkV2 line_offset = { 0, 0 }; // cumulative line spacing // Finally, push all props to their corresponding fragment. for (const auto& line_span : fMaps.fLinesMap) { + SkV2 line_spacing = { 0, 0 }; float line_tracking = 0; bool line_has_tracking = false; @@ -370,11 +372,21 @@ void TextAdapter::onSync() { line_tracking += props.tracking; line_has_tracking |= !SkScalarNearlyZero(props.tracking); + + line_spacing += props.line_spacing; + } + + // line spacing of the first line is ignored (nothing to "space" against) + if (&line_span != &fMaps.fLinesMap.front()) { + // For each line, the actual spacing is an average of individual fragment spacing + // (to preserve the "line"). + line_offset += line_spacing / line_span.fCount; } - if (line_has_tracking) { - this->adjustLineTracking(buf, line_span, line_tracking); + if (line_offset != SkV2{0, 0} || line_has_tracking) { + this->adjustLineProps(buf, line_span, line_offset, line_tracking); } + } } @@ -466,9 +478,10 @@ void TextAdapter::pushPropsToFragment(const TextAnimator::ResolvedProps& props, } } -void TextAdapter::adjustLineTracking(const TextAnimator::ModulatorBuffer& buf, - const TextAnimator::DomainSpan& line_span, - float total_tracking) const { +void TextAdapter::adjustLineProps(const TextAnimator::ModulatorBuffer& buf, + const TextAnimator::DomainSpan& line_span, + const SkV2& line_offset, + float total_tracking) const { SkASSERT(line_span.fCount > 0); // AE tracking is defined per glyph, based on two components: |before| and |after|. @@ -507,7 +520,9 @@ void TextAdapter::adjustLineTracking(const TextAnimator::ModulatorBuffer& buf, fragment_offset = align_offset + tracking_acc + track_before; const auto& frag = fFragments[i]; - const auto m = SkM44::Translate(fragment_offset, 0) * frag.fMatrixNode->getMatrix(); + const auto m = SkM44::Translate(line_offset.x + fragment_offset, + line_offset.y) * + frag.fMatrixNode->getMatrix(); frag.fMatrixNode->setMatrix(m); tracking_acc += track_before + track_after; diff --git a/modules/skottie/src/text/TextAdapter.h b/modules/skottie/src/text/TextAdapter.h index 359b52732690b..2dca02d0c7b81 100644 --- a/modules/skottie/src/text/TextAdapter.h +++ b/modules/skottie/src/text/TextAdapter.h @@ -71,9 +71,10 @@ class TextAdapter final : public AnimatablePropertyContainer { void pushPropsToFragment(const TextAnimator::ResolvedProps&, const FragmentRec&, const SkV2&, const TextAnimator::DomainSpan*) const; - void adjustLineTracking(const TextAnimator::ModulatorBuffer&, - const TextAnimator::DomainSpan&, - float line_tracking) const; + void adjustLineProps(const TextAnimator::ModulatorBuffer&, + const TextAnimator::DomainSpan&, + const SkV2& line_offset, + float line_tracking) const; SkV2 fragmentAnchorPoint(const FragmentRec&, const SkV2&, const TextAnimator::DomainSpan*) const; diff --git a/modules/skottie/src/text/TextAnimator.cpp b/modules/skottie/src/text/TextAnimator.cpp index 8ae3623ea6e6b..47c7ca9e0cfed 100644 --- a/modules/skottie/src/text/TextAnimator.cpp +++ b/modules/skottie/src/text/TextAnimator.cpp @@ -123,8 +123,9 @@ TextAnimator::ResolvedProps TextAnimator::modulateProps(const ResolvedProps& pro modulated_props.scale *= SkV3{1,1,1} + (static_cast(fTextProps.scale) * 0.01f - SkV3{1,1,1}) * amount; - // ... as does blur - modulated_props.blur += fTextProps.blur * amount; + // ... as does blur and line spacing + modulated_props.blur += fTextProps.blur * amount; + modulated_props.line_spacing += fTextProps.line_spacing * amount; const auto lerp_color = [](SkColor c0, SkColor c1, float t) { const auto c0_4f = SkNx_cast(Sk4b::Load(&c0)), @@ -158,9 +159,10 @@ TextAnimator::TextAnimator(std::vector>&& selectors, : fSelectors(std::move(selectors)) , fRequiresAnchorPoint(false) { - acontainer->bind(*abuilder, jprops["p"], fTextProps.position); - acontainer->bind(*abuilder, jprops["o"], fTextProps.opacity ); - acontainer->bind(*abuilder, jprops["t"], fTextProps.tracking); + acontainer->bind(*abuilder, jprops["p" ], fTextProps.position); + acontainer->bind(*abuilder, jprops["o" ], fTextProps.opacity ); + acontainer->bind(*abuilder, jprops["t" ], fTextProps.tracking); + acontainer->bind(*abuilder, jprops["ls"], fTextProps.line_spacing); // Scale and rotation are anchor-point-dependent. fRequiresAnchorPoint |= acontainer->bind(*abuilder, jprops["s"], fTextProps.scale); diff --git a/modules/skottie/src/text/TextAnimator.h b/modules/skottie/src/text/TextAnimator.h index 4215e7b5a2124..5a16131c85211 100644 --- a/modules/skottie/src/text/TextAnimator.h +++ b/modules/skottie/src/text/TextAnimator.h @@ -38,7 +38,8 @@ class TextAnimator final : public SkNVRefCnt { stroke_color; // unlike pos/scale which are animated vectors, rotation is separated in each dimension. SkV3 rotation = { 0, 0, 0 }; - Vec2Value blur = { 0, 0 }; + Vec2Value blur = { 0, 0 }, + line_spacing = { 0, 0 }; ScalarValue opacity = 100, tracking = 0; }; @@ -51,7 +52,8 @@ class TextAnimator final : public SkNVRefCnt { tracking = 0; SkColor fill_color = SK_ColorTRANSPARENT, stroke_color = SK_ColorTRANSPARENT; - SkV2 blur = { 0, 0 }; + SkV2 blur = { 0, 0 }, + line_spacing = { 0, 0 }; }; struct AnimatedPropsModulator { diff --git a/modules/skottie/src/text/TextValue.cpp b/modules/skottie/src/text/TextValue.cpp index f87158d159d24..08741f1b62f7b 100644 --- a/modules/skottie/src/text/TextValue.cpp +++ b/modules/skottie/src/text/TextValue.cpp @@ -63,33 +63,34 @@ bool Parse(const skjson::Value& jv, const internal::AnimationBuilder& abuilder, } } - // Skia resizing extension "sk_rs": static constexpr Shaper::ResizePolicy gResizeMap[] = { - Shaper::ResizePolicy::kNone, // 'sk_rs': 0 - Shaper::ResizePolicy::kScaleToFit, // 'sk_rs': 1 - Shaper::ResizePolicy::kDownscaleToFit, // 'sk_rs': 2 + Shaper::ResizePolicy::kNone, // 'rs': 0 + Shaper::ResizePolicy::kScaleToFit, // 'rs': 1 + Shaper::ResizePolicy::kDownscaleToFit, // 'rs': 2 }; - v->fResize = gResizeMap[std::min(ParseDefault((*jtxt)["sk_rs"], 0), - SK_ARRAY_COUNT(gResizeMap))]; + // TODO: remove "sk_rs" support after migrating clients. + v->fResize = gResizeMap[std::min(std::max(ParseDefault((*jtxt)[ "rs"], 0), + ParseDefault((*jtxt)["sk_rs"], 0)), + SK_ARRAY_COUNT(gResizeMap))]; // In point mode, the text is baseline-aligned. v->fVAlign = v->fBox.isEmpty() ? Shaper::VAlign::kTopBaseline : Shaper::VAlign::kTop; - // Skia vertical alignment extension "sk_vj": static constexpr Shaper::VAlign gVAlignMap[] = { - Shaper::VAlign::kVisualTop, // 'sk_vj': 0 - Shaper::VAlign::kVisualCenter, // 'sk_vj': 1 - Shaper::VAlign::kVisualBottom, // 'sk_vj': 2 + Shaper::VAlign::kVisualTop, // 'vj': 0 + Shaper::VAlign::kVisualCenter, // 'vj': 1 + Shaper::VAlign::kVisualBottom, // 'vj': 2 }; - size_t sk_vj; - if (skottie::Parse((*jtxt)["sk_vj"], &sk_vj)) { - if (sk_vj < SK_ARRAY_COUNT(gVAlignMap)) { - v->fVAlign = gVAlignMap[sk_vj]; + size_t vj; + if (skottie::Parse((*jtxt)[ "vj"], &vj) || + skottie::Parse((*jtxt)["sk_vj"], &vj)) { // TODO: remove after migrating clients. + if (vj < SK_ARRAY_COUNT(gVAlignMap)) { + v->fVAlign = gVAlignMap[vj]; } else { // Legacy sk_vj values. // TODO: remove after clients update. - switch (sk_vj) { + switch (vj) { case 3: // 'sk_vj': 3 -> kVisualCenter/kScaleToFit v->fVAlign = Shaper::VAlign::kVisualCenter; @@ -102,7 +103,7 @@ bool Parse(const skjson::Value& jv, const internal::AnimationBuilder& abuilder, break; default: abuilder.log(Logger::Level::kWarning, nullptr, - "Ignoring unknown 'sk_vj' value: %zu", sk_vj); + "Ignoring unknown 'vj' value: %zu", vj); break; } } diff --git a/modules/skparagraph/include/Paragraph.h b/modules/skparagraph/include/Paragraph.h index d262aae9a6bd3..4e99931830267 100644 --- a/modules/skparagraph/include/Paragraph.h +++ b/modules/skparagraph/include/Paragraph.h @@ -15,8 +15,7 @@ namespace textlayout { class Paragraph { public: - Paragraph(ParagraphStyle style, sk_sp fonts) - : fFontCollection(std::move(fonts)), fParagraphStyle(std::move(style)) {} + Paragraph(ParagraphStyle style, sk_sp fonts); virtual ~Paragraph() = default; diff --git a/modules/skparagraph/include/ParagraphCache.h b/modules/skparagraph/include/ParagraphCache.h index bd89c274a9383..1d477a1b1305a 100644 --- a/modules/skparagraph/include/ParagraphCache.h +++ b/modules/skparagraph/include/ParagraphCache.h @@ -13,12 +13,12 @@ namespace textlayout { enum InternalState { kUnknown = 0, - kShaped = 1, - kClusterized = 2, - kMarked = 3, - kLineBroken = 4, - kFormatted = 5, - kDrawn = 6 + kShaped = 2, + kClusterized = 3, + kMarked = 4, + kLineBroken = 5, + kFormatted = 6, + kDrawn = 7 }; class ParagraphImpl; diff --git a/modules/skparagraph/include/TypefaceFontProvider.h b/modules/skparagraph/include/TypefaceFontProvider.h index 2e83912c6da90..727659d85d80f 100644 --- a/modules/skparagraph/include/TypefaceFontProvider.h +++ b/modules/skparagraph/include/TypefaceFontProvider.h @@ -67,9 +67,7 @@ class TypefaceFontProvider : public SkFontMgr { const SkFontArguments&) const override { return nullptr; } - sk_sp onMakeFromFontData(std::unique_ptr) const override { - return nullptr; - } + sk_sp onMakeFromFontData(std::unique_ptr) const override; sk_sp onMakeFromFile(const char path[], int ttcIndex) const override { return nullptr; } diff --git a/modules/skparagraph/samples/SampleParagraph.cpp b/modules/skparagraph/samples/SampleParagraph.cpp index ccbb49c8e34c3..28f3207743f47 100644 --- a/modules/skparagraph/samples/SampleParagraph.cpp +++ b/modules/skparagraph/samples/SampleParagraph.cpp @@ -2842,6 +2842,62 @@ class ParagraphView44 : public ParagraphView_Base { typedef Sample INHERITED; }; +class ParagraphView45 : public ParagraphView_Base { +protected: + SkString name() override { return SkString("Paragraph45"); } + + void onDrawContent(SkCanvas* canvas) override { + + // This test crashed when resources/fonts directory had only 5 fonts listed below + std::string fonts = GetResourcePath("fonts/").c_str(); + std::set> font_paths = { + {"Roboto", "Roboto-Regular.ttf"}, + {"Roboto", "Roboto-Bold.ttf"}, + {"Noto","NotoSansCJK-Regular.ttc"}, + {"Noto", "NotoSansCJK-Bold.ttc"}, + {"Emoji","NotoColorEmoji.ttf"}}; + + sk_sp font_provider = sk_make_sp(); + + for (auto& pair : font_paths) { + SkString family_name = SkString(pair.first.c_str()); + std::string path = fonts; + path += pair.second; + + auto data = SkData::MakeFromFileName(path.c_str()); + font_provider->registerTypeface(SkTypeface::MakeFromData(std::move(data)), family_name); + } + + sk_sp font_collection = sk_make_sp(); + font_collection->setAssetFontManager(std::move(font_provider)); + font_collection->getParagraphCache()->turnOn(false); + + const std::u16string text = u"❤️🕵🏾‍♀️ 🕵🏾 👩🏾‍⚕️ 👨🏾‍⚕️ 👩🏾‍🌾 👨🏾‍🌾 👩🏾‍🍳 👨🏾‍🍳 👩🏾‍🎓 👨🏾‍🎓 👩🏾‍🎤 👨🏾‍🎤 👩🏾‍🏫 👨🏾‍🏫 👩🏾‍🏭 👨🏾‍🏭 👩🏾‍💻 👨🏾‍💻 👩🏾‍💼 👨🏾‍💼 👩🏾‍🔧 👨🏾‍🔧 👩🏾‍🔬 👨🏾‍🔬 👩🏾‍🎨 👨🏾‍🎨 👩🏾‍🚒 👨🏾‍🚒 👩🏾‍✈️ 👨🏾‍✈️ 👩🏾‍🚀 👨🏾‍🚀 👩🏾‍⚖️ 👨🏾‍⚖️ 🤶🏾 🎅🏾"; + //u"\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67\uD83C\uDDFA\uD83C\uDDF8"; + + canvas->drawColor(SK_ColorWHITE); + + ParagraphStyle paragraph_style; + paragraph_style.setMaxLines(1); + paragraph_style.setHeight(0); + paragraph_style.setEllipsis(u"\u2026"); + ParagraphBuilderImpl builder(paragraph_style, font_collection); + TextStyle text_style; + text_style.setColor(SK_ColorBLACK); + text_style.setFontFamilies({SkString("Roboto"), SkString("Noto"), SkString("Emoji")}); + text_style.setFontSize(20); + text_style.setFontStyle(SkFontStyle::Bold()); + builder.pushStyle(text_style); + builder.addText(text); + auto paragraph = builder.Build(); + paragraph->layout(width()); + paragraph->paint(canvas, 0, 0); + } + +private: + typedef Sample INHERITED; +}; + } // namespace ////////////////////////////////////////////////////////////////////////////// @@ -2887,3 +2943,4 @@ DEF_SAMPLE(return new ParagraphView41();) DEF_SAMPLE(return new ParagraphView42();) DEF_SAMPLE(return new ParagraphView43();) DEF_SAMPLE(return new ParagraphView44();) +DEF_SAMPLE(return new ParagraphView45();) diff --git a/modules/skparagraph/src/Decorations.cpp b/modules/skparagraph/src/Decorations.cpp index 1a48dd1751940..18a56f0cd9d3b 100644 --- a/modules/skparagraph/src/Decorations.cpp +++ b/modules/skparagraph/src/Decorations.cpp @@ -55,9 +55,9 @@ void Decorations::paint(SkCanvas* canvas, const TextStyle& textStyle, const Text if (drawGaps) { SkScalar left = x - context.fTextShift; canvas->translate(context.fTextShift, 0); - calculateGaps(context, left, left + width, y, y + fThickness, baseline, fThickness); + calculateGaps(context, SkRect::MakeXYWH(left, y, width, fThickness), baseline, fThickness); canvas->drawPath(fPath, fPaint); - calculateGaps(context, left, left + width, bottom, bottom + fThickness, baseline, fThickness); + calculateGaps(context, SkRect::MakeXYWH(left, bottom, width, fThickness), baseline, fThickness); canvas->drawPath(fPath, fPaint); } else { draw_line_as_rect(canvas, x, y, width, fPaint); @@ -70,7 +70,7 @@ void Decorations::paint(SkCanvas* canvas, const TextStyle& textStyle, const Text if (drawGaps) { SkScalar left = x - context.fTextShift; canvas->translate(context.fTextShift, 0); - calculateGaps(context, left, left + width, y, y + fThickness, baseline, 0); + calculateGaps(context, SkRect::MakeXYWH(left, y, width, fThickness), baseline, 0); canvas->drawPath(fPath, fPaint); } else { canvas->drawLine(x, y, x + width, y, fPaint); @@ -80,7 +80,7 @@ void Decorations::paint(SkCanvas* canvas, const TextStyle& textStyle, const Text if (drawGaps) { SkScalar left = x - context.fTextShift; canvas->translate(context.fTextShift, 0); - calculateGaps(context, left, left + width, y, y + fThickness, baseline, fThickness); + calculateGaps(context, SkRect::MakeXYWH(left, y, width, fThickness), baseline, fThickness); canvas->drawPath(fPath, fPaint); } else { draw_line_as_rect(canvas, x, y, width, fPaint); @@ -91,7 +91,7 @@ void Decorations::paint(SkCanvas* canvas, const TextStyle& textStyle, const Text } } -void Decorations::calculateGaps(const TextLine::ClipContext& context, SkScalar x0, SkScalar x1, SkScalar y0, SkScalar y1, SkScalar baseline, SkScalar halo) { +void Decorations::calculateGaps(const TextLine::ClipContext& context, const SkRect& rect, SkScalar baseline, SkScalar halo) { fPath.reset(); @@ -99,27 +99,30 @@ void Decorations::calculateGaps(const TextLine::ClipContext& context, SkScalar x SkTextBlobBuilder builder; context.run->copyTo(builder, SkToU32(context.pos), - context.size, - SkVector::Make(0, baseline)); + context.size); auto blob = builder.make(); - const SkScalar bounds[2] = {y0, y1}; + // Since we do not shift down the text by {baseline} + // (it now happens on drawTextBlob but we do not draw text here) + // we have to shift up the bounds to compensate + // This baseline thing ends with getIntercepts + const SkScalar bounds[2] = {rect.fTop - baseline, rect.fBottom - baseline}; auto count = blob->getIntercepts(bounds, nullptr, &fPaint); SkTArray intersections(count); intersections.resize(count); blob->getIntercepts(bounds, intersections.data(), &fPaint); - auto start = x0; - fPath.moveTo({x0, y0}); + auto start = rect.fLeft; + fPath.moveTo(rect.fLeft, rect.fTop); for (int i = 0; i < intersections.count(); i += 2) { auto end = intersections[i] - halo; if (end - start >= halo) { start = intersections[i + 1] + halo; - fPath.lineTo(end, y0).moveTo(start, y0); + fPath.lineTo(end, rect.fTop).moveTo(start, rect.fTop); } } - if (!intersections.empty() && (x1 - start > halo)) { - fPath.lineTo(x1, y0); + if (!intersections.empty() && (rect.fRight - start > halo)) { + fPath.lineTo(rect.fRight, rect.fTop); } } diff --git a/modules/skparagraph/src/Decorations.h b/modules/skparagraph/src/Decorations.h index c7cbc6fbce2ba..959c40982249e 100644 --- a/modules/skparagraph/src/Decorations.h +++ b/modules/skparagraph/src/Decorations.h @@ -20,7 +20,7 @@ class Decorations { void calculatePosition(TextDecoration decoration, SkScalar ascent); void calculatePaint(const TextStyle& textStyle); void calculateWaves(const TextStyle& textStyle, SkRect clip); - void calculateGaps(const TextLine::ClipContext& context, SkScalar x0, SkScalar x1, SkScalar y0, SkScalar y1, SkScalar baseline, SkScalar halo); + void calculateGaps(const TextLine::ClipContext& context, const SkRect& rect, SkScalar baseline, SkScalar halo); SkScalar fThickness; SkScalar fPosition; diff --git a/modules/skparagraph/src/FontCollection.cpp b/modules/skparagraph/src/FontCollection.cpp index f26ec5780136b..f5802dfaf15a1 100644 --- a/modules/skparagraph/src/FontCollection.cpp +++ b/modules/skparagraph/src/FontCollection.cpp @@ -131,8 +131,8 @@ sk_sp FontCollection::defaultFallback() { if (fDefaultFontManager == nullptr) { return nullptr; } - auto result = fDefaultFontManager->matchFamilyStyle(fDefaultFamilyName.c_str(), SkFontStyle()); - return sk_ref_sp(result); + return sk_sp(fDefaultFontManager->matchFamilyStyle(fDefaultFamilyName.c_str(), + SkFontStyle())); } diff --git a/modules/skparagraph/src/OneLineShaper.cpp b/modules/skparagraph/src/OneLineShaper.cpp index c09b2984581fc..eaa4d0b63be30 100644 --- a/modules/skparagraph/src/OneLineShaper.cpp +++ b/modules/skparagraph/src/OneLineShaper.cpp @@ -222,7 +222,6 @@ void OneLineShaper::finish(TextRange blockText, SkScalar height, SkScalar& advan piece->fBounds[index] = run->fBounds[i]; } piece->fClusterIndexes[index] = run->fClusterIndexes[i]; - piece->fOffsets[index] = run->fOffsets[i]; piece->fPositions[index] = run->fPositions[i] - zero; piece->addX(index, advanceX); } @@ -473,8 +472,7 @@ void OneLineShaper::matchResolvedFonts(const TextStyle& textStyle, bool OneLineShaper::iterateThroughShapingRegions(const ShapeVisitor& shape) { - SkTArray bidiRegions; - if (!fParagraph->calculateBidiRegions(&bidiRegions)) { + if (!fParagraph->getBidiRegions()) { return false; } @@ -485,8 +483,8 @@ bool OneLineShaper::iterateThroughShapingRegions(const ShapeVisitor& shape) { if (placeholder.fTextBefore.width() > 0) { // Shape the text by bidi regions - while (bidiIndex < bidiRegions.size()) { - BidiRegion& bidiRegion = bidiRegions[bidiIndex]; + while (bidiIndex < fParagraph->fBidiRegions.size()) { + BidiRegion& bidiRegion = fParagraph->fBidiRegions[bidiIndex]; auto start = std::max(bidiRegion.text.start, placeholder.fTextBefore.start); auto end = std::min(bidiRegion.text.end, placeholder.fTextBefore.end); @@ -535,7 +533,6 @@ bool OneLineShaper::iterateThroughShapingRegions(const ShapeVisitor& shape) { advanceX); run.fPositions[0] = { advanceX, 0 }; - run.fOffsets[0] = {0, 0}; run.fClusterIndexes[0] = 0; run.fPlaceholderIndex = &placeholder - fParagraph->fPlaceholders.begin(); advanceX += placeholder.fStyle.fWidth; @@ -597,6 +594,11 @@ bool OneLineShaper::shape() { auto unresolvedCount = fUnresolvedBlocks.size(); while (unresolvedCount-- > 0) { auto unresolvedRange = fUnresolvedBlocks.front().fText; + if (unresolvedRange == EMPTY_TEXT) { + // Duplicate blocks should be ignored + fUnresolvedBlocks.pop_front(); + continue; + } auto unresolvedText = fParagraph->text(unresolvedRange); SkShaper::TrivialFontRunIterator fontIter(font, unresolvedText.size()); @@ -645,15 +647,17 @@ TextRange OneLineShaper::clusteredText(GlyphRange& glyphs) { if (dir == Dir::right) { while (index < fCurrentRun->fTextRange.end) { - if (this->fParagraph->fGraphemes.contains(index)) { + if (this->fParagraph->codeUnitHasProperty(index, + CodeUnitFlags::kGraphemeStart)) { return index; } ++index; } return fCurrentRun->fTextRange.end; } else { - while (index >= fCurrentRun->fTextRange.start) { - if (this->fParagraph->fGraphemes.contains(index)) { + while (index > fCurrentRun->fTextRange.start) { + if (this->fParagraph->codeUnitHasProperty(index, + CodeUnitFlags::kGraphemeStart)) { return index; } --index; diff --git a/modules/skparagraph/src/ParagraphCache.cpp b/modules/skparagraph/src/ParagraphCache.cpp index ca47776ceae90..2464acaee6946 100644 --- a/modules/skparagraph/src/ParagraphCache.cpp +++ b/modules/skparagraph/src/ParagraphCache.cpp @@ -35,13 +35,24 @@ class ParagraphCacheValue { public: ParagraphCacheValue(const ParagraphImpl* paragraph) : fKey(ParagraphCacheKey(paragraph)) - , fRuns(paragraph->fRuns) { } + , fRuns(paragraph->fRuns) + , fCodeUnitProperties(paragraph->fCodeUnitProperties) + , fWords(paragraph->fWords) + , fBidiRegions(paragraph->fBidiRegions) + , fUTF8IndexForUTF16Index(paragraph->fUTF8IndexForUTF16Index) + , fUTF16IndexForUTF8Index(paragraph->fUTF16IndexForUTF8Index) { } // Input == key ParagraphCacheKey fKey; // Shaped results SkTArray fRuns; + // ICU results + SkTArray fCodeUnitProperties; + std::vector fWords; + SkTArray fBidiRegions; + SkTArray fUTF8IndexForUTF16Index; + SkTArray fUTF16IndexForUTF8Index; }; uint32_t ParagraphCache::KeyHash::mix(uint32_t hash, uint32_t data) const { @@ -193,6 +204,11 @@ void ParagraphCache::updateTo(ParagraphImpl* paragraph, const Entry* entry) { paragraph->fRuns.reset(); paragraph->fRuns = entry->fValue->fRuns; + paragraph->fCodeUnitProperties = entry->fValue->fCodeUnitProperties; + paragraph->fWords = entry->fValue->fWords; + paragraph->fBidiRegions = entry->fValue->fBidiRegions; + paragraph->fUTF8IndexForUTF16Index = entry->fValue->fUTF8IndexForUTF16Index; + paragraph->fUTF16IndexForUTF8Index = entry->fValue->fUTF16IndexForUTF8Index; for (auto& run : paragraph->fRuns) { run.setMaster(paragraph); } diff --git a/modules/skparagraph/src/ParagraphImpl.cpp b/modules/skparagraph/src/ParagraphImpl.cpp index 533336f324da3..7389ef37d690e 100644 --- a/modules/skparagraph/src/ParagraphImpl.cpp +++ b/modules/skparagraph/src/ParagraphImpl.cpp @@ -1,4 +1,5 @@ // Copyright 2019 Google LLC. + #include "include/core/SkCanvas.h" #include "include/core/SkFontMetrics.h" #include "include/core/SkMatrix.h" @@ -69,39 +70,18 @@ TextRange operator*(const TextRange& a, const TextRange& b) { return end > begin ? TextRange(begin, end) : EMPTY_TEXT; } -bool TextBreaker::initialize(SkSpan text, UBreakIteratorType type) { - #if defined(SK_USING_THIRD_PARTY_ICU) - if (!SkLoadICU()) { - return false; - } - #endif - - UErrorCode status = U_ZERO_ERROR; - fIterator = nullptr; - fSize = text.size(); - UText sUtf8UText = UTEXT_INITIALIZER; - std::unique_ptr> utf8UText( - utext_openUTF8(&sUtf8UText, text.begin(), text.size(), &status)); - if (U_FAILURE(status)) { - SkDEBUGF("Could not create utf8UText: %s", u_errorName(status)); - return false; - } - fIterator.reset(ubrk_open(type, "en", nullptr, 0, &status)); - if (U_FAILURE(status)) { - SkDEBUGF("Could not create line break iterator: %s", u_errorName(status)); - SK_ABORT(""); - } - - ubrk_setUText(fIterator.get(), utf8UText.get(), &status); - if (U_FAILURE(status)) { - SkDEBUGF("Could not setText on break iterator: %s", u_errorName(status)); - return false; - } - - fInitialized = true; - fPos = 0; - return true; -} +Paragraph::Paragraph(ParagraphStyle style, sk_sp fonts) + : fFontCollection(std::move(fonts)) + , fParagraphStyle(std::move(style)) + , fAlphabeticBaseline(0) + , fIdeographicBaseline(0) + , fHeight(0) + , fWidth(0) + , fMaxIntrinsicWidth(0) + , fMinIntrinsicWidth(0) + , fLongestLine(0) + , fExceededMaxLines(0) +{ } ParagraphImpl::ParagraphImpl(const SkString& text, ParagraphStyle style, @@ -119,7 +99,6 @@ ParagraphImpl::ParagraphImpl(const SkString& text, , fOldWidth(0) , fOldHeight(0) , fOrigin(SkRect::MakeEmpty()) { - // TODO: extractStyles(); } ParagraphImpl::ParagraphImpl(const std::u16string& utf16text, @@ -127,19 +106,12 @@ ParagraphImpl::ParagraphImpl(const std::u16string& utf16text, SkTArray blocks, SkTArray placeholders, sk_sp fonts) - : Paragraph(std::move(style), std::move(fonts)) - , fTextStyles(std::move(blocks)) - , fPlaceholders(std::move(placeholders)) - , fText(SkStringFromU16String(utf16text)) - , fState(kUnknown) - , fUnresolvedGlyphs(0) - , fPicture(nullptr) - , fStrutMetrics(false) - , fOldWidth(0) - , fOldHeight(0) - , fOrigin(SkRect::MakeEmpty()) { - // TODO: extractStyles(); -} + : ParagraphImpl(SkStringFromU16String(utf16text), + std::move(style), + std::move(blocks), + std::move(placeholders), + std::move(fonts)) +{ } ParagraphImpl::~ParagraphImpl() = default; @@ -155,22 +127,28 @@ void ParagraphImpl::layout(SkScalar rawWidth) { // TODO: This rounding is done to match Flutter tests. Must be removed... auto floorWidth = SkScalarFloorToScalar(rawWidth); - if (fState < kShaped) { - // Layout marked as dirty for performance/testing reasons - this->fRuns.reset(); - this->fClusters.reset(); - this->resetShifts(); - } else if (fState >= kLineBroken && (fOldWidth != floorWidth || fOldHeight != fHeight)) { + + if ((!SkScalarIsFinite(rawWidth) || fLongestLine <= floorWidth) && + fState >= kLineBroken && + fLines.size() == 1 && fLines.front().ellipsis() == nullptr) { + // Most common case: one line of text (and one line is never justified, so no cluster shifts) + fWidth = floorWidth; + fState = kLineBroken; + } else if (fState >= kLineBroken && fOldWidth != floorWidth) { // We can use the results from SkShaper but have to do EVERYTHING ELSE again - this->fClusters.reset(); - this->resetShifts(); fState = kShaped; + } else { + // Nothing changed case: we can reuse the data from the last layout } if (fState < kShaped) { - fGraphemes.reset(); - this->markGraphemes(); - + this->fCodeUnitProperties.reset(); + this->fCodeUnitProperties.push_back_n(fText.size() + 1, CodeUnitFlags::kNoCodeUnitFlag); + this->fWords.clear(); + this->fBidiRegions.reset(); + this->fUTF8IndexForUTF16Index.reset(); + this->fUTF16IndexForUTF8Index.reset(); + this->fRuns.reset(); if (!this->shapeTextIntoEndlessLine()) { this->resetContext(); // TODO: merge the two next calls - they always come together @@ -187,6 +165,7 @@ void ParagraphImpl::layout(SkScalar rawWidth) { } fAlphabeticBaseline = fEmptyMetrics.alphabeticBaseline(); fIdeographicBaseline = fEmptyMetrics.ideographicBaseline(); + fLongestLine = FLT_MIN - FLT_MAX; // That is what flutter has fMinIntrinsicWidth = 0; fMaxIntrinsicWidth = 0; this->fOldWidth = floorWidth; @@ -194,27 +173,20 @@ void ParagraphImpl::layout(SkScalar rawWidth) { return; } - - this->fClusters.reset(); - this->resetShifts(); fState = kShaped; } if (fState < kMarked) { + this->fClusters.reset(); + this->resetShifts(); + this->fClustersIndexFromCodeUnit.reset(); + this->fClustersIndexFromCodeUnit.push_back_n(fText.size() + 1, EMPTY_INDEX); this->buildClusterTable(); fState = kClusterized; - - this->markLineBreaks(); this->spaceGlyphs(); fState = kMarked; } - if (fState >= kLineBroken) { - if (fOldWidth != floorWidth || fOldHeight != fHeight) { - fState = kMarked; - } - } - if (fState < kLineBroken) { this->resetContext(); this->resolveStrut(); @@ -272,6 +244,246 @@ void ParagraphImpl::resetContext() { fExceededMaxLines = false; } +class TextBreaker { +public: + TextBreaker() : fInitialized(false), fPos(-1) {} + + bool initialize(SkSpan text, UBreakIteratorType type) { + + UErrorCode status = U_ZERO_ERROR; + fIterator = nullptr; + fSize = text.size(); + UText sUtf8UText = UTEXT_INITIALIZER; + std::unique_ptr> utf8UText( + utext_openUTF8(&sUtf8UText, text.begin(), text.size(), &status)); + if (U_FAILURE(status)) { + SkDEBUGF("Could not create utf8UText: %s", u_errorName(status)); + return false; + } + fIterator.reset(ubrk_open(type, "en", nullptr, 0, &status)); + if (U_FAILURE(status)) { + SkDEBUGF("Could not create line break iterator: %s", u_errorName(status)); + SK_ABORT(""); + } + + ubrk_setUText(fIterator.get(), utf8UText.get(), &status); + if (U_FAILURE(status)) { + SkDEBUGF("Could not setText on break iterator: %s", u_errorName(status)); + return false; + } + + fInitialized = true; + fPos = 0; + return true; + } + + bool initialized() const { return fInitialized; } + + size_t first() { + fPos = ubrk_first(fIterator.get()); + return eof() ? fSize : fPos; + } + + size_t next() { + fPos = ubrk_next(fIterator.get()); + return eof() ? fSize : fPos; + } + + size_t preceding(size_t offset) { + auto pos = ubrk_preceding(fIterator.get(), offset); + return pos == UBRK_DONE ? 0 : pos; + } + + size_t following(size_t offset) { + auto pos = ubrk_following(fIterator.get(), offset); + return pos == UBRK_DONE ? fSize : pos; + } + + int32_t status() { return ubrk_getRuleStatus(fIterator.get()); } + + bool eof() { return fPos == UBRK_DONE; } + +private: + std::unique_ptr> fIterator; + bool fInitialized; + int32_t fPos; + size_t fSize; +}; + +// shapeTextIntoEndlessLine is the thing that calls this method +// (that contains all ICU dependencies except for words) +bool ParagraphImpl::computeCodeUnitProperties() { + + #if defined(SK_USING_THIRD_PARTY_ICU) + if (!SkLoadICU()) { + return false; + } + #endif + + { + const char* start = fText.c_str(); + const char* end = start + fText.size(); + const char* ch = start; + while (ch < end) { + auto index = ch - start; + auto unichar = utf8_next(&ch, end); + if (u_isWhitespace(unichar)) { + auto ending = ch - start; + for (auto k = index; k < ending; ++k) { + fCodeUnitProperties[k] |= CodeUnitFlags::kPartOfWhiteSpace; + } + } + } + } + { + TextBreaker breaker; + if (!breaker.initialize(this->text(), UBRK_LINE)) { + return false; + } + while (!breaker.eof()) { + size_t currentPos = breaker.next(); + fCodeUnitProperties[currentPos] |= + breaker.status() == UBRK_LINE_HARD ? CodeUnitFlags::kHardLineBreakBefore : CodeUnitFlags::kSoftLineBreakBefore; + } + } + { + TextBreaker breaker; + if (!breaker.initialize(this->text(), UBRK_CHARACTER)) { + return false; + } + + while (!breaker.eof()) { + auto currentPos = breaker.next(); + fCodeUnitProperties[currentPos] |= CodeUnitFlags::kGraphemeStart; + } + } + + return true; +} + +// getWordBoundary is the thing that calls this method lazily +bool ParagraphImpl::computeWords() { + + if (!fWords.empty()) { + return true; + } + + UErrorCode errorCode = U_ZERO_ERROR; + + auto iter = ubrk_open(UBRK_WORD, uloc_getDefault(), nullptr, 0, &errorCode); + if (U_FAILURE(errorCode)) { + SkDEBUGF("Could not create line break iterator: %s", u_errorName(errorCode)); + return false; + } + + // Getting the length like this seems to always set U_BUFFER_OVERFLOW_ERROR + int32_t utf16Units; + u_strFromUTF8(nullptr, 0, &utf16Units, fText.c_str(), fText.size(), &errorCode); + errorCode = U_ZERO_ERROR; + std::unique_ptr utf16(new UChar[utf16Units]); + u_strFromUTF8(utf16.get(), utf16Units, nullptr, fText.c_str(), fText.size(), &errorCode); + if (U_FAILURE(errorCode)) { + SkDEBUGF("Invalid utf8 input: %s", u_errorName(errorCode)); + return false; + } + + UText sUtf16UText = UTEXT_INITIALIZER; + ICUUText utf8UText(utext_openUChars(&sUtf16UText, utf16.get(), utf16Units, &errorCode)); + if (U_FAILURE(errorCode)) { + SkDEBUGF("Could not create utf8UText: %s", u_errorName(errorCode)); + return false; + } + + ubrk_setUText(iter, utf8UText.get(), &errorCode); + if (U_FAILURE(errorCode)) { + SkDEBUGF("Could not setText on break iterator: %s", u_errorName(errorCode)); + return false; + } + + int32_t pos = ubrk_first(iter); + while (pos != UBRK_DONE) { + fWords.emplace_back(pos); + pos = ubrk_next(iter); + } + + return true; +} + +bool ParagraphImpl::getBidiRegions() { + + if (!fBidiRegions.empty()) { + return true; + } + + // ubidi only accepts utf16 (though internally it basically works on utf32 chars). + // We want an ubidi_setPara(UBiDi*, UText*, UBiDiLevel, UBiDiLevel*, UErrorCode*); + size_t utf8Bytes = fText.size(); + const char* utf8 = fText.c_str(); + uint8_t bidiLevel = fParagraphStyle.getTextDirection() == TextDirection::kLtr + ? UBIDI_LTR + : UBIDI_RTL; + if (!SkTFitsIn(utf8Bytes)) { + SkDEBUGF("Bidi error: text too long"); + return false; + } + + // Getting the length like this seems to always set U_BUFFER_OVERFLOW_ERROR + UErrorCode status = U_ZERO_ERROR; + int32_t utf16Units; + u_strFromUTF8(nullptr, 0, &utf16Units, utf8, utf8Bytes, &status); + status = U_ZERO_ERROR; + std::unique_ptr utf16(new UChar[utf16Units]); + u_strFromUTF8(utf16.get(), utf16Units, nullptr, utf8, utf8Bytes, &status); + if (U_FAILURE(status)) { + SkDEBUGF("Invalid utf8 input: %s", u_errorName(status)); + return false; + } + + ICUBiDi bidi(ubidi_openSized(utf16Units, 0, &status)); + if (U_FAILURE(status)) { + SkDEBUGF("Bidi error: %s", u_errorName(status)); + return false; + } + SkASSERT(bidi); + + // The required lifetime of utf16 isn't well documented. + // It appears it isn't used after ubidi_setPara except through ubidi_getText. + ubidi_setPara(bidi.get(), utf16.get(), utf16Units, bidiLevel, nullptr, &status); + if (U_FAILURE(status)) { + SkDEBUGF("Bidi error: %s", u_errorName(status)); + return false; + } + + SkTArray bidiRegions; + const char* start8 = utf8; + const char* end8 = utf8 + utf8Bytes; + TextRange textRange(0, 0); + UBiDiLevel currentLevel = 0; + + int32_t pos16 = 0; + int32_t end16 = ubidi_getLength(bidi.get()); + while (pos16 < end16) { + auto level = ubidi_getLevelAt(bidi.get(), pos16); + if (pos16 == 0) { + currentLevel = level; + } else if (level != currentLevel) { + textRange.end = start8 - utf8; + fBidiRegions.emplace_back(textRange.start, textRange.end, currentLevel); + currentLevel = level; + textRange = TextRange(textRange.end, textRange.end); + } + SkUnichar u = utf8_next(&start8, end8); + pos16 += SkUTF::ToUTF16(u); + } + + textRange.end = start8 - utf8; + if (!textRange.empty()) { + fBidiRegions.emplace_back(textRange.start, textRange.end, currentLevel); + } + + return true; +} + // Clusters in the order of the input text void ParagraphImpl::buildClusterTable() { @@ -280,14 +492,14 @@ void ParagraphImpl::buildClusterTable() { auto runIndex = run.index(); auto runStart = fClusters.size(); if (run.isPlaceholder()) { - // There are no glyphs but we want to have one cluster - SkSpan text = this->text(run.textRange()); - if (!fClusters.empty()) { - fClusters.back().setBreakType(Cluster::SoftLineBreak); + // Add info to cluster indexes table (text -> cluster) + for (auto i = run.textRange().start; i < run.textRange().end; ++i) { + fClustersIndexFromCodeUnit[i] = fClusters.size(); } - auto& cluster = fClusters.emplace_back(this, runIndex, 0ul, 1ul, text, run.advance().fX, - run.advance().fY); - cluster.setBreakType(Cluster::SoftLineBreak); + // There are no glyphs but we want to have one cluster + fClusters.emplace_back(this, runIndex, 0ul, 1ul, this->text(run.textRange()), run.advance().fX, run.advance().fY); + fCodeUnitProperties[run.textRange().start] |= CodeUnitFlags::kSoftLineBreakBefore; + fCodeUnitProperties[run.textRange().end] |= CodeUnitFlags::kSoftLineBreakBefore; } else { fClusters.reserve(fClusters.size() + run.size()); // Walk through the glyph in the direction of input text @@ -298,20 +510,20 @@ void ParagraphImpl::buildClusterTable() { SkScalar width, SkScalar height) { SkASSERT(charEnd >= charStart); - SkSpan text(fText.c_str() + charStart, charEnd - charStart); - auto& cluster = fClusters.emplace_back(this, runIndex, glyphStart, glyphEnd, text, - width, height); - cluster.setIsWhiteSpaces(); - if (fGraphemes.find(cluster.fTextRange.end) != nullptr) { - cluster.setBreakType(Cluster::BreakType::GraphemeBreak); + // Add info to cluster indexes table (text -> cluster) + for (auto i = charStart; i < charEnd; ++i) { + fClustersIndexFromCodeUnit[i] = fClusters.size(); } + SkSpan text(fText.c_str() + charStart, charEnd - charStart); + fClusters.emplace_back(this, runIndex, glyphStart, glyphEnd, text, width, height); }); } run.setClusterRange(runStart, fClusters.size()); fMaxIntrinsicWidth += run.advance().fX; } - fClusters.emplace_back(this, EMPTY_RUN, 0, 0, SkSpan(), 0, 0); + fClustersIndexFromCodeUnit[fText.size()] = fClusters.size(); + fClusters.emplace_back(this, EMPTY_RUN, 0, 0, this->text({fText.size(), fText.size()}), 0, 0); } void ParagraphImpl::spaceGlyphs() { @@ -360,41 +572,6 @@ void ParagraphImpl::spaceGlyphs() { } } -void ParagraphImpl::markLineBreaks() { - - // Find all possible (soft) line breaks - // This iterator is used only once for a paragraph so we don't have to keep it - TextBreaker breaker; - if (!breaker.initialize(this->text(), UBRK_LINE)) { - return; - } - - // Mark all soft line breaks - // Remove soft line breaks that are not on grapheme cluster edge - Cluster* current = fClusters.begin(); - while (!breaker.eof() && current < fClusters.end()) { - size_t currentPos = breaker.next(); - while (current < fClusters.end()) { - if (current->textRange().end > currentPos) { - break; - } else if (current->textRange().end == currentPos) { - if (breaker.status() == UBRK_LINE_HARD) { - // Hard line break stronger than anything - current->setBreakType(Cluster::BreakType::HardLineBreak); - } else if (current->isGraphemeBreak()) { - // Only allow soft line break if it's grapheme break - current->setBreakType(Cluster::BreakType::SoftLineBreak); - } else { - // Leave it as is (either it's no break or a placeholder) - } - ++current; - break; - } - ++current; - } - } -} - bool ParagraphImpl::shapeTextIntoEndlessLine() { if (fText.size() == 0) { @@ -406,6 +583,10 @@ bool ParagraphImpl::shapeTextIntoEndlessLine() { return true; } + if (!computeCodeUnitProperties()) { + return false; + } + fFontSwitches.reset(); OneLineShaper oneLineShaper(this); @@ -582,76 +763,6 @@ TextLine& ParagraphImpl::addLine(SkVector offset, return fLines.emplace_back(this, offset, advance, blocks, text, textWithSpaces, clusters, clustersWithGhosts, widthWithSpaces, sizes); } -void ParagraphImpl::markGraphemes16() { - - if (!fGraphemes16.empty()) { - return; - } - - // This breaker gets called only once for a paragraph so we don't have to keep it - TextBreaker breaker; - if (!breaker.initialize(this->text(), UBRK_CHARACTER)) { - return; - } - - auto ptr = fText.c_str(); - auto end = fText.c_str() + fText.size(); - while (ptr < end) { - - size_t index = ptr - fText.c_str(); - SkUnichar u = SkUTF::NextUTF8(&ptr, end); - uint16_t buffer[2]; - size_t count = SkUTF::ToUTF16(u, buffer); - fCodePoints.emplace_back(EMPTY_INDEX, index, count > 1 ? 2 : 1); - if (count > 1) { - fCodePoints.emplace_back(EMPTY_INDEX, index, 1); - } - } - - CodepointRange codepoints(0ul, 0ul); - - size_t endPos = 0; - while (!breaker.eof()) { - auto startPos = endPos; - endPos = breaker.next(); - - // Collect all the codepoints that belong to the grapheme - while (codepoints.end < fCodePoints.size() && fCodePoints[codepoints.end].fTextIndex < endPos) { - ++codepoints.end; - } - - if (startPos == endPos) { - continue; - } - - //SkDebugf("Grapheme #%d [%d:%d)\n", fGraphemes16.size(), startPos, endPos); - - // Update all the codepoints that belong to this grapheme - for (auto i = codepoints.start; i < codepoints.end; ++i) { - //SkDebugf(" [%d] = %d + %d\n", i, fCodePoints[i].fTextIndex, fCodePoints[i].fIndex); - fCodePoints[i].fGrapheme = fGraphemes16.size(); - } - - fGraphemes16.emplace_back(codepoints, TextRange(startPos, endPos)); - codepoints.start = codepoints.end; - } -} - -void ParagraphImpl::markGraphemes() { - - // This breaker gets called only once for a paragraph so we don't have to keep it - TextBreaker breaker; - if (!breaker.initialize(this->text(), UBRK_CHARACTER)) { - return; - } - - auto endPos = breaker.first(); - while (!breaker.eof()) { - fGraphemes.add(endPos); - endPos = breaker.next(); - } -} - // Returns a vector of bounding boxes that enclose all text between // start and end glyph indexes, including start and excluding end std::vector ParagraphImpl::getRectsForRange(unsigned start, @@ -668,9 +779,9 @@ std::vector ParagraphImpl::getRectsForRange(unsigned start, return results; } - markGraphemes16(); + ensureUTF16Mapping(); - if (start >= end || start > fCodePoints.size() || end == 0) { + if (start >= end || start > fUTF8IndexForUTF16Index.size() || end == 0) { return results; } @@ -683,16 +794,11 @@ std::vector ParagraphImpl::getRectsForRange(unsigned start, // One flutter test fails because of it but the editing experience is correct // (although you have to press the cursor many times before it moves to the next grapheme). TextRange text(fText.size(), fText.size()); - if (start < fCodePoints.size()) { - auto codepoint = fCodePoints[start]; - auto grapheme = fGraphemes16[codepoint.fGrapheme]; - text.start = grapheme.fTextRange.start; + if (start < fUTF8IndexForUTF16Index.size()) { + text.start = findGraphemeStart(fUTF8IndexForUTF16Index[start]); } - - if (end < fCodePoints.size()) { - auto codepoint = fCodePoints[end]; - auto grapheme = fGraphemes16[codepoint.fGrapheme]; - text.end = grapheme.fTextRange.start; + if (end < fUTF8IndexForUTF16Index.size()) { + text.end = findGraphemeStart(fUTF8IndexForUTF16Index[end]); } for (auto& line : fLines) { @@ -750,7 +856,8 @@ PositionWithAffinity ParagraphImpl::getGlyphPositionAtCoordinate(SkScalar dx, Sk return {0, Affinity::kDownstream}; } - markGraphemes16(); + ensureUTF16Mapping(); + for (auto& line : fLines) { // Let's figure out if we can stop looking auto offsetY = line.offset().fY; @@ -775,44 +882,9 @@ PositionWithAffinity ParagraphImpl::getGlyphPositionAtCoordinate(SkScalar dx, Sk // the glyph at index offset. // By "glyph" they mean a character index - indicated by Minikin's code SkRange ParagraphImpl::getWordBoundary(unsigned offset) { - if (fWords.empty()) { - UErrorCode errorCode = U_ZERO_ERROR; - auto iter = ubrk_open(UBRK_WORD, uloc_getDefault(), nullptr, 0, &errorCode); - if (U_FAILURE(errorCode)) { - SkDEBUGF("Could not create line break iterator: %s", u_errorName(errorCode)); - return {0, 0}; - } - - // Getting the length like this seems to always set U_BUFFER_OVERFLOW_ERROR - int32_t utf16Units; - u_strFromUTF8(nullptr, 0, &utf16Units, fText.c_str(), fText.size(), &errorCode); - errorCode = U_ZERO_ERROR; - std::unique_ptr utf16(new UChar[utf16Units]); - u_strFromUTF8(utf16.get(), utf16Units, nullptr, fText.c_str(), fText.size(), &errorCode); - if (U_FAILURE(errorCode)) { - SkDEBUGF("Invalid utf8 input: %s", u_errorName(errorCode)); - return {0, 0}; - } - - UText sUtf16UText = UTEXT_INITIALIZER; - ICUUText utf8UText(utext_openUChars(&sUtf16UText, utf16.get(), utf16Units, &errorCode)); - if (U_FAILURE(errorCode)) { - SkDEBUGF("Could not create utf8UText: %s", u_errorName(errorCode)); - return {0, 0}; - } - - ubrk_setUText(iter, utf8UText.get(), &errorCode); - if (U_FAILURE(errorCode)) { - SkDEBUGF("Could not setText on break iterator: %s", u_errorName(errorCode)); - return {0, 0}; - } - - int32_t pos = ubrk_first(iter); - while (pos != UBRK_DONE) { - fWords.emplace_back(pos); - pos = ubrk_next(iter); - } + if (!computeWords()) { + return {0, 0 }; } int32_t start = 0; @@ -827,10 +899,36 @@ SkRange ParagraphImpl::getWordBoundary(unsigned offset) { break; } } + //SkDebugf("getWordBoundary(%d): %d - %d\n", offset, start, end); return { SkToU32(start), SkToU32(end) }; } +void ParagraphImpl::forEachCodeUnitPropertyRange(CodeUnitFlags property, CodeUnitRangeVisitor visitor) { + + size_t first = 0; + for (size_t i = 1; i < fText.size(); ++i) { + auto properties = fCodeUnitProperties[i]; + if (properties & property) { + visitor({first, i}); + first = i; + } + + } + visitor({first, fText.size()}); +} + +size_t ParagraphImpl::getWhitespacesLength(TextRange textRange) { + size_t len = 0; + for (auto i = textRange.start; i < textRange.end; ++i) { + auto properties = fCodeUnitProperties[i]; + if (properties & CodeUnitFlags::kPartOfWhiteSpace) { + ++len; + } + } + return len; +} + void ParagraphImpl::getLineMetrics(std::vector& metrics) { metrics.clear(); for (auto& line : fLines) { @@ -854,11 +952,6 @@ Cluster& ParagraphImpl::cluster(ClusterIndex clusterIndex) { return fClusters[clusterIndex]; } -Run& ParagraphImpl::run(RunIndex runIndex) { - SkASSERT(runIndex < fRuns.size()); - return fRuns[runIndex]; -} - Run& ParagraphImpl::runByCluster(ClusterIndex clusterIndex) { auto start = cluster(clusterIndex); return this->run(start.fRunIndex); @@ -884,8 +977,18 @@ void ParagraphImpl::setState(InternalState state) { switch (fState) { case kUnknown: fRuns.reset(); + fCodeUnitProperties.reset(); + fCodeUnitProperties.push_back_n(fText.size() + 1, kNoCodeUnitFlag); + fWords.clear(); + fBidiRegions.reset(); + fUTF8IndexForUTF16Index.reset(); + fUTF16IndexForUTF8Index.reset(); + [[fallthrough]]; + case kShaped: fClusters.reset(); + [[fallthrough]]; + case kClusterized: case kMarked: case kLineBroken: @@ -894,12 +997,15 @@ void ParagraphImpl::setState(InternalState state) { this->computeEmptyMetrics(); this->resetShifts(); fLines.reset(); + [[fallthrough]]; + case kFormatted: fPicture = nullptr; + [[fallthrough]]; + case kDrawn: + default: break; - default: - break; } } @@ -981,77 +1087,46 @@ void ParagraphImpl::updateBackgroundPaint(size_t from, size_t to, SkPaint paint) } } -bool ParagraphImpl::calculateBidiRegions(SkTArray* regions) { - - regions->reset(); - - // ubidi only accepts utf16 (though internally it basically works on utf32 chars). - // We want an ubidi_setPara(UBiDi*, UText*, UBiDiLevel, UBiDiLevel*, UErrorCode*); - size_t utf8Bytes = fText.size(); - const char* utf8 = fText.c_str(); - uint8_t bidiLevel = fParagraphStyle.getTextDirection() == TextDirection::kLtr - ? UBIDI_LTR - : UBIDI_RTL; - if (!SkTFitsIn(utf8Bytes)) { - SkDEBUGF("Bidi error: text too long"); - return false; +TextIndex ParagraphImpl::findGraphemeStart(TextIndex index) { + if (index == fText.size()) { + return index; } - - // Getting the length like this seems to always set U_BUFFER_OVERFLOW_ERROR - UErrorCode status = U_ZERO_ERROR; - int32_t utf16Units; - u_strFromUTF8(nullptr, 0, &utf16Units, utf8, utf8Bytes, &status); - status = U_ZERO_ERROR; - std::unique_ptr utf16(new UChar[utf16Units]); - u_strFromUTF8(utf16.get(), utf16Units, nullptr, utf8, utf8Bytes, &status); - if (U_FAILURE(status)) { - SkDEBUGF("Invalid utf8 input: %s", u_errorName(status)); - return false; - } - - ICUBiDi bidi(ubidi_openSized(utf16Units, 0, &status)); - if (U_FAILURE(status)) { - SkDEBUGF("Bidi error: %s", u_errorName(status)); - return false; + while (index > 0 && + (fCodeUnitProperties[index] & CodeUnitFlags::kGraphemeStart) == 0) { + --index; } - SkASSERT(bidi); + return index; +} - // The required lifetime of utf16 isn't well documented. - // It appears it isn't used after ubidi_setPara except through ubidi_getText. - ubidi_setPara(bidi.get(), utf16.get(), utf16Units, bidiLevel, nullptr, &status); - if (U_FAILURE(status)) { - SkDEBUGF("Bidi error: %s", u_errorName(status)); - return false; +void ParagraphImpl::ensureUTF16Mapping() { + if (!fUTF16IndexForUTF8Index.empty()) { + return; } + // Fill out code points 16 + auto ptr = fText.c_str(); + auto end = fText.c_str() + fText.size(); + while (ptr < end) { - SkTArray bidiRegions; - const char* start8 = utf8; - const char* end8 = utf8 + utf8Bytes; - TextRange textRange(0, 0); - UBiDiLevel currentLevel = 0; + size_t index = ptr - fText.c_str(); + SkUnichar u = SkUTF::NextUTF8(&ptr, end); - int32_t pos16 = 0; - int32_t end16 = ubidi_getLength(bidi.get()); - while (pos16 < end16) { - auto level = ubidi_getLevelAt(bidi.get(), pos16); - if (pos16 == 0) { - currentLevel = level; - } else if (level != currentLevel) { - textRange.end = start8 - utf8; - regions->emplace_back(textRange.start, textRange.end, currentLevel); - currentLevel = level; - textRange = TextRange(textRange.end, textRange.end); + // All utf8 units refer to the same codepoint + size_t next = ptr - fText.c_str(); + for (auto i = index; i < next; ++i) { + fUTF16IndexForUTF8Index.emplace_back(fUTF8IndexForUTF16Index.size()); } - SkUnichar u = utf8_next(&start8, end8); - pos16 += SkUTF::ToUTF16(u); - } + SkASSERT(fUTF16IndexForUTF8Index.size() == next); - textRange.end = start8 - utf8; - if (!textRange.empty()) { - regions->emplace_back(textRange.start, textRange.end, currentLevel); + // One or two codepoints refer to the same text index + uint16_t buffer[2]; + size_t count = SkUTF::ToUTF16(u, buffer); + fUTF8IndexForUTF16Index.emplace_back(index); + if (count > 1) { + fUTF8IndexForUTF16Index.emplace_back(index); + } } - - return true; + fUTF16IndexForUTF8Index.emplace_back(fUTF8IndexForUTF16Index.size()); + fUTF8IndexForUTF16Index.emplace_back(fText.size()); } } // namespace textlayout diff --git a/modules/skparagraph/src/ParagraphImpl.h b/modules/skparagraph/src/ParagraphImpl.h index 3a1b1fd1d32ba..bda3d1fed3bd9 100644 --- a/modules/skparagraph/src/ParagraphImpl.h +++ b/modules/skparagraph/src/ParagraphImpl.h @@ -11,6 +11,7 @@ #include "include/core/SkScalar.h" #include "include/core/SkString.h" #include "include/core/SkTypes.h" +#include "include/private/SkBitmaskEnum.h" #include "include/private/SkTArray.h" #include "include/private/SkTHash.h" #include "include/private/SkTemplates.h" @@ -34,6 +35,23 @@ class SkCanvas; namespace skia { namespace textlayout { +enum CodeUnitFlags { + kNoCodeUnitFlag = 0x0, + kPartOfWhiteSpace = 0x1, + kGraphemeStart = 0x2, + kSoftLineBreakBefore = 0x4, + kHardLineBreakBefore = 0x8, +}; +} +} + +namespace sknonstd { +template <> struct is_bitmask_enum : std::true_type {}; +} + +namespace skia { +namespace textlayout { + class LineMetrics; class TextLine; @@ -73,45 +91,6 @@ struct BidiRegion { uint8_t direction; }; -class TextBreaker { -public: - TextBreaker() : fInitialized(false), fPos(-1) {} - - bool initialize(SkSpan text, UBreakIteratorType type); - - bool initialized() const { return fInitialized; } - - size_t first() { - fPos = ubrk_first(fIterator.get()); - return eof() ? fSize : fPos; - } - - size_t next() { - fPos = ubrk_next(fIterator.get()); - return eof() ? fSize : fPos; - } - - size_t preceding(size_t offset) { - auto pos = ubrk_preceding(fIterator.get(), offset); - return pos == UBRK_DONE ? 0 : pos; - } - - size_t following(size_t offset) { - auto pos = ubrk_following(fIterator.get(), offset); - return pos == UBRK_DONE ? fSize : pos; - } - - int32_t status() { return ubrk_getRuleStatus(fIterator.get()); } - - bool eof() { return fPos == UBRK_DONE; } - -private: - std::unique_ptr> fIterator; - bool fInitialized; - int32_t fPos; - size_t fSize; -}; - class ParagraphImpl final : public Paragraph { public: @@ -159,9 +138,12 @@ class ParagraphImpl final : public Paragraph { const ParagraphStyle& paragraphStyle() const { return fParagraphStyle; } SkSpan clusters() { return SkSpan(fClusters.begin(), fClusters.size()); } sk_sp fontCollection() const { return fFontCollection; } - const SkTHashSet& graphemes() const { return fGraphemes; } - SkSpan codepoints(){ return SkSpan(fCodePoints.begin(), fCodePoints.size()); } void formatLines(SkScalar maxWidth); + void ensureUTF16Mapping(); + TextIndex findGraphemeStart(TextIndex index); + size_t getUTF16Index(TextIndex index) { + return fUTF16IndexForUTF8Index[index]; + } bool strutEnabled() const { return paragraphStyle().getStrutStyle().getStrutEnabled(); } bool strutForceHeight() const { @@ -175,7 +157,16 @@ class ParagraphImpl final : public Paragraph { SkSpan text(TextRange textRange); SkSpan clusters(ClusterRange clusterRange); Cluster& cluster(ClusterIndex clusterIndex); - Run& run(RunIndex runIndex); + ClusterIndex clusterIndex(TextIndex textIndex) { + auto clusterIndex = this->fClustersIndexFromCodeUnit[textIndex]; + SkASSERT(clusterIndex != EMPTY_INDEX); + return clusterIndex; + } + Run& run(RunIndex runIndex) { + SkASSERT(runIndex < fRuns.size()); + return fRuns[runIndex]; + } + Run& runByCluster(ClusterIndex clusterIndex); SkSpan blocks(BlockRange blockRange); Block& block(BlockIndex blockIndex); @@ -193,8 +184,12 @@ class ParagraphImpl final : public Paragraph { void resetContext(); void resolveStrut(); + + bool computeCodeUnitProperties(); + bool computeWords(); + bool getBidiRegions(); + void buildClusterTable(); - void markLineBreaks(); void spaceGlyphs(); bool shapeTextIntoEndlessLine(); void breakShapedTextIntoLines(SkScalar maxWidth); @@ -218,6 +213,12 @@ class ParagraphImpl final : public Paragraph { } } + using CodeUnitRangeVisitor = std::function; + void forEachCodeUnitPropertyRange(CodeUnitFlags property, CodeUnitRangeVisitor visitor); + size_t getWhitespacesLength(TextRange textRange); + + bool codeUnitHasProperty(size_t index, CodeUnitFlags property) const { return (fCodeUnitProperties[index] & property) == property; } + private: friend class ParagraphBuilder; friend class ParagraphCacheKey; @@ -229,13 +230,8 @@ class ParagraphImpl final : public Paragraph { void calculateBoundaries(); - void markGraphemes16(); - void markGraphemes(); - void computeEmptyMetrics(); - bool calculateBidiRegions(SkTArray* regions); - // Input SkTArray> fLetterSpaceStyles; SkTArray> fWordSpaceStyles; @@ -251,9 +247,14 @@ class ParagraphImpl final : public Paragraph { InternalState fState; SkTArray fRuns; // kShaped SkTArray fClusters; // kClusterized (cached: text, word spacing, letter spacing, resolved fonts) - SkTArray fGraphemes16; - SkTArray fCodePoints; - SkTHashSet fGraphemes; + SkTArray fCodeUnitProperties; + SkTArray fClustersIndexFromCodeUnit; + std::vector fWords; + SkTArray fBidiRegions; + // These two arrays are used in measuring methods (getRectsForRange, getGlyphPositionAtCoordinate) + // They are filled lazily whenever they need and cached + SkTArray fUTF8IndexForUTF16Index; + SkTArray fUTF16IndexForUTF8Index; size_t fUnresolvedGlyphs; SkTArray fLines; // kFormatted (cached: width, max lines, ellipsis, text align) @@ -268,9 +269,9 @@ class ParagraphImpl final : public Paragraph { SkScalar fOldHeight; SkScalar fMaxWidthWithTrailingSpaces; SkRect fOrigin; - std::vector fWords; }; } // namespace textlayout } // namespace skia + #endif // ParagraphImpl_DEFINED diff --git a/modules/skparagraph/src/Run.cpp b/modules/skparagraph/src/Run.cpp index 237d45cb5a98d..80c5222f05d60 100644 --- a/modules/skparagraph/src/Run.cpp +++ b/modules/skparagraph/src/Run.cpp @@ -11,34 +11,22 @@ #include "modules/skshaper/include/SkShaper.h" #include "src/utils/SkUTF.h" -#include -#include -#include - -namespace { - -SkUnichar utf8_next(const char** ptr, const char* end) { - SkUnichar val = SkUTF::NextUTF8(ptr, end); - return val < 0 ? 0xFFFD : val; -} - -} - namespace skia { namespace textlayout { Run::Run(ParagraphImpl* master, const SkShaper::RunHandler::RunInfo& info, size_t firstChar, - SkScalar lineHeight, + SkScalar heightMultiplier, size_t index, SkScalar offsetX) - : fMaster(master) - , fTextRange(firstChar + info.utf8Range.begin(), firstChar + info.utf8Range.end()) - , fClusterRange(EMPTY_CLUSTERS) - , fClusterStart(firstChar) { - fFont = info.fFont; - fHeightMultiplier = lineHeight; + : fMaster(master) + , fTextRange(firstChar + info.utf8Range.begin(), firstChar + info.utf8Range.end()) + , fClusterRange(EMPTY_CLUSTERS) + , fFont(info.fFont) + , fClusterStart(firstChar) + , fHeightMultiplier(heightMultiplier) +{ fBidiLevel = info.fBidiLevel; fAdvance = info.fAdvance; fIndex = index; @@ -47,21 +35,34 @@ Run::Run(ParagraphImpl* master, fGlyphs.push_back_n(info.glyphCount); fBounds.push_back_n(info.glyphCount); fPositions.push_back_n(info.glyphCount + 1); - fOffsets.push_back_n(info.glyphCount + 1); fClusterIndexes.push_back_n(info.glyphCount + 1); fShifts.push_back_n(info.glyphCount + 1, 0.0); info.fFont.getMetrics(&fFontMetrics); + + this->calculateMetrics(); + fSpaced = false; // To make edge cases easier: fPositions[info.glyphCount] = fOffset + fAdvance; - fOffsets[info.glyphCount] = { 0, 0}; fClusterIndexes[info.glyphCount] = this->leftToRight() ? info.utf8Range.end() : info.utf8Range.begin(); fEllipsis = false; fPlaceholderIndex = std::numeric_limits::max(); } +void Run::calculateMetrics() { + fCorrectAscent = fFontMetrics.fAscent - fFontMetrics.fLeading * 0.5; + fCorrectDescent = fFontMetrics.fDescent + fFontMetrics.fLeading * 0.5; + fCorrectLeading = 0; + if (!SkScalarNearlyZero(fHeightMultiplier)) { + auto multiplier = fHeightMultiplier * fFont.getSize() / + (fFontMetrics.fDescent - fFontMetrics.fAscent + fFontMetrics.fLeading); + fCorrectAscent *= multiplier; + fCorrectDescent *= multiplier; + } +} + SkShaper::RunHandler::Buffer Run::newRunBuffer() { - return {fGlyphs.data(), fPositions.data(), fOffsets.data(), fClusterIndexes.data(), fOffset}; + return {fGlyphs.data(), fPositions.data(), nullptr, fClusterIndexes.data(), fOffset}; } void Run::commit() { @@ -83,81 +84,46 @@ SkScalar Run::calculateWidth(size_t start, size_t end, bool clip) const { return posX(end) - posX(start) + shift + correction; } -void Run::copyTo(SkTextBlobBuilder& builder, size_t pos, size_t size, SkVector runOffset) const { +void Run::copyTo(SkTextBlobBuilder& builder, size_t pos, size_t size) const { SkASSERT(pos + size <= this->size()); const auto& blobBuffer = builder.allocRunPos(fFont, SkToInt(size)); sk_careful_memcpy(blobBuffer.glyphs, fGlyphs.data() + pos, size * sizeof(SkGlyphID)); - for (size_t i = 0; i < size; ++i) { - auto point = fPositions[i + pos]; - auto offset = fOffsets[i + pos]; - point.offset(offset.fX, offset.fY); - if (fSpaced) { - point.fX += fShifts[i + pos]; - } - if (!fJustificationShifts.empty()) { - point.fX += fJustificationShifts[i + pos].fX; - } - blobBuffer.points()[i] = point + runOffset; - } -} - -std::tuple Run::findLimitingClusters(TextRange text, bool extendToClusters) const { - if (text.width() == 0) { - for (auto i = fClusterRange.start; i != fClusterRange.end; ++i) { - auto& cluster = fMaster->cluster(i); - if (cluster.textRange().end >= text.end && cluster.textRange().start <= text.start) { - return std::make_tuple(true, i, i); - } - } - return std::make_tuple(false, 0, 0); - } - Cluster* start = nullptr; - Cluster* end = nullptr; - if (extendToClusters) { - for (auto i = fClusterRange.start; i != fClusterRange.end; ++i) { - auto& cluster = fMaster->cluster(i); - auto clusterRange = cluster.textRange(); - if (clusterRange.end <= text.start) { - continue; - } else if (clusterRange.start >= text.end) { - break; - } - - TextRange s = TextRange(std::max(clusterRange.start, text.start), - std::min(clusterRange.end, text.end)); - if (s.width() > 0) { - if (start == nullptr) { - start = &cluster; - } - end = &cluster; - } - } + if (!fSpaced && fJustificationShifts.empty()) { + sk_careful_memcpy(blobBuffer.points(), fPositions.data() + pos, size * sizeof(SkPoint)); } else { - // We need this branch when we draw styles for the part of a cluster - for (auto i = fClusterRange.start; i != fClusterRange.end; ++i) { - auto& cluster = fMaster->cluster(i); - if (cluster.textRange().end > text.start && start == nullptr) { - start = &cluster; + for (size_t i = 0; i < size; ++i) { + auto point = fPositions[i + pos]; + if (fSpaced) { + point.fX += fShifts[i + pos]; } - if (cluster.textRange().start < text.end) { - end = &cluster; - } else { - break; + if (!fJustificationShifts.empty()) { + point.fX += fJustificationShifts[i + pos].fX; } + blobBuffer.points()[i] = point; } } +} - if (start == nullptr || end == nullptr) { - return std::make_tuple(false, 0, 0); +// Find a cluster range from text range (within one run) +// Cluster range is normalized ([start:end) start < end regardless of TextDirection +// Boolean value in triple indicates whether the cluster range was found or not +std::tuple Run::findLimitingClusters(TextRange text) const { + if (text.width() == 0) { + // Special Flutter case for "\n" and "...\n" + if (text.end > this->fTextRange.start) { + ClusterIndex index = fMaster->clusterIndex(text.end - 1); + return std::make_tuple(true, index, index); + } else { + return std::make_tuple(false, 0, 0); + } } + ClusterIndex startIndex = fMaster->clusterIndex(text.start); + ClusterIndex endIndex = fMaster->clusterIndex(text.end - 1); if (!leftToRight()) { - std::swap(start, end); + std::swap(startIndex, endIndex); } - - size_t startIndex = start - fMaster->clusters().begin(); - size_t endIndex = end - fMaster->clusters().begin(); return std::make_tuple(startIndex != fClusterRange.end && endIndex != fClusterRange.end, startIndex, endIndex); } @@ -316,25 +282,12 @@ void Run::updateMetrics(InternalLineMetrics* endlineMetrics) { break; } + this->calculateMetrics(); + // Make sure the placeholder can fit the line endlineMetrics->add(this); } -void Cluster::setIsWhiteSpaces() { - - fWhiteSpaces = false; - - auto span = fMaster->text(fTextRange); - const char* ch = span.begin(); - while (ch < span.end()) { - auto unichar = utf8_next(&ch, span.end()); - if (!u_isWhitespace(unichar)) { - return; - } - } - fWhiteSpaces = true; -} - SkScalar Cluster::sizeToChar(TextIndex ch) const { if (ch < fTextRange.start || ch >= fTextRange.end) { return 0; @@ -391,6 +344,18 @@ SkFont Cluster::font() const { return fMaster->run(fRunIndex).font(); } +bool Cluster::isHardBreak() const { + return fMaster->codeUnitHasProperty(fTextRange.end,CodeUnitFlags::kHardLineBreakBefore); +} + +bool Cluster::isSoftBreak() const { + return fMaster->codeUnitHasProperty(fTextRange.end,CodeUnitFlags::kSoftLineBreakBefore); +} + +bool Cluster::isGraphemeBreak() const { + return fMaster->codeUnitHasProperty(fTextRange.end,CodeUnitFlags::kGraphemeStart); +} + Cluster::Cluster(ParagraphImpl* master, RunIndex runIndex, size_t start, @@ -407,9 +372,9 @@ Cluster::Cluster(ParagraphImpl* master, , fWidth(width) , fSpacing(0) , fHeight(height) - , fHalfLetterSpacing(0.0) - , fWhiteSpaces(false) - , fBreakType(None) { + , fHalfLetterSpacing(0.0) { + size_t len = fMaster->getWhitespacesLength(fTextRange); + fIsWhiteSpaces = (len == this->fTextRange.width()); } } // namespace textlayout diff --git a/modules/skparagraph/src/Run.h b/modules/skparagraph/src/Run.h index 77ced00750a62..c50be46df55a4 100644 --- a/modules/skparagraph/src/Run.h +++ b/modules/skparagraph/src/Run.h @@ -40,9 +40,6 @@ const SkRange EMPTY_CLUSTERS = EMPTY_RANGE; typedef size_t GraphemeIndex; typedef SkRange GraphemeRange; -typedef size_t CodepointIndex; -typedef SkRange CodepointRange; - typedef size_t GlyphIndex; typedef SkRange GlyphRange; @@ -57,32 +54,25 @@ class DirText { class Run { public: - Run() = default; Run(ParagraphImpl* master, const SkShaper::RunHandler::RunInfo& info, size_t firstChar, - SkScalar lineHeight, + SkScalar heightMultiplier, size_t index, SkScalar shiftX); Run(const Run&) = default; - Run& operator=(const Run&) = default; + Run& operator=(const Run&) = delete; Run(Run&&) = default; - Run& operator=(Run&&) = default; + Run& operator=(Run&&) = delete; ~Run() = default; void setMaster(ParagraphImpl* master) { fMaster = master; } SkShaper::RunHandler::Buffer newRunBuffer(); - SkScalar posX(size_t index) const { - return fPositions[index].fX + fOffsets[index].fX; - } - void addX(size_t index, SkScalar shift) { - fPositions[index].fX += shift; - } - SkScalar posY(size_t index) const { - return fPositions[index].fY + fOffsets[index].fY; - } + SkScalar posX(size_t index) const { return fPositions[index].fX; } + void addX(size_t index, SkScalar shift) { fPositions[index].fX += shift; } + SkScalar posY(size_t index) const { return fPositions[index].fY; } size_t size() const { return fGlyphs.size(); } void setWidth(SkScalar width) { fAdvance.fX = width; } void setHeight(SkScalar height) { fAdvance.fY = height; } @@ -91,36 +81,15 @@ class Run { fOffset.fY += shiftY; } SkVector advance() const { - return SkVector::Make(fAdvance.fX, fFontMetrics.fDescent - fFontMetrics.fAscent); + return SkVector::Make(fAdvance.fX, fFontMetrics.fDescent - fFontMetrics.fAscent + fFontMetrics.fLeading); } SkVector offset() const { return fOffset; } SkScalar ascent() const { return fFontMetrics.fAscent; } SkScalar descent() const { return fFontMetrics.fDescent; } SkScalar leading() const { return fFontMetrics.fLeading; } - SkScalar correctAscent() const { - - if (fHeightMultiplier == 0) { - return fFontMetrics.fAscent - fFontMetrics.fLeading / 2; - } - return fFontMetrics.fAscent * fHeightMultiplier * fFont.getSize() / - (fFontMetrics.fDescent - fFontMetrics.fAscent + fFontMetrics.fLeading / 2); - } - SkScalar correctDescent() const { - - if (fHeightMultiplier == 0) { - return fFontMetrics.fDescent + fFontMetrics.fLeading / 2; - } - return fFontMetrics.fDescent * fHeightMultiplier * fFont.getSize() / - (fFontMetrics.fDescent - fFontMetrics.fAscent + fFontMetrics.fLeading / 2); - } - SkScalar correctLeading() const { - - if (fHeightMultiplier == 0) { - return fFontMetrics.fAscent; - } - return fFontMetrics.fLeading * fHeightMultiplier * fFont.getSize() / - (fFontMetrics.fDescent - fFontMetrics.fAscent + fFontMetrics.fLeading); - } + SkScalar correctAscent() const { return fCorrectAscent; } + SkScalar correctDescent() const { return fCorrectDescent; } + SkScalar correctLeading() const { return fCorrectLeading; } const SkFont& font() const { return fFont; } bool leftToRight() const { return fBidiLevel % 2 == 0; } TextDirection getTextDirection() const { return leftToRight() ? TextDirection::kLtr : TextDirection::kRtl; } @@ -139,6 +108,7 @@ class Run { bool isEllipsis() const { return fEllipsis; } + void calculateMetrics(); void updateMetrics(InternalLineMetrics* endlineMetrics); void setClusterRange(size_t from, size_t to) { fClusterRange = ClusterRange(from, to); } @@ -159,7 +129,7 @@ class Run { } SkScalar calculateWidth(size_t start, size_t end, bool clip) const; - void copyTo(SkTextBlobBuilder& builder, size_t pos, size_t size, SkVector offset) const; + void copyTo(SkTextBlobBuilder& builder, size_t pos, size_t size) const; using ClusterTextVisitor = std::function; void iterateThroughClusters(const ClusterVisitor& visitor); - std::tuple findLimitingClusters(TextRange text, bool onlyInnerClusters) const; + std::tuple findLimitingClusters(TextRange text) const; SkSpan glyphs() const { return SkSpan(fGlyphs.begin(), fGlyphs.size()); } SkSpan positions() const { return SkSpan(fPositions.begin(), fPositions.size()); } - SkSpan offsets() const { - return SkSpan(fOffsets.begin(), fOffsets.size()); - } SkSpan clusterIndexes() const { return SkSpan(fClusterIndexes.begin(), fClusterIndexes.size()); } @@ -211,12 +178,8 @@ class Run { ClusterRange fClusterRange; SkFont fFont; - SkFontMetrics fFontMetrics; - SkScalar fHeightMultiplier; size_t fPlaceholderIndex; - bool fEllipsis; size_t fIndex; - uint8_t fBidiLevel; SkVector fAdvance; SkVector fOffset; TextIndex fClusterStart; @@ -224,29 +187,20 @@ class Run { SkSTArray<128, SkGlyphID, true> fGlyphs; SkSTArray<128, SkPoint, true> fPositions; SkSTArray<128, SkPoint, true> fJustificationShifts; // For justification (current and prev shifts) - SkSTArray<128, SkPoint, true> fOffsets; SkSTArray<128, uint32_t, true> fClusterIndexes; SkSTArray<128, SkRect, true> fBounds; SkSTArray<128, SkScalar, true> fShifts; // For formatting (letter/word spacing) - bool fSpaced; -}; - -struct Codepoint { - - Codepoint(GraphemeIndex graphemeIndex, TextIndex textIndex, size_t index) - : fGrapheme(graphemeIndex), fTextIndex(textIndex), fIndex(index) { } - GraphemeIndex fGrapheme; - TextIndex fTextIndex; // Used for getGlyphPositionAtCoordinate - size_t fIndex; -}; + SkFontMetrics fFontMetrics; + const SkScalar fHeightMultiplier; + SkScalar fCorrectAscent; + SkScalar fCorrectDescent; + SkScalar fCorrectLeading; -struct Grapheme { - Grapheme(CodepointRange codepoints, TextRange textRange) - : fCodepointRange(codepoints), fTextRange(textRange) { } - CodepointRange fCodepointRange; - TextRange fTextRange; // Used for getRectsForRange + bool fSpaced; + bool fEllipsis; + uint8_t fBidiLevel; }; class Cluster { @@ -268,9 +222,7 @@ class Cluster { , fWidth() , fSpacing(0) , fHeight() - , fHalfLetterSpacing(0.0) - , fWhiteSpaces(false) - , fBreakType(None) {} + , fHalfLetterSpacing(0.0) {} Cluster(ParagraphImpl* master, RunIndex runIndex, @@ -295,14 +247,11 @@ class Cluster { fWidth += shift; } - void setBreakType(BreakType type) { fBreakType = type; } - bool isWhitespaces() const { return fWhiteSpaces; } - bool canBreakLineAfter() const { - return fBreakType == SoftLineBreak || fBreakType == HardLineBreak; - } - bool isHardBreak() const { return fBreakType == HardLineBreak; } - bool isSoftBreak() const { return fBreakType == SoftLineBreak; } - bool isGraphemeBreak() const { return fBreakType == GraphemeBreak; } + bool isWhitespaces() const { return fIsWhiteSpaces; } + bool isHardBreak() const; + bool isSoftBreak() const; + bool isGraphemeBreak() const; + bool canBreakLineAfter() const { return isHardBreak() || isSoftBreak(); } size_t startPos() const { return fStart; } size_t endPos() const { return fEnd; } SkScalar width() const { return fWidth; } @@ -322,8 +271,6 @@ class Cluster { SkScalar trimmedWidth(size_t pos) const; - void setIsWhiteSpaces(); - bool contains(TextIndex ch) const { return ch >= fTextRange.start && ch < fTextRange.end; } bool belongs(TextRange text) const { @@ -349,8 +296,7 @@ class Cluster { SkScalar fSpacing; SkScalar fHeight; SkScalar fHalfLetterSpacing; - bool fWhiteSpaces; - BreakType fBreakType; + bool fIsWhiteSpaces; }; class InternalLineMetrics { diff --git a/modules/skparagraph/src/TextLine.cpp b/modules/skparagraph/src/TextLine.cpp index a7b60597b2a0f..35d4fb961d1d5 100644 --- a/modules/skparagraph/src/TextLine.cpp +++ b/modules/skparagraph/src/TextLine.cpp @@ -368,15 +368,16 @@ void TextLine::paintText(SkCanvas* canvas, TextRange textRange, const TextStyle& } // TODO: This is the change for flutter, must be removed later - SkScalar correctedBaseline = SkScalarFloorToScalar(this->baseline() + 0.5); SkTextBlobBuilder builder; - context.run->copyTo(builder, SkToU32(context.pos), context.size, SkVector::Make(context.fTextShift, correctedBaseline)); + context.run->copyTo(builder, SkToU32(context.pos), context.size); if (context.clippingNeeded) { canvas->save(); canvas->clipRect(extendHeight(context).makeOffset(this->offset())); } - canvas->drawTextBlob(builder.make(), this->offset().fX, this->offset().fY, paint); + SkScalar correctedBaseline = SkScalarFloorToScalar(this->baseline() + 0.5); + canvas->drawTextBlob(builder.make(), + this->offset().fX + context.fTextShift, this->offset().fY + correctedBaseline, paint); if (context.clippingNeeded) { canvas->restore(); @@ -403,7 +404,7 @@ void TextLine::paintShadow(SkCanvas* canvas, TextRange textRange, const TextStyl } SkTextBlobBuilder builder; - context.run->copyTo(builder, context.pos, context.size, SkVector::Make(context.fTextShift, shiftDown)); + context.run->copyTo(builder, context.pos, context.size); if (context.clippingNeeded) { canvas->save(); @@ -411,7 +412,10 @@ void TextLine::paintShadow(SkCanvas* canvas, TextRange textRange, const TextStyl clip.offset(this->offset()); canvas->clipRect(clip); } - canvas->drawTextBlob(builder.make(), this->offset().fX + shadow.fOffset.x(), this->offset().fY + shadow.fOffset.y(), paint); + canvas->drawTextBlob(builder.make(), + this->offset().fX + shadow.fOffset.x() + context.fTextShift, + this->offset().fY + shadow.fOffset.y() + shiftDown, + paint); if (context.clippingNeeded) { canvas->restore(); @@ -624,7 +628,7 @@ TextLine::ClipContext TextLine::measureTextInsideOneRun(TextRange textRange, bool found; ClusterIndex startIndex; ClusterIndex endIndex; - std::tie(found, startIndex, endIndex) = run->findLimitingClusters(textRange, limitToClusters); + std::tie(found, startIndex, endIndex) = run->findLimitingClusters(textRange); if (!found) { SkASSERT(textRange.empty() || limitToClusters); return result; @@ -883,7 +887,8 @@ LineMetrics TextLine::getMetrics() const { result.fHeight = littleRound(fAdvance.fY); result.fWidth = littleRound(fAdvance.fX); result.fLeft = fOffset.fX; - result.fBaseline = fMaxRunMetrics.baseline() + (this - fMaster->lines().begin()) * result.fHeight; + // This is Flutter definition of a baseline + result.fBaseline = this->offset().fY + this->height() - this->sizes().descent(); result.fLineNumber = this - fMaster->lines().begin(); // Fill out the style parts @@ -1120,36 +1125,25 @@ PositionWithAffinity TextLine::getGlyphPositionAtCoordinate(SkScalar dx) { this->iterateThroughVisualRuns(true, [this, dx, &result] (const Run* run, SkScalar runOffsetInLine, TextRange textRange, SkScalar* runWidthInLine) { - bool lookingForHit = true; + bool keepLooking = true; *runWidthInLine = this->iterateThroughSingleRunByStyles( run, runOffsetInLine, textRange, StyleType::kNone, - [this, dx, &result, &lookingForHit] + [this, dx, &result, &keepLooking] (TextRange textRange, const TextStyle& style, const TextLine::ClipContext& context) { - auto findCodepointByTextIndex = [this](ClusterIndex clusterIndex8) { - auto codepoints = fMaster->codepoints(); - auto codepoint = std::lower_bound( - codepoints.begin(), codepoints.end(), - clusterIndex8, - [](const Codepoint& lhs,size_t rhs) -> bool { return lhs.fTextIndex < rhs; }); - - return codepoint - codepoints.begin(); - }; - - auto offsetX = this->offset().fX; + SkScalar offsetX = this->offset().fX; if (dx < context.clip.fLeft + offsetX) { // All the other runs are placed right of this one - auto codepointIndex = findCodepointByTextIndex(context.run->globalClusterIndex(context.pos)); - result = { SkToS32(codepointIndex), kDownstream }; - lookingForHit = false; - return false; + auto utf16Index = fMaster->getUTF16Index(context.run->globalClusterIndex(context.pos)); + result = { SkToS32(utf16Index), kDownstream }; + return keepLooking = false; } if (dx >= context.clip.fRight + offsetX) { // We have to keep looking ; just in case keep the last one as the closest - auto codepointIndex = findCodepointByTextIndex(context.run->globalClusterIndex(context.pos + context.size)); - result = { SkToS32(codepointIndex), kUpstream }; - return true; + auto utf16Index = fMaster->getUTF16Index(context.run->globalClusterIndex(context.pos + context.size)); + result = { SkToS32(utf16Index), kUpstream }; + return keepLooking = true; } // So we found the run that contains our coordinates @@ -1165,60 +1159,40 @@ PositionWithAffinity TextLine::getGlyphPositionAtCoordinate(SkScalar dx) { found = index; } - auto glyphStart = context.run->positionX(found) + context.fTextShift + offsetX; - auto glyphWidth = context.run->positionX(found + 1) - context.run->positionX(found); + SkScalar glyphemePosLeft = context.run->positionX(found) + context.fTextShift + offsetX; + SkScalar glyphemePosWidth = context.run->positionX(found + 1) - context.run->positionX(found); + + // Find the grapheme range that contains the point auto clusterIndex8 = context.run->globalClusterIndex(found); auto clusterEnd8 = context.run->globalClusterIndex(found + 1); - - // Find the grapheme positions in codepoints that contains the point - auto codepointIndex = findCodepointByTextIndex(clusterIndex8); - CodepointRange codepoints(codepointIndex, codepointIndex); - auto masterCodepoints = fMaster->codepoints(); - if (context.run->leftToRight()) { - for (codepoints.end = codepointIndex; - codepoints.end < masterCodepoints.size(); ++codepoints.end) { - auto& cp = masterCodepoints[codepoints.end]; - if (cp.fTextIndex >= clusterEnd8) { - break; - } - } - } else { - for (codepoints.end = codepointIndex; - codepoints.end > 0; --codepoints.end) { - auto& cp = masterCodepoints[codepoints.end]; - if (cp.fTextIndex <= clusterEnd8) { - break; - } - } - std::swap(codepoints.start, codepoints.end); + TextIndex graphemeUtf8Start = fMaster->findGraphemeStart(clusterIndex8); + TextIndex graphemeUtf8Width = fMaster->findGraphemeStart(clusterEnd8) - graphemeUtf8Start; + size_t utf16Index = fMaster->getUTF16Index(clusterIndex8); + + SkScalar center = glyphemePosLeft + glyphemePosWidth / 2; + bool insideGlypheme = false; + if (graphemeUtf8Width > 1) { + // TODO: the average width of a code unit (especially UTF-8) is meaningless. + // Probably want the average width of a grapheme or codepoint? + SkScalar averageUtf8Width = glyphemePosWidth / graphemeUtf8Width; + SkScalar delta = dx - glyphemePosLeft; + int insideUtf8Offset = SkScalarNearlyZero(averageUtf8Width) + ? 0 + : SkScalarFloorToInt(delta / averageUtf8Width); + insideGlypheme = averageUtf8Width < delta && delta < glyphemePosWidth - averageUtf8Width; + center = glyphemePosLeft + averageUtf8Width * insideUtf8Offset + averageUtf8Width / 2; + utf16Index += insideUtf8Offset; // TODO: adding a utf8 offset to a utf16 index } - - auto graphemeSize = codepoints.width(); - - // We only need to inspect one glyph (maybe not even the entire glyph) - SkScalar center; - bool insideGlyph = false; - if (graphemeSize > 1) { - auto averageCodepointWidth = glyphWidth / graphemeSize; - auto delta = dx - glyphStart; - auto insideIndex = SkScalarFloorToInt(delta / averageCodepointWidth); - insideGlyph = delta > averageCodepointWidth; - center = glyphStart + averageCodepointWidth * insideIndex + averageCodepointWidth / 2; - codepointIndex += insideIndex; + if ((dx < center) == context.run->leftToRight() || insideGlypheme) { + result = { SkToS32(utf16Index), kDownstream }; } else { - center = glyphStart + glyphWidth / 2; + result = { SkToS32(utf16Index + 1), kUpstream }; } - if ((dx < center) == context.run->leftToRight() || insideGlyph) { - result = { SkToS32(codepointIndex), kDownstream }; - } else { - result = { SkToS32(codepointIndex + 1), kUpstream }; - } - // No need to continue - lookingForHit = false; - return false; + + return keepLooking = false; }); - return lookingForHit; + return keepLooking; } ); return result; diff --git a/modules/skparagraph/src/TextWrapper.h b/modules/skparagraph/src/TextWrapper.h index 7dfd105186332..95f4b004bfc3d 100644 --- a/modules/skparagraph/src/TextWrapper.h +++ b/modules/skparagraph/src/TextWrapper.h @@ -75,6 +75,7 @@ class TextWrapper { fStart = ClusterPos(cluster, cluster->startPos()); } fEnd = ClusterPos(cluster, cluster->endPos()); + // TODO: Make sure all the checks are correct and there are no unnecessary checks if (!cluster->run()->isPlaceholder()) { fMetrics.add(cluster->run()); } diff --git a/modules/skparagraph/src/TypefaceFontProvider.cpp b/modules/skparagraph/src/TypefaceFontProvider.cpp index d1b9f26242279..cd30a67d9670f 100644 --- a/modules/skparagraph/src/TypefaceFontProvider.cpp +++ b/modules/skparagraph/src/TypefaceFontProvider.cpp @@ -24,6 +24,10 @@ SkFontStyleSet* TypefaceFontProvider::onMatchFamily(const char familyName[]) con return nullptr; } +sk_sp TypefaceFontProvider::onMakeFromFontData(std::unique_ptr) const { + return nullptr; +} + size_t TypefaceFontProvider::registerTypeface(sk_sp typeface) { if (typeface == nullptr) { return 0; diff --git a/modules/skparagraph/tests/SkParagraphTest.cpp b/modules/skparagraph/tests/SkParagraphTest.cpp index a3dbe4e93dce5..c325ee5569658 100644 --- a/modules/skparagraph/tests/SkParagraphTest.cpp +++ b/modules/skparagraph/tests/SkParagraphTest.cpp @@ -2267,19 +2267,19 @@ DEF_TEST(SkParagraph_GetGlyphPositionAtCoordinateParagraph, reporter) { REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(301, 2.2f).position == 11); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(302, 2.6f).position == 11); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(301, 2.1f).position == 11); - REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(100000, 20).position == 18);// + REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(100000, 20).position == 18); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(450, 20).position == 16); - REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(100000, 90).position == 36);// + REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(100000, 90).position == 36); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(-100000, 90).position == 18); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(20, -80).position == 1); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(1, 90).position == 18); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(1, 170).position == 36); - REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(10000, 180).position == 72);// + REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(10000, 180).position == 72); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(70, 180).position == 56); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(1, 270).position == 72); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(35, 90).position == 19); - REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(10000, 10000).position == 77);// + REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(10000, 10000).position == 77); REPORTER_ASSERT(reporter, paragraph->getGlyphPositionAtCoordinate(85, 10000).position == 75); } @@ -2388,7 +2388,13 @@ DEF_TEST(SkParagraph_GetRectsForRangeTight, reporter) { " ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)(" " ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)"; const size_t len = strlen(text); +/* +( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`)( ´・‿・`) + S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S + G G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GGG G G G G G GG + W W W W W W W W W W W W W W W W W W W W + */ ParagraphStyle paragraphStyle; paragraphStyle.setTextAlign(TextAlign::kLeft); paragraphStyle.setMaxLines(10); @@ -5293,3 +5299,83 @@ DEF_TEST(SkParagraph_Infinity, reporter) { SkASSERT(nearlyEqual(SK_ScalarNaN, SK_ScalarNegativeInfinity) == false); SkASSERT(nearlyEqual(SK_ScalarNaN, SK_ScalarNaN) == false); }; + +DEF_TEST(SkParagraph_LineMetrics, reporter) { + + sk_sp fontCollection = sk_make_sp(); + if (!fontCollection->fontsFound()) return; + + TestCanvas canvas("SkParagraph_LineMetrics.png"); + + const char* text = "One line of text\n"; + const size_t len = strlen(text); + + ParagraphStyle paragraph_style; + paragraph_style.turnHintingOff(); + ParagraphBuilderImpl builder(paragraph_style, fontCollection); + + TextStyle text_style; + text_style.setFontFamilies({SkString("Roboto")}); + text_style.setColor(SK_ColorBLACK); + + text_style.setFontSize(8); + builder.pushStyle(text_style); + builder.addText(text, len); + builder.pop(); + + text_style.setFontSize(12); + builder.pushStyle(text_style); + builder.addText(text, len); + builder.pop(); + + text_style.setFontSize(18); + builder.pushStyle(text_style); + builder.addText(text, len); + builder.pop(); + + text_style.setFontSize(30); + builder.pushStyle(text_style); + builder.addText(text, len - 1); // Skip the last \n + builder.pop(); + + auto paragraph = builder.Build(); + paragraph->layout(TestCanvasWidth); + + std::vector metrics; + paragraph->getLineMetrics(metrics); + + SkDEBUGCODE(auto impl = static_cast(paragraph.get());) + SkASSERT(metrics.size() == impl->lines().size()); + for (size_t i = 0; i < metrics.size(); ++i) { + SkDEBUGCODE(auto& line = impl->lines()[i];) + SkDEBUGCODE(auto baseline = metrics[i].fBaseline;) + SkDEBUGCODE(auto top = line.offset().fY;) + SkDEBUGCODE(auto bottom = line.offset().fY + line.height();) + SkASSERT( baseline > top && baseline <= bottom); + } + + paragraph->paint(canvas.get(), 0, 0); + auto rects = paragraph->getRectsForRange(0, len * 4, RectHeightStyle::kMax, RectWidthStyle::kTight); + + SkPaint red; + red.setColor(SK_ColorRED); + red.setStyle(SkPaint::kStroke_Style); + red.setAntiAlias(true); + red.setStrokeWidth(1); + + for (auto& rect : rects) { + canvas.get()->drawRect(rect.rect, red); + } + + SkPaint green; + green.setColor(SK_ColorGREEN); + green.setStyle(SkPaint::kStroke_Style); + green.setAntiAlias(true); + green.setStrokeWidth(1); + for (auto& metric : metrics) { + auto x0 = 0.0; + auto x1 = metric.fWidth; + auto y = metric.fBaseline; + canvas.get()->drawLine(x0, y, x1, y, green); + } +}; diff --git a/modules/skresources/include/SkResources.h b/modules/skresources/include/SkResources.h index 3a5769d900fc1..c5bdb81dfa78f 100644 --- a/modules/skresources/include/SkResources.h +++ b/modules/skresources/include/SkResources.h @@ -11,6 +11,7 @@ #include "include/core/SkData.h" #include "include/core/SkRefCnt.h" #include "include/core/SkString.h" +#include "include/core/SkTypeface.h" #include "include/core/SkTypes.h" #include "include/private/SkMutex.h" #include "include/private/SkTHash.h" @@ -96,6 +97,8 @@ class SK_API ResourceProvider : public SkRefCnt { } /** + * DEPRECATED: implement loadTypeface() instead. + * * Load an external font and return as SkData. * * @param name font name ("fName" Lottie property) @@ -112,6 +115,17 @@ class SK_API ResourceProvider : public SkRefCnt { const char[] /* url */) const { return nullptr; } + + /** + * Load an external font and return as SkTypeface. + * + * @param name font name + * @param url web font URL + */ + virtual sk_sp loadTypeface(const char[] /* name */, + const char[] /* url */) const { + return nullptr; + } }; class FileResourceProvider final : public ResourceProvider { @@ -137,7 +151,7 @@ class ResourceProviderProxyBase : public ResourceProvider { sk_sp load(const char[], const char[]) const override; sk_sp loadImageAsset(const char[], const char[], const char[]) const override; - sk_sp loadFont(const char[], const char[]) const override; + sk_sp loadTypeface(const char[], const char[]) const override; private: const sk_sp fProxy; diff --git a/modules/skresources/src/SkResources.cpp b/modules/skresources/src/SkResources.cpp index 1d3e710c3f99a..8934fd40e255d 100644 --- a/modules/skresources/src/SkResources.cpp +++ b/modules/skresources/src/SkResources.cpp @@ -196,8 +196,9 @@ sk_sp ResourceProviderProxyBase::loadImageAsset(const char rpath[], : nullptr; } -sk_sp ResourceProviderProxyBase::loadFont(const char name[], const char url[]) const { - return fProxy ? fProxy->loadFont(name, url) +sk_sp ResourceProviderProxyBase::loadTypeface(const char name[], + const char url[]) const { + return fProxy ? fProxy->loadTypeface(name, url) : nullptr; } diff --git a/modules/sksg/include/SkSGDashEffect.h b/modules/sksg/include/SkSGDashEffect.h deleted file mode 100644 index 341e71e5fb5ac..0000000000000 --- a/modules/sksg/include/SkSGDashEffect.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkSGDashEffect_DEFINED -#define SkSGDashEffect_DEFINED - -#include "include/core/SkPath.h" -#include "modules/sksg/include/SkSGGeometryNode.h" - -#include - -namespace sksg { - -/** - * Apply a dash effect to the child geometry. - * - * Follows the same semantics as SkDashPathEffect, with one minor tweak: when the number of - * intervals is odd, they are repeated once more to attain an even sequence (same as SVG - * stroke-dasharray: https://www.w3.org/TR/SVG11/painting.html#StrokeDasharrayProperty). - */ -class DashEffect final : public GeometryNode { -public: - static sk_sp Make(sk_sp child) { - return child ? sk_sp(new DashEffect(std::move(child))) : nullptr; - } - - ~DashEffect() override; - - SG_ATTRIBUTE(Intervals, std::vector, fIntervals) - SG_ATTRIBUTE(Phase, float , fPhase ) - -protected: - void onClip(SkCanvas*, bool antiAlias) const override; - void onDraw(SkCanvas*, const SkPaint&) const override; - bool onContains(const SkPoint&) const override; - - SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; - SkPath onAsPath() const override; - -private: - explicit DashEffect(sk_sp); - - const sk_sp fChild; - - SkPath fDashedPath; // cache - - std::vector fIntervals; - float fPhase; -}; - -} // namespace sksg - -#endif // SkSGDashEffect_DEFINED diff --git a/modules/sksg/include/SkSGGeometryEffect.h b/modules/sksg/include/SkSGGeometryEffect.h new file mode 100644 index 0000000000000..030695b927d6d --- /dev/null +++ b/modules/sksg/include/SkSGGeometryEffect.h @@ -0,0 +1,170 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkSGGeometryEffect_DEFINED +#define SkSGGeometryEffect_DEFINED + +#include "modules/sksg/include/SkSGGeometryNode.h" + +#include "include/core/SkPaint.h" +#include "include/core/SkPath.h" +#include "include/effects/SkTrimPathEffect.h" +#include "modules/sksg/include/SkSGTransform.h" + +namespace sksg { + +/** + * Base class for geometry effects. + */ +class GeometryEffect : public GeometryNode { +protected: + explicit GeometryEffect(sk_sp); + ~GeometryEffect() override; + + void onClip(SkCanvas*, bool antiAlias) const final; + void onDraw(SkCanvas*, const SkPaint&) const final; + bool onContains(const SkPoint&) const final; + + SkRect onRevalidate(InvalidationController*, const SkMatrix&) final; + SkPath onAsPath() const final; + + virtual SkPath onRevalidateEffect(const sk_sp&) = 0; + +private: + const sk_sp fChild; + SkPath fPath; // transformed child cache. + + using INHERITED = GeometryNode; +}; + +/** + * Apply a trim effect to the child geometry. + */ +class TrimEffect final : public GeometryEffect { +public: + static sk_sp Make(sk_sp child) { + return child ? sk_sp(new TrimEffect(std::move(child))) : nullptr; + } + + SG_ATTRIBUTE(Start , SkScalar , fStart ) + SG_ATTRIBUTE(Stop , SkScalar , fStop ) + SG_ATTRIBUTE(Mode , SkTrimPathEffect::Mode, fMode ) + +private: + explicit TrimEffect(sk_sp child) : INHERITED(std::move(child)) {} + + SkPath onRevalidateEffect(const sk_sp&) override; + + SkScalar fStart = 0, + fStop = 1; + SkTrimPathEffect::Mode fMode = SkTrimPathEffect::Mode::kNormal; + + using INHERITED = GeometryEffect; +}; + +/** + * Apply a transform to a GeometryNode. + */ +class GeometryTransform final : public GeometryEffect { +public: + static sk_sp Make(sk_sp child, sk_sp transform) { + return child && transform + ? sk_sp(new GeometryTransform(std::move(child), + std::move(transform))) + : nullptr; + } + + ~GeometryTransform() override; + + const sk_sp& getTransform() const { return fTransform; } + +private: + GeometryTransform(sk_sp, sk_sp); + + SkPath onRevalidateEffect(const sk_sp&) override; + + const sk_sp fTransform; + + using INHERITED = GeometryEffect; +}; + +/** + * Apply a dash effect to the child geometry. + * + * Follows the same semantics as SkDashPathEffect, with one minor tweak: when the number of + * intervals is odd, they are repeated once more to attain an even sequence (same as SVG + * stroke-dasharray: https://www.w3.org/TR/SVG11/painting.html#StrokeDasharrayProperty). + */ +class DashEffect final : public GeometryEffect { +public: + static sk_sp Make(sk_sp child) { + return child ? sk_sp(new DashEffect(std::move(child))) : nullptr; + } + + SG_ATTRIBUTE(Intervals, std::vector, fIntervals) + SG_ATTRIBUTE(Phase, float , fPhase ) + +private: + explicit DashEffect(sk_sp child) : INHERITED(std::move(child)) {} + + SkPath onRevalidateEffect(const sk_sp&) override; + + std::vector fIntervals; + float fPhase; + + using INHERITED = GeometryEffect; +}; + +/** + * Apply a rounded-corner effect to the child geometry. + */ +class RoundEffect final : public GeometryEffect { +public: + static sk_sp Make(sk_sp child) { + return child ? sk_sp(new RoundEffect(std::move(child))) : nullptr; + } + + SG_ATTRIBUTE(Radius, SkScalar, fRadius) + +private: + explicit RoundEffect(sk_sp child) : INHERITED(std::move(child)) {} + + SkPath onRevalidateEffect(const sk_sp&) override; + + SkScalar fRadius = 0; + + using INHERITED = GeometryEffect; +}; + +/** + * Apply an offset effect to the child geometry. + */ +class OffsetEffect final : public GeometryEffect { +public: + static sk_sp Make(sk_sp child) { + return child ? sk_sp(new OffsetEffect(std::move(child))) : nullptr; + } + + SG_ATTRIBUTE(Offset , SkScalar , fOffset ) + SG_ATTRIBUTE(MiterLimit , SkScalar , fMiterLimit) + SG_ATTRIBUTE(Join , SkPaint::Join, fJoin ) + +private: + explicit OffsetEffect(sk_sp child) : INHERITED(std::move(child)) {} + + SkPath onRevalidateEffect(const sk_sp&) override; + + SkScalar fOffset = 0, + fMiterLimit = 4; + SkPaint::Join fJoin = SkPaint::kMiter_Join; + + using INHERITED = GeometryEffect; +}; + +} // namespace sksg + +#endif // SkSGGeometryEffect_DEFINED diff --git a/modules/sksg/include/SkSGGeometryTransform.h b/modules/sksg/include/SkSGGeometryTransform.h deleted file mode 100644 index 400ab8a069f58..0000000000000 --- a/modules/sksg/include/SkSGGeometryTransform.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkSGGeometryTransform_DEFINED -#define SkSGGeometryTransform_DEFINED - -#include "modules/sksg/include/SkSGGeometryNode.h" - -#include "include/core/SkPath.h" - -class SkMatrix; - -namespace sksg { - -class Transform; - -/** - * Concrete Effect node, binding a Matrix to a GeometryNode. - */ -class GeometryTransform final : public GeometryNode { -public: - static sk_sp Make(sk_sp child, sk_sp transform) { - return child && transform - ? sk_sp(new GeometryTransform(std::move(child), - std::move(transform))) - : nullptr; - } - - ~GeometryTransform() override; - - const sk_sp& getTransform() const { return fTransform; } - -protected: - void onClip(SkCanvas*, bool antiAlias) const override; - void onDraw(SkCanvas*, const SkPaint&) const override; - bool onContains(const SkPoint&) const override; - - SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; - SkPath onAsPath() const override; - -private: - GeometryTransform(sk_sp, sk_sp); - - const sk_sp fChild; - const sk_sp fTransform; - SkPath fTransformedPath; - - using INHERITED = GeometryNode; -}; - -} - -#endif // SkSGGeometryTransform_DEFINED diff --git a/modules/sksg/include/SkSGGroup.h b/modules/sksg/include/SkSGGroup.h index 81dd797af5c22..085f7a66abd7e 100644 --- a/modules/sksg/include/SkSGGroup.h +++ b/modules/sksg/include/SkSGGroup.h @@ -35,6 +35,7 @@ class Group : public RenderNode { void clear(); protected: + Group(); explicit Group(std::vector>); ~Group() override; diff --git a/modules/sksg/include/SkSGRoundEffect.h b/modules/sksg/include/SkSGRoundEffect.h deleted file mode 100644 index 20a02d0468b88..0000000000000 --- a/modules/sksg/include/SkSGRoundEffect.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkSGRoundEffect_DEFINED -#define SkSGRoundEffect_DEFINED - -#include "modules/sksg/include/SkSGGeometryNode.h" - -#include "include/core/SkPath.h" - -namespace sksg { - -/** - * Concrete Geometry node, applying a rounded-corner effect to its child. - */ -class RoundEffect final : public GeometryNode { -public: - static sk_sp Make(sk_sp child) { - return child ? sk_sp(new RoundEffect(std::move(child))) : nullptr; - } - - ~RoundEffect() override; - - SG_ATTRIBUTE(Radius, SkScalar, fRadius) - -protected: - void onClip(SkCanvas*, bool antiAlias) const override; - void onDraw(SkCanvas*, const SkPaint&) const override; - bool onContains(const SkPoint&) const override; - - SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; - SkPath onAsPath() const override; - -private: - explicit RoundEffect(sk_sp); - - const sk_sp fChild; - - SkPath fRoundedPath; - SkScalar fRadius = 0; - - using INHERITED = GeometryNode; -}; - -} // namespace sksg - -#endif // SkSGRoundEffect_DEFINED diff --git a/modules/sksg/include/SkSGTrimEffect.h b/modules/sksg/include/SkSGTrimEffect.h deleted file mode 100644 index 804f028d80446..0000000000000 --- a/modules/sksg/include/SkSGTrimEffect.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkSGTrimEffect_DEFINED -#define SkSGTrimEffect_DEFINED - -#include "modules/sksg/include/SkSGGeometryNode.h" - -#include "include/core/SkPath.h" -#include "include/effects/SkTrimPathEffect.h" - -class SkCanvas; -class SkPaint; - -namespace sksg { - -/** - * Concrete Geometry node, applying a trim effect to its child. - */ -class TrimEffect final : public GeometryNode { -public: - static sk_sp Make(sk_sp child) { - return child ? sk_sp(new TrimEffect(std::move(child))) : nullptr; - } - - ~TrimEffect() override; - - SG_ATTRIBUTE(Start , SkScalar , fStart ) - SG_ATTRIBUTE(Stop , SkScalar , fStop ) - SG_ATTRIBUTE(Mode , SkTrimPathEffect::Mode, fMode ) - -protected: - void onClip(SkCanvas*, bool antiAlias) const override; - void onDraw(SkCanvas*, const SkPaint&) const override; - bool onContains(const SkPoint&) const override; - - SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; - SkPath onAsPath() const override; - -private: - explicit TrimEffect(sk_sp); - - const sk_sp fChild; - - SkPath fTrimmedPath; - SkScalar fStart = 0, - fStop = 1; - SkTrimPathEffect::Mode fMode = SkTrimPathEffect::Mode::kNormal; - - using INHERITED = GeometryNode; -}; - -} // namespace sksg - -#endif // SkSGTrimEffect_DEFINED diff --git a/modules/sksg/sksg.gni b/modules/sksg/sksg.gni index 739941b1bdb91..5e55e9a9cf3c4 100644 --- a/modules/sksg/sksg.gni +++ b/modules/sksg/sksg.gni @@ -9,11 +9,10 @@ _src = get_path_info("src", "abspath") skia_sksg_sources = [ "$_src/SkSGClipEffect.cpp", "$_src/SkSGColorFilter.cpp", - "$_src/SkSGDashEffect.cpp", "$_src/SkSGDraw.cpp", "$_src/SkSGEffectNode.cpp", + "$_src/SkSGGeometryEffect.cpp", "$_src/SkSGGeometryNode.cpp", - "$_src/SkSGGeometryTransform.cpp", "$_src/SkSGGradient.cpp", "$_src/SkSGGroup.cpp", "$_src/SkSGImage.cpp", @@ -29,10 +28,8 @@ skia_sksg_sources = [ "$_src/SkSGRect.cpp", "$_src/SkSGRenderEffect.cpp", "$_src/SkSGRenderNode.cpp", - "$_src/SkSGRoundEffect.cpp", "$_src/SkSGScene.cpp", "$_src/SkSGText.cpp", "$_src/SkSGTransform.cpp", "$_src/SkSGTransformPriv.h", - "$_src/SkSGTrimEffect.cpp", ] diff --git a/modules/sksg/src/SkSGDashEffect.cpp b/modules/sksg/src/SkSGDashEffect.cpp deleted file mode 100644 index 2b4002cc918c2..0000000000000 --- a/modules/sksg/src/SkSGDashEffect.cpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "modules/sksg/include/SkSGDashEffect.h" - -#include "include/core/SkCanvas.h" -#include "include/core/SkStrokeRec.h" -#include "include/effects/SkDashPathEffect.h" - -#include - -namespace sksg { - -namespace { - -sk_sp make_dash(const std::vector intervals, float phase) { - if (intervals.empty()) { - return nullptr; - } - - const auto* intervals_ptr = intervals.data(); - auto intervals_count = intervals.size(); - - SkSTArray<32, float, true> storage; - if (intervals_count & 1) { - intervals_count *= 2; - storage.resize(intervals_count); - intervals_ptr = storage.data(); - - std::copy(intervals.begin(), intervals.end(), storage.begin()); - std::copy(intervals.begin(), intervals.end(), storage.begin() + intervals.size()); - } - - return SkDashPathEffect::Make(intervals_ptr, SkToInt(intervals_count), phase); -} - -} // namespace - -DashEffect::DashEffect(sk_sp child) - : fChild(std::move(child)) { - this->observeInval(fChild); -} - -DashEffect::~DashEffect() { - this->unobserveInval(fChild); -} - -void DashEffect::onClip(SkCanvas* canvas, bool antiAlias) const { - canvas->clipPath(fDashedPath, SkClipOp::kIntersect, antiAlias); -} - -void DashEffect::onDraw(SkCanvas* canvas, const SkPaint& paint) const { - canvas->drawPath(fDashedPath, paint); -} - -bool DashEffect::onContains(const SkPoint& p) const { - return fDashedPath.contains(p.x(), p.y()); -} - -SkPath DashEffect::onAsPath() const { - return fDashedPath; -} - -SkRect DashEffect::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { - SkASSERT(this->hasInval()); - - const auto child_bounds = fChild->revalidate(ic, ctm); - const auto child_path = fChild->asPath(); - - fDashedPath.reset(); - - auto dash_patheffect = make_dash(fIntervals, fPhase); - SkStrokeRec rec(SkStrokeRec::kHairline_InitStyle); - - if (!dash_patheffect || - !dash_patheffect->filterPath(&fDashedPath, child_path, &rec, &child_bounds)) { - fDashedPath = std::move(child_path); - } - fDashedPath.shrinkToFit(); - - return fDashedPath.computeTightBounds(); -} - -} // namespace sksg diff --git a/modules/sksg/src/SkSGGeometryEffect.cpp b/modules/sksg/src/SkSGGeometryEffect.cpp new file mode 100644 index 0000000000000..3941dac733c96 --- /dev/null +++ b/modules/sksg/src/SkSGGeometryEffect.cpp @@ -0,0 +1,165 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "modules/sksg/include/SkSGGeometryEffect.h" + +#include "include/core/SkCanvas.h" +#include "include/core/SkStrokeRec.h" +#include "include/effects/SkCornerPathEffect.h" +#include "include/effects/SkDashPathEffect.h" +#include "include/effects/SkTrimPathEffect.h" +#include "include/pathops/SkPathOps.h" +#include "modules/sksg/src/SkSGTransformPriv.h" + +#include + +namespace sksg { + +GeometryEffect::GeometryEffect(sk_sp child) + : fChild(std::move(child)) { + SkASSERT(fChild); + + this->observeInval(fChild); +} + +GeometryEffect::~GeometryEffect() { + this->unobserveInval(fChild); +} + +void GeometryEffect::onClip(SkCanvas* canvas, bool antiAlias) const { + canvas->clipPath(fPath, SkClipOp::kIntersect, antiAlias); +} + +void GeometryEffect::onDraw(SkCanvas* canvas, const SkPaint& paint) const { + canvas->drawPath(fPath, paint); +} + +bool GeometryEffect::onContains(const SkPoint& p) const { + return fPath.contains(p.x(), p.y()); +} + +SkPath GeometryEffect::onAsPath() const { + return fPath; +} + +SkRect GeometryEffect::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { + SkASSERT(this->hasInval()); + + fChild->revalidate(ic, ctm); + + fPath = this->onRevalidateEffect(fChild); + fPath.shrinkToFit(); + + return fPath.computeTightBounds(); +} + +SkPath TrimEffect::onRevalidateEffect(const sk_sp& child) { + SkPath path = child->asPath(); + + if (const auto trim = SkTrimPathEffect::Make(fStart, fStop, fMode)) { + SkStrokeRec rec(SkStrokeRec::kHairline_InitStyle); + SkAssertResult(trim->filterPath(&path, path, &rec, nullptr)); + } + + return path; +} + +GeometryTransform::GeometryTransform(sk_sp child, sk_sp transform) + : INHERITED(std::move(child)) + , fTransform(std::move(transform)) { + SkASSERT(fTransform); + this->observeInval(fTransform); +} + +GeometryTransform::~GeometryTransform() { + this->unobserveInval(fTransform); +} + +SkPath GeometryTransform::onRevalidateEffect(const sk_sp& child) { + fTransform->revalidate(nullptr, SkMatrix::I()); + const auto m = TransformPriv::As(fTransform); + + SkPath path = child->asPath(); + path.transform(m); + + return path; +} + +namespace { + +sk_sp make_dash(const std::vector intervals, float phase) { + if (intervals.empty()) { + return nullptr; + } + + const auto* intervals_ptr = intervals.data(); + auto intervals_count = intervals.size(); + + SkSTArray<32, float, true> storage; + if (intervals_count & 1) { + intervals_count *= 2; + storage.resize(intervals_count); + intervals_ptr = storage.data(); + + std::copy(intervals.begin(), intervals.end(), storage.begin()); + std::copy(intervals.begin(), intervals.end(), storage.begin() + intervals.size()); + } + + return SkDashPathEffect::Make(intervals_ptr, SkToInt(intervals_count), phase); +} + +} // namespace + +SkPath DashEffect::onRevalidateEffect(const sk_sp& child) { + SkPath path = child->asPath(); + + if (const auto dash_patheffect = make_dash(fIntervals, fPhase)) { + SkStrokeRec rec(SkStrokeRec::kHairline_InitStyle); + dash_patheffect->filterPath(&path, path, &rec, nullptr); + } + + return path; +} + +SkPath RoundEffect::onRevalidateEffect(const sk_sp& child) { + SkPath path = child->asPath(); + + if (const auto round = SkCornerPathEffect::Make(fRadius)) { + SkStrokeRec rec(SkStrokeRec::kHairline_InitStyle); + SkAssertResult(round->filterPath(&path, path, &rec, nullptr)); + } + + return path; +} + +SkPath OffsetEffect::onRevalidateEffect(const sk_sp& child) { + SkPath path = child->asPath(); + + if (!SkScalarNearlyZero(fOffset)) { + SkPaint paint; + paint.setStyle(SkPaint::kStroke_Style); + paint.setStrokeWidth(std::abs(fOffset) * 2); + paint.setStrokeMiter(fMiterLimit); + paint.setStrokeJoin(fJoin); + + SkPath fill_path; + paint.getFillPath(path, &fill_path, nullptr); + + if (fOffset > 0) { + Op(path, fill_path, kUnion_SkPathOp, &path); + } else { + Op(path, fill_path, kDifference_SkPathOp, &path); + } + + // TODO: this seems to break path combining (winding mismatch?) + // Simplify(path, &path); + } + + return path; +} + +} // namesapce sksg diff --git a/modules/sksg/src/SkSGGeometryTransform.cpp b/modules/sksg/src/SkSGGeometryTransform.cpp deleted file mode 100644 index d0ff83ea9cba1..0000000000000 --- a/modules/sksg/src/SkSGGeometryTransform.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "modules/sksg/include/SkSGGeometryTransform.h" - -#include "include/core/SkCanvas.h" -#include "modules/sksg/include/SkSGTransform.h" -#include "modules/sksg/src/SkSGTransformPriv.h" - -namespace sksg { - -GeometryTransform::GeometryTransform(sk_sp child, sk_sp transform) - : fChild(std::move(child)) - , fTransform(std::move(transform)) { - this->observeInval(fChild); - this->observeInval(fTransform); -} - -GeometryTransform::~GeometryTransform() { - this->unobserveInval(fChild); - this->unobserveInval(fTransform); -} - -void GeometryTransform::onClip(SkCanvas* canvas, bool antiAlias) const { - canvas->clipPath(fTransformedPath, SkClipOp::kIntersect, antiAlias); -} - -void GeometryTransform::onDraw(SkCanvas* canvas, const SkPaint& paint) const { - canvas->drawPath(fTransformedPath, paint); -} - -bool GeometryTransform::onContains(const SkPoint& p) const { - return fTransformedPath.contains(p.x(), p.y()); -} - -SkRect GeometryTransform::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { - SkASSERT(this->hasInval()); - - // We don't care about matrix reval results. - fTransform->revalidate(ic, ctm); - const auto m = TransformPriv::As(fTransform); - - auto bounds = fChild->revalidate(ic, ctm); - fTransformedPath = fChild->asPath(); - fTransformedPath.transform(m); - fTransformedPath.shrinkToFit(); - - m.mapRect(&bounds); - return bounds; -} - -SkPath GeometryTransform::onAsPath() const { - return fTransformedPath; -} - -} // namespace sksg diff --git a/modules/sksg/src/SkSGGroup.cpp b/modules/sksg/src/SkSGGroup.cpp index 829c5ae50fcec..f60c6ffbca992 100644 --- a/modules/sksg/src/SkSGGroup.cpp +++ b/modules/sksg/src/SkSGGroup.cpp @@ -13,6 +13,8 @@ namespace sksg { +Group::Group() = default; + Group::Group(std::vector> children) : fChildren(std::move(children)) { for (const auto& child : fChildren) { diff --git a/modules/sksg/src/SkSGImage.cpp b/modules/sksg/src/SkSGImage.cpp index 0b5e86bbb66a6..5cd00aaf813e6 100644 --- a/modules/sksg/src/SkSGImage.cpp +++ b/modules/sksg/src/SkSGImage.cpp @@ -23,8 +23,14 @@ void Image::onRender(SkCanvas* canvas, const RenderContext* ctx) const { paint.setAntiAlias(fAntiAlias); paint.setFilterQuality(fQuality); + sksg::RenderNode::ScopedRenderContext local_ctx(canvas, ctx); if (ctx) { - ctx->modulatePaint(canvas->getTotalMatrix(), &paint); + if (ctx->fMaskShader) { + // Mask shaders cannot be applied via drawImage - we need layer isolation. + // TODO: remove after clipShader conversion. + local_ctx.setIsolation(this->bounds(), canvas->getTotalMatrix(), true); + } + local_ctx->modulatePaint(canvas->getTotalMatrix(), &paint); } canvas->drawImage(fImage, 0, 0, &paint); diff --git a/modules/sksg/src/SkSGRoundEffect.cpp b/modules/sksg/src/SkSGRoundEffect.cpp deleted file mode 100644 index ba5db0587314f..0000000000000 --- a/modules/sksg/src/SkSGRoundEffect.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "modules/sksg/include/SkSGRoundEffect.h" - -#include "include/core/SkCanvas.h" -#include "include/core/SkStrokeRec.h" -#include "include/effects/SkCornerPathEffect.h" - -namespace sksg { - -RoundEffect::RoundEffect(sk_sp child) - : fChild(std::move(child)) { - this->observeInval(fChild); -} - -RoundEffect::~RoundEffect() { - this->unobserveInval(fChild); -} - -void RoundEffect::onClip(SkCanvas* canvas, bool antiAlias) const { - canvas->clipPath(fRoundedPath, SkClipOp::kIntersect, antiAlias); -} - -void RoundEffect::onDraw(SkCanvas* canvas, const SkPaint& paint) const { - SkASSERT(!paint.getPathEffect()); - - canvas->drawPath(fRoundedPath, paint); -} - -bool RoundEffect::onContains(const SkPoint& p) const { - return fRoundedPath.contains(p.x(), p.y()); -} - -SkPath RoundEffect::onAsPath() const { - return fRoundedPath; -} - -SkRect RoundEffect::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { - SkASSERT(this->hasInval()); - - const auto childbounds = fChild->revalidate(ic, ctm); - const auto path = fChild->asPath(); - - if (auto round = SkCornerPathEffect::Make(fRadius)) { - fRoundedPath.reset(); - SkStrokeRec rec(SkStrokeRec::kHairline_InitStyle); - SkAssertResult(round->filterPath(&fRoundedPath, path, &rec, &childbounds)); - } else { - fRoundedPath = path; - } - - fRoundedPath.shrinkToFit(); - - return fRoundedPath.computeTightBounds(); -} - -} // namespace sksg diff --git a/modules/sksg/src/SkSGTrimEffect.cpp b/modules/sksg/src/SkSGTrimEffect.cpp deleted file mode 100644 index 4c63b0c92c640..0000000000000 --- a/modules/sksg/src/SkSGTrimEffect.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2017 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "modules/sksg/include/SkSGTrimEffect.h" - -#include "include/core/SkCanvas.h" -#include "include/core/SkStrokeRec.h" -#include "include/effects/SkTrimPathEffect.h" - -namespace sksg { - -TrimEffect::TrimEffect(sk_sp child) - : fChild(std::move(child)) { - this->observeInval(fChild); -} - -TrimEffect::~TrimEffect() { - this->unobserveInval(fChild); -} - -void TrimEffect::onClip(SkCanvas* canvas, bool antiAlias) const { - canvas->clipPath(fTrimmedPath, SkClipOp::kIntersect, antiAlias); -} - -void TrimEffect::onDraw(SkCanvas* canvas, const SkPaint& paint) const { - SkASSERT(!paint.getPathEffect()); - - canvas->drawPath(fTrimmedPath, paint); -} - -bool TrimEffect::onContains(const SkPoint& p) const { - return fTrimmedPath.contains(p.x(), p.y()); -} - -SkPath TrimEffect::onAsPath() const { - return fTrimmedPath; -} - -SkRect TrimEffect::onRevalidate(InvalidationController* ic, const SkMatrix& ctm) { - SkASSERT(this->hasInval()); - - const auto childbounds = fChild->revalidate(ic, ctm); - const auto path = fChild->asPath(); - - if (auto trim = SkTrimPathEffect::Make(fStart, fStop, fMode)) { - fTrimmedPath.reset(); - SkStrokeRec rec(SkStrokeRec::kHairline_InitStyle); - SkAssertResult(trim->filterPath(&fTrimmedPath, path, &rec, &childbounds)); - } else { - fTrimmedPath = path; - } - - fTrimmedPath.shrinkToFit(); - - return fTrimmedPath.computeTightBounds(); -} - -} // namespace sksg diff --git a/modules/skshaper/BUILD.gn b/modules/skshaper/BUILD.gn index ef59f50d5d293..e595d85949207 100644 --- a/modules/skshaper/BUILD.gn +++ b/modules/skshaper/BUILD.gn @@ -16,7 +16,10 @@ if (skia_enable_skshaper) { if (is_component_build) { defines += [ "SKSHAPER_DLL" ] } - if (skia_use_icu) { + if (skia_use_fonthost_mac) { + defines += [ "SK_SHAPER_CORETEXT_AVAILABLE" ] + } + if (skia_use_icu && skia_use_harfbuzz) { defines += [ "SK_SHAPER_HARFBUZZ_AVAILABLE" ] } } @@ -29,6 +32,9 @@ if (skia_enable_skshaper) { deps = [ "../..:skia" ] defines = [ "SKSHAPER_IMPLEMENTATION=1" ] sources = skia_shaper_primitive_sources + if (skia_use_fonthost_mac) { + sources += skia_shaper_coretext_sources + } if (skia_use_icu && skia_use_harfbuzz) { sources += skia_shaper_harfbuzz_sources deps += [ diff --git a/modules/skshaper/include/SkShaper.h b/modules/skshaper/include/SkShaper.h index 104872cd21c58..c0864af5ab497 100644 --- a/modules/skshaper/include/SkShaper.h +++ b/modules/skshaper/include/SkShaper.h @@ -54,8 +54,9 @@ class SKSHAPER_API SkShaper { static std::unique_ptr MakeShapeThenWrap(sk_sp = nullptr); static std::unique_ptr MakeShapeDontWrapOrReorder(sk_sp = nullptr); #endif - // Returns nullptr if not supported + #ifdef SK_SHAPER_CORETEXT_AVAILABLE static std::unique_ptr MakeCoreText(); + #endif static std::unique_ptr Make(sk_sp = nullptr); diff --git a/modules/skshaper/skshaper.gni b/modules/skshaper/skshaper.gni index ba3f09dd36f8f..425cf3f4b964b 100644 --- a/modules/skshaper/skshaper.gni +++ b/modules/skshaper/skshaper.gni @@ -11,7 +11,7 @@ skia_shaper_public = [ "$_include/SkShaper.h" ] skia_shaper_primitive_sources = [ "$_src/SkShaper.cpp", - "$_src/SkShaper_coretext.cpp", "$_src/SkShaper_primitive.cpp", ] skia_shaper_harfbuzz_sources = [ "$_src/SkShaper_harfbuzz.cpp" ] +skia_shaper_coretext_sources = [ "$_src/SkShaper_coretext.cpp" ] diff --git a/modules/skshaper/src/SkShaper_coretext.cpp b/modules/skshaper/src/SkShaper_coretext.cpp index ad47d8c22ce7d..50689ccc349fc 100644 --- a/modules/skshaper/src/SkShaper_coretext.cpp +++ b/modules/skshaper/src/SkShaper_coretext.cpp @@ -7,8 +7,6 @@ #include "modules/skshaper/include/SkShaper.h" -#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) - #ifdef SK_BUILD_FOR_MAC #import #endif @@ -22,6 +20,8 @@ #include "include/ports/SkTypeface_mac.h" #include "src/core/SkArenaAlloc.h" +#include "src/utils/mac/SkCGBase.h" +#include "src/utils/mac/SkUniqueCFRef.h" #include @@ -96,15 +96,6 @@ void SkShaper_CoreText::shape(const char* utf8, size_t utf8Bytes, width, handler); } -template class AutoCF { - T fObj; -public: - AutoCF(T obj) : fObj(obj) {} - ~AutoCF() { CFRelease(fObj); } - - T get() const { return fObj; } -}; - // CTFramesetter/CTFrame can do this, but require version 10.14 class LineBreakIter { CTTypesetterRef fTypesetter; @@ -128,28 +119,16 @@ class LineBreakIter { }; static void dict_add_double(CFMutableDictionaryRef d, const void* name, double value) { - AutoCF number = CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value); + SkUniqueCFRef number( + CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value)); CFDictionaryAddValue(d, name, number.get()); } -static void dump(CFDictionaryRef d) { - CFIndex count = CFDictionaryGetCount(d); - std::vector keys(count); - std::vector vals(count); - - CFDictionaryGetKeysAndValues(d, keys.data(), vals.data()); - - for (CFIndex i = 0; i < count; ++i) { - CFStringRef kstr = (CFStringRef)keys[i]; - const char* ckstr = CFStringGetCStringPtr(kstr, kCFStringEncodingUTF8); - SkDebugf("dict[%d] %s %p\n", i, ckstr, vals[i]); - } -} - -static CTFontRef create_ctfont_from_font(const SkFont& font) { +static SkUniqueCFRef create_ctfont_from_font(const SkFont& font) { auto typeface = font.getTypefaceOrDefault(); auto ctfont = SkTypeface_GetCTFontRef(typeface); - return CTFontCreateCopyWithAttributes(ctfont, font.getSize(), nullptr, nullptr); + return SkUniqueCFRef( + CTFontCreateCopyWithAttributes(ctfont, font.getSize(), nullptr, nullptr)); } static SkFont run_to_font(CTRunRef run, const SkFont& orig) { @@ -157,7 +136,7 @@ static SkFont run_to_font(CTRunRef run, const SkFont& orig) { CTFontRef ct = (CTFontRef)CFDictionaryGetValue(attr, kCTFontAttributeName); if (!ct) { SkDebugf("no ctfont in Run Attributes\n"); - dump(attr); + CFShow(attr); return orig; } // Do I need to add a local cache, or allow the caller to manage this lookup? @@ -174,25 +153,16 @@ void SkShaper_CoreText::shape(const char* utf8, size_t utf8Bytes, bool /* leftToRight */, SkScalar width, RunHandler* handler) const { - auto cgfloat_to_scalar = [](CGFloat x) { - SkScalar s; - if (sizeof(CGFloat) == sizeof(double)) { - s = SkDoubleToScalar(x); - } else { - s = x; - } - return s; - }; - - AutoCF textString = CFStringCreateWithBytes(nullptr, (const uint8_t*)utf8, utf8Bytes, - kCFStringEncodingUTF8, false); + SkUniqueCFRef textString( + CFStringCreateWithBytes(kCFAllocatorDefault, (const uint8_t*)utf8, utf8Bytes, + kCFStringEncodingUTF8, false)); - AutoCF ctfont = create_ctfont_from_font(font); + SkUniqueCFRef ctfont = create_ctfont_from_font(font); - AutoCF attr = + SkUniqueCFRef attr( CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); + &kCFTypeDictionaryValueCallBacks)); CFDictionaryAddValue(attr.get(), kCTFontAttributeName, ctfont.get()); if (false) { // trying to see what these affect @@ -200,10 +170,11 @@ void SkShaper_CoreText::shape(const char* utf8, size_t utf8Bytes, dict_add_double(attr.get(), kCTKernAttributeName, 0.0); } - AutoCF attrString = - CFAttributedStringCreate(nullptr, textString.get(), attr.get()); + SkUniqueCFRef attrString( + CFAttributedStringCreate(kCFAllocatorDefault, textString.get(), attr.get())); - AutoCF typesetter = CTTypesetterCreateWithAttributedString(attrString.get()); + SkUniqueCFRef typesetter( + CTTypesetterCreateWithAttributedString(attrString.get())); SkSTArenaAlloc<4096> arena; @@ -271,7 +242,7 @@ void SkShaper_CoreText::shape(const char* utf8, size_t utf8Bytes, for (CFIndex k = 0; k < runGlyphs; ++k) { buffer.positions[k] = { - buffer.point.fX + cgfloat_to_scalar(positions[k].x), + buffer.point.fX + SkScalarFromCGFloat(positions[k].x), buffer.point.fY, }; if (buffer.offsets) { @@ -287,9 +258,3 @@ void SkShaper_CoreText::shape(const char* utf8, size_t utf8Bytes, handler->commitLine(); } } - -#else -std::unique_ptr SkShaper::MakeCoreText() { - return nullptr; -} -#endif diff --git a/modules/skshaper/src/SkShaper_harfbuzz.cpp b/modules/skshaper/src/SkShaper_harfbuzz.cpp index d2e3bd4d248c7..c42575d635630 100644 --- a/modules/skshaper/src/SkShaper_harfbuzz.cpp +++ b/modules/skshaper/src/SkShaper_harfbuzz.cpp @@ -669,6 +669,7 @@ class ShaperHarfBuzz : public SkShaper { private: const sk_sp fFontMgr; HBBuffer fBuffer; + hb_language_t fUndefinedLanguage; void shape(const char* utf8, size_t utf8Bytes, const SkFont&, @@ -794,6 +795,7 @@ ShaperHarfBuzz::ShaperHarfBuzz(HBBuffer buffer, ICUBrk line, ICUBrk grapheme, , fGraphemeBreakIterator(std::move(grapheme)) , fFontMgr(std::move(fontmgr)) , fBuffer(std::move(buffer)) + , fUndefinedLanguage(hb_language_from_string("und", -1)) {} void ShaperHarfBuzz::shape(const char* utf8, size_t utf8Bytes, @@ -1332,7 +1334,14 @@ ShapedRun ShaperHarfBuzz::shape(char const * const utf8, hb_direction_t direction = is_LTR(bidi.currentLevel()) ? HB_DIRECTION_LTR:HB_DIRECTION_RTL; hb_buffer_set_direction(buffer, direction); hb_buffer_set_script(buffer, hb_script_from_iso15924_tag((hb_tag_t)script.currentScript())); - hb_buffer_set_language(buffer, hb_language_from_string(language.currentLanguage(), -1)); + // Buffers with HB_LANGUAGE_INVALID race since hb_language_get_default is not thread safe. + // The user must provide a language, but may provide data hb_language_from_string cannot use. + // Use "und" for the undefined language in this case (RFC5646 4.1 5). + hb_language_t hbLanguage = hb_language_from_string(language.currentLanguage(), -1); + if (hbLanguage == HB_LANGUAGE_INVALID) { + hbLanguage = fUndefinedLanguage; + } + hb_buffer_set_language(buffer, hbLanguage); hb_buffer_guess_segment_properties(buffer); // TODO: better cache HBFace (data) / hbfont (typeface) diff --git a/platform_tools/android/apps/arcore/CMakeLists.txt b/platform_tools/android/apps/arcore/CMakeLists.txt deleted file mode 100644 index 760b7bf82b6d7..0000000000000 --- a/platform_tools/android/apps/arcore/CMakeLists.txt +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (C) 2018 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -## - -# Sets the minimum version of CMake required to build the native library. -cmake_minimum_required(VERSION 3.4.1) - -# Import the ARCore library. -add_library(arcore SHARED IMPORTED) -set_target_properties(arcore PROPERTIES IMPORTED_LOCATION - "${ARCORE_LIBPATH}/${ANDROID_ABI}/libarcore_sdk_c.so") - -add_library(sk_skia SHARED IMPORTED) -set_target_properties(sk_skia PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/src/main/libs/${ANDROID_ABI}/libarcore.so") - -# This is the main app library. -add_library(hello_ar_native SHARED - "src/main/cpp/hello_ar_application.cc" - "src/main/cpp/background_renderer.cc" - "src/main/cpp/jni_interface.cc" - "src/main/cpp/plane_renderer.cc" - "src/main/cpp/point_cloud_renderer.cc" - "src/main/cpp/util.cc" - "src/main/cpp/pending_anchor.cc" - "src/main/cpp/anchor_wrapper.cc" - - "src/main/cpp/SkArCamera.cpp") - -target_include_directories(hello_ar_native PRIVATE - #BASIC AR NATIVE CODE - "src/main/cpp" - - #ARCORE LIBRARY - "${ARCORE_INCLUDE}" - - #GLM - "${ANDROID_NDK}/sources/third_party/vulkan/src/libs/glm" - - #SKIA INCLUDE DIRECTORIES - "${SKIA_INCLUDE_PATH}/../modules/skshaper/include" - "${SKIA_INCLUDE_PATH}/../modules/skottie/include" - "${SKIA_INCLUDE_PATH}/../tools" - "${SKIA_INCLUDE_PATH}/../gm" - "${SKIA_INCLUDE_PATH}/core" - "${SKIA_INCLUDE_PATH}/config" - "${SKIA_INCLUDE_PATH}/gpu" - "${SKIA_INCLUDE_PATH}/android" - "${SKIA_INCLUDE_PATH}/c" - "${SKIA_INCLUDE_PATH}/codec" - "${SKIA_INCLUDE_PATH}/effects" - "${SKIA_INCLUDE_PATH}/encode" - "${SKIA_INCLUDE_PATH}/pathops" - "${SKIA_INCLUDE_PATH}/ports" - "${SKIA_INCLUDE_PATH}/private" - "${SKIA_INCLUDE_PATH}/svg" - "${SKIA_INCLUDE_PATH}/utils" - "${SKIA_INCLUDE_PATH}/views") - -target_link_libraries(hello_ar_native - android - log - GLESv2 - arcore - sk_skia) diff --git a/platform_tools/android/apps/arcore/build.gradle b/platform_tools/android/apps/arcore/build.gradle deleted file mode 100644 index 0e82ab88312ef..0000000000000 --- a/platform_tools/android/apps/arcore/build.gradle +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2015 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ -apply plugin: 'com.android.application' - -/* -The arcore aar library contains the native shared libraries. These are -extracted before building to a temporary directory. - */ -def arcore_libpath = "${buildDir}/arcore-native" - -// Create a configuration to mark which aars to extract .so files from -configurations { natives } - -android { - sourceSets.main.jni.srcDirs = [] //disable automatic ndk-build call - sourceSets.main.jniLibs.srcDir "src/main/libs" - productFlavors { arm64 {} } - - setupSkiaLibraryBuild(project, applicationVariants, "libarcore") - - compileSdkVersion 27 - defaultConfig { - applicationId "org.skia.viewer" - // 24 is the minimum since ARCore only works with 24 and higher. - minSdkVersion 24 - targetSdkVersion 27 - versionCode 1 - versionName "1.0" - - externalNativeBuild { - cmake { - cppFlags "-std=c++11", "-Wall" - arguments "-DANDROID_STL=c++_static", - "-DARCORE_LIBPATH=${arcore_libpath}/jni", - "-DARCORE_INCLUDE=${project.rootDir}/../../libraries/include", - "-DSKIA_INCLUDE_PATH=${project.rootDir}/../../../include" - } - } - ndk { - abiFilters "arm64-v8a" - } - } - flavorDimensions "base" - externalNativeBuild { - cmake { - path "CMakeLists.txt" - } - } - -} - -dependencies { - // ARCore library - implementation 'com.google.ar:core:1.2.0' - natives 'com.google.ar:core:1.2.0' - - implementation 'com.android.support:appcompat-v7:27.0.2' - implementation 'com.android.support:design:27.0.2' -} - -// Extracts the shared libraries from aars in the natives configuration. -// This is done so that NDK builds can access these libraries. -task extractNativeLibraries() { - doFirst { - configurations.natives.files.each { f -> - copy { - from zipTree(f) - into arcore_libpath - include "jni/**/*" - } - } - } -} - - -tasks.whenTaskAdded { - task-> if (task.name.contains("external") && !task.name.contains("Clean")) { - task.dependsOn(extractNativeLibraries) - - //make sure skia lib is built and copied in the correct directory before building arcore - tasks.whenTaskAdded { - t-> if (t.name.contains("CopySkiaLib")) { - task.dependsOn(t) - } - } - } -} - diff --git a/platform_tools/android/apps/arcore/src/main/AndroidManifest.xml b/platform_tools/android/apps/arcore/src/main/AndroidManifest.xml deleted file mode 100644 index 975dc2592db97..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/AndroidManifest.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/platform_tools/android/apps/arcore/src/main/assets/models/trigrid.png b/platform_tools/android/apps/arcore/src/main/assets/models/trigrid.png deleted file mode 100644 index d85eedf72cbdd..0000000000000 Binary files a/platform_tools/android/apps/arcore/src/main/assets/models/trigrid.png and /dev/null differ diff --git a/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.cpp b/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.cpp deleted file mode 100644 index f773582aada3b..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2018 Google LLC - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include -#include "platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.h" -#include "SkArUtil.h" - -std::unique_ptr SkArCamera::Make(SkArSession* session, SkArFrame* frame) { - return std::unique_ptr(new SkArCamera(session, frame)); -} - -SkArCamera::~SkArCamera() { - ArCamera_release(fArCamera); -} - -SkArCamera::SkArCamera(SkArSession* session, SkArFrame* frame) : fArCamera(nullptr) { - ArFrame_acquireCamera(session->getArSession(), frame->getArFrame(), &fArCamera); -} - -void SkArCamera::getViewMatrix(const SkArSession* session, float outColMajor[16]) { - ArCamera_getViewMatrix(session->getArSession(), fArCamera, outColMajor); -} - -void SkArCamera::getProjectionMatrix(const SkArSession* session, float nearClip, - float farClip, float outColMajor[16]) { - ArCamera_getProjectionMatrix(session->getArSession(), fArCamera, nearClip, farClip, - outColMajor); -} - -SkArTrackingState SkArCamera::getTrackingState(const SkArSession* session) { - ArTrackingState arTrackingState; - ArCamera_getTrackingState(session->getArSession(), fArCamera, &arTrackingState); - return SkArUtil::MakeSkArTrackingState(arTrackingState); -} diff --git a/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.h b/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.h deleted file mode 100644 index 0cf8f3c449ecf..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/SkArCamera.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2018 Google LLC - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkArCamera_DEFINED -#define SkArCamera_DEFINED - -#include -#include "SkArTrackingState.h" - -class ArCamera; -class SkArFrame; -class SkArSession; - -/** - * Provides information about the camera that is used to capture images. Such information - * includes projection matrices, pose of camera... - */ - -class SkArCamera { - -public: - /** - * Factory method used to construct an SkArCamera from the current frame, using the current - * session - * @param session raw pointer to the current SkArSession - * @param frame raw pointer to the current SkArFrame - * @return unique pointer to an SkArCamera. Never nullptr - */ - static std::unique_ptr Make(SkArSession* session, SkArFrame* frame); - - ~SkArCamera(); - - /** - * Fills outColMajor with the values of the camera's current View matrix in column-major order - * @param session current SkArSession - * @param outColMajor 16-float array that will contain the View matrix content - */ - void getViewMatrix(const SkArSession* session, float outColMajor[16]); - - /** - * Fills outColMajor with the values of the camera's current Projection matrix in - * column-major order - * @param session current SkArSession - * @param nearClip wanted near clip value for the camera - * @param farClip wanted far clip value for the camera - * @param outColMajor 16-float array that will contain the Projection matrix content - */ - void getProjectionMatrix(const SkArSession* session, float nearClip, float farClip, - float outColMajor[16]); - - /** - * Used to check the current SkArTrackingState of the camera - * @param session current SkArSession - * @return tracking state of the SkArCamera described by the SkArTrackingState enum - */ - SkArTrackingState getTrackingState(const SkArSession* session); - -private: - SkArCamera(SkArSession* session, SkArFrame* frame); - - // This is a raw pointer. Its lifetime matches that of this class (SkArCamera) - ArCamera* fArCamera; -}; -#endif // SkArCamera_DEFINED diff --git a/platform_tools/android/apps/arcore/src/main/cpp/anchor_wrapper.cc b/platform_tools/android/apps/arcore/src/main/cpp/anchor_wrapper.cc deleted file mode 100644 index 1ef6fb8dbd0d6..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/anchor_wrapper.cc +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2018 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.h" -#include "arcore_c_api.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/anchor_wrapper.h" - -namespace hello_ar { - - AnchorWrapper::AnchorWrapper(ArAnchor *anchor) : anchor(anchor) {} - - const ArAnchor* AnchorWrapper::GetArAnchor() { - return anchor; - } - DrawableType AnchorWrapper::GetDrawableType() { - return drawableType; - } - - void AnchorWrapper::SetArAnchor(ArAnchor* anchor) { - this->anchor = anchor; - } - void AnchorWrapper::SetDrawableType(DrawableType drawableType) { - this->drawableType = drawableType; - } - - - -} // namespace hello_ar diff --git a/platform_tools/android/apps/arcore/src/main/cpp/anchor_wrapper.h b/platform_tools/android/apps/arcore/src/main/cpp/anchor_wrapper.h deleted file mode 100644 index ff05e57010def..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/anchor_wrapper.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2018 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef C_ARCORE_HELLO_AR_ANCHOR_WRAPPER_H_ -#define C_ARCORE_HELLO_AR_ANCHOR_WRAPPER_H_ -#include "arcore_c_api.h" - -namespace hello_ar { - enum DrawableType { - TEXT = 0, CIRCLE = 1, RECT = 2 - }; - - class AnchorWrapper { - public: - AnchorWrapper(ArAnchor* anchor); - - const ArAnchor* GetArAnchor(); - DrawableType GetDrawableType(); - bool GetInEditMode(); - - void SetArAnchor(ArAnchor* anchor); - void SetDrawableType(DrawableType drawableType); - void SetInEditMode(bool inEditMode); - - private: - ArAnchor* anchor; - DrawableType drawableType; - bool inEditMode = false; - }; -} // namespace hello_ar - -#endif diff --git a/platform_tools/android/apps/arcore/src/main/cpp/background_renderer.cc b/platform_tools/android/apps/arcore/src/main/cpp/background_renderer.cc deleted file mode 100644 index c701dbd9010f6..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/background_renderer.cc +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -// This modules handles drawing the passthrough camera image into the OpenGL -// scene. - -#include - -#include "platform_tools/android/apps/arcore/src/main/cpp/background_renderer.h" - -namespace hello_ar { - namespace { -// Positions of the quad vertices in clip space (X, Y, Z). - const GLfloat kVertices[] = { - -1.0f, -1.0f, 0.0f, +1.0f, -1.0f, 0.0f, - -1.0f, +1.0f, 0.0f, +1.0f, +1.0f, 0.0f, - }; - -// UVs of the quad vertices (S, T) - const GLfloat kUvs[] = { - 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - }; - - constexpr char kVertexShader[] = R"( - attribute vec4 vertex; - attribute vec2 textureCoords; - varying vec2 v_textureCoords; - void main() { - v_textureCoords = textureCoords; - gl_Position = vertex; - })"; - - constexpr char kFragmentShader[] = R"( - #extension GL_OES_EGL_image_external : require - precision mediump float; - uniform samplerExternalOES texture; - varying vec2 v_textureCoords; - void main() { - gl_FragColor = texture2D(texture, v_textureCoords); - })"; - - } // namespace - - void BackgroundRenderer::InitializeGlContent() { - shader_program_ = util::CreateProgram(kVertexShader, kFragmentShader); - - if (!shader_program_) { - LOGE("Could not create program."); - } - - glGenTextures(1, &texture_id_); - glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_id_); - glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - uniform_texture_ = glGetUniformLocation(shader_program_, "texture"); - attribute_vertices_ = glGetAttribLocation(shader_program_, "vertex"); - attribute_uvs_ = glGetAttribLocation(shader_program_, "textureCoords"); - } - - void BackgroundRenderer::Draw(const ArSession *session, const ArFrame *frame) { - static_assert(std::extent::value == kNumVertices * 2, - "Incorrect kUvs length"); - static_assert(std::extent::value == kNumVertices * 3, - "Incorrect kVertices length"); - - // If display rotation changed (also includes view size change), we need to - // re-query the uv coordinates for the on-screen portion of the camera image. - int32_t geometry_changed = 0; - ArFrame_getDisplayGeometryChanged(session, frame, &geometry_changed); - if (geometry_changed != 0 || !uvs_initialized_) { - ArFrame_transformDisplayUvCoords(session, frame, kNumVertices * 2, kUvs, - transformed_uvs_); - uvs_initialized_ = true; - } - glUseProgram(shader_program_); - glDepthMask(GL_FALSE); - - glUniform1i(uniform_texture_, 1); - glActiveTexture(GL_TEXTURE1); - glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_id_); - - glEnableVertexAttribArray(attribute_vertices_); - glVertexAttribPointer(attribute_vertices_, 3, GL_FLOAT, GL_FALSE, 0, - kVertices); - - glEnableVertexAttribArray(attribute_uvs_); - glVertexAttribPointer(attribute_uvs_, 2, GL_FLOAT, GL_FALSE, 0, - transformed_uvs_); - - glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - glUseProgram(0); - glDepthMask(GL_TRUE); - util::CheckGlError("BackgroundRenderer::Draw() error"); - } - - GLuint BackgroundRenderer::GetTextureId() const { return texture_id_; } - -} // namespace hello_ar diff --git a/platform_tools/android/apps/arcore/src/main/cpp/background_renderer.h b/platform_tools/android/apps/arcore/src/main/cpp/background_renderer.h deleted file mode 100644 index e0624f5cc4a99..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/background_renderer.h +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef C_ARCORE_HELLO_AR_BACKGROUND_RENDERER_H_ -#define C_ARCORE_HELLO_AR_BACKGROUND_RENDERER_H_ - -#include -#include -#include - -#include "arcore_c_api.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/util.h" - -namespace hello_ar { - -// This class renders the passthrough camera image into the OpenGL frame. - class BackgroundRenderer { - public: - BackgroundRenderer() = default; - - ~BackgroundRenderer() = default; - - // Sets up OpenGL state. Must be called on the OpenGL thread and before any - // other methods below. - void InitializeGlContent(); - - // Draws the background image. This methods must be called for every ArFrame - // returned by ArSession_update() to catch display geometry change events. - void Draw(const ArSession *session, const ArFrame *frame); - - // Returns the generated texture name for the GL_TEXTURE_EXTERNAL_OES target. - GLuint GetTextureId() const; - - private: - static constexpr int kNumVertices = 4; - - GLuint shader_program_; - GLuint texture_id_; - - GLuint attribute_vertices_; - GLuint attribute_uvs_; - GLuint uniform_texture_; - - float transformed_uvs_[kNumVertices * 2]; - bool uvs_initialized_ = false; - }; -} // namespace hello_ar -#endif // C_ARCORE_HELLO_AR_BACKGROUND_RENDERER_H_ diff --git a/platform_tools/android/apps/arcore/src/main/cpp/glm.h b/platform_tools/android/apps/arcore/src/main/cpp/glm.h deleted file mode 100644 index cf2a8440b884a..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/glm.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef C_ARCORE_HELLOE_AR_GLM_H_ -#define C_ARCORE_HELLOE_AR_GLM_H_ - -#define GLM_FORCE_RADIANS 1 -#include "glm.hpp" -#include "gtc/matrix_transform.hpp" -#include "gtc/type_ptr.hpp" -#include "gtx/quaternion.hpp" - -#endif diff --git a/platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.cc b/platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.cc deleted file mode 100644 index fffa5d71131f8..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.cc +++ /dev/null @@ -1,986 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.h" -#include - -#include /* acos */ -#include "include/core/SkCanvas.h" -#include "include/core/SkFontStyle.h" -#include "include/core/SkMatrix.h" -#include "include/core/SkMatrix44.h" -#include "include/core/SkPoint3.h" -#include "include/core/SkStream.h" -#include "include/core/SkSurface.h" -#include "include/core/SkTextBlob.h" -#include "include/core/SkTypeface.h" -#include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" -#include "include/gpu/gl/GrGLTypes.h" -#include "include/utils/Sk3D.h" -#include "modules/skottie/include/Skottie.h" -#include "modules/skshaper/include/SkShaper.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/anchor_wrapper.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/glm.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/pending_anchor.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/util.h" -#include "tools/Resources.h" - -namespace hello_ar { - namespace { - constexpr size_t kMaxNumberOfAndroidsToRender = 1; - constexpr int32_t kPlaneColorRgbaSize = 16; - - const glm::vec3 kWhite = {255, 255, 255}; - - constexpr std::array kPlaneColorRgba = { - {0xFFFFFFFF, 0xF44336FF, 0xE91E63FF, 0x9C27B0FF, 0x673AB7FF, 0x3F51B5FF, - 0x2196F3FF, 0x03A9F4FF, 0x00BCD4FF, 0x009688FF, 0x4CAF50FF, 0x8BC34AFF, - 0xCDDC39FF, 0xFFEB3BFF, 0xFFC107FF, 0xFF9800FF}}; - - inline glm::vec3 GetRandomPlaneColor() { - const int32_t colorRgba = kPlaneColorRgba[std::rand() % kPlaneColorRgbaSize]; - return glm::vec3(((colorRgba >> 24) & 0xff) / 255.0f, - ((colorRgba >> 16) & 0xff) / 255.0f, - ((colorRgba >> 8) & 0xff) / 255.0f); - } - } // namespace - - HelloArApplication::HelloArApplication(AAssetManager *asset_manager) - : asset_manager_(asset_manager) { - LOGI("OnCreate()"); - } - - HelloArApplication::~HelloArApplication() { - if (ar_session_ != nullptr) { - ArSession_destroy(ar_session_); - ArFrame_destroy(ar_frame_); - } - } - - void HelloArApplication::OnPause() { - LOGI("OnPause()"); - if (ar_session_ != nullptr) { - ArSession_pause(ar_session_); - } - } - - void HelloArApplication::OnResume(void *env, void *context, void *activity) { - LOGI("OnResume()"); - - if (ar_session_ == nullptr) { - ArInstallStatus install_status; - // If install was not yet requested, that means that we are resuming the - // activity first time because of explicit user interaction (such as - // launching the application) - bool user_requested_install = !install_requested_; - - // === ATTENTION! ATTENTION! ATTENTION! === - // This method can and will fail in user-facing situations. Your - // application must handle these cases at least somewhat gracefully. See - // HelloAR Java sample code for reasonable behavior. - CHECK(ArCoreApk_requestInstall(env, activity, user_requested_install, - &install_status) == AR_SUCCESS); - - switch (install_status) { - case AR_INSTALL_STATUS_INSTALLED: - break; - case AR_INSTALL_STATUS_INSTALL_REQUESTED: - install_requested_ = true; - return; - } - - // === ATTENTION! ATTENTION! ATTENTION! === - // This method can and will fail in user-facing situations. Your - // application must handle these cases at least somewhat gracefully. See - // HelloAR Java sample code for reasonable behavior. - CHECK(ArSession_create(env, context, &ar_session_) == AR_SUCCESS); - CHECK(ar_session_); - - ArFrame_create(ar_session_, &ar_frame_); - CHECK(ar_frame_); - - ArSession_setDisplayGeometry(ar_session_, display_rotation_, width_, - height_); - } - - const ArStatus status = ArSession_resume(ar_session_); - CHECK(status == AR_SUCCESS); - } - - void HelloArApplication::OnSurfaceCreated() { - LOGI("OnSurfaceCreated()"); - - background_renderer_.InitializeGlContent(); - point_cloud_renderer_.InitializeGlContent(); - plane_renderer_.InitializeGlContent(asset_manager_); - } - - void HelloArApplication::OnDisplayGeometryChanged(int display_rotation, - int width, int height) { - LOGI("OnSurfaceChanged(%d, %d)", width, height); - glViewport(0, 0, width, height); - display_rotation_ = display_rotation; - width_ = width; - height_ = height; - - if (ar_session_ != nullptr) { - ArSession_setDisplayGeometry(ar_session_, display_rotation, width, height); - } - } - - void HelloArApplication::OnObjectRotationChanged(int rotation) { - LOGI("OnObjectRotationChanged(%d)", rotation); - currentObjectRotation = rotation; - } - - void HelloArApplication::OnAction(float value) { - LOGI("OnAction(%.6f)", value); - currentValue = value; - } - - void DrawText(SkCanvas *canvas, SkPaint *paint, const char text[]) { - float spacing = 0.05; - for (int i = 0; i < sizeof(text) / sizeof(text[0]); i++) { - const char letter[] = {text[i]}; - size_t byteLength = strlen(static_cast(letter)); - canvas->drawText(letter, byteLength, spacing * i, 0, *paint); - } - } - - void DrawAxes(SkCanvas *canvas, SkMatrix44 m) { - SkPaint p; - p.setStrokeWidth(10); - SkPoint3 src[4] = { - {0, 0, 0}, - {0.2, 0, 0}, - {0, 0.2, 0}, - {0, 0, 0.2}, - }; - SkPoint dst[4]; - Sk3MapPts(dst, m, src, 4); - - const char str[] = "XYZ"; - p.setColor(SK_ColorRED); - canvas->drawLine(dst[0], dst[1], p); - - p.setColor(SK_ColorGREEN); - canvas->drawLine(dst[0], dst[2], p); - - p.setColor(SK_ColorBLUE); - canvas->drawLine(dst[0], dst[3], p); - } - - void DrawVector(SkCanvas *canvas, SkMatrix44 m, glm::vec3 begin, glm::vec3 end, SkColor c) { - SkPaint p; - p.setStrokeWidth(15); - SkPoint3 src[2] = { - {begin.x, begin.y, begin.z}, - {end.x, end.y, end.z} - }; - SkPoint dst[2]; - Sk3MapPts(dst, m, src, 2); - - const char str[] = "XYZ"; - p.setColor(c); - canvas->drawLine(dst[0], dst[1], p); - } - - void DrawBoundingBox(SkCanvas* canvas) { - SkPaint paint; - paint.setColor(SK_ColorYELLOW); - SkIRect bounds = canvas->getDeviceClipBounds(); - SkRect b = SkRect::Make(bounds); - - canvas->drawRect(b, paint); - } - - void HelloArApplication::OnDrawFrame() { - grContext = GrContext::MakeGL(); - - GrBackendRenderTarget target; - sk_sp surface = nullptr; - GrGLFramebufferInfo framebuffer_info; - framebuffer_info.fFBOID = 0; - framebuffer_info.fFormat = 0x8058; - - - glClearColor(0.9f, 0.9f, 0.9f, 1.0f); - glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); - - glEnable(GL_CULL_FACE); - glEnable(GL_DEPTH_TEST); - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - if (ar_session_ == nullptr) return; - - ArSession_setCameraTextureName(ar_session_, - background_renderer_.GetTextureId()); - - // Update session to get current frame and render camera background. - if (ArSession_update(ar_session_, ar_frame_) != AR_SUCCESS) { - LOGE("HelloArApplication::OnDrawFrame ArSession_update error"); - } - - // GET CAMERA INFO - ArCamera *ar_camera; - ArFrame_acquireCamera(ar_session_, ar_frame_, &ar_camera); - - glm::mat4 view_mat; - glm::mat4 projection_mat; - ArCamera_getViewMatrix(ar_session_, ar_camera, glm::value_ptr(view_mat)); - ArCamera_getProjectionMatrix(ar_session_, ar_camera, - /*near=*/0.1f, /*far=*/100.f, - glm::value_ptr(projection_mat)); - - ArTrackingState camera_tracking_state; - ArCamera_getTrackingState(ar_session_, ar_camera, &camera_tracking_state); - ArCamera_release(ar_camera); - - background_renderer_.Draw(ar_session_, ar_frame_); - - // If the camera isn't tracking don't bother rendering other objects. - if (camera_tracking_state != AR_TRACKING_STATE_TRACKING) { - return; - } - - // Get light estimation value. - ArLightEstimate *ar_light_estimate; - ArLightEstimateState ar_light_estimate_state; - ArLightEstimate_create(ar_session_, &ar_light_estimate); - - ArFrame_getLightEstimate(ar_session_, ar_frame_, ar_light_estimate); - ArLightEstimate_getState(ar_session_, ar_light_estimate, - &ar_light_estimate_state); - - // Set light intensity to default. Intensity value ranges from 0.0f to 1.0f. - // The first three components are color scaling factors. - // The last one is the average pixel intensity in gamma space. - float color_correction[4] = {1.f, 1.f, 1.f, 1.f}; - if (ar_light_estimate_state == AR_LIGHT_ESTIMATE_STATE_VALID) { - ArLightEstimate_getColorCorrection(ar_session_, ar_light_estimate, - color_correction); - } - - ArLightEstimate_destroy(ar_light_estimate); - ar_light_estimate = nullptr; - SkMatrix44 skProj; - SkMatrix44 skView; - SkMatrix skViewport; - - skProj = util::GlmMatToSkMat(projection_mat); - skView = util::GlmMatToSkMat(view_mat); - skViewport.setScale(width_ / 2, -height_ / 2); - skViewport.postTranslate(width_ / 2, height_ / 2); - target = GrBackendRenderTarget(width_, height_, 0, 0, framebuffer_info); - surface = SkSurface::MakeFromBackendRenderTarget(grContext.get(), - target, - kBottomLeft_GrSurfaceOrigin, - kRGBA_8888_SkColorType, - nullptr, nullptr); - - // Render Andy objects. - std::vector models; - //glm::mat4 model_mat(1.0f); - for (const auto &obj_iter : tracked_obj_set_) { - ArTrackingState tracking_state = AR_TRACKING_STATE_STOPPED; - ArAnchor_getTrackingState(ar_session_, obj_iter, &tracking_state); - if (tracking_state == AR_TRACKING_STATE_TRACKING) { - // Render object only if the tracking state is AR_TRACKING_STATE_TRACKING. - //util::GetTransformMatrixFromAnchor(ar_session_, obj_iter, &model_mat); - //DRAW ANDY - //andy_renderer_.Draw(glm::mat4(1), glm::mat4(1), model_mat, color_correction); - - //PREPARE SKIA MATS - - SkMatrix44 skModel; - - switch (currentObjectRotation) { - case 0: { - auto iter = anchor_skmat4_axis_aligned_map_.find(obj_iter); - if (iter != anchor_skmat4_axis_aligned_map_.end()) { - skModel = iter->second; - models.push_back(skModel); - } - } - break; - case 1: { - auto iter = anchor_skmat4_camera_aligned_map_.find(obj_iter); - if (iter != anchor_skmat4_camera_aligned_map_.end()) { - skModel = iter->second; - models.push_back(skModel); - } - } - break; - case 2: { - auto iter = anchor_skmat4_snap_aligned_map_.find(obj_iter); - if (iter != anchor_skmat4_snap_aligned_map_.end()) { - skModel = iter->second; - models.push_back(skModel); - } - } - break; - default: { - auto iter = anchor_skmat4_axis_aligned_map_.find(obj_iter); - if (iter != anchor_skmat4_axis_aligned_map_.end()) { - skModel = iter->second; - models.push_back(skModel); - } - } - break; - } - - } - } - - // Update and render planes. - ArTrackableList *plane_list = nullptr; - ArTrackableList_create(ar_session_, &plane_list); - CHECK(plane_list != nullptr); - - ArTrackableType plane_tracked_type = AR_TRACKABLE_PLANE; - ArSession_getAllTrackables(ar_session_, plane_tracked_type, plane_list); - - int32_t plane_list_size = 0; - ArTrackableList_getSize(ar_session_, plane_list, &plane_list_size); - plane_count_ = plane_list_size; - - for (int i = 0; i < plane_list_size; ++i) { - ArTrackable *ar_trackable = nullptr; - ArTrackableList_acquireItem(ar_session_, plane_list, i, &ar_trackable); - ArPlane *ar_plane = ArAsPlane(ar_trackable); - ArTrackingState out_tracking_state; - ArTrackable_getTrackingState(ar_session_, ar_trackable, - &out_tracking_state); - - ArPlane *subsume_plane; - ArPlane_acquireSubsumedBy(ar_session_, ar_plane, &subsume_plane); - if (subsume_plane != nullptr) { - ArTrackable_release(ArAsTrackable(subsume_plane)); - continue; - } - - if (ArTrackingState::AR_TRACKING_STATE_TRACKING != out_tracking_state) { - continue; - } - - ArTrackingState plane_tracking_state; - ArTrackable_getTrackingState(ar_session_, ArAsTrackable(ar_plane), - &plane_tracking_state); - if (plane_tracking_state == AR_TRACKING_STATE_TRACKING) { - const auto iter = plane_color_map_.find(ar_plane); - glm::vec3 color; - if (iter != plane_color_map_.end()) { - color = iter->second; - - // If this is an already observed trackable release it so it doesn't - // leave aof placing objects on surfaces (n additional reference dangling. - ArTrackable_release(ar_trackable); - } else { - // The first plane is always white. - if (!first_plane_has_been_found_) { - first_plane_has_been_found_ = true; - color = kWhite; - } else { - color = GetRandomPlaneColor(); - } - plane_color_map_.insert({ar_plane, color}); - } - - plane_renderer_.Draw(projection_mat, view_mat, ar_session_, ar_plane, - color); - } - } - - ArTrackableList_destroy(plane_list); - plane_list = nullptr; - - // Update and render point cloud. - ArPointCloud *ar_point_cloud = nullptr; - ArStatus point_cloud_status = - ArFrame_acquirePointCloud(ar_session_, ar_frame_, &ar_point_cloud); - if (point_cloud_status == AR_SUCCESS) { - point_cloud_renderer_.Draw(projection_mat * view_mat, ar_session_, - ar_point_cloud); - ArPointCloud_release(ar_point_cloud); - } - SkMatrix44 i = SkMatrix44::kIdentity_Constructor; - - if (surface != nullptr) { - SkCanvas *canvas = surface->getCanvas(); - SkAutoCanvasRestore acr(canvas, true); - SkMatrix44 vpv = skViewport * skProj * skView; - for(SkMatrix44 skModel: models) { - SkMatrix44 i = SkMatrix44::kIdentity_Constructor; - canvas->setMatrix(i); - SkMatrix44 mvpv = skViewport * skProj * skView * skModel; - - //Draw XYZ axes - DrawAxes(canvas, mvpv); - //Drawing camera orientation - /* DrawVector(canvas, vpv, begins[0], ends[0], SK_ColorMAGENTA); - DrawVector(canvas, vpv, begins[0], ends[1], SK_ColorYELLOW); - DrawVector(canvas, vpv, begins[0], ends[2], SK_ColorCYAN);*/ - - canvas->concat(mvpv); - SkPaint paint; - - //Draw Circle - paint.setColor(0x80700000); - canvas->drawCircle(0, 0, 0.1, paint); - - //Draw Text - paint.setColor(SK_ColorBLUE); - if (currentValue != 0) { - paint.setTextSize(currentValue); - } else { - paint.setTextSize(0.1); - } - - paint.setAntiAlias(true); - const char text[] = "SkAR"; - size_t byteLength = strlen(static_cast(text)); - SkShaper shaper(nullptr); - SkTextBlobBuilder builder; - SkPoint p = SkPoint::Make(0, 0); - shaper.shape(&builder, paint, text, byteLength, true, p, 10); - canvas->drawTextBlob(builder.make(), 0, 0, paint); - - //DrawBoundingBox(canvas); - } - canvas->flush(); - } - } - - - bool HelloArApplication::OnTouchedFirst(float x, float y, int drawMode) { - LOGI("Entered OnTouchedFirst"); - if (pendingAnchor != nullptr) { - delete pendingAnchor; - } - SkPoint p = SkPoint::Make(x,y); - pendingAnchor = new PendingAnchor(p); - bool editAnchor = false; - - if (ar_frame_ != nullptr && ar_session_ != nullptr) { - ArHitResultList *hit_result_list = nullptr; - ArHitResultList_create(ar_session_, &hit_result_list); - CHECK(hit_result_list); - ArFrame_hitTest(ar_session_, ar_frame_, x, y, hit_result_list); - - int32_t hit_result_list_size = 0; - ArHitResultList_getSize(ar_session_, hit_result_list, &hit_result_list_size); - ArHitResult *ar_hit_result = nullptr; - ArPose *out_pose = nullptr; - ArPlane* hitPlane = nullptr; - for (int32_t i = 0; i < hit_result_list_size; ++i) { - ArHitResult *ar_hit = nullptr; - ArPose *created_out_pose = nullptr; - ArHitResult_create(ar_session_, &ar_hit); - ArHitResultList_getItem(ar_session_, hit_result_list, i, ar_hit); - - if (ar_hit == nullptr) { - LOGE("HelloArApplication::OnTouched ArHitResultList_getItem error"); - return editAnchor; - } - - ArTrackable *ar_trackable = nullptr; - ArHitResult_acquireTrackable(ar_session_, ar_hit, &ar_trackable); - ArTrackableType ar_trackable_type = AR_TRACKABLE_NOT_VALID; - ArTrackable_getType(ar_session_, ar_trackable, &ar_trackable_type); - // Creates an anchor if a plane or an oriented point was hit. - if (AR_TRACKABLE_PLANE == ar_trackable_type) { - ArPose *hit_pose = nullptr; - ArPose_create(ar_session_, nullptr, &hit_pose); - ArHitResult_getHitPose(ar_session_, ar_hit, hit_pose); - int32_t in_polygon = 0; - ArPlane *ar_plane = ArAsPlane(ar_trackable); - ArPlane_isPoseInPolygon(ar_session_, ar_plane, hit_pose, &in_polygon); - - { - // Use hit pose and camera pose to check if hittest is from the - // back of the plane, if it is, no need to create the anchor. - ArPose *camera_pose = nullptr; - ArPose_create(ar_session_, nullptr, &camera_pose); - ArCamera *ar_camera; - ArFrame_acquireCamera(ar_session_, ar_frame_, &ar_camera); - ArCamera_getPose(ar_session_, ar_camera, camera_pose); - float normal_distance_to_plane = util::CalculateDistanceToPlane( - ar_session_, *hit_pose, *camera_pose); - - if (!in_polygon || normal_distance_to_plane < 0) { - ArPose_destroy(camera_pose); - continue; - } - ArPose_destroy(camera_pose); - ArCamera_release(ar_camera); - } - - //Raw pose of hit location - float out_hit_raw[] = {0, 0, 0, 0, 0, 0, 0}; - ArPose_getPoseRaw(ar_session_, hit_pose, out_hit_raw); - ArPose_destroy(hit_pose); - - //Position of anchor - glm::vec4 pendingAnchorPos(out_hit_raw[4], out_hit_raw[5], out_hit_raw[6], 1); - pendingAnchor->SetContainingPlane(ar_plane); - - //Check if plane contains approx the same anchor - auto planeAnchors = plane_anchors_map_.find(ar_plane); - if (planeAnchors != plane_anchors_map_.end()) { - //other anchors existed on this plane - std::vector anchors = planeAnchors->second; - int i = 0; - LOGI("Size of anchor list: %d", (int) anchors.size()); - for(ArAnchor* const& anchor: anchors) { - //Get anchor's pose - i++; - LOGI("CHECKING: Anchor #%d", i); - ArPose *anchor_pose = nullptr; - ArPose_create(ar_session_, nullptr, &anchor_pose); - ArAnchor_getPose(ar_session_, anchor, anchor_pose); - float out_anchor_raw[] = {0, 0, 0, 0, 0, 0, 0}; - ArPose_getPoseRaw(ar_session_, anchor_pose, out_anchor_raw); - ArPose_destroy(anchor_pose); - glm::vec4 oldAnchorPos(out_anchor_raw[4], out_anchor_raw[5], out_anchor_raw[6], 1); - oldAnchorPos = oldAnchorPos - pendingAnchorPos; - float distance = util::Magnitude(glm::vec3(oldAnchorPos)); - if (distance < 0.1f) { - LOGI("TouchFirst: Editing old anchor!"); - editAnchor = true; - pendingAnchor->SetArAnchor(anchor); - pendingAnchor->SetEditMode(true); - - ArHitResult_destroy(ar_hit); - ArHitResultList_destroy(hit_result_list); - LOGI("TouchFirst: Edit %d", editAnchor); - return editAnchor; - } - } - } - - //actual hit result, and containing plane - ar_hit_result = ar_hit; - hitPlane = ar_plane; - - //new anchor pos - float wanted_raw_pose[] = {0, 0, 0, 0, out_hit_raw[4], out_hit_raw[5], out_hit_raw[6]}; - ArPose_create(ar_session_, wanted_raw_pose, &created_out_pose); - out_pose = created_out_pose; - break; - } - } - - - if (ar_hit_result) { - LOGI("TouchFirst: Adding new anchor!"); - ArAnchor *anchor = nullptr; - pendingAnchor->SetEditMode(false); - - if (ArSession_acquireNewAnchor(ar_session_, out_pose, &anchor) != AR_SUCCESS) { - LOGE("HelloArApplication::OnTouched ArHitResult_acquireNewAnchor error"); - LOGI("TouchFirst: Failed to acquire new anchor"); - delete hitPlane; - delete pendingAnchor; - pendingAnchor = nullptr; - LOGI("TouchFirst: Edit %d", editAnchor); - return editAnchor; - } - pendingAnchor->SetArAnchor(anchor); - - ArHitResult_destroy(ar_hit_result); - ArHitResultList_destroy(hit_result_list); - ArPose_destroy(out_pose); - hit_result_list = nullptr; - LOGI("TouchFirst: Edit %d", editAnchor); - return editAnchor; - } - - LOGI("TouchFirst: didn't hit anything"); - delete hitPlane; - delete pendingAnchor; - pendingAnchor = nullptr; - LOGI("TouchFirst: Edit %d", editAnchor); - return editAnchor; - } - } - - void HelloArApplication::AddAnchor(ArAnchor* anchor, ArPlane* containingPlane) { - //delete anchor from matrices maps - //releasing the anchor if it is not tracking anymore - ArTrackingState tracking_state = AR_TRACKING_STATE_STOPPED; - ArAnchor_getTrackingState(ar_session_, anchor, &tracking_state); - if (tracking_state != AR_TRACKING_STATE_TRACKING) { - RemoveAnchor(anchor); - return; - } - - //releasing the first anchor if we exceeded maximum number of objects to be rendered - if (tracked_obj_set_.size() >= kMaxNumberOfAndroidsToRender) { - RemoveAnchor(tracked_obj_set_[0]); - } - - //updating the containing plane with a new anchor - auto planeAnchors = plane_anchors_map_.find(containingPlane); - if (planeAnchors != plane_anchors_map_.end()) { - //other anchors existed on this plane - LOGI("TouchFinal: ADDING TO OLD ANCHORS"); - std::vector anchors = planeAnchors->second; - anchors.push_back(anchor); - plane_anchors_map_[containingPlane] = anchors; - anchor_plane_map_.insert({anchor, containingPlane}); - } else { - LOGI("TouchFinal: NEW SET OF ANCHORS"); - std::vector anchors; - anchors.push_back(anchor); - plane_anchors_map_.insert({containingPlane, anchors}); - anchor_plane_map_.insert({anchor, containingPlane}); - } - - tracked_obj_set_.push_back(anchor); - } - - void HelloArApplication::OnTouchTranslate(float x, float y) { - LOGI("Entered On Edit Touched"); - ArAnchor *anchor = pendingAnchor->GetArAnchor(); - glm::mat4 matrix = util::SkMatToGlmMat( - anchor_skmat4_axis_aligned_map_.find(anchor)->second); - - if (ar_frame_ != nullptr && ar_session_ != nullptr) { - ArHitResultList *hit_result_list = nullptr; - ArHitResultList_create(ar_session_, &hit_result_list); - CHECK(hit_result_list); - ArFrame_hitTest(ar_session_, ar_frame_, x, y, hit_result_list); - - int32_t hit_result_list_size = 0; - ArHitResultList_getSize(ar_session_, hit_result_list, &hit_result_list_size); - ArHitResult *ar_hit_result = nullptr; - ArPose *out_pose = nullptr; - ArPlane *hitPlane = nullptr; - for (int32_t i = 0; i < hit_result_list_size; ++i) { - ArHitResult *ar_hit = nullptr; - ArPose *created_out_pose = nullptr; - ArHitResult_create(ar_session_, &ar_hit); - ArHitResultList_getItem(ar_session_, hit_result_list, i, ar_hit); - - if (ar_hit == nullptr) { - LOGE("HelloArApplication::OnTouched ArHitResultList_getItem error"); - return; - } - - ArTrackable *ar_trackable = nullptr; - ArHitResult_acquireTrackable(ar_session_, ar_hit, &ar_trackable); - ArTrackableType ar_trackable_type = AR_TRACKABLE_NOT_VALID; - ArTrackable_getType(ar_session_, ar_trackable, &ar_trackable_type); - // Creates an anchor if a plane or an oriented point was hit. - if (AR_TRACKABLE_PLANE == ar_trackable_type) { - ArPose *hit_pose = nullptr; - ArPose_create(ar_session_, nullptr, &hit_pose); - ArHitResult_getHitPose(ar_session_, ar_hit, hit_pose); - int32_t in_polygon = 0; - ArPlane *ar_plane = ArAsPlane(ar_trackable); - ArPlane_isPoseInPolygon(ar_session_, ar_plane, hit_pose, &in_polygon); - - { - // Use hit pose and camera pose to check if hittest is from the - // back of the plane, if it is, no need to create the anchor. - ArPose *camera_pose = nullptr; - ArPose_create(ar_session_, nullptr, &camera_pose); - ArCamera *ar_camera; - ArFrame_acquireCamera(ar_session_, ar_frame_, &ar_camera); - ArCamera_getPose(ar_session_, ar_camera, camera_pose); - float normal_distance_to_plane = util::CalculateDistanceToPlane( - ar_session_, *hit_pose, *camera_pose); - - if (!in_polygon || normal_distance_to_plane < 0) { - ArPose_destroy(camera_pose); - continue; - } - ArPose_destroy(camera_pose); - ArCamera_release(ar_camera); - } - - //Raw pose of hit location - float out_hit_raw[] = {0, 0, 0, 0, 0, 0, 0}; - ArPose_getPoseRaw(ar_session_, hit_pose, out_hit_raw); - ArPose_destroy(hit_pose); - - //Translate by new amount - glm::vec4 newPos(out_hit_raw[4], out_hit_raw[5], out_hit_raw[6], 1); - glm::vec4 oldPos = pendingAnchor->GetAnchorPos(ar_session_); - glm::vec3 movement = glm::vec3(newPos - oldPos); - - - //CAMERA SETTINGS - glm::mat4 backToOrigin(1); - backToOrigin = glm::translate(backToOrigin, -glm::vec3(oldPos)); - glm::mat4 backToPlane(1); - backToPlane = glm::translate(backToPlane, glm::vec3(oldPos)); - - //Axes of Skia object: start with XYZ, totate to get X(-Z)Y, paste on plane, go back to origin --> plane orientation but on origin - glm::vec3 objX = glm::normalize(glm::vec3( - backToOrigin * matrix * - glm::vec4(1, 0, 0, 1))); //X still X - glm::vec3 objY = glm::normalize(glm::vec3( - backToOrigin * matrix * - glm::vec4(0, 1, 0, 1))); //Y is now Z - glm::vec3 objZ = glm::normalize(glm::vec3( - backToOrigin * matrix * - glm::vec4(0, 0, 1, 1))); //Z is now Y - - - glm::mat4 translate(1); - translate = glm::translate(translate, movement); - matrix = translate * matrix; - RemoveAnchor(anchor); - - - - //new anchor pos - float wanted_raw_pose[] = {0, 0, 0, 0, out_hit_raw[4], out_hit_raw[5], - out_hit_raw[6]}; - ArPose_create(ar_session_, wanted_raw_pose, &created_out_pose); - out_pose = created_out_pose; - ar_hit_result = ar_hit; - break; - } - } - - if (ar_hit_result) { - LOGI("TouchFirst: Adding new anchor!"); - ArAnchor *anchor = nullptr; - pendingAnchor->SetEditMode(false); - - if (ArSession_acquireNewAnchor(ar_session_, out_pose, &anchor) != AR_SUCCESS) { - LOGE("HelloArApplication::OnTouched ArHitResult_acquireNewAnchor error"); - LOGI("TouchFirst: Failed to acquire new anchor"); - delete hitPlane; - delete pendingAnchor; - pendingAnchor = nullptr; - return; - } - pendingAnchor->SetArAnchor(anchor); - anchor_skmat4_axis_aligned_map_[anchor] = util::GlmMatToSkMat(matrix); - - //Add anchor - AddAnchor(anchor, pendingAnchor->GetContainingPlane()); - - - ArHitResult_destroy(ar_hit_result); - ArHitResultList_destroy(hit_result_list); - ArPose_destroy(out_pose); - hit_result_list = nullptr; - return; - } - } - } - - void HelloArApplication::RemoveAnchor(ArAnchor* anchor) { - //delete anchor from matrices maps - anchor_skmat4_axis_aligned_map_.erase(anchor); - anchor_skmat4_camera_aligned_map_.erase(anchor); - anchor_skmat4_snap_aligned_map_.erase(anchor); - - auto containingPlaneIter = anchor_plane_map_.find(anchor); - if (containingPlaneIter != anchor_plane_map_.end()) { - ArPlane* containingPlane = containingPlaneIter->second; - auto planeAnchors = plane_anchors_map_.find(containingPlane); - if (planeAnchors != plane_anchors_map_.end()) { - //delete this anchor from the list of anchors associated with its plane - std::vector anchors = planeAnchors->second; - anchors.erase(std::remove(anchors.begin(), anchors.end(), anchor), anchors.end()); - plane_anchors_map_[planeAnchors->first] = anchors; - - //delete anchor from map of anchor to plane - anchor_plane_map_.erase(anchor); - } - } - //delete anchor from list of tracked objects - tracked_obj_set_.erase(std::remove(tracked_obj_set_.begin(), tracked_obj_set_.end(), anchor), tracked_obj_set_.end()); - ArAnchor_release(anchor); - } - - void HelloArApplication::UpdateMatrixMaps(ArAnchor* anchorKey, glm::mat4 aaMat, glm::mat4 caMat, glm::mat4 snapMat) { - anchor_skmat4_axis_aligned_map_.insert({anchorKey, util::GlmMatToSkMat(aaMat)}); - anchor_skmat4_camera_aligned_map_.insert({anchorKey, util::GlmMatToSkMat(caMat)}); - anchor_skmat4_snap_aligned_map_.insert({anchorKey, util::GlmMatToSkMat(snapMat)}); - } - - void SetSkiaInitialRotation(glm::mat4& initRotation) { - initRotation = glm::rotate(initRotation, SK_ScalarPI / 2, glm::vec3(1, 0, 0)); - } - - void SetSkiaObjectAxes(glm::vec3& x, glm::vec3& y, glm::vec3& z, glm::mat4 transform) { - x = glm::normalize(glm::vec3(transform * glm::vec4(1, 0, 0, 1))); //X still X - y = glm::normalize(glm::vec3(transform * glm::vec4(0, 1, 0, 1))); //Y is now Z - z = glm::normalize(glm::vec3(transform * glm::vec4(0, 0, 1, 1))); //Z is now Y - } - - void SetCameraAlignedRotation(glm::mat4& rotateTowardsCamera, float& rotationDirection, const glm::vec3& toProject, const glm::vec3& skiaY, const glm::vec3& skiaZ) { - glm::vec3 hitLookProj = -util::ProjectOntoPlane(toProject, skiaZ); - float angleRad = util::AngleRad(skiaY, hitLookProj); - glm::vec3 cross = glm::normalize(glm::cross(skiaY, hitLookProj)); - - //outs - rotationDirection = util::Dot(cross, skiaZ); - rotateTowardsCamera = glm::rotate(rotateTowardsCamera, angleRad, rotationDirection * skiaZ); - } - - struct CameraAlignmentInfo { - glm::vec3& skiaY, skiaZ; - glm::mat4& preRot, postRot; - - CameraAlignmentInfo(glm::vec3& skiaY, glm::vec3& skiaZ, glm::mat4 preRot, glm::mat4 postRot) - : skiaY(skiaY), skiaZ(skiaZ), preRot(preRot), postRot(postRot) {} - }; - - void SetCameraAlignedVertical(glm::mat4& caMat, const glm::mat4& camRot, const CameraAlignmentInfo& camAlignInfo) { - //Camera axes - glm::vec3 xCamera = glm::vec3(glm::vec4(1, 0, 0, 1) * camRot); - glm::vec3 yCamera = glm::vec3(glm::vec4(0, 1, 0, 1) * camRot); - glm::vec3 zCamera = glm::vec3(glm::vec4(0, 0, -1, 1) * camRot); - - //Get matrix that rotates object from plane towards the wanted angle - glm::mat4 rotateTowardsCamera(1); - float rotationDirection = 1; - SetCameraAlignedRotation(rotateTowardsCamera, rotationDirection, yCamera, camAlignInfo.skiaY, camAlignInfo.skiaZ); - - //LogOrientation(dot, angleRad, "Vertical/Wall"); - glm::mat4 flip(1); - flip = glm::rotate(flip, SK_ScalarPI, rotationDirection * camAlignInfo.skiaZ); - caMat = camAlignInfo.postRot * flip * rotateTowardsCamera * camAlignInfo.preRot; - } - - void SetCameraAlignedHorizontal(glm::mat4& caMat, ArPlaneType planeType, const glm::vec3 hitLook, const CameraAlignmentInfo& camAlignInfo) { - //Ceiling or Floor: follow hit location - //Get matrix that rotates object from plane towards the wanted angle - glm::mat4 rotateTowardsCamera(1); - float rotationDirection = 1; - SetCameraAlignedRotation(rotateTowardsCamera, rotationDirection, hitLook, camAlignInfo.skiaY, camAlignInfo.skiaZ); - - if (planeType == ArPlaneType::AR_PLANE_HORIZONTAL_DOWNWARD_FACING) { - //ceiling - //LogOrientation(dot, angleRad, "Ceiling"); - glm::mat4 flip(1); - flip = glm::rotate(flip, SK_ScalarPI, rotationDirection * camAlignInfo.skiaZ); - caMat = camAlignInfo.postRot * flip * rotateTowardsCamera * camAlignInfo.preRot; - } else { - //floor or tabletop - //LogOrientation(dot, angleRad, "Floor"); - caMat = camAlignInfo.postRot * rotateTowardsCamera * camAlignInfo.preRot; - } - } - - - - void HelloArApplication::SetCameraAlignedMatrix(glm::mat4& caMat, glm::vec3 hitPos, glm::mat4& planeModel, const glm::mat4& initRotation) { - //Translation matrices: from plane to origin, and from origin to plane - glm::mat4 backToOrigin(1); - backToOrigin = glm::translate(backToOrigin, -hitPos); - glm::mat4 backToPlane(1); - backToPlane = glm::translate(backToPlane, hitPos); - - //Axes of Skia object: start with XYZ, totate to get X(-Z)Y, paste on plane, go back to origin --> plane orientation but on origin - glm::vec3 skiaX, skiaY, skiaZ; - SetSkiaObjectAxes(skiaX, skiaY, skiaZ, backToOrigin * planeModel * initRotation); - - //Get camera position & rotation - glm::vec3 cameraPos; - glm::mat4 cameraRotationMatrix; - util::GetCameraInfo(ar_session_, ar_frame_, cameraPos, cameraRotationMatrix); - - //Set matrix depending on type of surface - ArPlaneType planeType = AR_PLANE_VERTICAL; - ArPlane_getType(ar_session_, pendingAnchor->GetContainingPlane(), &planeType); - - //Set CamerAlignmentInfo - CameraAlignmentInfo camAlignInfo(skiaY, skiaZ, backToOrigin * planeModel * initRotation, backToPlane); - - if (planeType == ArPlaneType::AR_PLANE_VERTICAL) { - //Wall: follow phone orientation - SetCameraAlignedVertical(caMat, cameraRotationMatrix, camAlignInfo); - } else { - //Ceiling or Floor: follow hit location - glm::vec3 hitLook(hitPos - cameraPos); - SetCameraAlignedHorizontal(caMat, planeType, hitLook, camAlignInfo); - } - } - - - void HelloArApplication::SetModelMatrices(glm::mat4& aaMat, glm::mat4& caMat, glm::mat4& snapMat, const glm::mat4& planeModel) { - //Brings Skia world to ARCore world - glm::mat4 initRotation(1); - SetSkiaInitialRotation(initRotation); - - //Copy plane model for editing - glm::mat4 copyPlaneModel(planeModel); - - //Set snap matrix - //snapMat = copyPlaneModel * initRotation; - - //Set axis-aligned matrix - glm::vec4 anchorPos = pendingAnchor->GetAnchorPos(ar_session_); - copyPlaneModel[3] = anchorPos; - aaMat = planeModel * initRotation; - - //Set camera-aligned matrix - //SetCameraAlignedMatrix(caMat, glm::vec3(anchorPos), copyPlaneModel, initRotation); - } - - void GetPlaneModelMatrix(glm::mat4& planeModel, ArSession* arSession, ArPlane* arPlane) { - ArPose *plane_pose = nullptr; - ArPose_create(arSession, nullptr, &plane_pose); - ArPlane_getCenterPose(arSession, arPlane, plane_pose); - util::GetTransformMatrixFromPose(arSession, plane_pose, &planeModel); - ArPose_destroy(plane_pose); - } - - void HelloArApplication::OnTouchedFinal(int type) { - LOGI("Entered OnTouchedFinal"); - if (pendingAnchor == nullptr) { - LOGI("WARNING: Entered OnTouchedFinal but no pending anchor.."); - return; - } - - if (pendingAnchor->GetEditMode()) { - LOGI("WARNING: Editing old anchor in OnTouchedFinal!"); - } - - //Get necessary pending anchor info - ArPlane* containingPlane = pendingAnchor->GetContainingPlane(); - glm::vec4 pendingAnchorPos = pendingAnchor->GetAnchorPos(ar_session_); - ArAnchor* actualAnchor = pendingAnchor->GetArAnchor(); - - //Plane model matrix - glm::mat4 planeModel(1); - GetPlaneModelMatrix(planeModel, ar_session_, containingPlane); - - //Setup skia object model matrices - glm::mat4 matrixAxisAligned(1); - glm::mat4 matrixCameraAligned(1); - glm::mat4 matrixSnapAligned(1); - SetModelMatrices(matrixAxisAligned, matrixCameraAligned, matrixSnapAligned, planeModel); - - //Update anchor -> model matrix datastructures - UpdateMatrixMaps(actualAnchor, matrixAxisAligned, matrixCameraAligned, matrixSnapAligned); - - //Add anchor to aux datastructures - AddAnchor(actualAnchor, containingPlane); - } - -} // namespace hello_ar diff --git a/platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.h b/platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.h deleted file mode 100644 index 323ec59ee7cb7..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef C_ARCORE_HELLOE_AR_HELLO_AR_APPLICATION_H_ -#define C_ARCORE_HELLOE_AR_HELLO_AR_APPLICATION_H_ - -#include "include/core/SkSurface.h" -#include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" -#include "include/gpu/gl/GrGLTypes.h" -#include "modules/skottie/include/Skottie.h" -#include -#include -#include -#include -#include -#include -#include -#include - -#include "arcore_c_api.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/background_renderer.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/glm.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/pending_anchor.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/point_cloud_renderer.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/util.h" - -namespace hello_ar { - -// HelloArApplication handles all application logics. - class HelloArApplication { - public: - // Constructor and deconstructor. - HelloArApplication() = default; - - HelloArApplication(AAssetManager *asset_manager); - - ~HelloArApplication(); - - SkMatrix SkiaRenderer(const glm::mat4 &proj, const glm::mat4 &view, const glm::mat4 &model); - - // OnPause is called on the UI thread from the Activity's onPause method. - void OnPause(); - - // OnResume is called on the UI thread from the Activity's onResume method. - void OnResume(void *env, void *context, void *activity); - - // OnSurfaceCreated is called on the OpenGL thread when GLSurfaceView - // is created. - void OnSurfaceCreated(); - - // OnDisplayGeometryChanged is called on the OpenGL thread when the - // render surface size or display rotation changes. - // - // @param display_rotation: current display rotation. - // @param width: width of the changed surface view. - // @param height: height of the changed surface view. - void OnDisplayGeometryChanged(int display_rotation, int width, int height); - - void OnObjectRotationChanged(int rotation); - - void OnAction(float value); - - // OnDrawFrame is called on the OpenGL thread to render the next frame. - void OnDrawFrame(); - - bool OnTouchedFirst(float x, float y, int drawMode); - - void OnTouchTranslate(float x, float y); - - void OnEditTouched(float x, float y); - - void OnTouchedFinal(int type); - - void RemoveAnchor(ArAnchor* anchor); - - void AddAnchor(ArAnchor* anchor, ArPlane* containingPlane); - - void UpdateMatrixMaps(ArAnchor* anchorKey, glm::mat4 aaMat, glm::mat4 caMat, glm::mat4 snapMat); - - void SetModelMatrices(glm::mat4& aaMat, glm::mat4& caMat, glm::mat4& snapMat, const glm::mat4& planeModel); - - void SetCameraAlignedMatrix(glm::mat4& caMat, glm::vec3 hitPos, glm::mat4& planeModel, const glm::mat4& initRotation); - - // Returns true if any planes have been detected. Used for hiding the - // "searching for planes" snackbar. - bool HasDetectedPlanes() const { return plane_count_ > 0; } - - glm::mat4 - ComputeCameraAlignedMatrix(ArPlane *arPlane, glm::mat4 planeModel, glm::mat4 initRotation, - glm::vec4 anchorPos, - glm::vec3 cameraPos, glm::vec3 hitPos, - float cameraDisplayOutRaw[]); - - private: - ArSession *ar_session_ = nullptr; - ArFrame *ar_frame_ = nullptr; - - PendingAnchor* pendingAnchor = nullptr; - - //SKIA VARS - sk_sp grContext; - sk_sp fAnim; - SkScalar fAnimT = 0; - - bool install_requested_ = false; - int width_ = 1; - int height_ = 1; - int display_rotation_ = 0; - - int currentObjectRotation = 0; - float currentValue = 0; - - std::vector begins; - std::vector ends; - - AAssetManager *const asset_manager_; - - // The anchors at which we are drawing android models - std::vector tracked_obj_set_; - - // Stores the randomly-selected color each plane is drawn with - std::unordered_map plane_color_map_; - - std::unordered_map anchor_skmat4_axis_aligned_map_; - std::unordered_map anchor_skmat4_camera_aligned_map_; - std::unordered_map anchor_skmat4_snap_aligned_map_; - - std::unordered_map> plane_anchors_map_; - std::unordered_map anchor_plane_map_; - - // The first plane is always rendered in white, if this is true then a plane - // at some point has been found. - bool first_plane_has_been_found_ = false; - - PointCloudRenderer point_cloud_renderer_; - BackgroundRenderer background_renderer_; - PlaneRenderer plane_renderer_; - - int32_t plane_count_ = 0; - }; -} // namespace hello_ar - -#endif // C_ARCORE_HELLOE_AR_HELLO_AR_APPLICATION_H_ diff --git a/platform_tools/android/apps/arcore/src/main/cpp/jni_interface.cc b/platform_tools/android/apps/arcore/src/main/cpp/jni_interface.cc deleted file mode 100644 index 898c20d956bb2..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/jni_interface.cc +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include - -#include "platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.h" - -#define JNI_METHOD(return_type, method_name) \ - JNIEXPORT return_type JNICALL \ - Java_org_skia_arcore_JniInterface_##method_name - -extern "C" { - -namespace { -// maintain a reference to the JVM so we can use it later. - static JavaVM *g_vm = nullptr; - - inline jlong jptr(hello_ar::HelloArApplication *native_hello_ar_application) { - return reinterpret_cast(native_hello_ar_application); - } - - inline hello_ar::HelloArApplication *native(jlong ptr) { - return reinterpret_cast(ptr); - } - -} // namespace - -jint JNI_OnLoad(JavaVM *vm, void *) { - g_vm = vm; - return JNI_VERSION_1_6; -} - -JNI_METHOD(jlong, createNativeApplication) -(JNIEnv *env, jclass, jobject j_asset_manager) { - AAssetManager *asset_manager = AAssetManager_fromJava(env, j_asset_manager); - return jptr(new hello_ar::HelloArApplication(asset_manager)); -} - -JNI_METHOD(void, destroyNativeApplication) -(JNIEnv *, jclass, jlong native_application) { - delete native(native_application); -} - -JNI_METHOD(void, onPause) -(JNIEnv *, jclass, jlong native_application) { - native(native_application)->OnPause(); -} - -JNI_METHOD(void, onResume) -(JNIEnv *env, jclass, jlong native_application, jobject context, - jobject activity) { - native(native_application)->OnResume(env, context, activity); -} - -JNI_METHOD(void, onGlSurfaceCreated) -(JNIEnv *, jclass, jlong native_application) { - native(native_application)->OnSurfaceCreated(); -} - -JNI_METHOD(void, onDisplayGeometryChanged) -(JNIEnv *, jobject, jlong native_application, int display_rotation, int width, - int height) { - native(native_application) - ->OnDisplayGeometryChanged(display_rotation, width, height); -} - -JNI_METHOD(void, onObjectRotationChanged) -(JNIEnv *, jobject, jlong native_application, int rotation) { - native(native_application) - ->OnObjectRotationChanged(rotation); -} - -JNI_METHOD(void, onAction) -(JNIEnv *, jobject, jlong native_application, jfloat value) { - native(native_application)->OnAction(value); -} - -JNI_METHOD(void, onGlSurfaceDrawFrame) -(JNIEnv *, jclass, jlong native_application) { - native(native_application)->OnDrawFrame(); -} - -JNI_METHOD(void, onTouchTranslate) -(JNIEnv *, jclass, jlong native_application, jfloat x, jfloat y) { - return native(native_application)->OnTouchTranslate(x, y); -} - -JNI_METHOD(bool, onTouchedFirst) -(JNIEnv *, jclass, jlong native_application, jfloat x, jfloat y, int drawMode) { - return native(native_application)->OnTouchedFirst(x, y, drawMode); -} - -JNI_METHOD(void, onTouchedFinal) -(JNIEnv *, jclass, jlong native_application, int type) { - native(native_application)->OnTouchedFinal(type); -} - -JNI_METHOD(jboolean, hasDetectedPlanes) -(JNIEnv *, jclass, jlong native_application) { - return static_cast( - native(native_application)->HasDetectedPlanes() ? JNI_TRUE : JNI_FALSE); -} - -JNIEnv *GetJniEnv() { - JNIEnv *env; - jint result = g_vm->AttachCurrentThread(&env, nullptr); - return result == JNI_OK ? env : nullptr; -} - -jclass FindClass(const char *classname) { - JNIEnv *env = GetJniEnv(); - return env->FindClass(classname); -} - -} // extern "C" diff --git a/platform_tools/android/apps/arcore/src/main/cpp/jni_interface.h b/platform_tools/android/apps/arcore/src/main/cpp/jni_interface.h deleted file mode 100644 index fe19cfcb85801..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/jni_interface.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef C_ARCORE_HELLOE_AR_JNI_INTERFACE_H_ -#define C_ARCORE_HELLOE_AR_JNI_INTERFACE_H_ - -#include -/** - * Helper functions to provide access to Java from C via JNI. - */ -extern "C" { - -// Helper function used to access the jni environment on the current thread. -// In this sample, no consideration is made for detaching the thread when the -// thread exits. This can cause memory leaks, so production applications should -// detach when the thread no longer needs access to the JVM. -JNIEnv *GetJniEnv(); - -jclass FindClass(const char *classname); -} // extern "C" -#endif diff --git a/platform_tools/android/apps/arcore/src/main/cpp/pending_anchor.cc b/platform_tools/android/apps/arcore/src/main/cpp/pending_anchor.cc deleted file mode 100644 index 3ff5e609a69e3..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/pending_anchor.cc +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2018 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "include/core/SkCanvas.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/hello_ar_application.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/util.h" - -namespace hello_ar { - PendingAnchor::PendingAnchor(SkPoint touchLocation) : touchLocation(touchLocation) {} - - PendingAnchor::~PendingAnchor() {} - - SkPoint PendingAnchor::GetTouchLocation() { - return touchLocation; - } - - bool PendingAnchor::GetEditMode() { - return editMode; - } - - ArPlane* PendingAnchor::GetContainingPlane() { - return containingPlane; - } - - glm::vec4 PendingAnchor::GetAnchorPos(ArSession* arSession) { - float poseRaw[] = {0, 0, 0, 0, 0, 0, 0}; - ArPose* anchorPose = nullptr; - ArPose_create(arSession, poseRaw, &anchorPose); - ArAnchor_getPose(arSession, this->anchor, anchorPose); - ArPose_getPoseRaw(arSession, anchorPose, poseRaw); - ArPose_destroy(anchorPose); - glm::vec4 anchorPos = glm::vec4(poseRaw[4], poseRaw[5], poseRaw[6], 1); - return anchorPos; - } - - ArAnchor* PendingAnchor::GetArAnchor() { - return anchor; - } - - void PendingAnchor::SetArAnchor(ArAnchor* anchor) { - this->anchor = anchor; - } - - void PendingAnchor::SetEditMode(bool editMode) { - this->editMode = editMode; - } - - void PendingAnchor::SetContainingPlane(ArPlane* plane) { - this->containingPlane = plane; - } - - - -} // namespace hello_ar diff --git a/platform_tools/android/apps/arcore/src/main/cpp/pending_anchor.h b/platform_tools/android/apps/arcore/src/main/cpp/pending_anchor.h deleted file mode 100644 index c301e1a727c1e..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/pending_anchor.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2018 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef C_ARCORE_HELLO_AR_PENDING_ANCHOR_H_ -#define C_ARCORE_HELLO_AR_PENDING_ANCHOR_H_ - -#include "include/gpu/GrBackendSurface.h" -#include "include/gpu/gl/GrGLTypes.h" - -#include "arcore_c_api.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/glm.h" - -namespace hello_ar { - class PendingAnchor { - public: - PendingAnchor(SkPoint touchLocation); - ~PendingAnchor(); - - SkPoint GetTouchLocation(); - bool GetEditMode(); - ArPlane* GetContainingPlane(); - glm::vec4 GetAnchorPos(ArSession* arSession); - ArAnchor* GetArAnchor(); - - void SetArAnchor(ArAnchor* anchor); - void SetEditMode(bool editMode); - void SetContainingPlane(ArPlane* plane); - - private: - SkPoint touchLocation; - bool editMode = false; - ArAnchor* anchor; - ArPlane* containingPlane; - }; -} // namespace hello_ar - -#endif diff --git a/platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.cc b/platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.cc deleted file mode 100644 index b62652db375d5..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.cc +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/util.h" - -namespace hello_ar { - namespace { - constexpr char kVertexShader[] = R"( - precision highp float; - precision highp int; - attribute vec3 vertex; - varying vec2 v_textureCoords; - varying float v_alpha; - - uniform mat4 mvp; - uniform mat4 model_mat; - uniform vec3 normal; - - void main() { - // Vertex Z value is used as the alpha in this shader. - v_alpha = vertex.z; - - vec4 local_pos = vec4(vertex.x, 0.0, vertex.y, 1.0); - gl_Position = mvp * local_pos; - vec4 world_pos = model_mat * local_pos; - - // Construct two vectors that are orthogonal to the normal. - // This arbitrary choice is not co-linear with either horizontal - // or vertical plane normals. - const vec3 arbitrary = vec3(1.0, 1.0, 0.0); - vec3 vec_u = normalize(cross(normal, arbitrary)); - vec3 vec_v = normalize(cross(normal, vec_u)); - - // Project vertices in world frame onto vec_u and vec_v. - v_textureCoords = vec2( - dot(world_pos.xyz, vec_u), dot(world_pos.xyz, vec_v)); - })"; - - constexpr char kFragmentShader[] = R"( - precision highp float; - precision highp int; - uniform sampler2D texture; - uniform vec3 color; - varying vec2 v_textureCoords; - varying float v_alpha; - void main() { - float r = texture2D(texture, v_textureCoords).r; - gl_FragColor = vec4(color.xyz, r * v_alpha); - })"; - } // namespace - - void PlaneRenderer::InitializeGlContent(AAssetManager *asset_manager) { - shader_program_ = util::CreateProgram(kVertexShader, kFragmentShader); - - if (!shader_program_) { - LOGE("Could not create program."); - } - - uniform_mvp_mat_ = glGetUniformLocation(shader_program_, "mvp"); - uniform_texture_ = glGetUniformLocation(shader_program_, "texture"); - uniform_model_mat_ = glGetUniformLocation(shader_program_, "model_mat"); - uniform_normal_vec_ = glGetUniformLocation(shader_program_, "normal"); - uniform_color_ = glGetUniformLocation(shader_program_, "color"); - attri_vertices_ = glGetAttribLocation(shader_program_, "vertex"); - - glGenTextures(1, &texture_id_); - glBindTexture(GL_TEXTURE_2D, texture_id_); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR_MIPMAP_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - - if (!util::LoadPngFromAssetManager(GL_TEXTURE_2D, "models/trigrid.png")) { - LOGE("Could not load png texture for planes."); - } - - glGenerateMipmap(GL_TEXTURE_2D); - - glBindTexture(GL_TEXTURE_2D, 0); - - util::CheckGlError("plane_renderer::InitializeGlContent()"); - } - - void PlaneRenderer::Draw(const glm::mat4 &projection_mat, - const glm::mat4 &view_mat, const ArSession *ar_session, - const ArPlane *ar_plane, const glm::vec3 &color) { - if (!shader_program_) { - LOGE("shader_program is null."); - return; - } - - UpdateForPlane(ar_session, ar_plane); - - glUseProgram(shader_program_); - glDepthMask(GL_FALSE); - - glActiveTexture(GL_TEXTURE0); - glUniform1i(uniform_texture_, 0); - glBindTexture(GL_TEXTURE_2D, texture_id_); - - // Compose final mvp matrix for this plane renderer. - glUniformMatrix4fv(uniform_mvp_mat_, 1, GL_FALSE, - glm::value_ptr(projection_mat * view_mat * model_mat_)); - - glUniformMatrix4fv(uniform_model_mat_, 1, GL_FALSE, - glm::value_ptr(model_mat_)); - glUniform3f(uniform_normal_vec_, normal_vec_.x, normal_vec_.y, normal_vec_.z); - glUniform3f(uniform_color_, color.x, color.y, color.z); - - glEnableVertexAttribArray(attri_vertices_); - glVertexAttribPointer(attri_vertices_, 3, GL_FLOAT, GL_FALSE, 0, - vertices_.data()); - - glDrawElements(GL_TRIANGLES, triangles_.size(), GL_UNSIGNED_SHORT, - triangles_.data()); - - glUseProgram(0); - glDepthMask(GL_TRUE); - util::CheckGlError("plane_renderer::Draw()"); - } - - void PlaneRenderer::UpdateForPlane(const ArSession *ar_session, - const ArPlane *ar_plane) { - // The following code generates a triangle mesh filling a convex polygon, - // including a feathered edge for blending. - // - // The indices shown in the diagram are used in comments below. - // _______________ 0_______________1 - // | | |4___________5| - // | | | | | | - // | | => | | | | - // | | | | | | - // | | |7-----------6| - // --------------- 3---------------2 - - vertices_.clear(); - triangles_.clear(); - - int32_t polygon_length; - ArPlane_getPolygonSize(ar_session, ar_plane, &polygon_length); - - if (polygon_length == 0) { - LOGE("PlaneRenderer::UpdatePlane, no valid plane polygon is found"); - return; - } - - const int32_t vertices_size = polygon_length / 2; - std::vector raw_vertices(vertices_size); - ArPlane_getPolygon(ar_session, ar_plane, - glm::value_ptr(raw_vertices.front())); - - // Fill vertex 0 to 3. Note that the vertex.xy are used for x and z - // position. vertex.z is used for alpha. The outter polygon's alpha - // is 0. - for (int32_t i = 0; i < vertices_size; ++i) { - vertices_.push_back(glm::vec3(raw_vertices[i].x, raw_vertices[i].y, 0.0f)); - } - - util::ScopedArPose scopedArPose(ar_session); - ArPlane_getCenterPose(ar_session, ar_plane, scopedArPose.GetArPose()); - ArPose_getMatrix(ar_session, scopedArPose.GetArPose(), - glm::value_ptr(model_mat_)); - normal_vec_ = util::GetPlaneNormal(ar_session, *scopedArPose.GetArPose()); - - // Feather distance 0.2 meters. - const float kFeatherLength = 0.2f; - // Feather scale over the distance between plane center and vertices. - const float kFeatherScale = 0.2f; - - // Fill vertex 4 to 7, with alpha set to 1. - for (int32_t i = 0; i < vertices_size; ++i) { - // Vector from plane center to current point. - glm::vec2 v = raw_vertices[i]; - const float scale = - 1.0f - std::min((kFeatherLength / glm::length(v)), kFeatherScale); - const glm::vec2 result_v = scale * v; - - vertices_.push_back(glm::vec3(result_v.x, result_v.y, 1.0f)); - } - - const int32_t vertices_length = vertices_.size(); - const int32_t half_vertices_length = vertices_length / 2; - - // Generate triangle (4, 5, 6) and (4, 6, 7). - for (int i = half_vertices_length + 1; i < vertices_length - 1; ++i) { - triangles_.push_back(half_vertices_length); - triangles_.push_back(i); - triangles_.push_back(i + 1); - } - - // Generate triangle (0, 1, 4), (4, 1, 5), (5, 1, 2), (5, 2, 6), - // (6, 2, 3), (6, 3, 7), (7, 3, 0), (7, 0, 4) - for (int i = 0; i < half_vertices_length; ++i) { - triangles_.push_back(i); - triangles_.push_back((i + 1) % half_vertices_length); - triangles_.push_back(i + half_vertices_length); - - triangles_.push_back(i + half_vertices_length); - triangles_.push_back((i + 1) % half_vertices_length); - triangles_.push_back((i + half_vertices_length + 1) % half_vertices_length + - half_vertices_length); - } - } - -} // namespace hello_ar diff --git a/platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.h b/platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.h deleted file mode 100644 index b8fd415f4af8d..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/plane_renderer.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef C_ARCORE_HELLOE_AR_PLANE_RENDERER_H_ -#define C_ARCORE_HELLOE_AR_PLANE_RENDERER_H_ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "arcore_c_api.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/glm.h" - -namespace hello_ar { - -// PlaneRenderer renders ARCore plane type. - class PlaneRenderer { - public: - PlaneRenderer() = default; - - ~PlaneRenderer() = default; - - // Sets up OpenGL state used by the plane renderer. Must be called on the - // OpenGL thread. - void InitializeGlContent(AAssetManager *asset_manager); - - // Draws the provided plane. - void Draw(const glm::mat4 &projection_mat, const glm::mat4 &view_mat, - const ArSession *ar_session, const ArPlane *ar_plane, - const glm::vec3 &color); - - private: - void UpdateForPlane(const ArSession *ar_session, const ArPlane *ar_plane); - - std::vector vertices_; - std::vector triangles_; - glm::mat4 model_mat_ = glm::mat4(1.0f); - glm::vec3 normal_vec_ = glm::vec3(0.0f); - - GLuint texture_id_; - - GLuint shader_program_; - GLint attri_vertices_; - GLint uniform_mvp_mat_; - GLint uniform_texture_; - GLint uniform_model_mat_; - GLint uniform_normal_vec_; - GLint uniform_color_; - }; -} // namespace hello_ar - -#endif // C_ARCORE_HELLOE_AR_PLANE_RENDERER_H_ diff --git a/platform_tools/android/apps/arcore/src/main/cpp/point_cloud_renderer.cc b/platform_tools/android/apps/arcore/src/main/cpp/point_cloud_renderer.cc deleted file mode 100644 index 111e716460f85..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/point_cloud_renderer.cc +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "platform_tools/android/apps/arcore/src/main/cpp/point_cloud_renderer.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/util.h" - -namespace hello_ar { - namespace { - constexpr char kVertexShader[] = R"( - attribute vec4 vertex; - uniform mat4 mvp; - void main() { - gl_PointSize = 5.0; - // Pointcloud vertex's w component is confidence value. - // Not used in renderer. - gl_Position = mvp * vec4(vertex.xyz, 1.0); - })"; - - constexpr char kFragmentShader[] = R"( - precision lowp float; - void main() { - gl_FragColor = vec4(0.1215, 0.7372, 0.8235, 1.0); - })"; - } // namespace - - void PointCloudRenderer::InitializeGlContent() { - shader_program_ = util::CreateProgram(kVertexShader, kFragmentShader); - - CHECK(shader_program_); - - attribute_vertices_ = glGetAttribLocation(shader_program_, "vertex"); - uniform_mvp_mat_ = glGetUniformLocation(shader_program_, "mvp"); - - util::CheckGlError("point_cloud_renderer::InitializeGlContent()"); - } - - void PointCloudRenderer::Draw(glm::mat4 mvp_matrix, ArSession *ar_session, - ArPointCloud *ar_point_cloud) const { - CHECK(shader_program_); - - glUseProgram(shader_program_); - - int32_t number_of_points = 0; - ArPointCloud_getNumberOfPoints(ar_session, ar_point_cloud, &number_of_points); - if (number_of_points <= 0) { - return; - } - - const float *point_cloud_data; - ArPointCloud_getData(ar_session, ar_point_cloud, &point_cloud_data); - - glUniformMatrix4fv(uniform_mvp_mat_, 1, GL_FALSE, glm::value_ptr(mvp_matrix)); - - glEnableVertexAttribArray(attribute_vertices_); - glVertexAttribPointer(attribute_vertices_, 4, GL_FLOAT, GL_FALSE, 0, - point_cloud_data); - - glDrawArrays(GL_POINTS, 0, number_of_points); - - glUseProgram(0); - util::CheckGlError("PointCloudRenderer::Draw"); - } - -} // namespace hello_ar diff --git a/platform_tools/android/apps/arcore/src/main/cpp/point_cloud_renderer.h b/platform_tools/android/apps/arcore/src/main/cpp/point_cloud_renderer.h deleted file mode 100644 index faba4d3b93fce..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/point_cloud_renderer.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef C_ARCORE_HELLOE_AR_POINT_CLOUD_RENDERER_H_ -#define C_ARCORE_HELLOE_AR_POINT_CLOUD_RENDERER_H_ - -#include -#include -#include -#include - -#include "arcore_c_api.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/glm.h" - -namespace hello_ar { - - class PointCloudRenderer { - public: - // Default constructor of PointCloudRenderer. - PointCloudRenderer() = default; - - // Default deconstructor of PointCloudRenderer. - ~PointCloudRenderer() = default; - - // Initialize the GL content, needs to be called on GL thread. - void InitializeGlContent(); - - // Render the AR point cloud. - // - // @param mvp_matrix, the model view projection matrix of point cloud. - // @param ar_session, the session that is used to query point cloud points - // from ar_point_cloud. - // @param ar_point_cloud, point cloud data to for rendering. - void Draw(glm::mat4 mvp_matrix, ArSession *ar_session, - ArPointCloud *ar_point_cloud) const; - - private: - GLuint shader_program_; - GLint attribute_vertices_; - GLint uniform_mvp_mat_; - }; -} // namespace hello_ar - -#endif // C_ARCORE_HELLOE_AR_POINT_CLOUD_RENDERER_H_ diff --git a/platform_tools/android/apps/arcore/src/main/cpp/util.cc b/platform_tools/android/apps/arcore/src/main/cpp/util.cc deleted file mode 100644 index 945d3da1a4289..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/util.cc +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "platform_tools/android/apps/arcore/src/main/cpp/util.h" - -#include "include/core/SkMatrix44.h" -#include -#include -#include -#include - -#include "platform_tools/android/apps/arcore/src/main/cpp/jni_interface.h" - -namespace hello_ar { - namespace util { - - void CheckGlError(const char *operation) { - bool anyError = false; - for (GLint error = glGetError(); error; error = glGetError()) { - LOGE("after %s() glError (0x%x)\n", operation, error); - anyError = true; - } - if (anyError) { - abort(); - } - } - - // Convenience function used in CreateProgram below. - static GLuint LoadShader(GLenum shader_type, const char *shader_source) { - GLuint shader = glCreateShader(shader_type); - if (!shader) { - return shader; - } - - glShaderSource(shader, 1, &shader_source, nullptr); - glCompileShader(shader); - GLint compiled = 0; - glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); - - if (!compiled) { - GLint info_len = 0; - - glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &info_len); - if (!info_len) { - return shader; - } - - char *buf = reinterpret_cast(malloc(info_len)); - if (!buf) { - return shader; - } - - glGetShaderInfoLog(shader, info_len, nullptr, buf); - LOGE("hello_ar::util::Could not compile shader %d:\n%s\n", shader_type, - buf); - free(buf); - glDeleteShader(shader); - shader = 0; - } - - return shader; - } - - GLuint CreateProgram(const char *vertex_source, const char *fragment_source) { - GLuint vertexShader = LoadShader(GL_VERTEX_SHADER, vertex_source); - if (!vertexShader) { - return 0; - } - - GLuint fragment_shader = LoadShader(GL_FRAGMENT_SHADER, fragment_source); - if (!fragment_shader) { - return 0; - } - - GLuint program = glCreateProgram(); - if (program) { - glAttachShader(program, vertexShader); - CheckGlError("hello_ar::util::glAttachShader"); - glAttachShader(program, fragment_shader); - CheckGlError("hello_ar::util::glAttachShader"); - glLinkProgram(program); - GLint link_status = GL_FALSE; - glGetProgramiv(program, GL_LINK_STATUS, &link_status); - if (link_status != GL_TRUE) { - GLint buf_length = 0; - glGetProgramiv(program, GL_INFO_LOG_LENGTH, &buf_length); - if (buf_length) { - char *buf = reinterpret_cast(malloc(buf_length)); - if (buf) { - glGetProgramInfoLog(program, buf_length, nullptr, buf); - LOGE("hello_ar::util::Could not link program:\n%s\n", buf); - free(buf); - } - } - glDeleteProgram(program); - program = 0; - } - } - return program; - } - - bool LoadPngFromAssetManager(int target, const std::string &path) { - JNIEnv *env = GetJniEnv(); - - // Put all the JNI values in a structure that is statically initalized on the - // first call to this method. This makes it thread safe in the unlikely case - // of multiple threads calling this method. - static struct JNIData { - jclass helper_class; - jmethodID load_image_method; - jmethodID load_texture_method; - } jniIds = [env]() -> JNIData { - constexpr char kHelperClassName[] = - "org/skia/arcore/JniInterface"; - constexpr char kLoadImageMethodName[] = "loadImage"; - constexpr char kLoadImageMethodSignature[] = - "(Ljava/lang/String;)Landroid/graphics/Bitmap;"; - constexpr char kLoadTextureMethodName[] = "loadTexture"; - constexpr char kLoadTextureMethodSignature[] = - "(ILandroid/graphics/Bitmap;)V"; - jclass helper_class = FindClass(kHelperClassName); - if (helper_class) { - helper_class = static_cast(env->NewGlobalRef(helper_class)); - jmethodID load_image_method = env->GetStaticMethodID( - helper_class, kLoadImageMethodName, kLoadImageMethodSignature); - jmethodID load_texture_method = env->GetStaticMethodID( - helper_class, kLoadTextureMethodName, kLoadTextureMethodSignature); - return {helper_class, load_image_method, load_texture_method}; - } - LOGE("hello_ar::util::Could not find Java helper class %s", - kHelperClassName); - return {}; - }(); - - if (!jniIds.helper_class) { - return false; - } - - jstring j_path = env->NewStringUTF(path.c_str()); - - jobject image_obj = env->CallStaticObjectMethod( - jniIds.helper_class, jniIds.load_image_method, j_path); - - if (j_path) { - env->DeleteLocalRef(j_path); - } - - env->CallStaticVoidMethod(jniIds.helper_class, jniIds.load_texture_method, - target, image_obj); - return true; - } - - void GetTransformMatrixFromPose(ArSession *ar_session, - const ArPose *ar_pose, - glm::mat4 *out_model_mat) { - if (out_model_mat == nullptr) { - LOGE("util::GetTransformMatrixFromPose model_mat is null."); - return; - } - ArPose_getMatrix(ar_session, ar_pose, - glm::value_ptr(*out_model_mat)); - } - - glm::vec3 GetPlaneNormal(const ArSession *ar_session, - const ArPose &plane_pose) { - float plane_pose_raw[7] = {0.f}; - ArPose_getPoseRaw(ar_session, &plane_pose, plane_pose_raw); - glm::quat plane_quaternion(plane_pose_raw[3], plane_pose_raw[0], - plane_pose_raw[1], plane_pose_raw[2]); - // Get normal vector, normal is defined to be positive Y-position in local - // frame. - return glm::rotate(plane_quaternion, glm::vec3(0., 1.f, 0.)); - } - - float CalculateDistanceToPlane(const ArSession *ar_session, - const ArPose &plane_pose, - const ArPose &camera_pose) { - float plane_pose_raw[7] = {0.f}; - ArPose_getPoseRaw(ar_session, &plane_pose, plane_pose_raw); - glm::vec3 plane_position(plane_pose_raw[4], plane_pose_raw[5], - plane_pose_raw[6]); - glm::vec3 normal = GetPlaneNormal(ar_session, plane_pose); - - float camera_pose_raw[7] = {0.f}; - ArPose_getPoseRaw(ar_session, &camera_pose, camera_pose_raw); - glm::vec3 camera_P_plane(camera_pose_raw[4] - plane_position.x, - camera_pose_raw[5] - plane_position.y, - camera_pose_raw[6] - plane_position.z); - return glm::dot(normal, camera_P_plane); - } - - glm::mat4 GetCameraRotationMatrix(float cameraOutRaw[]) { - glm::mat4 cameraRotation(1); - glm::quat cameraQuat = glm::quat(cameraOutRaw[0], cameraOutRaw[1], cameraOutRaw[2], - cameraOutRaw[3]); - cameraRotation = glm::toMat4(cameraQuat); - glm::vec4 temp = cameraRotation[0]; - cameraRotation[0] = cameraRotation[2]; - cameraRotation[2] = temp; - return cameraRotation; - } - - void GetCameraInfo(ArSession* arSession, ArFrame* arFrame, glm::vec3& cameraPos, glm::mat4& cameraRotation) { - //Acquire camera - ArCamera *ar_camera; - ArFrame_acquireCamera(arSession, arFrame, &ar_camera); - - //Get camera pose - ArPose *camera_pose = nullptr; - ArPose_create(arSession, nullptr, &camera_pose); - ArCamera_getDisplayOrientedPose(arSession, ar_camera, camera_pose); - - //Get camera raw info - float outCameraRaw[] = {0, 0, 0, 0, 0, 0, 0}; - ArPose_getPoseRaw(arSession, camera_pose, outCameraRaw); - ArPose_destroy(camera_pose); - - //Write to out variables - cameraPos = glm::vec3(outCameraRaw[4], outCameraRaw[5], outCameraRaw[6]); - cameraRotation = util::GetCameraRotationMatrix(outCameraRaw); - - //Release camera - ArCamera_release(ar_camera); - } - - SkMatrix44 GlmMatToSkMat(const glm::mat4 m) { - SkMatrix44 skMat = SkMatrix44::kIdentity_Constructor; - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - skMat.set(j, i, m[i][j]); - } - } - return skMat; - } - - glm::mat4 SkMatToGlmMat(const SkMatrix44 m) { - glm::mat4 glmMat(1); - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - glmMat[i][j] = m.get(j, i); - } - } - return glmMat; - } - - void Log4x4Matrix(float raw_matrix[16]) { - LOGI( - "%f, %f, %f, %f\n" - "%f, %f, %f, %f\n" - "%f, %f, %f, %f\n" - "%f, %f, %f, %f\n", - raw_matrix[0], raw_matrix[1], raw_matrix[2], raw_matrix[3], raw_matrix[4], - raw_matrix[5], raw_matrix[6], raw_matrix[7], raw_matrix[8], raw_matrix[9], - raw_matrix[10], raw_matrix[11], raw_matrix[12], raw_matrix[13], - raw_matrix[14], raw_matrix[15]); - } - - void LogGlmMat(glm::mat4 m, char *type) { - std::string str = glm::to_string(m); - LOGE("glm Matrix - %s: %s\n", type, str.c_str()); - } - - void LogSkMat44(SkMatrix44 m, char *type) { - LOGE("SkMatrix - %s: [%g, %g, %g, %g] || [%g, %g, %g, %g] || [%g, %g, %g, %g] || [%g, %g, %g, %g] \n", - type, - m.get(0, 0), m.get(1, 0), m.get(2, 0), m.get(3, 0), - m.get(0, 1), m.get(1, 1), m.get(2, 1), m.get(3, 1), - m.get(0, 2), m.get(1, 2), m.get(2, 2), m.get(3, 2), - m.get(0, 3), m.get(1, 3), m.get(2, 3), m.get(3, 3) - ); - } - - void LogSkMat(SkMatrix m, char *type) { - LOGE("SkMatrix - %s: [%g, %g, %g] || [%g, %g, %g] || [%g, %g, %g] \n", type, - m.get(0), m.get(3), m.get(6), - m.get(1), m.get(4), m.get(7), - m.get(2), m.get(5), m.get(8) - ); - } - - void LogOrientation(float rotationDirection, float angleRad, char *type) { - LOGI("Plane orientation: %s", type); - LOGI("Cross dotted with zDir:", rotationDirection); - if (rotationDirection == -1) { - LOGI("Counter Clockwise %.6f degrees rotation: ", glm::degrees(angleRad)); - } else { - LOGI("Clockwise %.6f degrees rotation: ", glm::degrees(angleRad)); - } - } - - float Dot(glm::vec3 u, glm::vec3 v) { - float result = u.x * v.x + u.y * v.y + u.z * v.z; - return result; - } - - float Magnitude(glm::vec3 u) { - float result = u.x * u.x + u.y * u.y + u.z * u.z; - return sqrt(result); - } - - float AngleRad(glm::vec3 u, glm::vec3 v) { - float dot = util::Dot(u, v); - float scale = (util::Magnitude(u) * util::Magnitude(v)); - float cosine = dot / scale; - float acosine = acos(cosine); - return acosine; - } - - glm::vec3 ProjectOntoPlane(glm::vec3 in, glm::vec3 normal) { - float dot = util::Dot(in, normal); - float multiplier = dot / (util::Magnitude(normal) * util::Magnitude(normal)); - glm::vec3 out = in - multiplier * normal; - return out; - } - - } // namespace util -} // namespace hello_ar diff --git a/platform_tools/android/apps/arcore/src/main/cpp/util.h b/platform_tools/android/apps/arcore/src/main/cpp/util.h deleted file mode 100644 index fbd664dbfabc5..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/cpp/util.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef C_ARCORE_HELLOE_AR_UTIL_H_ -#define C_ARCORE_HELLOE_AR_UTIL_H_ - -#include "include/core/SkMatrix44.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "arcore_c_api.h" -#include "platform_tools/android/apps/arcore/src/main/cpp/glm.h" - -#ifndef LOGI -#define LOGI(...) \ - __android_log_print(ANDROID_LOG_INFO, "hello_ar_example_c", __VA_ARGS__) -#endif // LOGI - -#ifndef LOGE -#define LOGE(...) \ - __android_log_print(ANDROID_LOG_ERROR, "hello_ar_example_c", __VA_ARGS__) -#endif // LOGE - -#ifndef CHECK -#define CHECK(condition) \ - if (!(condition)) { \ - LOGE("*** CHECK FAILED at %s:%d: %s", __FILE__, __LINE__, #condition); \ - abort(); \ - } -#endif // CHECK - -namespace hello_ar { - // Utilities - namespace util { - - // Provides a scoped allocated instance of Anchor. - // Can be treated as an ArAnchor*. - class ScopedArPose { - public: - explicit ScopedArPose(const ArSession *session) { - ArPose_create(session, nullptr, &pose_); - } - - ~ScopedArPose() { ArPose_destroy(pose_); } - - ArPose *GetArPose() { return pose_; } - - // Delete copy constructors. - ScopedArPose(const ScopedArPose &) = delete; - - void operator=(const ScopedArPose &) = delete; - - private: - ArPose *pose_; - }; - - /* GL Utils */ - // Check GL error, and abort if an error is encountered. - // - // @param operation, the name of the GL function call. - void CheckGlError(const char *operation); - - // Create a shader program ID. - // - // @param vertex_source, the vertex shader source. - // @param fragment_source, the fragment shader source. - // @return - GLuint CreateProgram(const char *vertex_source, const char *fragment_source); - - // Load png file from assets folder and then assign it to the OpenGL target. - // This method must be called from the renderer thread since it will result in - // OpenGL calls to assign the image to the texture target. - // - // @param target, openGL texture target to load the image into. - // @param path, path to the file, relative to the assets folder. - // @return true if png is loaded correctly, otherwise false. - bool LoadPngFromAssetManager(int target, const std::string &path); - - - /* ARCore utils */ - void GetTransformMatrixFromPose(ArSession *ar_session, const ArPose *ar_pose, glm::mat4 *out_model_mat); - - // Get the plane's normal from center pose. - glm::vec3 GetPlaneNormal(const ArSession *ar_session, const ArPose &plane_pose); - - // Calculate the normal distance to plane from cameraPose, the given planePose - // should have y axis parallel to plane's normal, for example plane's center - // pose or hit test pose. - float CalculateDistanceToPlane(const ArSession *ar_session, const ArPose &plane_pose, const ArPose &camera_pose); - - // Outputs the camera rotation using display orientation - glm::mat4 GetCameraRotationMatrix(float cameraOutRaw[]); - - // Computes camera position and orientation (using GetCameraRotationMatrix) - void GetCameraInfo(ArSession* arSession, ArFrame* arFrame, glm::vec3& cameraPos, glm::mat4& cameraRotation); - - /* Matrix conversion */ - SkMatrix44 GlmMatToSkMat(const glm::mat4 m); - glm::mat4 SkMatToGlmMat(const SkMatrix44 m); - - /* Logging utils */ - //Row major output - void Log4x4Matrix(float raw_matrix[16]); - - //Column major output - void LogGlmMat(glm::mat4 m, char *type); - void LogSkMat44(SkMatrix44 m, char *type); - void LogSkMat(SkMatrix m, char *type); - void LogOrientation(float rotationDirection, float angleRad, char *type); - - /* Vector ops */ - float Dot(glm::vec3 u, glm::vec3 v); - float Magnitude(glm::vec3 u); - float AngleRad(glm::vec3 u, glm::vec3 v); - glm::vec3 ProjectOntoPlane(glm::vec3 in, glm::vec3 normal); - } // namespace util -} // namespace hello_ar - -#endif // C_ARCORE_HELLOE_AR_UTIL_H_ diff --git a/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/CameraPermissionHelper.java b/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/CameraPermissionHelper.java deleted file mode 100644 index 3499ec00f3084..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/CameraPermissionHelper.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.skia.arcore; - -import android.Manifest; -import android.app.Activity; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.provider.Settings; -import android.support.v4.app.ActivityCompat; -import android.support.v4.content.ContextCompat; - -/** - * Helper to ask camera permission. - */ -public class CameraPermissionHelper { - private static final String CAMERA_PERMISSION = Manifest.permission.CAMERA; - private static final int CAMERA_PERMISSION_CODE = 0; - - /** - * Check to see we have the necessary permissions for this app. - */ - public static boolean hasCameraPermission(Activity activity) { - return ContextCompat.checkSelfPermission(activity, CAMERA_PERMISSION) - == PackageManager.PERMISSION_GRANTED; - } - - /** - * Check to see we have the necessary permissions for this app, and ask for them if we don't. - */ - public static void requestCameraPermission(Activity activity) { - ActivityCompat.requestPermissions( - activity, new String[]{CAMERA_PERMISSION}, CAMERA_PERMISSION_CODE); - } - - /** - * Check to see if we need to show the rationale for this permission. - */ - public static boolean shouldShowRequestPermissionRationale(Activity activity) { - return ActivityCompat.shouldShowRequestPermissionRationale(activity, CAMERA_PERMISSION); - } - - /** - * Launch Application Setting to grant permission. - */ - public static void launchPermissionSettings(Activity activity) { - Intent intent = new Intent(); - intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); - intent.setData(Uri.fromParts("package", activity.getPackageName(), null)); - activity.startActivity(intent); - } -} diff --git a/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/HelloArActivity.java b/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/HelloArActivity.java deleted file mode 100644 index 73651f51c6e94..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/HelloArActivity.java +++ /dev/null @@ -1,364 +0,0 @@ -/* - * Copyright 2017 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.skia.arcore; - -import android.app.Activity; -import android.content.Context; -import android.hardware.display.DisplayManager; -import android.opengl.GLES20; -import android.opengl.GLSurfaceView; -import android.os.Bundle; -import android.os.Handler; -import android.support.design.widget.Snackbar; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.util.Log; -import android.view.ActionMode; -import android.view.ContextMenu; -import android.view.GestureDetector; -import android.view.Gravity; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.MotionEvent; -import android.view.View; -import android.view.WindowManager; -import android.view.inputmethod.InputMethodManager; -import android.widget.AdapterView; -import android.widget.EditText; -import android.widget.PopupMenu; -import android.widget.Toast; - -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.opengles.GL10; - -/** - * This is a simple example that shows how to create an augmented reality (AR) application using the - * ARCore C API. - */ -public class HelloArActivity extends AppCompatActivity - implements GLSurfaceView.Renderer, DisplayManager.DisplayListener { - private static final String TAG = HelloArActivity.class.getSimpleName(); - private static final int SNACKBAR_UPDATE_INTERVAL_MILLIS = 1000; // In milliseconds. - - private GLSurfaceView mSurfaceView; - private Activity activity = null; - private boolean mViewportChanged = false; - private int mViewportWidth; - private int mViewportHeight; - private View contextView = null; - private int mCurrentObjectRotation = 0; - private float mCurrentValue = 0; - private float X = 0; - private float Y = 0; - - private boolean toEdit = false; - - // Opaque native pointer to the native application instance. - private long mNativeApplication; - private GestureDetector mGestureDetector; - - private Snackbar mLoadingMessageSnackbar; - private Handler mPlaneStatusCheckingHandler; - private final Runnable mPlaneStatusCheckingRunnable = - new Runnable() { - @Override - public void run() { - // The runnable is executed on main UI thread. - try { - if (JniInterface.hasDetectedPlanes(mNativeApplication)) { - if (mLoadingMessageSnackbar != null) { - mLoadingMessageSnackbar.dismiss(); - } - mLoadingMessageSnackbar = null; - } else { - mPlaneStatusCheckingHandler.postDelayed( - mPlaneStatusCheckingRunnable, SNACKBAR_UPDATE_INTERVAL_MILLIS); - } - } catch (Exception e) { - Log.e(TAG, e.getMessage()); - } - } - }; - private int mDrawMode = -1; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar); - setSupportActionBar(myToolbar); - - activity = this; - - //hide notifications bar - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - - mSurfaceView = (GLSurfaceView) findViewById(R.id.surfaceview); - - mGestureDetector = - new GestureDetector( - this, - new GestureDetector.SimpleOnGestureListener() { - @Override - public boolean onSingleTapUp(final MotionEvent e) { - toEdit = JniInterface.onTouchedFirst(mNativeApplication, e.getX(), e.getY(), mDrawMode); - - Log.i(TAG, "toEdit: " + toEdit); - X = e.getX(); - Y = e.getY(); - contextView.showContextMenu(e.getX(), e.getY()); - return true; - } - - @Override - public boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { - Log.i(TAG, "Scrolling!"); - JniInterface.onTouchTranslate(mNativeApplication, e2.getX(), e2.getY()); - return true; - } - - @Override - public boolean onDown(MotionEvent e) { - return true; - } - }); - - mSurfaceView.setOnTouchListener( - new View.OnTouchListener() { - @Override - public boolean onTouch(View v, MotionEvent event) { - return mGestureDetector.onTouchEvent(event); - } - }); - - // Set up renderer. - mSurfaceView.setPreserveEGLContextOnPause(true); - mSurfaceView.setEGLContextClientVersion(2); - mSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0); // Alpha used for plane blending. - mSurfaceView.setRenderer(this); - mSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY); - - JniInterface.assetManager = getAssets(); - mNativeApplication = JniInterface.createNativeApplication(getAssets()); - - mPlaneStatusCheckingHandler = new Handler(); - - //Floating context menu - contextView = findViewById(R.id.menuView); - this.registerForContextMenu(contextView); - View.OnLongClickListener listener = new View.OnLongClickListener() { - @Override - public boolean onLongClick(View v) { - activity.closeContextMenu(); - return false; - } - }; - contextView.setOnLongClickListener(listener); - } - - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) - { - super.onCreateContextMenu(menu, v, menuInfo); - - if (!toEdit) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.draw_menu, menu); - menu.setHeaderTitle("Draw Options"); - } - - v.setClickable(false); - v.setFocusable(false); - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); - switch (item.getItemId()) { - case R.id.draw_text: - JniInterface.onTouchedFinal(mNativeApplication, 0); - return true; - case R.id.draw_circle: - JniInterface.onTouchedFinal(mNativeApplication, 1); - return true; - case R.id.draw_rect: - JniInterface.onTouchedFinal(mNativeApplication, 2); - return true; - case R.id.edit_size: - return true; - case R.id.edit_text: - return true; - default: - return super.onContextItemSelected(item); - } - } - - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.rotation_mode, menu); - return true; - } - - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.rotation_axis_aligned: - mCurrentObjectRotation = 0; - break; - case R.id.rotation_camera_aligned: - mCurrentObjectRotation = 1; - break; - case R.id.rotation_snap_aligned: - mCurrentObjectRotation = 2; - break; - case R.id.action: - mCurrentValue = 180; - JniInterface.onAction(mNativeApplication, mCurrentValue); - return true; - default: - return true; - } - JniInterface.onObjectRotationChanged(mNativeApplication, mCurrentObjectRotation); - return true; - } - - @Override - protected void onResume() { - super.onResume(); - // ARCore requires camera permissions to operate. If we did not yet obtain runtime - // permission on Android M and above, now is a good time to ask the user for it. - if (!CameraPermissionHelper.hasCameraPermission(this)) { - CameraPermissionHelper.requestCameraPermission(this); - return; - } - - JniInterface.onResume(mNativeApplication, getApplicationContext(), this); - mSurfaceView.onResume(); - - mLoadingMessageSnackbar = - Snackbar.make( - HelloArActivity.this.findViewById(android.R.id.content), - "Searching for surfaces...", - Snackbar.LENGTH_INDEFINITE); - // Set the snackbar background to light transparent black color. - mLoadingMessageSnackbar.getView().setBackgroundColor(0xbf323232); - mLoadingMessageSnackbar.show(); - mPlaneStatusCheckingHandler.postDelayed( - mPlaneStatusCheckingRunnable, SNACKBAR_UPDATE_INTERVAL_MILLIS); - - // Listen to display changed events to detect 180° rotation, which does not cause a config - // change or view resize. - getSystemService(DisplayManager.class).registerDisplayListener(this, null); - } - - @Override - public void onPause() { - super.onPause(); - mSurfaceView.onPause(); - JniInterface.onPause(mNativeApplication); - - mPlaneStatusCheckingHandler.removeCallbacks(mPlaneStatusCheckingRunnable); - - getSystemService(DisplayManager.class).unregisterDisplayListener(this); - } - - @Override - public void onDestroy() { - super.onDestroy(); - - // Synchronized to avoid racing onDrawFrame. - synchronized (this) { - JniInterface.destroyNativeApplication(mNativeApplication); - mNativeApplication = 0; - } - } - - @Override - public void onWindowFocusChanged(boolean hasFocus) { - super.onWindowFocusChanged(hasFocus); - if (hasFocus) { - // Standard Android full-screen functionality. - getWindow() - .getDecorView() - .setSystemUiVisibility( - View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_FULLSCREEN - | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - } - } - - @Override - public void onSurfaceCreated(GL10 gl, EGLConfig config) { - GLES20.glClearColor(0.1f, 0.1f, 0.1f, 1.0f); - JniInterface.onGlSurfaceCreated(mNativeApplication); - } - - @Override - public void onSurfaceChanged(GL10 gl, int width, int height) { - mViewportWidth = width; - mViewportHeight = height; - mViewportChanged = true; - } - - @Override - public void onDrawFrame(GL10 gl) { - // Synchronized to avoid racing onDestroy. - synchronized (this) { - if (mNativeApplication == 0) { - return; - } - if (mViewportChanged) { - int displayRotation = getWindowManager().getDefaultDisplay().getRotation(); - JniInterface.onDisplayGeometryChanged( - mNativeApplication, displayRotation, mViewportWidth, mViewportHeight); - mViewportChanged = false; - } - JniInterface.onGlSurfaceDrawFrame(mNativeApplication); - } - } - - @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] results) { - if (!CameraPermissionHelper.hasCameraPermission(this)) { - Toast.makeText(this, "Camera permission is needed to run this application", Toast.LENGTH_LONG) - .show(); - if (!CameraPermissionHelper.shouldShowRequestPermissionRationale(this)) { - // Permission denied with checking "Do not ask again". - CameraPermissionHelper.launchPermissionSettings(this); - } - finish(); - } - } - - // DisplayListener methods - @Override - public void onDisplayAdded(int displayId) { - } - - @Override - public void onDisplayRemoved(int displayId) { - } - - @Override - public void onDisplayChanged(int displayId) { - mViewportChanged = true; - } -} diff --git a/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/JniInterface.java b/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/JniInterface.java deleted file mode 100644 index 1592bb2a4e432..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/java/org/skia/arcore/JniInterface.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.skia.arcore; - -import android.app.Activity; -import android.content.Context; -import android.content.res.AssetManager; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.opengl.GLUtils; -import android.util.Log; - -import java.io.IOException; - -/** - * JNI interface to native layer. - */ -public class JniInterface { - static { - System.loadLibrary("hello_ar_native"); - } - - private static final String TAG = "JniInterface"; - static AssetManager assetManager; - - public static native long createNativeApplication(AssetManager assetManager); - - public static native void destroyNativeApplication(long nativeApplication); - - public static native void onPause(long nativeApplication); - - public static native void onResume(long nativeApplication, Context context, Activity activity); - - /** - * Allocate OpenGL resources for rendering. - */ - public static native void onGlSurfaceCreated(long nativeApplication); - - /** - * Called on the OpenGL thread before onGlSurfaceDrawFrame when the view port width, height, or - * display rotation may have changed. - */ - public static native void onDisplayGeometryChanged( - long nativeApplication, int displayRotation, int width, int height); - - public static native void onObjectRotationChanged(long nativeApplication, int rotation); - - public static native void onAction(long nativeApplication, float value); - - /** - * Main render loop, called on the OpenGL thread. - */ - public static native void onGlSurfaceDrawFrame(long nativeApplication); - - /** - * OnTouch event, called on the OpenGL thread. - */ - - public static native void onTouchTranslate(long nativeApplication, float x, float y); - - public static native boolean onTouchedFirst(long nativeApplication, float x, float y, int drawMode); - - public static native void onTouchedFinal(long nativeApplication, int type); - - - /** - * Get plane count in current session. Used to disable the "searching for surfaces" snackbar. - */ - public static native boolean hasDetectedPlanes(long nativeApplication); - - public static Bitmap loadImage(String imageName) { - - try { - return BitmapFactory.decodeStream(assetManager.open(imageName)); - } catch (IOException e) { - Log.e(TAG, "Cannot open image " + imageName); - return null; - } - } - - public static void loadTexture(int target, Bitmap bitmap) { - GLUtils.texImage2D(target, 0, bitmap, 0); - } -} diff --git a/platform_tools/android/apps/arcore/src/main/res/drawable-xxhdpi/ic_launcher.png b/platform_tools/android/apps/arcore/src/main/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100644 index 3f691da0397b0..0000000000000 Binary files a/platform_tools/android/apps/arcore/src/main/res/drawable-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/platform_tools/android/apps/arcore/src/main/res/layout-xlarge-land/activity_main.xml b/platform_tools/android/apps/arcore/src/main/res/layout-xlarge-land/activity_main.xml deleted file mode 100644 index 49457c98028d1..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/layout-xlarge-land/activity_main.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/platform_tools/android/apps/arcore/src/main/res/layout/activity_main.xml b/platform_tools/android/apps/arcore/src/main/res/layout/activity_main.xml deleted file mode 100644 index c3f1e2a3a2231..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/platform_tools/android/apps/arcore/src/main/res/layout/state_item.xml b/platform_tools/android/apps/arcore/src/main/res/layout/state_item.xml deleted file mode 100644 index 7a7d539d43cdc..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/layout/state_item.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - diff --git a/platform_tools/android/apps/arcore/src/main/res/menu/draw_menu.xml b/platform_tools/android/apps/arcore/src/main/res/menu/draw_menu.xml deleted file mode 100644 index 92851804bddb1..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/menu/draw_menu.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/platform_tools/android/apps/arcore/src/main/res/menu/edit_menu.xml b/platform_tools/android/apps/arcore/src/main/res/menu/edit_menu.xml deleted file mode 100644 index 25f6a1dc02a39..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/menu/edit_menu.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - \ No newline at end of file diff --git a/platform_tools/android/apps/arcore/src/main/res/menu/rotation_mode.xml b/platform_tools/android/apps/arcore/src/main/res/menu/rotation_mode.xml deleted file mode 100644 index bcee4f0fb9299..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/menu/rotation_mode.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/platform_tools/android/apps/arcore/src/main/res/menu/title.xml b/platform_tools/android/apps/arcore/src/main/res/menu/title.xml deleted file mode 100644 index 57d04ef143a49..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/menu/title.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - diff --git a/platform_tools/android/apps/arcore/src/main/res/values/integers.xml b/platform_tools/android/apps/arcore/src/main/res/values/integers.xml deleted file mode 100644 index d3da8e7ca5d47..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/values/integers.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 1 - \ No newline at end of file diff --git a/platform_tools/android/apps/arcore/src/main/res/values/strings.xml b/platform_tools/android/apps/arcore/src/main/res/values/strings.xml deleted file mode 100644 index 8b7a8ad740372..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/values/strings.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - HelloAR C - diff --git a/platform_tools/android/apps/arcore/src/main/res/values/styles.xml b/platform_tools/android/apps/arcore/src/main/res/values/styles.xml deleted file mode 100644 index 3a71bd32b5f58..0000000000000 --- a/platform_tools/android/apps/arcore/src/main/res/values/styles.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - diff --git a/platform_tools/android/apps/gradle/wrapper/gradle-wrapper.properties b/platform_tools/android/apps/gradle/wrapper/gradle-wrapper.properties index 9a8e388de9d51..8d6ab56fd31d6 100644 --- a/platform_tools/android/apps/gradle/wrapper/gradle-wrapper.properties +++ b/platform_tools/android/apps/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Oct 04 10:41:31 EDT 2018 +#Wed Jun 24 16:43:49 UTC 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip diff --git a/platform_tools/android/apps/settings.gradle b/platform_tools/android/apps/settings.gradle index e42c0d4163b61..29732f3ec39ee 100644 --- a/platform_tools/android/apps/settings.gradle +++ b/platform_tools/android/apps/settings.gradle @@ -1,5 +1,5 @@ include ':viewer' include ':skqp' -include ':arcore' //must build out directory first: bin/gn gen out/arm64 --args='ndk="NDKPATH" target_cpu="ABI" is_component_build=true' include ':skar_java' -include ':skottie' \ No newline at end of file +include ':skottie' +include ':skottie:skottielib' diff --git a/platform_tools/android/apps/skottie/build.gradle b/platform_tools/android/apps/skottie/build.gradle index 1346a2f9afe5d..77a172cd9da68 100644 --- a/platform_tools/android/apps/skottie/build.gradle +++ b/platform_tools/android/apps/skottie/build.gradle @@ -7,21 +7,22 @@ apply plugin: 'com.android.application' dependencies { - implementation 'com.android.support:support-v13:23.3.0' - implementation 'com.android.support:appcompat-v7:23.3.0' + implementation project("skottielib") + implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'com.airbnb.android:lottie:3.4.1' } android { - compileSdkVersion 23 + compileSdkVersion 28 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } flavorDimensions "tier" defaultConfig { - applicationId "org.skia.skottie" - minSdkVersion 23 - targetSdkVersion 23 + minSdkVersion 19 + targetSdkVersion 28 versionCode 1 versionName "1.0" signingConfig signingConfigs.debug @@ -29,7 +30,15 @@ android { flavorDimensions "base" sourceSets.main.jni.srcDirs = [] //disable automatic ndk-build call sourceSets.main.jniLibs.srcDir "src/main/libs" - productFlavors { universal{}; arm {}; arm64 {}; x86 {}; x64 {}; arm64vulkan{}; } - setupSkiaLibraryBuild(project, applicationVariants, "libskottie_android") + // When building from Android Studio, ensure that local variables are set: + // sdk.dir=[sdk file path] + // depot_tools.dir=[depot tools file path] + // x86.out.dir=[out file for x86] + // x64.out.dir=[out file for x64] + // arm64.out.dir=[out file for xarm64] + // arm.out.dir=[out file for arm] + + productFlavors { arm {}; arm64 {}; x86 {}; x64 {}; arm64vulkan{}; } + } diff --git a/platform_tools/android/apps/skottie/collect.sh b/platform_tools/android/apps/skottie/collect.sh new file mode 100755 index 0000000000000..b6280278c52a6 --- /dev/null +++ b/platform_tools/android/apps/skottie/collect.sh @@ -0,0 +1,7 @@ +# Copyright 2020 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +cat ./perfetto_config.pb | adb shell perfetto -c - -o /data/misc/perfetto-traces/trace.pb +adb pull /data/misc/perfetto-traces/trace.pb trace diff --git a/platform_tools/android/apps/skottie/perfetto_config.pb b/platform_tools/android/apps/skottie/perfetto_config.pb new file mode 100644 index 0000000000000..b943199afa8db Binary files /dev/null and b/platform_tools/android/apps/skottie/perfetto_config.pb differ diff --git a/platform_tools/android/apps/skottie/run_perf.sh b/platform_tools/android/apps/skottie/run_perf.sh new file mode 100755 index 0000000000000..368ed75b034a6 --- /dev/null +++ b/platform_tools/android/apps/skottie/run_perf.sh @@ -0,0 +1,59 @@ +# Copyright 2020 Google Inc. +# +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +#!/bin/bash +mkdir -p out + +# download perfetto trace_processor +if [ ! -f "trace_processor" ]; then + wget https://get.perfetto.dev/trace_processor + chmod +x trace_processor +fi + +declare -a testnames=("movie_loading" "uk" "white_material_wave_loading" + "check_animation" "confetti" "gears" + "hand_sanitizer" "heart_preloader" "i_was_scared_after_that_brouhaha" + "im_thirsty" "true_will" "workout_monkey_stay_healthy" + "ripple_loading_animation" "signature" "asdasd") + +adb root +# get out of the lock screen +adb shell input keyevent MENU +adb shell input keyevent MENU +adb shell setprop persist.traced.enable 1 +adb shell setenforce 0 +adb shell setprop debug.egl.traceGpuCompletion 1 +adb shell am force-stop org.skia.skottie +renderer_names=(lottie_hw lottie_sw skottie) +# iterate over lottie HW and skottie renderers +for renderer in {0,2} +do +echo "renderer " ${renderer_names[${renderer}]} +# iterate over each of the 15 lottie files +for file in {0..14} +do +if [[ $1 == "delay" ]]; then + # start program first and wait 7 seconds for program to load fully + echo "waiting to show file " ${file} " " ${testnames[$file]} + adb shell am start -n org.skia.skottie/.PerfActivity --ei renderer ${renderer} --ei file ${file} + sleep 7 + ./collect.sh +else + # start perfetto first (before the app) to give it a chance to capture startup metrics/shader compile and first frame rendering + ./collect.sh & + perfetto_pid=$! + # give one second for the perfetto script to start + sleep 1 + echo "show file " ${file} " " ${testnames[$file]} + adb shell am start -n org.skia.skottie/.PerfActivity --ei renderer ${renderer} --ei file ${file} + #wait for perfetto to finish (~10s) + wait $perfetto_pid +fi +adb shell am force-stop org.skia.skottie +./trace_processor --run-metrics=skottie_metric.sql --metrics-output=json trace > out/data_${renderer_names[${renderer}]}_${file}_${testnames[$file]}.json +mv trace out/trace_${renderer_names[${renderer}]}_${file}_${testnames[$file]} +done +done +echo All done diff --git a/platform_tools/android/apps/skottie/skottie_metric.proto b/platform_tools/android/apps/skottie/skottie_metric.proto new file mode 100644 index 0000000000000..e09dc6320fad9 --- /dev/null +++ b/platform_tools/android/apps/skottie/skottie_metric.proto @@ -0,0 +1,61 @@ +syntax = "proto2"; + +package perfetto.protos; + +import "protos/perfetto/metrics/metrics.proto"; +import "protos/perfetto/metrics/android/hwui_metric.proto"; + +// Android HWUI graphics performance and graphics memory usage metrics augmented with +// perf data which is specific to the Skottie player. Skottie app has an additional +// render thread named "SkottieAnimator" in the traces. Perf metrics are filtered for +// 'org.skia.skottie' process only. +message ProcessRenderInfoEx { + // original HWUI metric as defined by built-in perfetto proto. + optional ProcessRenderInfo hwui_process_info = 1; + + // Number of times the Skottie GL thread rendered a frame and max/min/avg time for Skottie GL + // renderer to finish rendering in + // in nanoseconds. These values have 0 value for lottie player, because it does it renders only + // in RenderThread. + optional uint32 skottie_animator_count = 2; + optional int64 skottie_animator_max = 3; + optional int64 skottie_animator_min = 4; + optional double skottie_animator_avg = 5; + + optional uint32 dequeue_buffer_count = 6; + optional int64 dequeue_buffer_max = 7; + optional int64 dequeue_buffer_min = 8; + optional double dequeue_buffer_avg = 9; + + // The following 2 fields are useful to compare render thread performance between Lottie and + // Skottie players. + // Skottie metric is a sum of the time on RenderThread and SkottieAnimator threads, while Lottie + // is only the time on RenderThread. + optional double render_time_avg = 10; // draw_frame_avg + skottie_animator_avg + + // "render_time_avg_no_dequeue" tries to compensate the time spent to wait for a new buffer. + // It equals draw_frame_avg + skottie_animator_avg - dequeue_buffer_avg. + optional double render_time_avg_no_dequeue = 11; + + optional int64 ui_thread_cpu_time = 12; // CPU time spent on UI thread in nanoseconds + optional int64 rt_thread_cpu_time = 13; // CPU time spent on RenderThread in nanoseconds + optional int64 hwui_tasks_cpu_time = 14; // CPU time spent on hwuiTask0/1 threads in nanoseconds + optional int64 skottie_animator_cpu_time = 15; // CPU time spent on SkottieAnimator in ns + + optional int64 total_cpu_time = 16; // Total CPU time in nanoseconds. Equals + // ui_thread_cpu_time + rt_thread_cpu_time + skottie_animator_cpu_time + hwui_tasks_cpu_time + + optional int64 total_gpu_time = 17; // GPU time spent to render all content in nanoseconds. + + // This one number is the "ultimate" benchmark to compare airbnb lottie vs skottie player. + // performance. It is the total time for any rendering related work on CPU and GPU combined. + optional int64 total_time = 18; // This is total_cpu_time + total_gpu_time in nanoseconds. +} + +message SkottieMetric { + repeated ProcessRenderInfoEx process_info = 1; +} + +extend TraceMetrics { + optional SkottieMetric skottie_metric = 460; +} diff --git a/platform_tools/android/apps/skottie/skottie_metric.sql b/platform_tools/android/apps/skottie/skottie_metric.sql new file mode 100644 index 0000000000000..1b75cfd25852b --- /dev/null +++ b/platform_tools/android/apps/skottie/skottie_metric.sql @@ -0,0 +1,217 @@ +SELECT RUN_METRIC('android/android_hwui_metric.sql'); + +CREATE VIEW dequeue_buffer AS +SELECT + count(*) as dequeue_buffer_count, + max(dur) as dequeue_buffer_max, + min(dur) as dequeue_buffer_min, + avg(dur) as dequeue_buffer_avg, + sum(dur) as dequeue_buffer_sum, + thread_track.utid as render_thread_id +FROM slice +INNER JOIN thread_track ON (thread_track.id = slice.track_id) +WHERE slice.name='dequeueBuffer' AND slice.dur >= 0 +GROUP BY thread_track.utid; + +CREATE VIEW skottie_animator AS +SELECT + count(*) as skottie_animator_count, + max(dur) as skottie_animator_max, + min(dur) as skottie_animator_min, + avg(dur) as skottie_animator_avg, + sum(dur) as skottie_animator_sum, + thread.upid as process_upid +FROM slice +INNER JOIN thread_track ON (thread_track.id = slice.track_id) +INNER JOIN thread ON (thread.name='SkottieAnimator' AND thread.utid = thread_track.utid) +WHERE slice.name='Choreographer#doFrame' AND slice.dur >= 0 +GROUP BY thread_track.utid; + +CREATE VIEW total_cpu_time AS +SELECT + sum(sched_slice.dur) as cpu_time, + thread.upid as process_upid +FROM sched_slice +INNER JOIN process ON (process.upid = thread.upid) +INNER JOIN thread ON ( + (thread.name LIKE 'hwuiTask%' OR thread.name=substr(process.name,-15) OR thread.name LIKE '%skottie' OR thread.name='RenderThread' OR thread.name='SkottieAnimator') + AND thread.utid = sched_slice.utid + ) +WHERE sched_slice.dur >= 0 +GROUP BY thread.upid; + +CREATE VIEW cpu_time_rt_hwui_tasks AS +SELECT + sum(sched_slice.dur) as cpu_time, + thread.upid as process_upid +FROM sched_slice +INNER JOIN thread ON (thread.name LIKE 'hwuiTask%' AND thread.utid = sched_slice.utid) +WHERE sched_slice.dur >= 0 +GROUP BY thread.upid; + +CREATE VIEW cpu_time_ui_thread AS +SELECT + sum(sched_slice.dur) as cpu_time, + thread.upid as process_upid +FROM sched_slice +INNER JOIN process ON (process.upid = thread.upid) +INNER JOIN thread ON ((thread.name=substr(process.name,-15) OR thread.name LIKE '%skottie') AND thread.utid = sched_slice.utid) +WHERE sched_slice.dur >= 0 +GROUP BY thread.upid; + +CREATE VIEW cpu_time_rt AS +SELECT + sum(sched_slice.dur) as cpu_time, + thread.upid as process_upid +FROM sched_slice +INNER JOIN thread ON (thread.name='RenderThread' AND thread.utid = sched_slice.utid) +WHERE sched_slice.dur >= 0 +GROUP BY thread.upid; + +CREATE VIEW cpu_time_skottie_animator AS +SELECT + sum(sched_slice.dur) as cpu_time, + thread.upid as process_upid +FROM sched_slice +INNER JOIN thread ON (thread.name='SkottieAnimator' AND thread.utid = sched_slice.utid) +WHERE sched_slice.dur >= 0 +GROUP BY thread.upid; + +CREATE VIEW hwui_gpu_completion2 AS +SELECT + count(*) as gpu_completion_count, + max(dur) as gpu_completion_max, + min(dur) as gpu_completion_min, + avg(dur) as gpu_completion_avg, + sum(dur) as gpu_completion_sum, + thread.upid as process_upid +FROM slice +INNER JOIN thread_track ON (thread_track.id = slice.track_id) +INNER JOIN thread ON (thread.name='GPU completion' AND thread.utid = thread_track.utid) +WHERE slice.name LIKE 'waiting for GPU completion%' AND slice.dur >= 0 +GROUP BY thread_track.utid; + +CREATE VIEW hwui_gpu_completion3 AS +SELECT + sum(dur) as gpu_completion_sum, + thread.upid as process_upid +FROM slice +INNER JOIN thread_track ON (thread_track.id = slice.track_id) +INNER JOIN thread ON (thread.utid = thread_track.utid) +WHERE slice.name LIKE 'waiting for frame%' AND slice.dur >= 0 +GROUP BY thread_track.utid; + +CREATE VIEW skottie_metric_output AS +SELECT SkottieMetric( + 'process_info', ( + SELECT RepeatedField( + ProcessRenderInfoEx( + 'hwui_process_info', + ProcessRenderInfo( + 'process_name', process_name, + 'rt_cpu_time_ms', rt_cpu_time_ms, + + 'draw_frame_count', hwui_draw_frame.draw_frame_count, + 'draw_frame_max', hwui_draw_frame.draw_frame_max, + 'draw_frame_min', hwui_draw_frame.draw_frame_min, + 'draw_frame_avg', hwui_draw_frame.draw_frame_avg, + + 'flush_count', hwui_flush_commands.flush_count, + 'flush_max', hwui_flush_commands.flush_max, + 'flush_min', hwui_flush_commands.flush_min, + 'flush_avg', hwui_flush_commands.flush_avg, + + 'prepare_tree_count', hwui_prepare_tree.prepare_tree_count, + 'prepare_tree_max', hwui_prepare_tree.prepare_tree_max, + 'prepare_tree_min', hwui_prepare_tree.prepare_tree_min, + 'prepare_tree_avg', hwui_prepare_tree.prepare_tree_avg, + + 'gpu_completion_count', hwui_gpu_completion2.gpu_completion_count, + 'gpu_completion_max', hwui_gpu_completion2.gpu_completion_max, + 'gpu_completion_min', hwui_gpu_completion2.gpu_completion_min, + 'gpu_completion_avg', hwui_gpu_completion2.gpu_completion_avg, + + 'ui_record_count', hwui_ui_record.ui_record_count, + 'ui_record_max', hwui_ui_record.ui_record_max, + 'ui_record_min', hwui_ui_record.ui_record_min, + 'ui_record_avg', hwui_ui_record.ui_record_avg, + + 'shader_compile_count', hwui_shader_compile.shader_compile_count, + 'shader_compile_time', hwui_shader_compile.shader_compile_time, + 'shader_compile_avg', hwui_shader_compile.shader_compile_avg, + + 'cache_hit_count', hwui_cache_hit.cache_hit_count, + 'cache_hit_time', hwui_cache_hit.cache_hit_time, + 'cache_hit_avg', hwui_cache_hit.cache_hit_avg, + + 'cache_miss_count', hwui_cache_miss.cache_miss_count, + 'cache_miss_time', hwui_cache_miss.cache_miss_time, + 'cache_miss_avg', hwui_cache_miss.cache_miss_avg, + + 'graphics_cpu_mem_max', CAST(hwui_graphics_cpu_mem.graphics_cpu_mem_max as INT64), + 'graphics_cpu_mem_min', CAST(hwui_graphics_cpu_mem.graphics_cpu_mem_min as INT64), + 'graphics_cpu_mem_avg', hwui_graphics_cpu_mem.graphics_cpu_mem_avg, + + 'graphics_gpu_mem_max', CAST(hwui_graphics_gpu_mem.graphics_gpu_mem_max as INT64), + 'graphics_gpu_mem_min', CAST(hwui_graphics_gpu_mem.graphics_gpu_mem_min as INT64), + 'graphics_gpu_mem_avg', hwui_graphics_gpu_mem.graphics_gpu_mem_avg, + + 'texture_mem_max', CAST(hwui_texture_mem.texture_mem_max as INT64), + 'texture_mem_min', CAST(hwui_texture_mem.texture_mem_min as INT64), + 'texture_mem_avg', hwui_texture_mem.texture_mem_avg, + + 'all_mem_max', CAST(hwui_all_mem.all_mem_max as INT64), + 'all_mem_min', CAST(hwui_all_mem.all_mem_min as INT64), + 'all_mem_avg', hwui_all_mem.all_mem_avg + ), + 'skottie_animator_count', ifnull(skottie_animator.skottie_animator_count, 0), + 'skottie_animator_max', ifnull(skottie_animator.skottie_animator_max, 0), + 'skottie_animator_min', ifnull(skottie_animator.skottie_animator_min, 0), + 'skottie_animator_avg', ifnull(skottie_animator.skottie_animator_avg, 0.0), + + 'dequeue_buffer_count', dequeue_buffer.dequeue_buffer_count, + 'dequeue_buffer_max', dequeue_buffer.dequeue_buffer_max, + 'dequeue_buffer_min', dequeue_buffer.dequeue_buffer_min, + 'dequeue_buffer_avg', dequeue_buffer.dequeue_buffer_avg, + + 'render_time_avg', ifnull(skottie_animator.skottie_animator_avg, 0.0) + hwui_draw_frame.draw_frame_avg, + 'render_time_avg_no_dequeue', ifnull(skottie_animator.skottie_animator_avg, 0.0) + hwui_draw_frame.draw_frame_avg - ifnull(dequeue_buffer.dequeue_buffer_avg, 0.0), + + 'ui_thread_cpu_time', ifnull(cpu_time_ui_thread.cpu_time, 0), + 'rt_thread_cpu_time', ifnull(cpu_time_rt.cpu_time, 0), + 'hwui_tasks_cpu_time', ifnull(cpu_time_rt_hwui_tasks.cpu_time, 0), + 'skottie_animator_cpu_time', ifnull(cpu_time_skottie_animator.cpu_time, 0), + + 'total_cpu_time', ifnull(total_cpu_time.cpu_time, 0), + 'total_gpu_time', ifnull(hwui_gpu_completion3.gpu_completion_sum, 0), + 'total_time', ifnull(total_cpu_time.cpu_time, 0) + ifnull(hwui_gpu_completion3.gpu_completion_sum, 0) + ) + ) + FROM hwui_processes + LEFT JOIN hwui_draw_frame ON (hwui_draw_frame.render_thread_id = hwui_processes.render_thread_id) + LEFT JOIN hwui_flush_commands ON (hwui_flush_commands.render_thread_id = hwui_processes.render_thread_id) + LEFT JOIN hwui_prepare_tree ON (hwui_prepare_tree.render_thread_id = hwui_processes.render_thread_id) + LEFT JOIN hwui_gpu_completion2 ON (hwui_gpu_completion2.process_upid = hwui_processes.process_upid) + LEFT JOIN hwui_ui_record ON (hwui_ui_record.process_upid = hwui_processes.process_upid) + LEFT JOIN hwui_shader_compile ON (hwui_shader_compile.render_thread_id = hwui_processes.render_thread_id) + LEFT JOIN hwui_cache_hit ON (hwui_cache_hit.render_thread_id = hwui_processes.render_thread_id) + LEFT JOIN hwui_cache_miss ON (hwui_cache_miss.render_thread_id = hwui_processes.render_thread_id) + LEFT JOIN hwui_graphics_cpu_mem ON (hwui_graphics_cpu_mem.process_upid = hwui_processes.process_upid) + LEFT JOIN hwui_graphics_gpu_mem ON (hwui_graphics_gpu_mem.process_upid = hwui_processes.process_upid) + LEFT JOIN hwui_texture_mem ON (hwui_texture_mem.process_upid = hwui_processes.process_upid) + LEFT JOIN hwui_all_mem ON (hwui_all_mem.process_upid = hwui_processes.process_upid) + LEFT JOIN skottie_animator ON (skottie_animator.process_upid = hwui_processes.process_upid) + LEFT JOIN dequeue_buffer ON (dequeue_buffer.render_thread_id = hwui_processes.render_thread_id) + LEFT JOIN total_cpu_time ON (total_cpu_time.process_upid = hwui_processes.process_upid) + LEFT JOIN cpu_time_rt_hwui_tasks ON (cpu_time_rt_hwui_tasks.process_upid = hwui_processes.process_upid) + LEFT JOIN cpu_time_rt ON (cpu_time_rt.process_upid = hwui_processes.process_upid) + LEFT JOIN cpu_time_skottie_animator ON (cpu_time_skottie_animator.process_upid = hwui_processes.process_upid) + LEFT JOIN cpu_time_ui_thread ON (cpu_time_ui_thread.process_upid = hwui_processes.process_upid) + LEFT JOIN hwui_gpu_completion3 ON (hwui_gpu_completion3.process_upid = hwui_processes.process_upid) + JOIN (SELECT MAX(rt_cpu_time_ms), process_upid AS id FROM hwui_processes) max_render ON hwui_processes.process_upid = max_render.id + -- process name is often missing on WearOs/Android P -> instead select process is highest CPU time in RenderThread. + -- WHERE hwui_processes.process_name='org.skia.skottie' + ) +); + + diff --git a/platform_tools/android/apps/skottie/skottielib/.gitignore b/platform_tools/android/apps/skottie/skottielib/.gitignore new file mode 100644 index 0000000000000..796b96d1c4023 --- /dev/null +++ b/platform_tools/android/apps/skottie/skottielib/.gitignore @@ -0,0 +1 @@ +/build diff --git a/platform_tools/android/apps/skottie/skottielib/build.gradle b/platform_tools/android/apps/skottie/skottielib/build.gradle new file mode 100644 index 0000000000000..29eab4816d3c2 --- /dev/null +++ b/platform_tools/android/apps/skottie/skottielib/build.gradle @@ -0,0 +1,36 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 29 + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + buildToolsVersion "29.0.3" + + defaultConfig { + minSdkVersion 19 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + } + + // When building from Android Studio, ensure that local variables are set: + // sdk.dir=[sdk file path] + // depot_tools.dir=[depot tools file path] + // x86.out.dir=[out file for x86] + // x64.out.dir=[out file for x64] + // arm64.out.dir=[out file for xarm64] + // arm.out.dir=[out file for arm] + + sourceSets.main.jniLibs.srcDir "src/main/libs" + flavorDimensions "base" + productFlavors { arm {}; arm64 {}; x86 {}; x64 {}; arm64vulkan{}; } + setupSkiaLibraryBuild(project, libraryVariants, "libskottie_android") + +} + +dependencies { + implementation 'androidx.appcompat:appcompat:1.1.0' + +} diff --git a/platform_tools/android/apps/skottie/skottielib/src/main/AndroidManifest.xml b/platform_tools/android/apps/skottie/skottielib/src/main/AndroidManifest.xml new file mode 100644 index 0000000000000..135d0d8be0fc9 --- /dev/null +++ b/platform_tools/android/apps/skottie/skottielib/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp b/platform_tools/android/apps/skottie/skottielib/src/main/cpp/native-lib.cpp similarity index 78% rename from platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp rename to platform_tools/android/apps/skottie/skottielib/src/main/cpp/native-lib.cpp index 5dd7f61a759a6..0b494dfbb0ed7 100644 --- a/platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp +++ b/platform_tools/android/apps/skottie/skottielib/src/main/cpp/native-lib.cpp @@ -23,13 +23,13 @@ #include "include/gpu/gl/GrGLTypes.h" #include "modules/skottie/include/Skottie.h" +#include "modules/sksg/include/SkSGInvalidationController.h" #include #include #include #include -#include "platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.h" #define STENCIL_BUFFER_SIZE 8 @@ -59,6 +59,17 @@ struct SkottieRunner { sk_sp mGrContext; }; +static JavaVM* sJVM = nullptr; + +static void release_global_jni_ref(const void* /*data*/, void* context) { + JNIEnv* env; + if (sJVM->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) { + SK_ABORT("Attempting to release a JNI ref on a thread without a JVM attached."); + } + jobject obj = reinterpret_cast(context); + env->DeleteGlobalRef(obj); +} + extern "C" JNIEXPORT jlong JNICALL Java_org_skia_skottie_SkottieRunner_nCreateProxy(JNIEnv *env, jclass clazz) { @@ -104,15 +115,31 @@ struct SkottieAnimation { extern "C" JNIEXPORT jlong JNICALL -Java_org_skia_skottie_SkottieRunner_00024SkottieAnimationImpl_nCreateProxy(JNIEnv *env, jobject clazz, - jlong runner, jobject is, - jbyteArray storage) { +Java_org_skia_skottie_SkottieRunner_00024SkottieAnimationImpl_nCreateProxy(JNIEnv *env, + jobject clazz, + jlong runner, + jobject bufferObj) { if (!runner) { return 0; } SkottieRunner *skottieRunner = reinterpret_cast(runner); - std::unique_ptr stream(CopyJavaInputStream(env, is, storage)); + + const void* buffer = env->GetDirectBufferAddress(bufferObj); + jlong bufferSize = env->GetDirectBufferCapacity(bufferObj); + if (buffer == nullptr || bufferSize <= 0) { + return 0; + } + + env->GetJavaVM(&sJVM); + jobject bufferRef = env->NewGlobalRef(bufferObj); + if (bufferRef == nullptr) { + return 0; + } + + sk_sp data(SkData::MakeWithProc(buffer, bufferSize, release_global_jni_ref, + reinterpret_cast(bufferRef))); + std::unique_ptr stream = SkMemoryStream::Make(data); if (!stream.get()) { // Cannot create a stream return 0; @@ -146,7 +173,7 @@ Java_org_skia_skottie_SkottieRunner_00024SkottieAnimationImpl_nDeleteProxy(JNIEn delete skottieAnimation; } -extern "C" JNIEXPORT void +extern "C" JNIEXPORT bool JNICALL Java_org_skia_skottie_SkottieRunner_00024SkottieAnimationImpl_nDrawFrame(JNIEnv *env, jclass clazz, jlong nativeProxy, jint width, @@ -155,14 +182,23 @@ Java_org_skia_skottie_SkottieRunner_00024SkottieAnimationImpl_nDrawFrame(JNIEnv jfloat progress) { ATRACE_NAME("SkottieDrawFrame"); if (!nativeProxy) { - return; + return false; } SkottieAnimation* skottieAnimation = reinterpret_cast(nativeProxy); auto grContext = skottieAnimation->mRunner->mGrContext; if (!grContext) { - return; + return false; + } + + sksg::InvalidationController ic; + + if (skottieAnimation->mAnimation) { + skottieAnimation->mAnimation->seek(progress, &ic); + if (ic.bounds().isEmpty()) { + return false; + } } SkColorType colorType; @@ -186,15 +222,13 @@ Java_org_skia_skottie_SkottieRunner_00024SkottieAnimationImpl_nDrawFrame(JNIEnv auto canvas = renderTarget->getCanvas(); canvas->clear(SK_ColorTRANSPARENT); - if (skottieAnimation->mAnimation) { - skottieAnimation->mAnimation->seek(progress); - SkAutoCanvasRestore acr(canvas, true); - SkRect bounds = SkRect::MakeWH(width, height); - skottieAnimation->mAnimation->render(canvas, &bounds); - } + SkAutoCanvasRestore acr(canvas, true); + SkRect bounds = SkRect::MakeWH(width, height); + skottieAnimation->mAnimation->render(canvas, &bounds); canvas->flush(); + return true; } extern "C" JNIEXPORT jlong diff --git a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieAnimation.java b/platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieAnimation.java similarity index 92% rename from platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieAnimation.java rename to platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieAnimation.java index 4280e69d00475..0c4e8d0be11b3 100644 --- a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieAnimation.java +++ b/platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieAnimation.java @@ -1,7 +1,7 @@ package org.skia.skottie; import android.graphics.drawable.Animatable; -import android.support.annotation.FloatRange; +import androidx.annotation.FloatRange; public interface SkottieAnimation extends Animatable { /** diff --git a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieRunner.java b/platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieRunner.java similarity index 84% rename from platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieRunner.java rename to platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieRunner.java index ebcd748aa9f3f..5a2eac7f9020e 100644 --- a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieRunner.java +++ b/platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieRunner.java @@ -16,7 +16,13 @@ import android.view.Choreographer; import android.view.TextureView; +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.channels.FileChannel; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -27,7 +33,7 @@ import javax.microedition.khronos.egl.EGLDisplay; import javax.microedition.khronos.egl.EGLSurface; -public class SkottieRunner { +class SkottieRunner { private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098; private static final int EGL_OPENGL_ES2_BIT = 4; private static final int STENCIL_BUFFER_SIZE = 8; @@ -45,6 +51,9 @@ public class SkottieRunner { private EGLSurface mPBufferSurface; private long mNativeProxy; + static { + System.loadLibrary("skottie_android"); + } /** * Gets SkottieRunner singleton instance. */ @@ -262,8 +271,6 @@ private class SkottieAnimationImpl implements SkottieAnimation, Choreographer.Fr private int mSurfaceWidth = 0; private int mSurfaceHeight = 0; private long mNativeProxy; - private InputStream mInputStream; - private byte[] mTempStorage; private long mDuration; // duration in ms of the animation private float mProgress; // animation progress in the range of 0.0f to 1.0f private long mAnimationStartTime; // time in System.nanoTime units, when started @@ -277,11 +284,41 @@ private class SkottieAnimationImpl implements SkottieAnimation, Choreographer.Fr view.setSurfaceTextureListener(this); } + private ByteBuffer convertToByteBuffer(InputStream is) throws IOException { + if (is instanceof FileInputStream) { + FileChannel fileChannel = ((FileInputStream)is).getChannel(); + return fileChannel.map(FileChannel.MapMode.READ_ONLY, + fileChannel.position(), fileChannel.size()); + } + + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + byte[] tmpStorage = new byte[4096]; + int bytesRead; + while ((bytesRead = is.read(tmpStorage, 0, tmpStorage.length)) != -1) { + byteStream.write(tmpStorage, 0, bytesRead); + } + + byteStream.flush(); + tmpStorage = byteStream.toByteArray(); + + ByteBuffer buffer = ByteBuffer.allocateDirect(tmpStorage.length); + buffer.order(ByteOrder.nativeOrder()); + buffer.put(tmpStorage, 0, tmpStorage.length); + return buffer.asReadOnlyBuffer(); + } + private void init(SurfaceTexture surfaceTexture, InputStream is) { - mTempStorage = new byte[16 * 1024]; - mInputStream = is; + + ByteBuffer byteBuffer; + try { + byteBuffer = convertToByteBuffer(is); + } catch (IOException e) { + Log.e(LOG_TAG, "failed to read input stream", e); + return; + } + long proxy = SkottieRunner.getInstance().getNativeProxy(); - mNativeProxy = nCreateProxy(proxy, mInputStream, mTempStorage); + mNativeProxy = nCreateProxy(proxy, byteBuffer); mSurfaceTexture = surfaceTexture; mDuration = nGetDuration(mNativeProxy); mProgress = 0f; @@ -419,28 +456,31 @@ private void drawFrame() { mNewSurface = true; return; } - - nDrawFrame(mNativeProxy, mSurfaceWidth, mSurfaceHeight, false, - mProgress); - if (!mEgl.eglSwapBuffers(mEglDisplay, mEglSurface)) { - int error = mEgl.eglGetError(); - if (error == EGL10.EGL_BAD_SURFACE + // only if nDrawFrames() returns true do we need to swap buffers + if(nDrawFrame(mNativeProxy, mSurfaceWidth, mSurfaceHeight, false, + mProgress)) { + if (!mEgl.eglSwapBuffers(mEglDisplay, mEglSurface)) { + int error = mEgl.eglGetError(); + if (error == EGL10.EGL_BAD_SURFACE || error == EGL10.EGL_BAD_NATIVE_WINDOW) { - // For some reason our surface was destroyed. Recreate EGL surface - // on next frame. - mNewSurface = true; - // This really shouldn't happen, but if it does we can recover easily - // by just not trying to use the surface anymore - Log.w(LOG_TAG, "swapBuffers failed " + // For some reason our surface was destroyed. Recreate EGL surface + // on next frame. + mNewSurface = true; + // This really shouldn't happen, but if it does we can recover + // easily by just not trying to use the surface anymore + Log.w(LOG_TAG, "swapBuffers failed " + GLUtils.getEGLErrorString(error)); - return; - } + return; + } - // Some other fatal EGL error happened, log an error and stop the animation. - throw new RuntimeException("Cannot swap buffers " + // Some other fatal EGL error happened, log an error and stop the + // animation. + throw new RuntimeException("Cannot swap buffers " + GLUtils.getEGLErrorString(error)); + } } + // If animation stopped, release EGL surface. if (!mIsRunning) { // Ensure we always have a valid surface & context. @@ -499,10 +539,10 @@ public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { } - private native long nCreateProxy(long runner, InputStream is, byte[] storage); + private native long nCreateProxy(long runner, ByteBuffer data); private native void nDeleteProxy(long nativeProxy); - private native void nDrawFrame(long nativeProxy, int width, int height, - boolean wideColorGamut, float progress); + private native boolean nDrawFrame(long nativeProxy, int width, int height, + boolean wideColorGamut, float progress); private native long nGetDuration(long nativeProxy); } diff --git a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieView.java b/platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieView.java similarity index 69% rename from platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieView.java rename to platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieView.java index 30602ea76bc67..b996cc9a690e6 100644 --- a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieView.java +++ b/platform_tools/android/apps/skottie/skottielib/src/main/java/org/skia/skottie/SkottieView.java @@ -8,9 +8,11 @@ package org.skia.skottie; import android.content.Context; +import android.net.Uri; import android.util.AttributeSet; import android.view.TextureView; +import java.io.FileNotFoundException; import java.io.InputStream; public class SkottieView extends TextureView { @@ -45,6 +47,16 @@ public void setSource(InputStream inputStream) { mAnimation = SkottieRunner.getInstance().createAnimation(this, inputStream); } + public void setSkottieResource(int resId) { + InputStream inputStream = getResources().openRawResource(resId); + mAnimation = SkottieRunner.getInstance().createAnimation(this, inputStream); + } + + public void setSkottieURI(Context context, Uri uri) throws FileNotFoundException { + InputStream inputStream = context.getContentResolver().openInputStream(uri); + mAnimation = SkottieRunner.getInstance().createAnimation(this, inputStream); + } + public SkottieAnimation getSkottieAnimation() { return mAnimation; } diff --git a/platform_tools/android/apps/skottie/src/main/AndroidManifest.xml b/platform_tools/android/apps/skottie/src/main/AndroidManifest.xml index d308aed795fc8..5f19d60cb8c1f 100644 --- a/platform_tools/android/apps/skottie/src/main/AndroidManifest.xml +++ b/platform_tools/android/apps/skottie/src/main/AndroidManifest.xml @@ -1,23 +1,21 @@ - + package="org.skia.skottie" + android:versionCode="1" + android:versionName="1.0"> - + + + + + + + + + + - - - - - - - - - - + \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.cpp b/platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.cpp deleted file mode 100644 index caeb85917c150..0000000000000 --- a/platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.cpp +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#include "include/core/SkTypes.h" -#include "platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.h" - -static jclass findClassCheck(JNIEnv* env, const char classname[]) { - jclass clazz = env->FindClass(classname); - SkASSERT(!env->ExceptionCheck()); - return clazz; -} - -static jmethodID getMethodIDCheck(JNIEnv* env, jclass clazz, - const char methodname[], const char type[]) { - jmethodID id = env->GetMethodID(clazz, methodname, type); - SkASSERT(!env->ExceptionCheck()); - return id; -} - -static jmethodID gInputStream_readMethodID; -static jmethodID gInputStream_skipMethodID; - -static JNIEnv* get_env_or_die(JavaVM* jvm) { - JNIEnv* env; - if (jvm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_6) != JNI_OK) { - char errorMessage[256]; - sprintf(errorMessage, "Failed to get JNIEnv for JavaVM: %p", jvm); - SK_ABORT(errorMessage); - } - return env; -} - -/** - * Wrapper for a Java InputStream. - */ -class JavaInputStreamAdaptor : public SkStream { - JavaInputStreamAdaptor(JavaVM* jvm, jobject js, jbyteArray ar, jint capacity, - bool swallowExceptions) - : fJvm(jvm) - , fJavaInputStream(js) - , fJavaByteArray(ar) - , fCapacity(capacity) - , fBytesRead(0) - , fIsAtEnd(false) - , fSwallowExceptions(swallowExceptions) {} - -public: - static JavaInputStreamAdaptor* Create(JNIEnv* env, jobject js, jbyteArray ar, - bool swallowExceptions) { - JavaVM* jvm; - if (env->GetJavaVM(&jvm) != JNI_OK) { - SK_ABORT("Failed to get JavaVM"); - } - - js = env->NewGlobalRef(js); - if (!js) { - return nullptr; - } - - ar = (jbyteArray) env->NewGlobalRef(ar); - if (!ar) { - env->DeleteGlobalRef(js); - return nullptr; - } - - jint capacity = env->GetArrayLength(ar); - return new JavaInputStreamAdaptor(jvm, js, ar, capacity, swallowExceptions); - } - - ~JavaInputStreamAdaptor() override { - auto* env = get_env_or_die(fJvm); - env->DeleteGlobalRef(fJavaInputStream); - env->DeleteGlobalRef(fJavaByteArray); - } - - size_t read(void* buffer, size_t size) override { - auto* env = get_env_or_die(fJvm); - if (!fSwallowExceptions && checkException(env)) { - // Just in case the caller did not clear from a previous exception. - return 0; - } - if (NULL == buffer) { - if (0 == size) { - return 0; - } else { - /* InputStream.skip(n) can return <=0 but still not be at EOF - If we see that value, we need to call read(), which will - block if waiting for more data, or return -1 at EOF - */ - size_t amountSkipped = 0; - do { - size_t amount = this->doSkip(size - amountSkipped, env); - if (0 == amount) { - char tmp; - amount = this->doRead(&tmp, 1, env); - if (0 == amount) { - // if read returned 0, we're at EOF - fIsAtEnd = true; - break; - } - } - amountSkipped += amount; - } while (amountSkipped < size); - return amountSkipped; - } - } - return this->doRead(buffer, size, env); - } - - bool isAtEnd() const override { return fIsAtEnd; } - -private: - size_t doRead(void* buffer, size_t size, JNIEnv* env) { - size_t bytesRead = 0; - // read the bytes - do { - jint requested = 0; - if (size > static_cast(fCapacity)) { - requested = fCapacity; - } else { - // This is safe because requested is clamped to (jint) - // fCapacity. - requested = static_cast(size); - } - - jint n = env->CallIntMethod(fJavaInputStream, - gInputStream_readMethodID, fJavaByteArray, 0, requested); - if (checkException(env)) { - SkDebugf("---- read threw an exception\n"); - return bytesRead; - } - - if (n < 0) { // n == 0 should not be possible, see InputStream read() specifications. - fIsAtEnd = true; - break; // eof - } - - env->GetByteArrayRegion(fJavaByteArray, 0, n, - reinterpret_cast(buffer)); - if (checkException(env)) { - SkDebugf("---- read:GetByteArrayRegion threw an exception\n"); - return bytesRead; - } - - buffer = (void*)((char*)buffer + n); - bytesRead += n; - size -= n; - fBytesRead += n; - } while (size != 0); - - return bytesRead; - } - - size_t doSkip(size_t size, JNIEnv* env) { - jlong skipped = env->CallLongMethod(fJavaInputStream, - gInputStream_skipMethodID, (jlong)size); - if (checkException(env)) { - SkDebugf("------- skip threw an exception\n"); - return 0; - } - if (skipped < 0) { - skipped = 0; - } - - return (size_t)skipped; - } - - bool checkException(JNIEnv* env) { - if (!env->ExceptionCheck()) { - return false; - } - - env->ExceptionDescribe(); - if (fSwallowExceptions) { - env->ExceptionClear(); - } - - // There is no way to recover from the error, so consider the stream - // to be at the end. - fIsAtEnd = true; - - return true; - } - - JavaVM* fJvm; - jobject fJavaInputStream; - jbyteArray fJavaByteArray; - const jint fCapacity; - size_t fBytesRead; - bool fIsAtEnd; - const bool fSwallowExceptions; -}; - -static SkStream* CreateJavaInputStreamAdaptor(JNIEnv* env, jobject stream, jbyteArray storage, - bool swallowExceptions = true) { - return JavaInputStreamAdaptor::Create(env, stream, storage, swallowExceptions); -} - -static SkMemoryStream* adaptor_to_mem_stream(SkStream* stream) { - SkASSERT(stream != NULL); - size_t bufferSize = 4096; - size_t streamLen = 0; - size_t len; - char* data = (char*)sk_malloc_throw(bufferSize); - - while ((len = stream->read(data + streamLen, - bufferSize - streamLen)) != 0) { - streamLen += len; - if (streamLen == bufferSize) { - bufferSize *= 2; - data = (char*)sk_realloc_throw(data, bufferSize); - } - } - data = (char*)sk_realloc_throw(data, streamLen); - - SkMemoryStream* streamMem = new SkMemoryStream(); - streamMem->setMemoryOwned(data, streamLen); - return streamMem; -} - -SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream, - jbyteArray storage) { - std::unique_ptr adaptor(CreateJavaInputStreamAdaptor(env, stream, storage)); - if (NULL == adaptor.get()) { - return NULL; - } - return adaptor_to_mem_stream(adaptor.get()); -} - - -extern "C" JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) { - JNIEnv* env; - if (vm->GetEnv(reinterpret_cast(&env), JNI_VERSION_1_6) != JNI_OK) { - return -1; - } - - jclass inputStream_Clazz = findClassCheck(env, "java/io/InputStream"); - gInputStream_readMethodID = getMethodIDCheck(env, inputStream_Clazz, "read", "([BII)I"); - gInputStream_skipMethodID = getMethodIDCheck(env, inputStream_Clazz, "skip", "(J)J"); - - return JNI_VERSION_1_6; -} diff --git a/platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.h b/platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.h deleted file mode 100644 index 8cfc2a4ef7719..0000000000000 --- a/platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include "include/core/SkStream.h" -#include "include/private/SkMalloc.h" -#include - -SkStreamRewindable* CopyJavaInputStream(JNIEnv* env, jobject stream, - jbyteArray storage); diff --git a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/PerfActivity.java b/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/PerfActivity.java new file mode 100644 index 0000000000000..5d52fc37819dc --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/PerfActivity.java @@ -0,0 +1,82 @@ +package org.skia.skottie; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.view.Window; +import android.view.WindowManager; +import android.widget.TextView; + +import com.airbnb.lottie.LottieAnimationView; +import com.airbnb.lottie.LottieDrawable; +import com.airbnb.lottie.RenderMode; + +public class PerfActivity extends Activity { + + int rawAssets[] = { + /*R.raw.star,*/ R.raw.movie_loading, R.raw.uk, R.raw.white_material_wave_loading, + R.raw.check_animation, R.raw.confetti, R.raw.gears, + R.raw.hand_sanitizer, R.raw.heart_preloader, R.raw.i_was_scared_after_that_brouhaha, + R.raw.im_thirsty, R.raw.true_will, R.raw.workout_monkey_stay_healthy, + R.raw.ripple_loading_animation, R.raw.signature, R.raw.asdasd + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + //Remove title bar + this.requestWindowFeature(Window.FEATURE_NO_TITLE); + + //Remove notification bar + this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + + super.onCreate(savedInstanceState); + // Run activity with: + // adb shell am start -n org.skia.skottie/.PerfActivity --ei renderer 0 --ei file 0 + // renderer is 0 to 2, file is 0 to 14 + Intent intent = getIntent(); + int renderer = intent.getIntExtra("renderer", 0); + int file = intent.getIntExtra("file", 0); + if (file < 0 || file >= rawAssets.length) { + return; + } + switch (renderer) { + case 0: + // render with airbnb hardware lottie player + runLottie(rawAssets[file], true); + break; + case 1: + // render with airbnb software lottie player + runLottie(rawAssets[file], false); + break; + case 2: + // render with skottie player + runSkottie(rawAssets[file]); + break; + default: + break; + } + + } + + void runSkottie(int id) { + SkottieView view = new SkottieView(this); + view.setSource(getResources().openRawResource(id)); + view.getSkottieAnimation().start(); + setContentView(view); + } + + void runLottie(int id, boolean useHardware) { + LottieAnimationView lottie = new LottieAnimationView(this); + lottie.setAnimation(id); + if (useHardware) { + lottie.setRenderMode(RenderMode.HARDWARE); + } else { + lottie.setRenderMode(RenderMode.SOFTWARE); + } + lottie.setRepeatMode(LottieDrawable.RESTART); + lottie.setRepeatCount(LottieDrawable.INFINITE); + lottie.playAnimation(); + setContentView(lottie); + } +} diff --git a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieActivity.java b/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieActivity.java index 48694768274da..1a3520080ea2e 100644 --- a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieActivity.java +++ b/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieActivity.java @@ -33,8 +33,6 @@ public class SkottieActivity extends Activity implements View.OnClickListener { private final static long TIME_OUT_MS = 10000; - private SkottieApplication mApplication; - private CountDownLatch mEnterAnimationFence = new CountDownLatch(1); private GridLayout mGrid; @@ -59,15 +57,14 @@ private void populateGrid() { for (int resId : rawAssets) { SkottieView view = new SkottieView(this); - view.setSource(getResources().openRawResource(resId)); + view.setSkottieResource(resId); mAnimations.add(view); } for (Uri uri : mAnimationFiles) { try { - InputStream inputStream = getContentResolver().openInputStream(uri); SkottieView view = new SkottieView(this); - view.setSource(inputStream); + view.setSkottieURI(this, uri); mAnimations.add(view); } catch (FileNotFoundException e) { e.printStackTrace(); @@ -186,11 +183,10 @@ private void stopAnimation() { } private void addLottie(Uri uri) throws FileNotFoundException { - InputStream inputStream = getContentResolver().openInputStream(uri); int animations = mAnimations.size(); if (animations < mRowCount * mColumnCount) { SkottieView view = new SkottieView(this); - view.setSource(inputStream); + view.setSkottieURI(this, uri); int row = animations / mColumnCount, column = animations % mColumnCount; mAnimations.add(view); mAnimationFiles.add(uri); diff --git a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieApplication.java b/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieApplication.java deleted file mode 100644 index cd3418081f26d..0000000000000 --- a/platform_tools/android/apps/skottie/src/main/java/org/skia/skottie/SkottieApplication.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -package org.skia.skottie; -import android.app.Application; - -public class SkottieApplication extends Application { - - static { - System.loadLibrary("skottie_android"); - } - - @Override - public void onCreate() { - super.onCreate(); - } - - @Override - public void onTerminate() { - super.onTerminate(); - } -} diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/asdasd.json b/platform_tools/android/apps/skottie/src/main/res/raw/asdasd.json new file mode 100644 index 0000000000000..b053cceef55b2 --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/asdasd.json @@ -0,0 +1 @@ +{"v":"5.6.10","fr":25,"ip":0,"op":101,"w":1920,"h":700,"nm":"HOMEPAGE_02","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,390,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Layer 11","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[203.14,539.5],[157.16,268.497],[131.82,150.007],[120.26,108.241],[113.85,89.52],[109.75,79.388],[105.75,71.017],[103.78,67.466],[101.83,64.327],[99.9,61.594],[97.98,59.259],[96.06,57.319],[94.16,55.77],[92.26,54.608],[90.37,53.832],[75.2,49.725],[39.075,40.427],[2.748,31.747],[-28.046,24.917],[-57.058,18.926],[-94.048,11.918],[-125.459,6.523],[-155.106,1.899],[-192.96,-3.338],[-225.153,-7.201],[-255.602,-10.355],[-294.538,-13.676],[-327.701,-15.87],[-359.132,-17.411],[-399.391,-18.614],[-433.735,-18.953],[-466.347,-18.686],[-508.2,-17.503],[-543.963,-15.737],[-577.981,-13.409],[-621.738,-9.483],[-659.193,-5.285],[-694.876,-0.563],[-740.893,6.569],[-780.356,13.628],[-818.015,21.18],[-866.7,32.128],[-908.544,42.61],[-948.543,53.564],[-959.5,56.852]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[188.43,539.5],[137.84,242.049],[118.9,160.031],[109.39,128.553],[102.66,110.946],[98.31,101.796],[96.16,97.958],[94.03,94.597],[91.91,91.704],[89.8,89.271],[87.7,87.293],[85.6,85.764],[83.51,84.681],[68.79,83.105],[54.07,82.203],[16.187,80.357],[-21.804,79.197],[-55.687,78.751],[-89.654,78.866],[-128.03,79.679],[-162.322,81.022],[-196.753,82.963],[-235.718,85.882],[-270.599,89.15],[-305.681,93.067],[-345.447,98.28],[-381.111,103.659],[-417.042,109.757],[-457.839,117.517],[-494.496,125.253],[-531.493,133.803],[-573.574,144.442],[-611.453,154.86],[-649.758,166.212],[-693.402,180.162],[-732.763,193.68],[-772.644,208.292],[-818.169,226.112],[-859.303,243.272],[-901.069,261.733],[-948.836,284.149],[-959.5,289.452]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[180.7,539.5],[179.98,534.209],[125.5,232.593],[113.44,189.383],[106.74,171.016],[102.43,161.577],[98.22,154.247],[96.14,151.345],[94.07,148.939],[92.02,147.021],[89.97,145.587],[87.94,144.632],[85.9,144.152],[71.67,147.79],[57.47,152.332],[21.117,164.463],[-15.072,177.268],[-47.125,189.228],[-79.047,201.729],[-114.857,216.465],[-146.63,230.184],[-178.319,244.479],[-213.919,261.286],[-245.557,276.898],[-277.157,293.139],[-312.708,312.2],[-344.353,329.884],[-376.008,348.264],[-411.669,369.816],[-443.46,389.801],[-475.31,410.567],[-511.241,434.91],[-543.319,457.481],[-575.508,480.943],[-611.869,508.452],[-644.377,533.969],[-651.185,539.5]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[188.04,539.5],[156.81,321.547],[140.56,246.239],[129.21,207.302],[121.84,188.213],[116.35,177.121],[112.69,171.168],[109.02,166.322],[107.18,164.305],[105.33,162.553],[103.47,161.064],[101.61,159.834],[99.73,158.863],[97.85,158.147],[95.95,157.686],[94.04,157.478],[92.11,157.523],[90.16,157.819],[88.2,158.368],[86.22,159.145],[50.73,174.195],[29.181,183.702],[5.768,194.352],[-29.193,210.887],[-60.079,226.139],[-90.816,241.932],[-125.271,260.377],[-155.759,277.368],[-186.142,294.942],[-220.253,315.45],[-250.485,334.33],[-280.655,353.848],[-314.575,376.617],[-344.688,397.58],[-374.778,419.249],[-408.656,444.532],[-438.781,467.82],[-468.921,491.901],[-502.903,520.013],[-525.66,539.5]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[721.34,539.5],[703.48,520.338],[680.65,496.238],[656.43,471.043],[627.81,441.777],[605.29,419.131],[581.34,395.424],[553,367.866],[530.66,346.528],[506.87,324.16],[478.67,298.143],[456.41,277.988],[432.65,256.842],[404.44,232.23],[376.2,208.122],[364.29,198.118],[362.91,197.178],[361.7,196.697],[360.66,196.676],[359.78,197.116],[359.07,198.02],[358.53,199.392],[358.16,201.237],[357.95,203.561],[358.05,209.676],[358.85,217.812],[361.4,234.023],[369.58,272.893],[399.59,390.386],[441.92,539.5]],"c":false},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[813.25,539.5],[805.04,531.803],[772.96,502.287],[744.65,476.729],[716.49,451.771],[685.02,424.425],[657.2,400.725],[629.47,377.56],[598.44,352.156],[570.94,330.126],[543.5,308.579],[512.72,284.933],[485.41,264.419],[458.11,244.349],[427.42,222.313],[396.73,200.837],[384.79,192.627],[373.12,185.23],[371.84,185.177],[370.75,185.624],[369.85,186.572],[369.14,188.027],[368.63,189.994],[368.3,192.48],[368.23,199.041],[368.96,207.797],[371.59,225.3],[380.47,267.491],[455.57,539.5]],"c":false},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[641.52,539.5],[623.95,517.531],[601.41,489.758],[578.95,462.476],[553.74,432.334],[531.41,406.048],[509.13,380.201],[484.07,351.608],[461.84,326.643],[439.6,302.073],[414.56,274.863],[396.47,255.511],[378.36,236.401],[353.23,210.304],[351.83,208.869],[350.5,207.612],[349.27,206.622],[348.14,205.901],[347.11,205.447],[346.18,205.262],[345.35,205.346],[344.62,205.7],[343.99,206.327],[343.46,207.227],[343.03,208.404],[342.46,211.596],[342.31,215.93],[342.57,221.436],[343.75,231.985],[346.88,250.589],[353.5,281.9],[371.38,354.216],[423.75,539.5]],"c":false},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.164703369141,0.333312988281,0.537231445313,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":202,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[800]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":8,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Layer 10","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[285.49,-539.5],[282.24,-516.37],[277.64,-481.1],[273.87,-449.949],[270.38,-418.944],[266.78,-384.282],[263.83,-353.622],[261.13,-323.072],[258.35,-288.87],[256.1,-258.582],[254.06,-228.361],[251.99,-194.479],[250.34,-164.436],[248.87,-134.42],[247.41,-100.716],[246.15,-67.05],[245.72,-53.955],[245.5,-40.237],[245.71,-37.516],[246.03,-34.426],[246.47,-30.963],[247.02,-27.121],[247.69,-22.892],[248.47,-18.266],[250.41,-7.787],[252.85,4.412],[257.52,26.202],[268.33,73.206],[342.97,369.401],[387.81,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[217.61,539.5],[166.62,225.721],[149.96,150.795],[138.54,109.983],[131.22,88.69],[125.81,75.458],[122.22,67.848],[118.64,61.161],[116.84,58.153],[115.05,55.364],[113.24,52.791],[111.44,50.43],[109.62,48.279],[107.8,46.336],[105.97,44.599],[104.13,43.066],[102.28,41.735],[100.41,40.607],[98.53,39.679],[96.64,38.921],[62.44,25.951],[39.529,17.616],[14.573,8.865],[-20.24,-2.776],[-51.411,-12.636],[-82.837,-22.038],[-118.55,-32.063],[-150.589,-40.459],[-182.946,-48.363],[-219.789,-56.658],[-252.91,-63.473],[-286.42,-69.747],[-324.652,-76.141],[-359.098,-81.204],[-394.011,-85.658],[-433.928,-89.913],[-469.973,-92.988],[-506.579,-95.36],[-548.52,-97.149],[-586.486,-97.912],[-625.121,-97.848],[-669.488,-96.73],[-709.753,-94.746],[-750.817,-91.769],[-798.085,-87.149],[-841.102,-81.834],[-885.077,-75.301],[-935.823,-66.379],[-959.5,-61.554]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[189.59,539.5],[149.85,273.152],[133.63,198.596],[122.14,158.942],[114.59,138.829],[108.93,126.696],[105.14,119.92],[101.32,114.15],[99.4,111.632],[97.46,109.354],[95.52,107.313],[93.56,105.506],[91.59,103.931],[89.6,102.585],[87.59,101.468],[85.57,100.577],[83.53,99.911],[81.46,99.47],[79.38,99.254],[77.27,99.251],[39.248,100.555],[9.689,102.045],[-19.896,103.958],[-57.997,107.048],[-91.894,110.397],[-125.869,114.327],[-164.224,119.46],[-198.406,124.664],[-232.715,130.492],[-271.516,137.819],[-306.154,145.028],[-340.972,152.919],[-380.416,162.646],[-415.691,172.062],[-451.202,182.236],[-491.499,194.633],[-527.605,206.521],[-564.006,219.263],[-605.383,234.681],[-642.527,249.38],[-680.033,265.058],[-722.739,283.946],[-761.152,301.891],[-800.001,320.975],[-844.309,343.908],[-884.249,365.658],[-924.705,388.752],[-959.5,409.615]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[959.5,476.784],[927.78,455.023],[897.28,434.583],[865.06,413.451],[827.15,389.206],[797.46,370.675],[766.03,351.509],[729,329.521],[699.94,312.718],[669.13,295.331],[632.78,275.395],[604.22,260.169],[573.87,244.415],[538.01,226.368],[509.79,212.601],[479.76,198.367],[444.21,182.083],[408.73,166.444],[393.8,160.051],[392.06,159.551],[390.51,159.492],[389.15,159.875],[387.97,160.701],[386.97,161.974],[386.17,163.697],[385.54,165.875],[385.11,168.516],[384.8,175.215],[385.26,183.868],[387.43,200.731],[395.36,240.358],[426.24,358.133],[481.11,539.5]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[959.5,115.089],[920.77,109.206],[874.41,102.899],[833.89,98.031],[793.96,93.83],[749.67,89.874],[710.9,87.026],[672.62,84.787],[630.08,82.978],[592.77,81.986],[555.87,81.562],[514.79,81.751],[483.18,82.376],[451.84,83.414],[411.89,85.351],[409.71,85.532],[407.66,85.921],[405.74,86.529],[403.96,87.356],[402.3,88.403],[400.77,89.671],[399.37,91.162],[398.1,92.877],[396.95,94.819],[395.94,96.99],[395.04,99.392],[394.28,102.03],[393.14,108.023],[392.51,115.001],[392.56,127.403],[394.53,147.803],[401.91,187.74],[421.37,262.379],[513.62,539.5]],"c":false},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":10,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[-600]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Layer 9","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[307.65,539.5],[274.33,383.882],[207.45,87.148],[195.93,40.482],[190.29,19.001],[186.98,7.051],[184,-3.143],[182.63,-7.611],[181.32,-11.675],[180.09,-15.342],[178.93,-18.62],[177.83,-21.514],[176.8,-24.031],[170.51,-36.154],[164.3,-47.615],[148.25,-76.98],[132.04,-106.23],[117.49,-132.149],[102.79,-157.965],[86.07,-186.924],[71.02,-212.609],[55.8,-238.211],[38.449,-266.945],[22.789,-292.449],[6.918,-317.885],[-11.219,-346.441],[-27.625,-371.798],[-44.291,-397.096],[-63.381,-425.497],[-80.693,-450.716],[-98.324,-475.87],[-118.572,-504.11],[-136.982,-529.16],[-144.762,-539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[327.41,539.5],[307.64,448.811],[244.09,169.839],[226.31,94.506],[215.96,52.107],[210.18,29.179],[206.34,14.42],[204,5.647],[201.82,-2.321],[200.79,-6.013],[199.79,-9.517],[198.83,-12.836],[197.91,-15.973],[197.02,-18.931],[196.16,-21.712],[195.34,-24.32],[194.55,-26.756],[193.79,-29.023],[193.06,-31.122],[192.37,-33.054],[191.7,-34.828],[179.8,-65.964],[170.5,-90.114],[161.15,-114.234],[149.04,-145.217],[138.2,-172.702],[127.27,-200.168],[114.86,-231.074],[103.73,-258.519],[92.49,-285.969],[79.69,-316.887],[68.19,-344.371],[56.55,-371.876],[43.27,-402.883],[31.312,-430.467],[19.188,-458.087],[5.326,-489.24],[-7.192,-516.97],[-17.509,-539.5]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.192138671875,0.654876708984,0.325469970703,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":60,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[-959]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Layer 8","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[224.79,539.5],[206.8,429.156],[147.96,131.121],[135.86,85.684],[129.33,65.28],[125.22,54.193],[121.26,44.977],[119.33,41.043],[117.43,37.544],[115.56,34.472],[113.71,31.822],[111.89,29.586],[110.08,27.762],[97.63,20.741],[85.18,14.397],[52.99,-1.57],[20.508,-17.05],[-8.631,-30.401],[-38.007,-43.346],[-71.398,-57.431],[-101.418,-69.523],[-131.739,-81.187],[-166.268,-93.795],[-197.379,-104.542],[-228.862,-114.825],[-264.786,-125.828],[-297.224,-135.096],[-330.119,-143.848],[-367.73,-153.055],[-401.768,-160.651],[-436.363,-167.657],[-476.004,-174.796],[-511.963,-180.453],[-548.597,-185.414],[-590.673,-190.113],[-628.933,-193.459],[-668.012,-195.967],[-713.009,-197.713],[-754.031,-198.242],[-796.049,-197.735],[-844.561,-195.828],[-888.91,-192.846],[-934.475,-188.554],[-959.5,-185.458]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[185.93,539.5],[150.23,296.918],[134.12,222.551],[122.7,183.515],[115.22,164.032],[109.61,152.484],[105.85,146.153],[102.07,140.872],[100.17,138.614],[98.25,136.608],[96.33,134.849],[94.39,133.336],[92.44,132.066],[90.48,131.037],[88.5,130.248],[86.5,129.697],[84.48,129.384],[82.45,129.307],[80.39,129.467],[78.31,129.853],[40.89,138.191],[11.9,145.144],[-17.038,152.52],[-54.183,162.632],[-87.115,172.214],[-120.013,182.374],[-157.021,194.517],[-189.884,205.945],[-222.758,217.993],[-259.8,232.32],[-292.747,245.744],[-325.75,259.845],[-362.997,276.559],[-396.182,292.176],[-429.468,308.544],[-467.093,327.906],[-500.672,345.971],[-534.398,364.878],[-572.58,387.221],[-606.714,408.055],[-641.045,429.846],[-679.969,455.588],[-714.829,479.596],[-749.937,504.706],[-789.799,534.375],[-796.418,539.5]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[207.95,539.5],[183.73,398.662],[158.65,281.243],[147.82,242.566],[142.06,226.52],[138.46,218.515],[135.04,212.548],[133.39,210.305],[131.77,208.545],[130.19,207.262],[128.63,206.451],[127.11,206.109],[125.62,206.232],[124.15,206.82],[122.7,207.872],[111.29,218.789],[84.51,245.027],[58.1,271.722],[36.121,294.588],[15.75,316.323],[-9.758,344.303],[-31.018,368.289],[-50.752,391.117],[-75.49,420.521],[-96.13,445.751],[-115.323,469.797],[-139.404,500.796],[-159.516,527.418],[-168.421,539.5]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[920.6,539.5],[910.61,531.265],[878.85,505.589],[843.43,477.567],[812.25,453.424],[781.3,429.95],[746.71,404.307],[716.21,382.197],[685.87,360.69],[651.92,337.179],[621.91,316.9],[592.02,297.17],[558.5,275.596],[528.82,256.985],[499.22,238.881],[465.95,219.089],[441.97,205.185],[419.86,192.631],[386.69,174.284],[384.85,173.307],[383.12,172.547],[381.51,172.044],[380.01,171.796],[378.63,171.805],[377.37,172.07],[376.22,172.594],[375.19,173.376],[374.27,174.42],[373.46,175.727],[372.77,177.3],[372.2,179.141],[371.4,183.642],[371.07,189.261],[371.47,199.868],[373.76,218.335],[381.23,256.364],[400.04,330.417],[464.29,539.5]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[959.5,246.224],[938.96,239.169],[899.61,226.239],[855.9,212.561],[817.57,201.164],[779.67,190.452],[737.48,179.185],[700.41,169.863],[663.69,161.167],[622.75,152.108],[586.71,144.694],[550.96,137.864],[511.02,130.859],[480.18,125.905],[449.53,121.377],[410.32,116.168],[408.18,115.955],[406.17,115.963],[404.28,116.202],[402.52,116.672],[400.9,117.375],[399.39,118.31],[398.02,119.48],[396.77,120.886],[395.65,122.53],[394.65,124.415],[393.78,126.542],[393.03,128.916],[391.92,134.415],[391.31,140.944],[391.38,152.754],[393.37,172.517],[400.72,211.829],[420.04,286.282],[502.78,539.5]],"c":false},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[959.5,-145.474],[929.08,-140.04],[881.48,-130.67],[844.76,-122.791],[806.44,-113.948],[761.99,-102.877],[727.64,-93.704],[691.71,-83.521],[649.96,-70.912],[617.64,-60.562],[583.75,-49.146],[544.3,-35.113],[513.71,-23.662],[481.58,-11.087],[444.1,4.303],[407.31,20.198],[392,27.051],[390.22,28.159],[388.64,29.639],[387.25,31.492],[386.05,33.721],[385.04,36.331],[384.23,39.327],[383.6,42.714],[383.17,46.501],[382.88,55.304],[383.38,65.816],[385.65,85.015],[393.83,127.327],[425.62,245.981],[519.87,539.5]],"c":false},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":53,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[2400]}],"ix":3},"m":1,"ix":7,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.985125612745,0.985125612745,0.985125612745,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":29,"ix":1}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":8,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Layer 7","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[708.64,-539.5],[681.45,-513.07],[654.25,-485.57],[628.05,-458.1],[599.73,-427.264],[575.5,-399.884],[552.08,-372.517],[526.69,-341.784],[504.9,-314.484],[483.8,-287.176],[460.85,-256.485],[441.12,-229.203],[421.95,-201.89],[401.07,-171.163],[383.07,-143.826],[365.56,-116.432],[346.43,-85.575],[327.87,-54.658],[320.8,-42.606],[314.08,-29.906],[313.46,-27.315],[313.01,-24.35],[312.71,-21.005],[312.58,-17.275],[312.61,-13.151],[312.8,-8.626],[313.68,1.671],[315.24,13.711],[318.91,35.304],[328.95,82.093],[410.85,378.633],[460.47,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":48,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-985]},{"t":100,"s":[-2425]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":124,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[248]},{"t":100,"s":[1489]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[290.42,539.5],[275.34,461.416],[217.35,181.164],[199.93,105.913],[189.2,63.82],[182.87,41.207],[178.48,26.741],[175.7,18.193],[173.03,10.472],[171.73,6.912],[170.45,3.546],[169.2,0.371],[167.96,-2.616],[166.75,-5.418],[165.56,-8.037],[164.38,-10.477],[163.22,-12.738],[162.08,-14.824],[160.95,-16.735],[159.84,-18.472],[158.74,-20.046],[138.94,-47.474],[123.41,-68.659],[107.75,-89.735],[87.39,-116.684],[69.1,-140.471],[50.59,-164.123],[29.477,-190.592],[10.467,-213.963],[-8.805,-237.206],[-30.838,-263.221],[-50.726,-286.193],[-70.93,-309.033],[-94.085,-334.592],[-115.038,-357.154],[-136.373,-379.571],[-160.885,-404.634],[-183.128,-426.738],[-205.83,-448.668],[-231.985,-473.15],[-255.79,-494.69],[-280.149,-516.02],[-308.001,-539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":22,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-90]},{"t":100,"s":[1710]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":13,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":259,"ix":1}},{"n":"o","nm":"offset","v":{"a":0,"k":0,"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Layer 6","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[585.72,-539.5],[568.27,-516.14],[544.46,-483.01],[524.17,-453.71],[504.64,-424.504],[483.52,-391.742],[465.47,-362.738],[448.06,-333.809],[429.18,-301.323],[413,-272.532],[397.36,-243.79],[380.35,-211.475],[365.75,-182.801],[351.6,-154.148],[336.19,-121.893],[324.56,-96.815],[313.24,-71.733],[299.09,-39.436],[298.34,-37.599],[297.67,-35.605],[297.08,-33.448],[296.57,-31.125],[296.14,-28.634],[295.8,-25.973],[295.54,-23.141],[295.35,-20.134],[295.26,-16.951],[295.24,-13.587],[295.31,-10.04],[295.45,-6.306],[296,1.739],[296.9,10.582],[298.89,25.434],[302.85,48.46],[311.85,90.953],[330.7,166.312],[411.65,444.872],[439.66,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.905853271484,0.262725830078,0.211761474609,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":10,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[600]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[91.42,-539.5],[96.4,-518.37],[103.37,-488.75],[111.17,-455.593],[118.09,-426.236],[124.98,-396.963],[132.71,-364.17],[139.56,-335.107],[146.4,-306.096],[154.07,-273.561],[160.88,-244.699],[167.69,-215.856],[175.33,-183.469],[182.12,-154.707],[188.92,-125.931],[196.56,-93.573],[204.21,-61.206],[207.19,-48.604],[210.32,-35.366],[210.95,-32.706],[211.67,-29.676],[212.48,-26.269],[213.38,-22.479],[214.37,-18.3],[215.46,-13.722],[217.93,-3.328],[220.82,8.796],[225.99,30.493],[237.18,77.396],[307.89,373.753],[347.46,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.905853271484,0.262725830078,0.211761474609,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":52,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[1354]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[239.64,539.5],[182.48,234.038],[156.32,115.3],[144.98,72.697],[138.9,53.243],[135.1,42.527],[131.46,33.493],[129.7,29.58],[127.97,26.06],[126.28,22.924],[124.61,20.166],[122.97,17.782],[121.35,15.766],[119.76,14.116],[118.18,12.83],[105.68,4.502],[75.8,-14.947],[45.65,-33.97],[19.987,-49.671],[-4.269,-64.103],[-35.31,-81.992],[-61.77,-96.726],[-86.834,-110.247],[-118.961,-126.956],[-146.396,-140.672],[-172.442,-153.225],[-205.885,-168.671],[-234.494,-181.285],[-261.717,-192.777],[-296.741,-206.828],[-326.758,-218.213],[-355.383,-228.506],[-392.294,-240.969],[-423.993,-250.943],[-454.282,-259.844],[-493.445,-270.447],[-527.15,-278.752],[-559.42,-285.995],[-601.269,-294.359],[-637.373,-300.641],[-672.012,-305.858],[-717.071,-311.461],[-756.051,-315.231],[-793.537,-317.915],[-842.452,-320.038],[-890.296,-320.607],[-936.948,-319.73],[-959.5,-318.632]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.905853271484,0.262725830078,0.211761474609,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":10,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[380]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[194.51,539.5],[151.73,281.018],[126.6,162.621],[115,121.157],[108.54,102.699],[104.38,92.778],[100.31,84.645],[98.3,81.224],[96.31,78.222],[94.33,75.633],[92.35,73.45],[90.39,71.669],[88.43,70.286],[86.47,69.299],[84.51,68.706],[68.82,66.108],[31.487,60.419],[-5.993,55.392],[-37.715,51.675],[-67.562,48.631],[-105.557,45.397],[-137.771,43.219],[-168.133,41.643],[-206.838,40.311],[-239.701,39.778],[-270.739,39.781],[-310.361,40.505],[-344.051,41.762],[-375.932,43.496],[-416.696,46.49],[-451.408,49.732],[-484.315,53.397],[-526.47,58.938],[-562.422,64.422],[-596.56,70.278],[-640.386,78.731],[-677.823,86.789],[-713.423,95.174],[-759.237,107.007],[-798.44,118.072],[-835.775,129.422],[-883.934,145.24],[-925.226,159.869],[-959.5,172.817]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.905853271484,0.262725830078,0.211761474609,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":38,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[-1370]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[180.48,539.5],[176.21,508.051],[121.76,207.19],[109.58,163.386],[102.77,144.488],[98.38,134.623],[94.07,126.808],[91.94,123.64],[89.82,120.954],[87.71,118.742],[85.6,116.997],[83.5,115.715],[81.4,114.893],[66.64,115.892],[51.89,117.773],[14.025,123.086],[-23.806,129.102],[-57.433,135.049],[-91.032,141.564],[-128.858,149.594],[-162.538,157.37],[-196.242,165.752],[-234.243,175.932],[-268.138,185.674],[-302.109,196.072],[-340.469,208.59],[-374.741,220.48],[-409.146,233.097],[-448.053,248.199],[-482.871,262.476],[-517.884,277.569],[-557.537,295.572],[-593.081,312.541],[-628.885,330.443],[-669.496,351.749],[-705.956,371.799],[-742.749,392.93],[-784.547,418.053],[-822.131,441.676],[-860.128,466.571],[-903.363,496.161],[-942.3,523.985],[-959.5,536.781]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.905853271484,0.262725830078,0.211761474609,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":168,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[-3000]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[186.23,539.5],[158.6,368.481],[133.88,250.795],[122.65,211.411],[116.45,194.758],[112.5,186.272],[108.65,179.762],[106.76,177.223],[104.89,175.152],[103.04,173.543],[101.2,172.389],[99.38,171.687],[97.57,171.435],[95.76,171.631],[93.97,172.273],[79.65,179.834],[45.88,198.218],[12.416,217.211],[-15.576,233.7],[-41.637,249.556],[-74.431,270.217],[-101.901,288.146],[-127.516,305.388],[-159.785,327.845],[-186.848,347.329],[-212.128,366.076],[-244.009,390.492],[-270.775,411.676],[-295.82,432.076],[-327.442,458.655],[-354.02,481.723],[-378.922,503.955],[-410.408,532.947],[-417.303,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.905853271484,0.262725830078,0.211761474609,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":27,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[1298]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Layer 5","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[478.56,-539.5],[477.04,-536.66],[461.19,-505.83],[444.18,-471.37],[429.72,-440.905],[415.83,-410.562],[400.87,-376.615],[388.13,-346.565],[375.86,-316.603],[362.62,-283.038],[351.31,-253.294],[340.41,-223.599],[328.62,-190.287],[318.53,-160.732],[308.78,-131.189],[298.22,-97.997],[288.06,-64.827],[284.22,-51.919],[280.66,-38.384],[280.44,-35.686],[280.37,-32.619],[280.43,-29.177],[280.63,-25.355],[280.97,-21.145],[281.45,-16.537],[282.84,-6.091],[284.83,6.08],[288.99,27.834],[299.42,74.8],[377.85,371.057],[426.25,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.192138671875,0.654876708984,0.325469970703,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":155,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[-1550]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[270.71,539.5],[243.87,399.255],[180.56,101.961],[168.76,55.653],[162.7,34.497],[159.02,22.811],[155.59,12.919],[153.96,8.615],[152.38,4.726],[150.86,1.244],[149.38,-1.838],[147.95,-4.528],[146.56,-6.829],[137.44,-17.273],[128.36,-27.019],[104.86,-51.878],[81.1,-76.48],[59.73,-98.14],[38.141,-119.579],[13.544,-143.46],[-8.624,-164.486],[-31.066,-185.293],[-56.688,-208.457],[-79.834,-228.842],[-103.318,-249.001],[-130.186,-271.418],[-154.518,-291.123],[-179.262,-310.583],[-207.639,-332.181],[-233.4,-351.125],[-259.666,-369.79],[-289.864,-390.44],[-317.351,-408.486],[-345.453,-426.198],[-377.851,-445.694],[-407.424,-462.63],[-437.752,-479.14],[-472.819,-497.17],[-504.927,-512.67],[-537.966,-527.63],[-566.249,-539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.192138671875,0.654876708984,0.325469970703,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":10,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[1200]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[192,539.5],[165.68,379.339],[140.88,261.747],[129.76,222.619],[123.69,206.185],[119.84,197.873],[116.12,191.559],[114.3,189.127],[112.5,187.169],[110.73,185.677],[108.97,184.648],[107.24,184.076],[105.52,183.96],[103.81,184.297],[102.11,185.088],[88.64,193.865],[56.9,215.101],[25.501,236.899],[-0.719,255.715],[-25.093,273.723],[-55.715,297.068],[-81.321,317.225],[-105.163,336.526],[-135.149,361.551],[-160.253,383.164],[-183.668,403.88],[-213.148,430.748],[-237.855,453.963],[-260.937,476.239],[-290.031,505.153],[-314.439,530.151],[-323.328,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.192138671875,0.654876708984,0.325469970703,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":75,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[-1937]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Layer 4","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[199.27,539.5],[174.09,389.431],[149.16,271.929],[138.19,233.037],[132.26,216.807],[128.53,208.655],[124.95,202.523],[123.21,200.19],[121.5,198.335],[119.81,196.953],[118.15,196.038],[116.52,195.587],[114.9,195.596],[113.31,196.065],[111.73,196.992],[99.23,206.891],[69.83,230.751],[40.79,255.122],[16.582,276.068],[-5.888,296.039],[-34.07,321.827],[-57.598,344.006],[-79.472,365.17],[-106.936,392.512],[-129.891,416.042],[-151.269,438.523],[-178.138,467.586],[-200.619,492.612],[-221.587,516.558],[-241.123,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.164703369141,0.333312988281,0.537231445313,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":10,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[600]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[959.5,-385.67],[916.87,-366.902],[877.22,-348.496],[838.79,-329.789],[797.01,-308.436],[761.03,-289.18],[726.08,-269.663],[687.96,-247.438],[655.07,-227.438],[623.02,-207.199],[587.98,-184.183],[557.67,-163.498],[528.08,-142.582],[495.65,-118.811],[467.53,-97.46],[440.02,-75.879],[409.81,-51.353],[380.31,-26.558],[369.02,-16.834],[358.02,-6.668],[356.81,-4.519],[355.78,-1.977],[354.95,0.964],[354.31,4.309],[353.86,8.065],[353.61,12.24],[353.55,16.844],[354.02,27.381],[355.29,39.781],[358.79,62.162],[369.27,111.06],[452.18,396.208],[499.85,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.164703369141,0.333312988281,0.537231445313,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":10,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[-1500]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Layer 3","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[190.63,-539.5],[190.67,-538.47],[192.18,-503.68],[193.68,-472.97],[195.31,-442.407],[197.3,-408.181],[199.19,-377.928],[201.2,-347.796],[203.58,-314.006],[205.81,-284.101],[208.13,-254.283],[210.86,-220.801],[213.38,-191.127],[215.98,-161.506],[219.02,-128.2],[221.45,-102.331],[223.94,-76.481],[227.23,-43.225],[227.43,-41.336],[227.68,-39.293],[227.97,-37.087],[228.31,-34.717],[228.7,-32.181],[229.13,-29.477],[229.62,-26.603],[230.16,-23.556],[230.74,-20.334],[231.38,-16.933],[232.07,-13.35],[232.81,-9.582],[234.45,-1.474],[236.32,7.427],[239.55,22.354],[244.74,45.461],[254.65,88.033],[272.82,163.412],[342.24,441.65],[366.17,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.976440429688,0.737243652344,0.035278320313,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":4,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":26,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[1800]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[257.49,539.5],[253.39,515.786],[192.79,191.962],[175.86,118.072],[166.63,83.234],[159.77,60.457],[154.86,45.999],[151.68,37.514],[148.56,29.901],[145.49,23.127],[143.97,20.044],[142.46,17.16],[140.96,14.471],[139.46,11.975],[137.98,9.67],[136.49,7.553],[135.01,5.623],[133.54,3.877],[132.06,2.316],[130.59,0.937],[129.11,-0.322],[102.45,-22.734],[83.04,-38.698],[63.48,-54.487],[36.105,-76.067],[11.52,-94.947],[-13.345,-113.556],[-41.696,-134.178],[-67.217,-152.2],[-93.078,-169.937],[-122.63,-189.562],[-149.294,-206.68],[-176.366,-223.488],[-207.374,-242.034],[-235.419,-258.16],[-263.956,-273.936],[-296.719,-291.265],[-326.43,-306.257],[-356.73,-320.84],[-391.607,-336.743],[-423.324,-350.389],[-455.749,-363.538],[-493.173,-377.708],[-527.313,-389.698],[-562.308,-401.065],[-602.816,-413.057],[-639.894,-422.944],[-678.013,-432.028],[-722.28,-441.204],[-762.948,-448.346],[-804.898,-454.423],[-853.789,-459.864],[-898.888,-463.33],[-945.584,-465.35],[-959.5,-465.44]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.976440429688,0.737243652344,0.035278320313,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":73,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[1300]}],"ix":7}}],"nm":"Stroke 2","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Layer 12","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[860.07,-539.5],[837.91,-524.22],[799.27,-496.38],[766.3,-471.58],[734.5,-446.7],[700.03,-418.634],[670.53,-393.648],[642,-368.604],[610.98,-340.35],[584.35,-315.199],[558.54,-289.991],[530.39,-261.543],[506.17,-236.211],[482.64,-210.814],[456.92,-182.138],[434.72,-156.586],[413.12,-130.956],[389.45,-101.995],[371.51,-79.399],[353.96,-56.734],[331.93,-27.452],[330.74,-25.778],[329.65,-23.943],[328.66,-21.938],[327.77,-19.762],[326.98,-17.413],[326.28,-14.889],[325.67,-12.189],[325.17,-9.309],[324.76,-6.247],[324.44,-3],[324.22,0.435],[324.1,4.061],[324.15,11.905],[324.6,20.566],[326.03,35.179],[329.42,57.95],[337.98,100.196],[357.1,175.488],[443.1,455.084],[469.93,539.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[380.13,-539.5],[371.34,-512.25],[361.7,-480.95],[352.52,-449.827],[342.7,-414.992],[334.42,-384.219],[326.53,-353.586],[318.08,-319.255],[310.93,-288.887],[304.11,-258.623],[296.81,-224.657],[290.62,-194.568],[284.72,-164.546],[278.39,-130.805],[273.69,-104.609],[269.17,-78.441],[263.62,-44.789],[263.34,-42.879],[263.12,-40.815],[262.96,-38.589],[262.87,-36.199],[262.85,-33.645],[262.89,-30.923],[263,-28.031],[263.17,-24.968],[263.41,-21.73],[263.72,-18.314],[264.09,-14.716],[264.53,-10.934],[265.62,-2.8],[266.99,6.125],[269.6,21.083],[274.17,44.224],[283.62,86.828],[302.15,162.216],[377.48,440.314],[404.37,539.5]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[218.01,539.5],[172.46,302.87],[160.72,258.118],[154.63,239.589],[150.91,230.324],[147.41,223.378],[145.74,220.744],[144.12,218.656],[142.54,217.105],[141.01,216.087],[139.52,215.595],[138.07,215.625],[136.65,216.176],[127.21,226.538],[117.86,237.481],[94.1,265.881],[70.7,294.7],[50.2,320.685],[29.979,346.999],[7.529,377.049],[-12.18,404.18],[-31.642,431.686],[-53.278,463.133],[-72.3,491.565],[-91.106,520.427],[-103.189,539.5]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[246.24,539.5],[217.04,378.482],[200.51,304.788],[190.34,267.841],[184.36,250.47],[180.24,240.88],[177.63,236.031],[175.14,232.374],[173.93,230.983],[172.75,229.879],[171.59,229.059],[170.45,228.522],[169.33,228.264],[168.23,228.285],[167.15,228.583],[166.09,229.156],[165.05,230.006],[164.03,231.131],[163.03,232.531],[162.04,234.195],[144.49,265.503],[131.1,290.044],[117.91,314.783],[101.23,346.898],[86.69,375.713],[72.38,404.824],[56.54,437.962],[42.71,467.739],[29.088,497.859],[13.999,532.203],[10.884,539.5]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[314.26,539.5],[264.75,321.451],[254.58,280.286],[250.17,263.73],[247.86,255.743],[246.01,250.059],[245.25,248.055],[244.61,246.596],[244.07,245.677],[243.64,245.293],[243.32,245.439],[243.1,246.113],[243.08,258.608],[243.27,272.025],[243.85,306.642],[244.57,341.483],[245.34,372.663],[246.23,404.021],[247.35,439.568],[248.48,471.437],[249.72,503.538],[251.23,539.5]],"c":false},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[331.32,539.5],[296.82,389.254],[279.43,315.653],[270.47,278.977],[266.1,261.88],[263.59,252.541],[262.25,247.884],[261.17,244.436],[260.73,243.156],[260.34,242.167],[260.03,241.468],[259.77,241.056],[259.57,240.927],[259.44,241.082],[259.36,241.519],[259.34,242.237],[259.38,243.235],[259.49,244.513],[259.65,246.071],[259.86,247.898],[264.09,282.107],[267.45,308.84],[270.87,335.719],[275.36,370.511],[279.43,401.633],[283.6,432.987],[288.39,468.575],[292.73,500.462],[297.17,532.633],[298.13,539.5]],"c":false},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[959.5,392.752],[934.2,378.625],[899.73,359.864],[859.23,338.466],[827.55,322.209],[794.06,305.49],[754.66,286.437],[723.78,271.975],[691.08,257.108],[652.54,240.191],[622.31,227.372],[590.22,214.208],[552.35,199.263],[522.6,187.969],[490.96,176.396],[453.57,163.3],[416.32,150.881],[400.66,145.855],[398.83,145.522],[397.2,145.623],[395.75,146.158],[394.5,147.13],[393.44,148.542],[392.57,150.397],[391.89,152.702],[391.4,155.462],[390.99,162.38],[391.37,171.228],[393.46,188.336],[401.33,228.246],[432.45,346.123],[491.97,539.5]],"c":false},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[959.5,316.651],[919.54,299.061],[881.76,283.034],[844.37,267.728],[802.8,251.369],[766.23,237.556],[729.98,224.396],[689.6,210.371],[654.02,198.572],[618.69,187.373],[579.25,175.493],[544.44,165.554],[509.82,156.178],[471.1,146.302],[432.6,137.126],[417.67,133.741],[403.05,131.066],[401.38,131.593],[399.92,132.592],[398.68,134.067],[397.65,136.021],[396.84,138.46],[396.24,141.392],[395.85,144.825],[395.73,153.235],[397.23,169.911],[402.57,200.476],[422.58,281.815],[501.15,539.5]],"c":false},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[959.5,179.505],[954.03,178.114],[913.23,168.377],[872.99,159.366],[828.39,150.082],[789.29,142.555],[750.65,135.684],[707.75,128.727],[670.07,123.208],[632.76,118.293],[591.26,113.476],[554.75,109.814],[518.54,106.72],[478.18,103.909],[438.19,101.797],[422.72,101.161],[407.67,101.394],[405.99,102.376],[404.52,103.81],[403.27,105.7],[402.24,108.049],[401.42,110.866],[400.82,114.157],[400.28,122.197],[400.62,132.26],[402.88,151.405],[411.64,195.484],[500.75,495.983],[515.65,539.5]],"c":false},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.158180147059,0.158180147059,0.158180147059,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":2,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":27,"ix":1}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":100,"s":[1500]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":10,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":600,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/check_animation.json b/platform_tools/android/apps/skottie/src/main/res/raw/check_animation.json new file mode 100644 index 0000000000000..0fd5ac79efb24 --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/check_animation.json @@ -0,0 +1 @@ +{"v":"5.1.1","fr":25,"ip":0,"op":42,"w":150,"h":150,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"ring 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.039392706927,0.874678308824,0.78400998583,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval 2","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.438],"y":[0]},"n":["0_1_0p438_0"],"t":13,"s":[0],"e":[83]},{"t":32}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.438],"y":[0]},"n":["0_1_0p438_0"],"t":13,"s":[-84],"e":[84]},{"t":32}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":125,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"ring 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.661228494083,0.685615808824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval 2","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.396],"y":[1]},"o":{"x":[0.576],"y":[0]},"n":["0p396_1_0p576_0"],"t":8,"s":[0],"e":[83]},{"t":25}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.396],"y":[1]},"o":{"x":[0.576],"y":[0]},"n":["0p396_1_0p576_0"],"t":8,"s":[-84],"e":[84]},{"t":25}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":125,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"ring","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.827881936466,0.874894684436,0.901531862745,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval 2","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.396],"y":[1]},"o":{"x":[0.576],"y":[0]},"n":["0p396_1_0p576_0"],"t":0,"s":[0],"e":[83]},{"t":20}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.396],"y":[1]},"o":{"x":[0.576],"y":[0]},"n":["0p396_1_0p576_0"],"t":0,"s":[-84],"e":[84]},{"t":20}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":125,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"check 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[49.5,27.86,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,41.96],[22.41,64.35],[83.63,0]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.039392706927,0.874678308824,0.78400998583,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.257],"y":[0]},"n":["0_1_0p257_0"],"t":20,"s":[0],"e":[100]},{"t":37}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":125,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"check 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[49.5,27.86,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,41.96],[22.41,64.35],[83.63,0]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.661228494083,0.685615808824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.257],"y":[0]},"n":["0_1_0p257_0"],"t":16,"s":[0],"e":[100]},{"t":34}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":125,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"check","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[49.5,27.86,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[0,41.96],[22.41,64.35],[83.63,0]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.827881936466,0.874894684436,0.901531862745,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9,"ix":5},"lc":2,"lj":2,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[0.257],"y":[0]},"n":["0_1_0p257_0"],"t":12,"s":[0],"e":[100]},{"t":29}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":125,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"boom","sr":1,"ks":{"o":{"a":0,"k":10,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[75,75,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0,0,0.18],"y":[1,1,1]},"o":{"x":[0,0,0.33],"y":[0,0,0]},"n":["0_1_0_0","0_1_0_0","0p18_1_0p33_0"],"t":10,"s":[0,0,100],"e":[100,100,100]},{"t":42}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[150,150],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.625844080308,0.946859681373,0.912195961148,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval 2 Copy","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":125,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/confetti.json b/platform_tools/android/apps/skottie/src/main/res/raw/confetti.json new file mode 100644 index 0000000000000..495035cb42b94 --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/confetti.json @@ -0,0 +1 @@ +{"v":"4.12.0","fr":29.9700012207031,"ip":0,"op":59.0000024031193,"w":800,"h":800,"nm":"confettis2","ddd":0,"assets":[{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"p20","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":4,"s":[100],"e":[0]},{"t":43.0000017514259}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":4,"s":[400,400,0],"e":[71,152,0],"to":[1.83333337306976,-220.66667175293,0],"ti":[85.1666641235352,-23.3333339691162,0]},{"t":43.0000017514259}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.901960790157,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":364.000014826024,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"p19","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":3,"s":[100],"e":[0]},{"t":42.0000017106951}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":3,"s":[400,400,0],"e":[579,746,0],"to":[101.833335876465,91.3333358764648,0],"ti":[27.1666660308838,-153.33332824707,0]},{"t":42.0000017106951}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":3.00000012219251,"op":363.000014785293,"st":3.00000012219251,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"p18","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":2,"s":[100],"e":[0]},{"t":41.0000016699642}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":2,"s":[400,400,0],"e":[503,238,0],"to":[-84.1666641235352,-74.6666641235352,0],"ti":[-88.8333358764648,-45.3333320617676,0]},{"t":41.0000016699642}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.074509806931,0.737254917622,0.172549024224,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2.00000008146167,"op":362.000014744562,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"p17","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":1,"s":[100],"e":[0]},{"t":40.0000016292334}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":1,"s":[400,400,0],"e":[91,556,0],"to":[-82.1666641235352,-112.666664123535,0],"ti":[73.1666641235352,-199.33332824707,0]},{"t":40.0000016292334}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1.00000004073083,"op":361.000014703831,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"p16","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":0,"s":[100],"e":[0]},{"t":39.0000015885026}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":0,"s":[400,400,0],"e":[511,308,0],"to":[77.8333358764648,91.3333358764648,0],"ti":[51.1666679382324,60.6666679382324,0]},{"t":39.0000015885026}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270588248968,0.529411792755,0.952941179276,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360.000014663101,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"p15","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":1,"s":[100],"e":[0]},{"t":40.0000016292334}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":1,"s":[400,400,0],"e":[155,280,0],"to":[-30.1666660308838,-122.666664123535,0],"ti":[95.1666641235352,-53.3333320617676,0]},{"t":40.0000016292334}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.901960790157,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1.00000004073083,"op":361.000014703831,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"p14","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":2,"s":[100],"e":[0]},{"t":41.0000016699642}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":2,"s":[400,400,0],"e":[681,388.872,0],"to":[143.83332824707,49.3333320617676,0],"ti":[-58.8333320617676,48.6666679382324,0]},{"t":41.0000016699642}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2.00000008146167,"op":362.000014744562,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"p13","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":3,"s":[100],"e":[0]},{"t":42.0000017106951}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":3,"s":[400,400,0],"e":[257,284,0],"to":[-24.1666660308838,-72.6666641235352,0],"ti":[75.1666641235352,-5.33333349227905,0]},{"t":42.0000017106951}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.074509806931,0.737254917622,0.172549024224,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":3.00000012219251,"op":363.000014785293,"st":3.00000012219251,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"p12","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":4,"s":[100],"e":[0]},{"t":43.0000017514259}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":4,"s":[400,400,0],"e":[301,474,0],"to":[-14.1666669845581,31.3333339691162,0],"ti":[65.1666641235352,-13.3333330154419,0]},{"t":43.0000017514259}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":364.000014826024,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"p11","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":0,"s":[100],"e":[0]},{"t":39.0000015885026}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":0,"s":[400,400,0],"e":[499,570,0],"to":[-8.16666698455811,63.3333320617676,0],"ti":[-62.8333320617676,-29.3333339691162,0]},{"t":39.0000015885026}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270588248968,0.529411792755,0.952941179276,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360.000014663101,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"p10","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":1,"s":[100],"e":[0]},{"t":40.0000016292334}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":1,"s":[400,400,0],"e":[557,68,0],"to":[81.8333358764648,-104.666664123535,0],"ti":[-58.8333320617676,104.666664123535,0]},{"t":40.0000016292334}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.901960790157,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1.00000004073083,"op":361.000014703831,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"p9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":2,"s":[100],"e":[0]},{"t":41.0000016699642}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":2,"s":[400,400,0],"e":[715,138,0],"to":[151.83332824707,-46.6666679382324,0],"ti":[-26.8333339691162,72.6666641235352,0]},{"t":41.0000016699642}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2.00000008146167,"op":362.000014744562,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"p8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":3,"s":[100],"e":[0]},{"t":42.0000017106951}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":3,"s":[400,400,0],"e":[679,664,0],"to":[107.833335876465,89.3333358764648,0],"ti":[-92.8333358764648,-103.333335876465,0]},{"t":42.0000017106951}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.074509806931,0.737254917622,0.172549024224,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":3.00000012219251,"op":363.000014785293,"st":3.00000012219251,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"p7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":4,"s":[100],"e":[0]},{"t":43.0000017514259}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":4,"s":[400,400,0],"e":[97,686,0],"to":[-36.1666679382324,53.3333320617676,0],"ti":[75.1666641235352,-39.3333320617676,0]},{"t":43.0000017514259}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":4.00000016292334,"op":364.000014826024,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"p6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":5,"s":[100],"e":[0]},{"t":44.0000017921567}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":5,"s":[400,400,0],"e":[65,340,0],"to":[-148.16667175293,-132.66667175293,0],"ti":[61.1666679382324,-65.3333358764648,0]},{"t":44.0000017921567}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.270588248968,0.529411792755,0.952941179276,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":5.00000020365417,"op":365.000014866755,"st":5.00000020365417,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"p5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":6,"s":[100],"e":[0]},{"t":45.0000018328876}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.004,"y":0.691},"o":{"x":0.014,"y":0},"n":"0p004_0p691_0p014_0","t":6,"s":[400,400,0],"e":[400,23.613,0],"to":[-55.3803939819336,-168.204071044922,0],"ti":[27.0301876068115,124.269813537598,0]},{"t":45.0000018328876}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.901960790157,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":6.00000024438501,"op":366.000014907486,"st":6.00000024438501,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"p4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":7,"s":[100],"e":[0]},{"t":46.0000018736184}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":7,"s":[400,400,0],"e":[303,660,0],"to":[109.833335876465,69.3333358764648,0],"ti":[97.1666641235352,0.66666668653488,0]},{"t":46.0000018736184}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":7.00000028511585,"op":367.000014948216,"st":7.00000028511585,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"p3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":8,"s":[100],"e":[0]},{"t":47.0000019143492}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":8,"s":[400,400,0],"e":[663,498,0],"to":[41.8333320617676,109.333335876465,0],"ti":[-71.8333358764648,39.6666679382324,0]},{"t":47.0000019143492}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.076272718608,0.735462605953,0.171031266451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8.00000032584668,"op":368.000014988947,"st":8.00000032584668,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"p2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":9,"s":[100],"e":[0]},{"t":48.0000019550801}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":9,"s":[400,400,0],"e":[187,88,0],"to":[-0.16666667163372,-158.66667175293,0],"ti":[89.1666641235352,6.66666650772095,0]},{"t":48.0000019550801}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.271778345108,0.528400123119,0.952267169952,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":9.00000036657752,"op":369.000015029678,"st":9.00000036657752,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"p1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[1],"y":[1]},"o":{"x":[0.01],"y":[0]},"n":["1_1_0p01_0"],"t":0,"s":[100],"e":[0]},{"t":39.0000015885026}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.01,"y":0},"n":"0_1_0p01_0","t":0,"s":[400,400,0],"e":[621,234,0],"to":[-0.16666667163372,-158.66667175293,0],"ti":[-92.8333358764648,-103.333335876465,0]},{"t":39.0000015885026}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.855,0],[0,-7.855],[-7.855,0],[0,7.855]],"o":[[-7.855,0],[0,7.855],[7.855,0],[0,-7.855]],"v":[[0,-14.223],[-14.223,0],[0,14.223],[14.223,0]],"c":true},"ix":2},"nm":"Tracé 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.903676450253,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fond 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[80,80],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformer "}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":360.000014663101,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":42,"ix":10},"p":{"a":0,"k":[396,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[91.5,91.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":9.00000036657752,"op":369.000015029678,"st":9.00000036657752,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":267,"ix":10},"p":{"a":0,"k":[416,420,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":7.00000028511585,"op":367.000014948216,"st":7.00000028511585,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":358,"ix":10},"p":{"a":0,"k":[436,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":5.00000020365417,"op":365.000014866755,"st":5.00000020365417,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":177,"ix":10},"p":{"a":0,"k":[416,380,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":3.00000012219251,"op":363.000014785293,"st":3.00000012219251,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":132,"ix":10},"p":{"a":0,"k":[416,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[91.5,91.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":1.00000004073083,"op":361.000014703831,"st":1.00000004073083,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-90,"ix":10},"p":{"a":0,"k":[396,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[91.5,91.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":8.00000032584668,"op":368.000014988947,"st":8.00000032584668,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":135,"ix":10},"p":{"a":0,"k":[416,420,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":6.00000024438501,"op":366.000014907486,"st":6.00000024438501,"bm":0},{"ddd":0,"ind":8,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":226,"ix":10},"p":{"a":0,"k":[436,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":4.00000016292334,"op":364.000014826024,"st":4.00000016292334,"bm":0},{"ddd":0,"ind":9,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":45,"ix":10},"p":{"a":0,"k":[416,380,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[64.5,64.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":2.00000008146167,"op":362.000014744562,"st":2.00000008146167,"bm":0},{"ddd":0,"ind":10,"ty":0,"nm":"confettis1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[416,400,0],"ix":2},"a":{"a":0,"k":[400,400,0],"ix":1},"s":{"a":0,"k":[91.5,91.5,100],"ix":6}},"ao":0,"w":800,"h":800,"ip":0,"op":360.000014663101,"st":0,"bm":0}]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/gears.json b/platform_tools/android/apps/skottie/src/main/res/raw/gears.json new file mode 100644 index 0000000000000..13b2a0ee1f9fb --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/gears.json @@ -0,0 +1 @@ +{"v":"4.5.7","fr":30,"ip":0,"op":52,"w":128,"h":128,"ddd":0,"assets":[],"layers":[{"ddd":0,"ind":0,"ty":3,"nm":"Null 5","ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[0],"e":[90]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":25,"s":[90],"e":[0]},{"t":52}]},"p":{"a":0,"k":[64,64,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"ip":0,"op":53,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"gear3","parent":0,"ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[360],"e":[0]},{"t":52}]},"p":{"s":true,"x":{"a":0,"k":19.125},"y":{"a":0,"k":22.125}},"a":{"a":0,"k":[28,30,0]},"s":{"a":0,"k":[75,75,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.627,0.306],[0,0],[0,0],[0,0],[1.704,-0.597],[0,0],[0,0],[0,0],[1.186,-1.384],[0,0],[0,0],[0,0],[0.33,-1.753],[0,0],[0,0],[0,0],[-0.6,-1.701],[0,0],[0,0],[0,0],[-1.387,-1.186],[0,0],[0,0],[0,0],[-0.127,-0.045],[-1.627,-0.306],[0,0],[0,0],[0,0],[-1.703,0.598],[0,0],[0,0],[0,0],[-1.185,1.383],[0,0],[0,0],[0,0],[-0.329,1.754],[0,0],[0,0],[0,0],[0.6,1.703],[0,0],[0,0],[0,0],[1.386,1.188],[0,0],[0,0],[0,0],[0.126,0.045]],"o":[[-1.591,-0.564],[0,0],[0,0],[0,0],[-1.779,0.307],[0,0],[0,0],[0,0],[-1.371,1.14],[0,0],[0,0],[0,0],[-0.63,1.709],[0,0],[0,0],[0,0],[0.31,1.777],[0,0],[0,0],[0,0],[1.145,1.369],[0,0],[0,0],[0,0],[0.127,0.047],[1.59,0.564],[0,0],[0,0],[0,0],[1.779,-0.308],[0,0],[0,0],[0,0],[1.371,-1.142],[0,0],[0,0],[0,0],[0.631,-1.708],[0,0],[0,0],[0,0],[-0.311,-1.78],[0,0],[0,0],[0,0],[-1.145,-1.371],[0,0],[0,0],[0,0],[-0.125,-0.047],[-0.126,-0.044]],"v":[[105.253,4.747],[100.419,3.445],[97.651,8.16],[91.588,8.111],[88.885,3.362],[83.651,4.72],[83.618,10.179],[78.347,13.166],[73.623,10.395],[69.778,14.184],[72.485,18.94],[69.421,24.162],[63.947,24.118],[62.513,29.322],[67.238,32.093],[67.2,38.151],[62.449,40.843],[63.816,46.073],[69.283,46.117],[72.28,51.386],[69.513,56.102],[73.312,59.946],[78.07,57.251],[83.302,60.32],[83.266,65.787],[83.646,65.925],[88.479,67.227],[91.245,62.513],[97.309,62.56],[100.012,67.31],[105.245,65.951],[105.279,60.493],[110.55,57.506],[115.275,60.278],[119.119,56.488],[116.412,51.731],[119.477,46.511],[124.95,46.553],[126.383,41.349],[121.659,38.579],[121.697,32.52],[126.449,29.83],[125.08,24.598],[119.616,24.555],[116.618,19.286],[119.384,14.571],[115.584,10.724],[110.827,13.421],[105.596,10.352],[105.63,4.884],[105.253,4.747]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.941,0],[0,-9.941],[9.941,0],[0,9.941]],"o":[[9.941,0],[0,9.941],[-9.941,0],[0,-9.941]],"v":[[94.463,17.334],[112.463,35.334],[94.463,53.334],[76.463,35.334]],"c":true}},"nm":"Path 2","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.25,0.37,0.44,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-66.463,-5.334],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path","np":4,"mn":"ADBE Vector Group"}],"ip":0,"op":53,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"gear2","parent":0,"ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[-360],"e":[0]},{"t":52}]},"p":{"s":true,"x":{"a":0,"k":-22.5},"y":{"a":0,"k":-2.25}},"a":{"a":0,"k":[-36,-4,0]},"s":{"a":0,"k":[75,75,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[1.982,-0.286],[0,0],[0,0],[0,0],[1.588,-1.254],[0,0],[0,0],[0,0],[0.734,-1.84],[0,0],[0,0],[0,0],[-0.285,-1.981],[0,0],[0,0],[0,0],[-1.254,-1.589],[0,0],[0,0],[0,0],[-1.839,-0.735],[0,0],[0,0],[0,0],[-1.982,0.287],[0,0],[0,0],[0,0],[-1.587,1.254],[0,0],[0,0],[0,0],[-0.734,1.838],[0,0],[0,0],[0,0],[0.287,1.982],[0,0],[0,0],[0,0],[1.255,1.588],[0,0],[0,0],[0,0],[1.838,0.734]],"o":[[0,0],[0,0],[0,0],[-2.001,-0.045],[0,0],[0,0],[0,0],[-1.737,0.951],[0,0],[0,0],[0,0],[-1.052,1.727],[0,0],[0,0],[0,0],[-0.046,2.003],[0,0],[0,0],[0,0],[0.951,1.736],[0,0],[0,0],[0,0],[1.727,1.054],[0,0],[0,0],[0,0],[2.003,0.044],[0,0],[0,0],[0,0],[1.736,-0.95],[0,0],[0,0],[0,0],[1.053,-1.726],[0,0],[0,0],[0,0],[0.044,-2.001],[0,0],[0,0],[0,0],[-0.952,-1.738],[0,0],[0,0],[0,0],[-1.727,-1.053],[-1.838,-0.734]],"v":[[43.8,-32.098],[39.776,-27.554],[33.19,-28.898],[31.27,-34.644],[25.285,-34.281],[24.075,-28.343],[17.7,-26.211],[13.157,-30.235],[8.16,-26.928],[10.083,-21.173],[5.628,-16.139],[-0.317,-17.35],[-2.993,-11.989],[1.549,-7.964],[0.207,-1.377],[-5.538,0.543],[-5.176,6.53],[0.762,7.74],[2.891,14.117],[-1.132,18.662],[2.175,23.66],[7.929,21.736],[12.96,26.192],[11.749,32.139],[17.11,34.817],[21.132,30.273],[27.718,31.613],[29.637,37.362],[35.623,36.999],[36.833,31.06],[43.207,28.929],[47.752,32.952],[52.748,29.646],[50.825,23.89],[55.281,18.856],[61.225,20.068],[63.902,14.708],[59.359,10.683],[60.701,4.096],[66.448,2.174],[66.084,-3.812],[60.147,-5.023],[58.017,-11.399],[62.04,-15.943],[58.733,-20.942],[52.979,-19.019],[47.948,-23.475],[49.159,-29.421],[43.8,-32.098]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-11.046,0],[0,-11.046],[11.046,0],[0,11.046]],"o":[[11.046,0],[0,11.046],[-11.046,0],[0,-11.046]],"v":[[30.463,-18.666],[50.463,1.334],[30.463,21.334],[10.463,1.334]],"c":true}},"nm":"Path 2","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.89,0.34,0.3,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-66.463,-5.334],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path","np":4,"mn":"ADBE Vector Group"}],"ip":0,"op":53,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"gear1","parent":0,"ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[360],"e":[0]},{"t":52}]},"p":{"s":true,"x":{"a":0,"k":17.063},"y":{"a":0,"k":-23.437}},"a":{"a":0,"k":[24,-34,0]},"s":{"a":0,"k":[75,75,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.357,0.446],[0,0],[0,0],[0,0],[1.525,-0.316],[0,0],[0,0],[0,0],[1.17,-1.05],[0,0],[0,0],[0,0],[0.479,-1.462],[0,0],[0,0],[0,0],[-0.322,-1.524],[0,0],[0,0],[0,0],[-1.053,-1.172],[0,0],[0,0],[0,0],[-0.103,-0.053],[-1.358,-0.446],[0,0],[0,0],[0,0],[-1.524,0.318],[0,0],[0,0],[0,0],[-1.169,1.05],[0,0],[0,0],[0,0],[-0.478,1.463],[0,0],[0,0],[0,0],[0.322,1.525],[0,0],[0,0],[0,0],[1.053,1.174],[0,0],[0,0],[0,0],[0.102,0.053]],"o":[[-1.298,-0.664],[0,0],[0,0],[0,0],[-1.557,0.062],[0,0],[0,0],[0,0],[-1.301,0.82],[0,0],[0,0],[0,0],[-0.731,1.392],[0,0],[0,0],[0,0],[0.065,1.557],[0,0],[0,0],[0,0],[0.826,1.303],[0,0],[0,0],[0,0],[0.103,0.055],[1.297,0.663],[0,0],[0,0],[0,0],[1.556,-0.062],[0,0],[0,0],[0,0],[1.301,-0.821],[0,0],[0,0],[0,0],[0.732,-1.391],[0,0],[0,0],[0,0],[-0.066,-1.557],[0,0],[0,0],[0,0],[-0.826,-1.304],[0,0],[0,0],[0,0],[-0.102,-0.054],[-0.103,-0.052]],"v":[[103.129,-53.638],[99.14,-55.302],[96.242,-51.581],[91.061,-52.312],[89.282,-56.683],[84.652,-56.115],[84.01,-51.446],[79.164,-49.487],[75.435,-52.395],[71.719,-49.589],[73.501,-45.211],[70.293,-41.09],[65.615,-41.749],[63.803,-37.459],[67.534,-34.55],[66.821,-29.369],[62.454,-27.604],[63.036,-22.972],[67.707,-22.315],[69.68,-17.464],[66.782,-13.743],[69.6,-10.021],[73.973,-11.788],[78.105,-8.567],[77.46,-3.891],[77.769,-3.73],[81.757,-2.067],[84.653,-5.788],[89.836,-5.059],[91.615,-0.687],[96.244,-1.256],[96.887,-5.923],[101.731,-7.882],[105.462,-4.973],[109.177,-7.78],[107.396,-12.158],[110.604,-16.279],[115.282,-15.621],[117.092,-19.912],[113.363,-22.82],[114.076,-28.001],[118.443,-29.765],[117.86,-34.397],[113.19,-35.054],[111.218,-39.904],[114.114,-43.626],[111.296,-47.35],[106.923,-45.582],[102.792,-48.802],[103.436,-53.479],[103.129,-53.638]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-8.837,0],[0,-8.837],[8.836,0],[0,8.837]],"o":[[8.836,0],[0,8.837],[-8.837,0],[0,-8.837]],"v":[[90.463,-44.666],[106.463,-28.666],[90.463,-12.666],[74.463,-28.666]],"c":true}},"nm":"Path 2","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.39,0.5,0.56,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-66.463,-5.334],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path","np":4,"mn":"ADBE Vector Group"}],"ip":0,"op":53,"st":0,"bm":0,"sr":1}]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/hand_sanitizer.json b/platform_tools/android/apps/skottie/src/main/res/raw/hand_sanitizer.json new file mode 100644 index 0000000000000..ef3a758400cef --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/hand_sanitizer.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":90,"w":1000,"h":1000,"nm":"sanitizer","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"cross ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[460,620.5,0],"ix":2},"a":{"a":0,"k":[73.5,73,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[58.5,-15],[15.5,-15],[15.5,-58],[-15.5,-58],[-15.5,-15],[-58.5,-15],[-58.5,16],[-15.5,16],[-15.5,58],[15.5,58],[15.5,16],[58.5,16]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.027000000898,0.030999998953,0.030999998953,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.310000011968,0.486000001197,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[73.5,73],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"liquid","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[459.998,644.725,0],"ix":2},"a":{"a":0,"k":[171.501,230.275,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-22.955,-144.183],[-4.771,0],[0,0],[-0.766,4.81],[-4.908,79.619],[-1.022,75.639],[101,28]],"o":[[1.668,125.993],[0.765,4.81],[0,0],[4.77,0],[10.776,-67.687],[3.582,-58.11],[0,0],[-74.126,-20.55]],"v":[[-156.501,-186.725],[-126.406,206.975],[-116.85,215.275],[116.855,215.275],[126.411,206.974],[149.718,-11.941],[156.502,-186.725],[-22.998,-194.725]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-22.955,-144.183],[-4.771,0],[0,0],[-0.766,4.81],[-4.908,79.619],[-1.022,75.639],[100.305,-30.396]],"o":[[1.668,125.993],[0.765,4.81],[0,0],[4.77,0],[10.776,-67.687],[3.582,-58.11],[0,0],[-66,20]],"v":[[-156.501,-186.725],[-126.406,206.975],[-116.85,215.275],[116.855,215.275],[126.411,206.974],[149.718,-11.941],[156.502,-186.725],[-22.998,-194.725]],"c":true}]},{"t":90,"s":[{"i":[[0,0],[-22.955,-144.183],[-4.771,0],[0,0],[-0.766,4.81],[-4.908,79.619],[-1.022,75.639],[101,28]],"o":[[1.668,125.993],[0.765,4.81],[0,0],[4.77,0],[10.776,-67.687],[3.582,-58.11],[0,0],[-74.126,-20.55]],"v":[[-156.501,-186.725],[-126.406,206.975],[-116.85,215.275],[116.855,215.275],[126.411,206.974],[149.718,-11.941],[156.502,-186.725],[-22.998,-194.725]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.090000002992,0.093999997307,0.097999999102,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[171.501,230.275],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-7.456],[7.456,0],[0,7.456],[-7.456,0]],"o":[[0,7.456],[-7.456,0],[0,-7.456],[7.456,0]],"v":[[13.5,0],[0,13.5],[-13.5,0],[0,-13.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.948999980852,0.902000038297,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[74.003,261.05],"to":[0,-4.333],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[74.003,235.05],"to":[0,0],"ti":[0,-4.333]},{"t":90,"s":[74.003,261.05]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-9.112],[9.112,0],[0,9.112],[-9.112,0]],"o":[[0,9.112],[-9.112,0],[0,-9.112],[9.112,0]],"v":[[16.5,0],[0,16.5],[-16.5,0],[0,-16.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.732999973671,0.948999980852,0.902000038297,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":-21,"s":[247.003,132.05],"to":[0,3.667],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":24,"s":[247.003,154.05],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":69,"s":[247.003,132.05],"to":[0,0],"ti":[0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[247.003,154.05],"to":[0,0],"ti":[0,3.667]},{"t":159,"s":[247.003,132.05]}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[15.967,-1.952],[3.515,-57.002],[10.776,-67.688],[4.771,0],[0,0],[-0.766,4.809],[-4.907,79.619],[-1.023,75.639]],"o":[[-1.047,72.92],[-4.907,79.619],[-0.766,4.809],[0,0],[4.771,0],[10.776,-67.688],[3.583,-58.111],[0,0]],"v":[[7.263,-196.733],[0.539,-26.215],[-22.768,192.7],[-32.324,201],[-7.324,201],[2.232,192.7],[25.539,-26.215],[32.324,-201]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[15.967,-1.952],[3.515,-57.002],[10.776,-67.688],[4.771,0],[0,0],[-0.766,4.809],[-4.907,79.619],[-1.023,75.639]],"o":[[-1.047,72.92],[-4.907,79.619],[-0.766,4.809],[0,0],[4.771,0],[10.776,-67.688],[3.583,-58.111],[0,0]],"v":[[5.263,-208.233],[0.539,-26.215],[-22.768,192.7],[-32.324,201],[-7.324,201],[2.232,192.7],[25.539,-26.215],[32.324,-201]],"c":true}]},{"t":90,"s":[{"i":[[15.967,-1.952],[3.515,-57.002],[10.776,-67.688],[4.771,0],[0,0],[-0.766,4.809],[-4.907,79.619],[-1.023,75.639]],"o":[[-1.047,72.92],[-4.907,79.619],[-0.766,4.809],[0,0],[4.771,0],[10.776,-67.688],[3.583,-58.111],[0,0]],"v":[[7.263,-196.733],[0.539,-26.215],[-22.768,192.7],[-32.324,201],[-7.324,201],[2.232,192.7],[25.539,-26.215],[32.324,-201]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.195999998205,0.808000033509,0.702000038297,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[295.68,244.55],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[-22.955,-144.183],[-4.771,0],[0,0],[-0.766,4.81],[-4.908,79.619],[-1.022,75.639],[101,28]],"o":[[1.668,125.993],[0.765,4.81],[0,0],[4.77,0],[10.776,-67.687],[3.582,-58.11],[0,0],[-74.126,-20.55]],"v":[[-156.501,-193.281],[-126.406,200.419],[-116.85,208.719],[116.855,208.719],[126.411,200.418],[149.718,-18.497],[156.502,-193.281],[-22.998,-201.281]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":45,"s":[{"i":[[0,0],[-22.955,-144.183],[-4.771,0],[0,0],[-0.766,4.81],[-4.908,79.619],[-1.022,75.639],[101.598,-25.747]],"o":[[1.668,125.993],[0.765,4.81],[0,0],[4.77,0],[10.776,-67.687],[3.582,-58.11],[0,0],[-73,18.5]],"v":[[-156.501,-193.281],[-126.406,200.419],[-116.85,208.719],[116.855,208.719],[126.411,200.418],[149.718,-18.497],[156.502,-193.281],[-22.998,-201.281]],"c":true}]},{"t":90,"s":[{"i":[[0,0],[-22.955,-144.183],[-4.771,0],[0,0],[-0.766,4.81],[-4.908,79.619],[-1.022,75.639],[101,28]],"o":[[1.668,125.993],[0.765,4.81],[0,0],[4.77,0],[10.776,-67.687],[3.582,-58.11],[0,0],[-74.126,-20.55]],"v":[[-156.501,-193.281],[-126.406,200.419],[-116.85,208.719],[116.855,208.719],[126.411,200.418],[149.718,-18.497],[156.502,-193.281],[-22.998,-201.281]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.255000005984,0.898000021542,0.804000016755,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[171.501,236.831],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"base ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[460,567.5,0],"ix":2},"a":{"a":0,"k":[205.557,341.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-14.912,0],[0,0],[0,-14.912]],"o":[[0,0],[0,0],[0,-14.912],[0,0],[14.912,0],[0,0]],"v":[[88,46],[-88,46],[-88,-19],[-61,-46],[61,-46],[88,-19]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.090000002992,0.093999997307,0.097999999102,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[209.557,61],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[14.912,0],[0,0],[0,-14.912],[0,0],[0,0],[0,0]],"o":[[0,0],[14.912,0],[0,0],[0,0],[0,0],[0,-14.912]],"v":[[1,-46],[-28,-46],[-1,-19],[-1,46],[28,46],[28,-19]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936999990426,0.709999952129,0.556999954523,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[269.557,61],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[-14.912,0],[0,0],[0,-14.912]],"o":[[0,0],[0,0],[0,-14.912],[0,0],[14.912,0],[0,0]],"v":[[88,46],[-88,46],[-88,-19],[-61,-46],[61,-46],[88,-19]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.870999983245,0.773000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[209.557,61],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[21.021,0],[0,0],[3.381,21.238],[1.488,148.095],[-54.65,0],[0,0],[0.561,-55.936],[23.55,-147.929]],"o":[[0,0],[-21.022,0],[-23.55,-147.929],[-0.562,-55.936],[0,0],[54.649,0],[-1.489,148.095],[-3.381,21.238]],"v":[[116.852,280.5],[-116.853,280.5],[-159.193,243.668],[-189.994,-178.942],[-91.69,-280.5],[91.689,-280.5],[189.995,-178.942],[159.192,243.668]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.090000002992,0.093999997307,0.097999999102,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[205.556,387.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[8.986,-37.304],[3.266,-8.109],[0,0],[21.989,122.771],[-5.043,44.663],[-0.1,0.242],[0,0],[0,0],[5.843,-50.681],[-10.383,-57.97]],"o":[[-2.972,12.34],[0,0],[14.498,-40.457],[-18.264,-101.976],[5.457,-48.332],[0,0],[0,0],[-0.441,1.064],[-9.644,83.652],[18.045,100.752]],"v":[[-8.334,239.348],[-17.958,269.913],[3.497,269.913],[9.217,32.151],[-1.827,-189.133],[13.62,-262.279],[4.373,-266.087],[-4.865,-269.913],[-21.562,-192.607],[-10.471,35.676]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.027000000898,0.030999998953,0.030999998953,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[206.184,348.087],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[54.649,0],[0,0],[0.561,-55.936],[23.549,-147.929],[21.023,0],[0,0],[-3.382,21.238],[-1.489,148.095]],"o":[[0,0],[54.649,0],[-1.489,148.095],[-3.381,21.238],[0,0],[21.023,0],[23.55,-147.929],[0.561,-55.936]],"v":[[-21.933,-280.5],[-76.933,-280.5],[21.372,-178.942],[-12.622,243.5],[-51.771,280.5],[3.229,280.5],[45.57,243.668],[76.372,-178.942]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936999990426,0.917999985639,0.913999968884,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[319.18,387.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[21.021,0],[0,0],[3.381,21.238],[1.488,148.095],[-54.65,0],[0,0],[0.561,-55.936],[23.55,-147.929]],"o":[[0,0],[-21.022,0],[-23.55,-147.929],[-0.562,-55.936],[0,0],[54.649,0],[-1.489,148.095],[-3.381,21.238]],"v":[[116.852,280.5],[-116.853,280.5],[-159.193,243.668],[-189.994,-178.942],[-91.69,-280.5],[91.689,-280.5],[189.995,-178.942],[159.192,243.668]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[205.556,387.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"top 2","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":6,"s":[89.829,64.621,0],"to":[0,3.333,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":20,"s":[89.829,84.621,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[89.829,64.621,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":44,"s":[89.829,84.621,0],"to":[0,0,0],"ti":[0,3.333,0]},{"t":54,"s":[89.829,64.621,0]}],"ix":2},"a":{"a":0,"k":[89.829,64.621,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[21.889,0],[0,0],[0,0],[0,0],[-11.446,-43.024]],"o":[[-5.629,-21.154],[0,0],[0,0],[0,0],[44.519,0],[0,0]],"v":[[122.512,42.964],[75.775,7.036],[-170.829,7.036],[-170.829,-42.964],[75.775,-42.964],[170.83,30.109]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.090000002992,0.093999997307,0.097999999102,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[185.829,57.964],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.305,-47.24],[0,0],[44.52,0],[0,0]],"o":[[0,0],[-11.446,-43.024],[0,0],[49.203,0]],"v":[[39.668,40.051],[66.086,33.022],[-28.969,-40.051],[-66.086,-40.051]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.866999966491,0.513999968884,0.654999976065,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[290.573,55.051],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[21.889,0],[0,0],[0,0],[0,0],[-11.446,-43.024]],"o":[[-5.629,-21.154],[0,0],[0,0],[0,0],[44.519,0],[0,0]],"v":[[122.512,42.964],[75.775,7.036],[-170.829,7.036],[-170.829,-42.964],[75.775,-42.964],[170.83,30.109]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.948999980852,0.626999978458,0.745000023935,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[185.829,57.964],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":-4,"op":129,"st":9,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"drop ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"t":22,"s":[692.5,205.551,0],"to":[67.667,92.333,0],"ti":[0.333,-102.333,0]},{"t":77,"s":[750.5,699.551,0]}],"ix":2},"a":{"a":0,"k":[59.016,19.365,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[1,1,-8.394]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,16.667]},"t":22,"s":[0,0,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,7.273]},"t":53,"s":[100,100,100]},{"t":77,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.183,-2.059]],"o":[[0,0],[-1.76,1.76],[0,0]],"v":[[5.836,-6.508],[-1.423,0.751],[-5.836,6.508]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.987999949736,0.987999949736,0.987999949736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[44.994,50.906],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-0.453,-2.344]],"o":[[-0.16,2.375],[0,0]],"v":[[-0.14,-3.556],[0.3,3.556]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.987999949736,0.987999949736,0.987999949736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[35.719,72.799],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[15.66,15.661],[0,0],[0,0],[-15.66,-15.661],[-15.661,15.661]],"o":[[0,0],[0,0],[-15.66,15.661],[15.661,15.661],[15.66,-15.661]],"v":[[28.357,-22.009],[0.001,-50.365],[-28.356,-22.009],[-28.356,34.703],[28.357,34.703]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.090000002992,0.093999997307,0.097999999102,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[59.016,65.365],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[15.66,15.661],[0,0],[0,0],[0,0],[15.66,-15.661],[13.759,4.261],[-1.289,-1.289],[-15.661,15.661]],"o":[[0,0],[0,0],[0,0],[15.66,15.661],[-10.894,10.893],[1.077,1.41],[15.661,15.661],[15.66,-15.661]],"v":[[22.296,-22.009],[-6.06,-50.365],[-9.06,-47.365],[2.296,-36.009],[2.296,20.703],[-37.956,30.643],[-34.417,34.703],[22.296,34.703]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.404000016755,0.859000052658,0.741000007181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[65.077,65.365],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[15.66,15.661],[0,0],[0,0],[-15.66,-15.661],[-15.661,15.661]],"o":[[0,0],[0,0],[-15.66,15.661],[15.661,15.661],[15.66,-15.661]],"v":[[28.357,-22.009],[0.001,-50.365],[-28.356,-22.009],[-28.356,34.703],[28.357,34.703]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.6,0.929000016755,0.851000019148,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[59.016,65.365],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":-17,"op":119,"st":-17,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"top ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[456.829,239.621,0],"to":[0,3.5,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":14,"s":[456.829,260.621,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":25,"s":[456.829,239.621,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":39,"s":[456.829,260.621,0],"to":[0,0,0],"ti":[0,3.5,0]},{"t":50,"s":[456.829,239.621,0]}],"ix":2},"a":{"a":0,"k":[89.829,145.621,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.5,-15],[-60.5,-15],[-60.5,15],[60.5,15]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.090000002992,0.093999997307,0.097999999102,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[98.5,106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.5,15],[-60.5,15],[-60.5,-15],[60.5,-15]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.027000000898,0.030999998953,0.030999998953,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[98.5,106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-13,15],[13,15],[13,-15],[-13,-15]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936999990426,0.709999952129,0.556999954523,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[146,106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[60.5,15],[-60.5,15],[-60.5,-15],[60.5,-15]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.870999983245,0.773000021542,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.5,106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[24.5,41],[-24.5,41],[-24.5,-41],[24.5,-41]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.090000002992,0.093999997307,0.097999999102,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[98.5,106],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"shadow ","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[467,894,0],"ix":2},"a":{"a":0,"k":[286.25,28.25,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-15.464],[157.953,0],[0,15.464],[-157.954,0]],"o":[[0,15.464],[-157.954,0],[0,-15.464],[157.953,0]],"v":[[286,0],[0,28],[-286,0],[0,-28]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.936999990426,0.917999985639,0.913999968884,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[286.25,28.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/heart_preloader.json b/platform_tools/android/apps/skottie/src/main/res/raw/heart_preloader.json new file mode 100644 index 0000000000000..005043ce5df68 --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/heart_preloader.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":30,"w":300,"h":300,"nm":"All Preloaders","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[52.5,52.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"f","pt":{"a":0,"k":{"i":[[-0.29,-1.59],[0,0],[0.05,-0.31],[2.46,-4.273],[2.662,-2.965],[3.911,-3.417],[3.76,-2.82],[5.1,-3.65],[0.348,0.308],[4.37,3.33],[4.44,3.78],[4.382,5.881],[1.126,5.435],[0.23,1.22],[0,0],[-0.06,0.26],[-0.63,2],[-6.073,3.37],[-6.437,-1.191],[-4.197,-4.783],[-0.147,-0.317],[-0.85,0.79],[-10.845,-9.997],[-1.314,-5.331]],"o":[[0,0],[-0.07,0.3],[-0.629,4.89],[-2.075,3.401],[-3.414,3.914],[-3.59,3.12],[-5,3.76],[-0.348,0.308],[-4.49,-3.16],[-4.6,-3.51],[-5.586,-4.752],[-3.326,-4.444],[-0.35,-1.28],[0,0],[0.06,-0.26],[0.44,-2],[2.11,-6.618],[5.653,-3.301],[6.278,1.037],[0.206,0.282],[1.09,-1.09],[10.777,-10.07],[4.064,3.691],[0.44,1.53]],"v":[[50.5,-15.281],[50.5,-10.811],[50.3,-9.891],[45.62,3.989],[38.5,13.559],[27.5,24.569],[16.5,33.569],[1.2,44.509],[-0.02,44.509],[-13.49,34.999],[-26.93,23.999],[-41.93,7.999],[-48.69,-7.001],[-49.5,-10.671],[-49.5,-15.281],[-49.33,-16.051],[-47.98,-22.051],[-35.24,-37.601],[-16.5,-40.871],[-0.3,-31.871],[0.23,-30.971],[2.98,-33.691],[41.32,-33.821],[49.57,-19.981]],"c":true},"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[126.336,126.336],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":20,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"gf","o":{"a":0,"k":100,"ix":10},"r":1,"bm":0,"g":{"p":2,"k":{"a":0,"k":[0,1,0,0.2235294117647059,1,1,0.6980392156862745,0.5333333333333333],"ix":9}},"s":{"a":0,"k":[0,0],"ix":5},"e":{"a":0,"k":[100,0],"ix":6},"t":2,"h":{"a":0,"k":0,"ix":7},"a":{"a":0,"k":0,"ix":8},"nm":"Gradient Fill 1","mn":"ADBE Vector Graphic - G-Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.207,-0.145],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.088,83.088],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"5_white","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[52.5,52.5,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":0,"s":[80,84.211,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":5,"s":[90,94.737,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":9,"s":[100,105.263,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":13,"s":[125,131.579,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[130,136.842,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":17,"s":[125,131.579,100]},{"t":29,"s":[80,84.211,100]}],"ix":6}},"ao":0,"w":105,"h":105,"ip":0,"op":30,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/i_was_scared_after_that_brouhaha.json b/platform_tools/android/apps/skottie/src/main/res/raw/i_was_scared_after_that_brouhaha.json new file mode 100644 index 0000000000000..5254f04560245 --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/i_was_scared_after_that_brouhaha.json @@ -0,0 +1 @@ +{"v":"5.5.10","fr":30,"ip":0,"op":330,"w":1622,"h":1500,"nm":"Comp 2","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Smoke Explosion 13 *","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,540,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":20,"nm":"Tint","np":6,"mn":"ADBE Tint","ix":1,"en":1,"ef":[{"ty":2,"nm":"Map Black To","mn":"ADBE Tint-0001","ix":1,"v":{"a":0,"k":[0.65559399128,0.914108097553,0.960784316063,1],"ix":1}},{"ty":2,"nm":"Map White To","mn":"ADBE Tint-0002","ix":2,"v":{"a":0,"k":[0.445351779461,0.591628134251,0.772549033165,1],"ix":2}},{"ty":0,"nm":"Amount to Tint","mn":"ADBE Tint-0003","ix":3,"v":{"a":0,"k":100,"ix":3}},{"ty":6,"nm":"","mn":"ADBE Tint-0004","ix":4,"v":0}]}],"w":1920,"h":1080,"ip":0,"op":36,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 5","parent":3,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[15.25,3.125],[1.875,-11.375],[-19.125,-1.875],[2.75,13.625]],"o":[[-15.25,-3.125],[-1.875,11.375],[19.125,1.875],[-2.75,-13.625]],"v":[[-60,45.25],[-96,60.75],[-69.75,86.125],[-34.5,64.375]],"c":true}]},{"t":22.8,"s":[{"i":[[0.259,0.053],[0.032,-0.194],[-0.325,-0.032],[0.047,0.232]],"o":[[-0.259,-0.053],[-0.032,0.194],[0.325,0.032],[-0.047,-0.232]],"v":[[-72.856,38.975],[-73.468,39.239],[-73.021,39.671],[-72.422,39.301]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[20,2.125],[1.995,-23.575],[-19,-1.375],[-2.875,13.125]],"o":[[-17.268,-1.835],[-1.375,16.25],[16.309,1.18],[4.039,-18.439]],"v":[[-68.25,58.375],[-107.5,84.75],[-73,113.125],[-39,93.25]],"c":true}]},{"t":22.8,"s":[{"i":[[5.164,0.549],[0.515,-6.088],[-4.906,-0.355],[-0.742,3.389]],"o":[[-4.459,-0.474],[-0.355,4.196],[4.211,0.305],[1.043,-4.761]],"v":[[-87.096,59.814],[-97.231,66.624],[-88.322,73.951],[-79.543,68.819]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[29.464,10.75],[3.625,-9.875],[-16.75,-1.625]],"o":[[-9.25,-3.375],[-3.35,9.127],[16.75,1.625]],"v":[[-44.25,95.625],[-62.375,102.125],[-52.625,127.5]],"c":true}]},{"t":22.8,"s":[{"i":[[-0.1,-0.036],[-0.012,0.033],[0.057,0.006]],"o":[[0.031,0.011],[0.011,-0.031],[-0.057,-0.006]],"v":[[-59.448,92.864],[-59.387,92.842],[-59.42,92.756]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[13.25,-6.5],[-13.125,-10.875],[-7.875,6],[11,10]],"o":[[-13.25,6.5],[13.125,10.875],[7.875,-6],[-11,-10]],"v":[[-49.25,70.25],[-45,99.625],[-12.875,107.25],[-11.5,77.75]],"c":true}]},{"t":22.8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-28,71.375],[-28,71.375],[-28,71.375],[-28,71.375]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":14.4,"s":[0,0],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[13.885,-24.874],[0,0],[-12.347,-30.664],[0,0],[-33.322,2.688],[0,0],[-12.45,20.769],[18.845,12.947],[16.246,4.089],[9.747,8.859]],"o":[[0,0],[-15.596,27.939],[0,0],[13.144,32.644],[0,0],[33.791,-2.726],[0,0],[14.296,-23.85],[-14.846,-10.2],[-16.246,-4.089],[-9.747,-8.859]],"v":[[-82.764,43.446],[-102.904,54.623],[-102.406,105.876],[-91.455,158.346],[-56.268,203.338],[1.921,238.812],[37.412,204.559],[51.704,171.072],[42.007,72.889],[6.621,47.667],[-37.623,41.813]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0,0],[13.885,-24.874],[0,0],[-12.347,-30.664],[0,0],[-33.322,2.688],[0,0],[-12.45,20.769],[18.845,12.947],[16.246,4.089],[9.747,8.859]],"o":[[0,0],[-15.596,27.939],[0,0],[13.144,32.644],[0,0],[33.791,-2.726],[0,0],[14.296,-23.85],[-14.846,-10.2],[-16.246,-4.089],[-9.747,-8.859]],"v":[[-82.764,43.446],[-102.904,54.623],[-95.906,117.876],[-91.455,158.346],[-56.268,203.338],[1.921,238.812],[37.412,204.559],[51.704,171.072],[62.007,46.389],[16.121,27.167],[-37.623,41.813]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[0,0],[12.284,-21.563],[0,0],[-10.923,-26.582],[0,0],[-29.481,2.33],[0,0],[-11.014,18.004],[16.673,11.224],[14.373,3.544],[8.624,7.679]],"o":[[0,0],[-13.798,24.219],[0,0],[11.629,28.298],[0,0],[29.896,-2.363],[0,0],[12.648,-20.675],[-13.135,-8.842],[-14.373,-3.544],[-8.624,-7.679]],"v":[[-83.882,53.223],[-109.202,61.811],[-103.203,106.188],[-102.727,145.673],[-65.634,173.669],[-19.54,207.906],[10.706,178.03],[30.852,153.036],[28.003,56.194],[-12.939,48.834],[-48.561,50.156]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[10.684,-18.251],[0,0],[-9.5,-22.5],[0,0],[-25.639,1.972],[0,0],[-9.579,15.239],[14.5,9.5],[12.5,3],[7.5,6.5]],"o":[[0,0],[-12,20.5],[0,0],[10.113,23.952],[0,0],[26,-2],[0,0],[11,-17.5],[-11.423,-7.484],[-12.5,-3],[-7.5,-6.5]],"v":[[-85,63],[-115.5,69],[-110.5,94.5],[-114,133],[-75,144],[-41,177],[-16,151.5],[10,135],[1,78],[-42,70.5],[-59.5,58.5]],"c":true}]},{"t":15.6,"s":[{"i":[[0,0],[6.655,-11.369],[0,0],[-5.918,-14.015],[0,0],[-15.97,1.229],[0,0],[-5.648,2.587],[4.089,8.725],[-0.143,0.15],[27.711,1.138]],"o":[[0,0],[-7.475,12.769],[0,0],[6.3,14.92],[0,0],[16.195,-1.246],[0,0],[10.168,-4.657],[-7.503,-16.013],[-0.697,-0.404],[-18.357,-0.754]],"v":[[-94.027,54.057],[-109.525,57.294],[-104.411,74.678],[-107.091,95.16],[-66.798,114.011],[-47.62,127.567],[-30.51,113.909],[-15.895,109.302],[-7.089,85.198],[-33.382,61.075],[-66.643,44.254]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 47","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[28.75,8],[16.25,-8.75],[-2.75,-8],[-5.25,-0.5],[-1.75,-0.25],[0,-3],[-10,-3.5],[-9.5,6.5],[-2.25,7]],"o":[[-28.75,-8],[-16.25,8.75],[2.75,8],[5.25,0.5],[1.75,0.25],[0,3],[10,3.5],[9.5,-6.5],[2.25,-7]],"v":[[12.75,-120],[-44.25,-119],[-63.5,-92.75],[-51.25,-74.75],[-39.75,-64.5],[-34.25,-56.25],[-23.25,-37.75],[12.75,-36.5],[21.5,-73.75]],"c":true}]},{"t":16.8,"s":[{"i":[[24.081,6.701],[13.611,-7.329],[-2.303,-6.701],[-4.397,-0.419],[0.754,-1.274],[-5.267,-2.985],[-5.376,-3.816],[-7.957,5.444],[-1.885,5.863]],"o":[[-24.081,-6.701],[-13.611,7.329],[2.303,6.701],[4.397,0.419],[-4.946,8.355],[5.197,2.945],[8.734,6.2],[7.957,-5.444],[1.885,-5.863]],"v":[[12.919,-127.591],[-34.823,-126.753],[-50.947,-104.767],[-38.436,-98.19],[-30.804,-90.605],[-26.447,-71.445],[-17.234,-61.7],[12.919,-57.653],[15.998,-80.603]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":18,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 46","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[11.25,-4.854],[2.477,-7.135],[-10.114,-4.481],[-2.834,9.871]],"o":[[-9.526,4.11],[-6,17.28],[36.375,16.115],[8.25,-28.736]],"v":[[95.375,23.621],[73.25,37.212],[84.125,71.385],[117.5,39.736]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[10.962,-4.648],[2.414,-6.832],[-9.854,-4.29],[-2.761,9.452]],"o":[[-9.281,3.935],[-5.846,16.546],[35.442,15.431],[8.038,-27.515]],"v":[[77.654,21.834],[56.096,34.848],[60.692,68.819],[99.212,37.265]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[7.5,-3.125],[1.652,-4.594],[-6.742,-2.885],[-1.889,6.355]],"o":[[-6.35,2.646],[-4,11.125],[24.25,10.375],[5.5,-18.5]],"v":[[73.5,28.125],[58.75,36.875],[66,58.875],[88.25,38.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[14.994,4.785],[4.466,-3.137],[-12.041,-8.617],[-5.727,4.497]],"o":[[-13.129,-4.361],[-9.943,6.088],[35.992,25.225],[14.354,-9.889]],"v":[[71.287,28.476],[45.219,31.328],[52.997,54.649],[116.395,69.679]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[6.25,2.875],[0.25,-4.875],[-6.375,-3.625],[-0.66,6.597]],"o":[[-6.25,-2.875],[-0.25,4.875],[6.375,3.625],[0.375,-3.75]],"v":[[94.75,16.375],[84.25,17.625],[92.75,24.625],[104.25,22.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[2.691,1.905],[0.547,-2.274],[-2.684,-2.269],[-0.892,3.05]],"o":[[-2.691,-1.905],[-0.547,2.274],[2.684,2.269],[0.507,-1.734]],"v":[[100.077,8.296],[93.463,10.477],[95.952,15.481],[102.477,14.416]],"c":true}]},{"t":21.6,"s":[{"i":[[0.294,0.208],[0.06,-0.249],[-0.293,-0.248],[-0.097,0.333]],"o":[[-0.294,-0.208],[-0.06,0.249],[0.293,0.248],[0.055,-0.189]],"v":[[96.932,8.783],[96.209,9.022],[96.481,9.569],[97.195,9.452]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 45","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[4.182,-5.213],[-7.71,-3.176],[-5.862,5.264],[5.791,4.068]],"o":[[-4.182,5.213],[7.71,3.176],[5.862,-5.264],[-8.445,-5.932]],"v":[[53.187,43.431],[63.934,69.306],[80.601,67.197],[77.299,32.468]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[6.2,0.159],[-1.987,-7.479],[-7.182,-1.372],[0.249,6.563]],"o":[[-6.2,-0.159],[1.987,7.479],[7.182,1.372],[-0.364,-9.571]],"v":[[49.685,35.098],[35.363,54.825],[49.036,69.45],[71.33,46.746]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[6.625,-0.875],[-3.375,-7.625],[-7.875,-0.25],[1.371,6.942]],"o":[[-6.625,0.875],[3.375,7.625],[7.875,0.25],[-2,-10.125]],"v":[[41.5,23.625],[31.375,49.75],[44.875,59.75],[66.5,32.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[6.625,-0.875],[-3.375,-7.625],[-7.875,-0.25],[2.466,6.238]],"o":[[-6.625,0.875],[3.375,7.625],[7.875,0.25],[-2.938,-8.625]],"v":[[49.688,17.813],[40.125,40.438],[54.313,49.25],[73.25,26.188]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[6.625,-0.875],[-3.375,-7.625],[-7.875,-0.25],[5.75,4.125]],"o":[[-6.625,0.875],[3.375,7.625],[7.875,0.25],[-5.75,-4.125]],"v":[[67.25,7.375],[59.375,19.5],[75.625,24.75],[86.5,14.625]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[1.355,0.116],[-0.389,-2.64],[-1.563,-0.551],[0.994,1.663]],"o":[[-1.355,-0.116],[0.389,2.64],[1.563,0.551],[-0.994,-1.663]],"v":[[74.457,2.267],[72.432,5.674],[75.481,8.324],[77.955,3.786]],"c":true}]},{"t":21.6,"s":[{"i":[[0.05,0.004],[-0.014,-0.098],[-0.058,-0.021],[0.037,0.062]],"o":[[-0.05,-0.004],[0.014,0.098],[0.058,0.021],[-0.037,-0.062]],"v":[[73.332,1.004],[73.257,1.131],[73.37,1.229],[73.462,1.06]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 44","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[-0.669,-10.069],[-5.918,4.123],[3.005,3.488],[10.264,-6.647]],"o":[[0.669,10.069],[5.918,-4.123],[-3.005,-3.488],[-10.264,6.647]],"v":[[58.637,33.665],[84.258,37.43],[87.209,19.695],[72.825,14.789]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[1.525,-9.726],[-6.517,2.653],[2.111,3.964],[11.194,-4.122]],"o":[[-1.525,9.726],[6.517,-2.653],[-2.111,-3.964],[-11.194,4.122]],"v":[[66.002,14.321],[89.575,23.402],[96.19,7.159],[83.554,-0.597]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[3.718,-9.382],[-7.115,1.183],[1.217,4.44],[12.123,-1.598]],"o":[[-3.718,9.382],[7.115,-1.183],[-1.217,-4.44],[-12.123,1.598]],"v":[[62.867,-5.024],[84.391,9.374],[94.67,-5.377],[83.784,-15.983]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[5.375,-3.5],[-4.125,-2],[-1,2.75],[6.875,3.625]],"o":[[-5.375,3.5],[4.125,2],[1,-2.75],[-6.875,-3.625]],"v":[[80,-17],[85.875,-1.625],[96.625,-5.5],[94.875,-15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[1.588,-0.657],[-0.988,-0.73],[-0.399,0.675],[1.632,1.293]],"o":[[-1.588,0.657],[0.988,0.73],[0.399,-0.675],[-1.632,-1.293]],"v":[[96.048,-20.046],[96.839,-15.707],[99.861,-16.199],[99.868,-18.787]],"c":true}]},{"t":21.6,"s":[{"i":[[-0.104,0.043],[0.065,0.048],[0.026,-0.044],[-0.107,-0.085]],"o":[[0.104,-0.043],[-0.065,-0.048],[-0.026,0.044],[0.107,0.085]],"v":[[98.106,-21.571],[98.055,-21.855],[97.857,-21.823],[97.857,-21.653]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 43","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[15.766,9.684],[5.376,-13.134],[-2.822,-4.133],[-3.644,4.626]],"o":[[-6.852,-4.209],[-2.053,5.017],[7.323,10.725],[3.644,-4.626]],"v":[[56.587,32.646],[38.877,43.44],[34.867,63.955],[63.46,62.266]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[15.846,8.529],[4.492,-13.051],[-2.97,-3.857],[-3.282,4.694]],"o":[[-6.886,-3.707],[-1.716,4.985],[7.705,10.007],[3.282,-4.694]],"v":[[58.288,25.141],[41.69,36.603],[38.935,56.745],[66.603,53.52]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[18.443,1.497],[-1.152,-14.145],[-4.388,-2.408],[-1.155,5.775]],"o":[[-8.015,-0.651],[0.44,5.403],[11.385,6.247],[1.155,-5.775]],"v":[[55.307,0.503],[44.402,18.145],[50.115,38.253],[74.845,23.803]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[7.893,1.54],[0.598,-6.77],[-5.005,0],[-1.155,5.775]],"o":[[-7.892,-1.54],[-0.477,5.4],[5.005,0],[1.155,-5.775]],"v":[[61.307,-8.747],[51.152,5.645],[61.115,23.253],[72.345,9.552]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[5.125,1],[1,-3.375],[-3.25,0],[-0.75,3.75]],"o":[[-5.125,-1],[-1,3.375],[3.25,0],[0.75,-3.75]],"v":[[71.5,-25.125],[64.5,-20],[71.375,-12.625],[77.125,-17.625]],"c":true}]},{"t":21.6,"s":[{"i":[[0.401,0.078],[0.078,-0.264],[-0.254,0],[-0.059,0.293]],"o":[[-0.401,-0.078],[-0.078,0.264],[0.254,0],[0.059,-0.293]],"v":[[72.001,-23.7],[71.453,-23.299],[71.991,-22.722],[72.441,-23.113]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 42","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[8.624,5.159],[7.546,-7.022],[-7.238,-6.592],[-5.236,8.599]],"o":[[-8.624,-5.159],[-7.546,7.022],[7.238,6.592],[5.236,-8.599]],"v":[[141.626,-7.216],[116.37,-3.203],[118.218,20.158],[140.394,13.995]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[5.564,3.577],[4.869,-4.869],[-4.67,-4.571],[-3.378,5.962]],"o":[[-5.564,-3.577],[-4.869,4.869],[4.67,4.571],[3.378,-5.962]],"v":[[132.487,-5.548],[116.192,-2.766],[117.385,13.429],[131.692,9.157]],"c":true}]},{"t":21.6,"s":[{"i":[[0.338,0.217],[0.296,-0.296],[-0.284,-0.278],[-0.205,0.362]],"o":[[-0.338,-0.217],[-0.296,0.296],[0.284,0.278],[0.205,-0.362]],"v":[[119.662,-3.045],[118.671,-2.875],[118.743,-1.891],[119.613,-2.151]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":21.6,"s":[100,100],"h":1},{"t":22.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 41","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[11.925,-1.331],[-2.462,-6.96],[-5.753,4.043],[2.377,8.172]],"o":[[-11.925,1.331],[2.462,6.96],[5.753,-4.043],[-1.831,-6.293]],"v":[[56.487,13.75],[43.12,35.947],[60.403,41.904],[72.824,23.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[11.364,1.945],[-0.421,-7.081],[-6.388,2.202],[0.02,8.177]],"o":[[-11.364,-1.945],[0.421,7.081],[6.388,-2.202],[-0.015,-6.298]],"v":[[65.2,8.298],[46.95,25.234],[61.322,35.334],[77.706,21.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[10.804,5.222],[1.621,-7.202],[-7.022,0.36],[-2.338,8.183]],"o":[[-10.804,-5.222],[-1.621,7.202],[7.022,-0.36],[1.801,-6.302]],"v":[[67.912,-16.653],[44.78,-4.979],[56.24,9.265],[76.589,0.237]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[10.804,5.222],[1.621,-7.202],[-7.022,0.36],[-2.338,8.183]],"o":[[-10.804,-5.222],[-1.621,7.202],[7.022,-0.36],[1.801,-6.302]],"v":[[76.912,-32.403],[53.78,-20.729],[65.24,-6.485],[85.589,-15.513]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.5,3.625],[1.125,-5],[-4.875,0.25],[-1.623,5.681]],"o":[[-7.5,-3.625],[-1.125,5],[4.875,-0.25],[1.25,-4.375]],"v":[[81.5,-44.75],[65.875,-36.125],[76,-27.625],[85.875,-34.5]],"c":true}]},{"t":21.6,"s":[{"i":[[0.077,0.037],[0.012,-0.052],[-0.05,0.003],[-0.017,0.059]],"o":[[-0.077,-0.037],[-0.012,0.052],[0.05,-0.003],[0.013,-0.045]],"v":[[78.798,-41.071],[78.637,-40.982],[78.741,-40.894],[78.843,-40.965]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 40","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[7.373,-2.253],[-4.506,-14.747],[-13.518,7.373],[10.074,9.354]],"o":[[-15.751,4.813],[4.506,14.747],[13.518,-7.373],[-5.735,-5.325]],"v":[[-159.766,-91.072],[-176.971,-65.47],[-144.405,-56.048],[-134.574,-86.771]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[4.5,-1.375],[-2.75,-9],[-8.25,4.5],[6.148,5.709]],"o":[[-9.613,2.937],[2.75,9],[8.25,-4.5],[-3.5,-3.25]],"v":[[-162.5,-97.25],[-173,-81.625],[-153.125,-75.875],[-147.125,-94.625]],"c":true}]},{"t":27.6,"s":[{"i":[[0.094,-0.029],[-0.057,-0.188],[-0.172,0.094],[0.129,0.119]],"o":[[-0.201,0.061],[0.057,0.188],[0.172,-0.094],[-0.073,-0.068]],"v":[[-162.95,-97.881],[-163.169,-97.554],[-162.754,-97.434],[-162.629,-97.826]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":19.2,"s":[0,0],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":27.6,"s":[100,100],"h":1},{"t":28.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 39","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[5.5,2.625],[1.375,-4.875],[-4.5,-1.625],[-1.25,3.625]],"o":[[-5.5,-2.625],[-1.375,4.875],[4.5,1.625],[1.25,-3.625]],"v":[[-189.75,-64],[-202.125,-58],[-197.5,-46.75],[-186.875,-52.125]],"c":true}]},{"t":30,"s":[{"i":[[0.071,0.034],[0.018,-0.063],[-0.058,-0.021],[-0.016,0.047]],"o":[[-0.071,-0.034],[-0.018,0.063],[0.058,0.021],[0.016,-0.047]],"v":[[-197.446,-68.356],[-197.607,-68.278],[-197.547,-68.132],[-197.409,-68.201]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":25.2,"s":[0,0],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 38","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[3.375,-5.5],[-6.25,1.75],[-4.375,-4.375],[-1.25,-5.375],[5,1.5],[5.875,5.375]],"o":[[0,0],[-3.375,5.5],[6.25,-1.75],[4.375,4.375],[1.25,5.375],[-5,-1.5],[-5.875,-5.375]],"v":[[-135,-30],[-149,-25],[-147.875,-11.25],[-135.875,-7.25],[-130.125,7.75],[-110.75,-6.625],[-129.5,-14.125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[1.867,-4.193],[-5.142,0.853],[-4.718,-3.992],[-2.172,-4.521],[4.692,1.694],[6.235,4.951]],"o":[[0,0],[-1.867,4.193],[5.142,-0.853],[4.718,3.992],[2.172,4.521],[-4.692,-1.694],[-6.235,-4.951]],"v":[[-142.804,-30.786],[-154.105,-27.992],[-150.37,-16.62],[-139.028,-12.226],[-130.98,0.599],[-116.829,-9.377],[-134.801,-17.267]],"c":true}]},{"t":20.4,"s":[{"i":[[0,0],[0.266,-3.111],[-4.397,0.344],[-5.67,-3.355],[-3.529,-3.607],[4.86,1.587],[7.382,4.184]],"o":[[0,0],[-0.266,3.111],[4.397,-0.344],[5.67,3.355],[3.529,3.607],[-4.86,-1.587],[-7.382,-4.184]],"v":[[-148.791,-27.395],[-158.141,-25.93],[-150.84,-16.96],[-138.991,-12.895],[-127.258,-2.546],[-117.768,-9.36],[-136.861,-16.515]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 37","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[9.304,-13.656],[-9.385,-27.75],[-14.205,-14.818],[-33.377,0.192],[-5.897,37.281],[-1.418,5.969],[2.459,23.558],[10.379,13.211],[19.909,9.558]],"o":[[-10.744,15.77],[8.352,24.695],[9.514,9.924],[25.72,-0.148],[1.495,-9.454],[4.101,-17.267],[-1.528,-14.633],[-6.267,-7.978],[-26.451,-12.7]],"v":[[-79.84,-97.594],[-69.034,-31.058],[-56.093,27.42],[-29.575,82.558],[12.594,39.912],[14.309,22.493],[16.819,-24.635],[6.106,-62.988],[-18.376,-125.51]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[8.237,-12.09],[-8.309,-24.567],[-12.576,-13.118],[-29.549,0.17],[-5.22,33.005],[-1.255,5.285],[-8.801,26.444],[9.188,11.696],[17.625,8.462]],"o":[[-9.512,13.962],[7.394,21.863],[8.423,8.786],[22.77,-0.131],[1.324,-8.37],[3.63,-15.286],[4.113,-12.359],[-5.548,-7.063],[-23.418,-11.243]],"v":[[-74.772,-88.035],[-60.39,-29.709],[-48.162,22.641],[-30.272,71.455],[9.06,44.2],[11.579,18.279],[27.801,-22.444],[41.816,-96.898],[-21.573,-121.516]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[7.17,-10.524],[-7.232,-21.385],[-10.947,-11.419],[-25.721,0.148],[-4.544,28.729],[-1.092,4.6],[-1.098,18.219],[15.349,11.406],[15.342,7.366]],"o":[[-8.28,12.153],[6.436,19.031],[7.332,7.648],[19.82,-0.114],[1.152,-7.285],[3.16,-13.306],[0.661,-10.97],[-6.275,-4.663],[-20.384,-9.787]],"v":[[-69.704,-78.476],[-51.745,-28.359],[-40.231,17.862],[-30.969,60.352],[1.527,27.488],[2.849,14.064],[4.783,-22.253],[-1.473,-56.308],[-26.77,-75.522]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[5.827,-8.553],[-5.878,-17.38],[-8.897,-9.28],[-20.904,0.12],[-3.693,23.348],[-0.888,3.739],[1.54,14.754],[6.5,8.274],[12.468,5.986]],"o":[[-6.729,9.877],[5.231,15.466],[5.959,6.215],[16.108,-0.093],[0.937,-5.921],[2.568,-10.814],[-0.957,-9.164],[-3.925,-4.996],[-16.566,-7.954]],"v":[[-55.077,-60.447],[-40.481,-19.716],[-31.123,17.847],[-23.596,52.38],[2.813,25.671],[3.888,14.761],[5.46,-14.754],[-1.25,-38.774],[-20.184,-58.046]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[5.827,-8.553],[-0.519,-7.962],[-8.897,-9.28],[-3.749,1.111],[-2.78,3.721],[-0.627,0.607],[-0.058,4.365],[0.612,3.24],[5.58,1.458]],"o":[[-6.729,9.877],[0.311,4.768],[5.959,6.215],[2.638,-0.782],[0.482,-0.645],[2.754,-2.668],[0.122,-9.213],[-1.18,-6.243],[-6.241,-1.63]],"v":[[-40.577,-47.447],[-43.231,-20.216],[-29.373,5.847],[-5.846,12.63],[-6.437,0.421],[-4.748,-1.445],[1.71,-11.004],[-4,-37.274],[-17.434,-54.046]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[4.991,-1.515],[-0.411,-6.303],[-4.692,-3.685],[-2.794,0.828],[-1.231,1.565],[-0.254,0.312],[0.136,1.965],[0.344,7.256],[6.042,1.708]],"o":[[-8.057,1.344],[0.256,3.923],[2.919,2.345],[1.881,-0.557],[0.245,-0.309],[1.115,-1.37],[-0.934,-13.504],[0.219,-4.744],[-5.958,-2.542]],"v":[[-46.238,-65.768],[-54.026,-51.929],[-46.272,-38.436],[-35.399,-36.218],[-32.98,-40.786],[-32.226,-41.714],[-29.941,-46.496],[-20.344,-65.006],[-29.167,-74.333]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[4.712,0.832],[-0.375,-5.75],[-3.29,-1.82],[-2.476,0.734],[-0.714,0.846],[-0.129,0.213],[-0.094,1.168],[-0.487,2.338],[0.694,1.011]],"o":[[-8.5,-1.5],[0.237,3.641],[1.906,1.054],[1.629,-0.483],[0.167,-0.197],[0.569,-0.937],[0.172,-2.15],[0.279,-1.337],[-0.863,-1.258]],"v":[[-48.125,-71.875],[-57.625,-62.5],[-51.905,-53.197],[-45.25,-52.5],[-41.828,-54.521],[-41.385,-55.137],[-40.492,-58.327],[-40.125,-65.25],[-40.411,-68.761]],"c":true}]},{"t":22.8,"s":[{"i":[[0,-0.004],[0,0.028],[0,0.009],[0,-0.004],[0,-0.003],[0,-0.001],[0,-0.005],[0,-0.011],[0,-0.009]],"o":[[0,0.007],[0,-0.018],[0,-0.005],[0,0.002],[0,0.001],[0,0.004],[0,0.009],[0,0.007],[0,0.012]],"v":[[-75,-89.507],[-75,-89.566],[-75,-89.612],[-75,-89.615],[-75,-89.606],[-75,-89.604],[-75,-89.591],[-75,-89.56],[-75,-89.534]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":21.6,"s":[100,100],"h":1},{"t":22.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 36","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[4.625,3],[4,-9.875],[-6.625,1.25],[0,0],[-3.375,2.125],[-0.875,3.5]],"o":[[-4.625,-3],[-4,9.875],[6.625,-1.25],[0,0],[3.375,-2.125],[0.875,-3.5]],"v":[[-91.625,-55.5],[-109.125,-46.5],[-95.875,-28.375],[-90.125,-35.875],[-92.25,-41],[-85.875,-47.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[2.591,0.582],[1.929,-5.111],[-3.243,-0.244],[0,0],[-0.187,1.61],[0.482,1.618]],"o":[[-2.602,-0.585],[-1.929,5.111],[3.435,0.259],[0,0],[0.241,-2.07],[-0.53,-1.779]],"v":[[-106.002,-58.795],[-113.837,-53.877],[-107.931,-44.884],[-102.929,-46.954],[-101.241,-50.448],[-101.723,-55.301]],"c":true}]},{"t":22.8,"s":[{"i":[[0.001,0],[0.001,-0.002],[-0.001,0],[0,0],[0,0],[0,0]],"o":[[-0.001,0],[-0.001,0.002],[0.001,0],[0,0],[0,-0.001],[0,-0.001]],"v":[[-111.507,-55.129],[-111.509,-55.128],[-111.508,-55.125],[-111.506,-55.126],[-111.506,-55.127],[-111.506,-55.128]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 35","np":1,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[3.421,15.227],[0,0],[25.27,0.115],[5.339,-17.394],[-4.76,-11.221],[-12.139,-2.788],[-5.852,-5.374],[-7.88,-0.64],[0,0],[-2.032,7.09],[2.662,11.178]],"o":[[-10.626,-47.295],[0,0],[-11.524,-0.052],[-2.046,6.666],[3.645,8.593],[12.139,2.788],[6.012,5.521],[7.379,0.6],[0,0],[1.703,-5.943],[-8.02,-33.682]],"v":[[-5.141,-34.789],[-39.763,-61.331],[-74.245,-46.717],[-106.276,-6.294],[-108.055,22.656],[-89.011,46.883],[-72.025,56.406],[-51.879,76.9],[-28.213,81.509],[-1.703,71.443],[-9.376,32.362]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[8.141,15.289],[0,0],[25.27,0.115],[5.339,-17.394],[-4.76,-11.221],[-12.139,-2.788],[-5.852,-5.374],[-7.88,-0.64],[0,0],[-2.032,7.09],[6.626,9.388]],"o":[[-8.35,-15.682],[0,0],[-11.524,-0.052],[-2.046,6.666],[3.645,8.593],[12.139,2.788],[6.012,5.521],[7.379,0.6],[0,0],[1.703,-5.943],[-6.587,-9.333]],"v":[[-54.641,-9.789],[-52.513,-72.331],[-86.995,-57.717],[-119.026,-17.294],[-120.805,11.656],[-101.761,35.883],[-84.775,45.406],[-57.879,60.9],[-40.713,57.759],[-31.703,43.943],[-40.126,20.612]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[12.92,8.411],[0,0],[25.27,0.115],[5.339,-17.394],[-4.76,-11.221],[-12.139,-2.788],[-5.852,-5.374],[-7.416,1.562],[0,0],[-3.22,2.447],[6.626,9.388]],"o":[[-13.025,-8.607],[0,0],[-11.524,-0.052],[-2.046,6.666],[3.645,8.593],[12.139,2.788],[6.012,5.521],[6.894,-1.435],[0,0],[3.055,-1.873],[-6.587,-9.333]],"v":[[-52.891,-8.664],[-69.763,-56.081],[-90.62,-46.092],[-119.026,-17.294],[-120.805,11.656],[-101.761,35.884],[-83.275,42.781],[-55.754,52.025],[-40.588,49.759],[-31.578,39.318],[-33.626,18.862]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[17.7,1.532],[0,0],[25.27,0.115],[5.339,-17.394],[-4.76,-11.221],[-12.139,-2.788],[-5.852,-5.374],[-6.952,3.764],[0,0],[-4.407,-2.197],[6.626,9.388]],"o":[[-17.7,-1.532],[0,0],[-11.524,-0.052],[-2.046,6.666],[3.645,8.593],[12.139,2.788],[6.012,5.521],[6.409,-3.471],[0,0],[4.407,2.197],[-6.587,-9.333]],"v":[[-51.141,-7.539],[-69.013,-10.831],[-94.245,-34.467],[-119.026,-17.294],[-120.805,11.656],[-101.761,35.884],[-81.775,40.156],[-53.629,43.15],[-40.463,41.759],[-31.453,34.693],[-27.126,17.112]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[17.75,0.75],[0,0],[25.25,-1],[4.566,-17.613],[-5.25,-11],[-12.25,-2.25],[-6.084,-5.11],[-6.779,4.067],[0,0],[-4.5,-2],[-4.5,10.5]],"o":[[-17.75,-0.75],[0,0],[-11.515,0.456],[-1.75,6.75],[4.02,8.424],[12.25,2.25],[6.25,5.25],[6.25,-3.75],[0,0],[4.5,2],[4.5,-10.5]],"v":[[-78.75,-26.75],[-96.75,-29.25],[-123,-51.75],[-147,-33.5],[-147.5,-4.5],[-125,11],[-107.25,22.25],[-79,24],[-76.75,14.5],[-78.5,3],[-63.5,-4.75]],"c":true}]},{"t":16.8,"s":[{"i":[[17.75,0.75],[0,0],[11.25,-2.5],[4,-17.75],[-1.25,-9.25],[-12.25,-2.25],[-1.75,7.75],[2.5,7.5],[0,0],[-4.5,-2],[-4.5,10.5]],"o":[[-17.75,-0.75],[0,0],[-11.25,2.5],[-4,17.75],[1.25,9.25],[12.25,2.25],[1.75,-7.75],[-2.5,-7.5],[0,0],[4.5,2],[4.5,-10.5]],"v":[[-92,-46.5],[-114.75,-34.5],[-126.75,-37.75],[-146,-19.25],[-136.5,8],[-123.25,31.25],[-99.75,6.25],[-107.75,-7.5],[-102.5,-20],[-92,-6.5],[-79.5,-17.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":18,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 34","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[38.5,13.75],[11.5,-9.25],[-3.26,-4.968],[0,0],[-11.25,-1.25],[0,0],[-5,17.855]],"o":[[-9.679,-3.457],[-11.5,9.25],[5.25,8],[0,0],[12.485,1.387],[0,0],[1.75,-6.25]],"v":[[1,248.25],[-49,256.75],[-41,283.75],[-34.75,301.5],[-21.75,313.5],[-0.25,302.75],[18,294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[9.75,3.25],[11.5,-9.25],[-5.5,-2.25],[0,0],[-16.737,-3.809],[0,0],[-1.25,18.5]],"o":[[-9.75,-3.25],[-11.5,9.25],[5.5,2.25],[0,0],[36.25,8.25],[0,0],[1.25,-18.5]],"v":[[-7.25,216],[-65.25,217.5],[-76.5,257.75],[-47.5,263.75],[-29.75,288],[8.75,265.75],[18.5,241.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[9.75,3.25],[11.5,-9.25],[-5.5,-2.25],[0,0],[-24.75,-6.5],[0,0],[-1.25,18.5]],"o":[[-9.75,-3.25],[-11.5,9.25],[5.5,2.25],[0,0],[24.75,6.5],[0,0],[1.25,-18.5]],"v":[[2,218.75],[-49.25,230],[-50.5,254.25],[-37.25,255],[-18,287.75],[3.5,267],[21.25,249.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[4.33,1.443],[5.107,-4.108],[-0.927,-2.471],[0,0],[-10.95,-3.042],[0,0],[0.333,9.326]],"o":[[-4.33,-1.443],[-5.107,4.108],[0.666,1.776],[0,0],[7.994,2.221],[0,0],[-0.294,-8.229]],"v":[[-19.382,232.545],[-42.143,237.541],[-45.585,249.31],[-44.363,255.416],[-33.483,264.742],[-15.607,258.525],[-10.833,246.312]],"c":true}]},{"t":16.8,"s":[{"i":[[0.234,0.078],[0.276,-0.222],[-0.05,-0.133],[0,0],[-0.591,-0.164],[0,0],[0.018,0.503]],"o":[[-0.234,-0.078],[-0.276,0.222],[0.036,0.096],[0,0],[0.432,0.12],[0,0],[-0.016,-0.444]],"v":[[-35.113,242.392],[-36.341,242.662],[-36.527,243.297],[-36.461,243.627],[-35.874,244.13],[-34.909,243.795],[-34.651,243.135]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 33","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[2.648,9.28],[17.367,13.177],[18.563,-12.842],[-6.6,-18.99],[-8.941,-2.851],[0,0],[-8.12,3.649]],"o":[[-2.474,-8.671],[-18.723,-14.206],[-9.63,6.662],[6.6,18.99],[18.904,6.028],[0,0],[8.12,-3.649]],"v":[[76.724,247.421],[62.973,212.706],[-2.664,208.9],[-10.484,253.976],[32.096,297.722],[57.439,282.473],[73.351,284.833]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[6.918,6.728],[8.458,2.172],[18.164,-13.4],[-7.931,-12.338],[-9.202,-1.838],[0,0],[-8.12,3.649]],"o":[[-6.918,-6.728],[-8.458,-2.172],[-9.734,7.181],[7.931,12.338],[11.404,2.278],[0,0],[8.12,-3.649]],"v":[[83.474,241.671],[67.723,219.456],[27.086,212.65],[17.016,249.476],[40.096,269.972],[68.439,268.223],[77.601,262.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[9.25,2.75],[8.5,-2],[11.5,-3.75],[-12.75,-7.25],[-6.25,7],[0,0],[-5.5,7]],"o":[[-9.25,-2.75],[-8.5,2],[-11.5,3.75],[12.75,7.25],[6.25,-7],[0,0],[5.5,-7]],"v":[[68,230],[48,236],[10.5,241.75],[12.75,267.75],[49.75,269.25],[57.5,254.75],[72.5,251.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[2.183,0.649],[2.006,-0.472],[2.189,-1.832],[-3.008,-1.711],[-2.056,0.822],[0,0],[0,1.829]],"o":[[-2.183,-0.649],[-2.006,0.472],[-2.89,2.419],[3.008,1.711],[2.949,-1.18],[0,0],[0,-2.101]],"v":[[47.048,249.958],[39.969,249.722],[34.07,252.435],[34.542,263.289],[43.685,263.938],[48.287,260.281],[49.82,255.739]],"c":true}]},{"t":15.6,"s":[{"i":[[0.104,0.031],[0.096,-0.022],[0.104,-0.087],[-0.143,-0.081],[-0.098,0.039],[0,0],[0,0.087]],"o":[[-0.104,-0.031],[-0.096,0.022],[-0.138,0.115],[0.143,0.081],[0.14,-0.056],[0,0],[0,-0.1]],"v":[[40.812,256.784],[40.475,256.772],[40.194,256.902],[40.216,257.419],[40.652,257.449],[40.871,257.275],[40.944,257.059]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":15.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 32","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[13.123,8.883],[0,0],[7.313,-18.285],[0,0],[0.113,-15.007],[-0.585,0.694],[-22.554,-6.704],[-1.21,4.448]],"o":[[-13.123,-8.883],[0,0],[-8.917,22.298],[0,0],[-0.107,14.195],[1.043,-0.867],[64.07,19.044],[1.21,-4.448]],"v":[[-67.443,14.643],[-100.439,21.728],[-144.333,11.952],[-149.934,35.712],[-161.393,56.805],[-149.165,77.306],[-114.946,96.454],[-54.391,51.843]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[13.123,8.883],[0,0],[7.313,-18.285],[0,0],[-7.073,-13.236],[-0.585,0.694],[-22.554,-6.704],[-1.21,4.448]],"o":[[-13.123,-8.883],[0,0],[-8.917,22.298],[0,0],[2.643,4.945],[1.043,-0.867],[64.07,19.044],[1.21,-4.448]],"v":[[-97.943,18.893],[-130.939,25.978],[-183.583,25.452],[-179.684,51.462],[-179.893,69.055],[-170.415,75.056],[-148.196,100.704],[-84.891,56.093]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[13.123,8.883],[0,0],[7.863,-18.055],[0,0],[-1.409,-6.737],[-3.188,-4.884],[-13.504,-3.506],[-1.21,4.448]],"o":[[-13.123,-8.883],[0,0],[-15.917,36.548],[0,0],[0.91,4.352],[4.756,7.287],[64.696,16.796],[1.21,-4.448]],"v":[[-113.443,17.143],[-146.439,24.228],[-196.083,13.452],[-186.184,58.962],[-185.3,70.727],[-179.484,85.029],[-153.196,102.704],[-100.391,54.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[13.123,8.883],[0,0],[7.863,-18.055],[0,0],[-1.202,-4.85],[-3.069,-3.63],[-13.581,-3.195],[-1.21,4.448]],"o":[[-13.123,-8.883],[0,0],[-15.917,36.548],[0,0],[0.776,3.133],[4.579,5.416],[42.696,10.046],[1.21,-4.448]],"v":[[-129.693,33.643],[-152.689,38.478],[-198.333,30.202],[-192.434,73.212],[-191.934,81.598],[-186.518,92.042],[-160.446,105.954],[-120.891,62.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[15.75,1.75],[0,0],[2.75,-19.5],[0,0],[-3.394,-3.251],[-3.82,-1.416],[-9.782,3.857],[1,4.5]],"o":[[-15.75,-1.75],[0,0],[-2.75,19.5],[0,0],[2.193,2.1],[5.7,2.112],[26,-10.25],[-1,-4.5]],"v":[[-168.75,27],[-189.75,47.75],[-211,59.75],[-189.5,81.5],[-184.563,87.862],[-175.585,93.536],[-152.5,92.25],[-140.75,49.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[6.52,0.724],[0,0],[1.138,-8.072],[0,0],[-1.724,-0.708],[-1.784,-0.18],[-4.049,1.596],[0.414,1.863]],"o":[[-6.52,-0.724],[0,0],[-1.138,8.072],[0,0],[1.113,0.458],[2.662,0.269],[10.763,-4.243],[-0.414,-1.863]],"v":[[-173.556,33.917],[-184.215,35.365],[-191.046,47.474],[-183.905,59.996],[-181.284,61.476],[-176.928,62.545],[-166.829,60.927],[-161.965,43.231]],"c":true}]},{"t":21.6,"s":[{"i":[[0.226,0.025],[0,0],[0.039,-0.279],[0,0],[-0.06,-0.025],[-0.062,-0.006],[-0.14,0.055],[0.014,0.064]],"o":[[-0.226,-0.025],[0,0],[-0.039,0.279],[0,0],[0.039,0.016],[0.092,0.009],[0.372,-0.147],[-0.014,-0.064]],"v":[[-175.105,38.441],[-175.474,38.492],[-175.711,38.911],[-175.463,39.344],[-175.373,39.395],[-175.222,39.432],[-174.872,39.376],[-174.704,38.764]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 31","np":1,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-122.685,-199.225],[-124.003,-155.566],[-98.107,-164.75],[-95.191,-188.676]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[18.679,-6.954],[-16.816,-9.385],[0,0],[5.895,7.379]],"o":[[-23.486,8.744],[21.097,11.774],[0,0],[-11.283,-14.123]],"v":[[-104.889,-214.842],[-106.628,-163.774],[-72.489,-174.516],[-68.645,-202.502]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-110.435,-216.475],[-111.753,-172.816],[-85.857,-182],[-82.941,-205.926]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-118.31,-221.788],[-119.628,-178.129],[-93.732,-187.313],[-90.816,-211.238]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-116.935,-223.225],[-118.253,-179.566],[-92.357,-188.75],[-89.441,-212.676]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-116.435,-229.975],[-117.753,-186.316],[-91.857,-195.5],[-88.941,-219.426]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-135.435,-242.475],[-136.753,-198.816],[-110.857,-208],[-107.941,-231.926]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.125,-1.125],[-10.25,0.75],[0,0],[5.25,-0.5]],"o":[[-7.125,1.125],[10.25,-0.75],[0,0],[-5.25,0.5]],"v":[[-132.25,-229.625],[-126,-210.875],[-116,-206.625],[-113.5,-229.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[3.216,-1.943],[-5.495,0.402],[0,0],[3.082,0.737]],"o":[[-3.31,2],[5.495,-0.402],[0,0],[-2.75,-0.658]],"v":[[-129.925,-226.432],[-126.709,-215.777],[-120.209,-219.53],[-121.147,-227.638]],"c":true}]},{"t":25.2,"s":[{"i":[[-0.124,0.075],[0.211,-0.015],[0,0],[-0.119,-0.028]],"o":[[0.127,-0.077],[-0.211,0.015],[0,0],[0.106,0.025]],"v":[[-125.485,-221.7],[-125.609,-222.11],[-125.859,-221.965],[-125.823,-221.653]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 30","np":1,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-62.179,-154.744],[-85.571,-120.577],[-45.885,-115.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-55.429,-191.994],[-78.821,-157.827],[-39.135,-152.833]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-51.179,-198.494],[-74.571,-164.327],[-34.885,-159.333]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-51.179,-210.994],[-74.571,-176.827],[-34.885,-171.833]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-50.679,-225.744],[-74.071,-191.577],[-34.385,-186.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-58.679,-223.994],[-82.071,-189.827],[-42.385,-184.833]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[8.875,1.625],[-6.625,-9.625],[-3.75,5.625]],"o":[[-8.875,-1.625],[6.625,9.625],[3.75,-5.625]],"v":[[-85.625,-241.875],[-96.75,-225.625],[-77.875,-223.25]],"c":true}]},{"t":24,"s":[{"i":[[0.081,0.015],[-0.06,-0.087],[-0.034,0.051]],"o":[[-0.081,-0.015],[0.06,0.087],[0.034,-0.051]],"v":[[-88.722,-229.86],[-88.823,-229.712],[-88.651,-229.691]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 29","np":1,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-12.648,10.807],[36.449,-20.382],[-19.157,2.533]],"o":[[12.648,-10.807],[-36.449,20.382],[19.157,-2.533]],"v":[[-76.983,-142.918],[-116.136,-182.67],[-111.261,-133.171]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[-12.648,10.807],[36.449,-20.382],[-19.157,2.533]],"o":[[12.648,-10.807],[-36.449,20.382],[19.157,-2.533]],"v":[[-65.483,-172.168],[-104.636,-211.92],[-99.761,-162.421]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[-12.648,10.807],[36.449,-20.382],[-19.157,2.533]],"o":[[12.648,-10.807],[-36.449,20.382],[19.157,-2.533]],"v":[[-62.733,-184.168],[-101.886,-223.92],[-97.011,-174.421]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[5.067,13.73],[-5.72,-36.288],[-3.744,16.581]],"o":[[-5.067,-13.73],[5.72,36.288],[3.744,-16.581]],"v":[[-64.817,-219.881],[-109.547,-199.676],[-67.213,-188.624]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[16.637,0],[-40.952,-8.181],[16.21,10.519]],"o":[[-16.637,0],[40.952,8.181],[-16.21,-10.519]],"v":[[-94.422,-231.088],[-90.478,-175.431],[-62.03,-216.231]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[16.637,0],[-40.952,-8.181],[16.21,10.519]],"o":[[-16.637,0],[40.952,8.181],[-16.21,-10.519]],"v":[[-94.922,-231.838],[-90.978,-176.181],[-61.53,-221.731]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[16.637,0],[-40.952,-7.823],[16.21,10.059]],"o":[[-16.637,0],[40.952,7.823],[-16.21,-10.059]],"v":[[-93.047,-238.044],[-89.103,-184.823],[-59.655,-228.379]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[16.637,0],[-40.952,-7.465],[16.21,9.598]],"o":[[-16.637,0],[40.952,7.465],[-16.21,-9.598]],"v":[[-94.672,-234.749],[-90.728,-183.965],[-61.28,-225.527]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[9.75,0],[-24,-4.375],[9.5,5.625]],"o":[[-9.75,0],[24,4.375],[-9.5,-5.625]],"v":[[-113.875,-229.875],[-106.875,-202.75],[-91.375,-226.375]],"c":true}]},{"t":24,"s":[{"i":[[-0.109,0],[0.268,0.049],[-0.106,-0.063]],"o":[[0.109,0],[-0.268,-0.049],[0.106,0.063]],"v":[[-106.291,-215.024],[-106.369,-215.326],[-106.542,-215.063]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 28","np":1,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[11.863,-15.503],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-6.912,12.431],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-5.175,6.762],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[9.255,-16.645],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[24.637,106.503],[3.704,154.848],[15.412,182.422],[15.801,208.033],[77.828,228.683],[106.501,193.96],[115.745,181.145],[96.545,141.407],[107.413,110.213],[79.411,67.505],[52.427,79.066]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[10.877,-12.41],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-7.941,11.568],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-5.861,5.855],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[9.698,-14.729],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[35.512,103.628],[16.954,155.348],[29.537,180.422],[29.051,204.158],[85.453,226.058],[112.751,194.46],[124.87,182.645],[110.545,141.282],[120.413,113.463],[93.211,38.155],[46.027,65.916]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[10.384,-10.863],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-8.456,11.137],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-6.204,5.401],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[9.92,-13.771],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[40.95,102.19],[23.579,155.598],[36.6,179.422],[35.676,202.221],[89.265,224.746],[115.876,194.71],[129.433,183.395],[117.545,141.219],[126.913,115.088],[95.944,45.98],[45.91,58.841]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[9.398,-7.771],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-9.485,10.274],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-6.89,4.493],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[10.364,-11.855],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[51.825,99.315],[36.829,156.098],[50.725,177.422],[48.926,198.346],[96.89,222.121],[122.126,195.21],[138.558,184.895],[131.545,141.094],[139.913,118.338],[101.411,61.63],[72.677,83.691]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[7.919,-3.131],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-11.029,8.981],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-7.919,3.131],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[11.029,-8.981],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[68.137,95.003],[56.704,156.848],[71.912,174.422],[68.801,192.533],[108.328,218.183],[131.501,195.96],[152.245,187.145],[152.545,140.907],[159.413,123.213],[115.411,74.505],[88.427,88.066]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.355,1.147],[6.655,-23.078],[0,0],[1.681,-8.115],[-18.978,-6.434],[0,0],[-11.901,1.289],[0,0],[-7.126,7.517],[11.783,9.248],[0,0]],"o":[[-7.355,-1.147],[-2.547,8.832],[0,0],[-1.593,7.692],[18.978,6.434],[0,0],[11.901,-1.289],[0,0],[14.752,-15.56],[-11.783,-9.248],[0,0]],"v":[[119.713,82.134],[80.095,108.078],[85.763,125.018],[76.819,135.115],[94.153,163.147],[118.145,156.033],[136.65,158.165],[161.247,135.674],[172.998,127.31],[159.499,82.061],[133.198,82.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[4.25,2.75],[5,-3.75],[0,0],[5.25,-1],[-10,-9.25],[0,0],[-7.75,-2.5],[0,0],[-6.25,3.25],[4.75,9],[0,0]],"o":[[-4.25,-2.75],[-5,3.75],[0,0],[-5.25,1],[10,9.25],[0,0],[7.75,2.5],[0,0],[6.25,-3.25],[-4.75,-9],[0,0]],"v":[[134.5,92],[118.5,93],[108.25,112],[101.25,110.25],[95,128.5],[115.75,128.75],[125.25,136.25],[137.25,132.5],[149.25,132.75],[154.75,106.75],[139.25,103]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[1.44,0.162],[2.682,-0.648],[0,0],[0.504,-1.476],[-2.052,-3.132],[0,0],[-2.178,-0.054],[0,0],[-1.8,0.936],[0.942,2.776],[0,0]],"o":[[-1.449,-0.163],[-1.75,0.423],[0,0],[-0.497,1.457],[1.817,2.774],[0,0],[2.345,0.058],[0,0],[1.8,-0.936],[-1.368,-4.032],[0,0]],"v":[[138.44,90.233],[132.59,90.287],[128.359,91.764],[125.911,94.428],[126.667,100.98],[131.366,104.527],[135.308,105.067],[139.286,105.067],[143.409,103.969],[145.713,96.588],[141.825,91.53]],"c":true}]},{"t":26.4,"s":[{"i":[[0.017,0.002],[0.032,-0.008],[0,0],[0.006,-0.018],[-0.024,-0.037],[0,0],[-0.026,-0.001],[0,0],[-0.021,0.011],[0.011,0.033],[0,0]],"o":[[-0.017,-0.002],[-0.021,0.005],[0,0],[-0.006,0.017],[0.022,0.033],[0,0],[0.028,0.001],[0,0],[0.021,-0.011],[-0.016,-0.048],[0,0]],"v":[[141.152,86.653],[141.083,86.654],[141.033,86.672],[141.004,86.703],[141.013,86.781],[141.068,86.823],[141.115,86.829],[141.163,86.829],[141.211,86.816],[141.239,86.729],[141.193,86.669]],"c":true}]}],"ix":2},"nm":"Path 18","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":25.2,"s":[100,100],"h":1},{"t":26.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 27","np":1,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[19.274,-13.467],[9.846,0.791],[0,0],[7.161,-18.803],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-10.549,1.539],[1.35,12.822],[6.125,29.594],[0,0],[5.094,15.237]],"o":[[-7.275,5.083],[-17.592,-1.413],[0,0],[-8.061,21.166],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[13.624,-1.987],[-0.305,-2.901],[-2.75,-13.288],[0,0],[-10.806,-32.324]],"v":[[123.226,80.967],[100.592,81.913],[62.073,83.924],[48.561,97.334],[42.215,144.984],[68.526,179.743],[101.197,189.381],[121.015,176.709],[146.876,185.237],[177.055,158.651],[191.875,121.656],[185.268,109.125],[181.89,91.163]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[21.259,17.3],[6.544,-7.398],[0,0],[0.014,-20.121],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-8.43,6.524],[-1.852,5.072],[4.875,16.844],[0,0],[5.094,15.237]],"o":[[-6.883,-5.602],[-6.544,7.398],[0,0],[-0.014,20.121],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[13.874,-10.737],[1.852,-5.072],[-3.773,-13.035],[0,0],[-10.806,-32.324]],"v":[[115.976,62.467],[96.092,65.413],[91.823,76.174],[65.561,105.334],[75.215,131.484],[81.276,180.743],[129.697,185.381],[145.515,179.709],[166.126,175.987],[184.805,149.901],[191.375,117.906],[182.268,102.875],[181.14,85.163]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[21.259,17.3],[6.544,-7.398],[0,0],[0.014,-20.12],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-8.43,6.524],[-1.852,5.072],[4.875,16.844],[0,0],[5.094,15.237]],"o":[[-6.883,-5.602],[-6.544,7.398],[0,0],[-0.014,20.121],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[13.874,-10.737],[1.852,-5.072],[-3.773,-13.035],[0,0],[-10.806,-32.324]],"v":[[133.976,54.967],[114.092,57.913],[109.823,68.674],[83.561,97.834],[93.215,123.984],[99.276,173.243],[147.697,177.881],[163.515,172.209],[184.126,168.487],[202.805,142.401],[209.375,110.406],[200.268,95.375],[199.14,77.663]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[3.465,-0.494],[6.544,-7.398],[0,0],[0.014,-20.12],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-9.876,4.013],[-1.852,5.072],[4.875,16.844],[0,0],[5.555,15.075]],"o":[[-8.786,1.253],[-6.544,7.398],[0,0],[-0.014,20.12],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[7.7,-3.129],[1.852,-5.072],[-3.773,-13.035],[0,0],[-12.556,-34.074]],"v":[[153.226,56.467],[132.342,58.163],[122.073,68.924],[95.811,98.084],[105.465,124.234],[120.276,152.743],[166.947,182.381],[192.765,161.959],[206.876,159.487],[216.055,144.151],[223.875,111.406],[212.268,97.875],[209.89,73.413]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[3.465,-0.494],[6.544,-7.398],[0,0],[0.014,-20.12],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-9.876,4.013],[-1.852,5.072],[4.875,16.844],[0,0],[5.555,15.075]],"o":[[-8.786,1.253],[-6.544,7.398],[0,0],[-0.014,20.12],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[7.7,-3.129],[1.852,-5.072],[-3.773,-13.035],[0,0],[-12.556,-34.074]],"v":[[164.976,54.467],[139.342,64.413],[129.073,75.174],[102.811,104.334],[112.465,130.484],[127.276,158.993],[168.447,182.631],[190.515,177.709],[209.626,169.487],[223.055,150.401],[232.875,120.406],[219.268,104.125],[221.14,81.663]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[3.487,0.301],[8.047,-5.728],[0,0],[4.56,-19.597],[0,0],[-11.802,-10.251],[-19.032,-0.823],[0,0],[-12.07,3.919],[-2.95,4.522],[0.213,10.771],[0,0],[2.005,15.94]],"o":[[-8.842,-0.764],[-8.047,5.728],[0,0],[-4.56,19.597],[0,0],[11.802,10.251],[13.948,0.603],[0,0],[7.905,-2.567],[2.95,-4.522],[-0.268,-13.567],[0,0],[-4.532,-36.03]],"v":[[190.353,51.881],[155.416,54.756],[142.981,62.919],[110.81,85.391],[127.156,116.283],[133.593,141.91],[170.176,174.147],[189.647,163.558],[206.819,166.331],[221.217,149.307],[230.295,133.71],[216.571,111.775],[228.282,86.03]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[3.25,0.25],[7.5,-4.75],[0,0],[4.25,-16.25],[0,0],[-11,-8.5],[-17.739,-0.682],[0,0],[-11.25,3.25],[-2.75,3.75],[0.198,8.932],[0,0],[6.419,12.036]],"o":[[-8.241,-0.634],[-7.5,4.75],[0,0],[-4.25,16.25],[0,0],[11,8.5],[13,0.5],[0,0],[7.368,-2.128],[2.75,-3.75],[-0.25,-11.25],[0,0],[-12,-22.5]],"v":[[203.5,38],[173.5,42.25],[157.25,52.75],[137.75,73.25],[142.5,97],[148.5,118.25],[180.5,141.25],[197.25,134.75],[216.75,138.5],[232.5,126.25],[237,110],[230.5,95.75],[240.25,63]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[8.25,-0.5],[7.5,-4.75],[0,0],[4.25,-16.25],[0,0],[-11,-8.5],[-17.75,-0.25],[0,0],[-4.75,12],[-2.75,3.75],[7.75,12.25],[0,0],[12.25,6]],"o":[[-8.25,0.5],[-7.5,4.75],[0,0],[-4.25,16.25],[0,0],[11,8.5],[17.75,0.25],[0,0],[4.75,-12],[2.75,-3.75],[-7.75,-12.25],[0,0],[-12.25,-6]],"v":[[191.25,23.75],[171,31],[161.75,40.25],[142.25,57.75],[147,81.5],[153,102.75],[189.25,122],[207.5,116.75],[223.75,109.25],[239.75,91.5],[242,62.25],[227.75,45.25],[218.5,26.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[11.284,2.252],[9.757,-10.27],[0,0],[3.09,-11.815],[0,0],[-7.998,-6.18],[-12.905,-0.182],[0,0],[-6.761,6.507],[-1.999,2.727],[5.635,8.907],[0,0],[8.907,4.362]],"o":[[-5.893,-1.176],[-4.446,4.679],[0,0],[-3.09,11.815],[0,0],[7.998,6.18],[12.905,0.182],[0,0],[6.404,-6.163],[1.999,-2.727],[-5.635,-8.907],[0,0],[-8.907,-4.362]],"v":[[207.966,12.248],[180.493,22.52],[175.268,39.745],[162.59,53.719],[162.544,69.487],[171.156,84.687],[198.512,93.683],[214.031,89.616],[235.096,82.163],[245.979,69.257],[243.115,49.49],[236.004,42.88],[230.779,23.498]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[6.742,-0.003],[4.063,-6.211],[0,0],[2.051,-7.844],[0,0],[-5.309,-4.103],[-5.899,-0.079],[0,0],[-5.847,2.148],[-1.286,3.761],[0.718,6.365],[0,0],[1.93,2.014]],"o":[[-3.989,0.002],[-4.047,6.187],[0,0],[-2.051,7.844],[0,0],[5.309,4.103],[6.101,0.082],[0,0],[5.939,-2.182],[0.726,-2.124],[-1.634,-14.492],[0,0],[-3.343,-3.489]],"v":[[210.05,5.768],[197.312,13.086],[194.218,22.147],[183.426,31.798],[184.021,43.516],[190.988,53.482],[204.899,58.829],[214.076,55.004],[227.311,54.807],[237.286,46.489],[237.884,32.992],[223.789,16.103],[222.57,10.486]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[2.653,-0.001],[1.998,-2.131],[0,0],[0.807,-3.087],[0,0],[-2.09,-1.615],[-2.286,-0.408],[0,0],[-1.943,1.404],[-0.506,1.48],[0.283,2.505],[0,0],[0.858,0.448]],"o":[[-1.57,0.001],[-2.091,2.229],[0,0],[-0.807,3.087],[0,0],[2.09,1.615],[2.303,0.412],[0,0],[2.018,-1.459],[0.286,-0.836],[-0.643,-5.703],[0,0],[-1.685,-0.881]],"v":[[223.763,11.226],[218.159,13.664],[215.318,16.935],[213.284,21.471],[213.518,26.083],[216.261,30.005],[221.44,32.503],[226.282,32.67],[231.294,31.018],[234.482,27.253],[234.717,21.941],[230.99,14.408],[228.985,12.886]],"c":true}]},{"t":31.2,"s":[{"i":[[0.095,0],[0.071,-0.076],[0,0],[0.029,-0.11],[0,0],[-0.075,-0.058],[-0.082,-0.015],[0,0],[-0.069,0.05],[-0.018,0.053],[0.01,0.09],[0,0],[0.031,0.016]],"o":[[-0.056,0],[-0.075,0.08],[0,0],[-0.029,0.11],[0,0],[0.075,0.058],[0.082,0.015],[0,0],[0.072,-0.052],[0.01,-0.03],[-0.023,-0.204],[0,0],[-0.06,-0.031]],"v":[[230.473,15.1],[230.273,15.187],[230.172,15.304],[230.099,15.466],[230.107,15.631],[230.205,15.771],[230.39,15.86],[230.563,15.866],[230.743,15.807],[230.856,15.673],[230.865,15.483],[230.732,15.214],[230.66,15.159]],"c":true}]}],"ix":2},"nm":"Path 17","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":31.2,"s":[100,100],"h":1},{"t":32.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 26","np":1,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[9.706,-0.302],[7.572,-4.027],[0,0],[2.099,-10.781],[-0.386,-0.577],[-4.912,-8.765],[-20.767,0.646],[-8.719,7.396],[1.859,9.72],[0.568,0.059],[0.875,4.606]],"o":[[-14.792,0.46],[-9.341,4.967],[0,0],[-1.534,7.882],[0.622,1.224],[11.155,19.904],[20.767,-0.646],[2.841,-2.41],[-2.31,-12.078],[-0.051,-1.09],[-2.51,-13.21]],"v":[[108.188,-1.699],[91.449,3.113],[81.558,19.657],[71.169,29.068],[74.327,44.636],[63.459,76.458],[124.855,85.146],[153.966,65.277],[161.891,40.53],[148.57,23.845],[146.286,11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[9.202,-3.102],[6.08,-6.049],[0,0],[-1.116,-10.927],[-0.537,-0.44],[-7.241,-6.965],[-19.689,6.637],[-6.201,9.606],[3.815,6.754],[0.561,-0.109],[2.173,4.155]],"o":[[-14.024,4.728],[-7.5,7.461],[0,0],[0.816,7.988],[0.95,0.991],[16.445,15.817],[19.689,-6.637],[2.021,-3.13],[-2.859,-5.06],[-0.365,-1.028],[-6.231,-11.916]],"v":[[130.092,-6.15],[104.582,7.909],[99.911,26.609],[92.696,38.627],[100.23,52.612],[106.066,67.115],[160.33,76.739],[184.325,49.497],[179.867,19.505],[165.26,11.196],[162.519,-1.192]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[12.111,-3.018],[8.419,-7.118],[0,0],[-0.294,-14.115],[-0.642,-0.62],[-8.553,-9.676],[-25.914,6.457],[-8.943,11.662],[4.186,9.049],[0.73,-0.081],[2.352,5.549]],"o":[[-18.459,4.599],[-10.384,8.78],[0,0],[0.215,10.319],[1.114,1.369],[19.425,21.974],[25.914,-6.457],[2.914,-3.8],[-3.136,-6.78],[-0.36,-1.355],[-6.744,-15.914]],"v":[[133.818,-14.823],[99.674,0.537],[91.745,24.01],[81.251,38.657],[89.45,57.357],[95.42,76.545],[162.677,90.222],[192.858,55.927],[194.92,23.22],[177.071,11.057],[174.847,-5.099]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[12.482,0],[9.89,-4.871],[0,0],[3.128,-13.767],[-0.473,-0.757],[-5.96,-11.457],[-26.707,0],[-11.498,9.154],[1.874,9.793],[0.728,0.098],[0.94,5.953]],"o":[[-19.023,0],[-12.199,6.009],[0,0],[-2.287,10.065],[0.75,1.598],[13.536,26.018],[26.707,0],[3.746,-2.983],[-1.404,-7.337],[-0.022,-1.402],[-2.697,-17.072]],"v":[[175.262,-16.25],[122.892,-13.469],[114.313,5.75],[101.622,20.517],[105.723,39.007],[106.21,60.707],[169.799,85.75],[205.254,58.983],[215.651,33.019],[201.272,16.902],[205.447,2.322]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5.369,0],[2.468,-4.296],[0,0],[1.532,-1.233],[1.154,-2.896],[-1.907,-3.649],[-11,0],[-1.75,6],[-0.312,3.058],[0.345,3.783],[1.572,2.977]],"o":[[-11.706,0],[-1.222,2.126],[0,0],[-1.803,1.451],[-1.06,2.659],[5.75,11],[11,0],[0.393,-1.347],[0.328,-3.214],[-0.34,-3.73],[-2.073,-3.925]],"v":[[187.25,-8],[167.41,2.785],[165.75,6.5],[162.993,8.393],[157.808,14.984],[158.5,24.5],[185,35.5],[199.5,26.75],[200.686,19.85],[200.809,9.016],[198.084,-1.368]],"c":true}]},{"t":25.2,"s":[{"i":[[0.199,0],[0.146,-0.096],[0,0],[0.059,-0.089],[0.046,-0.161],[-0.071,-0.135],[-0.407,0],[-0.108,0.205],[-0.015,0.116],[0.023,0.129],[0.07,0.097]],"o":[[-0.434,0],[-0.072,0.048],[0,0],[-0.07,0.105],[-0.042,0.147],[0.213,0.407],[0.407,0],[0.04,-0.075],[0.016,-0.122],[-0.022,-0.127],[-0.093,-0.128]],"v":[[184.407,4.75],[183.535,4.991],[183.426,5.074],[183.32,5.219],[183.118,5.636],[183.139,6.074],[184.139,6.5],[184.898,5.991],[184.982,5.696],[184.975,5.31],[184.839,4.963]],"c":true}]}],"ix":2},"nm":"Path 16","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 25","np":1,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[5.225,-8.349],[0.531,-0.98],[-2.911,-9.355],[0,0],[-8.23,0.379],[-0.345,-0.074],[-3.874,3.639],[0,0],[-3.181,9.249],[0.186,-0.043],[14.398,3.801]],"o":[[0,0],[-4.735,7.566],[-0.165,0.427],[2.767,8.892],[0,0],[7.723,-0.356],[0.228,0.036],[2.531,-2.378],[0,0],[0.6,-1.745],[-0.163,-0.51],[-16.568,-4.374]],"v":[[64.655,239.313],[49.784,248.609],[49.165,258.388],[52.808,274.484],[62.729,287.059],[75.014,290.121],[87.259,286.141],[95.495,279.047],[99.829,270.892],[100.4,261.245],[103.73,256.427],[92.568,240.874]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0,0],[8.735,-13.554],[0.887,-1.59],[-4.866,-15.185],[0,0],[-13.758,0.616],[-0.577,-0.12],[-6.477,5.907],[0,0],[2.675,15.664],[0.31,-0.07],[22.853,9.586]],"o":[[0,0],[-7.915,12.281],[-0.276,0.693],[4.626,14.435],[0,0],[12.91,-0.578],[0.381,0.059],[4.232,-3.86],[0,0],[-2.048,-11.991],[-0.273,-0.827],[-23.699,-9.94]],"v":[[85.417,222.033],[69.165,231.219],[66.276,250.807],[67.116,277.685],[83.7,298.098],[100.477,300.635],[121.208,282.358],[134.977,278.593],[136.473,268.855],[139.759,253.98],[129.62,241.854],[116.449,220.69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[8.878,-6.797],[-2.65,-14.393],[-0.869,-8.639],[0,0],[-18,0.805],[-0.755,-0.157],[-3.96,7.987],[0,0],[3.5,20.493],[0.406,-0.092],[9.809,5.209]],"o":[[0,0],[-7.018,5.374],[1.314,7.135],[3.055,30.36],[0,0],[16.891,-0.756],[0.498,0.077],[3.329,-6.714],[0,0],[-2.679,-15.688],[-0.357,-1.082],[-18.075,-9.598]],"v":[[94.814,209.264],[68.935,211.991],[56.65,245.143],[69.079,267.073],[92.298,293.589],[113.5,300.195],[134.16,282.404],[147.21,274.013],[152.092,260.079],[156.716,236.538],[136.104,221.594],[123.275,207.702]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[3.321,-0.22],[6.614,-2.847],[3.371,-7.341],[0,0],[-21.848,-2.598],[-0.753,-0.166],[-16.744,6.176],[0,0],[3.233,20.537],[0.407,-0.087],[9.741,5.336]],"o":[[0,0],[-4.648,0.308],[-6.373,2.743],[-12.734,27.729],[0,0],[10.511,1.25],[0.497,0.084],[11.318,-4.175],[0,0],[-2.475,-15.721],[-0.343,-1.087],[-17.949,-9.832]],"v":[[118.966,202.472],[113.501,202.578],[95.285,206.695],[79.484,221.271],[88.219,258.653],[106.739,272.75],[122.753,264.916],[145.744,269.574],[162.601,252.357],[174.017,229.963],[160.093,215.337],[151.449,201.082]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[2.717,0.633],[5.329,-1.087],[2.519,-6.296],[0,0],[-22.5,0],[-3.193,1.023],[-0.922,1.417],[0,0],[-4.75,9],[-0.012,3.376],[3.739,3.809]],"o":[[0,0],[-3.802,-0.886],[-5.135,1.047],[-7,17.5],[0,0],[6.438,0],[3.901,-1.25],[0.961,-1.476],[0,0],[2.322,-4.4],[0.013,-3.529],[-13.5,-13.75]],"v":[[133.5,208.75],[129.022,207.458],[114.22,206.823],[101.75,217],[108.75,243],[131.25,255.5],[145.416,253.761],[152.138,249.388],[153,246.75],[166.75,234],[170.526,222.649],[165.25,212]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[1.524,-0.424],[2.862,-1.943],[1.037,-3.678],[0,0],[-12.587,1.53],[-1.857,0.615],[-1.158,0.68],[0,0],[-2.127,5.326],[0.426,2.456],[2.322,1.912]],"o":[[0,0],[-2.133,0.593],[-2.758,1.872],[-2.883,10.222],[0,0],[2.601,-0.316],[2.269,-0.751],[1.207,-0.708],[0,0],[1.04,-2.604],[-0.446,-2.568],[-8.382,-6.903]],"v":[[144.781,204.174],[142.255,204.754],[134.104,208.407],[127.823,216.596],[130.746,232.153],[146.64,236.419],[153.328,234.944],[158.468,232.656],[160.279,231.432],[165.257,222.263],[166.238,214.562],[162.157,207.716]],"c":true}]},{"t":27.6,"s":[{"i":[[0,0],[0.041,-0.002],[0.076,-0.01],[0.028,-0.019],[0,0],[-0.336,0.008],[-0.05,0.003],[-0.031,0.003],[0,0],[-0.057,0.027],[0.011,0.012],[0.062,0.01]],"o":[[0,0],[-0.057,0.003],[-0.074,0.009],[-0.077,0.052],[0,0],[0.07,-0.002],[0.061,-0.004],[0.032,-0.004],[0,0],[0.028,-0.013],[-0.012,-0.013],[-0.224,-0.035]],"v":[[151.28,218.33],[151.213,218.332],[150.995,218.351],[150.827,218.392],[150.905,218.471],[151.33,218.492],[151.509,218.485],[151.646,218.473],[151.694,218.467],[151.827,218.421],[151.854,218.382],[151.744,218.347]],"c":true}]}],"ix":2},"nm":"Path 15","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 24","np":1,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[16.032,12.345],[14.515,-1.802],[0,0],[9.537,-1.609],[-1.992,-17.513],[4.648,-3.021],[4.263,-2.906],[2.461,-0.737],[-34.887,-7.009],[0.519,-1.425],[-8.737,-5.696],[0,0],[-23.165,0.061],[-0.337,-0.093],[-4.625,-2.057],[-8.254,21.326],[7.551,12.335],[-0.285,-0.204]],"o":[[-6.878,-5.296],[-9.459,1.174],[0,0],[-3.873,0.653],[0.363,3.19],[-8.368,5.439],[-2.244,1.53],[-15.393,4.608],[2.389,0.48],[-0.182,-0.064],[9.051,5.9],[0,0],[9.028,-0.024],[1.278,-1.002],[21.469,9.548],[5.991,-15.478],[-6.293,-10.279],[2.75,-6.406]],"v":[[-14.782,127.905],[-63.265,129.802],[-75.114,137.465],[-92.047,132.278],[-108.258,146.763],[-108.356,153.933],[-119.513,164.406],[-135.988,177.695],[-133.113,230.759],[-132.318,231.064],[-123.513,244.196],[-107.664,246.918],[-86.47,263.034],[-74.913,253.843],[-53.969,268.202],[19.438,242.362],[23.607,188.589],[11.765,163.717]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[13.605,6.742],[5.384,-2.033],[0,0],[10.998,-1.816],[3.752,-13.568],[5.36,-3.409],[1.544,-7.894],[2.839,-0.832],[-20.917,-9.228],[0.793,-1.525],[-11.157,-3.005],[0,0],[-26.716,0.068],[-7.76,1.336],[-5.835,-0.164],[-9.52,24.07],[8.708,13.921],[-0.328,-0.23]],"o":[[-8.932,-4.426],[-10.255,3.873],[0,0],[-4.467,0.738],[-0.967,3.497],[-9.651,6.139],[-0.589,3.01],[-17.753,5.201],[2.562,1.13],[-7.046,13.543],[12.013,3.235],[0,0],[10.412,-0.027],[8.55,-1.472],[12.64,0.356],[6.909,-17.468],[-7.257,-11.601],[3.172,-7.23]],"v":[[-60.855,127.758],[-90.245,123.127],[-105.351,132.341],[-118.248,131.566],[-135.502,147.068],[-146.86,155.159],[-163.475,159.644],[-176.997,165.049],[-178.583,207.728],[-177.954,211.457],[-163.763,241.515],[-142.314,243.741],[-114.412,262.777],[-90.127,252.967],[-76.64,260.144],[-35.23,234.93],[-42.243,179.601],[-50.422,155.48]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[9.896,1.195],[2.959,-4.937],[0,0],[3.998,2.184],[1.057,3.471],[13.86,-2.659],[1.544,-7.894],[2.889,0.633],[-10.167,-8.978],[0.204,-9.207],[-9.914,-5.935],[0,0],[-26.716,0.068],[-7.76,1.336],[-3.22,4.869],[-1.031,9.726],[6.968,14.869],[-0.328,-0.23]],"o":[[-9.896,-1.195],[-2.959,4.937],[0,0],[-3.973,-2.171],[-1.057,-3.471],[-11.233,2.155],[-0.589,3.01],[-10.503,-2.299],[2.099,1.854],[-0.306,13.806],[9.914,5.935],[0,0],[10.412,-0.027],[8.55,-1.472],[6.143,-9.289],[1.98,-18.68],[-6.257,-13.351],[3.172,-7.23]],"v":[[-109.855,129.758],[-131.745,144.377],[-132.351,154.341],[-140.498,154.566],[-147.252,143.068],[-159.11,137.659],[-182.975,155.144],[-192.497,160.299],[-201.083,187.478],[-202.204,203.957],[-180.013,229.765],[-173.064,241.491],[-133.912,254.777],[-109.377,250.217],[-85.89,244.894],[-64.48,219.68],[-80.493,175.601],[-85.922,154.98]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[9.896,1.195],[2.959,-4.937],[0,0],[3.998,2.184],[1.057,3.471],[13.86,-2.659],[1.544,-7.894],[2.889,0.633],[-10.167,-8.978],[0.204,-9.207],[-9.914,-5.935],[0,0],[-26.653,-1.827],[-2.726,5.194],[-2.456,3.714],[-0.27,7.07],[6.968,14.869],[-0.328,-0.23]],"o":[[-9.896,-1.195],[-2.959,4.937],[0,0],[-3.973,-2.171],[-1.057,-3.471],[-11.233,2.155],[-0.589,3.01],[-10.503,-2.299],[2.099,1.854],[-0.306,13.806],[9.914,5.935],[0,0],[15.996,1.096],[1.816,-3.46],[6.143,-9.289],[0.243,-6.376],[-6.257,-13.351],[3.172,-7.23]],"v":[[-111.855,126.008],[-133.745,140.627],[-134.351,150.591],[-142.498,150.816],[-149.252,139.318],[-172.86,138.909],[-189.225,161.894],[-195.497,166.049],[-203.083,189.978],[-198.954,200.707],[-181.013,220.015],[-164.564,221.491],[-121.162,235.027],[-97.493,227.163],[-92.39,215.894],[-81.73,196.93],[-89.993,165.101],[-106.672,151.98]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[8.5,0],[2,-4.75],[0,0],[2,-3.5],[1.25,3],[9.75,0.25],[0.5,-7.25],[1.388,-2.232],[0.742,-2.351],[-0.703,-3.829],[-9,-4.25],[0,0],[-22.75,1.25],[-5.55,3.866],[-1.699,3.598],[2.25,5.25],[0.75,4.25],[6,7.5]],"o":[[-8.5,0],[-2,4.75],[0,0],[-2,3.5],[-1.25,-3],[-9.75,-0.25],[-0.191,2.765],[-1.114,1.792],[-0.757,2.4],[2.25,12.25],[9,4.25],[0,0],[13.654,-0.75],[3.697,-2.575],[4.25,-9],[-2.25,-5.25],[-0.75,-4.25],[-6,-7.5]],"v":[[-127.75,133.5],[-144.25,140.5],[-143,148.5],[-157,153],[-166.25,151],[-179.75,140.75],[-199,163],[-201.86,170.107],[-204.898,176.12],[-205.25,185.25],[-184.5,209.5],[-171,207.75],[-141.5,216.75],[-113.775,209.583],[-106,200.25],[-105.25,179.25],[-108.5,160.25],[-114.5,144.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3,3.133],[2.57,0.274],[0,0],[2.552,-0.99],[1.286,-3.074],[-0.458,0.054],[5.009,-6.025],[0.117,-0.635],[2.455,-4.302],[-0.488,-2.658],[-7.962,-1.353],[0,0],[-15.449,0.849],[-3.085,3.633],[-1.154,2.444],[1.528,3.565],[0.509,2.886],[1.448,3.456]],"o":[[-3.992,-4.169],[-3.48,-0.371],[0,0],[-3.469,1.345],[-3.021,7.222],[-6.616,-0.309],[-1.662,2],[0.242,0.365],[-1.342,2.352],[1.528,8.319],[6.663,1.132],[0,0],[9.272,-0.509],[2.055,-2.421],[2.886,-6.112],[-1.528,-3.565],[-0.509,-2.886],[-0.998,-2.382]],"v":[[-137.625,144.867],[-146.195,140.101],[-154.6,139.315],[-161.781,140.53],[-169.786,148.074],[-171.292,159.696],[-186.759,168.15],[-190.617,177.51],[-197.33,180.177],[-198.504,190.26],[-184.663,201.603],[-167.37,200.289],[-149.587,203.901],[-132.299,196.765],[-127.855,189.196],[-126.595,173.811],[-130.052,163.033],[-133.627,152.757]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[2.43,2.537],[2.082,0.222],[0,0],[3.569,-0.14],[1.042,-2.49],[-0.371,0.044],[4.058,-4.881],[0.095,-0.515],[-0.511,-3.005],[-1.321,-1.745],[-6.45,-1.096],[0,0],[-12.116,3.205],[-0.59,2.936],[-0.215,-0.024],[-2.682,6.652],[0.002,2.374],[0.138,-0.169]],"o":[[-3.234,-3.377],[-2.819,-0.301],[0,0],[-3.012,0.118],[-2.447,5.85],[-1.404,1.623],[-1.347,1.62],[0.196,0.295],[0.368,2.162],[3.94,5.203],[5.397,0.917],[0,0],[5.892,-1.559],[0.393,-1.956],[0.713,-0.686],[1.175,-2.914],[-0.007,-7.368],[-2.05,-0.417]],"v":[[-159.127,141.778],[-164.944,137.042],[-168.252,135.031],[-177.694,132.515],[-186.303,135.501],[-188.346,142.002],[-192.552,152.263],[-193.427,159.095],[-195.864,164.38],[-192.815,172.422],[-184.353,180.235],[-177.221,179.046],[-162.691,180.347],[-154.44,171.852],[-153.963,168.436],[-147.818,163.598],[-147.118,154.118],[-154.138,145.794]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[1.133,0.194],[0.617,0.066],[0,0],[1.058,-0.041],[0.598,-0.531],[-0.11,0.013],[0.399,-1.919],[0.028,-0.153],[-0.151,-0.89],[-0.392,-0.517],[-1.911,-0.325],[0,0],[-3.59,0.95],[-0.473,0.369],[-0.064,-0.007],[-0.795,1.971],[0.001,0.703],[0.041,-0.05]],"o":[[-1.366,-0.234],[-0.835,-0.089],[0,0],[-0.892,0.035],[-1.287,1.143],[-0.392,1.039],[-0.127,0.611],[0.058,0.088],[0.109,0.641],[1.168,1.542],[1.599,0.272],[0,0],[1.746,-0.462],[0.315,-0.246],[0.513,-1.247],[0.348,-0.864],[-0.002,-2.183],[-0.608,-0.123]],"v":[[-169.766,137.711],[-171.614,137.011],[-173.34,136.829],[-176.262,136.622],[-179.103,136.969],[-180.95,138.978],[-182.197,142.184],[-182.58,144.292],[-182.309,146.23],[-181.488,148.945],[-178.277,151.177],[-176.08,151.404],[-171.526,151.293],[-168.41,149.903],[-167.905,149.502],[-166.374,145.874],[-166.001,142.527],[-167.709,138.487]],"c":true}]},{"t":31.2,"s":[{"i":[[-0.012,-0.002],[-0.006,-0.001],[0,0],[-0.011,0],[-0.006,0.005],[0.001,0],[-0.004,0.02],[0,0.002],[0.002,0.009],[0.004,0.005],[0.02,0.003],[0,0],[0.037,-0.01],[0.005,-0.004],[0.001,0],[0.008,-0.02],[0,-0.007],[0,0.001]],"o":[[0.014,0.002],[0.009,0.001],[0,0],[0.009,0],[0.013,-0.012],[0.004,-0.011],[0.001,-0.006],[-0.001,-0.001],[-0.001,-0.007],[-0.012,-0.016],[-0.016,-0.003],[0,0],[-0.018,0.005],[-0.003,0.003],[-0.005,0.013],[-0.004,0.009],[0,0.022],[0.006,0.001]],"v":[[-174.336,144.408],[-174.317,144.415],[-174.3,144.417],[-174.27,144.419],[-174.241,144.416],[-174.222,144.395],[-174.209,144.362],[-174.205,144.341],[-174.208,144.321],[-174.216,144.293],[-174.249,144.27],[-174.272,144.268],[-174.318,144.269],[-174.35,144.283],[-174.355,144.287],[-174.371,144.324],[-174.375,144.359],[-174.357,144.4]],"c":true}]}],"ix":2},"nm":"Path 14","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":30,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 23","np":1,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[4.269,-0.285],[-0.099,-0.021],[4.158,-1.641],[1.316,-6.01],[-7.071,-4.003],[-6.773,8.608],[7.156,10.787]],"o":[[-6.731,0.45],[-0.036,0.004],[-5.174,2.042],[-2.354,10.746],[11.42,6.465],[6.885,-8.752],[-3.339,-5.033]],"v":[[-99.391,120.571],[-107.282,121.507],[-114.678,123.973],[-125.613,137.234],[-116.699,159.837],[-86.788,155.023],[-84.537,128.603]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[5.074,-1.318],[-0.125,0.001],[4.59,-2.783],[0.037,-6.919],[-9.559,-2.739],[-5.947,11.061],[11.411,10.181]],"o":[[-8.001,2.078],[-0.042,0.013],[-5.712,3.463],[-0.066,12.373],[15.438,4.424],[6.046,-11.245],[-5.324,-4.75]],"v":[[-122.44,101.664],[-131.714,104.549],[-139.996,109],[-149.763,126.157],[-133.184,148.919],[-98.358,136.59],[-102.457,107.003]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[7.17,-3.072],[-0.184,0.029],[6.131,-5.119],[-1.49,-10.186],[-14.672,-1.895],[-6.277,17.597],[19.058,12.427]],"o":[[-11.305,4.843],[-0.059,0.029],[-7.629,6.37],[2.665,18.214],[23.696,3.06],[6.382,-17.89],[-8.891,-5.798]],"v":[[-124.82,89.782],[-137.816,96.096],[-149.006,104.494],[-159.54,131.911],[-130.071,161.69],[-81.598,135.778],[-94.234,93.173]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[7.17,-3.072],[-0.184,0.029],[6.131,-5.119],[-1.49,-10.186],[-14.672,-1.895],[-6.277,17.597],[19.058,12.427]],"o":[[-11.305,4.843],[-0.059,0.029],[-7.629,6.37],[2.665,18.214],[23.696,3.06],[6.382,-17.89],[-8.891,-5.798]],"v":[[-126.82,88.532],[-139.816,94.846],[-151.006,103.244],[-161.54,130.661],[-132.071,160.44],[-83.598,134.528],[-96.234,91.923]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[7.17,-3.072],[-0.184,0.029],[6.131,-5.119],[-1.49,-10.186],[-14.672,-1.895],[-6.277,17.597],[19.058,12.427]],"o":[[-11.305,4.843],[-0.059,0.029],[-7.629,6.37],[2.665,18.214],[23.696,3.06],[6.382,-17.89],[-8.891,-5.798]],"v":[[-130.445,85.532],[-139.816,94.721],[-154.631,100.244],[-165.165,127.661],[-135.696,157.44],[-87.223,131.528],[-99.859,88.923]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.17,-3.072],[-0.184,0.029],[4.056,-3.592],[-1.49,-10.186],[-14.672,-1.895],[-2.79,11.062],[9.109,5.577]],"o":[[-11.305,4.843],[-0.059,0.029],[-4.606,4.079],[2.665,18.214],[23.696,3.06],[3.223,-12.778],[-7.337,-4.493]],"v":[[-126.195,80.907],[-139.816,95.346],[-152.381,96.244],[-160.415,117.911],[-130.071,142.565],[-89.598,117.028],[-102.109,84.173]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[6.75,-2],[1.911,-1.434],[1.325,-2.309],[0.611,-2.828],[-12,-5.75],[-4.5,9],[7.25,2.75]],"o":[[-2.347,0.695],[-1.905,1.429],[-1.169,2.037],[-2,9.25],[12,5.75],[4.5,-9],[-7.25,-2.75]],"v":[[-129.25,87],[-135.672,90.156],[-140.555,95.728],[-143.25,103],[-124.5,124.5],[-99.75,116.25],[-107,88]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.3,-0.978],[0.934,-0.701],[0.648,-1.129],[0.299,-1.383],[-5.867,-2.811],[-2.2,4.401],[3.545,1.345]],"o":[[-1.147,0.34],[-0.931,0.699],[-0.572,0.996],[-0.978,4.523],[5.867,2.811],[2.2,-4.401],[-3.545,-1.345]],"v":[[-132.177,85.853],[-135.317,87.396],[-137.704,90.121],[-139.022,93.676],[-132.104,104.564],[-117.753,100.155],[-121.298,86.342]],"c":true}]},{"t":27.6,"s":[{"i":[[0,0.011],[0,0.008],[0,0.013],[0,0.015],[0,0.031],[0,-0.049],[0,-0.015]],"o":[[0,-0.004],[0,-0.008],[0,-0.011],[0,-0.05],[0,-0.031],[0,0.049],[0,0.015]],"v":[[-140.375,80.489],[-140.375,80.472],[-140.375,80.442],[-140.375,80.402],[-140.375,80.281],[-140.375,80.33],[-140.375,80.484]],"c":true}]}],"ix":2},"nm":"Path 13","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 22","np":1,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0.848,1.746],[0.817,0.364],[19.647,3.522],[9.911,-15.839],[-8.54,-8.416],[-2.928,1.496],[10.09,-19.523],[-2.536,-1.496],[-46.383,12.27],[7.754,3.824],[9.032,37.227]],"o":[[-10.498,-21.608],[-0.283,-1.073],[-10.991,-1.97],[-6.738,10.769],[9.443,9.306],[0.491,-0.139],[-10.619,20.547],[0.411,-0.361],[18.168,-4.806],[-1.9,-0.937],[-15.591,-37.452]],"v":[[25.417,23.011],[-36.447,10.093],[-69.568,-7.619],[-108.554,20.678],[-104.272,51.853],[-69.412,58.424],[-69.489,92.17],[-36.828,129.54],[17.492,138.23],[54.102,103.914],[72.718,56.305]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0.713,1.568],[0.687,0.327],[16.522,3.162],[8.335,-14.223],[-7.182,-7.557],[-2.462,1.343],[8.485,-17.531],[-2.133,-1.343],[-39.008,11.018],[6.521,3.434],[7.013,33.585]],"o":[[-8.828,-19.404],[-0.238,-0.964],[-9.244,-1.769],[-5.666,9.67],[7.942,8.356],[0.413,-0.125],[-8.93,18.451],[0.345,-0.324],[15.279,-4.316],[-1.598,-0.842],[-13.112,-33.631]],"v":[[1.209,19.018],[-50.818,7.419],[-78.672,-8.487],[-111.459,16.923],[-107.857,44.918],[-78.541,50.818],[-78.606,81.122],[-51.139,114.679],[-5.456,122.482],[43.832,97.667],[53.987,44.415]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0.646,1.478],[0.622,0.308],[14.96,2.983],[7.547,-13.415],[-6.503,-7.128],[-2.229,1.267],[7.683,-16.536],[-1.931,-1.267],[-35.32,10.392],[5.904,3.239],[6.878,31.53]],"o":[[-7.994,-18.302],[-0.215,-0.909],[-8.37,-1.669],[-5.131,9.121],[7.191,7.882],[0.374,-0.118],[-8.086,17.403],[0.313,-0.306],[13.834,-4.071],[-1.447,-0.794],[-11.872,-31.72]],"v":[[-10.896,17.022],[-58.004,6.081],[-83.224,-8.921],[-112.911,15.046],[-109.65,41.45],[-83.105,47.015],[-83.164,75.597],[-58.294,107.248],[-16.93,114.608],[10.947,85.544],[25.122,45.22]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[23.023,6.688],[0.485,0.24],[11.669,2.326],[5.886,-10.464],[-5.072,-5.56],[-1.739,0.988],[-12.587,-6.619],[-1.506,-0.988],[-11.977,-3.251],[-2.257,4.743],[3.45,4.539]],"o":[[-14.959,-4.345],[-0.168,-0.709],[-6.528,-1.302],[-4.002,7.114],[5.609,6.148],[0.292,-0.092],[12.587,6.619],[0.244,-0.238],[10.855,2.946],[10.181,-21.394],[-2.92,-7.502]],"v":[[-31.523,15.062],[-58.713,14.914],[-78.384,3.212],[-101.54,21.906],[-98.996,42.501],[-78.292,46.842],[-68.587,67.381],[-48.994,73.738],[-31.355,86.304],[-4.931,76.894],[-16.3,46.027]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[12.125,2.625],[0.531,0.108],[11.875,-0.75],[3,-11.625],[-6.331,-4.07],[-1.468,1.358],[-6.75,2.75],[-6.094,-2.441],[-2.584,1.949],[-3.452,3.959],[4.5,3.5]],"o":[[-15.225,-3.296],[-0.344,-0.642],[-6.644,0.42],[-2.04,7.903],[7,4.5],[8.375,-7.75],[0.5,-0.125],[4.203,1.683],[3.086,-2.329],[3.727,-4.273],[-4.75,-6.5]],"v":[[-58.875,15.5],[-85.906,10.892],[-104.125,7.25],[-121,21.25],[-113.25,40.5],[-92.125,39.375],[-63.875,53.375],[-49.906,51.066],[-40.916,54.176],[-25.923,50.541],[-31.625,31.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[12.125,2.625],[0.531,0.108],[11.875,-0.75],[3,-11.625],[-6.331,-4.07],[-1.468,1.358],[-6.75,2.75],[-6.094,-2.441],[-2.584,1.949],[0.865,3.984],[0.5,0.5]],"o":[[-15.225,-3.296],[-0.344,-0.642],[-6.644,0.42],[-2.04,7.903],[7,4.5],[8.375,-7.75],[0.5,-0.125],[4.203,1.683],[3.086,-2.329],[-1.202,-5.541],[2.625,-6.625]],"v":[[-78.125,-0.25],[-101.406,4.142],[-117.5,-5.125],[-134.375,8.875],[-126.75,30],[-106.75,29.5],[-82.25,29.625],[-75.781,36.941],[-62.041,37.301],[-58.548,26.916],[-66.125,21.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[4.473,2.863],[8.215,-0.705],[4.865,-2.085],[3.75,-7.25],[-3.667,-2.163],[-1.268,1.547],[-9.086,0.51],[-1.795,0.632],[-1.056,0.729],[-0.6,0.739],[-0.242,0.612]],"o":[[-3.577,-2.289],[-6.139,0.527],[-6.119,2.622],[-3.75,7.25],[4.875,2.875],[6.25,-7.625],[2.419,-0.136],[1.491,-0.525],[0.969,-0.668],[0.509,-0.626],[2.625,-6.625]],"v":[[-76.875,-11.75],[-96.544,-14.067],[-113.875,-10.125],[-130.875,-6.375],[-125.375,14.375],[-107.375,15.375],[-83,12.125],[-76.678,10.918],[-72.856,9.006],[-70.502,6.871],[-69.375,5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[1,3],[3.049,-0.927],[1.604,-2.352],[3.75,-7.25],[-4.25,-0.25],[0,2],[-1,1.25],[-0.781,0.577],[-0.668,0.611],[-0.404,0.671],[-0.05,0.648]],"o":[[-0.572,-1.717],[-2.278,0.693],[-3.75,5.5],[-3.75,7.25],[4.25,0.25],[0,-2],[0.309,-0.386],[0.649,-0.479],[0.612,-0.56],[0.342,-0.568],[0.25,-3.25]],"v":[[-101.75,-32],[-108.237,-33.278],[-114.5,-28.75],[-129.5,-17],[-121,-2.5],[-111,-8.75],[-114.5,-17.75],[-112.743,-19.194],[-110.699,-20.829],[-109.121,-22.676],[-108.5,-24.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0.477,1.241],[1.644,-0.085],[1.06,-0.649],[1.583,-3.072],[-3.68,-0.739],[-0.664,0.556],[-0.43,0.534],[-0.201,0.384],[-0.162,0.402],[-0.106,0.389],[-0.036,0.313]],"o":[[-0.273,-0.711],[-1.229,0.063],[-2.675,1.638],[-1.583,3.072],[2.998,0.602],[1.031,-0.863],[0.133,-0.165],[0.167,-0.319],[0.149,-0.369],[0.09,-0.33],[0.155,-1.355]],"v":[[-123.207,-34.886],[-126.562,-35.897],[-130.195,-34.858],[-135.734,-28.285],[-131.922,-22.534],[-126.533,-24.296],[-123.665,-27.037],[-123.145,-27.886],[-122.64,-28.982],[-122.248,-30.13],[-122.053,-31.102]],"c":true}]},{"t":26.4,"s":[{"i":[[-0.002,-0.011],[-0.006,0.001],[-0.004,0.006],[-0.006,0.026],[0.014,0.006],[0.002,-0.005],[0.002,-0.005],[0.001,-0.003],[0.001,-0.003],[0,-0.003],[0,-0.003]],"o":[[0.001,0.006],[0.005,-0.001],[0.01,-0.014],[0.006,-0.026],[-0.011,-0.005],[-0.004,0.007],[-0.001,0.001],[-0.001,0.003],[-0.001,0.003],[0,0.003],[-0.001,0.012]],"v":[[-147.995,-43.14],[-147.983,-43.131],[-147.969,-43.14],[-147.948,-43.196],[-147.962,-43.245],[-147.983,-43.23],[-147.993,-43.206],[-147.995,-43.199],[-147.997,-43.19],[-147.999,-43.18],[-147.999,-43.172]],"c":true}]}],"ix":2},"nm":"Path 12","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":25.2,"s":[100,100],"h":1},{"t":26.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 21","np":1,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[6.316,0.365],[-9.101,-36.431],[-32.214,1.248],[-0.832,-0.102],[-3.283,15.561],[15.288,7.245],[0.489,0.149]],"o":[[-23.073,-1.332],[6.095,24.398],[14.065,-0.545],[0.121,-1.496],[3.309,-15.684],[-13.919,-6.596],[-0.614,-0.488]],"v":[[-41.298,-128.168],[-62.584,-83.152],[1.229,2.268],[51.511,-48.572],[40.515,-90.575],[-9.296,-123.904],[-26.968,-129.148]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[6.316,0.341],[-9.101,-34.094],[-30.864,-9.302],[-0.832,-0.095],[-3.283,14.562],[15.288,6.78],[0.489,0.14]],"o":[[-23.073,-1.247],[6.095,22.833],[38.104,11.485],[0.121,-1.4],[3.309,-14.677],[-13.919,-6.173],[-0.614,-0.456]],"v":[[-50.965,-135.294],[-89.751,-78.667],[-18.604,-15.485],[34.511,-37.132],[58.682,-95.961],[-18.963,-131.304],[-36.635,-136.212]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[6.316,0.294],[-9.101,-29.419],[-32.214,1.008],[-0.832,-0.082],[-3.283,12.565],[15.288,5.851],[0.489,0.121]],"o":[[-23.073,-1.076],[6.095,19.702],[14.065,-0.44],[0.121,-1.208],[3.309,-12.665],[-13.919,-5.327],[-0.614,-0.394]],"v":[[-70.298,-149.548],[-91.584,-113.197],[-62.771,-73.491],[-41.489,-93.752],[-20.485,-112.731],[-38.296,-146.105],[-55.968,-150.339]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[6.316,0.294],[-9.101,-29.419],[-32.214,1.008],[-0.832,-0.082],[-3.283,12.565],[15.288,5.851],[0.489,0.121]],"o":[[-23.073,-1.076],[6.095,19.702],[14.065,-0.44],[0.121,-1.208],[3.309,-12.665],[-13.919,-5.327],[-0.614,-0.394]],"v":[[-71.798,-151.798],[-94.084,-105.947],[-60.021,-72.991],[-33.989,-89.252],[-20.485,-112.731],[-38.296,-146.105],[-55.968,-150.339]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[5.031,0.235],[-7.25,-23.435],[-25.972,6.764],[-0.431,-0.143],[-2.615,10.009],[12.179,4.661],[0.389,0.096]],"o":[[-18.379,-0.857],[4.855,15.694],[13.893,-3.618],[0.096,-0.962],[2.636,-10.089],[-11.088,-4.243],[-0.489,-0.314]],"v":[[-79.715,-145.671],[-98.862,-110.939],[-68.143,-85.882],[-56.566,-101.822],[-39.636,-115.547],[-53.824,-142.132],[-68.897,-146.302]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[3.579,0.143],[-5.158,-14.301],[-17.82,5.878],[-0.307,-0.087],[-1.86,6.108],[8.664,2.844],[0.277,0.059]],"o":[[-13.075,-0.523],[3.454,9.578],[5.489,-1.81],[0.068,-0.587],[1.875,-6.157],[-7.888,-2.589],[-0.348,-0.191]],"v":[[-78.761,-148.352],[-92.204,-123.953],[-64.305,-112.628],[-60.693,-121.288],[-50.25,-129.968],[-59.987,-148.786],[-71.777,-147.059]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[1.942,0.078],[-0.5,-7.25],[-6,2.75],[-1.435,1.468],[0,2.813],[0.859,1.165],[1.856,0.669]],"o":[[-6.25,-0.25],[0.5,7.25],[2.785,-1.276],[1.656,-1.696],[0,-1.672],[-1,-1.356],[-1.555,-0.56]],"v":[[-73.75,-158.75],[-84,-146.25],[-71.5,-140],[-65.196,-143.967],[-62.75,-150.5],[-64.09,-154.755],[-68.456,-157.793]],"c":true}]},{"t":25.2,"s":[{"i":[[0.067,0.003],[-0.017,-0.25],[-0.207,0.095],[-0.049,0.051],[0,0.097],[0.03,0.04],[0.064,0.023]],"o":[[-0.216,-0.009],[0.017,0.25],[0.096,-0.044],[0.057,-0.058],[0,-0.058],[-0.034,-0.047],[-0.054,-0.019]],"v":[[-74.129,-165.241],[-74.483,-164.81],[-74.052,-164.595],[-73.834,-164.732],[-73.75,-164.957],[-73.796,-165.104],[-73.947,-165.208]],"c":true}]}],"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":7.2,"s":[0,0],"h":1},{"t":8.4,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 20","np":1,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[13.773,-0.038],[2.844,-8.6],[-9.07,-0.176],[-20.758,8.379],[9.469,10.386]],"o":[[-15.599,0.043],[-2.844,8.6],[11.374,0.221],[10.913,-4.405],[-5.628,-6.173]],"v":[[-134.546,-237.462],[-165.906,-222.802],[-155.48,-196.269],[-111.413,-192.629],[-111.666,-227.745]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[16.23,-0.048],[3.351,-11.039],[-10.688,-0.226],[-24.461,10.756],[11.158,13.332]],"o":[[-18.381,0.055],[-3.351,11.039],[13.403,0.283],[12.86,-5.655],[-6.631,-7.923]],"v":[[-140.619,-252.555],[-177.573,-233.737],[-165.286,-199.677],[-113.36,-195.006],[-113.658,-240.082]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[13,0.25],[2.5,-9.75],[-7.974,-0.199],[-18.25,9.5],[4.5,6.25]],"o":[[-8.974,-0.173],[-2.5,9.75],[10,0.25],[9.595,-4.994],[-1.633,-2.268]],"v":[[-149.5,-241.75],[-178.75,-228],[-173.5,-206.75],[-136.25,-196],[-131.25,-232.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[8.75,2],[2.5,-9.75],[-6.75,-4.25],[0,4.5],[-2.5,1.25]],"o":[[-8.75,-2],[-2.5,9.75],[6.75,4.25],[0,-4.5],[2.5,-1.25]],"v":[[-152.75,-227.5],[-172.25,-221],[-166.5,-199.5],[-152.75,-203.25],[-146.5,-215]],"c":true}]},{"t":25.2,"s":[{"i":[[0.273,0.063],[0.078,-0.305],[-0.211,-0.133],[-0.093,0.106],[0.016,0.172]],"o":[[-0.273,-0.063],[-0.078,0.305],[0.211,0.133],[0.109,-0.125],[-0.008,-0.087]],"v":[[-164.063,-215.953],[-164.672,-215.75],[-164.492,-215.078],[-163.969,-215.125],[-163.766,-215.625]],"c":true}]}],"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 19","np":1,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[15.713,-1.406],[6.428,-12.309],[-10.647,-6.405],[-0.096,-0.848],[-6.513,-3.96],[-7.185,2.638],[-0.503,1.294],[5.825,13.651],[2.513,5.504],[6.831,7.026]],"o":[[-15.285,1.367],[-4.929,9.438],[12.695,7.637],[-0.149,-0.01],[10.938,6.65],[17.727,-6.509],[-0.546,0.056],[-2.381,-5.579],[-1.744,-3.818],[-10.169,-6.974]],"v":[[-74.965,-191.367],[-109.927,-168.974],[-95.702,-129.019],[-82.209,-120.717],[-69.005,-110.65],[-36.815,-110.138],[-22.066,-133.104],[-26.348,-154.903],[-33.763,-172.004],[-40.831,-185.151]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[15.713,-1.406],[6.428,-12.309],[-10.647,-6.405],[-0.096,-0.848],[-6.513,-3.96],[-7.185,2.638],[-0.503,1.294],[5.825,13.651],[2.513,5.504],[6.831,7.026]],"o":[[-15.285,1.367],[-4.929,9.438],[12.695,7.637],[-0.149,-0.01],[10.938,6.65],[17.727,-6.509],[-0.546,0.056],[-2.381,-5.579],[-1.744,-3.818],[-10.169,-6.974]],"v":[[-65.715,-208.617],[-100.677,-186.224],[-86.452,-146.269],[-72.959,-137.967],[-59.755,-127.9],[-27.565,-127.388],[-12.816,-150.354],[-17.098,-172.153],[-24.513,-189.254],[-31.581,-202.401]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[15.715,-1.383],[7.732,-12.309],[-10.647,-6.405],[-0.096,-0.848],[-6.513,-3.96],[-7.185,2.638],[-0.503,1.294],[5.825,13.651],[1.513,14.254],[0.388,-0.2]],"o":[[-11.853,1.043],[-5.663,9.016],[12.695,7.637],[-0.149,-0.01],[10.938,6.65],[17.727,-6.509],[-0.546,0.056],[-2.381,-5.579],[-0.443,-4.174],[-0.531,-0.957]],"v":[[-42.215,-217.367],[-81.427,-197.974],[-71.952,-157.769],[-54.459,-152.467],[-45.505,-142.9],[-18.565,-143.138],[-1.566,-161.854],[-6.598,-181.403],[-11.013,-197.504],[-19.456,-209.651]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[9.322,-0.487],[7.516,-9.446],[-8.444,-5.77],[-0.011,-0.687],[-5.162,-3.563],[-6.768,1.019],[-0.529,1.011],[3.792,11.315],[4.178,8.844],[0.343,-0.138]],"o":[[-10.063,0.113],[-5.505,6.919],[10.068,6.88],[-0.124,-0.017],[8.669,5.984],[17.665,-2.472],[-0.464,0.014],[-1.55,-4.625],[-1.372,-2.702],[-0.369,-0.8]],"v":[[-44.663,-221.733],[-78.245,-207.872],[-72.654,-175.033],[-58.354,-169.75],[-50.653,-162.984],[-27.343,-160.745],[-8.523,-176.658],[-11.429,-193.47],[-19.419,-209.333],[-29.088,-215.562]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[2.853,0.274],[7.239,-9.189],[-6.172,-6.728],[0.073,-0.716],[-3.769,-4.15],[-6.296,-0.319],[-0.551,1.007],[1.728,12.101],[6.81,5.876],[0.295,-0.115]],"o":[[-8.19,-0.786],[-5.302,6.731],[7.36,8.022],[-0.099,-0.028],[6.33,6.97],[17.46,0.883],[-0.379,-0.026],[-0.706,-4.946],[-2.29,-1.976],[-0.205,-0.865]],"v":[[-46.81,-225.964],[-74.489,-213.811],[-72.828,-179.272],[-61.838,-172.551],[-55.45,-166.718],[-35.96,-161.383],[-15.473,-178.885],[-16.228,-197.601],[-27.728,-217.605],[-38.545,-219.635]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[1.857,1.045],[0.44,-17.147],[-1.847,-3.486],[0.053,-0.52],[-2.738,-3.015],[-4.578,-0.114],[-0.4,0.731],[-3.168,9.957],[2.037,2.634],[1.22,0.995]],"o":[[-7.034,-3.957],[-0.101,3.944],[1.083,2.044],[-0.072,-0.02],[4.598,5.063],[10.397,0.259],[-0.275,-0.019],[1.028,-3.23],[-0.854,-1.104],[-1.482,-1.209]],"v":[[-38.004,-227.043],[-69.552,-214.22],[-66.892,-204.748],[-62.178,-200.23],[-60.262,-192.36],[-48.647,-187.759],[-38.85,-202.106],[-27.957,-211.707],[-29.814,-220.512],[-32.951,-223.662]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[1.056,0.594],[0.25,-9.75],[-0.901,-1.347],[-0.687,-0.465],[-0.515,-0.215],[-1.385,-0.462],[-1.453,2.21],[-0.54,1.511],[1.12,1.835],[0.684,0.677]],"o":[[-4,-2.25],[-0.069,2.677],[0.512,0.766],[0.473,0.32],[2.213,0.921],[1.705,0.568],[1.104,-1.678],[0.648,-1.815],[-0.469,-0.769],[-0.831,-0.822]],"v":[[-49.5,-225.25],[-62.25,-216.75],[-60.864,-210.84],[-59.04,-209.016],[-57.549,-208.222],[-51.5,-206.75],[-46.556,-210.084],[-44,-215.25],[-44.899,-220.917],[-46.644,-223.101]],"c":true}]},{"t":25.2,"s":[{"i":[[0.018,0.01],[0.004,-0.164],[-0.015,-0.023],[-0.012,-0.008],[-0.009,-0.004],[-0.023,-0.008],[-0.024,0.037],[-0.009,0.025],[0.019,0.031],[0.011,0.011]],"o":[[-0.067,-0.038],[-0.001,0.045],[0.009,0.013],[0.008,0.005],[0.037,0.015],[0.029,0.01],[0.019,-0.028],[0.011,-0.031],[-0.008,-0.013],[-0.014,-0.014]],"v":[[-55.603,-222.212],[-55.817,-222.069],[-55.794,-221.97],[-55.764,-221.939],[-55.739,-221.926],[-55.637,-221.901],[-55.554,-221.957],[-55.511,-222.044],[-55.526,-222.139],[-55.555,-222.176]],"c":true}]}],"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":6,"s":[0,0],"h":1},{"t":7.2,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 18","np":1,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[13.75,3.25],[5.25,-14.25],[0.62,-0.145],[0.085,-15.743],[-7.53,0.145],[-2.25,4],[-3.25,3.5]],"o":[[-13.75,-3.25],[-0.66,1.791],[0.12,1.061],[-0.067,12.555],[13,-0.25],[2.25,-4],[3.25,-3.5]],"v":[[27.5,-216],[-8.25,-204],[-10.37,-196.855],[-21.835,-182.007],[-0.75,-161.25],[32.25,-167.25],[47,-191.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[13.75,3.25],[5.25,-14.25],[0.62,-0.145],[0.085,-15.743],[-7.53,0.145],[-2.25,4],[-3.25,3.5]],"o":[[-13.75,-3.25],[-0.66,1.791],[0.12,1.061],[-0.067,12.555],[13,-0.25],[2.25,-4],[3.25,-3.5]],"v":[[20.75,-227.5],[-15,-215.5],[-17.12,-208.355],[-28.585,-193.507],[-7.5,-172.75],[25.5,-178.75],[40.25,-203]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[13.75,3.25],[5.25,-14.25],[0.392,-1.771],[-0.993,-4.176],[-6.907,0.133],[-2.25,4],[-3.25,3.5]],"o":[[-13.75,-3.25],[-0.643,1.745],[-1.109,5.007],[1.524,6.408],[13,-0.25],[2.25,-4],[3.25,-3.5]],"v":[[20.25,-236],[-12,-223.25],[-13.554,-217.958],[-13.765,-203.799],[-1.25,-193],[19,-199.25],[30.25,-208]],"c":true}]},{"t":25.2,"s":[{"i":[[0.158,0.037],[0.06,-0.164],[0.004,-0.02],[-0.014,-0.047],[-0.08,0.002],[-0.049,0.02],[0.006,0.084]],"o":[[-0.158,-0.037],[-0.007,0.02],[-0.012,0.057],[0.021,0.072],[0.15,-0.003],[0.069,-0.028],[0.011,-0.109]],"v":[[14.821,-229.95],[14.435,-229.797],[14.418,-229.736],[14.422,-229.576],[14.574,-229.454],[14.85,-229.469],[14.989,-229.697]],"c":true}]}],"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 17","np":1,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[13.147,-2.866],[0,0],[4.419,-23.743],[0,0],[-39.757,-6.382],[-1.069,-0.535],[-0.46,8.232],[0.213,0.034],[5.197,5.598]],"o":[[-26.922,5.869],[0,0],[-3.466,18.621],[-0.183,-0.091],[31.175,5.004],[14.505,7.257],[1.111,-19.892],[0.548,-1.047],[-8.586,-9.248]],"v":[[133.422,-179.869],[103.784,-153.011],[90.331,-128.007],[100.412,-96.455],[131.941,-90.277],[169.55,-114.358],[185.639,-138.608],[168.394,-166.016],[163.057,-172.69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[13.147,-2.866],[0,0],[-1.831,-21.993],[0,0],[-39.757,-6.382],[-1.069,-0.535],[-0.46,8.232],[0.213,0.034],[5.197,5.598]],"o":[[-26.922,5.869],[0,0],[1.848,22.206],[-0.183,-0.091],[31.175,5.004],[14.505,7.257],[1.111,-19.892],[0.548,-1.047],[-8.586,-9.248]],"v":[[129.172,-178.619],[101.534,-155.511],[100.081,-133.257],[90.412,-119.455],[131.941,-90.277],[176.3,-103.358],[203.639,-128.858],[171.894,-161.016],[163.057,-172.69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[13.147,-2.866],[0,0],[-1.831,-21.993],[0,0],[-39.757,-6.382],[-1.069,-0.535],[-0.46,8.232],[0.213,0.034],[5.197,5.598]],"o":[[-26.922,5.869],[0,0],[1.848,22.206],[-0.183,-0.091],[31.175,5.004],[14.505,7.257],[1.111,-19.892],[0.548,-1.047],[-8.586,-9.248]],"v":[[140.922,-204.369],[100.034,-188.011],[85.081,-163.007],[100.662,-140.955],[142.191,-111.777],[186.55,-124.858],[213.889,-150.358],[182.144,-182.516],[173.307,-194.19]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[13.454,-0.249],[0,0],[3.986,-22.701],[0,0],[-43.964,-4.676],[-1.069,-0.535],[-0.792,8.206],[0.213,0.034],[5.197,5.598]],"o":[[-19.922,0.369],[0,0],[-6.064,34.537],[0,0],[30.809,3.277],[14.505,7.257],[2.861,-29.642],[0.548,-1.047],[-8.586,-9.248]],"v":[[152.422,-212.119],[128.034,-203.761],[87.081,-179.507],[92.912,-135.955],[140.691,-103.777],[192.8,-122.608],[221.889,-146.608],[190.144,-184.266],[183.557,-197.69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[13.406,0.683],[0,0],[5.129,-22.439],[0,0],[-31.926,-8.305],[-1.039,-0.588],[-1.329,8.119],[0.21,0.044],[4.899,5.847]],"o":[[-15.587,-0.496],[0,0],[-7.803,34.139],[0,0],[24.063,6.834],[14.099,7.975],[3.995,-25.861],[0.6,-1.017],[-8.094,-9.66]],"v":[[158.656,-212.868],[135.099,-205.146],[94.937,-189.499],[101.687,-145.312],[145.312,-119.834],[192.304,-127.026],[224.505,-145.389],[194.766,-183.431],[188.978,-196.893]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[13.359,1.616],[0,0],[6.272,-22.178],[0,0],[-19.888,-11.934],[-1.009,-0.64],[-1.865,8.031],[0.208,0.055],[4.601,6.097]],"o":[[-11.252,-1.361],[0,0],[-9.543,33.742],[0,0],[17.317,10.391],[13.692,8.694],[5.128,-22.08],[0.652,-0.986],[-7.602,-10.073]],"v":[[164.891,-213.616],[142.165,-206.531],[102.793,-199.492],[137.962,-161.67],[149.933,-135.891],[191.808,-131.444],[227.122,-144.17],[199.389,-182.596],[194.399,-196.097]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[10.892,3.134],[0,0],[2.793,-22.878],[0,0],[-19.199,-13.014],[-6.056,-1.881],[-1.865,8.031],[0.208,0.055],[1.91,6.831]],"o":[[-10.892,-3.134],[0,0],[-2.793,22.878],[0,0],[16.067,10.891],[19.942,6.194],[5.128,-22.08],[0.652,-0.986],[-3.399,-12.153]],"v":[[187.141,-223.116],[165.165,-216.281],[130.543,-201.992],[147.712,-175.17],[164.183,-147.391],[197.058,-143.694],[228.872,-161.17],[207.389,-188.846],[206.149,-205.347]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[9.75,2.5],[0,0],[2.5,-18.25],[0,0],[-3.25,-4.5],[-5.5,1.25],[-1.964,1.097],[-2.243,1.823],[-3,13]],"o":[[-9.75,-2.5],[0,0],[-2.5,18.25],[0,0],[3.25,4.5],[2.416,-0.549],[2.508,-1.401],[4,-3.25],[3,-13]],"v":[[189.75,-227.5],[170.75,-221.25],[150.5,-210.25],[164.75,-190.25],[164.5,-182.25],[180.5,-179.5],[187.006,-182.033],[194,-187],[204.75,-204.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.383,1.292],[0,0],[0.879,-7.256],[0,0],[-2.153,-0.994],[-1.933,0.497],[-0.595,0.382],[-0.788,0.725],[-1.054,5.168]],"o":[[-3.352,-1.28],[0,0],[-0.879,7.256],[0,0],[1.806,0.834],[0.849,-0.218],[0.76,-0.488],[1.406,-1.292],[1.054,-5.168]],"v":[[192.708,-227.815],[186.162,-228.362],[178.254,-220.609],[179.791,-211.365],[183.306,-208.334],[189.676,-208.135],[191.783,-209.04],[193.982,-210.868],[197.321,-218.422]],"c":true}]},{"t":27.6,"s":[{"i":[[0.04,-0.032],[0,0],[0.01,0.178],[0,0],[-0.026,0.024],[-0.023,-0.012],[-0.007,-0.009],[-0.009,-0.018],[-0.013,-0.127]],"o":[[-0.04,0.031],[0,0],[-0.01,-0.178],[0,0],[0.022,-0.02],[0.01,0.005],[0.009,0.012],[0.017,0.032],[0.013,0.127]],"v":[[194.808,-230.377],[194.73,-230.363],[194.635,-230.553],[194.654,-230.78],[194.696,-230.855],[194.771,-230.859],[194.797,-230.837],[194.823,-230.792],[194.862,-230.607]],"c":true}]}],"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 16","np":1,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[19.497,-10.412],[-2.09,-19.636],[-11.707,-0.981],[-14.375,23.627],[-0.061,0.498]],"o":[[-17.653,9.427],[2.09,19.636],[19.382,1.625],[6.975,-11.464],[-7.253,-23.059]],"v":[[86.403,-42.677],[62.773,4.63],[91.979,30.065],[149.125,-5.127],[152.753,-28.191]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[19.497,-10.412],[-2.09,-19.636],[-11.707,-0.981],[-14.375,23.627],[-0.061,0.498]],"o":[[-17.653,9.427],[2.09,19.636],[19.382,1.625],[6.975,-11.464],[-5.613,-26.672]],"v":[[116.653,-49.677],[93.023,-2.37],[122.229,23.065],[179.375,-12.127],[175.753,-29.691]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[21.958,2.531],[3.911,-19.356],[-10.87,-4.456],[-8.703,7.41],[-0.208,0.457]],"o":[[-11.227,-1.294],[-3.911,19.356],[17.997,7.377],[10.217,-8.699],[2.666,-27.126]],"v":[[133.727,-70.706],[108.49,-48.458],[133.87,-8.544],[182.257,-16.035],[184.084,-33.874]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[21.508,5.094],[3.911,-19.356],[-10.87,-4.456],[-8.703,7.41],[-0.208,0.457]],"o":[[-21.508,-5.094],[-3.911,19.356],[17.997,7.377],[10.217,-8.699],[10.166,-17.251]],"v":[[163.227,-72.956],[111.74,-40.208],[129.12,-6.794],[179.507,-13.035],[184.084,-33.874]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[12.949,3.067],[2.354,-11.653],[-10.063,-5.215],[-5.24,4.461],[-0.125,0.275]],"o":[[-12.949,-3.067],[-2.354,11.653],[4.274,2.215],[6.151,-5.237],[14.125,-15.725]],"v":[[163.128,-65.433],[131.979,-46.545],[144.851,-22.59],[167.436,-22.885],[172.75,-33.4]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5.5,1.25],[1,-4.75],[-4.75,-0.75],[-2.094,1.272],[0,1.586]],"o":[[-5.5,-1.25],[-1,4.75],[2.239,0.354],[2.349,-1.427],[0,-3]],"v":[[162.75,-74.25],[151.75,-66.5],[159.5,-57.5],[166.405,-59.232],[170.5,-64.25]],"c":true}]},{"t":24,"s":[{"i":[[0.07,0.016],[0.013,-0.06],[-0.06,-0.009],[-0.027,0.016],[0,0.02]],"o":[[-0.07,-0.016],[-0.013,0.06],[0.028,0.004],[0.03,-0.018],[0,-0.038]],"v":[[165.902,-76.353],[165.763,-76.255],[165.861,-76.141],[165.948,-76.163],[166,-76.226]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 15","np":1,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[22.19,-4.227],[-2.244,-13.318],[-9.957,-4.849],[-7.675,2.348],[-4.773,2.735],[-2.688,4.127],[-2.703,4.56],[3.226,5.97]],"o":[[-12.994,2.476],[2.218,13.162],[11.293,7.901],[5.656,-1.73],[3.603,-2.065],[2.436,-3.74],[4.724,-7.969],[-7.903,-14.625]],"v":[[-9.94,-106.523],[-38.468,-58.662],[-8.543,-23.901],[20.344,-23.27],[29.211,-38.226],[42.743,-48.042],[51.757,-59.122],[50.681,-96.633]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[20.853,6.188],[0.844,-11.669],[-1.039,-1.255],[-5.927,-5.411],[-5.501,0],[-4.3,2.401],[-2.552,0.467],[-0.17,6.784]],"o":[[-34.755,-10.313],[-0.746,10.322],[0.734,0.388],[4.279,3.907],[4.152,0],[4.357,-2.433],[9.113,-1.668],[0.415,-16.619]],"v":[[52.255,-110.437],[6.996,-85.822],[16.516,-67.388],[28.927,-56.089],[44.101,-49.647],[66.057,-52.7],[79.387,-57.832],[78.585,-84.237]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[20.853,6.188],[0.844,-11.669],[-1.039,-1.255],[-5.927,-5.411],[-5.501,0],[-4.3,2.401],[-2.552,0.467],[-0.17,6.784]],"o":[[-34.755,-10.313],[-0.746,10.322],[0.734,0.388],[4.279,3.907],[4.152,0],[4.357,-2.433],[9.113,-1.668],[0.415,-16.619]],"v":[[57.505,-112.687],[11.996,-85.822],[25.016,-76.888],[34.177,-58.339],[49.351,-51.897],[71.307,-54.95],[84.637,-60.082],[83.835,-86.487]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[21.509,3.242],[0.844,-11.669],[-1.039,-1.255],[-5.927,-5.411],[-5.501,0],[-4.3,2.401],[-2.552,0.467],[-0.17,6.784]],"o":[[-17.005,-2.563],[-0.746,10.322],[0.734,0.388],[4.279,3.907],[4.152,0],[4.357,-2.433],[9.113,-1.668],[0.415,-16.619]],"v":[[57.505,-112.687],[27.746,-86.072],[33.516,-72.388],[33.927,-61.339],[51.101,-53.647],[64.807,-55.7],[73.137,-66.832],[83.835,-86.487]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5.75,-0.25],[-0.75,-7],[-1.142,-2.496],[-1.348,-1.331],[-3.204,0],[-2.519,0.845],[-2.284,1.922],[-0.105,4.219]],"o":[[-5.75,0.25],[0.272,2.536],[0.822,1.797],[1.948,1.924],[2.308,0],[2.844,-0.954],[3.143,-2.645],[0.25,-10]],"v":[[60.75,-113.75],[45.25,-103],[47.33,-95.202],[50.569,-90.417],[58.25,-87.25],[65.643,-88.537],[73.554,-92.879],[79,-103.25]],"c":true}]},{"t":24,"s":[{"i":[[0.124,-0.005],[-0.016,-0.151],[-0.025,-0.054],[-0.029,-0.029],[-0.069,0],[-0.054,0.018],[-0.049,0.041],[-0.002,0.091]],"o":[[-0.124,0.005],[0.006,0.055],[0.018,0.039],[0.042,0.042],[0.05,0],[0.061,-0.021],[0.068,-0.057],[0.005,-0.216]],"v":[[65.351,-110.408],[65.016,-110.176],[65.061,-110.008],[65.131,-109.905],[65.297,-109.836],[65.456,-109.864],[65.627,-109.958],[65.745,-110.182]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 14","np":1,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[7.826,-4.646],[3.961,-9.15],[-0.479,-6.402],[-9.897,-11.999],[-17.187,5.575],[-3.221,11.042],[6.351,7.674]],"o":[[-7.826,4.646],[-4.121,9.519],[0.479,6.402],[9.897,11.999],[17.187,-5.575],[3.221,-11.042],[-6.351,-7.674]],"v":[[-107.814,180.826],[-133.249,191.17],[-143.701,231.067],[-132.527,256.967],[-91.484,254.589],[-66.161,231.195],[-76.548,193.768]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[8.81,-2.285],[6.351,-7.686],[1.321,-6.283],[-6.167,-14.279],[-18.06,0.571],[-6.167,9.71],[3.964,9.139]],"o":[[-8.81,2.285],[-6.607,7.996],[-1.321,6.283],[6.167,14.279],[18.06,-0.571],[6.167,-9.71],[-3.964,-9.139]],"v":[[-90.905,152.966],[-118.214,155.822],[-139.357,191.234],[-135.833,219.221],[-95.75,228.36],[-64.917,212.938],[-64.476,174.099]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[6.799,-1.549],[4.902,-5.21],[1.02,-4.259],[-4.759,-9.679],[-13.938,0.387],[-4.759,6.582],[3.06,6.195]],"o":[[-6.799,1.549],[-5.099,5.42],[-1.02,4.259],[4.759,9.679],[13.938,-0.387],[4.759,-6.582],[-3.06,-6.195]],"v":[[-95.566,163.41],[-116.643,165.346],[-132.96,189.35],[-130.241,208.321],[-99.306,214.516],[-75.509,204.062],[-75.169,177.735]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[5,-1],[3.605,-3.364],[0.75,-2.75],[-3.5,-6.25],[-10.25,0.25],[-3.5,4.25],[2.25,4]],"o":[[-5,1],[-3.75,3.5],[-0.75,2.75],[3.5,6.25],[10.25,-0.25],[3.5,-4.25],[-2.25,-4]],"v":[[-87.5,151.25],[-103,152.5],[-115,168],[-113,180.25],[-90.25,184.25],[-72.75,177.5],[-72.5,160.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5,-1],[3.605,-3.364],[0.75,-2.75],[-3.5,-6.25],[-10.25,0.25],[-3.5,4.25],[2.25,4]],"o":[[-5,1],[-3.75,3.5],[-0.75,2.75],[3.5,6.25],[10.25,-0.25],[3.5,-4.25],[-2.25,-4]],"v":[[-77,126.25],[-92.5,127.5],[-104.5,143],[-102.5,155.25],[-79.75,159.25],[-62.25,152.5],[-62,135.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[4.64,0.341],[4.401,-3.422],[0.38,-4.397],[-3.315,-2.889],[-5.611,1.037],[-2.31,2.912],[1.167,2.074]],"o":[[-4.787,-0.352],[-3.375,2.625],[-0.278,3.213],[2.8,2.44],[5.228,-0.966],[1.774,-2.236],[-1.167,-2.074]],"v":[[-73.338,125.852],[-86,128.625],[-90.222,137.287],[-86.685,145.639],[-74.889,148.213],[-64.69,141.963],[-64.435,132.648]],"c":true}]},{"t":25.2,"s":[{"i":[[0.185,-0.037],[0.133,-0.125],[0.028,-0.102],[-0.13,-0.231],[-0.38,0.009],[-0.13,0.157],[0.083,0.148]],"o":[[-0.185,0.037],[-0.139,0.13],[-0.028,0.102],[0.13,0.231],[0.38,-0.009],[0.13,-0.157],[-0.083,-0.148]],"v":[[-70.926,130.954],[-71.5,131],[-71.944,131.575],[-71.87,132.028],[-71.028,132.176],[-70.38,131.926],[-70.37,131.297]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":7.2,"s":[0,0],"h":1},{"t":8.4,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 13","np":1,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[24.395,-3.579],[-0.4,-14.825],[-23.995,2.556],[-1.2,11.758]],"o":[[-24.395,3.579],[0.4,14.825],[23.995,-2.556],[1.2,-11.758]],"v":[[69.726,83.829],[35.461,114.659],[67.455,150.444],[104.989,125.709]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[24.395,-3.579],[-0.4,-14.825],[-23.995,2.556],[-1.2,11.758]],"o":[[-24.395,3.579],[0.4,14.825],[23.995,-2.556],[1.2,-11.758]],"v":[[77.976,92.079],[43.711,122.909],[75.705,158.694],[113.239,133.959]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[22.551,-3.308],[-0.37,-13.704],[-22.181,2.363],[-1.109,10.869]],"o":[[-22.551,3.308],[0.37,13.704],[22.181,-2.363],[1.109,-10.869]],"v":[[91.794,78.058],[60.12,106.557],[89.694,139.637],[124.391,116.772]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[18.263,-2.275],[-0.299,-9.425],[-17.964,1.625],[-0.898,7.475]],"o":[[-18.263,2.275],[0.299,9.425],[17.964,-1.625],[0.898,-7.475]],"v":[[108.952,70.525],[83.299,90.125],[107.251,112.875],[135.352,97.15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[15.25,-1.75],[-0.25,-7.25],[-15,1.25],[-0.75,5.75]],"o":[[-15.25,1.75],[0.25,7.25],[15,-1.25],[0.75,-5.75]],"v":[[114,61.5],[94.25,76],[114.25,93.5],[135,80.25]],"c":true}]},{"t":25.2,"s":[{"i":[[0.274,-0.031],[-0.004,-0.13],[-0.269,0.022],[-0.013,0.103]],"o":[[-0.274,0.031],[0.004,0.13],[0.269,-0.022],[0.013,-0.103]],"v":[[116.859,56.217],[116.505,56.478],[116.864,56.792],[117.237,56.554]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 12","np":1,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[11.765,-1.232],[2.886,-2.465],[2.325,-3.877],[0.628,-3.955],[0,0],[5.488,-4.364],[-3.396,-4.04],[-0.378,-14.312],[0,0],[-20.052,-20.694],[-2.657,-6.08],[0,0],[-1.142,-15.963],[-32.962,-25.988],[-2.318,4.72],[-2.507,6.398],[0,0],[-0.334,24.061],[0,0],[11.918,20.894],[0.785,1.247],[4.382,4.186],[0,0],[31.795,4.928]],"o":[[-9.437,0.988],[-3.842,3.282],[-3.04,5.069],[-0.951,5.989],[0,0],[-6.07,4.827],[1.141,1.357],[0.543,20.568],[0,0],[4.697,4.847],[4.992,11.425],[0,0],[-0.005,0.563],[19.126,15.08],[4.017,-8.18],[3.185,-8.127],[0,0],[0.223,-16.037],[0,0],[-10.507,-18.419],[-1.15,-1.825],[-5.644,-5.392],[0,0],[-4.782,-0.741]],"v":[[-152.765,-232.518],[-167.393,-224.752],[-172.123,-210.874],[-178.438,-198.03],[-176.488,-187.648],[-185.268,-184.87],[-188.837,-165.912],[-191.293,-145.818],[-169.545,-121.198],[-180.928,-84.533],[-183.742,-60.925],[-166.062,-49.813],[-148.921,-45.458],[-118.319,-20.189],[-63.118,-27.538],[-42.312,-38.602],[-23.523,-61.478],[-26.487,-86.588],[-21.151,-114.618],[-39.243,-152.831],[-70.53,-172.122],[-76.978,-186.25],[-97.896,-196.65],[-138.837,-227.801]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[12.034,2.407],[5.333,-0.671],[4.594,-2.134],[2.309,-1.78],[0,0],[6.119,-3.423],[-2.701,-4.535],[7.637,-3.265],[0,0],[-16.456,-23.654],[-5.243,-4.066],[0,0],[1.445,-15.939],[-28.344,-30.959],[-3.048,4.285],[-3.505,5.91],[0,0],[-4.206,23.692],[0,0],[1.448,17.282],[0.574,1.357],[3.65,4.838],[0,0],[19.235,15.389]],"o":[[-6.371,-1.274],[-6.475,0.815],[-4.89,2.271],[-1.783,1.374],[0,0],[-6.768,3.786],[0.907,1.523],[-4.622,1.976],[0,0],[3.854,5.54],[10.934,8.48],[0,0],[-0.096,0.555],[16.447,17.964],[5.283,-7.426],[4.453,-7.508],[0,0],[2.804,-15.792],[0,0],[-0.609,-7.268],[-0.841,-1.987],[-4.702,-6.231],[0,0],[-5.56,-4.449]],"v":[[-130.16,-238.232],[-147.771,-238.9],[-164.472,-234.052],[-175.388,-227.463],[-178.115,-225.167],[-185.732,-219.036],[-190.445,-196.797],[-196.137,-186.485],[-200.141,-172.832],[-206.794,-123.596],[-217.529,-101.681],[-182.922,-87.559],[-167.904,-70.055],[-144.447,-28.464],[-88.783,-26.824],[-75.49,-53.596],[-80.865,-93.357],[-76.724,-124.71],[-83.447,-146.609],[-73.948,-165.032],[-81.112,-172.576],[-82.4,-186.088],[-98.046,-189.047],[-104.315,-227.576]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[12.034,2.407],[4.969,-1.649],[3.954,-3.852],[1.839,-3.042],[0,0],[6.232,-3.214],[-2.701,-4.535],[7.637,-3.265],[0,0],[-11.97,-31.502],[-5.243,-4.066],[0,0],[1.445,-15.939],[-41.803,-3.786],[-3.048,4.285],[-3.505,5.91],[0,0],[-4.206,23.692],[0,0],[1.448,17.282],[0.574,1.357],[3.65,4.838],[0,0],[19.235,14.781]],"o":[[-6.371,-1.274],[-6.033,2.002],[-4.209,4.1],[-1.42,2.348],[0,0],[-19.908,10.266],[0.907,1.523],[-4.622,1.976],[0,0],[2.397,6.309],[10.934,8.48],[0,0],[-0.096,0.555],[6.955,0.63],[5.283,-7.426],[4.453,-7.508],[0,0],[2.804,-15.792],[0,0],[-0.609,-7.268],[-0.841,-1.987],[-4.702,-6.231],[0,0],[-5.56,-4.273]],"v":[[-130.41,-243.232],[-147.423,-242.293],[-162.407,-232.838],[-171.484,-221.313],[-173.615,-217.417],[-185.732,-218.036],[-201.695,-187.797],[-205.637,-174.235],[-204.891,-162.832],[-218.294,-120.096],[-210.779,-101.181],[-183.172,-92.559],[-168.154,-75.055],[-135.447,-49.714],[-112.783,-52.824],[-90.24,-69.346],[-88.615,-86.357],[-85.474,-112.21],[-92.697,-151.859],[-80.698,-174.282],[-86.362,-180.326],[-88.4,-191.088],[-98.296,-196.297],[-104.565,-232.865]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[6.613,1.196],[4.422,-0.742],[2.977,-2.17],[1.118,-1.787],[0,0],[13.447,-11.171],[-3.532,-3.922],[0.825,-2.404],[0,0],[-17.877,-28.567],[-5.935,-2.967],[0,0],[-13.144,-9.131],[-8.775,0.195],[-5.065,5.351],[0.249,7.31],[0,0],[0.489,24.058],[0,0],[5.058,15.23],[0.828,1.219],[3.458,4.088],[0,0],[12.601,7.044]],"o":[[-6.394,-1.157],[-5.369,0.901],[-3.168,2.31],[-0.863,1.379],[0,0],[-17.229,14.313],[1.186,1.317],[-1.632,4.754],[0,0],[3.58,5.721],[12.377,6.188],[0,0],[7.194,4.997],[12.518,-0.279],[7.415,-7.835],[-0.157,-4.617],[0,0],[-0.326,-16.036],[0,0],[-2.299,-6.922],[-1.212,-1.785],[-5.041,-5.96],[0,0],[-3.643,-2.036]],"v":[[-138.452,-212.541],[-154.597,-212.929],[-166.974,-207.904],[-173.233,-201.254],[-174.449,-198.953],[-202.197,-194.329],[-210.501,-155.477],[-209.118,-148.808],[-212.969,-145.083],[-218.873,-98.301],[-205.508,-84.984],[-179.299,-81.909],[-162.791,-57.911],[-132.671,-51.056],[-107.083,-60.579],[-98.804,-86.682],[-99.662,-94.46],[-91.174,-120.464],[-102.281,-139.311],[-92.031,-167.266],[-99.788,-175.965],[-102.708,-185.338],[-113.279,-190.334],[-123.283,-207.532]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[4.936,1.268],[3.091,-0.431],[1.768,-1.698],[0.482,-1.457],[0,0],[16.303,-13.991],[-3.532,-3.572],[0.825,-2.19],[0,0],[-17.877,-26.021],[-8.173,-2.309],[0,0],[-9.269,-7.414],[-10.978,2.297],[-3.034,2.263],[-0.062,2.286],[0,0],[11.424,60.726],[0,0],[11.14,5.06],[1.849,0.102],[0.201,-0.105],[0,0],[9.846,6.696]],"o":[[-4.887,-1.256],[-3.753,0.523],[-1.882,1.808],[-0.372,1.125],[0,0],[-16.303,13.991],[1.186,1.2],[-1.632,4.33],[0,0],[4.675,6.805],[11.138,3.147],[0,0],[7.706,6.163],[7.136,-1.493],[4.441,-3.313],[0.039,-1.444],[0,0],[-3.873,-20.589],[0,0],[-5.967,-2.71],[-1.206,-0.067],[-0.066,0.035],[0,0],[-2.846,-1.936]],"v":[[-149.952,-196.344],[-161.817,-197.38],[-169.916,-193.689],[-173.242,-188.359],[-173.699,-186.472],[-209.947,-183.399],[-215.751,-148.01],[-219.118,-143.073],[-218.969,-135.354],[-223.623,-97.979],[-202.342,-84.901],[-180.549,-81.681],[-165.407,-65.193],[-136.671,-56.31],[-121.834,-62.198],[-116.39,-71.391],[-116.662,-73.758],[-87.924,-125.226],[-115.531,-151.729],[-116.281,-172.411],[-127.472,-175.963],[-129.435,-175.719],[-129.529,-175.661],[-138.421,-191.4]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[4.541,1.065],[3.373,-0.781],[2.556,-2.162],[1.126,-1.764],[0,0],[15,-11.75],[-3.25,-3],[-1.383,-0.718],[0,0],[-21.75,-8],[-5.283,0.475],[0,0],[-5.789,-2.76],[-10.1,1.929],[-3.017,4.091],[-0.373,4.98],[0,0],[2,17.5],[0,0],[10.25,4.25],[3.049,-0.642],[0.545,-0.282],[0,0],[9.183,7.211]],"o":[[-4.496,-1.055],[-4.095,0.948],[-2.721,2.301],[-0.869,1.362],[0,0],[-15,11.75],[1.126,1.039],[2.609,1.356],[0,0],[9.205,3.386],[7.201,-0.647],[0,0],[4.812,2.294],[6.566,-1.254],[4.417,-5.99],[0.235,-3.145],[0,0],[-2,-17.5],[0,0],[-5.49,-2.276],[-1.99,0.419],[-0.179,0.093],[0,0],[-2.655,-2.084]],"v":[[-159,-189.75],[-170.786,-189.932],[-180.732,-184.859],[-186.464,-178.269],[-187.75,-176],[-222.25,-167.75],[-220,-129],[-216.066,-126.353],[-211,-124.25],[-195.5,-94.75],[-173.777,-91.274],[-163,-94.5],[-154.826,-87.939],[-132.75,-86],[-118.713,-94.69],[-112.587,-113.251],[-112.5,-118.5],[-98.25,-138],[-116.75,-153.75],[-122.5,-166.5],[-135.597,-167.973],[-139.479,-166.649],[-139.75,-166.5],[-148.332,-184.844]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.68,0.005],[2.525,-1.249],[1.705,-2.198],[0.644,-1.615],[0,0],[9.199,-12.155],[-3.067,-1.788],[-0.805,-0.629],[0,0],[-12.708,-13.22],[-2.645,-0.511],[0,0],[-4.687,-1.26],[-5.381,2.276],[-2.003,2.121],[-0.473,1.98],[0,0],[-6.425,10.381],[0,0],[10.145,12.845],[4.118,0.611],[0.879,-0.115],[0,0],[10.244,2.557]],"o":[[-3.644,-0.005],[-3.066,1.517],[-1.815,2.34],[-0.497,1.247],[0,0],[-9.199,12.155],[1.062,0.619],[1.519,1.188],[0,0],[2.473,2.572],[3.604,0.696],[0,0],[3.896,1.047],[3.972,-1.68],[2.932,-3.106],[0.299,-1.25],[0,0],[6.315,-10.203],[0,0],[-4.482,-5.675],[-2.688,-0.399],[-0.289,0.038],[0,0],[-2.961,-0.739]],"v":[[-184.07,-192.846],[-193.279,-190.801],[-200.356,-184.908],[-203.949,-178.589],[-204.65,-176.541],[-225.194,-164.553],[-224.218,-139.579],[-221.388,-137.646],[-218.913,-135.465],[-213.092,-115.328],[-204.97,-111.06],[-198.432,-110.919],[-190.709,-107.372],[-176.395,-108.264],[-167.6,-114.163],[-163.015,-122.407],[-162.699,-124.437],[-147.575,-134.631],[-143.277,-151.499],[-137.895,-175.095],[-151.97,-183.355],[-157.647,-183.457],[-158.091,-183.389],[-174.093,-191.623]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[2.481,0.004],[1.839,-0.89],[1.39,-1.565],[0.61,-1.15],[0,0],[5.192,-5.22],[-0.392,-2.361],[-0.407,-0.912],[0,0],[-8.567,-8.912],[-2.034,-1.213],[0,0],[-3.794,-0.347],[-3.628,1.535],[-1.529,0.915],[-0.569,0.615],[0,0],[-4.332,6.998],[0,0],[-0.154,6.636],[2.063,1.1],[0.552,0.192],[0,0],[6.75,2.203]],"o":[[-2.456,-0.003],[-2.233,1.08],[-1.479,1.666],[-0.471,0.888],[0,0],[-7.247,7.286],[0.168,1.011],[0.769,1.721],[0,0],[1.667,1.734],[2.771,1.653],[0,0],[3.154,0.289],[2.678,-1.133],[2.239,-1.339],[0.359,-0.389],[0,0],[4.257,-6.878],[0,0],[0.048,-2.069],[-1.346,-0.718],[-0.181,-0.063],[0,0],[-1.951,-0.637]],"v":[[-192.218,-202.604],[-198.651,-201.147],[-204.067,-196.951],[-207.179,-192.452],[-207.876,-190.994],[-221.192,-186.78],[-225.084,-169.874],[-224.143,-166.922],[-222.46,-163.892],[-213.764,-154.008],[-207.82,-149.51],[-202.667,-146.833],[-196.128,-145.497],[-185.468,-146.898],[-179.233,-149.994],[-175.257,-153.002],[-174.777,-153.604],[-170.337,-164.929],[-171.9,-178.637],[-167.589,-188.137],[-171.814,-192.97],[-174.996,-194.357],[-175.28,-194.453],[-185.566,-201.552]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[1.013,0.001],[0.782,-0.113],[0.623,-0.199],[0.29,-0.146],[0,0],[2.12,-2.132],[-0.16,-0.964],[-0.166,-0.373],[0,0],[-3.499,-3.64],[-0.746,-0.453],[0,0],[-1.549,-0.142],[-1.482,0.627],[-0.675,0.374],[-0.302,0.251],[0,0],[-0.884,2.932],[0,0],[1.364,2.404],[0.583,0.671],[0.135,0.143],[0,0],[3.032,0.597]],"o":[[-1.003,-0.001],[-0.95,0.137],[-0.663,0.212],[-0.224,0.113],[0,0],[-2.959,2.976],[0.068,0.413],[0.314,0.703],[0,0],[0.681,0.708],[1.017,0.617],[0,0],[1.288,0.118],[1.094,-0.463],[0.988,-0.547],[0.191,-0.159],[0,0],[0.953,-3.163],[0,0],[-0.417,-0.735],[-0.381,-0.438],[-0.044,-0.047],[0,0],[-0.877,-0.172]],"v":[[-200.705,-209.381],[-203.383,-209.197],[-205.743,-208.664],[-207.172,-208.092],[-207.508,-207.906],[-213.456,-203.633],[-214.127,-196.014],[-213.743,-194.808],[-213.056,-193.571],[-209.096,-189.33],[-206.826,-187.572],[-204.972,-186.604],[-202.302,-186.059],[-197.948,-186.631],[-195.316,-187.895],[-193.444,-189.123],[-193.174,-189.369],[-189.829,-193.382],[-188.834,-199.695],[-190.136,-203.881],[-191.862,-206.179],[-192.698,-207.103],[-192.767,-207.175],[-197.857,-209.095]],"c":true}]},{"t":31.2,"s":[{"i":[[-0.003,0],[-0.002,0],[-0.002,0.001],[-0.001,0],[0,0],[-0.006,0.006],[0,0.003],[0.001,0.001],[0,0],[0.011,0.011],[0.002,0.001],[0,0],[0.005,0],[0.005,-0.002],[0.002,-0.001],[0.001,-0.001],[0,0],[0.003,-0.009],[0,0],[-0.004,-0.007],[-0.002,-0.002],[0,0],[0,0],[-0.009,-0.002]],"o":[[0.003,0],[0.003,0],[0.002,-0.001],[0.001,0],[0,0],[0.009,-0.009],[0,-0.001],[-0.001,-0.002],[0,0],[-0.002,-0.002],[-0.003,-0.002],[0,0],[-0.004,0],[-0.003,0.001],[-0.003,0.002],[-0.001,0],[0,0],[-0.003,0.01],[0,0],[0.001,0.002],[0.001,0.001],[0,0],[0,0],[0.003,0.001]],"v":[[-208.464,-207.137],[-208.456,-207.138],[-208.448,-207.139],[-208.444,-207.141],[-208.443,-207.141],[-208.425,-207.154],[-208.423,-207.178],[-208.424,-207.181],[-208.426,-207.185],[-208.438,-207.198],[-208.445,-207.203],[-208.451,-207.206],[-208.459,-207.208],[-208.472,-207.206],[-208.48,-207.202],[-208.486,-207.199],[-208.487,-207.198],[-208.497,-207.186],[-208.5,-207.166],[-208.496,-207.154],[-208.491,-207.147],[-208.488,-207.144],[-208.488,-207.144],[-208.472,-207.138]],"c":true}]}],"ix":2},"nm":"Path 28","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":30,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":1,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[18.8,2.55],[4.4,-10.1],[-0.204,0],[-2.635,-12.455],[0,0],[-7.853,-2.541],[0,0],[-5.45,-4.8],[0,0],[-17.835,-1.411],[-41.5,17],[0,0],[-1.143,12.819],[12.739,5.935],[0,0],[13.343,9.406],[0,0]],"o":[[-24.03,-3.259],[-6.167,12.35],[0,0],[2.75,13],[4.85,5.2],[6.8,2.2],[0,0],[3.625,3.192],[0,0],[1.547,0.122],[19.224,-7.875],[0,0],[1.737,-19.482],[-20.075,-9.353],[0,0],[-15.25,-10.75],[0,0]],"v":[[-175.55,-78.3],[-218.9,-73.9],[-217.55,-51.5],[-220.25,-27.75],[-209.1,-5.45],[-191.3,4.3],[-179.15,6.75],[-172.8,14.55],[-163,16.4],[-144.297,36.628],[-96.75,39],[-85,6.25],[-75,-14],[-84.5,-42.05],[-108.4,-44.05],[-118.55,-64.8],[-156.9,-71.1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[24.25,0],[6.519,-15.973],[-0.204,0],[-2.635,-12.455],[0,0],[-4.75,-6.75],[0,0],[-14,-3.5],[0,0],[-17.853,1.172],[-8.599,10.384],[0,0],[-6.25,11.25],[7.272,13.505],[0,0],[13.343,9.406],[0,0]],"o":[[-24.25,0],[-6.836,16.75],[0,0],[2.75,13],[-1.5,1.5],[7.025,9.983],[0,0],[7.53,1.883],[0,0],[10.63,-0.698],[13.25,-16],[0,0],[6.25,-11.25],[-10.5,-19.5],[0,0],[-15.25,-10.75],[0,0]],"v":[[-210.75,-109.75],[-250.5,-83.5],[-243.25,-60.5],[-242.75,-47],[-231.75,-32],[-228,-1.75],[-209.5,12.75],[-196.75,21.25],[-176.75,33.5],[-158.147,36.328],[-116.5,27],[-106,-4.5],[-95,-24.5],[-109.5,-60.5],[-129,-78.25],[-146.25,-94],[-183.5,-96.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[24.25,0],[0.25,-17.25],[0,0],[-2.635,-12.455],[0,0],[-4.75,-6.75],[0,0],[-14,-3.5],[0,0],[-17.853,1.172],[-8.599,10.384],[0,0],[-6.25,11.25],[7.272,13.505],[0,0],[13.343,9.406],[0,0]],"o":[[-24.25,0],[-0.25,17.25],[0,0],[2.75,13],[-1.5,1.5],[7.025,9.983],[0,0],[7.53,1.883],[0,0],[10.63,-0.698],[13.25,-16],[0,0],[6.25,-11.25],[-10.5,-19.5],[0,0],[-15.25,-10.75],[0,0]],"v":[[-224.5,-109],[-258.75,-80.5],[-247.5,-51],[-246.25,-34],[-239.25,-19.5],[-233.75,-0.5],[-220,12.25],[-206.75,18.75],[-194,27.5],[-166.147,33.828],[-137,26],[-130.25,-10.75],[-116.75,-27.75],[-122.5,-57],[-145.75,-75.75],[-164,-89.25],[-191.5,-99]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[24.25,0],[0.25,-17.25],[0,0],[-2.635,-12.455],[0,0],[-4.75,-6.75],[0,0],[-14,-3.5],[0,0],[-17.853,1.172],[-8.599,10.384],[0,0],[-6.25,11.25],[7.272,13.505],[0,0],[13.343,9.406],[0,0]],"o":[[-24.25,0],[-0.25,17.25],[0,0],[2.75,13],[-1.5,1.5],[7.025,9.983],[0,0],[7.53,1.883],[0,0],[10.63,-0.698],[13.25,-16],[0,0],[6.25,-11.25],[-10.5,-19.5],[0,0],[-15.25,-10.75],[0,0]],"v":[[-224.5,-109],[-267.25,-73.75],[-255,-45.25],[-257.25,-33.25],[-245,-12.5],[-241.5,4.75],[-224.5,19],[-210.25,27.25],[-197.25,25],[-169.647,29.828],[-146.75,19.25],[-142,-6.5],[-131.5,-23],[-130.75,-53],[-153.25,-68.25],[-164,-89.25],[-191.5,-99]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[24.25,0],[0,-8.5],[0,0],[-1.343,-12.659],[0,0],[-7.701,-9.418],[0,0],[-22.481,-1.183],[0,0],[-3.145,0.097],[-8.599,10.384],[0,0],[-6.25,11.25],[7.272,13.505],[0,0],[13.343,9.406],[0,0]],"o":[[-24.25,0],[0,8.5],[0,0],[1.75,16.5],[-1.063,-0.532],[14.604,17.86],[0,0],[14.25,0.75],[0,0],[10.647,-0.328],[13.25,-16],[0,0],[6.25,-11.25],[-10.5,-19.5],[0,0],[-15.25,-10.75],[0,0]],"v":[[-230.25,-115.75],[-260,-99.5],[-256.75,-86],[-268.75,-65.25],[-257,-45.25],[-251,-8.5],[-226.75,12.75],[-203.5,23.5],[-184.25,15.5],[-171.897,16.828],[-148.75,1.5],[-149.75,-30.75],[-127,-37.25],[-126.5,-66],[-155.25,-79],[-166,-100],[-196.25,-103.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[24.25,0],[0,-8.5],[0,0],[-4.25,-12],[0,0],[-5,-7.5],[0,0],[-29.204,-1.659],[0,0],[-3.131,-0.308],[-8.599,10.384],[0,0],[-6.25,11.25],[14.5,5],[0,0],[8.5,7.5],[0,0]],"o":[[-24.25,0],[0,8.5],[0,0],[4.25,12],[0,0],[5,7.5],[0,0],[22,1.25],[0,0],[5.79,0.569],[13.25,-16],[0,0],[6.25,-11.25],[-14.5,-5],[0,0],[-8.5,-7.5],[0,0]],"v":[[-232.75,-128.25],[-266.25,-103.5],[-260.5,-89.75],[-262.25,-66.5],[-253.25,-53],[-254.5,-34.75],[-242,-26],[-216.25,-2.5],[-188,-13.75],[-182.897,-12.672],[-158.75,-23.5],[-151.75,-52.75],[-131,-65.25],[-144.5,-95.25],[-175,-100.5],[-173.75,-119.5],[-206.25,-122.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[14.664,1.76],[0,-8.5],[0,0],[-5.577,-16.986],[0,0],[-5,-7.5],[0,0],[-15.856,-2.478],[0,0],[-7.014,-4.733],[-8.5,11.25],[0,0],[-6.25,11.25],[14.5,5],[0,0],[8.914,7.003],[0,0]],"o":[[-18.75,-2.25],[0,8.5],[0,0],[5.5,16.75],[0,0],[5,7.5],[0,0],[8,1.25],[0,0],[7.095,4.787],[7.535,-9.973],[0,0],[6.25,-11.25],[-14.5,-5],[0,0],[-7,-5.5],[0,0]],"v":[[-244.75,-127],[-270.75,-108],[-265.75,-93.25],[-271.25,-68.5],[-256,-54],[-251.75,-44.25],[-240.5,-36.5],[-223.75,-28.25],[-209.5,-32.25],[-203.055,-18.918],[-171.5,-23.75],[-181.75,-49],[-174.25,-59],[-185.75,-88.5],[-203.75,-91.5],[-206.75,-104],[-220.75,-105.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[10.417,4.435],[0.641,-13.462],[0,0],[-4.278,-12.367],[0,0],[-3.836,-5.46],[0,0],[-3.888,0.217],[0,0],[-5.281,3.597],[-6.52,8.191],[0,0],[-2.858,3.676],[6.712,9.582],[0,0],[9.321,-4.133],[0,0]],"o":[[-18.529,-7.888],[-0.335,7.029],[0,0],[4.219,12.195],[0,0],[3.836,5.46],[0,0],[3.356,-0.187],[0,0],[5.987,-4.078],[5.78,-7.261],[0,0],[4.39,-5.646],[-6.824,-9.742],[0,0],[-6.123,2.715],[0,0]],"v":[[-240.221,-140.112],[-269.915,-123.779],[-261.83,-108.79],[-270.549,-92.771],[-260.535,-82.214],[-251.84,-76.616],[-240.211,-68.473],[-229.362,-65.467],[-222.43,-67.129],[-213.237,-71.672],[-203.28,-79.941],[-200.393,-88.324],[-190.89,-92.854],[-190.462,-115.832],[-201.02,-125.516],[-217.571,-125.117],[-228.06,-118.141]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[2.23,-0.201],[2.838,-7.443],[0,0],[-2.529,-7.309],[0,0],[-3.733,-1.272],[0,0],[-2.274,-0.359],[0,0],[-3.121,2.126],[-3.854,4.841],[0,0],[-1.689,2.172],[5.984,3.463],[0,0],[5.509,-2.443],[0,0]],"o":[[-4.007,0.362],[-1.527,4.006],[0,0],[2.493,7.207],[0,0],[5.992,2.042],[0,0],[4.457,0.703],[0,0],[3.538,-2.41],[3.416,-4.291],[0,0],[2.595,-3.337],[-6.533,-3.78],[0,0],[-3.619,1.605],[-3.128,-2.433]],"v":[[-252.716,-140.001],[-267.163,-130.792],[-264.851,-120.592],[-269.299,-107.59],[-263.631,-99.101],[-256.992,-95.042],[-249.619,-91.98],[-242.957,-88.453],[-233.86,-87.186],[-224.177,-90.621],[-215.793,-98.008],[-210.586,-106.712],[-203.72,-114.14],[-208.967,-128.97],[-220.706,-133.693],[-228.329,-136.867],[-239.369,-135.427]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31.2,"s":[{"i":[[3.759,-1.739],[1.51,-4.153],[0,0],[-1.462,-4.306],[0,0],[-2.12,-0.737],[0,0],[-1.256,-0.355],[0,0],[-1.022,1.912],[-2.164,2.873],[0,0],[-2.078,4.123],[1.757,3.65],[0,0],[3.096,0.86],[0,0]],"o":[[-3.069,1.42],[-0.861,2.367],[0,0],[1.442,4.246],[0,0],[3.403,1.183],[0,0],[2.154,0.608],[0,0],[1.023,-1.914],[1.918,-2.547],[0,0],[1.123,-2.227],[-1.743,-3.623],[0,0],[-2.168,-0.602],[-1.782,-1.425]],"v":[[-259.009,-139.136],[-266.886,-132.091],[-267.985,-127.024],[-267.655,-117.806],[-266.284,-113.69],[-262.257,-109.944],[-257.567,-108.415],[-254.154,-106.733],[-248.495,-105.77],[-242.148,-108.711],[-238.781,-114.896],[-236.935,-120.436],[-231.672,-125.998],[-231.978,-133.194],[-238.899,-136.649],[-242.708,-139.556],[-249.377,-139.82]],"c":true}]},{"t":33.6,"s":[{"i":[[-0.008,0.004],[-0.003,0.008],[0,0],[0.003,0.009],[0,0],[0.004,0.001],[0,0],[0.003,0.001],[0,0],[0.002,-0.004],[0.004,-0.006],[0,0],[0.004,-0.008],[-0.004,-0.007],[0,0],[-0.006,-0.002],[0,0]],"o":[[0.006,-0.003],[0.002,-0.005],[0,0],[-0.003,-0.009],[0,0],[-0.007,-0.002],[0,0],[-0.004,-0.001],[0,0],[-0.002,0.004],[-0.004,0.005],[0,0],[-0.002,0.005],[0.004,0.007],[0,0],[0.004,0.001],[0.004,0.003]],"v":[[-256.311,-134.975],[-256.296,-134.993],[-256.292,-135.002],[-256.295,-135.022],[-256.297,-135.03],[-256.306,-135.038],[-256.315,-135.041],[-256.322,-135.044],[-256.333,-135.046],[-256.348,-135.042],[-256.358,-135.031],[-256.366,-135.019],[-256.373,-135.005],[-256.371,-134.989],[-256.357,-134.978],[-256.346,-134.973],[-256.332,-134.971]],"c":true}]}],"ix":2},"nm":"Path 27","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":33.6,"s":[100,100],"h":1},{"t":34.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":1,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[4.677,-9.866],[0,0],[-0.393,-11.162],[-3.768,-6.909],[-17.626,-9.255],[0,0],[-10.686,15.097],[15.15,17.384],[0.945,0.316]],"o":[[-7.524,15.871],[0,0],[0.626,17.781],[0,0],[29.357,15.415],[0,0],[9.104,-12.862],[-27.747,-31.838],[-4.116,-1.087]],"v":[[-47.427,-162.884],[-52.357,-133.002],[-60.275,-116.429],[-32.506,-95.119],[-11.107,-60.165],[14.518,-79.102],[45.936,-95.847],[39.6,-153.134],[-17.695,-179.316]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[4.677,-9.866],[0,0],[-0.874,-11.135],[0,0],[-19.335,-4.74],[0,0],[-10.686,15.097],[15.15,17.384],[0.945,0.316]],"o":[[-7.524,15.871],[0,0],[1.525,19.429],[0,0],[23.107,5.665],[0,0],[9.104,-12.862],[-27.747,-31.838],[-4.116,-1.087]],"v":[[-40.677,-166.884],[-39.357,-145.252],[-46.525,-129.179],[-32.006,-107.369],[-10.857,-81.915],[16.518,-97.102],[47.186,-112.347],[38.35,-164.384],[-24.195,-175.316]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[17.5,1.5],[0,0],[8.5,-25],[0,0],[-19.75,-2.5],[0,0],[-11.75,10.5],[0.75,11.25],[0.25,4.25]],"o":[[-17.5,-1.5],[0,0],[-8.5,25],[0,0],[19.75,2.5],[0,0],[11.75,-10.5],[-0.75,-11.25],[-0.25,-4.25]],"v":[[26.75,-192],[0.25,-181.5],[-31.75,-162],[-19.75,-126],[-5.25,-110],[22.5,-119.75],[45.25,-126],[55.75,-155],[50.5,-173.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[11.562,1.075],[0,0],[10.426,-17.729],[0,0],[-20.762,-11.546],[0,0],[-7.335,9.841],[0.584,8.763],[1.313,3.72]],"o":[[-13.622,-1.267],[0,0],[-5.121,8.708],[0.201,0.1],[21.184,11.781],[0,0],[5.652,-7.584],[-0.584,-8.763],[-1.104,-3.127]],"v":[[27.188,-199.825],[4.046,-190.897],[-20.879,-181.708],[-21.532,-165.416],[-11.238,-133.454],[15.627,-137.548],[32.598,-145.666],[49.026,-167.755],[46.687,-185.72]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[7.357,0.684],[0,0],[6.635,-11.282],[0,0],[-15.609,-7.439],[0,0],[-4.668,6.262],[-0.812,6.844],[0.835,2.367]],"o":[[-8.668,-0.806],[0,0],[-3.259,5.541],[0.128,0.064],[11.287,5.379],[0,0],[3.597,-4.826],[0.659,-5.549],[-0.702,-1.99]],"v":[[31.854,-210.95],[17.128,-211.154],[-0.005,-199.739],[-3.443,-189.85],[7.403,-168.716],[26.407,-166.071],[39.592,-176.01],[43.841,-190.543],[43.148,-202.133]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[4.886,0.431],[0,0],[4.406,-7.108],[0,0],[-10.365,-4.687],[0,0],[-3.099,3.945],[-0.539,4.312],[0.555,1.492]],"o":[[-5.756,-0.508],[0,0],[-2.164,3.491],[0.085,0.04],[7.495,3.389],[0,0],[2.388,-3.04],[0.437,-3.496],[-0.466,-1.254]],"v":[[39.602,-225.498],[29.824,-225.627],[18.446,-218.435],[16.163,-212.204],[23.365,-198.889],[35.985,-197.223],[44.741,-203.485],[47.563,-212.641],[47.102,-219.943]],"c":true}]},{"t":31.2,"s":[{"i":[[0.209,0.014],[0,0],[0.189,-0.234],[0,0],[-0.444,-0.155],[0,0],[-0.133,0.13],[-0.023,0.142],[0.024,0.049]],"o":[[-0.247,-0.017],[0,0],[-0.093,0.115],[0.004,0.001],[0.321,0.112],[0,0],[0.102,-0.1],[0.019,-0.115],[-0.02,-0.041]],"v":[[44.89,-227.239],[44.471,-227.243],[43.983,-227.006],[43.886,-226.801],[44.194,-226.362],[44.735,-226.307],[45.11,-226.513],[45.231,-226.815],[45.212,-227.056]],"c":true}]}],"ix":2},"nm":"Path 25","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":31.2,"s":[100,100],"h":1},{"t":32.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":1,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[25.996,4.326],[0,0],[5.268,-8.676],[0,0],[14.391,-6.797],[-23.938,-20.657],[0,0],[-21.937,13.247],[0,0],[4.439,18.971],[2.725,13.001]],"o":[[-24.723,-4.114],[0,0],[-4.26,7.015],[0,0],[-25.851,12.21],[21.641,18.675],[0,0],[15.318,-9.25],[0,0],[-4.588,-19.608],[-0.238,-1.136]],"v":[[62.473,-187.386],[28.774,-183.382],[13.732,-168.574],[6.488,-143.532],[-18.399,-149.71],[-18.062,-70.843],[22.934,-61.737],[70.432,-72.5],[83.462,-97.443],[90.868,-121.984],[86.66,-159.229]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[25.996,4.326],[0,0],[6.644,-8.031],[0,0],[14.391,-6.797],[-23.938,-20.657],[0,0],[-21.937,13.247],[0,0],[4.162,19.034],[1.359,0.025]],"o":[[-24.723,-4.114],[0,0],[-5.232,6.324],[0,0],[-25.851,12.21],[21.641,18.675],[0,0],[15.318,-9.25],[0,0],[-4.868,-22.266],[-1.16,-0.021]],"v":[[46.473,-205.886],[14.274,-190.882],[3.482,-184.324],[-1.512,-173.282],[-20.399,-174.96],[-16.312,-97.593],[12.434,-88.737],[66.432,-88],[79.462,-112.943],[95.868,-164.234],[70.41,-187.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[33.388,4.06],[0,0],[9.768,-11.176],[0,0],[3.95,-15.418],[-23.938,-20.657],[0,0],[-21.937,13.247],[0,0],[-7.632,11.405],[20.09,4.979]],"o":[[-29.723,-3.614],[0,0],[-8.172,9.349],[0,0],[-4.601,17.96],[21.641,18.675],[0,0],[15.318,-9.25],[0,0],[7.632,-11.405],[-29.161,-7.227]],"v":[[49.473,-220.636],[14.524,-203.382],[-4.768,-195.574],[-9.262,-184.782],[-36.649,-170.21],[-14.062,-109.343],[30.184,-96.987],[60.682,-100.75],[84.212,-128.193],[106.118,-144.734],[93.16,-189.979]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[23.527,7.386],[0,0],[19.46,-12.976],[0,0],[3.95,-15.418],[-23.938,-20.657],[0,0],[-21.937,13.247],[0,0],[-7.632,11.405],[7.319,2.517]],"o":[[-15.481,-4.86],[0,0],[-20.732,13.824],[0,0],[-4.601,17.96],[21.641,18.675],[0,0],[15.318,-9.25],[0,0],[7.632,-11.405],[-28.41,-9.771]],"v":[[62.473,-222.886],[39.024,-219.382],[9.732,-213.824],[-10.262,-193.782],[-35.399,-172.21],[-11.812,-113.843],[32.434,-101.487],[62.932,-105.25],[86.462,-132.693],[108.368,-149.234],[101.41,-191.479]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[21,4.75],[0,0],[25.25,-15.25],[0,0],[-1.561,-17.398],[-14.767,-7.368],[0,0],[-9.155,0],[0,0],[-10.25,12.5],[1.271,8.419]],"o":[[-21,-4.75],[0,0],[-16.944,10.233],[0,0],[1.75,19.5],[13.212,6.592],[0,0],[8.5,0],[0,0],[10.25,-12.5],[-2,-13.25]],"v":[[76.5,-226.75],[44,-218.25],[-5.75,-221.75],[-18.5,-188],[-27.75,-166],[2.25,-130.25],[37.5,-125.75],[61,-122.75],[78.5,-126.25],[107.25,-145.75],[111,-185.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[21,4.75],[0,0],[17.5,-9.25],[0,0],[0.292,-10.964],[-14.767,-7.368],[0,0],[-9.155,0],[0,0],[-10.25,12.5],[-0.5,8.5]],"o":[[-21,-4.75],[0,0],[-17.5,9.25],[0,0],[-0.292,10.964],[13.212,6.592],[0,0],[8.5,0],[0,0],[10.25,-12.5],[0.5,-8.5]],"v":[[104.75,-244],[74.75,-230.5],[44.25,-228.25],[34.5,-204],[22.75,-180.75],[39.75,-153.75],[67.5,-153.75],[85.75,-149.5],[100,-158.75],[131.25,-168],[134.25,-207.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[21,4.75],[0,0],[17.5,-9.25],[0,0],[-4,-11.5],[-15,-2.25],[0,0],[-7.5,5.25],[0,0],[-10.25,12.5],[-0.5,8.5]],"o":[[-21,-4.75],[0,0],[-17.5,9.25],[0,0],[4,11.5],[15,2.25],[0,0],[7.5,-5.25],[0,0],[10.25,-12.5],[0.5,-8.5]],"v":[[123,-251.75],[83.25,-244.5],[56.75,-240],[45.5,-208],[42,-190.75],[67,-169.75],[86.5,-172],[103.5,-172],[111.5,-184],[134,-189],[144.25,-216.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[13.231,7.347],[0.293,0.195],[18.332,-7.467],[0,0],[-2.242,-10.269],[-11.684,-1.87],[0,0],[-8.74,2.724],[0,0],[-13.235,9.281],[-2.877,8.014]],"o":[[-13.231,-7.347],[0,0],[-23.753,9.675],[0,0],[2.598,11.895],[14.977,2.397],[0,0],[8.74,-2.724],[0,0],[5.884,-4.127],[2.441,-6.8]],"v":[[130.692,-249.25],[106.118,-252.415],[81.003,-257.675],[61.316,-226.853],[58.992,-213.231],[75.684,-193.13],[92.696,-194.852],[105.393,-192.189],[115.66,-200.693],[133.616,-205.623],[146.059,-222.7]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[5.761,5.184],[0.16,0.106],[10.003,-4.075],[0,0],[-1.224,-5.604],[-3.059,-1.429],[-1.471,-0.217],[-4.769,1.487],[0,0],[-6.456,6.012],[-0.093,4.645]],"o":[[-6.139,-5.524],[0,0],[-12.962,5.28],[0,0],[1.417,6.491],[2.836,1.324],[0,0],[4.769,-1.487],[0,0],[4.03,-3.752],[0.104,-5.211]],"v":[[134.92,-259.242],[121.783,-265.198],[105.895,-263.021],[93.924,-249.794],[92.884,-239.586],[99.559,-229.321],[107.73,-227.054],[117.114,-227.534],[123.217,-230.878],[136.06,-231.638],[141.396,-243.116]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[2.178,1.96],[0.06,0.04],[3.781,-1.54],[0,0],[-0.463,-2.118],[-1.156,-0.54],[-0.556,-0.082],[-1.884,-0.125],[0,0],[-2.44,2.272],[-0.035,1.756]],"o":[[-2.321,-2.088],[0,0],[-4.9,1.996],[0,0],[0.536,2.454],[1.072,0.501],[0,0],[1.611,0.107],[0,0],[1.523,-1.418],[0.039,-1.97]],"v":[[134.513,-265.358],[129.547,-267.609],[123.541,-266.786],[119.016,-261.786],[118.623,-257.927],[121.099,-253.906],[124.14,-252.529],[127.073,-252.001],[130.183,-252.037],[134.944,-254.923],[136.961,-259.262]],"c":true}]},{"t":31.2,"s":[{"i":[[0.087,0.099],[0.002,0.002],[0.151,-0.077],[0,0],[-0.018,-0.107],[-0.046,-0.027],[-0.022,-0.004],[-0.075,-0.006],[0,0],[-0.097,0.114],[-0.001,0.088]],"o":[[-0.092,-0.105],[0,0],[-0.195,0.1],[0,0],[0.021,0.123],[0.043,0.025],[0,0],[0.064,0.005],[0,0],[0.061,-0.071],[0.002,-0.099]],"v":[[131.651,-271.052],[131.453,-271.165],[131.214,-271.124],[131.034,-270.872],[131.018,-270.678],[131.117,-270.476],[131.238,-270.407],[131.355,-270.38],[131.479,-270.382],[131.668,-270.527],[131.748,-270.746]],"c":true}]}],"ix":2},"nm":"Path 24","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":31.2,"s":[100,100],"h":1},{"t":32.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":1,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[23.173,-1.077],[5.547,-16.412],[0,0],[-23.468,1.026],[0,0],[-9.387,9.745],[0,0],[11.947,11.796],[0,0]],"o":[[-11.131,0.517],[-5.547,16.412],[0,0],[23.468,-1.026],[0,0],[9.387,-9.745],[0,0],[-11.947,-11.796],[0,0]],"v":[[53.423,-194.673],[24.047,-169.265],[35.043,-135.738],[68.587,-104.776],[100.786,-118.055],[110.863,-138.741],[115.228,-157.718],[101.377,-177.069],[86.016,-181.685]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[17.65,-0.767],[4.225,-11.685],[0,0],[-17.875,0.73],[0,0],[-7.15,6.938],[0,0],[9.1,8.398],[0,0]],"o":[[-8.478,0.368],[-4.225,11.685],[0,0],[17.875,-0.73],[0,0],[7.15,-6.938],[0,0],[-9.1,-8.398],[0,0]],"v":[[50.35,-194.983],[27.975,-176.894],[36.35,-153.024],[61.9,-130.98],[86.425,-140.435],[94.1,-155.162],[97.425,-168.673],[86.875,-182.45],[75.175,-185.736]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5.75,-2.75],[3.25,-8],[0,0],[-13.75,0.5],[0,0],[-5.5,4.75],[0,0],[7,5.75],[0,0]],"o":[[-5.75,2.75],[-3.25,8],[0,0],[13.75,-0.5],[0,0],[5.5,-4.75],[0,0],[-7,-5.75],[0,0]],"v":[[57,-185.25],[43.25,-178],[47,-162],[60.5,-147.25],[69.75,-154.75],[82,-158.5],[82.25,-167.75],[78.75,-179.75],[69.75,-182]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[2.883,-0.771],[1.438,-2.971],[0,0],[-6.146,-0.596],[0,0],[-1.755,2.262],[0,0],[3.149,2.121],[0,0]],"o":[[-2.883,0.771],[-1.438,2.971],[0,0],[6.185,0.6],[0,0],[1.574,-2.029],[0,0],[-3.149,-2.121],[0,0]],"v":[[63.7,-188.453],[57.74,-184.764],[57.234,-178.261],[63.981,-173.465],[71.347,-174.203],[74.776,-177.016],[76.069,-180.475],[74.101,-185.594],[69.885,-187.946]],"c":true}]},{"t":26.4,"s":[{"i":[[0.096,-0.026],[0.048,-0.099],[0,0],[-0.205,-0.02],[0,0],[-0.058,0.075],[0,0],[0.105,0.071],[0,0]],"o":[[-0.096,0.026],[-0.048,0.099],[0,0],[0.206,0.02],[0,0],[0.052,-0.068],[0,0],[-0.105,-0.071],[0,0]],"v":[[68.548,-187.417],[68.35,-187.294],[68.333,-187.077],[68.558,-186.917],[68.803,-186.942],[68.918,-187.036],[68.961,-187.151],[68.895,-187.321],[68.755,-187.4]],"c":true}]}],"ix":2},"nm":"Path 23","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":1,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[6.5,1],[1.75,-13.25],[-11.75,-5.5],[-3.75,7],[3.25,8.75]],"o":[[-6.5,-1],[-1.75,13.25],[11.75,5.5],[3.75,-7],[-3.239,-8.722]],"v":[[115,-129],[90.75,-116.25],[102.5,-91],[131.5,-95.5],[132,-117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[7.401,1.078],[1.923,-14.744],[-13.399,-6.054],[-4.231,7.804],[3.743,9.713]],"o":[[-7.401,-1.078],[-1.923,14.744],[13.399,6.054],[4.231,-7.804],[-3.731,-9.682]],"v":[[124.713,-140.28],[97.186,-125.973],[110.687,-97.955],[143.662,-103.114],[144.119,-127.026]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[6.5,1],[1.75,-13.25],[-11.75,-5.5],[-3.75,7],[3.25,8.75]],"o":[[-6.5,-1],[-1.75,13.25],[11.75,5.5],[3.75,-7],[-3.239,-8.722]],"v":[[122.5,-141.75],[98.25,-129],[110,-103.75],[139,-108.25],[139.5,-129.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[6.5,1],[1.75,-13.25],[-11.75,-5.5],[-3.75,7],[4.75,8]],"o":[[-6.5,-1],[-1.75,13.25],[11.75,5.5],[3.75,-7],[-4.75,-8]],"v":[[123.75,-161],[104.25,-147.75],[114.5,-125.25],[140.75,-127.75],[145.75,-151]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[5.009,0.771],[1.349,-10.211],[-9.055,-4.238],[-2.89,5.394],[3.66,6.165]],"o":[[-5.009,-0.771],[-1.349,10.211],[9.055,4.238],[2.89,-5.394],[-3.66,-6.165]],"v":[[140.126,-195.479],[125.099,-185.269],[132.997,-167.93],[153.226,-169.856],[157.079,-187.773]],"c":true}]},{"t":26.4,"s":[{"i":[[0.577,0.089],[0.155,-1.176],[-1.043,-0.488],[-0.333,0.621],[0.422,0.71]],"o":[[-0.577,-0.089],[-0.155,1.176],[1.043,0.488],[0.333,-0.621],[-0.422,-0.71]],"v":[[151.876,-186.882],[150.145,-185.706],[151.055,-183.709],[153.385,-183.931],[153.828,-185.994]],"c":true}]}],"ix":2},"nm":"Path 22","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":1,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[8.055,-4.409],[-2.249,-13.54],[-9.499,-2.23],[-7.408,12.332],[13.221,9.952]],"o":[[-11.146,6.1],[1.688,10.164],[13.533,3.177],[7.276,-12.111],[-13.707,-10.317]],"v":[[61.695,-97.048],[47.749,-67.015],[65.232,-46.052],[98.661,-60.373],[91.974,-93.433]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[8.055,-4.409],[-2.249,-13.54],[-9.499,-2.23],[-7.408,12.332],[13.221,9.952]],"o":[[-11.146,6.1],[1.688,10.164],[13.533,3.177],[7.276,-12.111],[-13.707,-10.317]],"v":[[91.695,-100.548],[77.749,-70.515],[95.232,-49.552],[128.661,-63.873],[121.974,-96.933]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.244,-3.588],[-2.023,-11.02],[-8.543,-1.815],[-6.663,10.037],[11.891,8.099]],"o":[[-10.024,4.965],[1.518,8.272],[12.17,2.586],[6.543,-9.857],[-12.327,-8.397]],"v":[[90.399,-119.965],[77.857,-95.522],[93.58,-78.461],[123.643,-90.116],[117.629,-117.023]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[4.5,-4],[-2.5,-3.75],[-6.5,-0.25],[-2.5,6.75],[3.5,4.25]],"o":[[-4.5,4],[2.5,3.75],[6.5,0.25],[2.5,-6.75],[-3.5,-4.25]],"v":[[90.75,-133.5],[86.25,-117.25],[96.75,-101.75],[117,-109.5],[115.5,-130.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.569,-7.962],[-2.156,-2.325],[-3.931,2.343],[1.112,4.941],[7.289,0.777]],"o":[[-2.843,6.343],[4.084,4.405],[3.931,-2.343],[-1.112,-4.941],[-8.625,-0.92]],"v":[[107.968,-162.093],[112.041,-147.155],[129.926,-147.034],[137.779,-157.992],[125.375,-169.955]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[1.217,-3.078],[-0.735,-0.899],[-1.341,0.906],[0.379,1.91],[2.486,0.301]],"o":[[-0.97,2.452],[1.393,1.703],[1.341,-0.906],[-0.379,-1.91],[-2.942,-0.356]],"v":[[132.47,-180.229],[133.859,-174.453],[139.958,-174.406],[142.636,-178.644],[138.406,-183.269]],"c":true}]},{"t":28.8,"s":[{"i":[[0.068,-0.212],[-0.041,-0.062],[-0.075,0.062],[0.021,0.132],[0.138,0.021]],"o":[[-0.054,0.169],[0.077,0.117],[0.075,-0.062],[-0.021,-0.132],[-0.164,-0.025]],"v":[[144.679,-187.516],[144.756,-187.117],[145.095,-187.114],[145.244,-187.406],[145.009,-187.725]],"c":true}]}],"ix":2},"nm":"Path 21","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":1,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[15.375,-10.372],[4.119,-6.184],[2.828,-13.158],[-34.964,-17.486],[-1.008,-0.983],[-25.197,17.037],[-11.104,6.796],[0,0],[-12.69,3.934],[0,0],[42.828,12.161],[0,0]],"o":[[-16.97,11.449],[-4.469,6.708],[-3.101,14.429],[12.154,6.078],[10.171,9.915],[9.217,-6.232],[11.104,-6.796],[0,0],[12.69,-3.934],[0,0],[-23.761,-6.747],[0,0]],"v":[[16.129,-94.967],[-4.781,-60.876],[-8.444,-24.259],[-7.536,81.057],[11.4,94.085],[72.433,84.705],[97.452,39.368],[115.456,14.393],[124.595,-3.907],[144.487,-43.16],[100.499,-105.171],[54.594,-107.622]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[11.633,-8.607],[3.117,-5.131],[2.14,-10.918],[-26.456,-14.51],[-0.763,-0.816],[-19.065,14.137],[-8.402,5.639],[0,0],[-9.602,3.265],[0,0],[32.407,10.091],[0,0]],"o":[[-12.841,9.5],[-3.381,5.567],[-2.347,11.973],[9.196,5.044],[7.696,8.228],[6.974,-5.171],[8.402,-5.639],[0,0],[9.602,-3.265],[0,0],[-17.979,-5.598],[0,0]],"v":[[53.862,-105.102],[38.04,-76.813],[35.269,-46.429],[17.456,35.462],[50.284,51.772],[96.466,43.989],[115.397,6.369],[129.02,-14.356],[135.936,-29.541],[150.987,-62.113],[117.703,-113.569],[82.968,-115.603]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[12.25,-8.831],[3.282,-5.265],[2.253,-11.203],[-27.858,-14.888],[-0.803,-0.837],[-20.076,14.506],[-8.847,5.786],[0,0],[-10.111,3.35],[0,0],[34.125,10.354],[0,0]],"o":[[-13.522,9.748],[-3.561,5.712],[-2.471,12.285],[9.684,5.175],[8.104,8.442],[7.344,-5.306],[8.847,-5.786],[0,0],[10.111,-3.35],[0,0],[-18.932,-5.744],[0,0]],"v":[[55.214,-111.985],[38.553,-82.959],[35.635,-51.782],[36.358,37.888],[51.446,48.981],[100.076,40.994],[120.01,2.393],[134.356,-18.872],[141.638,-34.453],[157.487,-67.875],[122.439,-120.673],[85.862,-122.76]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[12.25,-8.831],[3.282,-5.265],[2.253,-11.203],[-27.858,-14.888],[-0.803,-0.837],[-24.576,3.506],[-8.847,5.786],[0,0],[-10.111,3.35],[0,0],[34.125,10.354],[0,0]],"o":[[-13.522,9.748],[-3.561,5.712],[-2.471,12.285],[9.684,5.175],[8.104,8.442],[8.97,-1.28],[8.847,-5.786],[0,0],[10.111,-3.35],[0,0],[-18.932,-5.744],[0,0]],"v":[[75.214,-131.485],[53.053,-104.459],[45.135,-68.282],[57.358,-12.612],[57.446,9.981],[120.076,-0.006],[140.01,-17.107],[154.356,-38.372],[161.638,-53.953],[177.487,-87.375],[142.439,-140.173],[105.862,-142.26]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[10.646,-7.754],[2.852,-4.623],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-11.751,8.559],[-3.094,5.015],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[88.604,-133.246],[69.344,-109.515],[62.898,-88.287],[79.604,-41.163],[86.198,-21.765],[127.592,-17.802],[144.917,-32.817],[157.384,-51.489],[163.713,-65.17],[177.487,-94.515],[147.027,-140.874],[115.239,-142.707]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[10.646,-7.754],[2.852,-4.623],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-11.751,8.559],[-3.094,5.015],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[94.854,-139.496],[46.594,-116.515],[69.148,-94.537],[85.854,-47.413],[98.448,-35.14],[132.842,-33.302],[151.917,-46.692],[166.759,-57.739],[169.963,-71.42],[183.737,-100.765],[153.277,-147.124],[121.489,-148.957]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[10.646,-7.754],[2.852,-4.623],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-11.751,8.559],[-3.094,5.015],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[101.104,-145.746],[81.844,-122.015],[75.398,-100.787],[92.104,-53.663],[110.698,-48.515],[138.092,-48.802],[158.917,-60.567],[176.134,-63.989],[176.213,-77.67],[189.987,-107.015],[159.527,-153.374],[127.739,-155.207]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[8.146,-6.629],[2.387,-4.852],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-8.599,6.935],[-2.508,5.048],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[123.229,-153.496],[106.219,-133.39],[95.023,-115.412],[100.979,-71.413],[121.073,-71.515],[146.967,-68.927],[168.292,-77.567],[180.384,-86.114],[185.588,-94.67],[194.112,-122.39],[164.777,-174.499],[134.364,-163.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[5.646,-5.504],[1.922,-5.08],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-5.447,5.311],[-1.922,5.08],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[119.354,-165.746],[111.094,-148.765],[104.648,-129.537],[109.854,-89.163],[131.448,-94.515],[155.842,-89.052],[177.667,-94.567],[184.634,-108.239],[194.963,-111.67],[198.237,-137.765],[169.027,-170.624],[135.489,-165.457]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[4.571,2.367],[1.75,-4.75],[-1.5,-9.25],[-6.183,1.546],[-3.75,-8.75],[-10.5,-0.75],[-7,4.75],[0,0],[-8,2.75],[0,0],[27,8.5],[0,0]],"o":[[-14,-7.25],[-1.75,4.75],[1.5,9.25],[1,-0.25],[3.75,8.75],[10.5,0.75],[7,-4.75],[0,0],[8,-2.75],[0,0],[-14.98,-4.716],[0,0]],"v":[[143.75,-188.5],[118.25,-178],[116.25,-156.75],[143.75,-137],[147.25,-120.5],[166.5,-110.25],[182.5,-121.25],[187.25,-134.5],[200.75,-133.5],[201,-149.25],[176,-186.75],[152.75,-180.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.89,1.77],[1.489,-3.552],[-1.277,-6.917],[-5.263,1.156],[-3.191,-6.543],[-4.043,-1.314],[-5.808,3.791],[0,0],[-6.69,2.413],[0,0],[19.497,4.395],[0,0]],"o":[[-11.915,-5.422],[-1.489,3.552],[1.277,6.917],[0.851,-0.187],[3.191,6.543],[3.377,1.098],[3.965,-2.588],[0,0],[16.434,-5.927],[0,0],[-12.904,-2.908],[0,0]],"v":[[147.181,-198.828],[125.479,-191.726],[123.902,-176.835],[142.931,-166.44],[143.785,-152.851],[153.793,-142.811],[167.41,-143.537],[172.452,-148.321],[184.191,-148.573],[197.529,-171.351],[174.628,-198.27],[155.84,-191.908]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[4.336,-1.72],[0.38,-1.667],[-0.392,-3.034],[-0.982,-2.213],[-3.487,-1.342],[-2.067,-0.224],[-3.159,1.299],[0,0],[-1.947,2.677],[0,0],[8.955,3.156],[0,0]],"o":[[-5.996,2.378],[-0.38,1.667],[0.445,3.445],[1.326,2.99],[3.217,1.238],[5.831,0.631],[2.304,-0.947],[0,0],[5.007,-6.883],[0,0],[-3.167,-1.116],[0,0]],"v":[[163.352,-203.62],[154.626,-195.488],[154.259,-188.496],[155.924,-179.865],[163.155,-174.839],[169.544,-173.381],[179.431,-178.046],[185.678,-178.84],[190.701,-183.102],[188.801,-196.608],[178.353,-204.13],[171.78,-205.384]],"c":true}]},{"t":28.8,"s":[{"i":[[0.063,-0.025],[0.006,-0.024],[-0.006,-0.044],[-0.014,-0.032],[-0.051,-0.02],[-0.03,-0.003],[-0.046,0.019],[0,0],[-0.028,0.039],[0,0],[0.131,0.046],[0,0]],"o":[[-0.088,0.035],[-0.006,0.024],[0.007,0.05],[0.019,0.044],[0.047,0.018],[0.085,0.009],[0.034,-0.014],[0,0],[0.073,-0.101],[0,0],[-0.046,-0.016],[0,0]],"v":[[180.777,-211.042],[180.65,-210.923],[180.632,-210.81],[180.669,-210.695],[180.76,-210.614],[180.862,-210.582],[181.032,-210.586],[181.111,-210.66],[181.177,-210.742],[181.149,-210.939],[180.996,-211.049],[180.9,-211.067]],"c":true}]}],"ix":2},"nm":"Path 20","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":1,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[24.739,2.848],[0,0],[9.178,-20.369],[0,0],[-10.997,-12.676],[-24.792,1.628],[-1.474,0.888],[-3.377,5.631],[0,0],[-10.295,8.347],[-0.615,0.567],[0.016,3.011],[0,0]],"o":[[-25.056,-2.884],[0,0],[-7.046,15.637],[0,0],[4.841,5.581],[17.833,-1.171],[2.147,-1.293],[3.808,-6.35],[0,0],[14.496,-11.753],[0.635,-0.433],[-0.15,-28.174],[0,0]],"v":[[137.348,-137.616],[102.286,-123.182],[66.296,-102.049],[66.968,-69.63],[73.409,-36.331],[110.079,-24.128],[142.695,-31.944],[154.192,-41.15],[157.445,-51.483],[184.004,-62.247],[192.615,-87.317],[195.676,-97.592],[167.847,-125.26]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[24.739,2.848],[0,0],[9.178,-20.369],[0,0],[-10.997,-12.676],[-24.792,1.628],[-1.474,0.888],[-3.377,5.631],[0,0],[-10.295,8.347],[-0.615,0.567],[0.016,3.011],[0,0]],"o":[[-25.056,-2.884],[0,0],[-7.046,15.637],[0,0],[4.841,5.581],[17.833,-1.171],[2.147,-1.293],[3.808,-6.35],[0,0],[14.496,-11.753],[0.635,-0.433],[-0.15,-28.174],[0,0]],"v":[[139.348,-138.616],[104.286,-124.182],[68.296,-103.049],[68.968,-70.63],[75.409,-37.331],[112.079,-25.128],[144.695,-32.944],[156.192,-42.15],[159.445,-52.483],[186.004,-63.247],[194.615,-88.317],[197.676,-98.592],[169.847,-126.26]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[21.256,2.616],[0,0],[7.886,-18.711],[0,0],[-10.911,-10.078],[-21.301,1.495],[-1.267,0.815],[-5.289,2.097],[0,0],[-3.203,3.042],[-1.921,4.228],[0.013,2.671],[0,0]],"o":[[-21.528,-2.649],[0,0],[-6.054,14.365],[0,0],[7.822,7.224],[15.323,-1.076],[1.845,-1.188],[16.787,-6.655],[0,0],[2.84,-2.697],[1.084,-2.386],[-0.129,-25.882],[0,0]],"v":[[159.352,-145.101],[129.226,-131.841],[98.304,-112.428],[98.881,-82.646],[106.993,-55.732],[140.863,-41.995],[161.154,-54.917],[178.12,-58.092],[195.522,-84.119],[201.485,-88.972],[209.435,-99.562],[211.187,-107.185],[185.557,-133.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[18.209,2.335],[0,0],[6.756,-16.698],[0,0],[-9.347,-8.993],[-18.248,1.335],[-1.085,0.728],[-4.531,1.871],[0,0],[-2.744,2.714],[-1.646,3.773],[0.011,2.384],[0,0]],"o":[[-18.442,-2.364],[0,0],[-5.186,12.819],[0,0],[6.701,6.447],[13.126,-0.96],[1.58,-1.06],[14.381,-5.939],[0,0],[2.433,-2.407],[0.929,-2.129],[-0.11,-23.097],[0,0]],"v":[[178.291,-138.21],[152.484,-126.377],[125.994,-109.052],[126.489,-82.474],[133.438,-58.455],[162.453,-46.196],[179.835,-57.728],[194.369,-60.561],[209.277,-83.788],[214.384,-88.119],[221.195,-97.57],[222.696,-104.373],[200.74,-128.08]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[15.632,5.495],[0,0],[6.756,-16.698],[0,0],[-9.347,-8.993],[-18.248,1.335],[-1.085,0.728],[-3.102,3.796],[0,0],[-1.418,2.714],[-0.846,3.773],[0.011,2.384],[0,0]],"o":[[-17.541,-6.165],[0,0],[-5.186,12.819],[0,0],[6.701,6.447],[13.126,-0.96],[1.58,-1.06],[4.514,-5.524],[0,0],[1.258,-2.407],[0.477,-2.129],[-0.11,-23.097],[0,0]],"v":[[191.291,-142.835],[159.734,-128.627],[133.244,-111.302],[140.239,-86.724],[146.188,-64.705],[182.203,-54.446],[202.085,-67.478],[216.619,-72.311],[223.027,-86.038],[225.668,-90.369],[229.182,-99.82],[229.946,-106.623],[207.99,-130.33]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[15.632,5.495],[0,0],[6.756,-16.698],[0,0],[-2.313,-2.235],[-22.023,-0.814],[-4.635,8.11],[-0.526,2.646],[0,0],[-2.183,0.828],[-1.307,2.634],[0.011,2.384],[0,0]],"o":[[-17.541,-6.165],[0,0],[-5.186,12.819],[0,0],[3.822,3.692],[18.834,0.696],[2.398,-4.196],[0.366,-1.839],[0,0],[1.936,-0.734],[0.738,-1.487],[-0.11,-23.097],[0,0]],"v":[[191.041,-144.585],[165.484,-137.127],[142.494,-117.552],[146.739,-84.474],[149.388,-80.502],[184.453,-70.946],[217.282,-86.877],[221.339,-97.807],[221.777,-100.788],[225.841,-101.61],[231.257,-106.369],[232.446,-112.123],[209.99,-130.83]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[15.632,5.495],[0,0],[6.756,-16.698],[0,0],[-2.313,-2.235],[-22.023,-0.814],[-4.635,8.11],[-0.526,2.646],[0,0],[-2.183,0.828],[-1.307,2.634],[0.011,2.384],[0,0]],"o":[[-17.541,-6.165],[0,0],[-5.186,12.819],[0,0],[3.822,3.692],[18.834,0.696],[2.398,-4.196],[0.366,-1.839],[0,0],[1.936,-0.734],[0.738,-1.487],[-0.11,-23.097],[0,0]],"v":[[195.291,-143.335],[169.734,-135.877],[146.744,-116.302],[150.989,-83.224],[153.638,-79.252],[188.703,-69.696],[221.532,-85.627],[225.589,-96.557],[226.027,-99.538],[230.091,-100.36],[235.507,-105.119],[236.696,-110.873],[214.24,-129.58]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[10,8],[0,0],[7.75,-7.5],[0,0],[0.497,-5.859],[-16.353,-1.713],[-3.782,4.256],[-0.5,1.445],[0,0],[-4.385,0.071],[-2.647,3.609],[0,3.983],[0,0]],"o":[[-10,-8],[0,0],[-7.75,7.5],[0,0],[-0.821,9.681],[13.986,1.465],[1.957,-2.202],[0.348,-1.004],[0,0],[3.888,-0.063],[1.494,-2.037],[0,-19],[0,0]],"v":[[213,-145.25],[193.25,-146.75],[174.5,-145],[171.5,-127],[169.475,-116.557],[187,-92],[212.083,-99.003],[215.551,-104.863],[216,-106.5],[224.157,-105.43],[235.062,-110.118],[237.5,-119],[217,-133.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[6.307,1.32],[0,0],[3.583,-4.209],[0,0],[-0.744,-2.528],[-8.379,-0.907],[-2.874,0.98],[-0.634,0.347],[0,0],[-1.592,1.576],[-0.901,2.564],[0.067,1.802],[0,0]],"o":[[-6.425,-1.345],[0,0],[-3.583,4.209],[0,0],[1.23,4.178],[5.684,0.615],[1.487,-0.507],[0.44,-0.241],[0,0],[1.412,-1.397],[0.509,-1.447],[-0.36,-9.732],[0,0]],"v":[[213.034,-155.867],[202.09,-154.549],[195.825,-148.792],[191.337,-136.642],[192.101,-132.147],[204.921,-121.35],[217.883,-122.62],[221.082,-124.002],[221.748,-124.397],[224.729,-126.785],[228.613,-132.745],[229.35,-137.621],[224.708,-149.66]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[1.974,0.413],[0,0],[1.121,-1.317],[0,0],[-0.233,-0.791],[-2.622,-0.284],[-0.899,0.307],[-0.198,0.109],[0,0],[-0.498,0.493],[-0.282,0.802],[0.021,0.564],[0,0]],"o":[[-2.011,-0.421],[0,0],[-1.121,1.317],[0,0],[0.385,1.307],[1.779,0.193],[0.465,-0.159],[0.138,-0.075],[0,0],[0.442,-0.437],[0.159,-0.453],[-0.113,-3.046],[0,0]],"v":[[214.795,-159.324],[211.37,-158.912],[209.409,-157.111],[208.005,-153.308],[208.244,-151.902],[212.256,-148.523],[216.312,-148.92],[217.313,-149.353],[217.522,-149.476],[218.455,-150.224],[219.67,-152.089],[219.901,-153.615],[218.448,-157.382]],"c":true}]},{"t":28.8,"s":[{"i":[[0.081,0.017],[0,0],[0.046,-0.054],[0,0],[-0.01,-0.033],[-0.108,-0.012],[-0.037,0.013],[-0.008,0.004],[0,0],[-0.021,0.02],[-0.012,0.033],[0.001,0.023],[0,0]],"o":[[-0.083,-0.017],[0,0],[-0.046,0.054],[0,0],[0.016,0.054],[0.073,0.008],[0.019,-0.007],[0.006,-0.003],[0,0],[0.018,-0.018],[0.007,-0.019],[-0.005,-0.126],[0,0]],"v":[[215.535,-160.425],[215.394,-160.408],[215.313,-160.334],[215.255,-160.177],[215.265,-160.119],[215.43,-159.979],[215.598,-159.996],[215.639,-160.014],[215.648,-160.019],[215.686,-160.05],[215.736,-160.126],[215.746,-160.189],[215.686,-160.345]],"c":true}]}],"ix":2},"nm":"Path 19","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":1,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":30,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":0,"cix":2,"bm":0,"ix":47,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[21.25,6],[1.5,-7.5],[0,0],[2,-3],[0,0],[3.86,-26.594],[0,0],[-9,-3],[0,0],[-16.137,-4.21],[0,0],[-12.75,5.25],[0,0],[2.261,15.828],[0,0],[3.143,1.692],[0,0],[-2.751,7.566],[12.75,-0.75],[0,0],[0,0]],"o":[[-12.46,-3.518],[-1.5,7.5],[0,0],[-2,3],[0,0],[-2.25,15.5],[0,0],[9,3],[0,0],[11.5,3],[0,0],[12.75,-5.25],[0,0],[-1,-7],[0,0],[-1.707,-0.919],[0,0],[3,-8.25],[-8.792,0.517],[0,0],[0,0]],"v":[[-16.75,45],[-36,55.75],[-35,67.5],[-40.75,72.5],[-45.75,78.25],[-69.5,101],[-56,121.75],[-46.75,133.75],[-32.75,132.75],[-17.75,153.25],[-1.75,149.75],[16.5,150.25],[25,136.5],[33,115.5],[23.25,108.25],[20.607,103.558],[16.75,103],[24,92.25],[11.75,72.75],[-3,78.75],[-6.75,72.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":0,"s":[0,0],"h":1},{"t":1.2,"s":[100,100],"h":1},{"t":2.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 48","np":1,"cix":2,"bm":0,"ix":48,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.25,-3.25],[0.68,-14.549],[0,0],[1,-6.5],[0,0],[4,-5.5],[0,0],[4.471,-24.109],[0,0],[-3.5,-34.5],[0,0],[-6,-13],[0,0],[-5.5,-5],[0,0],[-4.614,-2.171],[0,0],[-28.736,10.111],[0,0],[-18,2.5],[0,0],[3.5,18],[0,0],[0.694,18.049],[0,0],[7,7],[0,0],[0,0],[-4,7.75],[0,0],[16,21.75],[0,0],[6,5.75],[0,0],[3.565,14.577]],"o":[[-23.116,3.376],[-0.688,14.707],[0,0],[-1,6.5],[0,0],[-2.93,4.028],[0,0],[-7,37.75],[0,0],[2.761,27.214],[0,0],[6.12,13.259],[0,0],[5.5,5],[0,0],[4.25,2],[0,0],[27,-9.5],[0,0],[18,-2.5],[0,0],[-3.5,-18],[0,0],[-0.5,-13],[0,0],[-7,-7],[0,0],[0,0],[4,-7.75],[0,0],[-16,-21.75],[0,0],[-6,-5.75],[0,0],[-4.828,-19.74]],"v":[[-38.25,-25.25],[-71.18,5.549],[-65,25],[-75,35.5],[-69.5,50],[-77.25,54],[-78,62],[-107.5,82],[-83.25,119],[-97.5,155],[-81.5,184.5],[-88.5,204.5],[-72.5,215.5],[-68.5,230],[-55.5,236],[-48.5,241.75],[-39.25,242.25],[-0.25,245],[28,217],[51.5,226.5],[67,208],[77.5,190.5],[61.5,174.5],[73,153.5],[57.5,141],[53.5,126.5],[40.5,120.5],[39.5,115],[49.25,107],[49,92],[52,51.25],[8.5,43],[8,30.25],[-1,27.25],[2.328,3.24]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":1.2,"s":[0,0],"h":1},{"t":2.4,"s":[100,100],"h":1},{"t":3.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 49","np":1,"cix":2,"bm":0,"ix":49,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-40.649,-2.751],[-6.494,21.299],[0,0],[-4.136,9.279],[0,0],[-9.094,6.78],[0,0],[-16.691,34.158],[0,0],[-6.328,52.242],[0,0],[5.919,21.276],[0,0],[7.939,9.268],[0,0],[7.395,4.781],[0,0],[54.648,-5.198],[0,0],[32.838,2.417],[0,0],[0.332,-27.825],[0,0],[5.327,-26.945],[0,0],[-9.873,-12.737],[0,0],[0,0],[9.912,-10.109],[0,0],[-20.478,-37.622],[0,0],[-8.554,-10.547],[0,0],[-1.027,-22.782]],"o":[[42.231,2.858],[6.564,-21.529],[0,0],[4.136,-9.279],[0,0],[6.661,-4.966],[0,0],[26.135,-53.483],[0,0],[4.992,-41.209],[0,0],[-6.037,-21.7],[0,0],[-7.939,-9.268],[0,0],[-6.812,-4.404],[0,0],[-51.346,4.884],[0,0],[-32.838,-2.417],[0,0],[-0.332,27.825],[0,0],[-3.837,19.407],[0,0],[9.873,12.737],[0,0],[0,0],[-9.912,10.109],[0,0],[20.478,37.622],[0,0],[8.554,10.547],[0,0],[1.391,30.851]],"v":[[-12.948,261.021],[56.659,226.634],[52.763,195.751],[74.317,183.611],[69.83,160.286],[85.031,157],[89.269,145.416],[148.865,125.844],[119.294,62.853],[157.654,14.422],[139.991,-34.668],[159.676,-61.885],[135.291,-83.599],[133.465,-106.415],[112.585,-119.711],[102.257,-130.598],[86.031,-134.481],[17.849,-151.802],[-42.437,-119.967],[-80.671,-142.01],[-114.888,-119.901],[-139.873,-97.572],[-117.305,-68.459],[-145.335,-41.292],[-122.383,-17.528],[-120.556,5.288],[-99.676,18.584],[-99.901,27.063],[-120.103,35.588],[-125.111,57.87],[-145.24,117.152],[-71.075,144.141],[-74.821,163.178],[-59.946,170.675],[-74.575,205.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 50","np":1,"cix":2,"bm":0,"ix":50,"mn":"ADBE Vector Group","hd":false},{"ty":"op","nm":"Offset Paths 1","a":{"a":0,"k":0.7,"ix":1},"lj":1,"ml":{"a":0,"k":4,"ix":3},"ix":51,"mn":"ADBE Vector Filter - Offset","hd":false},{"ty":"fl","c":{"a":0,"k":[0.349019577924,0.823852239871,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":36,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 3","parent":3,"tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[0.593,-0.346],[-5.67,-6.545],[-7.243,-0.115],[-8.005,2.5],[-1.01,0.828],[-2.335,1.365],[-0.197,0.219],[0.225,1.409],[0,0],[3.479,-3.029],[0.264,-0.19],[3.055,3.725],[1.157,1.602]],"o":[[0,0],[-2.36,1.378],[3.505,4.046],[6.094,0.097],[2.144,-0.67],[-0.037,-0.13],[0.784,-0.458],[1.592,-1.764],[-0.384,-2.408],[0,0],[-3.448,3.001],[-5.566,3.995],[-0.25,-0.305],[-1.947,-2.696]],"v":[[7.241,-93.5],[6.201,-92.969],[1.98,-82.605],[14.816,-75.305],[29.671,-77.668],[35.697,-80.512],[41.576,-83.694],[43.658,-85.676],[44.381,-89.286],[41.866,-91.987],[37.19,-87.464],[33.223,-83.876],[9.583,-84.957],[6.886,-87.851]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[0.969,-0.908],[-9.262,-17.168],[-11.831,-0.303],[-13.076,6.556],[-1.649,2.173],[-3.814,3.579],[-0.323,0.574],[0.367,3.694],[0,0],[5.683,-7.945],[0.432,-0.497],[4.99,9.771],[1.889,4.202]],"o":[[0,0],[-3.855,3.614],[5.726,10.613],[9.955,0.255],[3.502,-1.756],[-0.06,-0.341],[1.281,-1.202],[2.601,-4.626],[-0.627,-6.316],[0,0],[-5.632,7.873],[-9.092,10.477],[-0.409,-0.801],[-3.18,-7.071]],"v":[[31.915,-140.75],[30.216,-139.358],[23.322,-112.173],[44.288,-93.026],[68.552,-99.224],[78.396,-106.685],[87.998,-115.029],[91.399,-120.229],[92.58,-129.697],[88.473,-136.781],[80.835,-124.919],[74.354,-115.508],[35.74,-118.344],[31.335,-125.933]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[1.112,-1.535],[-19.936,-23.54],[-13.579,-0.512],[-15.008,11.085],[-1.893,3.674],[-8.878,3.239],[-0.562,0.875],[0.421,6.246],[0,0],[11.703,-9.153],[0.495,-0.841],[5.728,16.52],[2.62,4.198]],"o":[[0,0],[-4.425,6.111],[16.413,19.019],[11.426,0.431],[4.02,-2.969],[-0.069,-0.576],[2.314,-0.89],[5.041,-7.837],[-0.72,-10.679],[0,0],[-12.839,9.936],[-10.435,17.715],[-0.469,-1.354],[-6.759,-10.507]],"v":[[37.554,-192.34],[35.604,-189.987],[41.19,-143.834],[51.755,-111.648],[88.354,-119.441],[99.153,-131.993],[115.424,-148.101],[123.64,-155.767],[127.121,-176.464],[122.719,-193.503],[113.952,-166.322],[98.263,-163.16],[55.819,-164.768],[40.45,-171.599]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[1.159,-1.744],[-23.494,-25.664],[-14.162,-0.582],[-15.652,12.595],[-1.974,4.174],[-10.566,3.125],[-0.641,0.976],[0.439,7.097],[0,0],[13.709,-9.556],[0.517,-0.956],[5.974,18.77],[2.864,4.196]],"o":[[0,0],[-4.615,6.944],[19.976,21.821],[11.916,0.49],[4.192,-3.374],[-0.072,-0.655],[2.658,-0.786],[5.855,-8.908],[-0.751,-12.133],[0,0],[-15.241,10.624],[-10.883,20.128],[-0.489,-1.538],[-7.952,-11.652]],"v":[[39.433,-209.536],[37.4,-206.863],[47.146,-154.388],[54.244,-117.855],[94.288,-136.513],[114.072,-159.095],[123.566,-169.125],[134.387,-167.613],[141.301,-192.053],[134.134,-212.411],[124.991,-180.124],[106.233,-179.044],[62.512,-180.243],[43.488,-186.822]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[0,0],[3.595,-6.656],[-23.579,-16.88],[-14.162,-0.582],[-15.652,12.595],[-3.409,3.386],[-6.502,2.374],[-0.377,0.822],[-0.941,5.514],[0,0],[13.709,-9.556],[0.517,-0.956],[5.973,18.77],[2.864,4.196]],"o":[[0,0],[-6.079,11.256],[18.54,22.98],[11.916,0.49],[4.967,-3.997],[2.593,-1.737],[1.765,-0.684],[2.656,-5.785],[2.864,-16.776],[0,0],[-15.241,10.624],[-10.883,20.128],[-0.489,-1.538],[-7.952,-11.652]],"v":[[39.058,-222.661],[34.571,-204.806],[44.771,-165.388],[58.244,-127.48],[101.663,-155.513],[119.675,-172.097],[123.673,-179.289],[133.762,-177.113],[140.234,-196.503],[138.384,-224.786],[128.866,-191.749],[110.108,-190.669],[66.387,-191.868],[47.363,-198.447]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[1.115,-1.983],[-16.922,-23.881],[-14.162,-0.582],[-15.652,12.595],[-4.845,2.598],[-2.438,1.623],[-0.352,0.535],[-0.205,6.968],[0,0],[13.709,-9.556],[0.517,-0.956],[5.973,18.77],[2.864,4.196]],"o":[[0,0],[-4.438,7.893],[17.104,24.138],[11.916,0.49],[5.743,-4.621],[5.258,-2.819],[0.872,-0.581],[5.855,-8.908],[0.351,-11.913],[0,0],[-15.241,10.624],[-10.883,20.128],[-0.489,-1.538],[-7.952,-11.652]],"v":[[47.183,-232.786],[45.264,-229.714],[48.396,-175.888],[62.244,-137.105],[109.038,-174.513],[125.278,-185.099],[137.28,-191.454],[139.137,-193.113],[147.206,-217.322],[142.634,-237.161],[132.741,-203.374],[113.983,-202.294],[70.262,-203.493],[51.238,-210.072]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[1.73,-2.058],[-14.953,-20.804],[-12.343,-0.686],[-13.313,10.348],[-3.345,3.462],[-1.688,2.289],[-0.344,0.534],[-0.062,6.188],[0,0],[12.042,-8.17],[0.84,-0.876],[5.591,15.896],[2.291,3.902]],"o":[[0,0],[-6.884,8.191],[14.303,20.054],[10.397,0.579],[4.882,-3.796],[3.631,-3.757],[0.604,-0.819],[5.182,-7.975],[0.106,-10.578],[0,0],[-12.54,8.669],[-9.598,16.336],[-0.88,-1.76],[-6.361,-10.115]],"v":[[55.947,-239.954],[53.04,-236.741],[45.467,-185.261],[62.129,-152.76],[117.131,-180.544],[129.499,-191.649],[137.511,-200.998],[138.934,-203.041],[145.862,-224.623],[141.332,-242.179],[132.593,-212.324],[116.41,-211.007],[78.735,-212.644],[62.883,-219.598]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[1.974,-1.895],[-12.984,-17.727],[-10.525,-0.789],[-10.973,8.1],[-3.744,3.194],[-2.071,2.281],[-0.335,0.533],[2.058,4.59],[0,0],[10.375,-6.783],[1.162,-0.797],[5.208,13.021],[18.723,4.874]],"o":[[0,0],[-7.856,7.543],[11.502,15.97],[8.879,0.669],[4.022,-2.971],[4.064,-3.467],[0.741,-0.816],[4.509,-7.042],[-3.519,-7.848],[0,0],[-9.84,6.714],[-8.313,12.544],[-1.271,-1.982],[-18.027,-11.376]],"v":[[63.21,-248.184],[59.919,-245.216],[46.788,-199.383],[65.015,-163.414],[126.973,-197.137],[138.962,-206.679],[148.598,-215.678],[150.232,-217.718],[152.474,-235.21],[140.031,-247.197],[132.445,-221.274],[118.837,-219.719],[87.207,-221.796],[64.277,-209.124]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.6,"s":[{"i":[[0,0],[0.966,-0.827],[-7.079,-8.494],[-5.069,-1.1],[-3.953,1.359],[-1.242,0.834],[-1.013,1.325],[-0.311,0.53],[0.512,3.065],[0,0],[5.375,-2.625],[2.131,-0.558],[4.06,4.398],[-0.002,2.724]],"o":[[0,0],[-3.846,3.291],[3.099,3.718],[4.323,0.938],[1.442,-0.495],[1.348,-0.905],[0.363,-0.474],[2.491,-4.244],[-0.876,-5.239],[0,0],[-1.738,0.849],[-4.458,1.167],[-2.443,-2.647],[0.002,-3.965]],"v":[[111,-264.875],[109.384,-263.585],[103.75,-242.75],[116.671,-235.377],[129.501,-235.917],[133.546,-237.906],[137.114,-241.245],[138.125,-242.75],[140.484,-253.826],[136.125,-262.25],[132,-248.125],[126.118,-245.856],[112.625,-249.25],[109.46,-257.704]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[0.314,-0.269],[-2.299,-2.759],[-1.646,-0.357],[-1.284,0.441],[-0.403,0.271],[-0.329,0.43],[-0.101,0.172],[0.166,0.995],[0,0],[1.746,-0.852],[0.692,-0.181],[1.318,1.428],[-0.001,0.885]],"o":[[0,0],[-1.249,1.069],[1.006,1.208],[1.404,0.305],[0.468,-0.161],[0.438,-0.294],[0.118,-0.154],[0.809,-1.378],[-0.284,-1.701],[0,0],[-0.565,0.276],[-1.448,0.379],[-0.794,-0.86],[0.001,-1.288]],"v":[[125.374,-269.772],[124.849,-269.353],[123.019,-262.587],[127.215,-260.193],[131.382,-260.368],[132.696,-261.014],[133.854,-262.098],[134.183,-262.587],[134.949,-266.184],[133.533,-268.92],[132.194,-264.333],[130.284,-263.596],[125.902,-264.698],[124.874,-267.443]],"c":true}]},{"t":31.2,"s":[{"i":[[0,0],[0.314,-0.269],[-2.299,-2.759],[-1.646,-0.357],[-1.284,0.441],[-0.403,0.271],[-0.329,0.43],[-0.101,0.172],[0.166,0.995],[0,0],[1.746,-0.852],[0.692,-0.181],[1.318,1.428],[-0.001,0.885]],"o":[[0,0],[-1.249,1.069],[1.006,1.208],[1.404,0.305],[0.468,-0.161],[0.438,-0.294],[0.118,-0.154],[0.809,-1.378],[-0.284,-1.701],[0,0],[-0.565,0.276],[-1.448,0.379],[-0.794,-0.86],[0.001,-1.288]],"v":[[126.874,-270.147],[126.349,-269.728],[124.519,-262.962],[128.715,-260.568],[132.882,-260.743],[134.196,-261.389],[135.354,-262.473],[135.683,-262.962],[136.449,-266.559],[135.033,-269.295],[133.694,-264.708],[131.784,-263.971],[127.402,-265.073],[126.374,-267.818]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 29","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[2.173,-1.354],[0.815,-1.305],[-0.163,-0.688],[0,0],[-0.482,0.674],[-0.495,0.561],[-0.84,0.838],[-0.322,0.316],[0.001,-0.007],[-0.485,0.475]],"o":[[0,0],[-3.801,2.368],[-1.281,2.051],[0.111,0.47],[0,0],[0.325,-0.455],[0.333,-0.366],[0.381,-0.381],[0.889,-0.873],[-0.1,0.077],[2.072,-2.029]],"v":[[-38.928,-156.275],[-42.76,-153.935],[-52.749,-146.771],[-52.78,-144.367],[-51.111,-143.856],[-49.426,-146.008],[-48.08,-147.606],[-47.101,-148.82],[-46,-150.057],[-45.018,-151.173],[-42.918,-153.041]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[1.982,-6.284],[-15.475,-3.526],[-6.058,14.682],[0,0],[4.676,-7.095],[-0.375,0.191],[2.006,-1.911],[2.377,-0.397],[-0.119,-0.011],[3.184,1.683]],"o":[[0,0],[-3.467,10.991],[24.322,5.542],[6.058,-14.682],[0,0],[-1.025,1.556],[-0.81,0.763],[-2.145,2.044],[-5.392,0.902],[0.234,0.319],[-13.601,-7.19]],"v":[[-23.135,-218.395],[-27.596,-207.383],[-17.54,-177.117],[36.073,-198.892],[33.579,-220.972],[30.062,-201.635],[20.272,-197.428],[16.897,-193.828],[8.732,-188.364],[-1.203,-192.622],[-14.01,-191.902]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[0,0],[2.178,-6.105],[-13.308,-4.752],[-6.338,14.15],[0,0],[4.595,-6.699],[-0.342,0.161],[1.891,-1.745],[2.11,-0.206],[-0.104,-0.021],[2.671,1.933]],"o":[[0,0],[-3.81,10.679],[20.917,7.468],[6.339,-14.15],[0,0],[-1.007,1.469],[-0.763,0.696],[-2.023,1.866],[-4.787,0.468],[0.183,0.337],[-11.409,-8.254]],"v":[[-15.085,-224.906],[-19.766,-214.285],[-13.083,-183.312],[35.411,-200.732],[34.778,-222.941],[30.339,-203.947],[21.467,-200.536],[20.981,-193.645],[10.721,-192.423],[2.317,-197.462],[-8.952,-197.768]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[1.523,-7.088],[-8.885,-3.261],[-5.044,11.575],[0,0],[3.664,-5.457],[0.049,-0.14],[1.251,-1.053],[1.571,-0.235],[0.986,0.226],[2.367,1.769]],"o":[[0,0],[-1.743,8.114],[16.646,6.109],[5.044,-11.575],[0,0],[-0.779,1.159],[-0.592,0.559],[-1.402,1.164],[-3.221,0.445],[-0.873,-0.051],[-9.08,-6.752]],"v":[[-9.355,-227.015],[-22.385,-218.618],[-6.541,-193.031],[30.831,-207.241],[30.326,-225.408],[24.922,-209.778],[19.733,-207.08],[18.712,-203.041],[12.214,-201.872],[5.181,-204.37],[-3.476,-206.009]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[0.878,-3.87],[-7.874,-3.022],[-3.75,9],[0,0],[2.733,-4.215],[0.441,-0.441],[0.611,-0.362],[1.032,-0.263],[2.075,0.472],[2.063,1.605]],"o":[[0,0],[-1.535,6.768],[12.375,4.75],[3.75,-9],[0,0],[-0.551,0.85],[-0.421,0.421],[-0.781,0.462],[-1.654,0.422],[-1.929,-0.439],[-6.75,-5.25]],"v":[[-3.625,-229.125],[-5.66,-222.394],[0,-202.75],[26.25,-213.75],[25.875,-227.875],[19.506,-215.61],[18,-213.625],[16.443,-212.437],[13.707,-211.32],[8.044,-211.279],[2,-214.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[0.878,-3.87],[-7.874,-3.022],[-3.75,9],[0,0],[2.733,-4.215],[0.441,-0.441],[0.611,-0.362],[1.032,-0.263],[2.075,0.472],[2.063,1.605]],"o":[[0,0],[-1.535,6.768],[12.375,4.75],[3.75,-9],[0,0],[-0.551,0.85],[-0.421,0.421],[-0.781,0.462],[-1.654,0.422],[-1.929,-0.439],[-6.75,-5.25]],"v":[[-4.438,-239.688],[-6.473,-232.956],[-0.813,-213.313],[25.438,-224.313],[25.063,-238.438],[18.694,-226.172],[17.188,-224.188],[15.63,-222.999],[12.894,-221.883],[7.231,-221.841],[1.188,-224.813]],"c":true}]},{"t":25.2,"s":[{"i":[[0,0],[0.878,-3.87],[-7.874,-3.022],[-3.75,9],[0,0],[2.733,-4.215],[0.441,-0.441],[0.611,-0.362],[1.032,-0.263],[2.075,0.472],[2.063,1.605]],"o":[[0,0],[-1.535,6.768],[12.375,4.75],[3.75,-9],[0,0],[-0.551,0.85],[-0.421,0.421],[-0.781,0.462],[-1.654,0.422],[-1.929,-0.439],[-6.75,-5.25]],"v":[[0,-241.5],[-2.035,-234.769],[3.625,-215.125],[29.875,-226.125],[29.5,-240.25],[23.131,-227.985],[21.625,-226],[20.068,-224.812],[17.332,-223.695],[11.669,-223.654],[5.625,-226.625]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":12,"s":[0,0],"h":1},{"t":13.2,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 28","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0,0],[4.156,-12.386],[0.505,0.093],[15.639,0.534],[0.18,-0.012],[1.492,2.764],[0,0],[-2.003,-7.826],[-7.988,4.403],[-13.637,0.181],[-1.099,0.138],[2.346,9.165]],"o":[[0,0],[-4.296,12.806],[-0.089,0.26],[-12.075,-0.412],[-0.94,-1.34],[-3.376,-6.253],[0,0],[1.16,4.534],[1.093,-0.602],[14.201,-0.189],[21.665,-2.722],[-3.487,-13.623]],"v":[[-24.343,-156.558],[-20.185,-142.637],[-39.062,-127.11],[-66.293,-137.663],[-91.943,-120.333],[-85.275,-143.875],[-87.109,-166.496],[-90.187,-150.07],[-92.843,-118.898],[-66.951,-132.311],[-41.415,-127.278],[-8.578,-151.302]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[4.156,-12.386],[0.505,0.093],[15.639,0.534],[0.18,-0.012],[1.492,2.764],[0,0],[-2.003,-7.826],[-7.988,4.403],[-13.637,0.181],[-1.099,0.138],[2.346,9.165]],"o":[[0,0],[-4.296,12.806],[-0.089,0.26],[-12.075,-0.412],[-0.94,-1.34],[-3.376,-6.253],[0,0],[1.16,4.534],[1.093,-0.602],[14.201,-0.189],[21.665,-2.722],[-3.487,-13.623]],"v":[[-21.343,-182.308],[-17.935,-157.137],[-36.062,-146.36],[-51.793,-157.663],[-77.693,-144.333],[-81.025,-155.125],[-82.859,-177.746],[-85.937,-161.32],[-80.343,-135.898],[-56.951,-148.311],[-37.165,-138.528],[-9.078,-170.552]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[4.066,-12.459],[0.509,0.089],[15.731,0.394],[0.18,-0.014],[1.526,2.758],[0,0],[-2.347,-7.756],[-6.174,0.705],[-15.336,-0.011],[-2.946,2.8],[2.334,8.792]],"o":[[0,0],[-4.204,12.881],[-0.087,0.261],[-12.146,-0.304],[-0.957,-1.335],[-3.452,-6.241],[0,0],[5.728,18.929],[1.846,2.535],[13.977,-0.03],[17.623,-5.704],[-3.63,-13.63]],"v":[[-21.242,-192.387],[-18.028,-168.488],[-35.557,-156.924],[-50.243,-160.48],[-71.742,-154.184],[-74.982,-163.679],[-82.283,-185.681],[-85.228,-169.179],[-84.766,-146.606],[-54.827,-148.94],[-31.63,-147.032],[-9.524,-180.3]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[3.887,-12.606],[0.516,0.081],[15.915,0.114],[0.182,-0.017],[1.593,2.747],[0,0],[-2.25,-7.839],[-2.546,-6.692],[-18.734,-0.396],[-6.64,8.123],[2.309,8.045]],"o":[[0,0],[-4.018,13.033],[-0.084,0.264],[-12.288,-0.088],[-0.992,-1.326],[-3.604,-6.215],[0,0],[0.971,3.384],[3.351,8.808],[13.53,0.286],[9.538,-11.669],[-3.917,-13.645]],"v":[[-21.039,-212.545],[-18.212,-191.188],[-34.548,-178.052],[-47.144,-166.115],[-59.84,-173.887],[-62.896,-180.785],[-81.129,-201.55],[-83.81,-184.899],[-80.111,-168.023],[-50.58,-150.197],[-20.561,-164.039],[-10.417,-199.794]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[3.522,-11.597],[2.757,4.536],[14.421,0.247],[0.165,-0.016],[-1.796,2.251],[0,0],[-4.426,-9.486],[-3.134,-4.07],[-16.98,-0.281],[-4.46,6.514],[2.093,7.401]],"o":[[0,0],[-3.642,11.989],[-0.076,0.243],[-26.874,-0.46],[-0.899,-1.22],[3.214,-4.027],[0,0],[1.238,2.961],[4.125,5.357],[14.488,0.24],[6.407,-9.357],[-3.55,-12.553]],"v":[[-23.456,-214.494],[-19.531,-192.918],[-36.21,-184.646],[-51.251,-170.915],[-71.382,-188.127],[-72.214,-192.723],[-82.737,-199.701],[-77.354,-179.695],[-71.989,-168.278],[-43.051,-157.834],[-15.842,-168.826],[-12.967,-198.649]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[3.158,-10.588],[4.998,8.991],[12.931,0.096],[0.148,-0.015],[2.502,0.65],[0,0],[-6.602,-11.133],[-4.199,-4.692],[-15.221,-0.333],[-3.681,7.096],[1.876,6.757]],"o":[[0,0],[-3.265,10.946],[-0.068,0.222],[-9.984,-0.074],[-0.806,-1.114],[-11.24,-2.919],[0,0],[1.505,2.537],[5.527,6.176],[10.993,0.24],[5.289,-10.193],[-3.183,-11.461]],"v":[[-25.874,-216.442],[-20.851,-194.649],[-37.873,-191.241],[-49.357,-175.715],[-59.423,-183.118],[-68.781,-186.161],[-84.595,-197.602],[-77.648,-183.992],[-69.718,-171.955],[-40.023,-159.47],[-18.799,-171.601],[-16.017,-202.503]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[2.793,-9.579],[2.66,4.523],[11.439,0.087],[0.131,-0.013],[2.278,0.235],[0,0],[-4.004,-8.231],[-2.551,-4.144],[-13.465,-0.301],[-3.667,8.022],[1.66,6.113]],"o":[[0,0],[-2.888,9.903],[-0.06,0.201],[-8.832,-0.067],[-0.713,-1.008],[-11.152,-1.151],[0,0],[1.056,2.419],[3.358,5.455],[9.725,0.217],[5.268,-11.524],[-2.815,-10.369]],"v":[[-30.041,-223.516],[-25.92,-204.004],[-39.535,-197.835],[-49.214,-186.015],[-58.214,-192.358],[-63.848,-196.224],[-74.452,-205.253],[-73.192,-194.288],[-68.718,-183.429],[-45.62,-172.482],[-26.087,-186.418],[-22.317,-219.482]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[2.429,-8.57],[0.323,0.055],[9.947,0.078],[0.114,-0.012],[1.925,0.526],[0,0],[-1.406,-5.329],[-1.591,-4.549],[-11.708,-0.269],[-4.15,5.522],[1.443,5.469]],"o":[[0,0],[-2.511,8.86],[-0.052,0.18],[-7.68,-0.06],[-0.62,-0.902],[-8.646,-2.363],[0,0],[0.607,2.301],[2.094,5.988],[8.456,0.195],[5.961,-7.933],[-2.448,-9.276]],"v":[[-33.458,-225.84],[-30.989,-213.36],[-41.198,-204.43],[-49.07,-196.315],[-57.005,-201.598],[-58.915,-206.288],[-70.31,-220.405],[-71.985,-209.085],[-69.674,-197.612],[-51.217,-185.494],[-32.456,-194.903],[-26.117,-219.211]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[1.375,-3.875],[0.768,-0.627],[1.035,-0.286],[1.49,0.261],[1.102,0.638],[0,0],[0,-3.375],[-0.578,-1.944],[-6.89,-1.989],[-2.326,1.893],[0,3.464]],"o":[[0,0],[-0.326,0.919],[-0.757,0.618],[-1.316,0.364],[-1.163,-0.204],[-4.75,-2.75],[0,0],[0,1.457],[0.761,2.559],[4.976,1.436],[3.341,-2.719],[0,-5.875]],"v":[[-47.25,-223.75],[-47.375,-216.75],[-49.055,-214.419],[-51.779,-213.052],[-56.066,-212.874],[-59.5,-214.125],[-62.125,-223.125],[-67.25,-217.625],[-67.021,-212.348],[-57,-205.125],[-46.259,-206.419],[-41.875,-217.5]],"c":true}]},{"t":24,"s":[{"i":[[0,0],[0.542,-1.529],[0.303,-0.247],[0.408,-0.113],[0.588,0.103],[0.435,0.252],[0,0],[0,-1.331],[-0.228,-0.767],[-2.718,-0.785],[-0.917,0.747],[0,1.366]],"o":[[0,0],[-0.129,0.362],[-0.299,0.244],[-0.519,0.143],[-0.459,-0.08],[-1.874,-1.085],[0,0],[0,0.575],[0.3,1.009],[1.963,0.567],[1.318,-1.073],[0,-2.318]],"v":[[-52.12,-223.052],[-52.17,-220.29],[-52.832,-219.371],[-53.907,-218.831],[-55.598,-218.761],[-56.953,-219.255],[-57.989,-222.805],[-60.01,-220.635],[-59.92,-218.553],[-55.967,-215.704],[-51.729,-216.215],[-50,-220.586]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 27","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[0,0],[3.969,-5.358],[7.144,7.342],[0,0],[2.089,-9.789],[-10.264,-0.892],[-1.191,11.708]],"o":[[0,0],[-3.969,5.358],[-7.144,-7.342],[0,0],[-1.707,8.001],[22.821,1.984],[1.191,-11.708]],"v":[[121.096,64.186],[121.064,82.897],[92.387,92.028],[83.349,68.743],[77.816,86.645],[99.665,103.08],[138.559,84.228]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[3.234,-4.366],[5.822,5.984],[0,0],[1.702,-7.977],[-8.364,-0.727],[-0.97,9.542]],"o":[[0,0],[-3.234,4.366],[-5.822,-5.984],[0,0],[-1.391,6.52],[18.598,1.617],[0.97,-9.542]],"v":[[129.673,59.905],[130.469,79.323],[98.818,82.764],[94.8,64.497],[88.125,77.905],[102.332,94.853],[137.405,79.989]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[2.5,-3.375],[4.5,4.625],[0,0],[1.316,-6.166],[-6.465,-0.562],[-0.75,7.375]],"o":[[0,0],[-2.5,3.375],[-4.5,-4.625],[0,0],[-1.075,5.04],[14.375,1.25],[0.75,-7.375]],"v":[[120.5,58.875],[125.125,72],[105.25,73.5],[106.25,60.25],[98.434,69.164],[107,83.375],[131.5,71.5]],"c":true}]},{"t":24,"s":[{"i":[[0,0],[2.5,-3.375],[4.5,4.625],[0,0],[1.316,-6.166],[-6.465,-0.562],[-0.75,7.375]],"o":[[0,0],[-2.5,3.375],[-4.5,-4.625],[0,0],[-1.075,5.04],[14.375,1.25],[0.75,-7.375]],"v":[[115.5,50.25],[120.125,63.375],[100.25,64.875],[101.25,51.625],[93.434,60.539],[102,74.75],[126.5,62.875]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":19.2,"s":[0,0],"h":1},{"t":20.4,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 26","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[-1.407,-6.438],[-18.612,-6.95],[-11.596,17.918],[0.469,11.886],[-0.821,3.439],[2.355,1.776],[2.927,2.834],[0,0],[8.133,-6.611],[0.002,0.001],[5.223,0.395],[0.465,0.509],[2.239,0.38],[2.637,3.922]],"o":[[0,0],[2.605,11.922],[28.304,10.57],[8.786,-13.576],[-0.13,-3.279],[2.103,-8.805],[-5.616,-4.237],[-2.417,-2.34],[0,0],[-8.551,6.951],[0.041,0.245],[-11.018,-0.833],[-0.296,0.081],[-3.747,-0.636],[-4.248,-6.318]],"v":[[-79.175,-131.834],[-89.851,-96.118],[-32.316,-11.445],[33.868,-25.909],[32.021,-84.741],[12.037,-91.241],[26.754,-100.765],[12.953,-108.177],[9.946,-115.75],[-3.524,-102.468],[-24.153,-96.917],[-35.551,-95.051],[-46.373,-93.776],[-61.24,-96.019],[-69.303,-103.942]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[-6.555,-21.757],[-17.679,-7.023],[-10.893,16.388],[-0.187,10.898],[-0.756,3.069],[1.879,1.823],[3.271,2.88],[0,0],[7.735,-6.611],[0.002,0.001],[4.967,0.395],[0.442,0.509],[2.13,0.38],[2.508,3.922]],"o":[[0,0],[5.82,19.318],[24.455,9.406],[8.073,-12.188],[0.039,-2.975],[1.869,-7.643],[-4.465,-5.491],[-2.223,-2.063],[0,0],[-8.132,6.951],[0.039,0.245],[-10.478,-0.833],[-0.281,0.081],[-3.563,-0.636],[-4.04,-6.318]],"v":[[-70.935,-130.184],[-82.07,-97.318],[-27.163,-19.845],[31.218,-33.939],[32.229,-85.312],[16.606,-91.52],[28.675,-100.665],[14.784,-110.849],[11.897,-117.2],[0.899,-100.768],[-19.475,-96.117],[-30.693,-94.101],[-42.004,-95.826],[-55.086,-97.419],[-63.397,-104.942]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[-2.435,-10.268],[-14.881,-7.243],[-8.785,11.798],[-2.156,7.931],[-0.559,1.958],[0.449,1.961],[-0.024,0.365],[0,0],[6.54,-6.611],[0.002,0.001],[4.2,0.395],[0.374,0.509],[1.801,0.38],[2.121,3.922]],"o":[[0,0],[2.93,13.771],[12.907,5.915],[5.936,-8.024],[0.543,-2.061],[1.166,-4.157],[-1.01,-9.254],[0.726,-0.635],[0,0],[-6.876,6.951],[0.033,0.245],[-8.86,-0.833],[-0.238,0.081],[-3.013,-0.636],[-3.416,-6.318]],"v":[[-40.964,-117.234],[-48.476,-99.668],[-11.704,-45.045],[23.267,-58.029],[32.856,-87.027],[37.31,-91.105],[39.938,-95.615],[46.024,-109.615],[46.751,-109.3],[14.169,-95.668],[-5.441,-93.717],[-16.118,-91.251],[-28.898,-101.976],[-36.624,-101.619],[-37.927,-108.442]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[-1.062,-6.438],[-13.949,-7.317],[-8.083,10.268],[-2.812,6.942],[-0.494,1.588],[-0.027,2.007],[4.646,3.066],[0,0],[6.142,-6.611],[0.002,0.001],[3.944,0.395],[0.351,0.509],[1.691,0.38],[1.991,3.922]],"o":[[0,0],[1.967,11.922],[9.057,4.751],[5.224,-6.636],[0.711,-1.756],[0.932,-2.996],[0.142,-10.508],[-1.449,-0.957],[0,0],[-6.457,6.951],[0.031,0.245],[-8.321,-0.833],[-0.223,0.081],[-2.829,-0.636],[-3.208,-6.318]],"v":[[-37.974,-123.584],[-50.945,-102.118],[-6.551,-53.445],[21.867,-59.559],[33.064,-87.598],[34.879,-92.633],[36.36,-100.265],[22.104,-121.537],[19.702,-123],[18.592,-93.968],[-0.764,-92.917],[-11.259,-90.301],[-24.53,-104.026],[-30.471,-103.019],[-39.77,-108.942]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[0.371,-13.361],[-25.203,-20.146],[-12.597,9.656],[-4.921,9.343],[-0.987,2.361],[-0.836,4.026],[5.793,-0.695],[0,0],[14.926,-10.904],[0.003,0.003],[7.778,2.33],[0.508,1.16],[3.253,1.423],[2.478,8.663]],"o":[[0,0],[-0.687,24.742],[16.365,13.081],[8.141,-6.241],[1.245,-2.363],[1.862,-4.454],[4.377,-21.078],[-1.807,0.217],[0,0],[-15.693,11.464],[-0.034,0.506],[-16.409,-4.915],[-0.481,0.077],[-5.442,-2.382],[-3.991,-13.955]],"v":[[-37.735,-172.882],[-49.813,-155.992],[-20.047,-71.104],[24.592,-70.616],[44.508,-95.247],[47.86,-102.354],[51.942,-115.21],[38.867,-136.637],[35.824,-136.034],[28.809,-111.768],[9.457,-118.017],[-1.43,-118.317],[-15.622,-131.445],[-29.567,-131.522],[-41.259,-149.795]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[1.969,-12.962],[-35.833,-22.034],[-12.664,8.212],[-4.801,8.593],[-0.945,2.224],[-0.715,4.045],[4.555,0.491],[0,0],[14.298,-11.294],[0.003,0.003],[7.652,2.118],[0.525,1.145],[3.211,1.334],[1.545,8.777]],"o":[[0,0],[-6.224,19.285],[16.75,11.8],[8.185,-5.307],[1.214,-2.174],[1.783,-4.196],[3.745,-21.173],[-1.421,-0.153],[0,0],[-15.032,11.874],[-0.02,0.506],[-16.143,-4.468],[-0.468,0.09],[-5.373,-2.233],[-2.533,-12.872]],"v":[[-31.271,-175.881],[-44.128,-161.899],[-18.716,-84.258],[26.625,-82.565],[46.432,-104.411],[49.677,-111.024],[53.461,-123.493],[43.518,-148.706],[41.121,-148.715],[34.442,-120.821],[14.219,-123.513],[3.583,-123.52],[-10.601,-136.252],[-24.217,-135.953],[-36.399,-153.865]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[5.165,-12.163],[-37.114,-19.566],[-12.798,5.324],[-4.562,7.092],[-0.862,1.951],[-0.474,4.081],[2.08,2.864],[0,0],[13.042,-12.074],[0.003,0.003],[7.399,1.694],[0.559,1.115],[3.128,1.156],[-0.321,9.004]],"o":[[0,0],[-5.165,12.163],[17.522,9.237],[8.272,-3.441],[1.154,-1.794],[1.626,-3.68],[2.479,-21.362],[-0.649,-0.893],[0,0],[-13.712,12.694],[0.007,0.507],[-15.61,-3.573],[-0.441,0.115],[-5.234,-1.934],[0.382,-10.707]],"v":[[-18.342,-181.878],[-32.756,-173.712],[-16.053,-110.566],[30.69,-106.464],[50.281,-122.739],[53.311,-128.364],[56.498,-140.058],[52.818,-172.845],[51.715,-174.078],[45.708,-138.926],[23.743,-134.507],[13.61,-133.927],[-0.559,-145.865],[-13.516,-144.816],[-26.679,-162.004]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[4.27,-10.394],[-30.682,-16.72],[-13.268,6.618],[-4.979,6.989],[-0.932,1.836],[-0.391,3.487],[1.719,2.447],[0,0],[6.952,-7.829],[0.887,-1.522],[6.404,-0.077],[3.904,2.683],[2.081,2.121],[-0.529,6.09]],"o":[[0,0],[-4.27,10.394],[14.485,7.894],[8.575,-4.278],[1.259,-1.768],[1.758,-3.464],[2.049,-18.256],[-0.536,-0.763],[0,0],[-7.178,7.686],[-1.165,2.262],[-12.472,-0.192],[-2.188,-1.095],[-3.182,-2.652],[0.838,-8.142]],"v":[[-6.358,-195.002],[-21.378,-187.669],[-19.401,-125.533],[24.474,-126.056],[45.412,-143.614],[48.708,-149.031],[51.999,-159.529],[48.957,-187.548],[48.045,-188.601],[44.56,-167.919],[31.834,-161.24],[21.117,-156.151],[4.096,-162.808],[-5.951,-166.44],[-12.619,-180.089]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[0,0],[3.375,-8.625],[-24.25,-13.875],[-8.209,2.148],[-2.912,4.298],[-0.551,1.251],[-0.309,2.894],[1.359,2.031],[0,0],[0.863,-3.585],[1.772,-3.048],[5.408,-1.848],[7.25,4.25],[1.035,3.086],[-0.737,3.176]],"o":[[0,0],[-3.375,8.625],[11.448,6.55],[5.305,-1.388],[0.737,-1.087],[1.039,-2.36],[1.62,-15.149],[-0.424,-0.634],[0,0],[-0.645,2.678],[-2.336,4.018],[-9.335,3.189],[-3.934,-2.306],[-1.13,-3.369],[1.293,-5.576]],"v":[[5.625,-208.125],[-10,-201.625],[0.75,-165],[30.991,-158.923],[43.521,-167.595],[45.455,-171.104],[47.5,-179],[45.096,-202.251],[44.375,-203.125],[43.412,-196.912],[39.925,-187.974],[28.625,-178.375],[8.75,-179.75],[1.615,-188.064],[1.44,-198.175]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[0,0],[2.262,-5.78],[-16.252,-9.299],[-5.501,1.44],[-1.951,2.881],[-0.369,0.838],[-0.207,1.939],[0.911,1.361],[0,0],[0.578,-2.402],[1.187,-2.042],[3.625,-1.238],[4.859,2.848],[0.694,2.068],[-0.494,2.128]],"o":[[0,0],[-2.262,5.78],[7.673,4.39],[3.556,-0.93],[0.494,-0.729],[0.696,-1.581],[1.086,-10.153],[-0.284,-0.425],[0,0],[-0.432,1.795],[-1.566,2.693],[-6.256,2.138],[-2.637,-1.546],[-0.757,-2.258],[0.867,-3.737]],"v":[[24.078,-226.951],[13.606,-222.595],[20.811,-198.049],[41.078,-193.976],[49.476,-199.788],[50.772,-202.14],[52.142,-207.432],[50.531,-223.014],[50.048,-223.6],[49.402,-219.436],[47.066,-213.446],[39.492,-207.013],[26.172,-207.934],[21.39,-213.506],[21.273,-220.283]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[1.137,-3.018],[-8.166,-4.855],[-2.764,0.752],[-0.981,1.504],[-0.185,0.438],[-0.104,1.013],[0.458,0.711],[0,0],[0.291,-1.254],[0.597,-1.066],[1.821,-0.647],[2.441,1.487],[0.348,1.08],[-0.248,1.111]],"o":[[0,0],[-1.137,3.018],[3.855,2.292],[1.787,-0.486],[0.248,-0.38],[0.35,-0.826],[0.545,-5.301],[-0.143,-0.222],[0,0],[-0.217,0.937],[-0.787,1.406],[-3.144,1.116],[-1.325,-0.807],[-0.38,-1.179],[0.436,-1.951]],"v":[[33.058,-225.569],[27.796,-223.295],[31.416,-210.48],[41.6,-208.354],[45.82,-211.388],[46.471,-212.616],[47.159,-215.379],[46.35,-223.514],[46.107,-223.82],[45.783,-221.646],[44.609,-218.519],[40.803,-215.16],[34.11,-215.641],[31.707,-218.55],[31.649,-222.088]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 25","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[3.803,-6.02],[-0.644,-18.953],[-3.085,-7.141],[-9.776,-3.01],[-11.185,10.091],[7.035,2.731],[-10.932,12.546],[-2.382,7.938],[0,0],[12.275,1.875],[4.764,-0.09],[4.205,9.343]],"o":[[0,0],[-4.149,6.567],[0.242,7.116],[7.066,16.357],[4.471,1.376],[2.645,-2.387],[-3.887,-1.509],[5.241,-6.015],[5.542,-18.468],[0,0],[-8.015,-1.224],[-6.788,0.128],[-3.845,-8.543]],"v":[[46.801,-108.122],[39.223,-100.142],[31.535,-63.224],[36.879,-41.45],[66.391,-7.708],[90.935,-9.341],[92.965,-20.731],[78.432,-43.046],[113.632,-55.188],[114.058,-82.26],[87.375,-83.321],[68.782,-88.689],[50.795,-87.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[9.469,-11.441],[-0.427,-12.46],[25.863,-2.37],[-9.988,-2.906],[-9.904,8.163],[4.035,6.714],[-9.316,10.56],[-2.186,7.055],[0,0],[10.633,0.451],[4.916,-0.093],[4.638,10.751]],"o":[[0,0],[-5.438,6.57],[0.226,6.593],[-18.23,1.671],[4.411,1.291],[2.888,-1.982],[-24.965,-1.869],[4.835,-5.401],[5.348,-17.07],[0,0],[-7.098,-0.093],[-6.788,0.128],[-4.35,-10.111]],"v":[[31.301,-99.672],[30.44,-82.299],[15.535,-65.641],[2.137,-37.13],[60.774,-9.024],[103.856,-2.006],[103.965,-26.631],[79.431,-46.766],[107.11,-59.377],[109.458,-84.91],[86.998,-81.074],[69.232,-86.139],[49.745,-87.793]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[8.772,-7.946],[-0.485,-14.01],[46.067,12.9],[-10.419,0.781],[5.098,9.17],[-22.09,19.781],[-7.7,8.573],[-1.991,6.173],[0,0],[8.99,-0.972],[5.068,-0.096],[5.072,12.16]],"o":[[0,0],[-7.123,5.712],[0.217,6.265],[-5.81,10.253],[38.843,-2.91],[3.131,-1.577],[-6.105,-6.882],[4.429,-4.787],[5.153,-15.671],[0,0],[-6.182,1.037],[-6.788,0.128],[-4.856,-11.68]],"v":[[40.176,-105.097],[31.785,-93.617],[15.66,-70.683],[-32.067,-52.65],[60.407,15.16],[113.402,-15.92],[97.09,-34.281],[80.43,-50.487],[100.587,-63.566],[104.858,-87.56],[86.621,-78.827],[69.682,-83.589],[48.695,-88.243]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[8.295,-6.299],[-1.36,-13.684],[30.098,7.226],[-10.42,-0.271],[1.806,6.263],[-4.173,21.639],[-6.083,6.587],[-1.795,5.291],[0,0],[7.348,-2.395],[5.22,-0.098],[5.505,13.568]],"o":[[0,0],[-7.418,4.901],[1.736,12.862],[-2.467,9.984],[27.287,-1.623],[3.375,-1.172],[-8.431,-4.067],[4.022,-4.173],[4.958,-14.272],[0,0],[-5.266,2.168],[-6.788,0.128],[-5.361,-13.248]],"v":[[43.635,-107.438],[33.216,-98.714],[14.452,-74.947],[-28.33,-60.897],[55.679,-7.712],[115.129,-14.918],[86.923,-36.889],[81.291,-54.207],[96.981,-66.228],[100.258,-90.21],[85.966,-80.747],[70.132,-81.039],[47.645,-88.693]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[7.818,-4.652],[-2.235,-13.358],[14.128,1.551],[-10.42,-1.322],[-1.487,3.355],[-2.404,4.475],[-4.467,4.601],[-1.6,4.409],[0,0],[5.705,-3.818],[5.372,-0.101],[5.938,14.976]],"o":[[0,0],[-7.714,4.09],[3.256,19.46],[0.875,9.714],[15.73,-0.336],[3.618,-0.767],[-10.756,-1.253],[3.616,-3.558],[4.763,-12.874],[0,0],[-4.35,3.299],[-6.788,0.128],[-5.866,-14.816]],"v":[[47.093,-109.78],[34.647,-103.811],[13.244,-79.21],[-14.592,-54.645],[50.951,-30.583],[89.856,-42.415],[89.256,-48.497],[82.151,-57.928],[93.376,-68.889],[95.658,-92.86],[85.311,-82.668],[70.582,-78.489],[46.595,-89.143]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[7.342,-3.006],[-2.378,-24.913],[0.604,0.517],[-10.421,-2.373],[-4.779,0.448],[-4.124,1.363],[-2.85,2.615],[-1.404,3.527],[0,0],[4.063,-5.241],[5.524,-0.104],[6.372,16.385]],"o":[[0,0],[-8.009,3.279],[1.215,12.724],[-0.28,9.333],[4.174,0.95],[3.861,-0.362],[4.756,-1.572],[3.21,-2.944],[4.568,-11.475],[0,0],[-3.434,4.429],[-6.788,0.128],[-6.372,-16.385]],"v":[[48.801,-114.122],[34.328,-116.908],[12.535,-84.974],[25.896,-76.517],[45.973,-46.455],[59.708,-49.913],[73.465,-49.731],[83.011,-61.648],[89.77,-71.55],[91.058,-95.51],[84.655,-84.588],[71.032,-75.939],[45.545,-89.593]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[6.514,-2.667],[-1.849,-20.511],[0.2,-0.178],[-9.247,-2.105],[-4.24,0.397],[-3.659,1.21],[-2.529,2.32],[-1.246,3.129],[0,0],[3.605,-4.65],[4.902,-0.092],[5.654,14.538]],"o":[[0,0],[-7.106,2.909],[0.936,10.25],[-4.193,8.596],[3.704,0.843],[3.426,-0.321],[4.22,-1.395],[2.848,-2.613],[4.054,-10.182],[0,0],[-3.047,3.93],[-6.023,0.114],[-5.654,-14.538]],"v":[[53.851,-113.841],[35.259,-112.49],[18.495,-83.856],[29.693,-74.596],[43.635,-49.785],[62.788,-50.02],[75.755,-57.236],[87.216,-63.805],[86.963,-77.091],[79.856,-100.851],[77.925,-88.66],[70.337,-80.986],[47.721,-93.101]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[6.112,-2.746],[-1.464,-18.997],[-0.219,-1.031],[-8.675,-2.168],[-3.978,0.409],[-3.433,1.246],[-2.373,2.389],[-1.169,3.222],[0,0],[3.382,-4.789],[4.599,-0.095],[5.304,14.971]],"o":[[0,0],[-6.667,2.996],[0.707,9.173],[-2.174,8.799],[3.475,0.868],[3.214,-0.331],[3.959,-1.437],[2.672,-2.69],[3.803,-10.485],[0,0],[-2.859,4.047],[-5.65,0.117],[-5.304,-14.971]],"v":[[50.703,-113.16],[41.785,-110.903],[27.168,-81.88],[29.802,-74.834],[44.283,-51.368],[60.657,-51.382],[72.31,-57.611],[82.743,-64.163],[83.892,-76.749],[79.054,-100.607],[76.411,-88.662],[68.294,-80.759],[47.076,-93.235]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[4.033,-1.651],[-0.261,-7.304],[-1.012,-2.265],[-5.724,-1.303],[-2.625,0.246],[-2.265,0.749],[-1.566,1.436],[-0.771,1.937],[0,0],[2.232,-2.879],[3.035,-0.057],[3.5,9]],"o":[[0,0],[-4.399,1.801],[0.101,2.829],[2.317,5.188],[2.293,0.522],[2.121,-0.199],[2.612,-0.864],[1.763,-1.617],[2.509,-6.303],[0,0],[-1.886,2.433],[-3.728,0.07],[-3.5,-9]],"v":[[57,-116],[49.05,-114.235],[40.375,-101.5],[42.083,-93.833],[54.622,-83.775],[62.03,-83.34],[68.625,-84.75],[74.83,-88.275],[78.543,-93.714],[79.25,-106.875],[75.733,-100.876],[68.25,-96.125],[54.25,-103.625]],"c":true}]},{"t":22.8,"s":[{"i":[[0,0],[4.033,-1.651],[-0.261,-7.304],[-1.012,-2.265],[-5.724,-1.303],[-2.625,0.246],[-2.265,0.749],[-1.566,1.436],[-0.771,1.937],[0,0],[2.232,-2.879],[3.035,-0.057],[3.5,9]],"o":[[0,0],[-4.399,1.801],[0.101,2.829],[2.317,5.188],[2.293,0.522],[2.121,-0.199],[2.612,-0.864],[1.763,-1.617],[2.509,-6.303],[0,0],[-1.886,2.433],[-3.728,0.07],[-3.5,-9]],"v":[[57.25,-120.25],[49.3,-118.485],[40.625,-105.75],[42.333,-98.083],[54.872,-88.025],[62.28,-87.59],[68.875,-89],[75.08,-92.525],[78.793,-97.964],[79.5,-111.125],[75.983,-105.126],[68.5,-100.375],[54.5,-107.875]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 24","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[-6.203,-22.84],[2.813,-16.191],[-0.865,-6.787],[-0.263,-2.428],[-12.86,2.324],[4.645,4.955],[-12.263,4.178],[0,0],[8.718,11.766],[7.102,16.236]],"o":[[0,0],[3.591,13.223],[-2.518,14.493],[0.702,5.507],[4.239,39.174],[0.264,-0.095],[-4.277,-4.562],[28.998,-9.88],[0,0],[-8.001,-10.798],[-7.102,-16.236]],"v":[[118.639,-78.62],[110.409,-55.223],[83.268,-36.743],[101.285,-22.659],[86.011,-3.424],[143.492,16.182],[130.564,7.224],[137.583,-6.966],[169.661,-10.414],[146.782,-34.016],[122.826,-50.776]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[-5.274,-23.838],[1.535,-11.759],[2.059,-19.511],[-1.26,-1.961],[-10.518,1.598],[2.206,3.412],[-9.058,2.959],[0,0],[9.889,5.989],[5.257,16.192]],"o":[[0,0],[-0.242,-0.444],[0.104,0.763],[1.313,4.299],[4.33,26.59],[0.993,-0.084],[-2.031,-3.142],[29.352,-8.556],[0,0],[-9.411,-5.343],[-5.472,-16.855]],"v":[[123.556,-84.704],[109.742,-50.056],[92.396,-34.513],[107.691,-20.489],[100.406,-6.214],[143.906,7.488],[137.849,1.322],[145.083,-8.55],[173.744,-27.08],[144.449,-26.349],[126.493,-50.192]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[-4.345,-24.836],[0.256,-7.326],[-1.179,-11.396],[-2.258,-1.494],[-24.321,-12.294],[-2.768,2.974],[-5.852,1.74],[0,0],[11.061,0.212],[6.18,16.214]],"o":[[0,0],[0.114,1.556],[1.116,3.391],[1.925,3.091],[-0.802,3.503],[1.721,-0.072],[2.548,-2.738],[48.667,-7.617],[0,0],[-10.822,0.111],[-6.287,-16.546]],"v":[[123.598,-78.037],[109.075,-44.89],[101.524,-32.284],[114.097,-18.32],[112.552,-6.003],[136.321,-4.456],[142.311,-10.088],[154.333,-17.633],[175.577,-49.497],[154.866,-30.307],[125.284,-47.359]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[-3.527,-25.17],[0.115,-6.623],[-1.647,-10.169],[-2.407,-1.504],[-24.495,-14.033],[-9.75,2.753],[-4.741,1.304],[0,0],[14.464,4.045],[5.932,16.452]],"o":[[0,0],[0.082,1.912],[1.134,3.903],[1.985,2.962],[0.06,3.279],[2.042,-0.008],[7.224,-2.04],[30.785,-8.053],[0,0],[-12.292,4.228],[-6.022,-16.728]],"v":[[125.914,-80.517],[109.737,-44.67],[104.405,-32.466],[113.109,-17.879],[110.766,-1.816],[139.328,-4.717],[154.78,-17.28],[179.907,-15.523],[179.501,-54.604],[157.488,-29.443],[126.862,-47.135]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[-1.892,-25.838],[-0.166,-5.217],[-2.581,-7.715],[-2.706,-1.524],[-24.843,-17.512],[-4.07,0.211],[-4.315,0.928],[0,0],[21.269,11.713],[5.437,16.928]],"o":[[0,0],[0.018,2.625],[1.17,4.925],[2.106,2.703],[1.784,2.829],[2.112,0.124],[3.747,-0.194],[32.944,-9.695],[0,0],[-15.231,12.463],[-5.49,-17.094]],"v":[[130.548,-85.477],[111.059,-44.231],[110.167,-32.829],[111.133,-16.998],[116.944,-10.69],[145.343,-5.238],[154.951,-5.23],[167.306,-6.805],[189.598,-55.069],[162.731,-27.713],[130.016,-46.685]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-0.759,-21.856],[-0.279,-3.643],[-2.618,-5.2],[-2.403,-1.28],[-22.873,1.178],[-2.958,0.077],[-3.082,0.503],[0,0],[15.072,4.607],[4.281,14.339]],"o":[[0,0],[-0.017,2.543],[0.993,4.614],[1.815,2.122],[2.348,2.132],[1.889,0.169],[2.724,-0.071],[26.972,-5.285],[0,0],[-12.053,7.482],[-4.308,-14.422]],"v":[[136.524,-73.989],[119.967,-43.428],[119.778,-34.332],[122.877,-21.189],[122.254,-15.104],[147.873,-11.928],[155.313,-11.721],[164.153,-12.527],[185.236,-52.035],[164.803,-30.357],[135.008,-45.468]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[0.375,-17.875],[-0.392,-2.068],[-2.654,-2.685],[-2.101,-1.035],[-3.972,-0.509],[-1.847,-0.057],[-1.849,0.077],[0,0],[8.875,-2.5],[3.125,11.75]],"o":[[0,0],[-0.052,2.46],[0.816,4.303],[1.524,1.542],[2.912,1.435],[1.667,0.213],[1.7,0.052],[21,-0.875],[0,0],[-8.875,2.5],[-3.125,-11.75]],"v":[[142.5,-62.5],[128.875,-42.625],[129.389,-35.835],[134.622,-25.379],[140.064,-21.519],[150.403,-18.617],[155.675,-18.212],[161,-18.25],[180.875,-49],[166.875,-33],[140,-44.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[0.168,-8.019],[-0.176,-0.928],[-1.191,-1.204],[-0.942,-0.464],[-1.782,-0.228],[-0.828,-0.026],[-0.83,0.035],[0,0],[3.981,-1.121],[1.402,5.271]],"o":[[0,0],[-0.023,1.104],[0.366,1.93],[0.684,0.692],[1.306,0.644],[0.748,0.096],[0.763,0.024],[9.421,-0.393],[0,0],[-3.981,1.121],[-1.402,-5.271]],"v":[[155.655,-76.684],[149.543,-67.768],[149.774,-64.722],[152.121,-60.032],[154.563,-58.3],[159.201,-56.998],[161.566,-56.817],[163.954,-56.834],[172.87,-70.628],[166.59,-63.45],[154.534,-68.497]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[0.168,-8.019],[-0.176,-0.928],[-1.191,-1.204],[-0.942,-0.464],[-1.782,-0.228],[-0.828,-0.026],[-0.83,0.035],[0,0],[3.981,-1.121],[1.402,5.271]],"o":[[0,0],[-0.023,1.104],[0.366,1.93],[0.684,0.692],[1.306,0.644],[0.748,0.096],[0.763,0.024],[9.421,-0.393],[0,0],[-3.981,1.121],[-1.402,-5.271]],"v":[[157.78,-81.934],[151.668,-73.018],[151.899,-69.972],[154.246,-65.282],[156.688,-63.55],[161.326,-62.248],[163.691,-62.067],[166.079,-62.084],[174.995,-75.878],[168.715,-68.7],[156.659,-73.747]],"c":true}]},{"t":24,"s":[{"i":[[0,0],[0.168,-8.019],[-0.176,-0.928],[-1.191,-1.204],[-0.942,-0.464],[-1.782,-0.228],[-0.828,-0.026],[-0.83,0.035],[0,0],[3.981,-1.121],[1.402,5.271]],"o":[[0,0],[-0.023,1.104],[0.366,1.93],[0.684,0.692],[1.306,0.644],[0.748,0.096],[0.763,0.024],[9.421,-0.393],[0,0],[-3.981,1.121],[-1.402,-5.271]],"v":[[159.155,-84.184],[153.043,-75.268],[153.274,-72.222],[155.621,-67.532],[158.063,-65.8],[162.701,-64.498],[165.066,-64.317],[167.454,-64.334],[176.37,-78.128],[170.09,-70.95],[158.034,-75.997]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 23","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[0.179,-5.813],[-1.105,-4.365],[-1.771,-2.71],[-7.68,-0.505],[-6.868,1.202],[-4.458,2.057],[0,0],[13.652,-1.232],[1.031,-0.248],[3.242,-1.1],[2.844,0.163],[1.772,0.424],[1.711,0.73],[1.22,0.743]],"o":[[0,0],[-0.116,3.778],[0.767,3.029],[2.903,4.443],[6.48,0.426],[8.125,-1.422],[21.125,-9.75],[0,0],[-16.625,1.5],[-0.106,0.36],[-4.506,1.529],[-2.007,-0.115],[-2.162,-0.517],[-2.007,-0.856],[-1.507,-0.918]],"v":[[119.375,-78.25],[118.177,-68.19],[119.404,-55.607],[123.125,-46.875],[140.148,-39.902],[160.86,-41.336],[180.875,-47],[202.5,-86],[181.375,-70.75],[157.253,-76.861],[151.395,-74.332],[138.125,-71.375],[132.442,-72.221],[126.605,-74.159],[121.72,-76.667]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[-0.158,-6.777],[-1.183,-3.931],[-1.838,-2.409],[-19.882,-2.353],[-1.861,-0.13],[-4.473,2.214],[0,0],[14.291,-1.09],[1.364,-0.28],[3.312,-0.828],[3.831,0.65],[1.786,0.583],[1.64,0.87],[1.111,0.834]],"o":[[0,0],[0.033,3.826],[0.821,2.728],[1.118,-0.361],[10.036,1.663],[8.482,-0.002],[56.667,-8.979],[0,0],[-17.354,0.708],[-0.253,0.342],[-4.603,1.151],[-2.12,-0.311],[-2.179,-0.712],[-1.924,-1.021],[-1.372,-1.031]],"v":[[123.465,-86.465],[120.699,-75.033],[122.239,-63.171],[123.632,-53.139],[150.132,-58.647],[171.611,-47.87],[186.583,-51.271],[215.403,-86.597],[186.042,-74.146],[162.402,-81.601],[156.331,-79.549],[141.736,-78],[135.871,-79.38],[130.13,-81.821],[125.559,-84.713]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[-0.832,-8.705],[-1.339,-3.064],[-1.971,-1.807],[-36.851,-17.864],[-2.74,-0.156],[-4.504,2.527],[0,0],[15.569,-0.808],[2.029,-0.346],[3.452,-0.284],[5.806,1.622],[1.815,0.903],[1.498,1.152],[0.892,1.017]],"o":[[0,0],[0.331,3.922],[0.929,2.126],[1.924,1.996],[17.149,4.136],[9.196,2.839],[38.75,-8.188],[0,0],[-18.813,-0.875],[-0.548,0.304],[-4.798,0.395],[-2.345,-0.704],[-2.214,-1.101],[-1.758,-1.352],[-1.102,-1.256]],"v":[[131.646,-102.896],[125.745,-88.719],[127.909,-78.298],[132.146,-72.417],[172.351,-72.136],[178.863,-53.44],[198,-59.813],[221.708,-94.542],[195.375,-80.938],[172.702,-91.08],[166.203,-89.983],[148.958,-91.25],[142.729,-93.697],[137.18,-97.145],[133.237,-100.806]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[-1.169,-9.669],[-1.417,-2.631],[-2.038,-1.506],[-23.835,-15.203],[-1.364,-0.608],[-4.52,2.683],[0,0],[16.208,-0.667],[2.362,-0.379],[3.522,-0.012],[6.793,2.108],[1.83,1.063],[1.428,1.293],[0.782,1.108]],"o":[[0,0],[0.48,3.97],[0.983,1.826],[1.597,1.181],[5.738,3.66],[9.552,4.259],[16.625,-9.25],[0,0],[-19.542,-1.667],[-0.696,0.286],[-4.896,0.016],[-2.458,-0.9],[-2.232,-1.296],[-1.675,-1.517],[-0.966,-1.368]],"v":[[135.736,-111.111],[128.268,-95.563],[130.744,-85.862],[135.153,-80.931],[163.085,-75.547],[173.864,-63.142],[203.708,-64.083],[228.111,-97.389],[200.042,-84.333],[177.851,-95.82],[171.139,-95.201],[152.569,-97.875],[146.158,-100.856],[140.704,-104.807],[137.076,-108.853]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-4.137,-22.616],[23.244,-33.654],[-2.219,-2.285],[-26.506,8.154],[-2.423,-0.166],[-4.257,2.822],[0,0],[16.475,1.95],[3.028,-0.444],[5.545,-1.248],[4.172,1.954],[5.724,-3.006],[3.288,1.346],[0.864,4.179]],"o":[[0,0],[2.309,6.554],[0.244,0.346],[2.12,2.485],[4.95,2.746],[7.629,2.32],[14.375,-9],[0,0],[-26.275,-2.3],[-1.167,0.293],[-5.705,1.284],[-0.151,0.013],[-4.87,2.558],[-6.619,-2.71],[-1.701,-8.228]],"v":[[108.742,-139.217],[94.137,-109.634],[107.506,-59.846],[123.192,-69.008],[163.006,-70.404],[179.221,-66.195],[211.175,-73.7],[225.317,-99.233],[202.775,-82.95],[181.926,-101.399],[167.422,-99.848],[153.292,-104.775],[138.776,-96.744],[120.619,-95.54],[110.458,-114.586]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[-1.984,-0.827],[0.22,2.503],[16.382,-18.118],[-2.07,-2.427],[-19.16,4.893],[-2.952,0.055],[-4.126,2.891],[0,0],[13.025,0.217],[3.36,-0.477],[4.166,-0.684],[3.372,2.116],[3.951,-1.418],[6.817,8.554],[-0.726,-0.006]],"o":[[0,0],[0.768,5.346],[0.074,1.107],[2.381,3.138],[4.557,2.289],[6.668,1.351],[13.25,-8.875],[0,0],[-18.62,-0.948],[-1.256,0.26],[-4.456,0.65],[-0.508,-0.553],[-3.411,0.99],[-6.933,-9.696],[-14.976,2.744]],"v":[[108.119,-139.728],[108.28,-140.003],[119.368,-76.632],[139.503,-79.297],[166.592,-69.457],[189.858,-66.222],[221.325,-72.8],[221.294,-108.989],[203.642,-92.883],[185.213,-101.064],[174.118,-100.135],[160.819,-107.892],[152.352,-101.273],[136.433,-103.554],[135.226,-120.744]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[-0.992,-0.413],[1.891,-1.002],[18.52,-0.206],[-1.921,-2.569],[-11.814,1.631],[-3.481,0.276],[-3.995,2.96],[0,0],[9.575,-1.517],[3.693,-0.509],[1.134,0.542],[2.571,2.278],[2.177,0.17],[3.267,5.261],[-0.698,0.793]],"o":[[0,0],[-0.774,4.138],[-0.095,1.869],[2.642,3.79],[4.163,1.833],[5.706,0.381],[12.125,-8.75],[0,0],[-10.965,0.404],[-7.024,2.498],[-3.207,0.015],[-0.865,-1.118],[-1.951,-0.578],[-3.3,-6.003],[-7.074,0.389]],"v":[[145.372,-132.739],[135.298,-126.622],[124.23,-112.544],[155.814,-89.586],[174.427,-78.886],[192.62,-77.874],[214.975,-83.9],[216.522,-114.244],[203.383,-99.067],[189.75,-112.478],[182.063,-112.171],[171.347,-106.508],[165.927,-105.803],[157.873,-110.067],[158.119,-121.652]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[3.562,-4.507],[0.382,-3.791],[-1.771,-2.71],[-4.467,-1.631],[-4.011,0.497],[-3.863,3.029],[0,0],[6.125,-3.25],[4.026,-0.542],[1.409,0.445],[1.771,2.44],[0.403,1.758],[-0.283,1.968],[-0.67,1.592]],"o":[[0,0],[-2.315,2.93],[-0.265,2.631],[2.903,4.443],[3.769,1.376],[4.745,-0.588],[11,-8.625],[0,0],[-3.309,1.756],[-1.433,0.193],[-1.958,-0.619],[-1.223,-1.684],[-0.492,-2.145],[0.332,-2.309],[0.828,-1.966]],"v":[[182.625,-125.75],[170.815,-121.992],[170.092,-107.956],[172.125,-99.875],[183.513,-90.814],[195.383,-89.525],[208.625,-95],[216.5,-117],[203.125,-105.25],[191.787,-100.393],[187.509,-100.708],[181.875,-105.125],[179.503,-110.332],[179.312,-116.581],[181.012,-122.56]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[3.562,-4.507],[0.382,-3.791],[-1.771,-2.71],[-4.467,-1.631],[-4.011,0.497],[-3.863,3.029],[0,0],[6.125,-3.25],[4.026,-0.542],[1.409,0.445],[1.771,2.44],[0.403,1.758],[-0.283,1.968],[-0.67,1.592]],"o":[[0,0],[-2.315,2.93],[-0.265,2.631],[2.903,4.443],[3.769,1.376],[4.745,-0.588],[11,-8.625],[0,0],[-3.309,1.756],[-1.433,0.193],[-1.958,-0.619],[-1.223,-1.684],[-0.492,-2.145],[0.332,-2.309],[0.828,-1.966]],"v":[[184.313,-146.813],[181.003,-140.179],[178.78,-122.518],[180.813,-114.438],[192.2,-105.377],[204.07,-104.088],[217.313,-109.563],[221.563,-129.563],[211.813,-119.813],[200.474,-114.956],[196.197,-115.27],[190.563,-119.688],[188.191,-124.895],[187.999,-131.144],[189.7,-137.122]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[3.562,-4.507],[0.382,-3.791],[-1.771,-2.71],[-4.467,-1.631],[-4.011,0.497],[-3.863,3.029],[0,0],[6.125,-3.25],[4.026,-0.542],[1.409,0.445],[1.771,2.44],[0.403,1.758],[-0.283,1.968],[-0.67,1.592]],"o":[[0,0],[-2.315,2.93],[-0.265,2.631],[2.903,4.443],[3.769,1.376],[4.745,-0.588],[11,-8.625],[0,0],[-3.309,1.756],[-1.433,0.193],[-1.958,-0.619],[-1.223,-1.684],[-0.492,-2.145],[0.332,-2.309],[0.828,-1.966]],"v":[[200,-154.875],[192.19,-147.367],[187.467,-137.08],[189.5,-129],[200.888,-119.939],[212.758,-118.65],[226,-124.125],[229.125,-148.625],[220.5,-134.375],[209.162,-129.518],[204.884,-129.833],[199.25,-134.25],[196.878,-139.457],[196.687,-145.706],[198.387,-151.685]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.2,"s":[{"i":[[0,0],[2.864,-3.624],[0.307,-3.048],[-1.424,-2.18],[-3.592,-1.311],[-3.225,0.4],[-3.107,2.436],[0,0],[4.925,-2.613],[3.237,-0.436],[1.133,0.358],[1.424,1.962],[0.324,1.414],[-0.228,1.583],[-0.539,1.28]],"o":[[0,0],[-1.862,2.356],[-0.213,2.115],[2.334,3.572],[3.031,1.106],[3.815,-0.473],[8.845,-6.935],[0,0],[-2.661,1.412],[-1.152,0.155],[-1.574,-0.498],[-0.983,-1.354],[-0.396,-1.725],[0.267,-1.857],[0.666,-1.581]],"v":[[206.121,-161.028],[199.841,-154.991],[196.043,-146.72],[197.677,-140.222],[206.834,-132.936],[216.379,-131.9],[227.027,-136.302],[229.54,-156.003],[222.605,-144.544],[213.488,-140.639],[210.048,-140.892],[205.517,-144.444],[203.61,-148.631],[203.457,-153.656],[204.824,-158.463]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[0,0],[2.864,-3.624],[0.307,-3.048],[-1.424,-2.18],[-3.592,-1.311],[-3.225,0.4],[-3.107,2.436],[0,0],[4.925,-2.613],[3.237,-0.436],[1.133,0.358],[1.424,1.962],[0.324,1.414],[-0.228,1.583],[-0.539,1.28]],"o":[[0,0],[-1.862,2.356],[-0.213,2.115],[2.334,3.572],[3.031,1.106],[3.815,-0.473],[8.845,-6.935],[0,0],[-2.661,1.412],[-1.152,0.155],[-1.574,-0.498],[-0.983,-1.354],[-0.396,-1.725],[0.267,-1.857],[0.666,-1.581]],"v":[[208.621,-170.778],[202.341,-164.741],[198.543,-156.47],[200.177,-149.972],[209.334,-142.686],[218.879,-141.65],[229.527,-146.052],[232.04,-165.753],[225.105,-154.294],[215.988,-150.389],[212.548,-150.642],[208.017,-154.194],[206.11,-158.381],[205.957,-163.406],[207.324,-168.213]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.6,"s":[{"i":[[0,0],[2.864,-3.624],[0.307,-3.048],[-1.424,-2.18],[-3.592,-1.311],[-3.225,0.4],[-3.107,2.436],[0,0],[4.925,-2.613],[3.237,-0.436],[1.133,0.358],[1.424,1.962],[0.324,1.414],[-0.228,1.583],[-0.539,1.28]],"o":[[0,0],[-1.862,2.356],[-0.213,2.115],[2.334,3.572],[3.031,1.106],[3.815,-0.473],[8.845,-6.935],[0,0],[-2.661,1.412],[-1.152,0.155],[-1.574,-0.498],[-0.983,-1.354],[-0.396,-1.725],[0.267,-1.857],[0.666,-1.581]],"v":[[208.621,-175.778],[202.341,-169.741],[198.543,-161.47],[200.177,-154.972],[209.334,-147.686],[218.879,-146.65],[229.527,-151.052],[232.04,-170.753],[225.105,-159.294],[215.988,-155.389],[212.548,-155.642],[208.017,-159.194],[206.11,-163.381],[205.957,-168.406],[207.324,-173.213]],"c":true}]},{"t":28.8,"s":[{"i":[[0,0],[2.864,-3.624],[0.307,-3.048],[-1.424,-2.18],[-3.592,-1.311],[-3.225,0.4],[-3.107,2.436],[0,0],[4.925,-2.613],[3.237,-0.436],[1.133,0.358],[1.424,1.962],[0.324,1.414],[-0.228,1.583],[-0.539,1.28]],"o":[[0,0],[-1.862,2.356],[-0.213,2.115],[2.334,3.572],[3.031,1.106],[3.815,-0.473],[8.845,-6.935],[0,0],[-2.661,1.412],[-1.152,0.155],[-1.574,-0.498],[-0.983,-1.354],[-0.396,-1.725],[0.267,-1.857],[0.666,-1.581]],"v":[[209.871,-181.528],[203.591,-175.491],[199.793,-167.22],[201.427,-160.722],[210.584,-153.436],[220.129,-152.4],[230.777,-156.802],[233.29,-176.503],[226.355,-165.044],[217.238,-161.139],[213.798,-161.392],[209.267,-164.944],[207.36,-169.131],[207.207,-174.156],[208.574,-178.963]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 22","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[5.62,-7.96],[-0.512,-1.213],[4.996,-9.688],[-0.392,-0.995],[25.602,4.006],[-0.353,0.817],[8.754,2.586],[0,0],[-19.103,-15.374],[-3.258,-2.615],[-4.181,-11.25],[-3.788,-1.2],[-11.91,-9.338],[-4.991,3.82],[-0.136,0.292],[1.443,3.205],[1.899,2.221],[1.5,2.165],[-0.264,6.203]],"o":[[0,0],[-5.27,7.464],[0.446,1.057],[-4.8,9.307],[0.369,0.937],[-11.433,-1.789],[-0.223,0.273],[-12.507,-3.694],[0,0],[2.245,1.807],[1.492,1.198],[1.795,4.832],[7.495,2.375],[8.626,6.763],[9.586,-7.337],[-0.859,-0.876],[-2.543,-5.648],[-2.976,-3.481],[-16.412,-23.686],[1.227,-28.771]],"v":[[-91.432,-149.671],[-98.62,-140.04],[-102.669,-130.646],[-103.798,-111.52],[-117.39,-102.543],[-137.704,-92.255],[-156.495,-92.256],[-173.239,-95.553],[-190.26,-105.324],[-171.69,-86.138],[-149.158,-83.402],[-147.545,-68.582],[-132.785,-58.09],[-105.814,-37.621],[-80.323,-33.595],[-72.293,-61.944],[-74.89,-68.437],[-84.337,-75.639],[-90.57,-76.451],[-94.01,-113.243]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[3.746,-6.283],[-0.453,-1.23],[8.878,-9.596],[-0.345,-1.007],[21.689,0.678],[-0.388,0.796],[8.73,2.564],[0,0],[-15.775,-11.745],[-3.121,-2.75],[-5.336,-10.34],[-2.603,-7.067],[-7.483,-4.064],[-4.257,3.198],[-0.973,0.777],[0.405,2.023],[4.276,2.818],[-5.375,6.08],[0.229,7.394]],"o":[[0,0],[-3.254,5.717],[0.395,1.072],[-6.572,7.762],[0.324,0.949],[-11.403,-0.047],[-0.235,0.261],[-10.47,-3.078],[0,0],[2.322,1.686],[1.43,1.26],[4.445,2.951],[12.413,-2.154],[8.13,4.902],[7.197,-5.426],[-0.054,-0.87],[-19.336,6.507],[-4.066,-2.68],[-10.375,-3.42],[0.876,-25.114]],"v":[[-102.175,-151.478],[-103.746,-137.217],[-110.249,-127.518],[-113.029,-112.758],[-130.206,-105.648],[-152.366,-95.177],[-172.79,-98.623],[-189.028,-99.295],[-204.707,-107.564],[-187.497,-86.886],[-171.437,-79.198],[-156.57,-71.826],[-141.683,-58.953],[-112.808,-49.281],[-95.459,-24.14],[-68.904,-49.731],[-44.414,-83.007],[-74.434,-81.82],[-82.625,-98.08],[-93.376,-117.886]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[3.134,-7.895],[-0.424,-1.238],[10.818,-9.551],[-0.321,-1.014],[19.733,-0.986],[-0.406,0.786],[8.719,2.553],[0,0],[-14.111,-9.93],[-3.053,-2.817],[-5.914,-9.885],[-2.011,-10],[-5.269,-1.427],[-3.89,2.886],[-1.391,1.02],[-0.114,1.432],[8.732,1.661],[6.403,4.395],[0.476,7.989]],"o":[[0,0],[-2.885,6.896],[0.37,1.079],[-7.458,6.989],[0.302,0.955],[-11.388,0.824],[-0.24,0.255],[-9.452,-2.77],[0,0],[2.361,1.625],[1.399,1.291],[5.769,2.01],[14.872,-4.419],[7.882,3.972],[6.002,-4.47],[0.349,-0.867],[-8.967,2.323],[-1.449,-2.501],[-3.974,-7.779],[9.684,-33.792]],"v":[[-107.546,-152.382],[-107.309,-139.555],[-113.789,-129.704],[-117.644,-113.377],[-136.614,-107.2],[-159.696,-96.639],[-180.937,-101.806],[-196.922,-101.166],[-211.931,-108.684],[-195.4,-87.261],[-182.577,-77.096],[-161.082,-73.448],[-146.132,-59.385],[-118.305,-49.861],[-101.528,-37.663],[-83.96,-55.875],[-41.926,-78.542],[-69.232,-83.161],[-83.153,-93.895],[-95.309,-112.458]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[2.522,-9.507],[-0.395,-1.247],[12.759,-9.505],[-0.297,-1.02],[17.777,-2.65],[-0.424,0.776],[8.707,2.542],[0,0],[-12.447,-8.115],[-2.985,-2.885],[-6.492,-9.429],[-1.419,-12.933],[-3.055,1.211],[-3.523,2.575],[-1.809,1.262],[-0.634,0.841],[-0.884,1.756],[-0.431,2.153],[0.723,8.584]],"o":[[0,0],[-2.516,8.076],[0.345,1.087],[-8.345,6.216],[0.28,0.961],[-11.373,1.695],[-0.246,0.249],[-8.433,-2.462],[0,0],[2.399,1.564],[1.367,1.322],[7.094,1.07],[17.331,-6.683],[7.634,3.041],[4.808,-3.515],[0.752,-0.864],[1.402,-1.861],[1.168,-2.322],[2.427,-12.139],[18.492,-42.471]],"v":[[-112.917,-153.285],[-110.872,-141.893],[-117.329,-131.89],[-122.259,-113.995],[-143.022,-108.752],[-167.027,-98.1],[-189.085,-104.99],[-204.817,-103.038],[-219.154,-109.804],[-203.303,-87.635],[-193.717,-74.994],[-165.594,-75.07],[-150.581,-59.817],[-123.802,-50.441],[-107.596,-51.186],[-99.015,-62.019],[-96.938,-64.577],[-93.53,-70.001],[-91.18,-76.71],[-97.242,-107.029]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[1.831,-5.31],[-0.366,-1.255],[11.812,-9.303],[-0.273,-1.026],[16.9,-3.334],[-0.441,0.765],[8.578,2.871],[0,0],[-12.887,-9.984],[-0.831,0.121],[-16.16,-7.466],[-1.428,-10.793],[-3.807,1.064],[-4.879,3.166],[-2.232,1.514],[-0.567,0.698],[-0.733,1.287],[-0.24,1.348],[0.171,8.141]],"o":[[0,0],[-1.827,8.229],[0.319,1.094],[-8.087,6.508],[0.257,0.966],[-11.264,0.687],[-0.252,0.244],[-8.917,-3.127],[0,0],[15.248,0.926],[0.419,-0.379],[9.418,1.442],[15.975,-5.473],[7.125,2.501],[6.658,-4.321],[0.686,-0.758],[1.254,-1.544],[0.969,-1.701],[1.351,-7.6],[12.237,-49.42]],"v":[[-117.372,-155.48],[-115.081,-145.69],[-122.056,-137.43],[-126.895,-120.864],[-153.868,-117.992],[-172.483,-103.749],[-190.149,-113.444],[-206.878,-109.076],[-227.711,-128.32],[-218.248,-101.676],[-193.669,-88.371],[-163.002,-90.358],[-148.739,-71.915],[-128.924,-50.375],[-110.892,-52.889],[-97.487,-65.497],[-95.61,-67.679],[-92.651,-71.913],[-90.89,-76.459],[-98.321,-95.08]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[1.54,-2.013],[-0.337,-1.264],[10.865,-9.101],[-0.25,-1.033],[16.022,-4.019],[-0.459,0.755],[8.449,3.2],[0,0],[-13.328,-11.853],[-1.806,-1.483],[-21.921,-4.015],[-1.437,-8.653],[-4.559,0.918],[-4.609,2.75],[-2.654,1.766],[-0.528,0.609],[-0.761,1.165],[-0.432,1.29],[-0.381,7.698]],"o":[[0,0],[-1.139,8.382],[0.294,1.101],[-7.829,6.8],[0.235,0.972],[-11.156,-0.32],[-0.257,0.238],[-9.4,-3.792],[0,0],[8.667,1.422],[0.846,0.518],[11.743,1.814],[14.62,-4.263],[6.616,1.96],[6.29,-3.753],[0.62,-0.652],[1.167,-1.348],[1.007,-1.54],[2.436,-7.274],[5.983,-56.37]],"v":[[-124.201,-155.175],[-119.29,-149.487],[-126.783,-142.97],[-131.531,-127.733],[-151.588,-127.232],[-171.189,-115.023],[-191.213,-121.898],[-208.939,-115.114],[-223.518,-132.211],[-222.693,-106.342],[-200.746,-95.373],[-167.534,-99.272],[-146.896,-84.014],[-126.171,-55.184],[-109.346,-57.59],[-95.959,-68.974],[-94.239,-70.865],[-91.362,-74.626],[-89.243,-78.852],[-88.65,-97.255]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[0.199,-10.667],[-0.308,-1.272],[9.917,-8.898],[-0.226,-1.039],[15.144,-4.703],[-0.477,0.745],[8.32,3.529],[0,0],[-13.768,-13.722],[-2.78,-3.087],[-27.683,-0.564],[-1.446,-6.513],[-5.311,0.771],[-4.339,2.334],[-3.077,2.017],[-0.488,0.521],[-0.79,1.044],[-0.624,1.233],[-0.934,7.255]],"o":[[0,0],[-0.45,8.535],[0.269,1.109],[-7.571,7.091],[0.213,0.978],[-11.048,-1.328],[-0.263,0.232],[-9.883,-4.457],[0,0],[2.086,1.918],[1.273,1.414],[14.067,2.186],[13.264,-3.053],[6.107,1.42],[5.922,-3.186],[0.555,-0.546],[1.081,-1.152],[1.044,-1.38],[3.52,-6.948],[-0.272,-63.319]],"v":[[-125.531,-179.37],[-123.499,-153.283],[-131.511,-148.51],[-136.167,-134.602],[-149.309,-136.472],[-169.894,-126.297],[-192.278,-130.352],[-211,-121.152],[-219.325,-136.102],[-227.138,-111.008],[-207.823,-102.376],[-172.067,-108.186],[-145.054,-96.112],[-123.418,-59.993],[-107.8,-62.291],[-94.431,-72.451],[-92.868,-74.05],[-90.073,-77.339],[-87.596,-81.246],[-85.478,-100.431]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[0,0],[-0.576,-11.053],[-0.279,-1.281],[8.97,-8.696],[-0.202,-1.045],[18.1,0.112],[-0.494,0.735],[8.191,3.858],[0,0],[-14.209,-15.591],[-2.712,-3.155],[-21.775,-2.609],[-1.456,-4.373],[-6.063,0.625],[-4.233,1.91],[-3.499,2.269],[-0.442,0.426],[-0.77,0.882],[-0.715,1.087],[-1.486,6.812]],"o":[[0,0],[0.239,8.688],[0.243,1.116],[-7.313,7.383],[0.19,0.984],[-10.939,-2.336],[-0.269,0.226],[-10.367,-5.122],[0,0],[1.982,2.036],[1.242,1.445],[12.853,3.795],[35.794,-3.456],[5.598,0.88],[5.777,-2.607],[0.489,-0.44],[0.978,-0.942],[1.018,-1.166],[4.029,-6.131],[10.474,-75.185]],"v":[[-133.652,-172.149],[-127.708,-157.08],[-134.738,-150.05],[-137.637,-135.637],[-151.071,-133.879],[-174.85,-123.362],[-194.175,-131.806],[-204.561,-126.44],[-215.132,-137.702],[-219.667,-121.965],[-210.192,-107.169],[-180.392,-110.391],[-159.544,-96.544],[-127.374,-72.761],[-121.908,-73.684],[-108.07,-82.595],[-106.675,-83.893],[-104.06,-86.625],[-101.477,-89.997],[-90.474,-107.315]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[-0.834,-5.873],[-0.25,-1.289],[8.023,-8.494],[-0.178,-1.052],[21.056,4.928],[-0.512,0.725],[8.062,4.187],[0,0],[-14.649,-17.459],[-2.643,-3.222],[-15.867,-4.653],[-1.465,-2.233],[-6.815,0.478],[-4.127,1.486],[-3.922,2.521],[-0.395,0.331],[-0.751,0.72],[-0.805,0.942],[-2.038,6.369]],"o":[[0,0],[0.927,8.841],[0.218,1.123],[-7.055,7.675],[0.168,0.99],[-10.831,-3.343],[-0.274,0.22],[-10.85,-5.787],[0,0],[1.878,2.154],[1.211,1.476],[11.639,5.403],[33.535,-10.774],[5.089,0.34],[5.632,-2.028],[0.423,-0.334],[0.875,-0.731],[0.993,-0.952],[4.537,-5.313],[11.594,-87.926]],"v":[[-138.148,-166.552],[-131.916,-160.877],[-137.965,-151.591],[-139.106,-136.672],[-152.833,-131.285],[-179.806,-120.428],[-196.073,-133.26],[-210.872,-132.853],[-228.814,-150.551],[-219.82,-126.923],[-212.561,-111.963],[-188.716,-112.597],[-174.035,-96.976],[-131.204,-85.903],[-124.265,-86.328],[-119.209,-89.739],[-117.732,-91.236],[-116.047,-94.411],[-111.109,-96.499],[-93.844,-115.324]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[-2.125,-11.827],[-0.221,-1.298],[7.076,-8.292],[-0.155,-1.058],[24.011,9.743],[-0.53,0.714],[7.933,4.516],[0,0],[-15.09,-19.328],[-2.575,-3.29],[-9.959,-6.698],[-1.474,-0.092],[-7.567,0.332],[-4.02,1.062],[-4.344,2.772],[-0.349,0.236],[-0.731,0.558],[-0.895,0.797],[-2.59,5.927]],"o":[[0,0],[1.616,8.993],[0.193,1.131],[-6.797,7.966],[0.146,0.996],[-10.723,-4.351],[-0.28,0.214],[-11.334,-6.452],[0,0],[1.774,2.272],[1.18,1.507],[10.425,7.012],[9.196,0.577],[4.58,-0.201],[5.487,-1.449],[0.357,-0.228],[0.772,-0.521],[0.967,-0.737],[5.046,-4.495],[27.715,-63.417]],"v":[[-147.645,-174.955],[-136.125,-164.673],[-141.193,-153.131],[-140.576,-137.708],[-154.595,-128.692],[-184.761,-117.493],[-197.97,-134.714],[-217.183,-139.266],[-229.995,-155.9],[-221.973,-127.381],[-214.93,-116.757],[-197.041,-114.802],[-188.526,-97.408],[-163.035,-94.546],[-150.123,-96.471],[-135.347,-102.883],[-134.289,-103.578],[-132.034,-105.197],[-129.24,-107.5],[-117.715,-123.333]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[-2.033,-9.937],[0.091,-1.955],[5.6,-6.623],[0.307,-1.035],[19.135,7.444],[0.098,1.204],[6.002,3.704],[0,0],[-11.584,-15.967],[-2.21,-2.923],[-11.427,-7.446],[-5.442,-1.551],[-6.575,0.431],[-3.174,1.187],[-3.182,2.902],[-0.254,0.245],[-0.53,0.572],[-0.645,0.803],[-2.184,5.182]],"o":[[0,0],[1.488,7.416],[-0.012,1.445],[-5.409,6.403],[-0.821,1.278],[-9.664,-3.459],[-0.595,-0.359],[-8.531,-5.025],[0,0],[1.4,2.09],[1.298,1.808],[13.424,8.708],[7.687,2.189],[3.89,-0.243],[4.332,-1.62],[0.261,-0.238],[0.563,-0.542],[0.7,-0.757],[3.636,-4.525],[22.974,-54.25]],"v":[[-158.546,-182.592],[-148.697,-173.193],[-152.332,-162.036],[-152.553,-148.974],[-164.18,-141.215],[-190.009,-132.308],[-202.929,-146.746],[-217.919,-151.523],[-227.559,-164.3],[-230.988,-140.274],[-226.203,-132.79],[-214.656,-114.726],[-187.519,-104.55],[-166.229,-107.989],[-155.654,-110.188],[-144.437,-117.107],[-143.663,-117.833],[-142.024,-119.505],[-140.007,-121.846],[-131.411,-136.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.6,"s":[{"i":[[0,0],[-1.76,-4.268],[1.029,-3.927],[1.174,-1.615],[1.691,-0.964],[4.506,0.544],[1.981,2.673],[0.211,1.27],[0,0],[-1.064,-5.885],[-1.114,-1.824],[-4.366,-3.186],[-3.157,-0.965],[-3.601,0.731],[-1.628,0.767],[-1.781,1.622],[-0.143,0.136],[-0.3,0.317],[-0.366,0.442],[-0.965,2.95]],"o":[[0,0],[1.107,2.684],[-0.625,2.388],[-1.245,1.713],[-3.722,2.123],[-6.489,-0.783],[-1.541,-2.08],[-0.124,-0.745],[0,0],[0.279,1.544],[1.655,2.711],[3.325,2.426],[4.141,1.267],[1.821,-0.37],[2.221,-1.047],[0.146,-0.133],[0.316,-0.302],[0.396,-0.418],[2.063,-2.491],[8.75,-26.75]],"v":[[-191.25,-205.5],[-186.414,-198.753],[-185.75,-188.75],[-188.486,-182.771],[-192.935,-178.786],[-205.75,-176.75],[-217.805,-182.843],[-220.126,-188.296],[-220.25,-189.5],[-223.032,-179.952],[-221.021,-174.887],[-212.25,-166],[-202.496,-160.977],[-190.811,-160.32],[-185.63,-162.045],[-179.603,-166.096],[-179.169,-166.501],[-178.245,-167.429],[-177.101,-168.72],[-172.5,-177]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[-1.76,-4.268],[1.029,-3.927],[1.174,-1.615],[1.691,-0.964],[4.506,0.544],[1.981,2.673],[0.211,1.27],[0,0],[-1.064,-5.885],[-1.114,-1.824],[-4.366,-3.186],[-3.157,-0.965],[-3.601,0.731],[-1.628,0.767],[-1.781,1.622],[-0.143,0.136],[-0.3,0.317],[-0.366,0.442],[-0.965,2.95]],"o":[[0,0],[1.107,2.684],[-0.625,2.388],[-1.245,1.713],[-3.722,2.123],[-6.489,-0.783],[-1.541,-2.08],[-0.124,-0.745],[0,0],[0.279,1.544],[1.655,2.711],[3.325,2.426],[4.141,1.267],[1.821,-0.37],[2.221,-1.047],[0.146,-0.133],[0.316,-0.302],[0.396,-0.418],[2.063,-2.491],[8.75,-26.75]],"v":[[-208.75,-233.75],[-203.914,-227.003],[-203.25,-217],[-205.986,-211.021],[-210.435,-207.036],[-223.25,-205],[-235.305,-211.093],[-237.626,-216.546],[-237.75,-217.75],[-240.532,-208.202],[-238.521,-203.137],[-229.75,-194.25],[-219.996,-189.227],[-208.311,-188.57],[-203.13,-190.295],[-197.103,-194.346],[-196.669,-194.751],[-195.745,-195.679],[-194.601,-196.97],[-190,-205.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":30,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 21","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[13.12,-2.237],[-0.45,-1.285],[0,0],[-4.995,-7.976],[-7.968,6.746],[-13.161,5.037],[-35.761,2.185],[-0.175,0.004],[14.362,12.963]],"o":[[-13.12,2.237],[16.05,45.787],[0,0],[4.995,7.976],[12.612,-10.677],[0.774,-0.392],[10.511,-0.642],[-11.556,-11.425],[-14.362,-12.963]],"v":[[-65.35,-48.959],[-94.3,-39.215],[-128.352,10.504],[-114.496,25.66],[-95.622,87.77],[-57.024,64.392],[-39.989,88.065],[3.232,60.24],[-38.469,-22.763]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[13.12,-2.237],[-0.45,-1.285],[0,0],[-4.995,-7.976],[-10.436,-0.298],[-37.382,24.065],[-6.899,1.288],[-1.211,3.026],[14.362,12.963]],"o":[[-13.12,2.237],[16.05,45.787],[0,0],[4.995,7.976],[5.685,0.162],[8.421,-5.421],[5.434,-1.014],[6.036,-15.087],[-14.362,-12.963]],"v":[[-65.35,-48.959],[-94.3,-39.215],[-128.352,10.504],[-114.496,25.66],[-103.122,66.02],[-50.868,62.435],[-25.993,71.376],[-15.518,65.49],[-38.469,-22.763]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[12.853,-3.282],[-2.779,-6.757],[0,0],[-5.606,-7.52],[-10.392,0.547],[-28.538,11.132],[-6.503,1.259],[-0.958,3.104],[15.316,11.717]],"o":[[-12.853,3.282],[17.375,45.278],[0,0],[5.606,7.52],[5.661,-0.298],[8.814,-2.29],[5.122,-0.991],[4.777,-15.476],[-15.316,-11.717]],"v":[[-77.763,-52.563],[-104,-43.868],[-129.315,10.2],[-120.556,25.538],[-94.974,55.382],[-53.038,58.671],[-28.624,63.06],[-19.01,57.107],[-48.941,-28.711]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[12.586,-4.328],[-5.108,-12.229],[0,0],[-6.218,-7.064],[-10.347,1.393],[-19.694,-1.8],[-6.107,1.229],[-0.706,3.182],[16.269,10.471]],"o":[[-12.586,4.328],[18.7,44.77],[0,0],[6.218,7.064],[5.636,-0.759],[9.207,0.842],[4.81,-0.968],[3.518,-15.865],[-16.269,-10.471]],"v":[[-90.177,-56.166],[-113.7,-48.52],[-130.278,9.897],[-118.115,40.166],[-75.577,47.493],[-55.208,54.906],[-31.254,54.744],[-22.501,48.723],[-59.414,-34.66]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[12.586,-4.328],[-0.937,-13.219],[0,0],[-6.218,-7.064],[-10.347,1.393],[-18.478,1.037],[-5.739,2.087],[-0.706,3.182],[16.269,10.471]],"o":[[-12.586,4.328],[1.95,27.52],[0,0],[6.218,7.064],[5.636,-0.759],[8.639,-0.485],[4.52,-1.644],[3.518,-15.865],[-16.269,-10.471]],"v":[[-105.927,-54.416],[-125.45,-40.27],[-139.778,4.397],[-136.365,20.416],[-121.077,42.993],[-76.009,42.703],[-53.534,39.092],[-45.251,31.973],[-69.164,-39.66]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[13.25,1.25],[-0.25,-13.25],[0,0],[-2.75,-9],[-10,-3],[-13.851,1.02],[-5.058,1.86],[-1.956,2.608],[10.5,16.25]],"o":[[-13.25,-1.25],[0.25,13.25],[0,0],[2.75,9],[5.447,1.634],[6.475,-0.477],[3.984,-1.465],[9.75,-13],[-10.5,-16.25]],"v":[[-92.25,-62.75],[-118.75,-45.5],[-142,-29.5],[-145.5,-13.5],[-123,21.75],[-88.981,23.925],[-71.163,20.547],[-62,14.5],[-59.5,-40.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[13.25,1.25],[-0.25,-13.25],[0,0],[-2.75,-9],[-10,-3],[-13.851,1.02],[-5.058,1.86],[-1.956,2.608],[10.5,16.25]],"o":[[-13.25,-1.25],[0.25,13.25],[0,0],[2.75,9],[5.447,1.634],[6.475,-0.477],[3.984,-1.465],[9.75,-13],[-10.5,-16.25]],"v":[[-92.25,-68.25],[-118.75,-51],[-142,-35],[-145.5,-19],[-123,16.25],[-88.981,18.425],[-71.163,15.047],[-62,9],[-59.5,-46]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[13.25,1.25],[-0.25,-13.25],[0,0],[-2.75,-9],[-10,-3],[-13.851,1.02],[-5.058,1.86],[-1.956,2.608],[10.5,16.25]],"o":[[-13.25,-1.25],[0.25,13.25],[0,0],[2.75,9],[5.447,1.634],[6.475,-0.477],[3.984,-1.465],[9.75,-13],[-10.5,-16.25]],"v":[[-102,-81.625],[-145.5,-89.375],[-150.5,-65.625],[-150.5,-23.625],[-128,11.625],[-93.981,13.8],[-76.163,10.422],[-67,4.375],[-64.5,-50.625]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[13.25,1.25],[-0.25,-13.25],[0,0],[-2.75,-9],[-10,-3],[-13.851,1.02],[-5.058,1.86],[-1.956,2.608],[10.5,16.25]],"o":[[-13.25,-1.25],[0.25,13.25],[0,0],[2.75,9],[5.447,1.634],[6.475,-0.477],[3.984,-1.465],[9.75,-13],[-10.5,-16.25]],"v":[[-111.75,-95],[-179.25,-98.75],[-152,-44.25],[-155.5,-28.25],[-133,7],[-98.981,9.175],[-81.163,5.797],[-72,-0.25],[-69.5,-55.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.2,"s":[{"i":[[13.25,1.25],[-0.25,-13.25],[0,0],[-2.75,-9],[-10,-3],[-13.851,1.02],[-5.058,1.86],[-1.956,2.608],[10.5,16.25]],"o":[[-13.25,-1.25],[0.25,13.25],[0,0],[2.75,9],[5.447,1.634],[6.475,-0.477],[3.984,-1.465],[9.75,-13],[-10.5,-16.25]],"v":[[-129.875,-90.5],[-173.375,-101.75],[-179.625,-57.25],[-183.125,-41.25],[-160.625,-6],[-126.606,-3.825],[-108.788,-7.203],[-99.625,-13.25],[-97.125,-68.25]],"c":true}]},{"t":26.4,"s":[{"i":[[13.25,1.25],[-0.25,-13.25],[0,0],[-2.75,-9],[-10,-3],[-13.851,1.02],[-5.058,1.86],[-1.956,2.608],[10.5,16.25]],"o":[[-13.25,-1.25],[0.25,13.25],[0,0],[2.75,9],[5.447,1.634],[6.475,-0.477],[3.984,-1.465],[9.75,-13],[-10.5,-16.25]],"v":[[-157.5,-103.5],[-184,-86.25],[-207.25,-70.25],[-210.75,-54.25],[-188.25,-19],[-154.231,-16.825],[-136.413,-20.203],[-127.25,-26.25],[-124.75,-81.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 20","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[9.052,0],[0.302,-14.486],[-22.328,0],[2.112,14.853]],"o":[[-9.052,0],[-0.302,14.486],[22.328,0],[-2.112,-14.853]],"v":[[-81.763,124.691],[-105.448,145.595],[-82.819,174.75],[-59.737,143.945]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[7.547,0],[0.252,-11.221],[-18.576,-1.212],[1.761,11.505]],"o":[[-7.547,0],[-0.252,11.221],[38.818,2.533],[-1.761,-11.505]],"v":[[-78.938,123.816],[-109.436,139.633],[-89.193,162.842],[-55.448,138.73]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[6.042,0],[0.201,-7.956],[-14.904,0],[1.41,8.157]],"o":[[-6.042,0],[-0.201,7.956],[14.904,0],[-1.41,-8.157]],"v":[[-76.113,122.941],[-91.924,134.422],[-76.818,150.434],[-61.41,133.515]],"c":true}]},{"t":25.2,"s":[{"i":[[6.042,0],[0.201,-7.956],[-14.904,0],[1.41,8.157]],"o":[[-6.042,0],[-0.201,7.956],[14.904,0],[-1.41,-8.157]],"v":[[-75.363,121.566],[-91.174,133.047],[-76.068,149.059],[-60.66,132.14]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":19.2,"s":[0,0],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 19","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[-3.759,-3.506],[-7.373,1.377],[-2.38,1.685],[0,0],[6.022,-2.43],[0.135,-0.046],[2.312,0.536],[0.079,0.24],[0.49,0.209]],"o":[[0,0],[4.862,4.535],[3.355,-0.627],[2.121,-1.502],[0,0],[-2.169,0.875],[-0.07,0.051],[-2.861,-0.664],[0.043,-0.113],[-3.094,-1.321]],"v":[[-81.25,152.477],[-72.499,156.256],[-55.047,159.127],[-48.041,157.315],[-38.85,151.029],[-54.155,152.93],[-60.47,152.215],[-64.762,152.464],[-69.359,152.228],[-72.317,150.321]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[-8.706,-12.275],[-10.983,18.834],[7.057,4.019],[0,0],[6.275,-14.287],[0.31,-0.252],[13.494,-6.028],[0.326,0.077],[1.205,0.825]],"o":[[0,0],[8.706,12.275],[11.949,-20.492],[-5.592,-3.185],[0,0],[-2.598,5.915],[-0.147,0.155],[-21.504,9.607],[0.045,-0.163],[-6.33,-4.335]],"v":[[-136.719,134.176],[-133.559,149.688],[-83.837,139.78],[-84.283,106.193],[-96.546,102.998],[-86.434,121.042],[-100.405,131.471],[-110.101,147.73],[-124.262,149.361],[-130.867,146.864]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-9.258,-21.036],[-13.37,15.199],[3.305,9.026],[0,0],[8.269,-11.896],[0.328,-0.175],[13.372,-3.083],[0.464,0.215],[1.549,1.604]],"o":[[0,0],[9.259,21.036],[10.679,-12.139],[-4.766,-13.015],[0,0],[-3.424,4.925],[-0.162,0.115],[-21.309,4.912],[0.117,-0.23],[-8.14,-8.428]],"v":[[-155.729,100.088],[-161.366,132.017],[-92.529,141.753],[-83.301,103.86],[-101.94,87.906],[-94.309,113.866],[-107.57,118.573],[-118.467,137.734],[-137.578,128.374],[-148.802,126.474]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[-9.443,-23.957],[-14.166,13.987],[6.419,9.375],[0,0],[8.934,-11.099],[0.334,-0.149],[13.331,-2.101],[0.51,0.261],[1.664,1.864]],"o":[[0,0],[9.443,23.957],[15.414,-15.218],[-5.087,-7.43],[0,0],[-3.699,4.595],[-0.166,0.101],[-21.244,3.347],[0.141,-0.253],[-8.743,-9.792]],"v":[[-152.732,93.725],[-161.968,123.793],[-97.093,133.411],[-91.951,94.851],[-103.738,82.875],[-96.934,111.474],[-109.959,114.274],[-121.256,134.403],[-142.016,121.378],[-154.781,119.678]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[0,0],[-8.096,-20.541],[-12.146,11.993],[6.226,7.454],[0,0],[4.325,-8.013],[2.693,-2.185],[9.043,-0.244],[1.378,1.109],[1.279,1.433]],"o":[[0,0],[8.096,20.541],[13.216,-13.049],[-4.934,-5.907],[0,0],[-1.701,4.878],[-2.77,2.295],[-11.989,1.21],[-0.443,-0.574],[-7.497,-8.396]],"v":[[-142.741,90.237],[-153.922,117.147],[-95.671,125.893],[-92.802,94.077],[-103.994,84.688],[-99.75,103.388],[-109.104,112.637],[-122.485,124.386],[-136.627,115.62],[-144.453,113.339]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[-6.75,-17.125],[-10.127,9.998],[4.589,6.702],[0,0],[-0.284,-4.926],[5.053,-4.221],[4.755,1.612],[2.247,1.958],[0.894,1.001]],"o":[[0,0],[6.75,17.125],[11.018,-10.879],[-3.637,-5.311],[0,0],[0.297,5.162],[-5.373,4.489],[-2.734,-0.927],[-1.028,-0.895],[-6.25,-7]],"v":[[-132.75,86.75],[-145.875,115.75],[-99.5,122.625],[-95.824,95.061],[-104.25,86.5],[-102.565,95.301],[-108.25,111],[-123.715,114.369],[-131.237,109.863],[-134.125,107]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[-6.75,-17.125],[-10.127,9.998],[4.589,6.702],[0,0],[-0.284,-4.926],[5.053,-4.221],[4.755,1.612],[2.247,1.958],[0.894,1.001]],"o":[[0,0],[6.75,17.125],[11.018,-10.879],[-3.637,-5.311],[0,0],[0.297,5.162],[-5.373,4.489],[-2.734,-0.927],[-1.028,-0.895],[-6.25,-7]],"v":[[-144.875,66.75],[-158,95.75],[-111.625,102.625],[-107.949,75.061],[-116.375,66.5],[-114.69,75.301],[-120.375,91],[-135.84,94.369],[-143.362,89.863],[-146.25,87]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.2,"s":[{"i":[[0,0],[-6.75,-17.125],[-10.127,9.998],[4.589,6.702],[0,0],[-0.284,-4.926],[5.053,-4.221],[4.755,1.612],[2.247,1.958],[0.894,1.001]],"o":[[0,0],[6.75,17.125],[11.018,-10.879],[-3.637,-5.311],[0,0],[0.297,5.162],[-5.373,4.489],[-2.734,-0.927],[-1.028,-0.895],[-6.25,-7]],"v":[[-145.375,55.125],[-158.5,84.125],[-112.125,91],[-108.449,63.436],[-116.875,54.875],[-115.19,63.676],[-120.875,79.375],[-136.34,82.744],[-143.862,78.238],[-146.75,75.375]],"c":true}]},{"t":26.4,"s":[{"i":[[0,0],[-6.75,-17.125],[-10.127,9.998],[4.589,6.702],[0,0],[-0.284,-4.926],[5.053,-4.221],[4.755,1.612],[2.247,1.958],[0.894,1.001]],"o":[[0,0],[6.75,17.125],[11.018,-10.879],[-3.637,-5.311],[0,0],[0.297,5.162],[-5.373,4.489],[-2.734,-0.927],[-1.028,-0.895],[-6.25,-7]],"v":[[-146.25,52.625],[-159.375,81.625],[-113,88.5],[-109.324,60.936],[-117.75,52.375],[-116.065,61.176],[-121.75,76.875],[-137.215,80.244],[-144.737,75.738],[-147.625,72.875]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 18","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[-20.415,-10.763],[10.173,-10.45],[-1.165,-8.305],[7.055,-2.256],[8.425,-0.16],[8.214,1.702],[0,0],[-26.998,-6.13],[-25.648,5.541],[0.444,-0.789],[-4.216,13.689],[7.2,6.071]],"o":[[0,0],[8.967,4.727],[-0.114,0.07],[1.015,7.238],[-9.891,3.163],[-0.556,-0.193],[-22.206,-4.602],[0,0],[13.226,3.003],[12.131,-2.621],[0.194,-5.289],[11.462,-37.214],[-34.746,-29.296]],"v":[[-159.044,23.47],[-122.085,17.013],[-117.062,43.208],[-108.306,57.723],[-119.26,76.581],[-143.425,83.16],[-167.385,82.823],[-185.501,58.517],[-164.726,102.747],[-117.631,97.621],[-90.944,108.789],[-84.212,77.214],[-102.004,15.046]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[-11.562,-7.262],[9.782,-10.878],[-0.619,-6.092],[6.909,-2.486],[6.473,6.099],[7.624,1.394],[0,0],[-23.144,-10.038],[-22.365,8.733],[-1.315,2.173],[-2.136,9.945],[6.383,6.074]],"o":[[0,0],[6.689,5.425],[-0.097,0.065],[0.55,5.873],[-9.053,3.231],[-0.518,-0.167],[-20.611,-3.767],[0,0],[16.258,8.475],[8.841,-3.045],[1.776,-5.448],[5.766,-22.429],[-24.48,-22.409]],"v":[[-148.965,21.804],[-131.2,26.818],[-129.172,53.729],[-124.196,64.536],[-133.734,80.317],[-160.848,77.901],[-177.758,72.284],[-199.769,64.344],[-176.138,98.205],[-126.103,102.341],[-116.256,86.832],[-113.034,63.257],[-120.216,28.292]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[-7.136,-5.511],[9.586,-11.092],[-0.346,-4.986],[6.836,-2.601],[5.496,9.228],[7.329,1.239],[0,0],[-21.218,-11.992],[-20.724,10.33],[-2.195,3.654],[-1.097,8.072],[5.974,6.076]],"o":[[0,0],[5.551,5.774],[-0.089,0.062],[0.317,5.191],[-8.634,3.265],[-0.499,-0.155],[-19.813,-3.35],[0,0],[17.775,11.21],[7.196,-3.257],[2.567,-5.528],[2.918,-15.036],[-19.347,-18.965]],"v":[[-147.425,26.222],[-135.758,31.721],[-135.227,58.989],[-132.141,67.942],[-140.971,82.185],[-169.559,75.272],[-183.195,72.515],[-204.153,60.258],[-183.594,98.934],[-133.839,99.951],[-120.662,83.103],[-116.444,62.279],[-124.072,34.164]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[-2.71,-3.76],[9.39,-11.306],[-0.073,-3.88],[6.763,-2.715],[4.52,12.358],[7.034,1.085],[0,0],[-19.291,-13.946],[-19.082,11.926],[-3.075,5.135],[-0.057,6.2],[5.565,6.077]],"o":[[0,0],[4.412,6.123],[-0.081,0.059],[0.084,4.508],[-8.215,3.299],[-0.48,-0.142],[-19.016,-2.932],[0,0],[19.291,13.946],[5.551,-3.469],[3.357,-5.607],[0.07,-7.644],[-14.214,-15.522]],"v":[[-145.886,30.639],[-140.315,36.623],[-141.282,64.25],[-140.086,71.349],[-148.208,84.052],[-178.27,72.642],[-188.631,72.746],[-208.537,56.172],[-187.55,93.662],[-138.076,92.561],[-125.067,79.375],[-119.855,61.3],[-127.927,40.037]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[-2.119,-3.129],[6.441,-8.647],[0.046,-2.79],[4.691,-2.019],[3.822,8.043],[5.989,1.223],[0,0],[-15.736,-12.506],[-16.555,9.326],[-2.663,4.086],[-0.125,5.067],[4.461,5.34]],"o":[[0,0],[3.451,5.095],[-0.089,0.255],[-0.053,3.242],[-5.922,2.706],[-1.27,0.136],[-15.927,-3.205],[0,0],[15.736,12.506],[4.815,-2.713],[2.908,-4.461],[0.154,-6.246],[-11.393,-13.639]],"v":[[-153.757,31.842],[-149.465,36.876],[-149.146,58.958],[-148.544,64.322],[-154.399,73.462],[-176.348,66.959],[-193.171,71.956],[-214.441,57.073],[-197.909,89.483],[-141.384,91.707],[-128.372,77.053],[-131.515,58.492],[-137.868,40.608]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[-0.938,-1.866],[0.542,-3.33],[0.283,-0.611],[0.549,-0.625],[2.427,-0.588],[3.898,1.499],[0,0],[-8.625,-9.625],[-11.5,4.125],[-1.841,1.986],[-0.262,2.8],[2.251,3.866]],"o":[[0,0],[1.528,3.038],[-0.105,0.646],[-0.329,0.71],[-1.336,1.521],[-2.851,0.691],[-9.75,-3.75],[0,0],[8.625,9.625],[3.345,-1.2],[2.01,-2.169],[0.323,-3.451],[-5.75,-9.875]],"v":[[-169.5,34.25],[-167.765,37.382],[-164.875,48.375],[-165.46,50.268],[-166.782,52.281],[-172.503,55.594],[-182.75,54.625],[-191.75,43.875],[-192.375,60.125],[-166,65.25],[-158.231,60.409],[-154.835,52.877],[-157.75,41.75]],"c":true}]},{"t":20.4,"s":[{"i":[[0,0],[-0.589,-1.171],[0.34,-2.09],[0.177,-0.384],[0.344,-0.392],[1.523,-0.369],[2.446,0.941],[0,0],[-5.413,-6.04],[-7.217,2.589],[-1.155,1.247],[-0.164,1.757],[1.413,2.426]],"o":[[0,0],[0.959,1.906],[-0.066,0.406],[-0.206,0.446],[-0.839,0.954],[-1.789,0.433],[-6.119,-2.353],[0,0],[5.413,6.04],[2.099,-0.753],[1.261,-1.361],[0.203,-2.166],[-3.608,-6.197]],"v":[[-174.107,31.419],[-173.019,33.384],[-171.205,40.283],[-171.572,41.471],[-172.401,42.734],[-175.991,44.813],[-182.422,44.205],[-188.07,37.459],[-188.462,47.657],[-171.911,50.873],[-167.035,47.835],[-164.904,43.108],[-166.733,36.125]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 17","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[-9.855,-9.015],[-21.733,-5.193],[-13.239,22.175],[0,0],[3.387,-14.555],[3.49,-1.95],[28.909,-6.419],[-0.25,-0.292],[13.246,1.978],[0.291,-0.366],[0.455,-0.19]],"o":[[0,0],[18.024,16.487],[14.333,3.425],[28.569,-47.852],[0,0],[-1.518,6.525],[0.524,0.694],[-16.88,3.748],[-0.137,-0.16],[-9.363,-1.398],[-0.325,-0.116],[-10.799,-9.72]],"v":[[147.089,163.277],[146.729,188.763],[170.468,214.693],[248.931,185.156],[240.516,108.908],[241.763,137.305],[235.261,154.898],[217.205,190.431],[192.923,184.831],[167.216,191.772],[153.372,181.116],[154.297,181.22]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[-8.926,-9.015],[-19.686,-5.193],[-11.992,22.175],[0,0],[3.068,-14.555],[3.161,-1.95],[26.186,-6.419],[-0.227,-0.292],[11.999,1.978],[0.264,-0.366],[0.413,-0.19]],"o":[[0,0],[16.326,16.487],[12.983,3.425],[25.877,-47.852],[0,0],[-1.375,6.525],[0.474,0.694],[-15.29,3.748],[-0.124,-0.16],[-8.481,-1.398],[-0.294,-0.116],[-9.782,-9.72]],"v":[[152.877,133.652],[149.55,171.138],[174.053,185.068],[245.126,155.531],[237.503,79.283],[238.632,107.68],[232.743,125.273],[216.388,160.806],[194.393,155.206],[171.107,162.147],[158.568,151.491],[159.406,151.595]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[-7.998,-9.015],[-17.639,-5.193],[-10.745,22.175],[0,0],[2.749,-14.555],[2.832,-1.95],[23.463,-6.419],[-0.203,-0.292],[10.751,1.978],[0.236,-0.366],[0.37,-0.19]],"o":[[0,0],[14.628,16.487],[11.633,3.425],[23.186,-47.852],[0,0],[-1.232,6.525],[0.425,0.694],[-13.7,3.748],[-0.111,-0.16],[-7.599,-1.398],[-0.264,-0.116],[-8.764,-9.72]],"v":[[158.665,104.027],[158.372,129.513],[177.639,155.443],[241.32,125.906],[234.49,49.658],[235.501,78.055],[230.225,95.648],[215.571,131.181],[195.864,125.581],[174.999,132.522],[163.764,121.866],[164.514,121.97]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[1.209,-12.097],[-36.63,-7.698],[-7.595,20.729],[0,0],[1.169,-9.502],[2.792,-2.225],[23.609,-8.692],[-0.263,-0.227],[15.921,2.381],[0.352,7.101],[0.357,-0.215]],"o":[[0,0],[1.47,17.368],[29.686,6.148],[16.389,-44.732],[0,0],[-0.256,5.629],[0.563,0.548],[-13.785,5.075],[-0.144,-0.124],[-11.829,-1.769],[-0.311,-6.273],[-10.277,-10.499]],"v":[[148.349,64.377],[141.714,77.842],[195.38,129.255],[244.114,98.759],[228.18,45.402],[231.12,56.465],[226.566,72.373],[215.585,99.264],[193.481,98.372],[169.313,105.831],[151.095,90.148],[152.601,83.619]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[10.071,-15.179],[-45.155,-10.203],[-2.275,19.283],[0,0],[-0.745,-4.449],[1.954,-2.499],[17.01,-10.966],[-0.247,-0.163],[16.542,2.791],[0.316,14.57],[0.242,-0.239]],"o":[[0,0],[-12.108,18.249],[39.258,8.871],[4.91,-41.611],[0,0],[0.793,4.734],[0.541,0.402],[-9.932,6.403],[-0.135,-0.089],[-12.68,-2.139],[-0.27,-12.431],[-8.854,-11.278]],"v":[[182.932,19.726],[159.85,35.672],[191.011,98.067],[251.59,71.611],[232.391,22.146],[234.276,30.374],[233.459,43.098],[228.432,67.347],[210.247,71.163],[189.68,79.139],[169.684,58.43],[182.229,42.267]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[0,0],[6.618,-9.975],[-29.675,-6.705],[-1.48,12.674],[0,0],[-0.251,-2.731],[0.977,-1.765],[9.241,-6.33],[0.938,0.033],[8.996,1.617],[0.396,7.42],[0.505,0.968]],"o":[[0,0],[-7.957,11.992],[25.799,5.83],[2.834,-24.163],[0,0],[0.268,2.906],[0.27,0.742],[-5.59,3.92],[-1.018,-0.147],[-6.612,-1.153],[-0.807,-6.596],[-5.177,-7.764]],"v":[[195.466,13.925],[184.59,26.405],[205.068,67.408],[244.879,50.023],[233.008,17.948],[233.712,22.95],[233.042,31.049],[229.39,45.652],[217.748,48.706],[204.946,52.3],[194.183,41.623],[198.864,31.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[0,0],[3.166,-4.771],[-14.194,-3.207],[-0.684,6.065],[0,0],[0.242,-1.014],[0,-1.031],[1.472,-1.694],[2.123,0.229],[1.45,0.443],[0.476,0.27],[0.768,2.176]],"o":[[0,0],[-3.806,5.736],[12.34,2.788],[0.757,-6.714],[0,0],[-0.258,1.079],[0,1.082],[-1.248,1.437],[-1.9,-0.205],[-0.544,-0.166],[-1.345,-0.762],[-1.5,-4.25]],"v":[[218,12.125],[209.33,17.137],[219.125,36.75],[238.167,28.434],[233.625,13.75],[233.148,15.527],[232.625,19],[230.348,23.956],[225.25,26.25],[220.212,25.46],[218.682,24.816],[215.5,20.625]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[0,0],[1.503,-2.266],[-6.741,-1.523],[-0.325,2.88],[0,0],[0.115,-0.482],[0,-0.49],[0.699,-0.804],[1.008,0.109],[0.689,0.21],[0.226,0.128],[0.365,1.033]],"o":[[0,0],[-1.808,2.724],[5.861,1.324],[0.36,-3.189],[0,0],[-0.122,0.512],[0,0.514],[-0.593,0.682],[-0.903,-0.098],[-0.258,-0.079],[-0.639,-0.362],[-0.712,-2.018]],"v":[[224.812,12.947],[220.695,15.327],[225.347,24.642],[234.39,20.693],[232.233,13.719],[232.007,14.563],[231.758,16.212],[230.677,18.566],[228.256,19.655],[225.863,19.28],[225.136,18.974],[223.625,16.984]],"c":true}]},{"t":31.2,"s":[{"i":[[0,0],[3.166,-4.771],[-14.194,-3.207],[-0.684,6.065],[0,0],[0.242,-1.014],[0,-1.031],[1.472,-1.694],[2.123,0.229],[1.45,0.443],[0.476,0.27],[0.768,2.176]],"o":[[0,0],[-3.806,5.736],[12.34,2.788],[0.757,-6.714],[0,0],[-0.258,1.079],[0,1.082],[-1.248,1.437],[-1.9,-0.205],[-0.544,-0.166],[-1.345,-0.762],[-1.5,-4.25]],"v":[[226.75,0.375],[218.08,5.387],[227.875,25],[246.917,16.684],[242.375,2],[241.898,3.777],[241.375,7.25],[239.098,12.206],[234,14.5],[228.962,13.71],[227.432,13.066],[224.25,8.875]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":14.4,"s":[0,0],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":30,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 16","np":1,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.125,-1.875],[-4.125,-9.25],[-4.188,6.25],[3.75,2.625]],"o":[[-7.125,1.875],[4.125,9.25],[4.188,-6.25],[-3.75,-2.625]],"v":[[119.625,-8.25],[112.688,12],[133.313,10.75],[134.438,-7.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":18,"s":[0,0],"h":1},{"t":19.2,"s":[100,100],"h":1},{"t":21.6,"s":[100,100],"h":1},{"t":22.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 15","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[11.954,0.25],[-1.826,-24.875],[-34.96,-3.875],[-0.83,9.25],[6.475,8.375]],"o":[[-11.954,-0.25],[1.826,24.875],[20.328,2.253],[0.83,-9.25],[-6.475,-8.375]],"v":[[54.101,-21.5],[22.576,23.375],[72.46,74.5],[92.92,41.125],[94.025,0.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[11.954,0.25],[-1.826,-24.875],[-34.96,-3.875],[-0.83,9.25],[6.475,8.375]],"o":[[-11.954,-0.25],[1.826,24.875],[20.328,2.253],[0.83,-9.25],[-6.475,-8.375]],"v":[[56.601,-23.813],[28.951,17],[87.21,77.25],[99.295,34.75],[97.025,-4.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[11.954,0.25],[-1.826,-24.875],[-34.96,-3.875],[-0.83,9.25],[6.475,8.375]],"o":[[-11.954,-0.25],[1.826,24.875],[20.328,2.253],[0.83,-9.25],[-6.475,-8.375]],"v":[[62.601,-27.625],[35.326,10.625],[85.21,61.75],[105.67,28.375],[100.025,-9.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[11.954,0.25],[-1.826,-24.875],[-19.923,-4.625],[-0.83,9.25],[6.475,8.375]],"o":[[-11.954,-0.25],[1.826,24.875],[19.923,4.625],[0.83,-9.25],[-6.475,-8.375]],"v":[[66.976,-36.25],[41.076,-5.375],[82.085,32.875],[103.17,18.125],[97.525,-19.5]],"c":true}]},{"t":19.2,"s":[{"i":[[9,0.25],[-1.375,-24.875],[-15,-4.625],[-0.625,9.25],[4.875,8.375]],"o":[[-9,-0.25],[1.375,24.875],[15,4.625],[0.625,-9.25],[-4.875,-8.375]],"v":[[80.25,-48.5],[60.75,-17.625],[91.625,20.625],[107.5,5.875],[103.25,-31.75]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 14","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[6,0],[-5.5,-12.75],[-7.5,-8.5],[-7.5,-3.5],[-5,18.75],[0,0],[17.75,9.75],[0,0]],"o":[[-6,0],[5.5,12.75],[7.5,8.5],[7.5,3.5],[5,-18.75],[0,0],[-17.75,-9.75],[0,0]],"v":[[-43.5,-61.5],[-52,-35],[-30.25,17.25],[-18.5,38.75],[8.75,4],[0.75,-32.75],[-20,-40],[-34,-59.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[6,0],[-5.5,-12.75],[-7.5,-8.5],[-7.5,-3.5],[-5,18.75],[0,0],[17.75,9.75],[0,0]],"o":[[-6,0],[5.5,12.75],[7.5,8.5],[7.5,3.5],[5,-18.75],[0,0],[-17.75,-9.75],[0,0]],"v":[[-43.25,-67],[-51.75,-40.5],[-41,5.75],[-18.25,19.25],[9,-1.5],[1,-38.25],[-19.75,-45.5],[-39.75,-65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[6,0],[-5.5,-12.75],[-7.5,-8.5],[-7.5,-3.5],[-5,18.75],[0,0],[16.297,12.022],[0,0]],"o":[[-6,0],[5.5,12.75],[7.5,8.5],[7.5,3.5],[5,-18.75],[0,0],[-15.25,-11.25],[0,0]],"v":[[-43.25,-67],[-51.75,-40.5],[-41,5.75],[-18.25,19.25],[9,-1.5],[1,-38.25],[-17,-52.75],[-39.75,-65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[6,0],[-5.5,-12.75],[-7.5,-8.5],[-7.5,-3.5],[-5,18.75],[0,0],[16.297,12.022],[0,0]],"o":[[-6,0],[5.5,12.75],[7.5,8.5],[7.5,3.5],[5,-18.75],[0,0],[-15.25,-11.25],[0,0]],"v":[[-55.75,-67],[-57.75,-37.25],[-41,5.75],[-18.25,19.25],[9,-1.5],[1,-38.25],[-22.25,-62.5],[-47.5,-70]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[5.923,0.956],[-3.399,-13.463],[-6.05,-9.586],[-6.847,-4.65],[-7.923,17.714],[0,0],[14.174,14.465],[0,0]],"o":[[-5.923,-0.956],[3.399,13.463],[6.05,9.586],[6.847,4.65],[7.923,-17.714],[0,0],[-13.263,-13.536],[0,0]],"v":[[-56.992,-79.928],[-63.705,-50.877],[-54.019,-5.758],[-33.71,11.194],[-3.503,-4.95],[-5.546,-42.505],[-24.636,-70.149],[-48.369,-81.576]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[5.923,0.956],[-3.399,-13.463],[-6.05,-9.586],[-6.847,-4.65],[-7.923,17.714],[0,0],[14.174,14.465],[0,0]],"o":[[-5.923,-0.956],[3.399,13.463],[6.05,9.586],[6.847,4.65],[7.923,-17.714],[0,0],[-13.263,-13.536],[0,0]],"v":[[-63.242,-86.678],[-69.955,-57.627],[-60.269,-12.508],[-39.96,4.444],[-9.753,-11.7],[-11.796,-49.255],[-30.886,-76.899],[-54.619,-88.326]],"c":true}]},{"t":21.6,"s":[{"i":[[5.923,0.956],[-3.399,-13.463],[-6.05,-9.586],[-6.847,-4.65],[-7.923,17.714],[0,0],[14.174,14.465],[0,0]],"o":[[-5.923,-0.956],[3.399,13.463],[6.05,9.586],[6.847,4.65],[7.923,-17.714],[0,0],[-13.263,-13.536],[0,0]],"v":[[-69.242,-93.928],[-75.955,-64.877],[-66.269,-19.758],[-45.96,-2.806],[-15.753,-18.95],[-17.796,-56.505],[-36.886,-84.149],[-60.619,-95.576]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":21.6,"s":[100,100],"h":1},{"t":22.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 13","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[11.954,-18.212],[1.888,-5.417],[-1.132,-11.696],[-4.55,-3.97],[-5.819,-1.636],[-10.509,2.634],[-2.169,0.012],[0,0],[6.129,-1.12],[5.579,-0.053],[5.671,2.785],[2.247,4.679],[-0.134,4.237],[-1.437,3.372],[-2.817,2.991]],"o":[[0,0],[-2.548,3.881],[-4.102,11.773],[0.791,8.173],[4.215,3.678],[21.832,6.136],[13.356,-3.347],[35.352,-0.195],[0,0],[-4.419,0.808],[-6.681,0.063],[-4.276,-2.1],[-2.279,-4.744],[0.128,-4.044],[2.398,-5.626],[2.396,-2.544]],"v":[[142.304,15.464],[82.946,19.289],[76.222,33.481],[71.042,71.194],[78.806,90.266],[91.418,99.364],[122.305,76.473],[138.898,85.945],[184.765,66.863],[174.438,69.291],[159.017,70.861],[139.76,67.26],[129.662,57.297],[126.695,43.766],[129.26,32.591],[138.091,19.427]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[11.374,-18.382],[2.438,-5.719],[-2.135,-14.33],[-5.256,-4.027],[-9.846,1.857],[-11.504,-1.618],[-5.146,-2.621],[0,0],[8.738,0.281],[3.94,-0.045],[5.143,2.436],[2.072,3.98],[-0.603,4.267],[-0.788,2.35],[-1.002,5.033]],"o":[[0,0],[-2.479,4.018],[-4.715,11.386],[1.481,9.961],[4.293,3.519],[17.338,2.789],[12.955,-3.428],[33.775,-0.501],[0,0],[-7.714,-0.515],[-4.728,0.058],[-4.079,-1.922],[-3.125,-5.573],[0.576,-4.072],[1.507,-3.841],[-0.057,-7.431]],"v":[[135.168,7.064],[95.479,4.627],[87.828,25.301],[89.408,63.412],[78.012,88.464],[95.162,89.878],[127.035,75.189],[148.882,83.093],[188.438,63.104],[174.727,67.747],[159.452,65.974],[141.437,63.64],[130.413,54.242],[127.525,39.332],[130.348,29.568],[128.184,16.663]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[10.794,-18.552],[2.989,-6.02],[23.1,-17.318],[-0.156,-0.287],[-7.406,3.607],[-12.499,-5.87],[-8.123,-5.254],[0,0],[11.347,1.683],[2.301,-0.038],[4.615,2.087],[7.336,11.063],[-3.246,4.297],[-0.14,1.329],[5.722,8.851]],"o":[[0,0],[-2.41,4.154],[-0.184,1.253],[-14.012,10.505],[0.094,-0.037],[12.844,-6.643],[12.554,-3.509],[32.197,-0.807],[0,0],[-11.009,-1.838],[-2.775,0.054],[-3.881,-1.744],[-3.971,-6.402],[3.098,-4.101],[0.616,-2.056],[-6.778,-12.649]],"v":[[114.283,-7.587],[91.513,6.34],[88.934,35.747],[89.65,76.318],[84.843,89.725],[103.406,77.893],[131.765,73.906],[158.866,80.24],[198.611,56.595],[175.016,61.704],[163.637,53.588],[143.115,56.77],[119.664,51.187],[121.253,34.898],[128.436,26.544],[114.528,14.399]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[10.213,-18.723],[3.54,-6.322],[-4.141,-19.598],[-6.668,-4.139],[-17.9,8.843],[-13.495,-10.122],[-11.1,-7.887],[0,0],[13.956,3.084],[0.661,-0.03],[4.088,1.738],[1.72,2.581],[-1.541,4.327],[0.509,0.308],[2.629,9.115]],"o":[[0,0],[-2.341,4.291],[-5.941,10.612],[2.86,13.535],[4.449,3.201],[8.35,-3.907],[12.153,-3.59],[30.62,-1.112],[0,0],[-14.304,-3.161],[-0.822,0.049],[-3.684,-1.566],[-4.818,-7.231],[1.471,-4.129],[-0.274,-0.271],[-4.962,-17.205]],"v":[[120.897,-9.737],[93.547,9.054],[95.539,19.943],[96.391,56.098],[98.174,70.86],[108.15,73.157],[136.495,72.622],[168.85,77.387],[200.284,57.836],[175.304,64.661],[160.322,56.201],[144.792,56.401],[131.916,48.132],[129.184,30.464],[132.524,23.521],[112.871,12.635]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[7.602,-19.488],[2.524,-5.69],[3.688,-16.136],[-8.537,-4.327],[-14.497,6.983],[-10.963,-6.73],[-8.77,-4.594],[0,0],[15.969,-0.171],[1.518,-0.567],[8.498,0.905],[0.646,1.285],[0.951,5.921],[0.533,1.135],[1.809,7.974]],"o":[[0,0],[-1.743,4.379],[-4.172,10.02],[-2.95,12.906],[4.522,3.718],[7.623,-3.375],[10.347,-3.954],[31.519,0.026],[0,0],[-11.423,-1.797],[-1.841,0.688],[-8.138,-0.747],[-2.595,-3.825],[-1.449,-6.832],[-0.498,-1.853],[-3.583,-13.871]],"v":[[120.161,-11.102],[97.448,13.076],[95.99,24.721],[100.2,48.594],[96.29,83.938],[124.685,76.785],[153.654,72.659],[181.591,67.986],[213.063,33.546],[184.661,59.293],[168.438,51.093],[152.567,55.165],[139.672,45.322],[132.495,33.224],[134.212,21.709],[117.702,8.89]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[4.99,-20.253],[1.509,-5.058],[-6.252,-11.832],[-10.405,-4.515],[-23.22,3.087],[0.187,0.555],[-22.332,3.165],[0,0],[17.982,-3.426],[2.375,-1.103],[12.908,0.071],[-0.428,-0.012],[3.444,7.516],[0.557,1.962],[4.218,7.105]],"o":[[0,0],[-1.145,4.467],[-2.403,9.429],[4.352,8.189],[4.595,4.235],[14.78,-1.913],[-0.063,0.305],[32.418,1.165],[0,0],[-10.768,1.324],[-2.86,1.327],[-12.592,0.071],[-0.373,-0.419],[-4.369,-9.535],[0.1,0.103],[-5.782,-10.895]],"v":[[119.424,-12.467],[101.349,17.099],[100.941,32.249],[99.759,61.84],[114.155,74.765],[138.97,62.913],[167.313,72.445],[191.832,58.585],[216.342,31.255],[195.518,47.426],[176.553,45.985],[160.342,53.929],[147.428,42.512],[135.806,35.984],[135.9,19.897],[121.532,7.645]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[2.378,-21.019],[0.493,-4.426],[-7.308,-7.95],[-11.31,-2.61],[-16.256,1.959],[0.278,1.268],[-16.072,-6.685],[0,0],[10.918,-3.304],[3.233,-1.64],[9.386,-0.012],[2.024,1.31],[2.853,5.68],[0.629,2.959],[0.17,5.691]],"o":[[0,0],[-0.548,4.555],[-0.635,8.837],[5.099,5.515],[5.224,2.286],[8.744,-0.791],[0.278,-0.232],[17.322,-2.724],[0,0],[-5.66,0.931],[-3.879,1.967],[-8.507,0.071],[-2.455,-1.543],[-3.264,-6.602],[-0.947,-5.019],[-0.826,-7.203]],"v":[[134.688,-10.581],[109.001,6.872],[115.392,34.777],[121.069,58.837],[132.02,66.593],[154.756,52.291],[171.972,57.482],[199.572,50.685],[212.871,27.09],[198.625,41.308],[184.669,40.877],[168.368,47.193],[155.184,39.701],[144.36,31.443],[142.338,17.584],[135.613,1.4]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[-0.234,-21.784],[-0.522,-3.794],[-8.364,-4.067],[-12.216,-0.704],[-0.291,-0.169],[-8.632,2.731],[-1.779,5.284],[0,0],[3.854,-3.183],[4.09,-2.176],[5.863,-0.151],[0.735,0.697],[6.585,8.348],[-0.275,-0.022],[-0.65,4.549]],"o":[[0,0],[0.05,4.643],[1.134,8.246],[5.845,2.842],[5.853,0.337],[-0.041,-0.419],[10.343,-3.273],[2.226,-6.612],[0,0],[-2.779,2.295],[-4.898,2.606],[-11.393,0.293],[-0.94,-0.891],[-6.493,-8.231],[1.11,0.565],[0.553,-3.869]],"v":[[149.952,-8.696],[129.152,24.644],[127.843,37.805],[142.378,55.833],[164.635,54.671],[180.541,56.669],[191.882,43.269],[209.813,33.534],[209.399,22.924],[203.232,35.44],[192.784,35.769],[178.893,46.457],[162.94,34.641],[146.915,31.652],[147.275,16.522],[145.443,0.655]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[-1.995,-12.761],[-0.938,-2.274],[-6.13,-1.936],[-7.228,0.629],[-1.048,0.669],[-3.399,2.08],[-0.537,3.266],[0,0],[1.99,-2.196],[2.214,-1.626],[3.432,-0.574],[1.604,0.518],[3.012,3.468],[0.306,0.8],[-0.158,2.537]],"o":[[0,0],[0.425,2.72],[2.039,4.943],[4.283,1.353],[3.463,-0.301],[1.192,-1.059],[4.212,-2.803],[0.672,-4.087],[0,0],[-1.435,1.583],[-2.652,1.947],[-4.912,0.493],[-1.691,-0.586],[-2.944,-3.398],[-0.293,-1.159],[0.134,-2.157]],"v":[[164.067,-1.232],[149.551,17.465],[150.873,25.153],[163.973,33.365],[178.878,34.64],[187.844,31.813],[198.155,25.143],[201.002,17.601],[200.383,10.808],[197.256,16.967],[191.729,19.761],[183.344,25.909],[174.313,22.214],[165.715,19.697],[164.101,12.409],[162.551,3.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[-2.875,-8.25],[-1.146,-1.515],[-5.013,-0.871],[-4.734,1.295],[-1.426,1.088],[-0.783,1.754],[0.084,2.257],[0,0],[1.058,-1.703],[1.276,-1.35],[2.217,-0.786],[2.038,0.428],[1.226,1.029],[0.596,1.212],[0.089,1.531]],"o":[[0,0],[0.613,1.758],[2.492,3.292],[3.503,0.609],[2.268,-0.62],[1.808,-1.38],[1.146,-2.569],[-0.105,-2.824],[0,0],[-0.763,1.228],[-1.528,1.617],[-1.672,0.593],[-2.066,-0.434],[-1.17,-0.982],[-0.994,-2.022],[-0.075,-1.302]],"v":[[171.125,2.5],[159.75,13.875],[162.389,18.827],[173.645,25.506],[186,24.625],[191.496,22.011],[195.291,17.204],[196.596,9.635],[195.875,4.75],[194.268,7.73],[191.202,11.757],[185.57,15.635],[180,16],[175.116,13.719],[172.513,10.353],[171.105,4.67]],"c":true}]},{"t":24,"s":[{"i":[[0,0],[1.51,-4.019],[0.044,-0.932],[-1.618,-1.906],[-2.195,-1.001],[-0.881,-0.038],[-0.847,0.416],[-0.678,0.878],[0,0],[0.935,-0.31],[0.907,-0.108],[1.084,0.401],[0.635,0.802],[0.139,0.774],[-0.156,0.645],[-0.448,0.606]],"o":[[0,0],[-0.322,0.857],[-0.095,2.027],[1.131,1.332],[1.051,0.479],[1.117,0.048],[1.241,-0.609],[0.849,-1.099],[0,0],[-0.674,0.224],[-1.086,0.13],[-0.818,-0.302],[-0.644,-0.814],[-0.133,-0.739],[0.261,-1.076],[0.381,-0.515]],"v":[[168.606,10.732],[160.733,11.448],[160.171,14.147],[162.32,20.21],[167.261,23.765],[170.158,24.507],[173.103,23.886],[175.977,21.439],[177.242,19.368],[175.697,19.988],[173.273,20.543],[169.927,20.236],[167.709,18.621],[166.583,16.223],[166.659,14.134],[167.916,11.545]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 12","np":1,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[26.5,-10.75],[-7,-4.75],[0,0],[2.75,-7.75],[0.421,-1.458],[3.056,-0.417],[1.676,-0.493],[0.937,-6.093],[-1.952,-3.161],[0.941,-1.15],[6.75,-3.25],[-22.5,-4.75],[-17,19.5],[5,23.25],[0,0]],"o":[[-26.5,10.75],[7,4.75],[0,0],[-1.222,3.444],[-0.526,1.823],[-2.063,0.281],[-2.792,0.821],[-0.873,5.672],[1.404,2.273],[-2.25,2.75],[-6.75,3.25],[22.5,4.75],[17,-19.5],[-5,-23.25],[0,0]],"v":[[-44,53.5],[-58.5,97.75],[-43,100.25],[-53.5,110.5],[-55.427,117.612],[-59.75,120.5],[-65.411,121.344],[-71.25,130.25],[-67.489,143.402],[-66,148.5],[-85,151.5],[-46.25,182],[7.25,162.5],[20.5,85.75],[-2,53.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[23.468,-8.447],[-3.876,-3.494],[0,0],[1.99,-10.796],[0.065,-2.587],[2.091,-0.345],[1.558,-3.139],[3.455,-5.461],[-0.241,-1.717],[0.852,-0.775],[-4.451,-22.831],[-22.582,-3.376],[-16.388,18.313],[5.666,20.806],[0,0]],"o":[[-18.322,7.311],[1.684,4.402],[0,0],[-0.819,2.411],[-0.094,3.133],[-1.421,0.357],[-2.12,2.194],[-3.02,4.987],[-0.95,0.821],[-14.066,14.237],[-6.586,3.312],[22.582,3.376],[16.388,-18.313],[-5.666,-20.806],[0,0]],"v":[[-45.511,52.689],[-59.35,81.598],[-51.066,85.976],[-50.074,96.916],[-48.44,104.229],[-53.1,109.373],[-54.881,115.79],[-61.37,127.152],[-70.708,133.315],[-76.184,130.263],[-88.549,154.081],[-47.339,172.396],[3.625,149.262],[14.602,79.369],[-14.275,42.453]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[17.404,-3.84],[2.372,-0.982],[0,0],[0.469,-16.887],[-0.648,-4.846],[0.163,-0.2],[1.321,-8.432],[8.49,-4.197],[3.181,1.171],[0.673,-0.024],[-0.353,-0.492],[-22.747,-0.627],[-15.165,15.94],[6.998,15.917],[0,0]],"o":[[-1.967,0.434],[-8.949,3.706],[0,0],[-0.013,0.344],[0.77,5.752],[-0.136,0.51],[-0.774,4.94],[-7.315,3.616],[-5.656,-2.083],[-2.988,0.107],[-6.258,3.437],[22.747,0.627],[15.165,-15.94],[-6.998,-15.917],[0,0]],"v":[[-48.533,51.066],[-61.051,49.294],[-67.198,57.427],[-43.222,69.747],[-34.466,77.462],[-39.8,87.119],[-33.821,104.682],[-41.61,120.956],[-56.894,119.141],[-65.052,112.538],[-79.147,120.242],[-49.517,153.188],[-3.625,122.787],[2.806,66.608],[-38.826,19.86]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[17.351,0.227],[2.467,-0.404],[0,0],[4.197,-15.903],[1.032,-6.307],[0.199,-0.154],[-0.375,-8.355],[8.981,-2.092],[5.157,0.851],[-0.624,-0.203],[-0.225,-0.545],[-21.423,-5.648],[-17.917,11.74],[3.097,16.642],[0,0]],"o":[[-1.961,-0.026],[-9.306,1.524],[0,0],[-0.089,0.324],[-0.962,6.734],[-0.243,0.453],[0.4,5.617],[-7.737,1.803],[-8.593,0.351],[6.673,2.174],[1.87,18.377],[21.423,5.648],[17.917,-11.74],[-3.097,-16.643],[0,0]],"v":[[-47.481,38.851],[-59.203,37.891],[-78.587,43.984],[-65.097,54.864],[-57.887,64.998],[-66.838,70.593],[-61.323,83.568],[-69.822,93.515],[-81.407,97.899],[-91.423,97.576],[-80.87,107.123],[-43.104,130.936],[-20.848,116.815],[-2.269,64.991],[-31.346,11.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[17.324,2.26],[2.514,-0.115],[0,0],[6.061,-15.411],[7.597,-3.266],[0.217,-0.131],[-1.223,-8.317],[9.226,-1.04],[3.752,1.649],[-0.005,0.037],[-0.162,-0.572],[-20.761,-8.159],[-19.293,9.64],[1.146,17.005],[0,0]],"o":[[-1.958,-0.255],[-9.485,0.434],[0,0],[-0.127,0.313],[-9.153,3.984],[-0.296,0.424],[0.988,5.956],[-7.948,0.896],[-1.587,-1.027],[2.608,1.654],[9.982,7.186],[20.761,8.159],[19.293,-9.64],[-1.146,-17.005],[0,0]],"v":[[-46.955,32.744],[-58.029,28.689],[-72.282,34.012],[-53.535,47.923],[-59.347,59.266],[-71.857,65.079],[-66.074,76.012],[-81.928,90.544],[-98.163,88.277],[-91.608,95.096],[-86.232,99.064],[-64.148,112.81],[-29.459,113.829],[-4.806,64.183],[-27.606,7.211]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[17.298,4.294],[2.561,0.174],[0,0],[7.924,-14.92],[2.712,-7.769],[0.235,-0.107],[-2.071,-8.279],[9.471,0.013],[2.346,2.447],[0.614,0.278],[-0.098,-0.598],[-20.099,-10.67],[-20.669,7.54],[-0.804,17.368],[0,0]],"o":[[-1.955,-0.485],[-9.664,-0.657],[0,0],[-0.164,0.303],[-2.693,7.715],[-0.349,0.396],[1.575,6.295],[-8.16,-0.011],[-7.58,-7.906],[-2.725,-1.232],[-7.134,0.298],[20.099,10.67],[20.669,-7.54],[0.804,-17.368],[0,0]],"v":[[-46.429,26.637],[-56.855,19.487],[-65.976,24.041],[-64.472,38.482],[-61.307,51.535],[-76.877,59.566],[-70.825,68.455],[-79.534,83.574],[-94.42,79.156],[-99.293,64.615],[-104.594,75.004],[-85.191,94.684],[-38.07,110.843],[-7.343,63.374],[-23.866,2.995]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[15.714,8.41],[2.44,0.798],[0,0],[11.345,-12.517],[4.536,-6.865],[0.254,-0.046],[0.025,-8.534],[9.178,2.338],[1.674,2.948],[0.527,0.42],[0.052,-0.604],[-16.864,-15.278],[-21.888,2.234],[-5.044,16.639],[0,0]],"o":[[-1.776,-0.95],[-9.207,-3.01],[0,0],[-0.234,0.253],[-4.505,6.818],[-0.435,0.298],[-0.019,6.488],[-7.907,-2.014],[-5.407,-9.525],[-2.339,-1.864],[-6.989,-1.463],[16.864,15.278],[21.888,-2.234],[5.044,-16.639],[0,0]],"v":[[-44.457,23.299],[-52.808,13.808],[-62.768,15.983],[-64.856,30.351],[-64.993,43.781],[-82.057,47.744],[-78.374,57.847],[-90.529,70.364],[-103.874,62.426],[-105.028,47.134],[-112.717,55.903],[-98.74,79.746],[-57.029,106.98],[-15.588,68.508],[-16.78,5.921]],"c":true}]},{"t":22.8,"s":[{"i":[[15.714,8.41],[2.44,0.798],[0,0],[11.345,-12.517],[4.536,-6.865],[0.254,-0.046],[0.025,-8.534],[9.178,2.338],[1.674,2.948],[0.527,0.42],[0.052,-0.604],[-16.864,-15.278],[-21.888,2.234],[-5.044,16.639],[0,0]],"o":[[-1.776,-0.95],[-9.207,-3.01],[0,0],[-0.234,0.253],[-4.505,6.818],[-0.435,0.298],[-0.019,6.488],[-7.907,-2.014],[-5.407,-9.525],[-2.339,-1.864],[-6.989,-1.463],[16.864,15.278],[21.888,-2.234],[5.044,-16.639],[0,0]],"v":[[-51.707,11.299],[-60.058,1.808],[-70.018,3.983],[-72.106,18.351],[-72.243,31.781],[-89.307,35.744],[-85.624,45.847],[-97.779,58.364],[-111.124,50.426],[-112.278,35.134],[-119.967,43.903],[-105.99,67.746],[-64.279,94.98],[-22.838,56.508],[-24.03,-6.079]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":1,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[5.618,4.78],[16.186,-2.404],[-1.927,-31.516],[-19.997,2.189],[-2.513,12.207],[0,0],[17.589,5.808],[-0.622,1.098],[2.747,6.466],[0.364,0.602],[-0.921,5.778],[-0.838,1.585],[-7.29,1.91],[-3.156,0.012],[-2.441,-0.541]],"o":[[0,0],[-5.989,-5.096],[-16.134,2.396],[2.176,35.591],[28.843,-3.158],[3.001,-14.58],[0,0],[-12.534,-4.139],[-0.628,0.285],[-3.371,-7.935],[0.054,0.251],[1.191,-7.473],[2.189,-4.139],[3.522,-0.923],[4.508,-0.018],[1.751,0.388]],"v":[[94.022,101.958],[86.408,92.033],[54.13,84.659],[21.65,148.432],[74.956,217.929],[116.471,190.491],[111.567,161.139],[90.161,167.942],[76.184,155.5],[63.094,143.112],[63.084,129.617],[60.171,121.472],[60.588,110.665],[70.29,101.34],[80.441,100.068],[91.252,101.235]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[5.16,3.657],[15.004,-3.133],[-3.939,-30.993],[-19.172,3.97],[-6.733,6.258],[0,0],[16.639,4.216],[-0.463,1.109],[3.505,5.928],[0.431,0.541],[0.068,4.713],[-4.574,7.07],[-7.093,4.218],[-3.475,-0.243],[-3.187,-1.438]],"o":[[0,0],[-5.501,-3.898],[-15.318,3.829],[5.671,38.604],[17.836,-2.488],[12.699,-11.804],[0,0],[-12.333,-2.502],[-0.574,0.332],[-4.301,-7.274],[0.085,0.235],[-1.73,-7.291],[3.926,-9.93],[3.051,-1.794],[4.963,0.347],[2.287,1.032]],"v":[[91.702,97.565],[84.737,89.698],[54.92,85.664],[29.886,152.351],[84.594,216],[121.551,205.054],[115.157,158.241],[97.268,169.286],[83.916,155.828],[68.558,144.887],[67.952,131.219],[51.73,126.791],[52.324,110.18],[64.927,94.124],[74.983,92.106],[87.985,95.685]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[4.702,2.533],[13.821,-3.862],[-5.952,-30.47],[-18.347,5.751],[-2.672,12.132],[0,0],[15.689,2.623],[-0.304,1.12],[4.263,5.39],[0.499,0.481],[1.056,3.647],[0.491,3.352],[-6.897,6.526],[-2.9,1.23],[-2.639,0.168]],"o":[[0,0],[-5.012,-2.7],[-14.502,5.263],[9.165,41.617],[30.768,-5.159],[3.191,-14.491],[0,0],[-12.133,-0.864],[-0.52,0.379],[-5.231,-6.614],[0.116,0.219],[-1.018,-4.869],[0.947,-1.864],[2.581,-2.666],[4.142,-1.756],[1.894,-0.12]],"v":[[89.382,93.173],[83.067,87.362],[55.71,86.67],[38.123,156.269],[94.232,214.071],[138.5,184.231],[133.247,155.843],[109.875,168.63],[91.647,156.155],[74.022,146.662],[72.821,132.822],[65.789,127.61],[61.559,116.695],[67.064,101.408],[75.502,95.7],[86.307,93.208]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[4.244,1.41],[12.639,-4.592],[-7.964,-29.946],[-17.522,7.532],[-18.487,38.315],[0,0],[14.738,1.03],[-0.145,1.131],[5.02,4.852],[0.566,0.421],[2.045,2.581],[1.156,4.236],[-6.7,8.834],[-2.772,1.838],[-2.738,0.522]],"o":[[0,0],[-4.524,-1.503],[-13.686,6.696],[12.659,44.63],[0.131,-21.142],[5.852,-12.128],[0,0],[-11.932,0.773],[-0.465,0.425],[-6.16,-5.954],[0.147,0.203],[-2.123,-3.567],[0.327,-0.726],[2.11,-3.538],[3.959,-2.626],[1.965,-0.374]],"v":[[87.061,88.781],[81.396,85.027],[56.5,87.675],[46.36,160.188],[98.869,208.892],[156.987,182.935],[144.087,153.196],[119.731,168.975],[99.379,156.483],[79.486,148.436],[77.689,134.425],[68.598,130.679],[62.045,119.709],[65.451,101.442],[73.033,93.515],[83.835,89.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[3.786,0.286],[11.457,-5.321],[-9.976,-29.423],[-16.697,9.312],[-3.353,9.597],[0,0],[13.788,-0.563],[0.014,1.142],[5.778,4.314],[0.634,0.361],[3.034,1.516],[1.82,5.12],[-6.503,11.142],[-2.644,2.447],[-2.838,0.876]],"o":[[0,0],[-4.036,-0.305],[-12.87,8.129],[16.154,47.643],[20.465,-7.593],[4.005,-11.463],[0,0],[-11.732,2.41],[-0.411,0.472],[-7.09,-5.293],[0.178,0.187],[-3.227,-2.265],[-0.294,0.411],[1.64,-4.409],[3.776,-3.495],[2.036,-0.629]],"v":[[84.741,84.389],[79.725,82.692],[57.29,88.681],[54.596,164.107],[122.007,199.713],[154.474,171.64],[154.927,150.548],[129.588,169.319],[107.11,156.81],[84.95,150.211],[82.558,136.027],[71.407,133.749],[62.531,122.724],[63.838,101.476],[70.564,91.331],[81.363,85.181]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[8.588,0.834],[9.851,-17.534],[-15.038,-22.513],[-13.314,10.371],[-1.592,8.635],[0,0],[10.956,-2.523],[0.207,0.998],[5.893,3.007],[0.627,0.231],[2.888,5.643],[2.403,5.253],[-3.455,10.596],[-3.157,2.931],[-4.084,1.282]],"o":[[0,0],[-9.154,-0.889],[-10.053,8.877],[20.242,35.035],[15.359,-8.333],[1.902,-10.314],[0,0],[-9.868,4.099],[-0.286,0.468],[-7.231,-3.69],[0.191,0.14],[-3.862,-6.857],[-0.801,-0.662],[0.81,-4.895],[4.509,-4.186],[2.93,-0.92]],"v":[[96.314,76.889],[81.503,71.512],[50.658,91.483],[63.557,174.924],[135.031,187.569],[157.625,160.401],[155.651,142.005],[137.943,160.027],[116.522,152.803],[97.039,149.551],[91.041,132.527],[81.862,128.107],[78.772,116.901],[70.455,97.654],[76.93,86.027],[91.353,78.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[3.477,-5.12],[6.3,-11.994],[-20.101,-15.604],[-9.932,11.429],[0.168,7.674],[0,0],[8.123,-4.482],[0.401,0.854],[6.008,1.7],[0.62,0.102],[3.901,1.527],[2.986,5.386],[-2.664,6.543],[0.044,4.192],[0.79,3.954]],"o":[[0,0],[-3.706,5.458],[-7.235,9.624],[24.329,22.427],[10.253,-9.073],[-0.201,-9.165],[0,0],[-8.003,5.787],[-0.161,0.464],[-7.372,-2.086],[0.203,0.093],[-4.656,-1.993],[-1.308,-1.734],[1.198,-3.503],[-0.063,-5.988],[-0.567,-2.837]],"v":[[79.138,79.888],[73.634,87.416],[58.275,113.41],[82.268,174.865],[148.056,175.426],[157.027,149.411],[148.625,133.462],[146.298,150.734],[125.935,148.796],[109.129,148.892],[99.149,136.527],[91.192,137.841],[81.638,126.953],[80.447,112.332],[81.995,100.441],[80.184,84.517]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[8.151,-5.506],[2.247,-5.274],[-25.164,-8.694],[-6.55,12.487],[1.929,6.712],[0,0],[5.29,-6.442],[0.595,0.711],[6.122,0.393],[0.614,-0.027],[4.915,-2.589],[4.277,4.99],[-1.05,2.934],[0.532,-0.037],[-1.417,4.366]],"o":[[0,0],[-5.942,4.014],[-4.418,10.372],[28.417,9.818],[5.147,-9.812],[-2.303,-8.016],[0,0],[-6.139,7.476],[-0.036,0.461],[-7.513,-0.482],[0.216,0.046],[-5.45,2.87],[-4.504,-5.255],[2.062,-5.759],[0.282,-0.537],[3.198,-9.852]],"v":[[90.962,98.638],[76.117,102.803],[63.643,119.087],[100.979,174.807],[161.08,163.282],[165.928,137.672],[157.099,124.92],[150.153,139.442],[135.347,144.789],[121.219,148.232],[107.257,140.527],[100.772,148.825],[85.754,147.505],[82.688,133.259],[89.968,124.537],[83.802,109.852]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[0,0],[5.285,0.53],[2.464,-6.455],[-22.555,-8.694],[-5.871,12.487],[2.871,6.712],[0,0],[4.742,-6.442],[0.533,0.711],[5.488,0.393],[0.55,-0.027],[4.405,-2.589],[3.199,5.518],[-1.679,2.491],[-0.929,0.718],[-0.484,-0.238]],"o":[[0,0],[-5.634,-0.565],[-3.96,10.372],[25.471,9.818],[4.614,-9.812],[-3.429,-8.016],[0,0],[-5.503,7.476],[-0.032,0.461],[-6.734,-0.482],[0.194,0.046],[-4.885,2.87],[-1.627,-2.807],[1.423,-2.111],[1.326,-1.025],[0.347,0.171]],"v":[[98.767,119.388],[88.885,116.969],[74.372,123.837],[105.821,163.307],[162.564,151.782],[162.924,126.422],[153.942,113.42],[150.292,128.567],[136.625,133.289],[123.962,136.732],[111.448,129.027],[105.411,136.075],[89.874,133.255],[92.087,123.759],[95.597,119.676],[98.264,118.96]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[5.556,-1.222],[2.179,-6.455],[-19.946,-8.694],[-5.192,12.487],[3.813,6.712],[0,0],[4.193,-6.442],[0.472,0.711],[4.853,0.393],[0.487,-0.027],[3.896,-2.589],[2.829,5.518],[-1.485,2.491],[-1.796,1.373],[-1.84,0.711]],"o":[[0,0],[-5.922,1.303],[-3.502,10.372],[22.525,9.818],[4.08,-9.812],[-4.555,-8.016],[0,0],[-4.866,7.476],[-0.028,0.461],[-5.955,-0.482],[0.171,0.046],[-4.32,2.87],[-1.439,-2.807],[1.258,-2.111],[2.565,-1.961],[1.32,-0.51]],"v":[[108.072,100.638],[97.597,101.671],[82.851,112.337],[110.663,151.807],[164.047,140.282],[161.921,114.922],[150.785,101.92],[150.432,117.692],[137.903,121.789],[126.705,125.232],[115.638,117.527],[110.3,124.575],[93.244,122.005],[93.985,110.509],[98.75,105.31],[105.894,101.376]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[2.078,-0.517],[0.724,-2.145],[-6.629,-2.89],[-1.88,4.083],[0.981,2.34],[0,0],[1.446,-2.788],[1.283,-0.586],[1.868,0.241],[0.556,0.456],[0.221,0.313],[0.173,0.587],[-0.066,0.869],[-0.371,0.63],[-0.5,0.42]],"o":[[0,0],[-2.215,0.551],[-1.164,3.447],[7.487,3.263],[0.817,-1.774],[-1.172,-2.795],[0,0],[-0.655,1.262],[-1.194,0.545],[-0.858,-0.111],[-0.299,-0.245],[-0.345,-0.491],[-0.266,-0.899],[0.062,-0.814],[0.529,-0.9],[0.358,-0.301]],"v":[[133.75,87.25],[129.813,87.811],[124.412,91.595],[129.75,106.625],[147.493,102.795],[146.65,96.048],[143.875,90.875],[142.054,94.663],[139.187,97.495],[134.625,98],[132.515,97.113],[131.737,96.27],[130.965,94.632],[130.688,91.902],[131.403,89.724],[133.141,87.713]],"c":true}]},{"t":25.2,"s":[{"i":[[0,0],[2.078,-0.517],[0.724,-2.145],[-6.629,-2.89],[-1.88,4.083],[0.981,2.34],[0,0],[1.446,-2.788],[1.283,-0.586],[1.868,0.241],[0.556,0.456],[0.221,0.313],[0.173,0.587],[-0.066,0.869],[-0.371,0.63],[-0.5,0.42]],"o":[[0,0],[-2.215,0.551],[-1.164,3.447],[7.487,3.263],[0.817,-1.774],[-1.172,-2.795],[0,0],[-0.655,1.262],[-1.194,0.545],[-0.858,-0.111],[-0.299,-0.245],[-0.345,-0.491],[-0.266,-0.899],[0.062,-0.814],[0.529,-0.9],[0.358,-0.301]],"v":[[131,96.5],[127.063,97.061],[121.662,100.845],[127,115.875],[144.743,112.045],[143.9,105.298],[141.125,100.125],[139.304,103.913],[136.437,106.745],[131.875,107.25],[129.765,106.363],[128.987,105.52],[128.215,103.882],[127.938,101.152],[128.653,98.974],[130.391,96.963]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":1,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[19.72,-3.138],[-22.067,-34.425],[-13.464,-1.75],[0,0],[10.145,-2.381],[0.127,0.072],[5.998,10.233],[-0.215,0.045],[6.442,-3.14],[-0.098,0.234],[-0.321,0.517]],"o":[[0,0],[-22.56,3.59],[14.602,22.78],[24.669,3.207],[0,0],[-6.795,1.595],[-0.107,0.365],[-6.042,-10.308],[0.176,0.356],[-11.11,5.417],[-0.098,0.234],[3.428,-2.328]],"v":[[89.8,217.051],[70.746,215.013],[56.352,274.616],[99.547,307.867],[144.121,281.78],[128.007,283.65],[117.561,282.498],[101.877,271.892],[107.345,249.914],[88.433,247.265],[78.59,237.711],[68.571,231.358]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[16.597,-8.937],[-30.386,-23.808],[-12.544,2.633],[0,0],[8.299,-5.281],[0.135,0.024],[8.479,2.901],[-0.178,0.107],[8.293,0.569],[-0.015,0.239],[1.42,6.932]],"o":[[0,0],[-18.988,10.225],[20.107,15.754],[22.984,-4.824],[0,0],[-5.559,3.537],[0.019,0.359],[-8.56,-2.915],[0.267,0.263],[-13.697,-0.726],[-0.015,0.239],[-1.073,-12.935]],"v":[[93.394,211.512],[72.232,215.124],[76.33,278.735],[125.18,294.916],[158.838,255.583],[144.727,265.335],[133.334,266.698],[121.727,268.957],[116.243,255.497],[98.77,254.868],[89.01,242.483],[77.955,232.63]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[15.035,-11.837],[-34.545,-18.499],[-12.084,4.825],[0,0],[7.377,-6.731],[0.14,0.001],[9.72,-0.764],[-0.159,0.138],[9.218,2.424],[0.027,0.242],[2.29,10.14]],"o":[[0,0],[-17.201,13.542],[22.859,12.241],[22.141,-8.84],[0,0],[-4.941,4.508],[0.081,0.355],[-9.819,0.781],[0.313,0.216],[-14.99,-3.797],[0.027,0.242],[-3.324,-18.239]],"v":[[95.316,207.867],[75.1,216.679],[86.319,280.794],[137.996,288.441],[167.571,241.61],[153.088,256.178],[141.22,258.798],[131.652,267.49],[120.692,258.289],[103.938,258.67],[94.221,244.869],[82.647,233.266]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[13.474,-14.736],[-38.705,-13.191],[-11.624,7.016],[0,0],[6.454,-8.181],[0.144,-0.023],[10.96,-4.43],[-0.141,0.169],[10.144,4.279],[0.069,0.244],[3.161,13.348]],"o":[[0,0],[-15.415,16.859],[25.611,8.728],[21.298,-12.855],[0,0],[-4.323,5.48],[0.144,0.352],[-11.078,4.478],[0.359,0.169],[-16.283,-6.869],[0.069,0.244],[-5.575,-23.542]],"v":[[97.238,204.222],[77.968,218.235],[96.308,282.853],[150.812,281.966],[167.054,227.386],[161.448,247.02],[149.106,250.898],[141.578,266.022],[125.141,261.081],[109.106,262.471],[99.431,247.256],[87.339,233.902]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[12.651,-15.326],[-39.181,-11.137],[-11.206,7.562],[0,0],[9.551,-4.052],[1.077,-1.315],[9.249,-4.182],[1.261,-0.322],[7.477,3.416],[0.99,1.494],[2.549,11.583]],"o":[[0,0],[-14.473,17.533],[25.926,7.369],[20.531,-13.854],[0,0],[-4.699,10.323],[0.1,7.892],[-12.906,9.74],[-1.129,0.59],[-14.301,-6.533],[-0.913,-1.163],[-4.495,-20.426]],"v":[[108.345,203.727],[83.706,211.241],[105.257,274.506],[159.436,270.853],[182.452,224.2],[174.574,240.052],[158.025,244.733],[147.406,257.385],[122.991,259.704],[111.648,260.709],[102.696,239.455],[87.467,226.968]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[4.211,-7.216],[-17.075,-1.934],[-4.144,3.9],[0,0],[0.71,-1.378],[1.697,-2.275],[1.599,-1.423],[2.398,-0.79],[2.966,0.847],[1.643,2.293],[0.254,2.508]],"o":[[0,0],[-4.818,8.256],[11.299,1.28],[7.592,-7.146],[0,0],[-0.818,1.589],[-1.193,1.6],[-1.875,1.67],[-2.458,0.809],[-3.868,-1.105],[-1.693,-2.364],[-0.447,-4.417]],"v":[[133.625,206.25],[125.551,213.009],[138.875,237.75],[161.175,232.529],[167.375,210.375],[166.299,212.642],[162.509,218.744],[158.315,223.386],[151.896,227.247],[143.75,227.375],[135.699,222.018],[133.014,214.427]],"c":true}]},{"t":26.4,"s":[{"i":[[0,0],[1.49,-2.554],[-6.043,-0.685],[-1.467,1.38],[0,0],[0.251,-0.488],[0.601,-0.805],[0.566,-0.504],[0.849,-0.279],[1.05,0.3],[0.581,0.812],[0.09,0.888]],"o":[[0,0],[-1.705,2.922],[3.999,0.453],[2.687,-2.529],[0,0],[-0.29,0.562],[-0.422,0.566],[-0.664,0.591],[-0.87,0.286],[-1.369,-0.391],[-0.599,-0.837],[-0.158,-1.563]],"v":[[144.938,214.066],[142.08,216.458],[146.796,225.215],[154.688,223.367],[156.882,215.526],[156.502,216.329],[155.16,218.488],[153.676,220.131],[151.404,221.498],[148.521,221.543],[145.672,219.647],[144.721,216.96]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":1,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[-1.382,-2.926],[7.975,-1.883],[-0.897,-1.4],[-9.898,-0.632],[-6.604,-5.155],[-0.68,-2.313],[0.039,-0.405],[10.094,-3.935],[4.788,-0.935],[4.733,-0.157],[0.357,-0.102],[1.065,1.568],[0.711,0.21],[12.979,-1.148],[0,0],[-20.577,-41.712],[-21.427,18.151],[9.285,29.317]],"o":[[0.583,0.586],[0.494,1.046],[-8.47,2],[0.854,1.333],[8.895,0.568],[3.054,2.384],[3.88,13.195],[0.267,0.034],[-4.2,1.637],[-10.841,2.116],[-8.154,0.27],[-0.96,0.178],[-1.013,-1.491],[-0.72,-0.003],[-18.336,1.621],[0,0],[20.577,41.712],[21.427,-18.151],[-17.898,-56.515]],"v":[[-92.449,156.634],[-89.342,162.28],[-101.631,170.755],[-120.863,172.502],[-103.738,178.316],[-82.896,177.405],[-77.861,194.907],[-78.336,212.463],[-89.066,224.082],[-104.32,226.14],[-132.096,233.23],[-151.086,227.423],[-152.237,228.491],[-151.372,228.171],[-163.479,237.398],[-191.076,226.437],[-183.789,274.084],[-67.661,250.035],[-51.852,195.515]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[-1.17,-2.469],[5.874,-1.632],[-0.792,-1.323],[-7.521,-0.76],[-5.006,-4.091],[-0.323,-2.33],[0.094,-0.382],[7.616,-3.479],[3.868,-1.22],[5.758,-1.021],[0.356,-0.048],[4.858,3.324],[0.652,0.3],[10.672,0.524],[0,0],[-13.904,-42.811],[-23.046,14.403],[5.551,29.545]],"o":[[0.464,0.576],[0.456,0.962],[-6.237,1.737],[0.757,1.266],[6.747,0.646],[2.446,2.443],[1.88,13.177],[0.239,0.059],[-3.183,1.612],[-8.648,2.557],[-11.343,2.342],[-0.944,0.037],[-5.473,-3.613],[-0.689,-0.103],[-16.332,-2.595],[0,0],[13.904,42.811],[23.046,-14.403],[-12.01,-49.943]],"v":[[-88.312,155.721],[-87.976,163.833],[-96.898,170.787],[-110.963,172.868],[-97.794,178.061],[-81.967,178.047],[-78.178,193.087],[-82.184,209.243],[-90.134,218.868],[-101.998,221.794],[-126.646,230.099],[-148.778,223.602],[-156.339,224.676],[-158.157,218.625],[-171.795,223.765],[-195.465,209.224],[-192.357,253.032],[-79.538,253.511],[-49.598,203.757]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[-0.957,-2.012],[3.773,-1.381],[-0.687,-1.247],[-5.144,-0.889],[-3.409,-3.028],[0.033,-2.347],[0.149,-0.359],[5.139,-3.022],[2.948,-1.506],[6.783,-1.886],[0.355,0.006],[8.65,5.081],[0.593,0.39],[8.364,2.196],[0,0],[-7.231,-43.91],[-24.666,10.654],[1.817,29.773]],"o":[[0.345,0.566],[0.419,0.877],[-4.003,1.475],[0.659,1.199],[4.598,0.725],[1.838,2.502],[-0.119,13.159],[0.211,0.085],[-2.167,1.587],[-6.456,2.999],[-14.532,4.415],[-0.928,-0.104],[-9.934,-5.736],[-0.659,-0.203],[-14.328,-6.811],[0,0],[7.231,43.91],[24.665,-10.654],[-6.123,-43.372]],"v":[[-87.175,159.142],[-86.609,165.386],[-92.165,170.82],[-101.064,173.234],[-91.849,177.806],[-81.037,178.69],[-78.496,191.267],[-86.032,206.023],[-91.202,213.655],[-99.677,217.449],[-121.195,226.967],[-146.47,219.78],[-160.441,220.861],[-164.943,209.079],[-180.11,210.132],[-197.021,192.344],[-200.924,231.98],[-93.748,253.988],[-53.677,206.999]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[-0.532,-1.098],[-0.429,-0.879],[-0.477,-1.093],[-0.391,-1.146],[-0.214,-0.901],[0.747,-2.38],[0.258,-0.314],[0.183,-2.11],[1.108,-2.077],[8.832,-3.615],[0.353,0.114],[16.234,8.593],[0.474,0.57],[3.75,5.539],[0,0],[6.115,-46.108],[-27.904,3.158],[-5.651,30.229]],"o":[[0.107,0.547],[0.344,0.708],[0.464,0.95],[0.464,1.065],[0.301,0.882],[0.622,2.62],[-4.119,13.123],[0.155,0.135],[-0.133,1.538],[-2.071,3.882],[-20.91,8.559],[-0.897,-0.386],[-18.855,-9.98],[-0.597,-0.403],[-10.32,-15.243],[0,0],[-6.115,46.108],[27.904,-3.158],[5.651,-30.229]],"v":[[-84.901,165.983],[-83.876,168.493],[-82.699,170.885],[-81.265,173.965],[-79.96,177.295],[-79.178,179.976],[-79.131,187.627],[-93.728,199.583],[-93.338,203.227],[-95.033,208.758],[-110.293,220.704],[-141.853,212.136],[-168.645,213.23],[-178.514,189.987],[-196.742,182.866],[-192.632,158.585],[-218.058,189.876],[-122.169,254.941],[-61.836,213.483]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-1.044,-0.462],[-0.877,-0.392],[-1.028,-0.628],[-0.922,-0.896],[-0.583,-0.904],[0.52,-5.121],[0.363,-1.087],[-0.28,-2.662],[0.441,-2.38],[6.344,-2.738],[0.763,-1.703],[12.978,5.101],[0.479,0.446],[3.906,4.43],[0,0],[0.177,-41.068],[-24.084,5.9],[-3.342,27.05]],"o":[[0.157,0.469],[0.674,0.298],[0.949,0.424],[1.001,0.612],[0.71,0.689],[1.695,2.629],[-2.46,9.568],[0.038,0.387],[0.204,1.94],[-0.824,4.447],[-16.178,7.315],[-0.911,0.8],[-20.595,-4.317],[-0.568,-0.286],[-10.751,-12.191],[0,0],[-0.177,41.068],[24.084,-5.9],[4.533,-52.867]],"v":[[-96.639,154.739],[-94.715,156.064],[-92.356,157.08],[-89.349,158.635],[-86.425,160.874],[-84.468,163.254],[-82.279,174.628],[-95.965,185.031],[-95.066,190.023],[-95.259,196.664],[-104.946,208.498],[-138.13,204.303],[-159.238,207.651],[-174.839,189.592],[-198.004,184.944],[-193.63,163.548],[-216.418,195.504],[-107.366,248.435],[-64.283,195.117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[-1.465,0.044],[-1.248,0.018],[-1.484,-0.19],[-1.357,-0.577],[-0.882,-0.776],[0.406,-6.491],[0.415,-1.473],[-0.512,-2.937],[0.107,-2.531],[5.099,-2.299],[0.968,-2.611],[11.351,3.355],[0.482,0.384],[3.985,3.875],[0,0],[-2.793,-38.549],[-22.174,7.271],[-2.188,25.461]],"o":[[0.182,0.431],[0.945,-0.028],[1.35,-0.02],[1.445,0.185],[1.044,0.444],[2.563,2.255],[-1.631,7.791],[-0.02,0.513],[0.373,2.141],[-0.201,4.73],[-13.812,6.693],[-0.919,1.393],[-21.465,-1.486],[-0.554,-0.227],[-10.966,-10.665],[0,0],[2.793,38.549],[22.174,-7.271],[4.506,-52.434]],"v":[[-105.132,152.117],[-102.494,152.545],[-99.158,152.435],[-94.851,152.638],[-90.594,153.734],[-87.681,155.542],[-83.853,168.129],[-97.084,177.756],[-95.931,183.42],[-95.371,190.618],[-102.273,202.396],[-136.268,200.386],[-154.535,204.861],[-173.002,189.395],[-190.01,185.983],[-194.128,166.029],[-215.598,198.318],[-99.965,245.183],[-65.506,185.934]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[0,0],[0.581,1.627],[0.368,1.053],[0.372,0.924],[0.32,0.483],[0.212,0.015],[0.193,-4.552],[0.468,-1.86],[-0.201,-2.246],[0.219,-1.888],[3.855,-1.86],[1.172,-3.519],[9.723,1.609],[0.484,0.322],[4.063,3.321],[0,0],[-5.762,-36.029],[-20.264,8.642],[0.755,23.931]],"o":[[-0.551,-1.068],[-0.375,-1.05],[-0.398,-1.139],[-0.362,-0.9],[-0.246,-0.372],[-0.615,-0.044],[-0.802,6.014],[-0.078,0.639],[0.146,1.637],[-0.41,3.528],[-11.446,6.071],[-0.926,1.986],[-22.335,1.345],[-0.539,-0.169],[-11.181,-9.139],[0,0],[5.762,36.029],[20.264,-8.642],[0.791,-41.913]],"v":[[-96.21,171.161],[-97.921,166.952],[-99.039,163.753],[-100.199,160.602],[-101.227,158.475],[-101.916,157.871],[-103.177,164.046],[-104.536,173.313],[-104.072,177.968],[-104.074,183.382],[-109.766,192.293],[-134.406,196.469],[-149.832,202.071],[-171.165,189.197],[-187.766,187.022],[-198.252,168.511],[-209.945,201.299],[-109.397,236.263],[-91.021,205.918]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[-0.559,-0.655],[-0.435,-0.543],[-0.497,-0.722],[-0.451,-0.827],[-0.298,-0.707],[-0.021,-2.613],[0.521,-2.246],[0.111,-1.554],[0.332,-1.245],[2.611,-1.422],[1.377,-4.428],[8.095,-0.137],[0.487,0.26],[4.141,2.766],[0,0],[-8.731,-33.51],[-18.354,10.013],[3.698,22.401]],"o":[[0.232,0.353],[0.361,0.423],[0.47,0.587],[0.484,0.703],[0.347,0.636],[0.866,2.055],[0.027,4.237],[-0.136,0.765],[-0.081,1.132],[-0.619,2.326],[-9.08,5.449],[-0.933,2.579],[-23.205,4.177],[-0.525,-0.11],[-11.396,-7.612],[0,0],[8.731,33.51],[18.354,-10.013],[-2.925,-31.392]],"v":[[-115.787,144.206],[-114.554,145.722],[-113.349,147.171],[-111.883,149.136],[-110.466,151.433],[-109.492,153.448],[-108.001,160.463],[-111.988,168.871],[-112.214,172.516],[-112.776,176.147],[-117.259,182.19],[-132.544,192.552],[-145.128,199.281],[-169.327,188.999],[-185.522,188.06],[-202.375,170.992],[-204.292,204.279],[-118.829,227.343],[-98.037,189.402]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[-0.247,-0.348],[-0.153,-0.237],[-0.157,-0.269],[-0.143,-0.274],[-0.104,-0.217],[-0.235,-0.674],[0.573,-2.633],[0.422,-0.862],[0.444,-0.601],[1.367,-0.983],[1.582,-5.336],[6.467,-1.883],[0.49,0.198],[4.219,2.212],[0,0],[-11.7,-30.99],[-16.444,11.384],[6.641,20.871]],"o":[[0.258,0.315],[0.159,0.224],[0.166,0.256],[0.153,0.262],[0.11,0.211],[0.302,0.63],[0.857,2.46],[-0.194,0.891],[-0.308,0.628],[-0.829,1.124],[-6.713,4.827],[-0.94,3.172],[-24.075,7.008],[-0.51,-0.052],[-11.612,-6.086],[0,0],[11.7,30.99],[16.444,-11.384],[-6.641,-20.871]],"v":[[-123.364,150.75],[-122.606,151.745],[-122.136,152.437],[-121.651,153.225],[-121.205,154.03],[-120.884,154.671],[-120.075,156.63],[-119.44,164.429],[-120.356,167.064],[-121.479,168.911],[-124.752,172.087],[-130.682,188.636],[-140.425,196.492],[-167.49,188.802],[-183.278,189.099],[-195.624,173.474],[-198.639,207.26],[-128.261,218.424],[-111.677,164.886]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.2,"s":[{"i":[[0,0],[-0.128,-0.185],[-0.081,-0.13],[-0.085,-0.152],[-0.08,-0.158],[-0.059,-0.127],[-0.142,-0.411],[0.197,-1.794],[0.189,-0.609],[0.212,-0.438],[0.694,-0.767],[1.728,-3.717],[4.297,-1.374],[-0.454,-0.049],[9.575,11.264],[0,0],[-8.163,-21.62],[-11.472,7.942],[4.633,14.56]],"o":[[0.129,0.157],[0.083,0.119],[0.088,0.14],[0.083,0.148],[0.061,0.121],[0.171,0.369],[0.518,1.5],[-0.067,0.607],[-0.138,0.444],[-0.396,0.819],[-3.398,3.528],[-1.027,2.209],[-16.725,14.692],[-0.079,0.326],[-7.16,-4.331],[0,0],[8.163,21.62],[11.472,-7.942],[-4.633,-14.56]],"v":[[-142.744,144.063],[-142.359,144.576],[-142.113,144.949],[-141.853,145.387],[-141.609,145.845],[-141.429,146.217],[-140.958,147.389],[-140.346,152.432],[-140.724,154.26],[-141.246,155.585],[-142.868,157.973],[-147.133,169.641],[-154.4,175.183],[-172.171,173.424],[-187.575,175.611],[-191.624,159.174],[-200.757,185.067],[-145.568,193.399],[-132.713,155.505]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[0,0],[-0.029,-0.118],[-0.006,-0.091],[0.007,-0.115],[0.017,-0.127],[0.019,-0.106],[0.092,-0.37],[0.262,-1.843],[0.014,-0.639],[-0.045,-0.465],[-0.343,-0.824],[2.12,-2.168],[3.212,-1.119],[1.083,0.463],[5.597,6.402],[0,0],[-6.394,-16.935],[-8.986,6.221],[3.629,11.405]],"o":[[0.064,0.079],[0.019,0.076],[0.007,0.098],[-0.006,0.112],[-0.013,0.098],[-0.056,0.308],[-0.335,1.351],[-0.089,0.624],[-0.01,0.466],[0.084,0.869],[2.462,2.561],[-1.26,1.289],[-10.027,8.023],[-1.223,-0.277],[-4.934,-3.453],[0,0],[6.394,16.935],[8.986,-6.221],[-3.629,-11.405]],"v":[[-154.81,140.469],[-154.67,140.764],[-154.633,141.014],[-154.633,141.334],[-154.669,141.693],[-154.718,141.998],[-154.944,143.017],[-156.057,147.941],[-156.219,149.841],[-156.17,151.239],[-155.55,153.791],[-154.742,160.912],[-161.388,164.529],[-174.762,163.734],[-185.474,162.866],[-191.125,149.65],[-194.441,173.971],[-154.222,180.887],[-143.232,150.815]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.6,"s":[{"i":[[0,0],[-0.009,-0.021],[-0.009,-0.022],[-0.013,-0.034],[-0.016,-0.042],[-0.014,-0.037],[-0.049,-0.148],[-0.178,-0.955],[-0.044,-0.357],[-0.02,-0.275],[0.021,-0.55],[1.875,-2.097],[2.127,-0.865],[2.62,0.974],[1.618,1.539],[0,0],[-4.625,-12.25],[-6.5,4.5],[2.625,8.25]],"o":[[0,0],[0.006,0.014],[0.01,0.024],[0.013,0.033],[0.012,0.032],[0.039,0.108],[0.179,0.539],[0.06,0.323],[0.032,0.26],[0.038,0.513],[-0.083,2.229],[-1.115,1.247],[-3.329,1.354],[-2.368,-0.88],[-2.708,-2.576],[0,0],[4.625,12.25],[6.5,-4.5],[-2.625,-8.25]],"v":[[-162.125,137.375],[-162.111,137.407],[-162.089,137.461],[-162.055,137.548],[-162.012,137.66],[-161.974,137.764],[-161.84,138.148],[-161.252,140.435],[-161.093,141.457],[-161.014,142.259],[-160.983,143.859],[-163.584,150.646],[-168.375,153.875],[-177.353,154.045],[-183.373,150.122],[-187.625,144.875],[-188.125,162.875],[-162.875,168.375],[-153.75,146.125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[0,0],[-0.005,-0.013],[-0.005,-0.013],[-0.008,-0.019],[-0.009,-0.025],[-0.008,-0.022],[-0.029,-0.087],[-0.105,-0.565],[-0.026,-0.211],[-0.012,-0.162],[0.012,-0.326],[1.109,-1.241],[1.258,-0.512],[1.55,0.576],[0.957,0.91],[0,0],[-2.736,-7.247],[-3.845,2.662],[1.553,4.881]],"o":[[0,0],[0.003,0.008],[0.006,0.014],[0.008,0.019],[0.007,0.019],[0.023,0.064],[0.106,0.319],[0.036,0.191],[0.019,0.154],[0.022,0.304],[-0.049,1.319],[-0.659,0.737],[-1.969,0.801],[-1.401,-0.521],[-1.602,-1.524],[0,0],[2.736,7.247],[3.845,-2.662],[-1.553,-4.881]],"v":[[-169.507,134.459],[-169.499,134.478],[-169.486,134.51],[-169.466,134.561],[-169.441,134.627],[-169.418,134.689],[-169.339,134.916],[-168.991,136.269],[-168.897,136.873],[-168.85,137.348],[-168.832,138.295],[-170.37,142.309],[-173.205,144.22],[-178.516,144.321],[-182.077,142],[-184.593,138.896],[-184.889,149.544],[-169.951,152.798],[-164.553,139.635]],"c":true}]},{"t":30,"s":[{"i":[[0,0],[-0.009,-0.021],[-0.009,-0.022],[-0.013,-0.034],[-0.016,-0.042],[-0.014,-0.037],[-0.049,-0.148],[-0.178,-0.955],[-0.044,-0.357],[-0.02,-0.275],[0.021,-0.55],[1.875,-2.097],[2.127,-0.865],[2.62,0.974],[1.618,1.539],[0,0],[-4.625,-12.25],[-6.5,4.5],[2.625,8.25]],"o":[[0,0],[0.006,0.014],[0.01,0.024],[0.013,0.033],[0.012,0.032],[0.039,0.108],[0.179,0.539],[0.06,0.323],[0.032,0.26],[0.038,0.513],[-0.083,2.229],[-1.115,1.247],[-3.329,1.354],[-2.368,-0.88],[-2.708,-2.576],[0,0],[4.625,12.25],[6.5,-4.5],[-2.625,-8.25]],"v":[[-161.875,134.375],[-161.861,134.407],[-161.839,134.461],[-161.805,134.548],[-161.762,134.66],[-161.724,134.764],[-161.59,135.148],[-161.002,137.435],[-160.843,138.457],[-160.764,139.259],[-160.733,140.859],[-163.334,147.646],[-168.125,150.875],[-177.103,151.045],[-183.123,147.122],[-187.375,141.875],[-187.875,159.875],[-162.625,165.375],[-153.5,143.125]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":1,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[0,0],[-60.25,0.25],[0.25,13.5],[0,0],[3.25,-5.5],[0,0],[15.75,0.25],[0,0],[0,0],[9,0.5],[0,0],[15.432,1.187]],"o":[[0,0],[0,0],[60.25,-0.25],[-0.25,-13.5],[0,0],[-3.25,5.5],[0,0],[-15.75,-0.25],[0,0],[0,0],[-9,-0.5],[0,0],[-16.25,-1.25]],"v":[[-52.25,232.25],[-53,234.75],[-10.75,291.25],[64.5,253.25],[56,231],[53.75,233],[43.5,236],[31,239.75],[17.5,244.75],[6,246.25],[8.75,224.25],[-3.5,213],[-30.25,224]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[0,0],[-60.25,0.25],[0.25,13.5],[0,0],[3.25,-5.5],[0,0],[15.63,-1.954],[0,0],[0,0],[9,0.5],[0,0],[13.25,8]],"o":[[0,0],[0,0],[60.25,-0.25],[-0.25,-13.5],[0,0],[-3.25,5.5],[0,0],[-8,1],[0,0],[0,0],[-9,-0.5],[0,0],[-13.25,-8]],"v":[[-23.5,228.5],[-53,234.75],[-10.75,291.25],[64.5,253.25],[51.25,231],[57.5,246.5],[38.25,245],[32,247.5],[33.25,235],[6.5,239.75],[-4.5,250.75],[-5.25,241.5],[-13.25,231.75]],"c":true}]},{"t":14.4,"s":[{"i":[[0,0],[0,0],[-60.25,0.25],[0.25,13.5],[0,0],[3.25,-5.5],[0,0],[15.63,-1.954],[0,0],[0,0],[9,0.5],[0,0],[13.25,8]],"o":[[0,0],[0,0],[60.25,-0.25],[-0.25,-13.5],[0,0],[-3.25,5.5],[0,0],[-8,1],[0,0],[0,0],[-9,-0.5],[0,0],[-13.25,-8]],"v":[[-23.5,228.5],[-53,234.75],[-10.75,291.25],[64.5,253.25],[51.25,231],[57.5,246.5],[38.25,245],[34.5,250],[33.25,235],[6.5,239.75],[-4.5,250.75],[-11.25,241.5],[-18.5,236.75]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":1,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[-10.231,-18.821],[-30.007,0.006],[-0.88,-0.121],[-5.587,0.569],[-7.512,-5.678],[-0.665,0.411],[0,0],[12.855,1.495],[-0.417,0.019],[15.099,-6.542],[-0.047,0.844],[15.053,-0.704]],"o":[[0,0],[11.158,20.525],[15.126,-0.003],[0.114,-0.312],[10.585,-1.077],[12.762,9.647],[16.247,-5.392],[0,0],[-17.945,-2.087],[0.115,0.625],[-24.041,10.417],[-0.9,0.118],[-24.243,1.134]],"v":[[-237.995,-19.878],[-231.522,32.482],[-176.743,14.494],[-159.364,25.562],[-142.663,14.931],[-120.262,19.353],[-117.747,43.642],[-93.238,1.123],[-115.105,7.505],[-134.405,-28.243],[-150.599,-2.458],[-179.765,-8.561],[-200.757,6.366]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[-7.85,-19.613],[-28.696,19.366],[-0.128,-0.902],[-4.801,-4.777],[-6.423,-2.82],[-0.238,1.587],[0,0],[10.361,1.6],[-0.41,-0.029],[15.745,-3.48],[-0.044,0.689],[12.983,2.238]],"o":[[0,0],[8.561,21.389],[21.304,-10.884],[3.539,-5.569],[7.661,2.177],[11.618,4.31],[10.159,-7.897],[0,0],[-14.607,-2.282],[0.041,0.626],[-24.501,5.63],[-0.895,0.012],[-19.743,-2.533]],"v":[[-241.354,-30.252],[-240.402,17.658],[-195.804,21.134],[-166.622,19.652],[-142.199,10.694],[-122.593,17.103],[-111.576,27.96],[-105.542,4.225],[-124.611,9.4],[-140.748,-18.464],[-159.912,0.147],[-188.001,-10.069],[-211.424,-3.05]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0,0],[-5.468,-20.406],[-19.009,5.185],[-7.466,11.008],[-4.016,-10.122],[-5.335,0.038],[-1.22,2.348],[0,0],[7.866,1.704],[-0.404,-0.078],[16.391,-0.419],[-0.041,0.534],[10.913,5.18]],"o":[[0,0],[5.964,22.253],[13.86,-2.346],[6.963,-10.825],[8.984,3.169],[10.474,-1.027],[4.072,-10.402],[0,0],[-11.269,-2.476],[-0.034,0.626],[-24.961,0.843],[-0.89,-0.094],[-15.243,-6.2]],"v":[[-244.714,-40.626],[-249.283,2.833],[-214.116,30.774],[-198.38,21.866],[-150.734,21.831],[-129.923,24.979],[-125.28,23.152],[-123.596,6.828],[-137.866,13.796],[-150.841,0.566],[-169.225,2.752],[-200.487,-12.327],[-222.09,-12.466]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0,0],[-3.087,-21.198],[-9.323,-8.995],[-14.804,22.918],[-3.23,-15.468],[-4.246,2.896],[0.615,3.938],[0,0],[5.372,1.808],[-0.398,-0.126],[17.038,2.643],[-0.038,0.378],[8.843,8.121]],"o":[[0,0],[3.366,23.118],[6.417,6.191],[10.387,-16.081],[1.814,8.684],[9.33,-6.364],[-2.016,-12.907],[0,0],[-7.931,-2.67],[-0.108,0.627],[-25.42,-3.944],[-0.885,-0.201],[-10.744,-9.867]],"v":[[-248.074,-51],[-258.163,-11.991],[-232.427,40.414],[-196.137,26.581],[-159.27,32.968],[-134.754,26.854],[-125.484,25.844],[-130.15,10.431],[-143.622,13.192],[-153.434,1.095],[-178.538,5.357],[-204.473,-13.084],[-232.756,-21.883]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0,0],[-3.087,-21.198],[-9.323,-8.995],[-20.977,12.807],[-21.355,5.282],[-4.473,1.689],[0.615,3.938],[0,0],[12.122,5.308],[-0.398,-0.126],[16.163,1.143],[-0.038,0.378],[7.901,8.953]],"o":[[0,0],[3.366,23.118],[6.417,6.191],[7.712,-8.291],[14.395,-7.468],[10.283,-3.757],[-2.016,-12.907],[0,0],[-11.845,-5.013],[-0.108,0.627],[-20.38,-1.793],[-0.885,-0.201],[-8.494,-9.324]],"v":[[-250.324,-48.625],[-263.038,-15.241],[-237.302,37.164],[-221.387,39.581],[-164.395,33.218],[-144.004,30.729],[-130.484,25.594],[-134.4,6.556],[-154.997,8.192],[-170.434,-5.905],[-198.163,-1.018],[-221.348,-15.084],[-241.506,-24.258]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0,0],[-3.087,-21.198],[-9.323,-8.995],[-27.15,2.696],[-10.258,0.203],[-4.699,0.481],[0.615,3.938],[0,0],[18.872,8.808],[-0.398,-0.126],[15.288,-0.357],[-0.038,0.378],[6.958,9.784]],"o":[[0,0],[3.366,23.118],[6.417,6.191],[5.037,-0.5],[11.02,-0.218],[11.235,-1.151],[-2.016,-12.907],[0,0],[-15.759,-7.355],[-0.108,0.627],[-15.34,0.358],[-0.885,-0.201],[-6.244,-8.779]],"v":[[-249.574,-48.25],[-267.913,-18.491],[-242.177,33.914],[-186.137,33.581],[-170.02,27.468],[-154.254,31.104],[-135.484,25.344],[-138.65,2.681],[-166.372,3.192],[-187.434,-12.905],[-217.788,-7.393],[-238.223,-17.084],[-250.256,-26.633]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[-3.087,-23.542],[-9.323,-9.989],[-27.189,2.514],[-7.06,2.067],[-4.621,5.321],[0.615,4.374],[0,0],[24.622,1.002],[-0.398,-0.14],[11.788,13.39],[-0.038,0.42],[6.958,10.866]],"o":[[0,0],[3.366,25.673],[6.417,6.875],[9.943,-0.919],[7.265,-2.127],[7.84,-9.028],[-2.016,-14.333],[0,0],[-17.38,-0.707],[-0.108,0.696],[-10.726,-12.185],[-0.885,-0.223],[-6.244,-9.75]],"v":[[-257.074,-84.507],[-275.413,-51.458],[-249.677,6.739],[-195.137,28.581],[-169.729,24.562],[-152.004,13.891],[-132.984,-1.667],[-146.65,-21.561],[-178.872,-3.502],[-201.934,-16.103],[-233.038,-26.64],[-245.723,-49.896],[-257.756,-60.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[0,0],[-3.087,-23.542],[-19.989,-29.104],[-27.189,2.514],[-11.217,2.19],[-4.621,5.321],[2.229,7.298],[0,0],[22.497,-0.623],[-0.398,-0.14],[12.538,8.765],[-0.038,0.42],[6.958,10.866]],"o":[[0,0],[3.366,25.673],[11.305,16.173],[9.943,-0.919],[11.543,-2.254],[7.84,-9.028],[-3.536,-13.893],[0,0],[-17.525,0.621],[-0.108,0.696],[-13.112,-8.507],[-0.885,-0.223],[-6.244,-9.75]],"v":[[-258.324,-87.132],[-271.663,-57.083],[-247.427,1.364],[-197.012,18.831],[-163.348,14.567],[-137.004,3.641],[-130.734,-21.417],[-148.9,-37.186],[-176.247,-16.252],[-200.684,-30.103],[-229.413,-31.515],[-243.348,-53.146],[-255.881,-64.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[-3.087,-23.542],[-30.655,-48.219],[-27.189,2.514],[-5.89,3.915],[-4.621,5.321],[3.843,10.222],[0,0],[20.372,-2.248],[-0.398,-0.14],[13.288,4.14],[-0.038,0.42],[6.958,10.866]],"o":[[0,0],[3.366,25.673],[16.193,25.471],[9.943,-0.919],[6.061,-4.028],[7.84,-9.028],[-5.057,-13.453],[0,0],[-17.671,1.95],[-0.108,0.696],[-15.498,-4.829],[-0.885,-0.223],[-6.244,-9.75]],"v":[[-259.574,-89.757],[-267.913,-62.708],[-245.177,-4.011],[-198.887,9.081],[-175.803,1.392],[-160.504,-13.109],[-141.484,-37.667],[-151.15,-52.811],[-173.622,-29.002],[-199.434,-44.103],[-225.788,-36.39],[-240.973,-56.396],[-254.006,-68.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[0,0],[4.397,-15.603],[-30.9,-39.99],[-23.744,4.414],[-3.934,3.043],[-3.639,5.06],[4.211,8.692],[0,0],[13.955,-2.839],[-0.361,-0.091],[10.854,4.132],[0,0.373],[7.625,8.268]],"o":[[0,0],[-6.786,18.3],[16.323,21.124],[8.683,-1.614],[4.049,-3.131],[6.175,-8.586],[-5.542,-11.44],[0,0],[-14.343,3.481],[-0.039,0.622],[-11.723,-4.361],[-0.798,-0.125],[-12.726,-11.442]],"v":[[-262.865,-91.122],[-275.619,-85.595],[-256.356,-22.657],[-184.829,-2.204],[-166.978,-9.092],[-156.617,-21.273],[-146.034,-48.095],[-151.384,-65.449],[-179.075,-44.084],[-202.923,-51.042],[-226.867,-43.819],[-240.046,-60.099],[-256.524,-67.558]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[11.88,-7.664],[-31.145,-31.761],[-20.299,6.313],[2.578,8.699],[-2.658,4.799],[4.58,7.163],[0,0],[7.538,-3.43],[-0.325,-0.042],[8.421,4.125],[0.039,0.326],[8.292,5.67]],"o":[[0,0],[-16.939,10.928],[16.452,16.778],[7.423,-2.309],[-2.653,-8.952],[4.51,-8.143],[-6.027,-9.426],[0,0],[-11.014,5.012],[0.03,0.547],[-7.947,-3.893],[-0.71,-0.026],[-19.207,-13.134]],"v":[[-279.656,-96.987],[-283.325,-108.482],[-267.535,-41.304],[-170.771,-13.488],[-167.205,-32.541],[-171.231,-55.937],[-165.083,-66.524],[-171.617,-75.087],[-184.529,-59.166],[-206.412,-57.98],[-227.947,-51.247],[-239.118,-63.802],[-259.043,-66.616]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[0,0],[9.891,-10.102],[-37.398,-24.087],[-18.4,10.646],[-4.73,4.246],[-1.531,5.268],[6.05,5.972],[0,0],[6.593,-5.013],[-0.327,0.031],[9.124,2.16],[0.11,0.31],[3.438,9.438]],"o":[[0,0],[-14.103,14.403],[19.755,12.724],[6.728,-3.893],[4.867,-4.369],[2.597,-8.939],[-7.963,-7.86],[0,0],[-9.633,7.324],[0.15,0.527],[-8.611,-2.039],[-0.698,0.131],[-6.373,-17.493]],"v":[[-278.533,-128.471],[-293.059,-126.197],[-272.623,-58.872],[-209.317,-68.033],[-191.846,-80.118],[-181.94,-94.441],[-181.306,-114.925],[-186.519,-111.757],[-193.34,-93.628],[-214.339,-94.059],[-236.113,-79.141],[-251.989,-90.721],[-270.112,-94.112]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[0,0],[7.461,-7.928],[-29.161,-17.972],[-14.003,8.478],[-2.671,4.746],[-1.098,4.08],[4.75,4.506],[0,0],[4.999,-3.96],[-0.251,0.029],[7.058,1.523],[0.089,0.237],[2.792,7.214]],"o":[[0,0],[-10.637,11.305],[15.404,9.493],[5.121,-3.1],[2.749,-4.884],[1.863,-6.922],[-6.251,-5.93],[0,0],[-7.304,5.786],[0.124,0.404],[-6.661,-1.438],[-0.536,0.112],[-5.174,-13.37]],"v":[[-262.908,-136.678],[-284.023,-132.389],[-267.26,-80.868],[-214.986,-83.187],[-203.518,-95.549],[-197.988,-109.64],[-197.814,-125.42],[-200.605,-117.149],[-211.696,-105.661],[-224.874,-105.154],[-238.183,-100.523],[-245.214,-110.362],[-262.042,-119.089]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31.2,"s":[{"i":[[0,0],[4.361,-4.927],[-17.045,-11.168],[-8.185,5.268],[-1.561,2.949],[-0.642,2.535],[2.776,2.8],[0,0],[-0.586,-1.691],[1.788,-3.451],[5.355,-1.102],[2.471,2.013],[0.623,2.616]],"o":[[0,0],[-6.218,7.025],[9.004,5.899],[2.993,-1.926],[1.607,-3.035],[1.089,-4.301],[-3.654,-3.685],[0,0],[0.909,2.625],[-1.346,2.597],[-4.264,0.878],[-2.454,-1.999],[-2.056,-8.636]],"v":[[-254.5,-141],[-276.049,-137.014],[-266.25,-105],[-235.694,-106.441],[-228.991,-114.122],[-225.758,-122.879],[-228.579,-138.665],[-239.125,-137.875],[-237.913,-135.075],[-237.982,-124.971],[-247.5,-119],[-257.619,-121.27],[-262.25,-128.75]],"c":true}]},{"t":32.4,"s":[{"i":[[0,0],[4.361,-4.927],[-17.045,-11.168],[-8.185,5.268],[-1.561,2.949],[-0.642,2.535],[2.776,2.8],[0,0],[-0.586,-1.691],[1.788,-3.451],[5.355,-1.102],[2.471,2.013],[0.623,2.616]],"o":[[0,0],[-6.218,7.025],[9.004,5.899],[2.993,-1.926],[1.607,-3.035],[1.089,-4.301],[-3.654,-3.685],[0,0],[0.909,2.625],[-1.346,2.597],[-4.264,0.878],[-2.454,-1.999],[-2.056,-8.636]],"v":[[-258.25,-148],[-279.799,-144.014],[-270,-112],[-239.444,-113.441],[-232.741,-121.122],[-229.508,-129.879],[-232.329,-145.665],[-242.875,-144.875],[-241.663,-142.075],[-241.732,-131.971],[-251.25,-126],[-261.369,-128.27],[-266,-135.75]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":1,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[-6.5,-7.5],[0,0],[5.25,3.25]],"o":[[0,0],[6.5,7.5],[0,0],[-5.25,-3.25]],"v":[[-178,-94.75],[-173,-80.25],[-156.5,-72.75],[-166.75,-79.75]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[-22.627,-4.591],[0,0],[13.954,-1.472]],"o":[[0,0],[22.627,4.591],[0,0],[-13.954,1.472]],"v":[[-192.399,-104.183],[-161.554,-84.543],[-121.877,-94.176],[-150.128,-92.511]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[-18.75,-0.5],[0,0],[12.5,1.25]],"o":[[0,0],[18.75,0.5],[0,0],[-12.5,-1.25]],"v":[[-160.5,-125.25],[-143.75,-108],[-123,-121],[-143,-115]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[-9.968,-0.095],[0,0],[6.646,0.236]],"o":[[0,0],[9.968,0.095],[0,0],[-6.646,-0.236]],"v":[[-163.937,-124.053],[-155.032,-120.792],[-144,-123.249],[-154.633,-122.115]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[0.75,-8.5],[0,0],[-0.125,12.625]],"o":[[0,0],[-0.75,8.5],[0,0],[0.125,-12.625]],"v":[[147,31.875],[150.25,47.875],[145.125,63.125],[154.25,44.75]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[0.253,-5.27],[0,0],[-0.042,7.827]],"o":[[0,0],[-0.253,5.27],[0,0],[0.042,-7.827]],"v":[[186.383,22.375],[187.481,32.295],[185.75,41.75],[188.833,30.357]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[9.5,-8.25],[0,0],[-8.75,6.75]],"o":[[0,0],[-9.5,8.25],[0,0],[8.75,-6.75]],"v":[[144.75,74.625],[123.75,81.625],[113.625,99.625],[125.875,84.25]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[12.536,-1.08],[0,0],[-11.047,0.308]],"o":[[0,0],[-12.536,1.08],[0,0],[11.047,-0.308]],"v":[[174.258,75.557],[151.91,80.859],[131.381,75.954],[152.083,84.232]],"c":true}]}],"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[1,-7.75],[0,0],[-3.25,2],[0,0],[7,-1.25]],"o":[[0,0],[-1,7.75],[0,0],[3.25,-2],[0,0],[-7,1.25]],"v":[[118.5,59.75],[113,68.5],[116.5,78.5],[129.5,71.5],[145.25,69],[129.5,64.75]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[-5.389,-5.659],[0,0],[-11.275,5.044],[0,0],[19.423,1.798]],"o":[[0,0],[5,5.25],[0,0],[9.5,-4.25],[0,0],[-13.5,-1.25]],"v":[[131.75,64.5],[126.25,72.25],[138.5,86],[168.25,80.5],[185.75,67.5],[153.75,73.5]],"c":true}]}],"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[13.25,-18.25],[0,0],[-11.75,1.25],[0,0],[-3.5,9],[0,0],[0,7.5],[-1.75,4.75]],"o":[[0,0],[-13.25,18.25],[0,0],[11.75,-1.25],[0,0],[3.5,-9],[0,0],[0,-7.5],[1.75,-4.75]],"v":[[112,48.5],[89.75,77.25],[65.75,121.75],[89.25,111.25],[104.75,111],[109.5,95.25],[116,82],[109.25,74.25],[114.75,57.75]],"c":true}]},{"t":10.8,"s":[{"i":[[-0.451,-0.563],[13.25,-18.25],[0,0],[-25,-0.5],[0,0],[-3.5,9],[0,0],[0,7.5],[3.348,3.797]],"o":[[0,0],[-13.25,18.25],[0,0],[11.814,0.236],[0,0],[3.5,-9],[0,0],[0,-7.5],[-11.337,-12.859]],"v":[[123.25,29.25],[90,52.75],[59.25,109],[88.25,101],[101.5,96.5],[111,87],[122,75.5],[134.25,69.75],[123.25,54]],"c":true}]}],"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[5.75,0.25],[0,0],[4.5,0],[0,0],[-3,-2.25],[0.25,-3.25],[3.25,-5.5],[3.25,0],[0,0],[-9.25,-4.75],[0,0],[-20,-9.75],[-8,-8.75],[0,0],[3.5,1],[1.25,3.5],[0,0],[1.5,-5],[4.25,0],[4.5,1],[2,-0.75],[0,0],[-3.25,-6.5],[12,-1.25],[2.615,0.291],[2.16,0.57],[0,0],[-0.696,-3.499],[-9.359,-2.148],[0,0],[2,-3.25],[0,0],[0,-7.5],[10,3],[0,0],[-18,-9.25],[-4.424,-1.649],[-2.207,-0.307],[-1.846,0.45],[-1.291,0.775],[0,0],[-10,0],[0,0],[-15.5,-7],[0,0],[1,-6.5],[10,0.5],[2.5,-8],[7,-4],[6.5,2],[0,0],[-2.5,-3.5],[-4.5,-5],[3,-4],[6,-3],[0,0],[-28.25,-2.75],[0,0],[-1.75,-10],[-20.75,-17.75],[-8.5,2],[-2.75,7.25],[0,0],[0,4.5],[0,0],[3.25,1.25],[0,0],[-1,5.5],[-4.5,1.5],[-7.5,3.5],[-5,6.5],[0,0],[9,-2],[0,0],[3.25,3.25],[0,0],[8.5,6.25],[0,0],[-8,15.75],[-5.25,8],[-4,2.75],[0,0],[-4.5,15.25],[0,0],[0,8],[6.25,3.25],[0,0],[-12.25,0],[-2.5,3.75],[-5.25,4],[0,0],[4.5,0],[2.5,-3.25],[7.25,1],[0,0],[3.25,-5.5],[6,-14.25],[5.5,-8.75],[0,0],[-5.75,12.75],[-3.5,8.25],[-4,5.75],[0,0],[5.5,-2.5],[1.5,-3.75],[8.75,1],[0,0],[-14,2.75],[-4,2.5],[-6,3.75],[0,0],[8.75,0],[0,0],[-1.25,-2.25],[5.75,-0.25],[0,0],[5.75,0],[0,0],[-0.75,5.5],[0,0],[-1.5,8],[0,0],[8.75,0],[0,0],[14.75,1.5],[0,0],[-2.29,-10.943],[0,0],[3,10.25],[0,0],[2.75,0.25],[0,0],[-2.25,-4.75],[0,0],[3.25,1.25],[1.5,2.75],[-0.75,2],[0,0],[14,0],[0,0],[-15.25,1.5],[-2,6.5]],"o":[[0,0],[-5.75,-0.25],[0,0],[-4.5,0],[0,0],[3,2.25],[-0.25,3.25],[-3.25,5.5],[-3.25,0],[0,0],[9.25,4.75],[0,0],[20,9.75],[8,8.75],[0,0],[-3.5,-1],[-1.25,-3.5],[0,0],[-1.5,5],[-4.25,0],[-4.5,-1],[-2,0.75],[0,0],[3.25,6.5],[-2.811,0.293],[-2.656,-0.295],[-4.789,-1.263],[0,0],[1.106,5.558],[15.25,3.5],[0,0],[-2,3.25],[0,0],[0,7.5],[-10,-3],[0,0],[6.605,3.394],[2.783,1.038],[2.199,0.306],[1.381,-0.337],[7.5,-4.5],[0,0],[10,0],[0,0],[15.5,7],[0,0],[-1,6.5],[-10,-0.5],[-2.5,8],[-7,4],[-6.5,-2],[0,0],[2.5,3.5],[4.5,5],[-3,4],[-6,3],[0,0],[28.25,2.75],[0,0],[1.75,10],[20.75,17.75],[8.5,-2],[2.75,-7.25],[0,0],[0,-4.5],[0,0],[-3.25,-1.25],[0,0],[1,-5.5],[4.5,-1.5],[7.5,-3.5],[5,-6.5],[0,0],[-9,2],[0,0],[-3.25,-3.25],[0,0],[-8.5,-6.25],[0,0],[8,-15.75],[5.25,-8],[4,-2.75],[0,0],[4.5,-15.25],[0,0],[0,-8],[-6.25,-3.25],[0,0],[12.25,0],[2.5,-3.75],[5.25,-4],[0,0],[-4.5,0],[-2.5,3.25],[-7.25,-1],[0,0],[-3.25,5.5],[-6,14.25],[-5.5,8.75],[0,0],[5.75,-12.75],[3.5,-8.25],[4,-5.75],[0,0],[-5.5,2.5],[-1.5,3.75],[-8.75,-1],[0,0],[14,-2.75],[4,-2.5],[6,-3.75],[0,0],[-8.75,0],[0,0],[1.25,2.25],[-5.75,0.25],[0,0],[-5.75,0],[0,0],[0.75,-5.5],[0,0],[1.5,-8],[0,0],[-8.75,0],[0,0],[-14.75,-1.5],[0,0],[2.25,10.75],[0,0],[-3,-10.25],[0,0],[-2.75,-0.25],[0,0],[2.25,4.75],[0,0],[-3.25,-1.25],[-1.5,-2.75],[0.75,-2],[0,0],[-14,0],[0,0],[15.25,-1.5],[2,-6.5]],"v":[[-89.5,-116.25],[-100.25,-107.5],[-117.75,-114.25],[-123.25,-105.75],[-131.75,-106],[-128.5,-97.75],[-131.75,-89.75],[-133.75,-74.75],[-145,-70.25],[-154,-73.25],[-139.75,-60.25],[-123.5,-58.5],[-113,-40.75],[-87,-18],[-85.75,-2.5],[-89.25,-9.75],[-97.75,-19],[-98.25,-25.25],[-105.75,-19.25],[-112.5,-11.75],[-125.75,-15.5],[-138.75,-17.25],[-146.75,-16.5],[-124.25,7],[-130,21.75],[-138.21,21.675],[-145.508,20.295],[-153.5,17.5],[-152.953,23.685],[-139.25,39],[-121.5,35.5],[-121.25,42.5],[-128,46],[-117.75,57],[-136,62.5],[-154.5,55.25],[-137.5,81],[-121.178,88.596],[-113.749,90.621],[-107.736,90.414],[-103.75,88.75],[-97.25,78.5],[-83.75,88.75],[-61.5,84.5],[-56.5,114],[-33,118.5],[-43,133],[-61,146.5],[-78,156.5],[-83.5,177.5],[-99,176.5],[-114.5,177],[-93,186],[-78.5,195.5],[-76.5,220],[-91,230],[-121.75,242.75],[-97,267],[-74.25,256],[-46.25,290.5],[-26.75,317.75],[60,296],[90.25,286.25],[82,271.75],[80,265.5],[81.75,258.25],[71.25,254.25],[67.5,247.25],[62.5,244.25],[72.75,233.25],[89.5,228],[115.25,190.75],[115.75,168.5],[96,180.75],[82.5,183],[76.75,172.5],[78,159],[60.75,155.75],[54.75,136.75],[64.5,104.5],[93.25,63.75],[106.5,47.75],[124.25,37],[119,13.25],[132.75,5],[133.75,-18],[123.5,-31.75],[116.75,-46],[133.25,-32.25],[149.5,-44.75],[159,-56.25],[171.75,-63.5],[162,-66.75],[144.75,-54.5],[129.75,-49],[115.25,-58],[106.5,-39.75],[89.75,-13.5],[72.75,23.75],[56.5,39.75],[73.25,13],[88,-27],[102,-47],[94.75,-57.5],[77.5,-48.75],[63.5,-36.25],[49.75,-30.75],[36.25,-40.25],[52.75,-35.5],[68.5,-52.5],[85.75,-60.25],[96.5,-73.25],[72.25,-64.25],[56.5,-69],[57.75,-58.5],[56.75,-51],[47.5,-46.25],[33.75,-53.75],[24.5,-43],[21.25,-51],[24.75,-60],[19,-78.25],[22.5,-103.5],[10.75,-94.75],[-2.5,-97.5],[-22.5,-88],[-44.75,-100.75],[-44.25,-74.75],[-34.25,-53.5],[-51.25,-70.25],[-50.75,-92],[-61.25,-90.5],[-70,-95.25],[-65,-80],[-59.25,-70.5],[-74.5,-72],[-80.5,-82.25],[-84.25,-88.75],[-81.25,-94.75],[-102.5,-87],[-127.5,-97.75],[-105.75,-93.75],[-87.25,-104.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0,0],[2.881,-1.483],[0,0],[3.872,-0.446],[0,0],[-2.749,-1.494],[0.251,-3.25],[3.252,-5.499],[3.25,0.001],[0,0],[-9.248,-4.754],[0,0],[-19.996,-9.759],[-7.996,-8.754],[0,0],[3.499,1.002],[1.248,3.501],[0,0],[2.844,-2.238],[4.25,0.002],[4.54,0.721],[3.737,-1.486],[0,0],[-5.663,-11.774],[11.852,-2.036],[2.616,0.263],[9.404,0.6],[0,0],[-2.367,-5.863],[-8.601,0.487],[0,0],[-6.437,-7.593],[0,0],[0.003,-7.5],[13.945,0.312],[0,0],[-17.362,-10.29],[-7.242,-0.655],[-3.772,0.344],[-3.208,0.957],[-0.767,1.357],[0,0],[-8.916,2.54],[0,0],[-14.459,-8.634],[0,0],[0.103,-6.877],[6.209,-2.97],[2.413,-4.862],[7.002,-3.997],[6.722,-3.853],[0,0],[-7.274,0.544],[-2.07,-9.762],[6.441,-4.963],[6.001,-2.997],[0,0],[-28.249,-2.762],[0,0],[-1.746,-10.001],[-20.742,-17.759],[-8.501,1.996],[1.202,3.131],[0,0],[-0.789,7.96],[0,0],[6.13,3.257],[0,0],[1.928,5.247],[-4.501,1.498],[-8.894,6.735],[-5.003,6.498],[0,0],[9.001,-1.996],[0,0],[3.249,3.251],[0,0],[8.497,6.254],[0,0],[-8.007,15.747],[-5.253,7.998],[-4.001,2.748],[0,0],[-4.507,15.248],[0,0],[7.337,7.245],[6.249,3.253],[0,0],[-12.25,-0.005],[-2.502,3.749],[-5.252,3.998],[0,0],[15.016,0.133],[2.501,-3.249],[7.25,1.003],[0,0],[3.252,-5.499],[6.006,-14.247],[5.504,-8.748],[0,0],[1.975,9.018],[-3.504,8.248],[-4.003,5.748],[0,0],[5.501,-2.498],[1.502,-3.749],[8.75,1.004],[0,0],[-14.001,2.744],[-4.001,2.498],[-6.002,3.747],[0,0],[8.75,0.004],[0,0],[0.221,-1.008],[5.75,-0.247],[0,0],[5.75,0.003],[0,0],[0.266,3.159],[0,0],[-0.435,8.022],[0,0],[8.75,0.004],[0,0],[14.749,1.506],[0,0],[-2.286,-10.944],[0,0],[2.995,10.251],[0,0],[2.679,0.551],[0,0],[2.36,-4.318],[0,0],[0.063,-1.214],[1.299,3.419],[2.056,0.04],[0,0],[14,0.006],[0,0],[-13.01,2.705],[-1.237,5.372]],"o":[[0,0],[-2.209,3.408],[0,0],[-3.872,0.446],[0,0],[2.749,1.494],[-0.251,3.25],[-3.252,5.499],[-3.25,-0.001],[0,0],[9.248,4.754],[0,0],[19.996,9.759],[7.996,8.753],[0,0],[-3.5,-1.002],[-1.249,-3.501],[0,0],[-7.664,0.35],[-4.25,-0.002],[-6.362,-0.841],[-4.76,1.903],[0,0],[3.298,6.758],[-7.332,1.736],[-1.644,-0.432],[-10.553,-1.003],[0,0],[3.094,8.029],[20.812,-4.835],[0,0],[4.255,5.981],[0,0],[-0.003,7.5],[-28.228,2.363],[0,0],[6.737,4.04],[4.169,0.441],[4.008,-0.396],[3.404,-1.044],[4.484,-4.751],[0,0],[9.016,-2.627],[0,0],[11.195,5.828],[0,0],[0.156,8.429],[-6.255,3.697],[-2.757,4.886],[-7.002,3.997],[-5.226,1.175],[0,0],[3.064,1.384],[2.45,5.679],[-6.426,4.955],[-6.001,2.997],[0,0],[28.249,2.762],[0,0],[1.746,10.001],[20.742,17.759],[8.501,-1.996],[-29.432,6.592],[0,0],[0.444,-4.478],[0,0],[-8.447,-4.489],[0,0],[-2.95,-8.031],[4.501,-1.498],[12.591,-9.534],[5.003,-6.498],[0,0],[-9.001,1.996],[0,0],[-3.249,-3.251],[0,0],[-8.497,-6.254],[0,0],[8.007,-15.747],[5.254,-7.998],[4.001,-2.748],[0,0],[4.507,-15.248],[0,0],[-3.036,-5.812],[-6.249,-3.253],[0,0],[12.25,0.005],[2.502,-3.749],[5.252,-3.998],[0,0],[-6.329,-0.039],[-2.501,3.249],[-7.25,-1.003],[0,0],[-3.252,5.499],[-6.006,14.247],[-5.504,8.748],[0,0],[-3.799,-9.479],[3.504,-8.248],[4.003,-5.748],[0,0],[-5.501,2.498],[-1.502,3.749],[-8.75,-1.004],[0,0],[14.001,-2.744],[4.001,-2.498],[6.002,-3.747],[0,0],[-8.75,-0.004],[0,0],[-2.431,0.228],[-5.75,0.247],[0,0],[-5.75,-0.003],[0,0],[0.072,-3.206],[0,0],[0.611,-6.805],[0,0],[-8.75,-0.004],[0,0],[-14.749,-1.506],[0,0],[2.245,10.751],[0,0],[-2.996,-10.251],[0,0],[-8.245,-2.72],[0,0],[-0.605,3.624],[0,0],[-0.119,1.156],[-1.299,-3.419],[-0.325,-0.841],[0,0],[-14,-0.006],[0,0],[13.01,-2.705],[1.237,-5.372]],"v":[[-89.748,-129.42],[-100.691,-117.358],[-112.707,-112.037],[-120.872,-104.738],[-130.305,-101.494],[-124.494,-96.949],[-132.355,-91.111],[-135.562,-79.412],[-145.114,-75.917],[-152.413,-77.421],[-139.668,-60.315],[-123.419,-58.558],[-112.927,-40.803],[-92.037,-16.442],[-85.694,-2.541],[-89.19,-9.793],[-97.686,-19.046],[-96.484,-27.297],[-107.786,-28.7],[-118.64,-30.703],[-131.588,-29.059],[-146.187,-29.214],[-154.688,-25.268],[-128.898,-7.458],[-140.754,12.59],[-155.175,10.56],[-168.513,14.718],[-192.902,7.279],[-188.746,19.749],[-159.212,22.635],[-136.66,31.143],[-120.513,33.343],[-124.065,45.34],[-114.02,57.945],[-121.522,87.587],[-163.119,74.729],[-150.18,104.236],[-131.353,109.568],[-117.37,106.807],[-105.642,106.4],[-94.984,117.551],[-92.829,82.354],[-81.134,83.91],[-60.982,77.37],[-56.695,107.572],[-37.497,111.682],[-47.403,124.678],[-64.709,138.57],[-74.313,152.762],[-86.823,168.96],[-96.422,174.053],[-116.822,175.146],[-93.026,182.256],[-78.53,195.762],[-80.041,220.663],[-98.046,228.457],[-112.948,234.851],[-127.062,264.554],[-76.407,269.564],[-46.322,290.476],[-26.834,317.735],[89.495,324.155],[122.182,282.408],[89.583,279.694],[86.289,267.79],[89.746,259.344],[77.947,253.239],[72.796,243.334],[63.2,241.031],[67.554,227.677],[88.659,222.284],[115.222,190.797],[115.731,168.547],[95.976,180.789],[84.075,180.633],[76.73,172.53],[77.986,159.031],[62.737,151.873],[57.745,134.071],[64.51,104.525],[96.777,61.787],[109.134,43.493],[131.689,28.651],[125.649,8.599],[147.203,-0.745],[142.413,-20.045],[132.369,-33.899],[126.025,-45.052],[141.319,-36.195],[163.075,-46.988],[174.38,-59.684],[184.133,-72.328],[165.584,-67.983],[149.029,-63.24],[132.427,-58.447],[116.631,-66.053],[111.873,-44.107],[87.311,-22.064],[84.195,8.278],[67.238,22.571],[80.599,-0.271],[84.667,-32.965],[106.976,-48.759],[102.53,-64.562],[82.677,-56.42],[65.571,-43.626],[47.019,-39.132],[35.523,-50.138],[52.221,-43.58],[69.678,-58.474],[87.432,-64.816],[103.487,-76.211],[82.933,-71.622],[68.685,-74.579],[62.931,-70.578],[56.827,-63.879],[49.875,-64.433],[39.029,-74.939],[27.874,-62.993],[24.028,-66.994],[26.732,-70.593],[16.189,-83.245],[24.7,-101.494],[13.247,-98.949],[2.598,-104.805],[-23.606,-91.113],[-45.051,-97.073],[-44.162,-74.773],[-35.771,-58.219],[-46.564,-71.876],[-49.054,-92.026],[-60.055,-92.53],[-73.803,-109.784],[-74.81,-89.432],[-70.464,-76.729],[-75.113,-74.636],[-81.209,-77.989],[-87.056,-84.19],[-86.753,-92.189],[-103.007,-90.848],[-123.057,-97.1],[-103.243,-94.537],[-90.357,-105.5]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[-1.423,-4.082],[0,0],[2.93,-1.115],[0,0],[-2.372,-0.359],[0.254,-3.25],[3.256,-5.496],[3.25,0.004],[0,0],[-9.245,-4.76],[0,0],[-19.989,-9.772],[-7.99,-8.759],[0,0],[3.499,1.004],[1.246,3.501],[0,0],[4.86,1.904],[4.25,0.005],[4.6,0.303],[6.343,-2.589],[0,0],[-9.283,-19.685],[11.629,-3.214],[2.618,0.223],[20.271,0.647],[0,0],[-4.874,-9.41],[-7.463,4.439],[0,0],[-19.092,-14.108],[0,0],[0.008,-7.5],[19.863,-3.72],[0,0],[-16.406,-11.849],[-11.468,0.836],[-6.119,1.32],[-5.25,1.717],[0.018,2.231],[0,0],[-7.291,6.351],[0,0],[-12.899,-11.085],[0,0],[-1.242,-7.444],[0.522,-8.174],[2.283,-0.156],[7.004,-3.992],[7.055,-12.633],[0,0],[-14.434,6.611],[1.576,-16.905],[11.603,-6.407],[6.003,-2.993],[0,0],[-28.247,-2.781],[0,0],[-1.739,-10.002],[-20.731,-17.773],[-8.502,1.991],[7.13,-3.047],[0,0],[-0.005,4.5],[0,0],[3.248,1.254],[0,0],[-1.006,5.499],[-4.502,1.495],[-7.504,3.492],[-5.007,6.494],[0,0],[9.002,-1.99],[0,0],[3.246,3.254],[0,0],[8.493,6.259],[0,0],[-8.017,15.741],[-5.259,7.994],[-4.003,2.746],[0,0],[-4.517,15.245],[0,0],[18.342,6.112],[6.247,3.257],[0,0],[-12.25,-0.013],[-2.504,3.747],[-5.254,3.994],[0,0],[30.789,0.331],[2.503,-3.247],[7.249,1.008],[0,0],[3.256,-5.496],[6.016,-14.243],[5.51,-8.744],[0,0],[13.562,3.421],[-3.509,8.246],[-4.006,5.746],[0,0],[5.503,-2.494],[1.504,-3.748],[8.749,1.01],[0,0],[-14.003,2.735],[-4.003,2.496],[-6.004,3.743],[0,0],[8.75,0.01],[0,0],[2.427,0.856],[5.75,-0.244],[0,0],[5.75,0.006],[0,0],[1.791,-0.353],[0,0],[1.163,8.056],[0,0],[8.75,0.01],[0,0],[14.748,1.516],[0,0],[-2.278,-10.946],[0,0],[2.989,10.253],[0,0],[2.573,1.003],[0,0],[9.274,-3.67],[0,0],[-4.717,-4.91],[0.997,4.423],[6.265,-2.899],[0,0],[14,0.015],[0,0],[-9.651,4.514],[-0.093,3.68]],"o":[[0,0],[3.102,8.896],[0,0],[-2.93,1.115],[0,0],[2.372,0.359],[-0.254,3.25],[-3.256,5.496],[-3.25,-0.004],[0,0],[9.245,4.76],[0,0],[19.989,9.772],[7.99,8.759],[0,0],[-3.499,-1.004],[-1.246,-3.501],[0,0],[-16.909,-6.625],[-4.25,-0.005],[-9.155,-0.603],[-8.9,3.633],[0,0],[3.37,7.145],[-14.114,3.901],[-0.126,-0.638],[-19.2,-0.612],[0,0],[6.078,11.735],[29.155,-17.339],[0,0],[13.637,10.078],[0,0],[-0.008,7.5],[-55.57,10.408],[0,0],[6.934,5.008],[6.248,-0.455],[6.722,-1.45],[6.439,-2.106],[-0.041,-5.127],[0,0],[7.541,-6.568],[0,0],[4.737,4.071],[0,0],[1.89,11.322],[-0.639,9.992],[-3.143,0.214],[-7.004,3.992],[-3.316,5.937],[0,0],[3.911,-1.791],[-0.624,6.698],[-11.566,6.387],[-6.003,2.993],[0,0],[28.247,2.781],[0,0],[1.739,10.002],[20.731,17.773],[8.502,-1.991],[-21.01,8.977],[0,0],[0.005,-4.5],[0,0],[-3.248,-1.254],[0,0],[1.006,-5.499],[4.502,-1.495],[7.504,-3.492],[5.007,-6.495],[0,0],[-9.002,1.99],[0,0],[-3.246,-3.254],[0,0],[-8.493,-6.259],[0,0],[8.017,-15.741],[5.259,-7.994],[4.003,-2.746],[0,0],[4.517,-15.245],[0,0],[-7.59,-2.529],[-6.246,-3.257],[0,0],[12.25,0.013],[2.504,-3.747],[5.254,-3.994],[0,0],[-9.072,-0.098],[-2.504,3.247],[-7.249,-1.008],[0,0],[-3.256,5.496],[-6.016,14.243],[-5.509,8.744],[0,0],[-18.124,-4.571],[3.509,-8.246],[4.006,-5.746],[0,0],[-5.503,2.494],[-1.504,3.748],[-8.749,-1.01],[0,0],[14.003,-2.735],[4.003,-2.496],[6.004,-3.743],[0,0],[-8.75,-0.01],[0,0],[-7.952,-2.804],[-5.75,0.244],[0,0],[-5.75,-0.006],[0,0],[-0.944,0.236],[0,0],[-0.724,-5.012],[0,0],[-8.75,-0.01],[0,0],[-14.748,-1.516],[0,0],[2.238,10.752],[0,0],[-2.989,-10.253],[0,0],[-16.487,-6.424],[0,0],[-4.887,1.934],[0,0],[4.578,4.765],[-0.997,-4.423],[-1.938,0.897],[0,0],[-14,-0.015],[0,0],[9.651,-4.514],[0.093,-3.68]],"v":[[-90.119,-149.176],[-101.352,-132.146],[-105.141,-108.719],[-117.306,-103.219],[-128.137,-94.735],[-118.485,-95.748],[-133.264,-93.153],[-138.28,-86.405],[-145.285,-84.418],[-150.032,-83.677],[-139.546,-60.412],[-123.298,-58.644],[-112.817,-40.883],[-99.592,-14.104],[-85.609,-2.603],[-89.101,-9.857],[-97.591,-19.116],[-93.834,-30.366],[-110.841,-42.875],[-127.849,-59.132],[-140.345,-49.397],[-157.343,-47.161],[-166.594,-38.42],[-135.87,-29.145],[-156.886,-1.151],[-180.624,-6.112],[-203.021,6.353],[-233.881,-17.427],[-242.435,13.846],[-199.155,21.839],[-159.401,24.608],[-119.408,19.608],[-118.162,44.351],[-108.424,59.362],[-135.43,83.342],[-185.422,58.322],[-179.201,101.59],[-152.239,104.151],[-130.928,101.084],[-109.375,97.88],[-91.209,108.877],[-86.198,88.135],[-77.209,76.649],[-60.204,66.674],[-56.987,97.929],[-44.242,101.455],[-54.008,112.194],[-70.272,126.674],[-68.783,147.156],[-91.806,156.15],[-92.555,170.383],[-120.306,172.366],[-93.066,176.639],[-78.576,196.155],[-85.353,221.657],[-108.614,226.141],[-126.371,232.377],[-172.154,260.885],[-79.642,289.91],[-46.43,290.44],[-26.96,317.712],[133.737,366.388],[140.081,280.395],[109.082,279.111],[100.097,265.601],[108.614,250.36],[96.117,247.346],[85.116,248.084],[78.626,239.327],[69.136,230.567],[86.148,219.336],[115.179,190.867],[115.703,168.618],[95.94,180.846],[86.438,177.081],[76.699,172.575],[77.964,159.077],[65.717,146.058],[62.238,130.051],[64.524,104.562],[102.068,58.843],[113.086,37.108],[142.847,16.127],[135.623,1.622],[168.882,-9.363],[155.408,-23.112],[145.673,-37.124],[139.938,-43.631],[153.423,-42.113],[183.437,-50.345],[197.45,-64.835],[202.707,-85.571],[170.961,-69.831],[155.448,-76.35],[136.442,-72.617],[118.701,-78.133],[119.932,-50.642],[83.653,-34.91],[101.362,-14.929],[83.344,-3.197],[91.624,-20.179],[79.668,-41.912],[114.439,-51.397],[114.201,-75.155],[90.441,-67.924],[68.678,-54.689],[42.922,-51.704],[34.432,-64.969],[51.427,-55.701],[71.446,-67.434],[89.954,-71.665],[113.968,-80.653],[98.958,-82.68],[86.963,-82.947],[70.702,-88.696],[56.944,-83.197],[53.439,-91.707],[46.947,-106.722],[32.935,-92.982],[28.194,-90.986],[29.704,-86.482],[11.974,-90.738],[28.001,-98.484],[16.992,-105.247],[10.245,-115.762],[-25.266,-95.783],[-45.501,-91.558],[-44.03,-74.807],[-38.053,-65.296],[-39.535,-74.315],[-46.511,-92.064],[-58.263,-95.576],[-79.508,-131.585],[-89.524,-103.58],[-87.285,-86.074],[-76.033,-78.59],[-82.272,-71.597],[-91.265,-77.351],[-95.008,-88.348],[-103.767,-96.621],[-116.392,-96.126],[-99.481,-95.717],[-95.018,-107.376]],"c":true}]}],"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[7.5,-0.25],[0,0],[-2.75,-5.25],[-5.25,-1.25],[0,0],[2.25,3.75],[-1.75,2.5]],"o":[[0,0],[-7.5,0.25],[0,0],[2.75,5.25],[5.25,1.25],[0,0],[-2.25,-3.75],[1.75,-2.5]],"v":[[-123.25,222.75],[-128.25,227.5],[-142.5,225.75],[-138.25,241],[-125.5,247.5],[-115.25,249.5],[-118.5,240.75],[-118.5,230]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[7.33,-0.913],[0,0],[1.011,-5.746],[-5.256,-0.775],[0,0],[2.528,3.484],[-0.706,2.948]],"o":[[0,0],[-26.172,3.262],[0,0],[-6.075,34.539],[5.256,0.775],[0,0],[-2.528,-3.484],[0.977,-2.578]],"v":[[-115.883,226.501],[-126.078,233.488],[-153.652,219.871],[-157.925,234.211],[-113.488,262.265],[-103.665,249.896],[-109.204,240.694],[-112.177,232.003]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0,0],[7.166,-1.529],[0,0],[-3.545,-4.574],[-5.261,-0.3],[0,0],[2.807,3.218],[0.339,3.397]],"o":[[0,0],[-7.166,1.529],[0,0],[3.545,4.574],[5.261,0.3],[0,0],[-2.807,-3.218],[0.204,-2.655]],"v":[[-114.016,235.252],[-129.406,244.477],[-142.304,243.493],[-139.099,256.921],[-106.977,254.529],[-97.581,255.291],[-105.408,245.639],[-111.354,239.005]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0,0],[7,-2.168],[0,0],[-3.943,-4.236],[-5.267,0.175],[0,0],[3.085,2.952],[1.383,3.845]],"o":[[0,0],[-7,2.168],[0,0],[3.943,4.236],[5.267,-0.175],[0,0],[-3.085,-2.952],[-0.569,-2.733]],"v":[[-119.19,234.628],[-136.025,237.84],[-151.748,243.114],[-147.399,252.382],[-110.882,251.169],[-101.913,251.312],[-112.028,241.208],[-120.948,236.633]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[0,0],[7.757,-1.118],[0,0],[-4.34,-3.898],[-5.272,0.651],[0,0],[3.364,2.686],[2.427,4.293]],"o":[[0,0],[-7.252,1.114],[0,0],[4.34,3.898],[5.272,-0.651],[0,0],[-3.364,-2.686],[-1.341,-2.811]],"v":[[-141.614,230.004],[-151.27,235.579],[-170.816,237.485],[-153.948,250.968],[-114.787,247.809],[-106.245,247.332],[-118.649,236.777],[-130.542,234.261]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[8.514,-0.067],[0,0],[-4.738,-3.56],[-5.278,1.126],[0,0],[3.642,2.42],[3.471,4.742]],"o":[[0,0],[-7.504,0.059],[0,0],[4.738,3.56],[5.278,-1.126],[0,0],[-3.642,-2.42],[-2.114,-2.888]],"v":[[-152.789,228.38],[-166.514,233.317],[-188.635,225.606],[-160.498,249.554],[-118.692,244.448],[-110.577,243.353],[-125.269,232.346],[-140.136,231.888]],"c":true}]}],"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[16,0.75],[0,0],[-16.55,1.068]],"o":[[0,0],[-6.493,-0.304],[0,0],[15.5,-1]],"v":[[110.625,162],[91.625,168],[80.25,165.75],[95.625,176]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[16,0.75],[0,0],[-16.55,1.068]],"o":[[0,0],[-6.493,-0.304],[0,0],[15.5,-1]],"v":[[110.625,162],[91.625,168],[80.25,165.75],[95.625,176]],"c":true}]}],"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[4.25,-2.375],[0,0],[2.625,-3.375],[18.375,0.875],[0,0],[-0.121,-5.573],[-17,-1.75],[0,0],[-5.75,4.625],[0,0],[-3,6.25]],"o":[[0,0],[-4.25,2.375],[0,0],[-2.625,3.375],[-18.375,-0.875],[0,0],[0.125,5.75],[17,1.75],[0,0],[5.75,-4.625],[0,0],[3,-6.25]],"v":[[178.25,139.25],[171.875,145.125],[164.25,147.375],[162.125,162.25],[141.125,165.125],[118.5,152.125],[116.5,161.375],[136.625,177.375],[155.5,172.75],[166.5,168],[170.75,153.375],[177.5,151.125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0,0],[5.23,-2.676],[0,0],[2.031,-3.762],[13.105,-2.178],[0,0],[-1.927,-5.096],[-17.055,1.083],[0,0],[-4.907,5.512],[0,0],[-2.827,6.209]],"o":[[0,0],[-4.151,2.365],[0,0],[-2.031,3.762],[-13.286,2.251],[0,0],[3.022,6.693],[17.055,-1.083],[0,0],[4.907,-5.512],[0,0],[3.479,-7.072]],"v":[[188.549,143.137],[174.506,153.576],[163.049,155.546],[163.425,167.625],[147.365,174.65],[125.059,168.147],[126.951,180.047],[155.523,188.239],[168.838,182.535],[178.902,176.033],[180.861,164.425],[191.401,157.437]],"c":true}]},{"t":10.8,"s":[{"i":[[0,0],[7.625,-0.875],[0,0],[2.625,-3.375],[5.65,-1.268],[0,0],[-2.466,-5],[-17,-1.75],[0,0],[-5.75,4.625],[0,0],[-5.035,4.765]],"o":[[0,0],[-4.837,0.555],[0,0],[-2.625,3.375],[-6.125,1.375],[0,0],[4.5,9.125],[17,1.75],[0,0],[5.75,-4.625],[0,0],[7,-6.625]],"v":[[217.25,143.75],[187.875,154.875],[170.25,151.625],[169.375,159.25],[158.375,165.625],[140,159.875],[142.75,176.125],[179.625,184.125],[186.5,182.5],[197.5,177.75],[200.75,171.875],[219.5,162.375]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":12,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":10,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-16.713,1.346],[0,0],[7.17,0.745],[0,0],[9.558,0.63]],"o":[[0,0],[27.056,-2.178],[0,0],[-7.17,-0.745],[0,0],[-9.558,-0.63]],"v":[[26.466,-121.089],[56.771,-99.285],[76.415,-120.119],[63.844,-115.953],[53.81,-123.983],[44.962,-114.059]],"c":true},"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[12.314,-10.75],[0,0],[-9.122,2.5],[1.824,4.5]],"o":[[0,0],[-12.314,10.75],[0,0],[9.122,-2.5],[-1.824,-4.5]],"v":[[122.75,-19.5],[101.314,-9.75],[99.034,15],[105.419,1.25],[118.645,-8.25]],"c":true},"ix":2},"nm":"Path 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[1.5,-7.25],[0,0],[0.25,-4.25],[0.25,-11],[0,0],[0.25,6],[0,0],[-1.5,6.25],[0,0],[2,7]],"o":[[0,0],[-1.5,7.25],[0,0],[-0.25,4.25],[-0.25,11],[0,0],[-0.25,-6],[0,0],[1.5,-6.25],[0,0],[-2,-7]],"v":[[78.5,-118],[72.25,-108],[60,-100],[60.75,-86.5],[56.5,-63.75],[72.25,-51.25],[67,-65],[74.25,-72],[75,-86.25],[89,-93.5],[79.25,-105]],"c":true},"ix":2},"nm":"Path 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0.75,-6.25],[-8.5,-14.75],[-8.75,0],[0,0],[6.25,2.5],[0,0],[8.5,11.75]],"o":[[0,0],[-0.75,6.25],[8.5,14.75],[8.75,0],[0,0],[-6.25,-2.5],[0,0],[-8.5,-11.75]],"v":[[66.5,-11.25],[57.5,16.5],[68,46.5],[98.25,57.25],[116.5,50.25],[94.25,47],[86,29],[68.5,20.5]],"c":true},"ix":2},"nm":"Path 13","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[4,-3.5],[0,0],[10.25,-1.5],[0,0],[6.5,-1.75],[0,0],[0,0],[-0.5,-10.25],[0,0],[1,-9.25],[0,0],[-10.75,-1.75],[-0.75,-8.25],[0,0],[11.5,-3],[0,0],[10.375,-5],[0,0],[6.25,-3.25],[0,0],[-10.125,-2.125],[-2.5,-3.5],[-12.75,2.5],[0,0],[0,0],[-4.5,8.75],[0,0],[4,6.5],[0,0],[-4,9],[0,0],[0.75,13.75],[2.25,6.5],[2,9.25],[-3.25,4.25],[3.5,5.25],[-2,1.75],[0,0],[-5.75,1.75],[0,0],[6.5,-6],[3,6.25],[0,0],[2,-4.25],[6,1],[0,0],[9.418,-2.355]],"o":[[0,0],[-4,3.5],[0,0],[-10.25,1.5],[0,0],[-6.5,1.75],[0,0],[0,0],[0.5,10.25],[0,0],[-1,9.25],[0,0],[10.75,1.75],[0.75,8.25],[0,0],[-11.5,3],[0,0],[-10.375,5],[0,0],[-6.25,3.25],[0,0],[10.125,2.125],[2.5,3.5],[12.75,-2.5],[0,0],[0,0],[4.5,-8.75],[0,0],[-4,-6.5],[0,0],[4,-9],[0,0],[-0.75,-13.75],[-2.25,-6.5],[-2,-9.25],[3.25,-4.25],[-3.5,-5.25],[2,-1.75],[0,0],[5.75,-1.75],[0,0],[-6.5,6],[-3,-6.25],[0,0],[-2,4.25],[-6,-1],[0,0],[-13,3.25]],"v":[[-24,-87.5],[-20.25,-64],[-29.5,-71],[-41.25,-58.25],[-52.75,-56],[-57,-46.5],[-76.25,-45],[-62,-36.25],[-46.75,-22],[-51.5,-3.25],[-41,5],[-54,16.75],[-35.5,29.75],[-21,44.75],[-44.25,48.25],[-52.75,55.75],[-75.5,60.5],[-77.625,80.75],[-104.75,68.5],[-106.5,83],[-116.375,79.125],[-110.875,91.625],[-91.75,101],[-69.75,107.25],[31,147.75],[50.25,161.75],[48,146.75],[59.25,145],[59,125.75],[64.25,112.75],[59.25,97],[68.5,80.75],[52,65.5],[41,42.75],[43.5,17.75],[46,-6.25],[53.25,-20.75],[47.5,-34.5],[55.75,-42.5],[58.25,-50.75],[59.5,-77],[52.5,-70.25],[37.25,-75],[41.75,-85],[28,-78.25],[17.75,-71.75],[8.5,-79.75],[-0.5,-69.75]],"c":true},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[2.533,-14.356],[24.5,-3],[6.688,11.147],[0,0],[0,-11.5],[4,-12],[9,2.5],[0,0],[-9,-5],[-16,-10.5],[0,0],[8.934,-33.951],[15.5,-3],[0,0],[-7,-6],[10.5,-11.5],[0,0],[4,-14],[0,0],[-88.5,-57.5],[0,18.5],[0,0],[-6,12.5],[0,0],[0.5,16],[-8.5,13],[0,0],[-1,9],[-4.928,-10.184],[0,0],[-0.25,27.25],[0.425,0.15],[12.447,-12.803],[0,0],[-11.775,25.448],[-11,-2.25],[-5.75,26.75]],"o":[[0,0],[-3,17],[-24.5,3],[-7.5,-12.5],[0,0],[0,11.5],[-4,12],[-9,-2.5],[0,0],[9,5],[20.754,13.62],[0,0],[-2.5,9.5],[-8.446,1.635],[0,0],[7,6],[-10.5,11.5],[0,0],[-4,14],[0,0],[88.5,57.5],[0,-18.5],[0,0],[6,-12.5],[0,0],[-0.5,-16],[8.5,-13],[0,0],[1,-9],[7.5,15.5],[0,0],[0.44,-47.999],[0.175,-0.6],[-17.5,18],[0,0],[7.75,-16.75],[0.5,-0.5],[5.175,-24.077]],"v":[[54,-113.5],[57.5,-82.25],[25,-54],[-17.5,-71.5],[-22.5,-103.5],[-30,-81.5],[-38,-55.5],[-70,-44.5],[-90,-53.5],[-73.5,-33.5],[-35,-23.5],[-24,9.5],[-2,46.5],[-40.5,62],[-76.5,60],[-59,68],[-56,94.5],[-81,107.5],[-62,122],[-75.5,148],[-86.5,247.5],[75,227.5],[52,195],[61,176],[55,157],[38,142],[51,105.5],[52.25,57.25],[44.75,40],[58,32],[74.5,53.5],[64.75,15.25],[100.075,-36.15],[66.25,-19.5],[47.75,14],[43,-36.75],[85.25,-49.75],[63.25,-77.75]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[14,-4.75],[0,0],[-20.75,4.25]],"o":[[0,0],[-14,4.75],[0,0],[20.75,-4.25]],"v":[[-43,-108.5],[-66.25,-85.5],[-94,-89.75],[-64.75,-80.5]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0,0],[5.5,-2],[-2.25,-4.75],[-5.5,1.25]],"o":[[0,0],[-5.5,2],[2.25,4.75],[5.5,-1.25]],"v":[[124.5,-84.25],[109.25,-76.75],[103.5,-66],[118,-72]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[0,0],[-4,-8.5],[0,0],[1.25,7.75]],"o":[[0,0],[4,8.5],[0,0],[-1.25,-7.75]],"v":[[111.5,-53.25],[120.5,-40.75],[135,-37.5],[123.75,-47]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[0,0],[8.351,-9.018],[0,0],[-11.4,4.399]],"o":[[0,0],[-8.351,9.018],[0,0],[11.4,-4.399]],"v":[[-84.935,110.883],[-95.378,121.755],[-112.717,130.074],[-93.705,129.744]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[0,0],[5.028,-9.675],[0,0],[-5.723,14.313]],"o":[[0,0],[-5.622,10.818],[0,0],[5.723,-14.313]],"v":[[-70.73,-11.409],[-74.778,8.175],[-87.698,18.908],[-64.484,9.56]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[0,0],[2.75,-5.75],[0,0],[21,-10.375],[0,0],[-19.668,7.973],[0,0],[-1.375,8.375]],"o":[[0,0],[-2.75,5.75],[0,0],[-19.38,9.575],[0,0],[18.5,-7.5],[0,0],[1.375,-8.375]],"v":[[146.875,96.625],[145.625,109.625],[136.875,115.125],[122.5,134.625],[91.125,139.625],[126.25,141.625],[144.75,119.25],[152.375,110.25]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[0,0],[14.75,-12.25],[0,0],[-15,16.25],[-2.557,1.663]],"o":[[0,0],[-14.75,12.25],[0,0],[2.597,-2.814],[12.208,-7.943]],"v":[[130.25,73],[96.75,79.5],[86.5,114.5],[99.5,84],[107.274,77.354]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":13,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3,0],[0,0],[0.5,-4.75],[0,0],[-1.75,-6],[6.5,-6],[0,0],[9,-14.5],[3.25,0.75],[0,0],[-3.25,-5],[1,-6],[0,0],[-5.25,-14.5],[6.75,-8.5],[0,0],[-4.574,-3.214],[4,-8.25],[0,0],[25,-5.75],[0,0],[-7.5,-7.25],[-11.25,-5.5],[-7.75,4.25],[-11.75,10.25],[-0.5,9],[0,0],[8.25,-4.25],[1.75,5.25],[0,0],[5.75,12.5],[0,0],[3,8.25],[0,0],[3.25,9],[-5.25,3.25],[0,0],[6.25,3],[-2.75,3],[0,0],[8.25,-2],[6.75,4.75],[0,0],[0.75,7.25],[0,0],[3,2.5]],"o":[[0,0],[-3,0],[0,0],[-0.5,4.75],[0,0],[1.75,6],[-6.5,6],[0,0],[-9,14.5],[-3.25,-0.75],[0,0],[3.25,5],[-1,6],[0,0],[5.25,14.5],[-6.687,8.421],[0,0],[9.25,6.5],[-2.904,5.99],[0,0],[-14.144,3.253],[0,0],[7.5,7.25],[11.25,5.5],[7.75,-4.25],[11.75,-10.25],[0.5,-9],[0,0],[-8.25,4.25],[-1.75,-5.25],[0,0],[-5.75,-12.5],[0,0],[-3,-8.25],[0,0],[-3.25,-9],[5.25,-3.25],[0,0],[-6.25,-3],[2.75,-3],[0,0],[-8.25,2],[-6.75,-4.75],[0,0],[-0.75,-7.25],[0,0],[-3,-2.5]],"v":[[-40,19.5],[-45.25,26.5],[-50.75,26.5],[-46.5,34],[-51.75,41],[-40.25,50],[-44.5,64],[-57,68.5],[-55.5,86.5],[-72.5,98],[-80.75,89.75],[-77.25,105],[-68.25,113.25],[-63,119],[-32.5,127.75],[-38.25,155.5],[-51,159.25],[-46,166.5],[-42.5,186],[-49.75,192.75],[-64.75,211.5],[-92,194.75],[-84.25,216],[-57,258.25],[23.25,252.25],[67.75,228.25],[80.5,200.5],[72.75,178.75],[68,198.75],[48.25,194.5],[49,180.75],[23.75,174.25],[25,152.5],[10.5,145.25],[14.25,128.75],[-0.5,121.25],[15.25,100],[25.75,88],[11,90.75],[9.75,73],[10.5,57.75],[1.25,65.5],[-14.25,65],[-10.25,52.75],[-23.5,38.5],[-22,26],[-34.75,26.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[4.75,-5],[0,0],[-6.5,4.125]],"o":[[0,0],[-3.776,3.975],[0,0],[6.5,-4.125]],"v":[[49,95],[42,108.25],[37,114.375],[43.125,111.625]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0.75,-8],[4.625,-3.5],[0,0],[-1.25,16]],"o":[[0,0],[-0.75,8],[-4.625,3.5],[0,0],[0.743,-9.511]],"v":[[59.375,143.875],[65,154.25],[57.125,165.625],[56.25,174.875],[70.75,156.375]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[-3.5,-4.375],[1.25,-3.75],[0,0],[5.125,4.625]],"o":[[0,0],[2.361,2.951],[-1.25,3.75],[0,0],[-5.125,-4.625]],"v":[[40.125,122.375],[47.25,128],[51.25,136.875],[54,142],[52.875,128.625]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[-3.5,-10.625],[0.75,-5],[0,0],[6.5,10.25]],"o":[[0,0],[1.422,4.317],[-0.75,5],[0,0],[-6.5,-10.25]],"v":[[28.875,41.875],[45,55.5],[45.5,67],[53.75,74.25],[51.5,54.375]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[-0.125,-4.5],[5.375,-4.25],[5.625,0.625],[0,0],[-5.125,-3],[-3,-1.125],[0,0],[-5.75,6.875],[4.75,12.75]],"o":[[0,0],[0.125,4.5],[-5.375,4.25],[-5.625,-0.625],[0,0],[5.125,3],[3,1.125],[0,0],[5.75,-6.875],[-4.75,-12.75]],"v":[[-18.875,-19],[-12.125,-6.125],[-17.625,7],[-29.25,13],[-39.625,8.625],[-33.25,17.625],[-22.25,21.5],[-18.75,27.75],[-3.75,20.875],[-2.875,-6.875]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[-8.75,-3.25],[-2.75,0],[0,0],[4.25,-0.25],[5.75,2.75]],"o":[[0,0],[8.75,3.25],[2.75,0],[0,0],[-4.25,0.25],[-5.75,-2.75]],"v":[[21.5,65.5],[31.25,83],[44,82.25],[52,77.5],[41,77.5],[29.5,75.5]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":1.2,"s":[0,0],"h":1},{"t":2.4,"s":[100,100],"h":1},{"t":3.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":7,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.864,6.307],[0,0],[-7.163,1.143],[0,0],[-2.616,-4.343],[0,0],[2.132,-4.206],[0,0],[5.125,2.085]],"o":[[0,0],[-1.757,-5.944],[0,0],[7.163,-1.143],[0,0],[2.615,4.343],[0,0],[-2.132,4.206],[0,0],[-5.125,-2.085]],"v":[[-28.664,123.336],[-27.91,110.795],[-35.671,100.932],[-20.957,102.312],[-6.562,83.891],[-6.203,104.702],[12.352,110.004],[-4.413,115.423],[-7.728,121.633],[-15.871,114.537]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0.125,-12.625],[-10.125,-7],[-31.25,0.375],[9.25,9.875],[0,0],[7,-6.875],[0,0],[5.625,-4.25],[0,0],[2.5,-3.375],[7.875,3.25],[-0.625,2.5],[0,0],[8.375,-1],[0.375,4.625],[0,0],[11.125,3.5]],"o":[[0,0],[-0.125,12.625],[10.125,7],[31.25,-0.375],[-9.25,-9.875],[0,0],[-7,6.875],[0,0],[-5.625,4.25],[0,0],[-2.5,3.375],[-7.875,-3.25],[0.625,-2.5],[0,0],[-8.375,1],[-0.375,-4.625],[0,0],[-11.125,-3.5]],"v":[[-66.375,87.875],[-73.875,104.125],[-49.125,146.125],[8.25,160.625],[33.625,110],[23.375,108.875],[22,127.125],[8.625,130.5],[9,138.5],[-2.625,140],[-6.25,147],[-25.5,148.25],[-33.25,134.25],[-31,125.625],[-41.5,130.5],[-55.125,123.625],[-53.125,115.75],[-60.75,110.375]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":0,"s":[0,0],"h":1},{"t":1.2,"s":[100,100],"h":1},{"t":2.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":2,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":36,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,540,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[154.239,154.239,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[15.25,3.125],[1.875,-11.375],[-19.125,-1.875],[2.75,13.625]],"o":[[-15.25,-3.125],[-1.875,11.375],[19.125,1.875],[-2.75,-13.625]],"v":[[-60,45.25],[-96,60.75],[-69.75,86.125],[-34.5,64.375]],"c":true}]},{"t":22.8,"s":[{"i":[[0.259,0.053],[0.032,-0.194],[-0.325,-0.032],[0.047,0.232]],"o":[[-0.259,-0.053],[-0.032,0.194],[0.325,0.032],[-0.047,-0.232]],"v":[[-72.856,38.975],[-73.468,39.239],[-73.021,39.671],[-72.422,39.301]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[20,2.125],[1.995,-23.575],[-19,-1.375],[-2.875,13.125]],"o":[[-17.268,-1.835],[-1.375,16.25],[16.309,1.18],[4.039,-18.439]],"v":[[-68.25,58.375],[-107.5,84.75],[-73,113.125],[-39,93.25]],"c":true}]},{"t":22.8,"s":[{"i":[[5.164,0.549],[0.515,-6.088],[-4.906,-0.355],[-0.742,3.389]],"o":[[-4.459,-0.474],[-0.355,4.196],[4.211,0.305],[1.043,-4.761]],"v":[[-87.096,59.814],[-97.231,66.624],[-88.322,73.951],[-79.543,68.819]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[29.464,10.75],[3.625,-9.875],[-16.75,-1.625]],"o":[[-9.25,-3.375],[-3.35,9.127],[16.75,1.625]],"v":[[-44.25,95.625],[-62.375,102.125],[-52.625,127.5]],"c":true}]},{"t":22.8,"s":[{"i":[[-0.1,-0.036],[-0.012,0.033],[0.057,0.006]],"o":[[0.031,0.011],[0.011,-0.031],[-0.057,-0.006]],"v":[[-59.448,92.864],[-59.387,92.842],[-59.42,92.756]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[13.25,-6.5],[-13.125,-10.875],[-7.875,6],[11,10]],"o":[[-13.25,6.5],[13.125,10.875],[7.875,-6],[-11,-10]],"v":[[-49.25,70.25],[-45,99.625],[-12.875,107.25],[-11.5,77.75]],"c":true}]},{"t":22.8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-28,71.375],[-28,71.375],[-28,71.375],[-28,71.375]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":14.4,"s":[0,0],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[13.885,-24.874],[0,0],[-12.347,-30.664],[0,0],[-33.322,2.688],[0,0],[-12.45,20.769],[18.845,12.947],[16.246,4.089],[9.747,8.859]],"o":[[0,0],[-15.596,27.939],[0,0],[13.144,32.644],[0,0],[33.791,-2.726],[0,0],[14.296,-23.85],[-14.846,-10.2],[-16.246,-4.089],[-9.747,-8.859]],"v":[[-82.764,43.446],[-102.904,54.623],[-102.406,105.876],[-91.455,158.346],[-56.268,203.338],[1.921,238.812],[37.412,204.559],[51.704,171.072],[42.007,72.889],[6.621,47.667],[-37.623,41.813]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0,0],[13.885,-24.874],[0,0],[-12.347,-30.664],[0,0],[-33.322,2.688],[0,0],[-12.45,20.769],[18.845,12.947],[16.246,4.089],[9.747,8.859]],"o":[[0,0],[-15.596,27.939],[0,0],[13.144,32.644],[0,0],[33.791,-2.726],[0,0],[14.296,-23.85],[-14.846,-10.2],[-16.246,-4.089],[-9.747,-8.859]],"v":[[-82.764,43.446],[-102.904,54.623],[-95.906,117.876],[-91.455,158.346],[-56.268,203.338],[1.921,238.812],[37.412,204.559],[51.704,171.072],[62.007,46.389],[16.121,27.167],[-37.623,41.813]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[0,0],[12.284,-21.563],[0,0],[-10.923,-26.582],[0,0],[-29.481,2.33],[0,0],[-11.014,18.004],[16.673,11.224],[14.373,3.544],[8.624,7.679]],"o":[[0,0],[-13.798,24.219],[0,0],[11.629,28.298],[0,0],[29.896,-2.363],[0,0],[12.648,-20.675],[-13.135,-8.842],[-14.373,-3.544],[-8.624,-7.679]],"v":[[-83.882,53.223],[-109.202,61.811],[-103.203,106.188],[-102.727,145.673],[-65.634,173.669],[-19.54,207.906],[10.706,178.03],[30.852,153.036],[28.003,56.194],[-12.939,48.834],[-48.561,50.156]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[10.684,-18.251],[0,0],[-9.5,-22.5],[0,0],[-25.639,1.972],[0,0],[-9.579,15.239],[14.5,9.5],[12.5,3],[7.5,6.5]],"o":[[0,0],[-12,20.5],[0,0],[10.113,23.952],[0,0],[26,-2],[0,0],[11,-17.5],[-11.423,-7.484],[-12.5,-3],[-7.5,-6.5]],"v":[[-85,63],[-115.5,69],[-110.5,94.5],[-114,133],[-75,144],[-41,177],[-16,151.5],[10,135],[1,78],[-42,70.5],[-59.5,58.5]],"c":true}]},{"t":15.6,"s":[{"i":[[0,0],[6.655,-11.369],[0,0],[-5.918,-14.015],[0,0],[-15.97,1.229],[0,0],[-5.648,2.587],[4.089,8.725],[-0.143,0.15],[27.711,1.138]],"o":[[0,0],[-7.475,12.769],[0,0],[6.3,14.92],[0,0],[16.195,-1.246],[0,0],[10.168,-4.657],[-7.503,-16.013],[-0.697,-0.404],[-18.357,-0.754]],"v":[[-94.027,54.057],[-109.525,57.294],[-104.411,74.678],[-107.091,95.16],[-66.798,114.011],[-47.62,127.567],[-30.51,113.909],[-15.895,109.302],[-7.089,85.198],[-33.382,61.075],[-66.643,44.254]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 47","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[28.75,8],[16.25,-8.75],[-2.75,-8],[-5.25,-0.5],[-1.75,-0.25],[0,-3],[-10,-3.5],[-9.5,6.5],[-2.25,7]],"o":[[-28.75,-8],[-16.25,8.75],[2.75,8],[5.25,0.5],[1.75,0.25],[0,3],[10,3.5],[9.5,-6.5],[2.25,-7]],"v":[[12.75,-120],[-44.25,-119],[-63.5,-92.75],[-51.25,-74.75],[-39.75,-64.5],[-34.25,-56.25],[-23.25,-37.75],[12.75,-36.5],[21.5,-73.75]],"c":true}]},{"t":16.8,"s":[{"i":[[24.081,6.701],[13.611,-7.329],[-2.303,-6.701],[-4.397,-0.419],[0.754,-1.274],[-5.267,-2.985],[-5.376,-3.816],[-7.957,5.444],[-1.885,5.863]],"o":[[-24.081,-6.701],[-13.611,7.329],[2.303,6.701],[4.397,0.419],[-4.946,8.355],[5.197,2.945],[8.734,6.2],[7.957,-5.444],[1.885,-5.863]],"v":[[12.919,-127.591],[-34.823,-126.753],[-50.947,-104.767],[-38.436,-98.19],[-30.804,-90.605],[-26.447,-71.445],[-17.234,-61.7],[12.919,-57.653],[15.998,-80.603]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":18,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 46","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[11.25,-4.854],[2.477,-7.135],[-10.114,-4.481],[-2.834,9.871]],"o":[[-9.526,4.11],[-6,17.28],[36.375,16.115],[8.25,-28.736]],"v":[[95.375,23.621],[73.25,37.212],[84.125,71.385],[117.5,39.736]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[10.962,-4.648],[2.414,-6.832],[-9.854,-4.29],[-2.761,9.452]],"o":[[-9.281,3.935],[-5.846,16.546],[35.442,15.431],[8.038,-27.515]],"v":[[77.654,21.834],[56.096,34.848],[60.692,68.819],[99.212,37.265]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[7.5,-3.125],[1.652,-4.594],[-6.742,-2.885],[-1.889,6.355]],"o":[[-6.35,2.646],[-4,11.125],[24.25,10.375],[5.5,-18.5]],"v":[[73.5,28.125],[58.75,36.875],[66,58.875],[88.25,38.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[14.994,4.785],[4.466,-3.137],[-12.041,-8.617],[-5.727,4.497]],"o":[[-13.129,-4.361],[-9.943,6.088],[35.992,25.225],[14.354,-9.889]],"v":[[71.287,28.476],[45.219,31.328],[52.997,54.649],[116.395,69.679]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[6.25,2.875],[0.25,-4.875],[-6.375,-3.625],[-0.66,6.597]],"o":[[-6.25,-2.875],[-0.25,4.875],[6.375,3.625],[0.375,-3.75]],"v":[[94.75,16.375],[84.25,17.625],[92.75,24.625],[104.25,22.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[2.691,1.905],[0.547,-2.274],[-2.684,-2.269],[-0.892,3.05]],"o":[[-2.691,-1.905],[-0.547,2.274],[2.684,2.269],[0.507,-1.734]],"v":[[100.077,8.296],[93.463,10.477],[95.952,15.481],[102.477,14.416]],"c":true}]},{"t":21.6,"s":[{"i":[[0.294,0.208],[0.06,-0.249],[-0.293,-0.248],[-0.097,0.333]],"o":[[-0.294,-0.208],[-0.06,0.249],[0.293,0.248],[0.055,-0.189]],"v":[[96.932,8.783],[96.209,9.022],[96.481,9.569],[97.195,9.452]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 45","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[4.182,-5.213],[-7.71,-3.176],[-5.862,5.264],[5.791,4.068]],"o":[[-4.182,5.213],[7.71,3.176],[5.862,-5.264],[-8.445,-5.932]],"v":[[53.187,43.431],[63.934,69.306],[80.601,67.197],[77.299,32.468]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[6.2,0.159],[-1.987,-7.479],[-7.182,-1.372],[0.249,6.563]],"o":[[-6.2,-0.159],[1.987,7.479],[7.182,1.372],[-0.364,-9.571]],"v":[[49.685,35.098],[35.363,54.825],[49.036,69.45],[71.33,46.746]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[6.625,-0.875],[-3.375,-7.625],[-7.875,-0.25],[1.371,6.942]],"o":[[-6.625,0.875],[3.375,7.625],[7.875,0.25],[-2,-10.125]],"v":[[41.5,23.625],[31.375,49.75],[44.875,59.75],[66.5,32.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[6.625,-0.875],[-3.375,-7.625],[-7.875,-0.25],[2.466,6.238]],"o":[[-6.625,0.875],[3.375,7.625],[7.875,0.25],[-2.938,-8.625]],"v":[[49.688,17.813],[40.125,40.438],[54.313,49.25],[73.25,26.188]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[6.625,-0.875],[-3.375,-7.625],[-7.875,-0.25],[5.75,4.125]],"o":[[-6.625,0.875],[3.375,7.625],[7.875,0.25],[-5.75,-4.125]],"v":[[67.25,7.375],[59.375,19.5],[75.625,24.75],[86.5,14.625]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[1.355,0.116],[-0.389,-2.64],[-1.563,-0.551],[0.994,1.663]],"o":[[-1.355,-0.116],[0.389,2.64],[1.563,0.551],[-0.994,-1.663]],"v":[[74.457,2.267],[72.432,5.674],[75.481,8.324],[77.955,3.786]],"c":true}]},{"t":21.6,"s":[{"i":[[0.05,0.004],[-0.014,-0.098],[-0.058,-0.021],[0.037,0.062]],"o":[[-0.05,-0.004],[0.014,0.098],[0.058,0.021],[-0.037,-0.062]],"v":[[73.332,1.004],[73.257,1.131],[73.37,1.229],[73.462,1.06]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 44","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[-0.669,-10.069],[-5.918,4.123],[3.005,3.488],[10.264,-6.647]],"o":[[0.669,10.069],[5.918,-4.123],[-3.005,-3.488],[-10.264,6.647]],"v":[[58.637,33.665],[84.258,37.43],[87.209,19.695],[72.825,14.789]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[1.525,-9.726],[-6.517,2.653],[2.111,3.964],[11.194,-4.122]],"o":[[-1.525,9.726],[6.517,-2.653],[-2.111,-3.964],[-11.194,4.122]],"v":[[66.002,14.321],[89.575,23.402],[96.19,7.159],[83.554,-0.597]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[3.718,-9.382],[-7.115,1.183],[1.217,4.44],[12.123,-1.598]],"o":[[-3.718,9.382],[7.115,-1.183],[-1.217,-4.44],[-12.123,1.598]],"v":[[62.867,-5.024],[84.391,9.374],[94.67,-5.377],[83.784,-15.983]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[5.375,-3.5],[-4.125,-2],[-1,2.75],[6.875,3.625]],"o":[[-5.375,3.5],[4.125,2],[1,-2.75],[-6.875,-3.625]],"v":[[80,-17],[85.875,-1.625],[96.625,-5.5],[94.875,-15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[1.588,-0.657],[-0.988,-0.73],[-0.399,0.675],[1.632,1.293]],"o":[[-1.588,0.657],[0.988,0.73],[0.399,-0.675],[-1.632,-1.293]],"v":[[96.048,-20.046],[96.839,-15.707],[99.861,-16.199],[99.868,-18.787]],"c":true}]},{"t":21.6,"s":[{"i":[[-0.104,0.043],[0.065,0.048],[0.026,-0.044],[-0.107,-0.085]],"o":[[0.104,-0.043],[-0.065,-0.048],[-0.026,0.044],[0.107,0.085]],"v":[[98.106,-21.571],[98.055,-21.855],[97.857,-21.823],[97.857,-21.653]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 43","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[15.766,9.684],[5.376,-13.134],[-2.822,-4.133],[-3.644,4.626]],"o":[[-6.852,-4.209],[-2.053,5.017],[7.323,10.725],[3.644,-4.626]],"v":[[56.587,32.646],[38.877,43.44],[34.867,63.955],[63.46,62.266]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[15.846,8.529],[4.492,-13.051],[-2.97,-3.857],[-3.282,4.694]],"o":[[-6.886,-3.707],[-1.716,4.985],[7.705,10.007],[3.282,-4.694]],"v":[[58.288,25.141],[41.69,36.603],[38.935,56.745],[66.603,53.52]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[18.443,1.497],[-1.152,-14.145],[-4.388,-2.408],[-1.155,5.775]],"o":[[-8.015,-0.651],[0.44,5.403],[11.385,6.247],[1.155,-5.775]],"v":[[55.307,0.503],[44.402,18.145],[50.115,38.253],[74.845,23.803]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[7.893,1.54],[0.598,-6.77],[-5.005,0],[-1.155,5.775]],"o":[[-7.892,-1.54],[-0.477,5.4],[5.005,0],[1.155,-5.775]],"v":[[61.307,-8.747],[51.152,5.645],[61.115,23.253],[72.345,9.552]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[5.125,1],[1,-3.375],[-3.25,0],[-0.75,3.75]],"o":[[-5.125,-1],[-1,3.375],[3.25,0],[0.75,-3.75]],"v":[[71.5,-25.125],[64.5,-20],[71.375,-12.625],[77.125,-17.625]],"c":true}]},{"t":21.6,"s":[{"i":[[0.401,0.078],[0.078,-0.264],[-0.254,0],[-0.059,0.293]],"o":[[-0.401,-0.078],[-0.078,0.264],[0.254,0],[0.059,-0.293]],"v":[[72.001,-23.7],[71.453,-23.299],[71.991,-22.722],[72.441,-23.113]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 42","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[8.624,5.159],[7.546,-7.022],[-7.238,-6.592],[-5.236,8.599]],"o":[[-8.624,-5.159],[-7.546,7.022],[7.238,6.592],[5.236,-8.599]],"v":[[141.626,-7.216],[116.37,-3.203],[118.218,20.158],[140.394,13.995]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[5.564,3.577],[4.869,-4.869],[-4.67,-4.571],[-3.378,5.962]],"o":[[-5.564,-3.577],[-4.869,4.869],[4.67,4.571],[3.378,-5.962]],"v":[[132.487,-5.548],[116.192,-2.766],[117.385,13.429],[131.692,9.157]],"c":true}]},{"t":21.6,"s":[{"i":[[0.338,0.217],[0.296,-0.296],[-0.284,-0.278],[-0.205,0.362]],"o":[[-0.338,-0.217],[-0.296,0.296],[0.284,0.278],[0.205,-0.362]],"v":[[119.662,-3.045],[118.671,-2.875],[118.743,-1.891],[119.613,-2.151]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":21.6,"s":[100,100],"h":1},{"t":22.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 41","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[11.925,-1.331],[-2.462,-6.96],[-5.753,4.043],[2.377,8.172]],"o":[[-11.925,1.331],[2.462,6.96],[5.753,-4.043],[-1.831,-6.293]],"v":[[56.487,13.75],[43.12,35.947],[60.403,41.904],[72.824,23.428]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[11.364,1.945],[-0.421,-7.081],[-6.388,2.202],[0.02,8.177]],"o":[[-11.364,-1.945],[0.421,7.081],[6.388,-2.202],[-0.015,-6.298]],"v":[[65.2,8.298],[46.95,25.234],[61.322,35.334],[77.706,21.582]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[10.804,5.222],[1.621,-7.202],[-7.022,0.36],[-2.338,8.183]],"o":[[-10.804,-5.222],[-1.621,7.202],[7.022,-0.36],[1.801,-6.302]],"v":[[67.912,-16.653],[44.78,-4.979],[56.24,9.265],[76.589,0.237]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[10.804,5.222],[1.621,-7.202],[-7.022,0.36],[-2.338,8.183]],"o":[[-10.804,-5.222],[-1.621,7.202],[7.022,-0.36],[1.801,-6.302]],"v":[[76.912,-32.403],[53.78,-20.729],[65.24,-6.485],[85.589,-15.513]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.5,3.625],[1.125,-5],[-4.875,0.25],[-1.623,5.681]],"o":[[-7.5,-3.625],[-1.125,5],[4.875,-0.25],[1.25,-4.375]],"v":[[81.5,-44.75],[65.875,-36.125],[76,-27.625],[85.875,-34.5]],"c":true}]},{"t":21.6,"s":[{"i":[[0.077,0.037],[0.012,-0.052],[-0.05,0.003],[-0.017,0.059]],"o":[[-0.077,-0.037],[-0.012,0.052],[0.05,-0.003],[0.013,-0.045]],"v":[[78.798,-41.071],[78.637,-40.982],[78.741,-40.894],[78.843,-40.965]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 40","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[7.373,-2.253],[-4.506,-14.747],[-13.518,7.373],[10.074,9.354]],"o":[[-15.751,4.813],[4.506,14.747],[13.518,-7.373],[-5.735,-5.325]],"v":[[-159.766,-91.072],[-176.971,-65.47],[-144.405,-56.048],[-134.574,-86.771]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[4.5,-1.375],[-2.75,-9],[-8.25,4.5],[6.148,5.709]],"o":[[-9.613,2.937],[2.75,9],[8.25,-4.5],[-3.5,-3.25]],"v":[[-162.5,-97.25],[-173,-81.625],[-153.125,-75.875],[-147.125,-94.625]],"c":true}]},{"t":27.6,"s":[{"i":[[0.094,-0.029],[-0.057,-0.188],[-0.172,0.094],[0.129,0.119]],"o":[[-0.201,0.061],[0.057,0.188],[0.172,-0.094],[-0.073,-0.068]],"v":[[-162.95,-97.881],[-163.169,-97.554],[-162.754,-97.434],[-162.629,-97.826]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":19.2,"s":[0,0],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":27.6,"s":[100,100],"h":1},{"t":28.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 39","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[5.5,2.625],[1.375,-4.875],[-4.5,-1.625],[-1.25,3.625]],"o":[[-5.5,-2.625],[-1.375,4.875],[4.5,1.625],[1.25,-3.625]],"v":[[-189.75,-64],[-202.125,-58],[-197.5,-46.75],[-186.875,-52.125]],"c":true}]},{"t":30,"s":[{"i":[[0.071,0.034],[0.018,-0.063],[-0.058,-0.021],[-0.016,0.047]],"o":[[-0.071,-0.034],[-0.018,0.063],[0.058,0.021],[0.016,-0.047]],"v":[[-197.446,-68.356],[-197.607,-68.278],[-197.547,-68.132],[-197.409,-68.201]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":25.2,"s":[0,0],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 38","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[3.375,-5.5],[-6.25,1.75],[-4.375,-4.375],[-1.25,-5.375],[5,1.5],[5.875,5.375]],"o":[[0,0],[-3.375,5.5],[6.25,-1.75],[4.375,4.375],[1.25,5.375],[-5,-1.5],[-5.875,-5.375]],"v":[[-135,-30],[-149,-25],[-147.875,-11.25],[-135.875,-7.25],[-130.125,7.75],[-110.75,-6.625],[-129.5,-14.125]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[1.867,-4.193],[-5.142,0.853],[-4.718,-3.992],[-2.172,-4.521],[4.692,1.694],[6.235,4.951]],"o":[[0,0],[-1.867,4.193],[5.142,-0.853],[4.718,3.992],[2.172,4.521],[-4.692,-1.694],[-6.235,-4.951]],"v":[[-142.804,-30.786],[-154.105,-27.992],[-150.37,-16.62],[-139.028,-12.226],[-130.98,0.599],[-116.829,-9.377],[-134.801,-17.267]],"c":true}]},{"t":20.4,"s":[{"i":[[0,0],[0.266,-3.111],[-4.397,0.344],[-5.67,-3.355],[-3.529,-3.607],[4.86,1.587],[7.382,4.184]],"o":[[0,0],[-0.266,3.111],[4.397,-0.344],[5.67,3.355],[3.529,3.607],[-4.86,-1.587],[-7.382,-4.184]],"v":[[-148.791,-27.395],[-158.141,-25.93],[-150.84,-16.96],[-138.991,-12.895],[-127.258,-2.546],[-117.768,-9.36],[-136.861,-16.515]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 37","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[9.304,-13.656],[-9.385,-27.75],[-14.205,-14.818],[-33.377,0.192],[-5.897,37.281],[-1.418,5.969],[2.459,23.558],[10.379,13.211],[19.909,9.558]],"o":[[-10.744,15.77],[8.352,24.695],[9.514,9.924],[25.72,-0.148],[1.495,-9.454],[4.101,-17.267],[-1.528,-14.633],[-6.267,-7.978],[-26.451,-12.7]],"v":[[-79.84,-97.594],[-69.034,-31.058],[-56.093,27.42],[-29.575,82.558],[12.594,39.912],[14.309,22.493],[16.819,-24.635],[6.106,-62.988],[-18.376,-125.51]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[8.237,-12.09],[-8.309,-24.567],[-12.576,-13.118],[-29.549,0.17],[-5.22,33.005],[-1.255,5.285],[-8.801,26.444],[9.188,11.696],[17.625,8.462]],"o":[[-9.512,13.962],[7.394,21.863],[8.423,8.786],[22.77,-0.131],[1.324,-8.37],[3.63,-15.286],[4.113,-12.359],[-5.548,-7.063],[-23.418,-11.243]],"v":[[-74.772,-88.035],[-60.39,-29.709],[-48.162,22.641],[-30.272,71.455],[9.06,44.2],[11.579,18.279],[27.801,-22.444],[41.816,-96.898],[-21.573,-121.516]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[7.17,-10.524],[-7.232,-21.385],[-10.947,-11.419],[-25.721,0.148],[-4.544,28.729],[-1.092,4.6],[-1.098,18.219],[15.349,11.406],[15.342,7.366]],"o":[[-8.28,12.153],[6.436,19.031],[7.332,7.648],[19.82,-0.114],[1.152,-7.285],[3.16,-13.306],[0.661,-10.97],[-6.275,-4.663],[-20.384,-9.787]],"v":[[-69.704,-78.476],[-51.745,-28.359],[-40.231,17.862],[-30.969,60.352],[1.527,27.488],[2.849,14.064],[4.783,-22.253],[-1.473,-56.308],[-26.77,-75.522]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[5.827,-8.553],[-5.878,-17.38],[-8.897,-9.28],[-20.904,0.12],[-3.693,23.348],[-0.888,3.739],[1.54,14.754],[6.5,8.274],[12.468,5.986]],"o":[[-6.729,9.877],[5.231,15.466],[5.959,6.215],[16.108,-0.093],[0.937,-5.921],[2.568,-10.814],[-0.957,-9.164],[-3.925,-4.996],[-16.566,-7.954]],"v":[[-55.077,-60.447],[-40.481,-19.716],[-31.123,17.847],[-23.596,52.38],[2.813,25.671],[3.888,14.761],[5.46,-14.754],[-1.25,-38.774],[-20.184,-58.046]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[5.827,-8.553],[-0.519,-7.962],[-8.897,-9.28],[-3.749,1.111],[-2.78,3.721],[-0.627,0.607],[-0.058,4.365],[0.612,3.24],[5.58,1.458]],"o":[[-6.729,9.877],[0.311,4.768],[5.959,6.215],[2.638,-0.782],[0.482,-0.645],[2.754,-2.668],[0.122,-9.213],[-1.18,-6.243],[-6.241,-1.63]],"v":[[-40.577,-47.447],[-43.231,-20.216],[-29.373,5.847],[-5.846,12.63],[-6.437,0.421],[-4.748,-1.445],[1.71,-11.004],[-4,-37.274],[-17.434,-54.046]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[4.991,-1.515],[-0.411,-6.303],[-4.692,-3.685],[-2.794,0.828],[-1.231,1.565],[-0.254,0.312],[0.136,1.965],[0.344,7.256],[6.042,1.708]],"o":[[-8.057,1.344],[0.256,3.923],[2.919,2.345],[1.881,-0.557],[0.245,-0.309],[1.115,-1.37],[-0.934,-13.504],[0.219,-4.744],[-5.958,-2.542]],"v":[[-46.238,-65.768],[-54.026,-51.929],[-46.272,-38.436],[-35.399,-36.218],[-32.98,-40.786],[-32.226,-41.714],[-29.941,-46.496],[-20.344,-65.006],[-29.167,-74.333]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[4.712,0.832],[-0.375,-5.75],[-3.29,-1.82],[-2.476,0.734],[-0.714,0.846],[-0.129,0.213],[-0.094,1.168],[-0.487,2.338],[0.694,1.011]],"o":[[-8.5,-1.5],[0.237,3.641],[1.906,1.054],[1.629,-0.483],[0.167,-0.197],[0.569,-0.937],[0.172,-2.15],[0.279,-1.337],[-0.863,-1.258]],"v":[[-48.125,-71.875],[-57.625,-62.5],[-51.905,-53.197],[-45.25,-52.5],[-41.828,-54.521],[-41.385,-55.137],[-40.492,-58.327],[-40.125,-65.25],[-40.411,-68.761]],"c":true}]},{"t":22.8,"s":[{"i":[[0,-0.004],[0,0.028],[0,0.009],[0,-0.004],[0,-0.003],[0,-0.001],[0,-0.005],[0,-0.011],[0,-0.009]],"o":[[0,0.007],[0,-0.018],[0,-0.005],[0,0.002],[0,0.001],[0,0.004],[0,0.009],[0,0.007],[0,0.012]],"v":[[-75,-89.507],[-75,-89.566],[-75,-89.612],[-75,-89.615],[-75,-89.606],[-75,-89.604],[-75,-89.591],[-75,-89.56],[-75,-89.534]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":21.6,"s":[100,100],"h":1},{"t":22.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 36","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[4.625,3],[4,-9.875],[-6.625,1.25],[0,0],[-3.375,2.125],[-0.875,3.5]],"o":[[-4.625,-3],[-4,9.875],[6.625,-1.25],[0,0],[3.375,-2.125],[0.875,-3.5]],"v":[[-91.625,-55.5],[-109.125,-46.5],[-95.875,-28.375],[-90.125,-35.875],[-92.25,-41],[-85.875,-47.375]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.4,"s":[{"i":[[2.591,0.582],[1.929,-5.111],[-3.243,-0.244],[0,0],[-0.187,1.61],[0.482,1.618]],"o":[[-2.602,-0.585],[-1.929,5.111],[3.435,0.259],[0,0],[0.241,-2.07],[-0.53,-1.779]],"v":[[-106.002,-58.795],[-113.837,-53.877],[-107.931,-44.884],[-102.929,-46.954],[-101.241,-50.448],[-101.723,-55.301]],"c":true}]},{"t":22.8,"s":[{"i":[[0.001,0],[0.001,-0.002],[-0.001,0],[0,0],[0,0],[0,0]],"o":[[-0.001,0],[-0.001,0.002],[0.001,0],[0,0],[0,-0.001],[0,-0.001]],"v":[[-111.507,-55.129],[-111.509,-55.128],[-111.508,-55.125],[-111.506,-55.126],[-111.506,-55.127],[-111.506,-55.128]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 35","np":1,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[3.421,15.227],[0,0],[25.27,0.115],[5.339,-17.394],[-4.76,-11.221],[-12.139,-2.788],[-5.852,-5.374],[-7.88,-0.64],[0,0],[-2.032,7.09],[2.662,11.178]],"o":[[-10.626,-47.295],[0,0],[-11.524,-0.052],[-2.046,6.666],[3.645,8.593],[12.139,2.788],[6.012,5.521],[7.379,0.6],[0,0],[1.703,-5.943],[-8.02,-33.682]],"v":[[-5.141,-34.789],[-39.763,-61.331],[-74.245,-46.717],[-106.276,-6.294],[-108.055,22.656],[-89.011,46.883],[-72.025,56.406],[-51.879,76.9],[-28.213,81.509],[-1.703,71.443],[-9.376,32.362]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[8.141,15.289],[0,0],[25.27,0.115],[5.339,-17.394],[-4.76,-11.221],[-12.139,-2.788],[-5.852,-5.374],[-7.88,-0.64],[0,0],[-2.032,7.09],[6.626,9.388]],"o":[[-8.35,-15.682],[0,0],[-11.524,-0.052],[-2.046,6.666],[3.645,8.593],[12.139,2.788],[6.012,5.521],[7.379,0.6],[0,0],[1.703,-5.943],[-6.587,-9.333]],"v":[[-54.641,-9.789],[-52.513,-72.331],[-86.995,-57.717],[-119.026,-17.294],[-120.805,11.656],[-101.761,35.883],[-84.775,45.406],[-57.879,60.9],[-40.713,57.759],[-31.703,43.943],[-40.126,20.612]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[12.92,8.411],[0,0],[25.27,0.115],[5.339,-17.394],[-4.76,-11.221],[-12.139,-2.788],[-5.852,-5.374],[-7.416,1.562],[0,0],[-3.22,2.447],[6.626,9.388]],"o":[[-13.025,-8.607],[0,0],[-11.524,-0.052],[-2.046,6.666],[3.645,8.593],[12.139,2.788],[6.012,5.521],[6.894,-1.435],[0,0],[3.055,-1.873],[-6.587,-9.333]],"v":[[-52.891,-8.664],[-69.763,-56.081],[-90.62,-46.092],[-119.026,-17.294],[-120.805,11.656],[-101.761,35.884],[-83.275,42.781],[-55.754,52.025],[-40.588,49.759],[-31.578,39.318],[-33.626,18.862]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[17.7,1.532],[0,0],[25.27,0.115],[5.339,-17.394],[-4.76,-11.221],[-12.139,-2.788],[-5.852,-5.374],[-6.952,3.764],[0,0],[-4.407,-2.197],[6.626,9.388]],"o":[[-17.7,-1.532],[0,0],[-11.524,-0.052],[-2.046,6.666],[3.645,8.593],[12.139,2.788],[6.012,5.521],[6.409,-3.471],[0,0],[4.407,2.197],[-6.587,-9.333]],"v":[[-51.141,-7.539],[-69.013,-10.831],[-94.245,-34.467],[-119.026,-17.294],[-120.805,11.656],[-101.761,35.884],[-81.775,40.156],[-53.629,43.15],[-40.463,41.759],[-31.453,34.693],[-27.126,17.112]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[17.75,0.75],[0,0],[25.25,-1],[4.566,-17.613],[-5.25,-11],[-12.25,-2.25],[-6.084,-5.11],[-6.779,4.067],[0,0],[-4.5,-2],[-4.5,10.5]],"o":[[-17.75,-0.75],[0,0],[-11.515,0.456],[-1.75,6.75],[4.02,8.424],[12.25,2.25],[6.25,5.25],[6.25,-3.75],[0,0],[4.5,2],[4.5,-10.5]],"v":[[-78.75,-26.75],[-96.75,-29.25],[-123,-51.75],[-147,-33.5],[-147.5,-4.5],[-125,11],[-107.25,22.25],[-79,24],[-76.75,14.5],[-78.5,3],[-63.5,-4.75]],"c":true}]},{"t":16.8,"s":[{"i":[[17.75,0.75],[0,0],[11.25,-2.5],[4,-17.75],[-1.25,-9.25],[-12.25,-2.25],[-1.75,7.75],[2.5,7.5],[0,0],[-4.5,-2],[-4.5,10.5]],"o":[[-17.75,-0.75],[0,0],[-11.25,2.5],[-4,17.75],[1.25,9.25],[12.25,2.25],[1.75,-7.75],[-2.5,-7.5],[0,0],[4.5,2],[4.5,-10.5]],"v":[[-92,-46.5],[-114.75,-34.5],[-126.75,-37.75],[-146,-19.25],[-136.5,8],[-123.25,31.25],[-99.75,6.25],[-107.75,-7.5],[-102.5,-20],[-92,-6.5],[-79.5,-17.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":18,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 34","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[38.5,13.75],[11.5,-9.25],[-3.26,-4.968],[0,0],[-11.25,-1.25],[0,0],[-5,17.855]],"o":[[-9.679,-3.457],[-11.5,9.25],[5.25,8],[0,0],[12.485,1.387],[0,0],[1.75,-6.25]],"v":[[1,248.25],[-49,256.75],[-41,283.75],[-34.75,301.5],[-21.75,313.5],[-0.25,302.75],[18,294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[9.75,3.25],[11.5,-9.25],[-5.5,-2.25],[0,0],[-16.737,-3.809],[0,0],[-1.25,18.5]],"o":[[-9.75,-3.25],[-11.5,9.25],[5.5,2.25],[0,0],[36.25,8.25],[0,0],[1.25,-18.5]],"v":[[-7.25,216],[-65.25,217.5],[-76.5,257.75],[-47.5,263.75],[-29.75,288],[8.75,265.75],[18.5,241.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[9.75,3.25],[11.5,-9.25],[-5.5,-2.25],[0,0],[-24.75,-6.5],[0,0],[-1.25,18.5]],"o":[[-9.75,-3.25],[-11.5,9.25],[5.5,2.25],[0,0],[24.75,6.5],[0,0],[1.25,-18.5]],"v":[[2,218.75],[-49.25,230],[-50.5,254.25],[-37.25,255],[-18,287.75],[3.5,267],[21.25,249.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[4.33,1.443],[5.107,-4.108],[-0.927,-2.471],[0,0],[-10.95,-3.042],[0,0],[0.333,9.326]],"o":[[-4.33,-1.443],[-5.107,4.108],[0.666,1.776],[0,0],[7.994,2.221],[0,0],[-0.294,-8.229]],"v":[[-19.382,232.545],[-42.143,237.541],[-45.585,249.31],[-44.363,255.416],[-33.483,264.742],[-15.607,258.525],[-10.833,246.312]],"c":true}]},{"t":16.8,"s":[{"i":[[0.234,0.078],[0.276,-0.222],[-0.05,-0.133],[0,0],[-0.591,-0.164],[0,0],[0.018,0.503]],"o":[[-0.234,-0.078],[-0.276,0.222],[0.036,0.096],[0,0],[0.432,0.12],[0,0],[-0.016,-0.444]],"v":[[-35.113,242.392],[-36.341,242.662],[-36.527,243.297],[-36.461,243.627],[-35.874,244.13],[-34.909,243.795],[-34.651,243.135]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 33","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[2.648,9.28],[17.367,13.177],[18.563,-12.842],[-6.6,-18.99],[-8.941,-2.851],[0,0],[-8.12,3.649]],"o":[[-2.474,-8.671],[-18.723,-14.206],[-9.63,6.662],[6.6,18.99],[18.904,6.028],[0,0],[8.12,-3.649]],"v":[[76.724,247.421],[62.973,212.706],[-2.664,208.9],[-10.484,253.976],[32.096,297.722],[57.439,282.473],[73.351,284.833]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[6.918,6.728],[8.458,2.172],[18.164,-13.4],[-7.931,-12.338],[-9.202,-1.838],[0,0],[-8.12,3.649]],"o":[[-6.918,-6.728],[-8.458,-2.172],[-9.734,7.181],[7.931,12.338],[11.404,2.278],[0,0],[8.12,-3.649]],"v":[[83.474,241.671],[67.723,219.456],[27.086,212.65],[17.016,249.476],[40.096,269.972],[68.439,268.223],[77.601,262.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[9.25,2.75],[8.5,-2],[11.5,-3.75],[-12.75,-7.25],[-6.25,7],[0,0],[-5.5,7]],"o":[[-9.25,-2.75],[-8.5,2],[-11.5,3.75],[12.75,7.25],[6.25,-7],[0,0],[5.5,-7]],"v":[[68,230],[48,236],[10.5,241.75],[12.75,267.75],[49.75,269.25],[57.5,254.75],[72.5,251.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[2.183,0.649],[2.006,-0.472],[2.189,-1.832],[-3.008,-1.711],[-2.056,0.822],[0,0],[0,1.829]],"o":[[-2.183,-0.649],[-2.006,0.472],[-2.89,2.419],[3.008,1.711],[2.949,-1.18],[0,0],[0,-2.101]],"v":[[47.048,249.958],[39.969,249.722],[34.07,252.435],[34.542,263.289],[43.685,263.938],[48.287,260.281],[49.82,255.739]],"c":true}]},{"t":15.6,"s":[{"i":[[0.104,0.031],[0.096,-0.022],[0.104,-0.087],[-0.143,-0.081],[-0.098,0.039],[0,0],[0,0.087]],"o":[[-0.104,-0.031],[-0.096,0.022],[-0.138,0.115],[0.143,0.081],[0.14,-0.056],[0,0],[0,-0.1]],"v":[[40.812,256.784],[40.475,256.772],[40.194,256.902],[40.216,257.419],[40.652,257.449],[40.871,257.275],[40.944,257.059]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":15.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 32","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[13.123,8.883],[0,0],[7.313,-18.285],[0,0],[0.113,-15.007],[-0.585,0.694],[-22.554,-6.704],[-1.21,4.448]],"o":[[-13.123,-8.883],[0,0],[-8.917,22.298],[0,0],[-0.107,14.195],[1.043,-0.867],[64.07,19.044],[1.21,-4.448]],"v":[[-67.443,14.643],[-100.439,21.728],[-144.333,11.952],[-149.934,35.712],[-161.393,56.805],[-149.165,77.306],[-114.946,96.454],[-54.391,51.843]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[13.123,8.883],[0,0],[7.313,-18.285],[0,0],[-7.073,-13.236],[-0.585,0.694],[-22.554,-6.704],[-1.21,4.448]],"o":[[-13.123,-8.883],[0,0],[-8.917,22.298],[0,0],[2.643,4.945],[1.043,-0.867],[64.07,19.044],[1.21,-4.448]],"v":[[-97.943,18.893],[-130.939,25.978],[-183.583,25.452],[-179.684,51.462],[-179.893,69.055],[-170.415,75.056],[-148.196,100.704],[-84.891,56.093]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[13.123,8.883],[0,0],[7.863,-18.055],[0,0],[-1.409,-6.737],[-3.188,-4.884],[-13.504,-3.506],[-1.21,4.448]],"o":[[-13.123,-8.883],[0,0],[-15.917,36.548],[0,0],[0.91,4.352],[4.756,7.287],[64.696,16.796],[1.21,-4.448]],"v":[[-113.443,17.143],[-146.439,24.228],[-196.083,13.452],[-186.184,58.962],[-185.3,70.727],[-179.484,85.029],[-153.196,102.704],[-100.391,54.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[13.123,8.883],[0,0],[7.863,-18.055],[0,0],[-1.202,-4.85],[-3.069,-3.63],[-13.581,-3.195],[-1.21,4.448]],"o":[[-13.123,-8.883],[0,0],[-15.917,36.548],[0,0],[0.776,3.133],[4.579,5.416],[42.696,10.046],[1.21,-4.448]],"v":[[-129.693,33.643],[-152.689,38.478],[-198.333,30.202],[-192.434,73.212],[-191.934,81.598],[-186.518,92.042],[-160.446,105.954],[-120.891,62.343]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[15.75,1.75],[0,0],[2.75,-19.5],[0,0],[-3.394,-3.251],[-3.82,-1.416],[-9.782,3.857],[1,4.5]],"o":[[-15.75,-1.75],[0,0],[-2.75,19.5],[0,0],[2.193,2.1],[5.7,2.112],[26,-10.25],[-1,-4.5]],"v":[[-168.75,27],[-189.75,47.75],[-211,59.75],[-189.5,81.5],[-184.563,87.862],[-175.585,93.536],[-152.5,92.25],[-140.75,49.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[6.52,0.724],[0,0],[1.138,-8.072],[0,0],[-1.724,-0.708],[-1.784,-0.18],[-4.049,1.596],[0.414,1.863]],"o":[[-6.52,-0.724],[0,0],[-1.138,8.072],[0,0],[1.113,0.458],[2.662,0.269],[10.763,-4.243],[-0.414,-1.863]],"v":[[-173.556,33.917],[-184.215,35.365],[-191.046,47.474],[-183.905,59.996],[-181.284,61.476],[-176.928,62.545],[-166.829,60.927],[-161.965,43.231]],"c":true}]},{"t":21.6,"s":[{"i":[[0.226,0.025],[0,0],[0.039,-0.279],[0,0],[-0.06,-0.025],[-0.062,-0.006],[-0.14,0.055],[0.014,0.064]],"o":[[-0.226,-0.025],[0,0],[-0.039,0.279],[0,0],[0.039,0.016],[0.092,0.009],[0.372,-0.147],[-0.014,-0.064]],"v":[[-175.105,38.441],[-175.474,38.492],[-175.711,38.911],[-175.463,39.344],[-175.373,39.395],[-175.222,39.432],[-174.872,39.376],[-174.704,38.764]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":20.4,"s":[100,100],"h":1},{"t":21.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 31","np":1,"cix":2,"bm":0,"ix":18,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-122.685,-199.225],[-124.003,-155.566],[-98.107,-164.75],[-95.191,-188.676]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[18.679,-6.954],[-16.816,-9.385],[0,0],[5.895,7.379]],"o":[[-23.486,8.744],[21.097,11.774],[0,0],[-11.283,-14.123]],"v":[[-104.889,-214.842],[-106.628,-163.774],[-72.489,-174.516],[-68.645,-202.502]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-110.435,-216.475],[-111.753,-172.816],[-85.857,-182],[-82.941,-205.926]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-118.31,-221.788],[-119.628,-178.129],[-93.732,-187.313],[-90.816,-211.238]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-116.935,-223.225],[-118.253,-179.566],[-92.357,-188.75],[-89.441,-212.676]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-116.435,-229.975],[-117.753,-186.316],[-91.857,-195.5],[-88.941,-219.426]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[14.169,-5.945],[-12.756,-8.024],[0,0],[4.472,6.309]],"o":[[-17.815,7.475],[16.003,10.066],[0,0],[-8.559,-12.074]],"v":[[-135.435,-242.475],[-136.753,-198.816],[-110.857,-208],[-107.941,-231.926]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.125,-1.125],[-10.25,0.75],[0,0],[5.25,-0.5]],"o":[[-7.125,1.125],[10.25,-0.75],[0,0],[-5.25,0.5]],"v":[[-132.25,-229.625],[-126,-210.875],[-116,-206.625],[-113.5,-229.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[3.216,-1.943],[-5.495,0.402],[0,0],[3.082,0.737]],"o":[[-3.31,2],[5.495,-0.402],[0,0],[-2.75,-0.658]],"v":[[-129.925,-226.432],[-126.709,-215.777],[-120.209,-219.53],[-121.147,-227.638]],"c":true}]},{"t":25.2,"s":[{"i":[[-0.124,0.075],[0.211,-0.015],[0,0],[-0.119,-0.028]],"o":[[0.127,-0.077],[-0.211,0.015],[0,0],[0.106,0.025]],"v":[[-125.485,-221.7],[-125.609,-222.11],[-125.859,-221.965],[-125.823,-221.653]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 30","np":1,"cix":2,"bm":0,"ix":19,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-62.179,-154.744],[-85.571,-120.577],[-45.885,-115.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-55.429,-191.994],[-78.821,-157.827],[-39.135,-152.833]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-51.179,-198.494],[-74.571,-164.327],[-34.885,-159.333]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-51.179,-210.994],[-74.571,-176.827],[-34.885,-171.833]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-50.679,-225.744],[-74.071,-191.577],[-34.385,-186.583]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[18.66,3.417],[-13.929,-20.237],[-7.885,11.827]],"o":[[-18.66,-3.417],[13.929,20.237],[7.885,-11.827]],"v":[[-58.679,-223.994],[-82.071,-189.827],[-42.385,-184.833]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[8.875,1.625],[-6.625,-9.625],[-3.75,5.625]],"o":[[-8.875,-1.625],[6.625,9.625],[3.75,-5.625]],"v":[[-85.625,-241.875],[-96.75,-225.625],[-77.875,-223.25]],"c":true}]},{"t":24,"s":[{"i":[[0.081,0.015],[-0.06,-0.087],[-0.034,0.051]],"o":[[-0.081,-0.015],[0.06,0.087],[0.034,-0.051]],"v":[[-88.722,-229.86],[-88.823,-229.712],[-88.651,-229.691]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 29","np":1,"cix":2,"bm":0,"ix":20,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-12.648,10.807],[36.449,-20.382],[-19.157,2.533]],"o":[[12.648,-10.807],[-36.449,20.382],[19.157,-2.533]],"v":[[-76.983,-142.918],[-116.136,-182.67],[-111.261,-133.171]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[-12.648,10.807],[36.449,-20.382],[-19.157,2.533]],"o":[[12.648,-10.807],[-36.449,20.382],[19.157,-2.533]],"v":[[-65.483,-172.168],[-104.636,-211.92],[-99.761,-162.421]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[-12.648,10.807],[36.449,-20.382],[-19.157,2.533]],"o":[[12.648,-10.807],[-36.449,20.382],[19.157,-2.533]],"v":[[-62.733,-184.168],[-101.886,-223.92],[-97.011,-174.421]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[5.067,13.73],[-5.72,-36.288],[-3.744,16.581]],"o":[[-5.067,-13.73],[5.72,36.288],[3.744,-16.581]],"v":[[-64.817,-219.881],[-109.547,-199.676],[-67.213,-188.624]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[16.637,0],[-40.952,-8.181],[16.21,10.519]],"o":[[-16.637,0],[40.952,8.181],[-16.21,-10.519]],"v":[[-94.422,-231.088],[-90.478,-175.431],[-62.03,-216.231]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[16.637,0],[-40.952,-8.181],[16.21,10.519]],"o":[[-16.637,0],[40.952,8.181],[-16.21,-10.519]],"v":[[-94.922,-231.838],[-90.978,-176.181],[-61.53,-221.731]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[16.637,0],[-40.952,-7.823],[16.21,10.059]],"o":[[-16.637,0],[40.952,7.823],[-16.21,-10.059]],"v":[[-93.047,-238.044],[-89.103,-184.823],[-59.655,-228.379]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[16.637,0],[-40.952,-7.465],[16.21,9.598]],"o":[[-16.637,0],[40.952,7.465],[-16.21,-9.598]],"v":[[-94.672,-234.749],[-90.728,-183.965],[-61.28,-225.527]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[9.75,0],[-24,-4.375],[9.5,5.625]],"o":[[-9.75,0],[24,4.375],[-9.5,-5.625]],"v":[[-113.875,-229.875],[-106.875,-202.75],[-91.375,-226.375]],"c":true}]},{"t":24,"s":[{"i":[[-0.109,0],[0.268,0.049],[-0.106,-0.063]],"o":[[0.109,0],[-0.268,-0.049],[0.106,0.063]],"v":[[-106.291,-215.024],[-106.369,-215.326],[-106.542,-215.063]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":22.8,"s":[100,100],"h":1},{"t":24,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 28","np":1,"cix":2,"bm":0,"ix":21,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[11.863,-15.503],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-6.912,12.431],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-5.175,6.762],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[9.255,-16.645],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[24.637,106.503],[3.704,154.848],[15.412,182.422],[15.801,208.033],[77.828,228.683],[106.501,193.96],[115.745,181.145],[96.545,141.407],[107.413,110.213],[79.411,67.505],[52.427,79.066]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[10.877,-12.41],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-7.941,11.568],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-5.861,5.855],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[9.698,-14.729],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[35.512,103.628],[16.954,155.348],[29.537,180.422],[29.051,204.158],[85.453,226.058],[112.751,194.46],[124.87,182.645],[110.545,141.282],[120.413,113.463],[93.211,38.155],[46.027,65.916]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[10.384,-10.863],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-8.456,11.137],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-6.204,5.401],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[9.92,-13.771],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[40.95,102.19],[23.579,155.598],[36.6,179.422],[35.676,202.221],[89.265,224.746],[115.876,194.71],[129.433,183.395],[117.545,141.219],[126.913,115.088],[95.944,45.98],[45.91,58.841]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[9.398,-7.771],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-9.485,10.274],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-6.89,4.493],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[10.364,-11.855],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[51.825,99.315],[36.829,156.098],[50.725,177.422],[48.926,198.346],[96.89,222.121],[122.126,195.21],[138.558,184.895],[131.545,141.094],[139.913,118.338],[101.411,61.63],[72.677,83.691]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[7.919,-3.131],[-6.513,-32.85],[0,0],[-2.942,-11.143],[-22.402,3.752],[0,0],[-11.029,8.981],[0,0],[-1.742,13.942],[16.889,4.209],[0,0]],"o":[[-7.919,3.131],[2.493,12.572],[0,0],[2.788,10.563],[22.402,-3.752],[0,0],[11.029,-8.981],[0,0],[5.087,-40.713],[-16.889,-4.209],[0,0]],"v":[[68.137,95.003],[56.704,156.848],[71.912,174.422],[68.801,192.533],[108.328,218.183],[131.501,195.96],[152.245,187.145],[152.545,140.907],[159.413,123.213],[115.411,74.505],[88.427,88.066]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.355,1.147],[6.655,-23.078],[0,0],[1.681,-8.115],[-18.978,-6.434],[0,0],[-11.901,1.289],[0,0],[-7.126,7.517],[11.783,9.248],[0,0]],"o":[[-7.355,-1.147],[-2.547,8.832],[0,0],[-1.593,7.692],[18.978,6.434],[0,0],[11.901,-1.289],[0,0],[14.752,-15.56],[-11.783,-9.248],[0,0]],"v":[[119.713,82.134],[80.095,108.078],[85.763,125.018],[76.819,135.115],[94.153,163.147],[118.145,156.033],[136.65,158.165],[161.247,135.674],[172.998,127.31],[159.499,82.061],[133.198,82.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[4.25,2.75],[5,-3.75],[0,0],[5.25,-1],[-10,-9.25],[0,0],[-7.75,-2.5],[0,0],[-6.25,3.25],[4.75,9],[0,0]],"o":[[-4.25,-2.75],[-5,3.75],[0,0],[-5.25,1],[10,9.25],[0,0],[7.75,2.5],[0,0],[6.25,-3.25],[-4.75,-9],[0,0]],"v":[[134.5,92],[118.5,93],[108.25,112],[101.25,110.25],[95,128.5],[115.75,128.75],[125.25,136.25],[137.25,132.5],[149.25,132.75],[154.75,106.75],[139.25,103]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[1.44,0.162],[2.682,-0.648],[0,0],[0.504,-1.476],[-2.052,-3.132],[0,0],[-2.178,-0.054],[0,0],[-1.8,0.936],[0.942,2.776],[0,0]],"o":[[-1.449,-0.163],[-1.75,0.423],[0,0],[-0.497,1.457],[1.817,2.774],[0,0],[2.345,0.058],[0,0],[1.8,-0.936],[-1.368,-4.032],[0,0]],"v":[[138.44,90.233],[132.59,90.287],[128.359,91.764],[125.911,94.428],[126.667,100.98],[131.366,104.527],[135.308,105.067],[139.286,105.067],[143.409,103.969],[145.713,96.588],[141.825,91.53]],"c":true}]},{"t":26.4,"s":[{"i":[[0.017,0.002],[0.032,-0.008],[0,0],[0.006,-0.018],[-0.024,-0.037],[0,0],[-0.026,-0.001],[0,0],[-0.021,0.011],[0.011,0.033],[0,0]],"o":[[-0.017,-0.002],[-0.021,0.005],[0,0],[-0.006,0.017],[0.022,0.033],[0,0],[0.028,0.001],[0,0],[0.021,-0.011],[-0.016,-0.048],[0,0]],"v":[[141.152,86.653],[141.083,86.654],[141.033,86.672],[141.004,86.703],[141.013,86.781],[141.068,86.823],[141.115,86.829],[141.163,86.829],[141.211,86.816],[141.239,86.729],[141.193,86.669]],"c":true}]}],"ix":2},"nm":"Path 18","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":25.2,"s":[100,100],"h":1},{"t":26.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 27","np":1,"cix":2,"bm":0,"ix":22,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[19.274,-13.467],[9.846,0.791],[0,0],[7.161,-18.803],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-10.549,1.539],[1.35,12.822],[6.125,29.594],[0,0],[5.094,15.237]],"o":[[-7.275,5.083],[-17.592,-1.413],[0,0],[-8.061,21.166],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[13.624,-1.987],[-0.305,-2.901],[-2.75,-13.288],[0,0],[-10.806,-32.324]],"v":[[123.226,80.967],[100.592,81.913],[62.073,83.924],[48.561,97.334],[42.215,144.984],[68.526,179.743],[101.197,189.381],[121.015,176.709],[146.876,185.237],[177.055,158.651],[191.875,121.656],[185.268,109.125],[181.89,91.163]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[21.259,17.3],[6.544,-7.398],[0,0],[0.014,-20.121],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-8.43,6.524],[-1.852,5.072],[4.875,16.844],[0,0],[5.094,15.237]],"o":[[-6.883,-5.602],[-6.544,7.398],[0,0],[-0.014,20.121],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[13.874,-10.737],[1.852,-5.072],[-3.773,-13.035],[0,0],[-10.806,-32.324]],"v":[[115.976,62.467],[96.092,65.413],[91.823,76.174],[65.561,105.334],[75.215,131.484],[81.276,180.743],[129.697,185.381],[145.515,179.709],[166.126,175.987],[184.805,149.901],[191.375,117.906],[182.268,102.875],[181.14,85.163]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[21.259,17.3],[6.544,-7.398],[0,0],[0.014,-20.12],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-8.43,6.524],[-1.852,5.072],[4.875,16.844],[0,0],[5.094,15.237]],"o":[[-6.883,-5.602],[-6.544,7.398],[0,0],[-0.014,20.121],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[13.874,-10.737],[1.852,-5.072],[-3.773,-13.035],[0,0],[-10.806,-32.324]],"v":[[133.976,54.967],[114.092,57.913],[109.823,68.674],[83.561,97.834],[93.215,123.984],[99.276,173.243],[147.697,177.881],[163.515,172.209],[184.126,168.487],[202.805,142.401],[209.375,110.406],[200.268,95.375],[199.14,77.663]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[3.465,-0.494],[6.544,-7.398],[0,0],[0.014,-20.12],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-9.876,4.013],[-1.852,5.072],[4.875,16.844],[0,0],[5.555,15.075]],"o":[[-8.786,1.253],[-6.544,7.398],[0,0],[-0.014,20.12],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[7.7,-3.129],[1.852,-5.072],[-3.773,-13.035],[0,0],[-12.556,-34.074]],"v":[[153.226,56.467],[132.342,58.163],[122.073,68.924],[95.811,98.084],[105.465,124.234],[120.276,152.743],[166.947,182.381],[192.765,161.959],[206.876,159.487],[216.055,144.151],[223.875,111.406],[212.268,97.875],[209.89,73.413]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[3.465,-0.494],[6.544,-7.398],[0,0],[0.014,-20.12],[0,0],[-13.813,-7.319],[-18.818,-2.962],[0,0],[-9.876,4.013],[-1.852,5.072],[4.875,16.844],[0,0],[5.555,15.075]],"o":[[-8.786,1.253],[-6.544,7.398],[0,0],[-0.014,20.12],[0,0],[13.813,7.319],[15.053,2.369],[0,0],[7.7,-3.129],[1.852,-5.072],[-3.773,-13.035],[0,0],[-12.556,-34.074]],"v":[[164.976,54.467],[139.342,64.413],[129.073,75.174],[102.811,104.334],[112.465,130.484],[127.276,158.993],[168.447,182.631],[190.515,177.709],[209.626,169.487],[223.055,150.401],[232.875,120.406],[219.268,104.125],[221.14,81.663]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[3.487,0.301],[8.047,-5.728],[0,0],[4.56,-19.597],[0,0],[-11.802,-10.251],[-19.032,-0.823],[0,0],[-12.07,3.919],[-2.95,4.522],[0.213,10.771],[0,0],[2.005,15.94]],"o":[[-8.842,-0.764],[-8.047,5.728],[0,0],[-4.56,19.597],[0,0],[11.802,10.251],[13.948,0.603],[0,0],[7.905,-2.567],[2.95,-4.522],[-0.268,-13.567],[0,0],[-4.532,-36.03]],"v":[[190.353,51.881],[155.416,54.756],[142.981,62.919],[110.81,85.391],[127.156,116.283],[133.593,141.91],[170.176,174.147],[189.647,163.558],[206.819,166.331],[221.217,149.307],[230.295,133.71],[216.571,111.775],[228.282,86.03]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[3.25,0.25],[7.5,-4.75],[0,0],[4.25,-16.25],[0,0],[-11,-8.5],[-17.739,-0.682],[0,0],[-11.25,3.25],[-2.75,3.75],[0.198,8.932],[0,0],[6.419,12.036]],"o":[[-8.241,-0.634],[-7.5,4.75],[0,0],[-4.25,16.25],[0,0],[11,8.5],[13,0.5],[0,0],[7.368,-2.128],[2.75,-3.75],[-0.25,-11.25],[0,0],[-12,-22.5]],"v":[[203.5,38],[173.5,42.25],[157.25,52.75],[137.75,73.25],[142.5,97],[148.5,118.25],[180.5,141.25],[197.25,134.75],[216.75,138.5],[232.5,126.25],[237,110],[230.5,95.75],[240.25,63]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[8.25,-0.5],[7.5,-4.75],[0,0],[4.25,-16.25],[0,0],[-11,-8.5],[-17.75,-0.25],[0,0],[-4.75,12],[-2.75,3.75],[7.75,12.25],[0,0],[12.25,6]],"o":[[-8.25,0.5],[-7.5,4.75],[0,0],[-4.25,16.25],[0,0],[11,8.5],[17.75,0.25],[0,0],[4.75,-12],[2.75,-3.75],[-7.75,-12.25],[0,0],[-12.25,-6]],"v":[[191.25,23.75],[171,31],[161.75,40.25],[142.25,57.75],[147,81.5],[153,102.75],[189.25,122],[207.5,116.75],[223.75,109.25],[239.75,91.5],[242,62.25],[227.75,45.25],[218.5,26.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[11.284,2.252],[9.757,-10.27],[0,0],[3.09,-11.815],[0,0],[-7.998,-6.18],[-12.905,-0.182],[0,0],[-6.761,6.507],[-1.999,2.727],[5.635,8.907],[0,0],[8.907,4.362]],"o":[[-5.893,-1.176],[-4.446,4.679],[0,0],[-3.09,11.815],[0,0],[7.998,6.18],[12.905,0.182],[0,0],[6.404,-6.163],[1.999,-2.727],[-5.635,-8.907],[0,0],[-8.907,-4.362]],"v":[[207.966,12.248],[180.493,22.52],[175.268,39.745],[162.59,53.719],[162.544,69.487],[171.156,84.687],[198.512,93.683],[214.031,89.616],[235.096,82.163],[245.979,69.257],[243.115,49.49],[236.004,42.88],[230.779,23.498]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[6.742,-0.003],[4.063,-6.211],[0,0],[2.051,-7.844],[0,0],[-5.309,-4.103],[-5.899,-0.079],[0,0],[-5.847,2.148],[-1.286,3.761],[0.718,6.365],[0,0],[1.93,2.014]],"o":[[-3.989,0.002],[-4.047,6.187],[0,0],[-2.051,7.844],[0,0],[5.309,4.103],[6.101,0.082],[0,0],[5.939,-2.182],[0.726,-2.124],[-1.634,-14.492],[0,0],[-3.343,-3.489]],"v":[[210.05,5.768],[197.312,13.086],[194.218,22.147],[183.426,31.798],[184.021,43.516],[190.988,53.482],[204.899,58.829],[214.076,55.004],[227.311,54.807],[237.286,46.489],[237.884,32.992],[223.789,16.103],[222.57,10.486]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[2.653,-0.001],[1.998,-2.131],[0,0],[0.807,-3.087],[0,0],[-2.09,-1.615],[-2.286,-0.408],[0,0],[-1.943,1.404],[-0.506,1.48],[0.283,2.505],[0,0],[0.858,0.448]],"o":[[-1.57,0.001],[-2.091,2.229],[0,0],[-0.807,3.087],[0,0],[2.09,1.615],[2.303,0.412],[0,0],[2.018,-1.459],[0.286,-0.836],[-0.643,-5.703],[0,0],[-1.685,-0.881]],"v":[[223.763,11.226],[218.159,13.664],[215.318,16.935],[213.284,21.471],[213.518,26.083],[216.261,30.005],[221.44,32.503],[226.282,32.67],[231.294,31.018],[234.482,27.253],[234.717,21.941],[230.99,14.408],[228.985,12.886]],"c":true}]},{"t":31.2,"s":[{"i":[[0.095,0],[0.071,-0.076],[0,0],[0.029,-0.11],[0,0],[-0.075,-0.058],[-0.082,-0.015],[0,0],[-0.069,0.05],[-0.018,0.053],[0.01,0.09],[0,0],[0.031,0.016]],"o":[[-0.056,0],[-0.075,0.08],[0,0],[-0.029,0.11],[0,0],[0.075,0.058],[0.082,0.015],[0,0],[0.072,-0.052],[0.01,-0.03],[-0.023,-0.204],[0,0],[-0.06,-0.031]],"v":[[230.473,15.1],[230.273,15.187],[230.172,15.304],[230.099,15.466],[230.107,15.631],[230.205,15.771],[230.39,15.86],[230.563,15.866],[230.743,15.807],[230.856,15.673],[230.865,15.483],[230.732,15.214],[230.66,15.159]],"c":true}]}],"ix":2},"nm":"Path 17","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":31.2,"s":[100,100],"h":1},{"t":32.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 26","np":1,"cix":2,"bm":0,"ix":23,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[9.706,-0.302],[7.572,-4.027],[0,0],[2.099,-10.781],[-0.386,-0.577],[-4.912,-8.765],[-20.767,0.646],[-8.719,7.396],[1.859,9.72],[0.568,0.059],[0.875,4.606]],"o":[[-14.792,0.46],[-9.341,4.967],[0,0],[-1.534,7.882],[0.622,1.224],[11.155,19.904],[20.767,-0.646],[2.841,-2.41],[-2.31,-12.078],[-0.051,-1.09],[-2.51,-13.21]],"v":[[108.188,-1.699],[91.449,3.113],[81.558,19.657],[71.169,29.068],[74.327,44.636],[63.459,76.458],[124.855,85.146],[153.966,65.277],[161.891,40.53],[148.57,23.845],[146.286,11.195]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[9.202,-3.102],[6.08,-6.049],[0,0],[-1.116,-10.927],[-0.537,-0.44],[-7.241,-6.965],[-19.689,6.637],[-6.201,9.606],[3.815,6.754],[0.561,-0.109],[2.173,4.155]],"o":[[-14.024,4.728],[-7.5,7.461],[0,0],[0.816,7.988],[0.95,0.991],[16.445,15.817],[19.689,-6.637],[2.021,-3.13],[-2.859,-5.06],[-0.365,-1.028],[-6.231,-11.916]],"v":[[130.092,-6.15],[104.582,7.909],[99.911,26.609],[92.696,38.627],[100.23,52.612],[106.066,67.115],[160.33,76.739],[184.325,49.497],[179.867,19.505],[165.26,11.196],[162.519,-1.192]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[12.111,-3.018],[8.419,-7.118],[0,0],[-0.294,-14.115],[-0.642,-0.62],[-8.553,-9.676],[-25.914,6.457],[-8.943,11.662],[4.186,9.049],[0.73,-0.081],[2.352,5.549]],"o":[[-18.459,4.599],[-10.384,8.78],[0,0],[0.215,10.319],[1.114,1.369],[19.425,21.974],[25.914,-6.457],[2.914,-3.8],[-3.136,-6.78],[-0.36,-1.355],[-6.744,-15.914]],"v":[[133.818,-14.823],[99.674,0.537],[91.745,24.01],[81.251,38.657],[89.45,57.357],[95.42,76.545],[162.677,90.222],[192.858,55.927],[194.92,23.22],[177.071,11.057],[174.847,-5.099]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[12.482,0],[9.89,-4.871],[0,0],[3.128,-13.767],[-0.473,-0.757],[-5.96,-11.457],[-26.707,0],[-11.498,9.154],[1.874,9.793],[0.728,0.098],[0.94,5.953]],"o":[[-19.023,0],[-12.199,6.009],[0,0],[-2.287,10.065],[0.75,1.598],[13.536,26.018],[26.707,0],[3.746,-2.983],[-1.404,-7.337],[-0.022,-1.402],[-2.697,-17.072]],"v":[[175.262,-16.25],[122.892,-13.469],[114.313,5.75],[101.622,20.517],[105.723,39.007],[106.21,60.707],[169.799,85.75],[205.254,58.983],[215.651,33.019],[201.272,16.902],[205.447,2.322]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5.369,0],[2.468,-4.296],[0,0],[1.532,-1.233],[1.154,-2.896],[-1.907,-3.649],[-11,0],[-1.75,6],[-0.312,3.058],[0.345,3.783],[1.572,2.977]],"o":[[-11.706,0],[-1.222,2.126],[0,0],[-1.803,1.451],[-1.06,2.659],[5.75,11],[11,0],[0.393,-1.347],[0.328,-3.214],[-0.34,-3.73],[-2.073,-3.925]],"v":[[187.25,-8],[167.41,2.785],[165.75,6.5],[162.993,8.393],[157.808,14.984],[158.5,24.5],[185,35.5],[199.5,26.75],[200.686,19.85],[200.809,9.016],[198.084,-1.368]],"c":true}]},{"t":25.2,"s":[{"i":[[0.199,0],[0.146,-0.096],[0,0],[0.059,-0.089],[0.046,-0.161],[-0.071,-0.135],[-0.407,0],[-0.108,0.205],[-0.015,0.116],[0.023,0.129],[0.07,0.097]],"o":[[-0.434,0],[-0.072,0.048],[0,0],[-0.07,0.105],[-0.042,0.147],[0.213,0.407],[0.407,0],[0.04,-0.075],[0.016,-0.122],[-0.022,-0.127],[-0.093,-0.128]],"v":[[184.407,4.75],[183.535,4.991],[183.426,5.074],[183.32,5.219],[183.118,5.636],[183.139,6.074],[184.139,6.5],[184.898,5.991],[184.982,5.696],[184.975,5.31],[184.839,4.963]],"c":true}]}],"ix":2},"nm":"Path 16","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 25","np":1,"cix":2,"bm":0,"ix":24,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0,0],[5.225,-8.349],[0.531,-0.98],[-2.911,-9.355],[0,0],[-8.23,0.379],[-0.345,-0.074],[-3.874,3.639],[0,0],[-3.181,9.249],[0.186,-0.043],[14.398,3.801]],"o":[[0,0],[-4.735,7.566],[-0.165,0.427],[2.767,8.892],[0,0],[7.723,-0.356],[0.228,0.036],[2.531,-2.378],[0,0],[0.6,-1.745],[-0.163,-0.51],[-16.568,-4.374]],"v":[[64.655,239.313],[49.784,248.609],[49.165,258.388],[52.808,274.484],[62.729,287.059],[75.014,290.121],[87.259,286.141],[95.495,279.047],[99.829,270.892],[100.4,261.245],[103.73,256.427],[92.568,240.874]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0,0],[8.735,-13.554],[0.887,-1.59],[-4.866,-15.185],[0,0],[-13.758,0.616],[-0.577,-0.12],[-6.477,5.907],[0,0],[2.675,15.664],[0.31,-0.07],[22.853,9.586]],"o":[[0,0],[-7.915,12.281],[-0.276,0.693],[4.626,14.435],[0,0],[12.91,-0.578],[0.381,0.059],[4.232,-3.86],[0,0],[-2.048,-11.991],[-0.273,-0.827],[-23.699,-9.94]],"v":[[85.417,222.033],[69.165,231.219],[66.276,250.807],[67.116,277.685],[83.7,298.098],[100.477,300.635],[121.208,282.358],[134.977,278.593],[136.473,268.855],[139.759,253.98],[129.62,241.854],[116.449,220.69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0,0],[8.878,-6.797],[-2.65,-14.393],[-0.869,-8.639],[0,0],[-18,0.805],[-0.755,-0.157],[-3.96,7.987],[0,0],[3.5,20.493],[0.406,-0.092],[9.809,5.209]],"o":[[0,0],[-7.018,5.374],[1.314,7.135],[3.055,30.36],[0,0],[16.891,-0.756],[0.498,0.077],[3.329,-6.714],[0,0],[-2.679,-15.688],[-0.357,-1.082],[-18.075,-9.598]],"v":[[94.814,209.264],[68.935,211.991],[56.65,245.143],[69.079,267.073],[92.298,293.589],[113.5,300.195],[134.16,282.404],[147.21,274.013],[152.092,260.079],[156.716,236.538],[136.104,221.594],[123.275,207.702]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0,0],[3.321,-0.22],[6.614,-2.847],[3.371,-7.341],[0,0],[-21.848,-2.598],[-0.753,-0.166],[-16.744,6.176],[0,0],[3.233,20.537],[0.407,-0.087],[9.741,5.336]],"o":[[0,0],[-4.648,0.308],[-6.373,2.743],[-12.734,27.729],[0,0],[10.511,1.25],[0.497,0.084],[11.318,-4.175],[0,0],[-2.475,-15.721],[-0.343,-1.087],[-17.949,-9.832]],"v":[[118.966,202.472],[113.501,202.578],[95.285,206.695],[79.484,221.271],[88.219,258.653],[106.739,272.75],[122.753,264.916],[145.744,269.574],[162.601,252.357],[174.017,229.963],[160.093,215.337],[151.449,201.082]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[0,0],[2.717,0.633],[5.329,-1.087],[2.519,-6.296],[0,0],[-22.5,0],[-3.193,1.023],[-0.922,1.417],[0,0],[-4.75,9],[-0.012,3.376],[3.739,3.809]],"o":[[0,0],[-3.802,-0.886],[-5.135,1.047],[-7,17.5],[0,0],[6.438,0],[3.901,-1.25],[0.961,-1.476],[0,0],[2.322,-4.4],[0.013,-3.529],[-13.5,-13.75]],"v":[[133.5,208.75],[129.022,207.458],[114.22,206.823],[101.75,217],[108.75,243],[131.25,255.5],[145.416,253.761],[152.138,249.388],[153,246.75],[166.75,234],[170.526,222.649],[165.25,212]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0,0],[1.524,-0.424],[2.862,-1.943],[1.037,-3.678],[0,0],[-12.587,1.53],[-1.857,0.615],[-1.158,0.68],[0,0],[-2.127,5.326],[0.426,2.456],[2.322,1.912]],"o":[[0,0],[-2.133,0.593],[-2.758,1.872],[-2.883,10.222],[0,0],[2.601,-0.316],[2.269,-0.751],[1.207,-0.708],[0,0],[1.04,-2.604],[-0.446,-2.568],[-8.382,-6.903]],"v":[[144.781,204.174],[142.255,204.754],[134.104,208.407],[127.823,216.596],[130.746,232.153],[146.64,236.419],[153.328,234.944],[158.468,232.656],[160.279,231.432],[165.257,222.263],[166.238,214.562],[162.157,207.716]],"c":true}]},{"t":27.6,"s":[{"i":[[0,0],[0.041,-0.002],[0.076,-0.01],[0.028,-0.019],[0,0],[-0.336,0.008],[-0.05,0.003],[-0.031,0.003],[0,0],[-0.057,0.027],[0.011,0.012],[0.062,0.01]],"o":[[0,0],[-0.057,0.003],[-0.074,0.009],[-0.077,0.052],[0,0],[0.07,-0.002],[0.061,-0.004],[0.032,-0.004],[0,0],[0.028,-0.013],[-0.012,-0.013],[-0.224,-0.035]],"v":[[151.28,218.33],[151.213,218.332],[150.995,218.351],[150.827,218.392],[150.905,218.471],[151.33,218.492],[151.509,218.485],[151.646,218.473],[151.694,218.467],[151.827,218.421],[151.854,218.382],[151.744,218.347]],"c":true}]}],"ix":2},"nm":"Path 15","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 24","np":1,"cix":2,"bm":0,"ix":25,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[16.032,12.345],[14.515,-1.802],[0,0],[9.537,-1.609],[-1.992,-17.513],[4.648,-3.021],[4.263,-2.906],[2.461,-0.737],[-34.887,-7.009],[0.519,-1.425],[-8.737,-5.696],[0,0],[-23.165,0.061],[-0.337,-0.093],[-4.625,-2.057],[-8.254,21.326],[7.551,12.335],[-0.285,-0.204]],"o":[[-6.878,-5.296],[-9.459,1.174],[0,0],[-3.873,0.653],[0.363,3.19],[-8.368,5.439],[-2.244,1.53],[-15.393,4.608],[2.389,0.48],[-0.182,-0.064],[9.051,5.9],[0,0],[9.028,-0.024],[1.278,-1.002],[21.469,9.548],[5.991,-15.478],[-6.293,-10.279],[2.75,-6.406]],"v":[[-14.782,127.905],[-63.265,129.802],[-75.114,137.465],[-92.047,132.278],[-108.258,146.763],[-108.356,153.933],[-119.513,164.406],[-135.988,177.695],[-133.113,230.759],[-132.318,231.064],[-123.513,244.196],[-107.664,246.918],[-86.47,263.034],[-74.913,253.843],[-53.969,268.202],[19.438,242.362],[23.607,188.589],[11.765,163.717]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[13.605,6.742],[5.384,-2.033],[0,0],[10.998,-1.816],[3.752,-13.568],[5.36,-3.409],[1.544,-7.894],[2.839,-0.832],[-20.917,-9.228],[0.793,-1.525],[-11.157,-3.005],[0,0],[-26.716,0.068],[-7.76,1.336],[-5.835,-0.164],[-9.52,24.07],[8.708,13.921],[-0.328,-0.23]],"o":[[-8.932,-4.426],[-10.255,3.873],[0,0],[-4.467,0.738],[-0.967,3.497],[-9.651,6.139],[-0.589,3.01],[-17.753,5.201],[2.562,1.13],[-7.046,13.543],[12.013,3.235],[0,0],[10.412,-0.027],[8.55,-1.472],[12.64,0.356],[6.909,-17.468],[-7.257,-11.601],[3.172,-7.23]],"v":[[-60.855,127.758],[-90.245,123.127],[-105.351,132.341],[-118.248,131.566],[-135.502,147.068],[-146.86,155.159],[-163.475,159.644],[-176.997,165.049],[-178.583,207.728],[-177.954,211.457],[-163.763,241.515],[-142.314,243.741],[-114.412,262.777],[-90.127,252.967],[-76.64,260.144],[-35.23,234.93],[-42.243,179.601],[-50.422,155.48]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[9.896,1.195],[2.959,-4.937],[0,0],[3.998,2.184],[1.057,3.471],[13.86,-2.659],[1.544,-7.894],[2.889,0.633],[-10.167,-8.978],[0.204,-9.207],[-9.914,-5.935],[0,0],[-26.716,0.068],[-7.76,1.336],[-3.22,4.869],[-1.031,9.726],[6.968,14.869],[-0.328,-0.23]],"o":[[-9.896,-1.195],[-2.959,4.937],[0,0],[-3.973,-2.171],[-1.057,-3.471],[-11.233,2.155],[-0.589,3.01],[-10.503,-2.299],[2.099,1.854],[-0.306,13.806],[9.914,5.935],[0,0],[10.412,-0.027],[8.55,-1.472],[6.143,-9.289],[1.98,-18.68],[-6.257,-13.351],[3.172,-7.23]],"v":[[-109.855,129.758],[-131.745,144.377],[-132.351,154.341],[-140.498,154.566],[-147.252,143.068],[-159.11,137.659],[-182.975,155.144],[-192.497,160.299],[-201.083,187.478],[-202.204,203.957],[-180.013,229.765],[-173.064,241.491],[-133.912,254.777],[-109.377,250.217],[-85.89,244.894],[-64.48,219.68],[-80.493,175.601],[-85.922,154.98]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[9.896,1.195],[2.959,-4.937],[0,0],[3.998,2.184],[1.057,3.471],[13.86,-2.659],[1.544,-7.894],[2.889,0.633],[-10.167,-8.978],[0.204,-9.207],[-9.914,-5.935],[0,0],[-26.653,-1.827],[-2.726,5.194],[-2.456,3.714],[-0.27,7.07],[6.968,14.869],[-0.328,-0.23]],"o":[[-9.896,-1.195],[-2.959,4.937],[0,0],[-3.973,-2.171],[-1.057,-3.471],[-11.233,2.155],[-0.589,3.01],[-10.503,-2.299],[2.099,1.854],[-0.306,13.806],[9.914,5.935],[0,0],[15.996,1.096],[1.816,-3.46],[6.143,-9.289],[0.243,-6.376],[-6.257,-13.351],[3.172,-7.23]],"v":[[-111.855,126.008],[-133.745,140.627],[-134.351,150.591],[-142.498,150.816],[-149.252,139.318],[-172.86,138.909],[-189.225,161.894],[-195.497,166.049],[-203.083,189.978],[-198.954,200.707],[-181.013,220.015],[-164.564,221.491],[-121.162,235.027],[-97.493,227.163],[-92.39,215.894],[-81.73,196.93],[-89.993,165.101],[-106.672,151.98]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[8.5,0],[2,-4.75],[0,0],[2,-3.5],[1.25,3],[9.75,0.25],[0.5,-7.25],[1.388,-2.232],[0.742,-2.351],[-0.703,-3.829],[-9,-4.25],[0,0],[-22.75,1.25],[-5.55,3.866],[-1.699,3.598],[2.25,5.25],[0.75,4.25],[6,7.5]],"o":[[-8.5,0],[-2,4.75],[0,0],[-2,3.5],[-1.25,-3],[-9.75,-0.25],[-0.191,2.765],[-1.114,1.792],[-0.757,2.4],[2.25,12.25],[9,4.25],[0,0],[13.654,-0.75],[3.697,-2.575],[4.25,-9],[-2.25,-5.25],[-0.75,-4.25],[-6,-7.5]],"v":[[-127.75,133.5],[-144.25,140.5],[-143,148.5],[-157,153],[-166.25,151],[-179.75,140.75],[-199,163],[-201.86,170.107],[-204.898,176.12],[-205.25,185.25],[-184.5,209.5],[-171,207.75],[-141.5,216.75],[-113.775,209.583],[-106,200.25],[-105.25,179.25],[-108.5,160.25],[-114.5,144.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3,3.133],[2.57,0.274],[0,0],[2.552,-0.99],[1.286,-3.074],[-0.458,0.054],[5.009,-6.025],[0.117,-0.635],[2.455,-4.302],[-0.488,-2.658],[-7.962,-1.353],[0,0],[-15.449,0.849],[-3.085,3.633],[-1.154,2.444],[1.528,3.565],[0.509,2.886],[1.448,3.456]],"o":[[-3.992,-4.169],[-3.48,-0.371],[0,0],[-3.469,1.345],[-3.021,7.222],[-6.616,-0.309],[-1.662,2],[0.242,0.365],[-1.342,2.352],[1.528,8.319],[6.663,1.132],[0,0],[9.272,-0.509],[2.055,-2.421],[2.886,-6.112],[-1.528,-3.565],[-0.509,-2.886],[-0.998,-2.382]],"v":[[-137.625,144.867],[-146.195,140.101],[-154.6,139.315],[-161.781,140.53],[-169.786,148.074],[-171.292,159.696],[-186.759,168.15],[-190.617,177.51],[-197.33,180.177],[-198.504,190.26],[-184.663,201.603],[-167.37,200.289],[-149.587,203.901],[-132.299,196.765],[-127.855,189.196],[-126.595,173.811],[-130.052,163.033],[-133.627,152.757]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[2.43,2.537],[2.082,0.222],[0,0],[3.569,-0.14],[1.042,-2.49],[-0.371,0.044],[4.058,-4.881],[0.095,-0.515],[-0.511,-3.005],[-1.321,-1.745],[-6.45,-1.096],[0,0],[-12.116,3.205],[-0.59,2.936],[-0.215,-0.024],[-2.682,6.652],[0.002,2.374],[0.138,-0.169]],"o":[[-3.234,-3.377],[-2.819,-0.301],[0,0],[-3.012,0.118],[-2.447,5.85],[-1.404,1.623],[-1.347,1.62],[0.196,0.295],[0.368,2.162],[3.94,5.203],[5.397,0.917],[0,0],[5.892,-1.559],[0.393,-1.956],[0.713,-0.686],[1.175,-2.914],[-0.007,-7.368],[-2.05,-0.417]],"v":[[-159.127,141.778],[-164.944,137.042],[-168.252,135.031],[-177.694,132.515],[-186.303,135.501],[-188.346,142.002],[-192.552,152.263],[-193.427,159.095],[-195.864,164.38],[-192.815,172.422],[-184.353,180.235],[-177.221,179.046],[-162.691,180.347],[-154.44,171.852],[-153.963,168.436],[-147.818,163.598],[-147.118,154.118],[-154.138,145.794]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[1.133,0.194],[0.617,0.066],[0,0],[1.058,-0.041],[0.598,-0.531],[-0.11,0.013],[0.399,-1.919],[0.028,-0.153],[-0.151,-0.89],[-0.392,-0.517],[-1.911,-0.325],[0,0],[-3.59,0.95],[-0.473,0.369],[-0.064,-0.007],[-0.795,1.971],[0.001,0.703],[0.041,-0.05]],"o":[[-1.366,-0.234],[-0.835,-0.089],[0,0],[-0.892,0.035],[-1.287,1.143],[-0.392,1.039],[-0.127,0.611],[0.058,0.088],[0.109,0.641],[1.168,1.542],[1.599,0.272],[0,0],[1.746,-0.462],[0.315,-0.246],[0.513,-1.247],[0.348,-0.864],[-0.002,-2.183],[-0.608,-0.123]],"v":[[-169.766,137.711],[-171.614,137.011],[-173.34,136.829],[-176.262,136.622],[-179.103,136.969],[-180.95,138.978],[-182.197,142.184],[-182.58,144.292],[-182.309,146.23],[-181.488,148.945],[-178.277,151.177],[-176.08,151.404],[-171.526,151.293],[-168.41,149.903],[-167.905,149.502],[-166.374,145.874],[-166.001,142.527],[-167.709,138.487]],"c":true}]},{"t":31.2,"s":[{"i":[[-0.012,-0.002],[-0.006,-0.001],[0,0],[-0.011,0],[-0.006,0.005],[0.001,0],[-0.004,0.02],[0,0.002],[0.002,0.009],[0.004,0.005],[0.02,0.003],[0,0],[0.037,-0.01],[0.005,-0.004],[0.001,0],[0.008,-0.02],[0,-0.007],[0,0.001]],"o":[[0.014,0.002],[0.009,0.001],[0,0],[0.009,0],[0.013,-0.012],[0.004,-0.011],[0.001,-0.006],[-0.001,-0.001],[-0.001,-0.007],[-0.012,-0.016],[-0.016,-0.003],[0,0],[-0.018,0.005],[-0.003,0.003],[-0.005,0.013],[-0.004,0.009],[0,0.022],[0.006,0.001]],"v":[[-174.336,144.408],[-174.317,144.415],[-174.3,144.417],[-174.27,144.419],[-174.241,144.416],[-174.222,144.395],[-174.209,144.362],[-174.205,144.341],[-174.208,144.321],[-174.216,144.293],[-174.249,144.27],[-174.272,144.268],[-174.318,144.269],[-174.35,144.283],[-174.355,144.287],[-174.371,144.324],[-174.375,144.359],[-174.357,144.4]],"c":true}]}],"ix":2},"nm":"Path 14","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":30,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 23","np":1,"cix":2,"bm":0,"ix":26,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[4.269,-0.285],[-0.099,-0.021],[4.158,-1.641],[1.316,-6.01],[-7.071,-4.003],[-6.773,8.608],[7.156,10.787]],"o":[[-6.731,0.45],[-0.036,0.004],[-5.174,2.042],[-2.354,10.746],[11.42,6.465],[6.885,-8.752],[-3.339,-5.033]],"v":[[-99.391,120.571],[-107.282,121.507],[-114.678,123.973],[-125.613,137.234],[-116.699,159.837],[-86.788,155.023],[-84.537,128.603]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[5.074,-1.318],[-0.125,0.001],[4.59,-2.783],[0.037,-6.919],[-9.559,-2.739],[-5.947,11.061],[11.411,10.181]],"o":[[-8.001,2.078],[-0.042,0.013],[-5.712,3.463],[-0.066,12.373],[15.438,4.424],[6.046,-11.245],[-5.324,-4.75]],"v":[[-122.44,101.664],[-131.714,104.549],[-139.996,109],[-149.763,126.157],[-133.184,148.919],[-98.358,136.59],[-102.457,107.003]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[7.17,-3.072],[-0.184,0.029],[6.131,-5.119],[-1.49,-10.186],[-14.672,-1.895],[-6.277,17.597],[19.058,12.427]],"o":[[-11.305,4.843],[-0.059,0.029],[-7.629,6.37],[2.665,18.214],[23.696,3.06],[6.382,-17.89],[-8.891,-5.798]],"v":[[-124.82,89.782],[-137.816,96.096],[-149.006,104.494],[-159.54,131.911],[-130.071,161.69],[-81.598,135.778],[-94.234,93.173]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[7.17,-3.072],[-0.184,0.029],[6.131,-5.119],[-1.49,-10.186],[-14.672,-1.895],[-6.277,17.597],[19.058,12.427]],"o":[[-11.305,4.843],[-0.059,0.029],[-7.629,6.37],[2.665,18.214],[23.696,3.06],[6.382,-17.89],[-8.891,-5.798]],"v":[[-126.82,88.532],[-139.816,94.846],[-151.006,103.244],[-161.54,130.661],[-132.071,160.44],[-83.598,134.528],[-96.234,91.923]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[7.17,-3.072],[-0.184,0.029],[6.131,-5.119],[-1.49,-10.186],[-14.672,-1.895],[-6.277,17.597],[19.058,12.427]],"o":[[-11.305,4.843],[-0.059,0.029],[-7.629,6.37],[2.665,18.214],[23.696,3.06],[6.382,-17.89],[-8.891,-5.798]],"v":[[-130.445,85.532],[-139.816,94.721],[-154.631,100.244],[-165.165,127.661],[-135.696,157.44],[-87.223,131.528],[-99.859,88.923]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.17,-3.072],[-0.184,0.029],[4.056,-3.592],[-1.49,-10.186],[-14.672,-1.895],[-2.79,11.062],[9.109,5.577]],"o":[[-11.305,4.843],[-0.059,0.029],[-4.606,4.079],[2.665,18.214],[23.696,3.06],[3.223,-12.778],[-7.337,-4.493]],"v":[[-126.195,80.907],[-139.816,95.346],[-152.381,96.244],[-160.415,117.911],[-130.071,142.565],[-89.598,117.028],[-102.109,84.173]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[6.75,-2],[1.911,-1.434],[1.325,-2.309],[0.611,-2.828],[-12,-5.75],[-4.5,9],[7.25,2.75]],"o":[[-2.347,0.695],[-1.905,1.429],[-1.169,2.037],[-2,9.25],[12,5.75],[4.5,-9],[-7.25,-2.75]],"v":[[-129.25,87],[-135.672,90.156],[-140.555,95.728],[-143.25,103],[-124.5,124.5],[-99.75,116.25],[-107,88]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.3,-0.978],[0.934,-0.701],[0.648,-1.129],[0.299,-1.383],[-5.867,-2.811],[-2.2,4.401],[3.545,1.345]],"o":[[-1.147,0.34],[-0.931,0.699],[-0.572,0.996],[-0.978,4.523],[5.867,2.811],[2.2,-4.401],[-3.545,-1.345]],"v":[[-132.177,85.853],[-135.317,87.396],[-137.704,90.121],[-139.022,93.676],[-132.104,104.564],[-117.753,100.155],[-121.298,86.342]],"c":true}]},{"t":27.6,"s":[{"i":[[0,0.011],[0,0.008],[0,0.013],[0,0.015],[0,0.031],[0,-0.049],[0,-0.015]],"o":[[0,-0.004],[0,-0.008],[0,-0.011],[0,-0.05],[0,-0.031],[0,0.049],[0,0.015]],"v":[[-140.375,80.489],[-140.375,80.472],[-140.375,80.442],[-140.375,80.402],[-140.375,80.281],[-140.375,80.33],[-140.375,80.484]],"c":true}]}],"ix":2},"nm":"Path 13","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 22","np":1,"cix":2,"bm":0,"ix":27,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[0.848,1.746],[0.817,0.364],[19.647,3.522],[9.911,-15.839],[-8.54,-8.416],[-2.928,1.496],[10.09,-19.523],[-2.536,-1.496],[-46.383,12.27],[7.754,3.824],[9.032,37.227]],"o":[[-10.498,-21.608],[-0.283,-1.073],[-10.991,-1.97],[-6.738,10.769],[9.443,9.306],[0.491,-0.139],[-10.619,20.547],[0.411,-0.361],[18.168,-4.806],[-1.9,-0.937],[-15.591,-37.452]],"v":[[25.417,23.011],[-36.447,10.093],[-69.568,-7.619],[-108.554,20.678],[-104.272,51.853],[-69.412,58.424],[-69.489,92.17],[-36.828,129.54],[17.492,138.23],[54.102,103.914],[72.718,56.305]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0.713,1.568],[0.687,0.327],[16.522,3.162],[8.335,-14.223],[-7.182,-7.557],[-2.462,1.343],[8.485,-17.531],[-2.133,-1.343],[-39.008,11.018],[6.521,3.434],[7.013,33.585]],"o":[[-8.828,-19.404],[-0.238,-0.964],[-9.244,-1.769],[-5.666,9.67],[7.942,8.356],[0.413,-0.125],[-8.93,18.451],[0.345,-0.324],[15.279,-4.316],[-1.598,-0.842],[-13.112,-33.631]],"v":[[1.209,19.018],[-50.818,7.419],[-78.672,-8.487],[-111.459,16.923],[-107.857,44.918],[-78.541,50.818],[-78.606,81.122],[-51.139,114.679],[-5.456,122.482],[43.832,97.667],[53.987,44.415]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0.646,1.478],[0.622,0.308],[14.96,2.983],[7.547,-13.415],[-6.503,-7.128],[-2.229,1.267],[7.683,-16.536],[-1.931,-1.267],[-35.32,10.392],[5.904,3.239],[6.878,31.53]],"o":[[-7.994,-18.302],[-0.215,-0.909],[-8.37,-1.669],[-5.131,9.121],[7.191,7.882],[0.374,-0.118],[-8.086,17.403],[0.313,-0.306],[13.834,-4.071],[-1.447,-0.794],[-11.872,-31.72]],"v":[[-10.896,17.022],[-58.004,6.081],[-83.224,-8.921],[-112.911,15.046],[-109.65,41.45],[-83.105,47.015],[-83.164,75.597],[-58.294,107.248],[-16.93,114.608],[10.947,85.544],[25.122,45.22]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[23.023,6.688],[0.485,0.24],[11.669,2.326],[5.886,-10.464],[-5.072,-5.56],[-1.739,0.988],[-12.587,-6.619],[-1.506,-0.988],[-11.977,-3.251],[-2.257,4.743],[3.45,4.539]],"o":[[-14.959,-4.345],[-0.168,-0.709],[-6.528,-1.302],[-4.002,7.114],[5.609,6.148],[0.292,-0.092],[12.587,6.619],[0.244,-0.238],[10.855,2.946],[10.181,-21.394],[-2.92,-7.502]],"v":[[-31.523,15.062],[-58.713,14.914],[-78.384,3.212],[-101.54,21.906],[-98.996,42.501],[-78.292,46.842],[-68.587,67.381],[-48.994,73.738],[-31.355,86.304],[-4.931,76.894],[-16.3,46.027]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[12.125,2.625],[0.531,0.108],[11.875,-0.75],[3,-11.625],[-6.331,-4.07],[-1.468,1.358],[-6.75,2.75],[-6.094,-2.441],[-2.584,1.949],[-3.452,3.959],[4.5,3.5]],"o":[[-15.225,-3.296],[-0.344,-0.642],[-6.644,0.42],[-2.04,7.903],[7,4.5],[8.375,-7.75],[0.5,-0.125],[4.203,1.683],[3.086,-2.329],[3.727,-4.273],[-4.75,-6.5]],"v":[[-58.875,15.5],[-85.906,10.892],[-104.125,7.25],[-121,21.25],[-113.25,40.5],[-92.125,39.375],[-63.875,53.375],[-49.906,51.066],[-40.916,54.176],[-25.923,50.541],[-31.625,31.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[12.125,2.625],[0.531,0.108],[11.875,-0.75],[3,-11.625],[-6.331,-4.07],[-1.468,1.358],[-6.75,2.75],[-6.094,-2.441],[-2.584,1.949],[0.865,3.984],[0.5,0.5]],"o":[[-15.225,-3.296],[-0.344,-0.642],[-6.644,0.42],[-2.04,7.903],[7,4.5],[8.375,-7.75],[0.5,-0.125],[4.203,1.683],[3.086,-2.329],[-1.202,-5.541],[2.625,-6.625]],"v":[[-78.125,-0.25],[-101.406,4.142],[-117.5,-5.125],[-134.375,8.875],[-126.75,30],[-106.75,29.5],[-82.25,29.625],[-75.781,36.941],[-62.041,37.301],[-58.548,26.916],[-66.125,21.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[4.473,2.863],[8.215,-0.705],[4.865,-2.085],[3.75,-7.25],[-3.667,-2.163],[-1.268,1.547],[-9.086,0.51],[-1.795,0.632],[-1.056,0.729],[-0.6,0.739],[-0.242,0.612]],"o":[[-3.577,-2.289],[-6.139,0.527],[-6.119,2.622],[-3.75,7.25],[4.875,2.875],[6.25,-7.625],[2.419,-0.136],[1.491,-0.525],[0.969,-0.668],[0.509,-0.626],[2.625,-6.625]],"v":[[-76.875,-11.75],[-96.544,-14.067],[-113.875,-10.125],[-130.875,-6.375],[-125.375,14.375],[-107.375,15.375],[-83,12.125],[-76.678,10.918],[-72.856,9.006],[-70.502,6.871],[-69.375,5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[1,3],[3.049,-0.927],[1.604,-2.352],[3.75,-7.25],[-4.25,-0.25],[0,2],[-1,1.25],[-0.781,0.577],[-0.668,0.611],[-0.404,0.671],[-0.05,0.648]],"o":[[-0.572,-1.717],[-2.278,0.693],[-3.75,5.5],[-3.75,7.25],[4.25,0.25],[0,-2],[0.309,-0.386],[0.649,-0.479],[0.612,-0.56],[0.342,-0.568],[0.25,-3.25]],"v":[[-101.75,-32],[-108.237,-33.278],[-114.5,-28.75],[-129.5,-17],[-121,-2.5],[-111,-8.75],[-114.5,-17.75],[-112.743,-19.194],[-110.699,-20.829],[-109.121,-22.676],[-108.5,-24.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0.477,1.241],[1.644,-0.085],[1.06,-0.649],[1.583,-3.072],[-3.68,-0.739],[-0.664,0.556],[-0.43,0.534],[-0.201,0.384],[-0.162,0.402],[-0.106,0.389],[-0.036,0.313]],"o":[[-0.273,-0.711],[-1.229,0.063],[-2.675,1.638],[-1.583,3.072],[2.998,0.602],[1.031,-0.863],[0.133,-0.165],[0.167,-0.319],[0.149,-0.369],[0.09,-0.33],[0.155,-1.355]],"v":[[-123.207,-34.886],[-126.562,-35.897],[-130.195,-34.858],[-135.734,-28.285],[-131.922,-22.534],[-126.533,-24.296],[-123.665,-27.037],[-123.145,-27.886],[-122.64,-28.982],[-122.248,-30.13],[-122.053,-31.102]],"c":true}]},{"t":26.4,"s":[{"i":[[-0.002,-0.011],[-0.006,0.001],[-0.004,0.006],[-0.006,0.026],[0.014,0.006],[0.002,-0.005],[0.002,-0.005],[0.001,-0.003],[0.001,-0.003],[0,-0.003],[0,-0.003]],"o":[[0.001,0.006],[0.005,-0.001],[0.01,-0.014],[0.006,-0.026],[-0.011,-0.005],[-0.004,0.007],[-0.001,0.001],[-0.001,0.003],[-0.001,0.003],[0,0.003],[-0.001,0.012]],"v":[[-147.995,-43.14],[-147.983,-43.131],[-147.969,-43.14],[-147.948,-43.196],[-147.962,-43.245],[-147.983,-43.23],[-147.993,-43.206],[-147.995,-43.199],[-147.997,-43.19],[-147.999,-43.18],[-147.999,-43.172]],"c":true}]}],"ix":2},"nm":"Path 12","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":25.2,"s":[100,100],"h":1},{"t":26.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 21","np":1,"cix":2,"bm":0,"ix":28,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[6.316,0.365],[-9.101,-36.431],[-32.214,1.248],[-0.832,-0.102],[-3.283,15.561],[15.288,7.245],[0.489,0.149]],"o":[[-23.073,-1.332],[6.095,24.398],[14.065,-0.545],[0.121,-1.496],[3.309,-15.684],[-13.919,-6.596],[-0.614,-0.488]],"v":[[-41.298,-128.168],[-62.584,-83.152],[1.229,2.268],[51.511,-48.572],[40.515,-90.575],[-9.296,-123.904],[-26.968,-129.148]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9.6,"s":[{"i":[[6.316,0.341],[-9.101,-34.094],[-30.864,-9.302],[-0.832,-0.095],[-3.283,14.562],[15.288,6.78],[0.489,0.14]],"o":[[-23.073,-1.247],[6.095,22.833],[38.104,11.485],[0.121,-1.4],[3.309,-14.677],[-13.919,-6.173],[-0.614,-0.456]],"v":[[-50.965,-135.294],[-89.751,-78.667],[-18.604,-15.485],[34.511,-37.132],[58.682,-95.961],[-18.963,-131.304],[-36.635,-136.212]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[6.316,0.294],[-9.101,-29.419],[-32.214,1.008],[-0.832,-0.082],[-3.283,12.565],[15.288,5.851],[0.489,0.121]],"o":[[-23.073,-1.076],[6.095,19.702],[14.065,-0.44],[0.121,-1.208],[3.309,-12.665],[-13.919,-5.327],[-0.614,-0.394]],"v":[[-70.298,-149.548],[-91.584,-113.197],[-62.771,-73.491],[-41.489,-93.752],[-20.485,-112.731],[-38.296,-146.105],[-55.968,-150.339]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[6.316,0.294],[-9.101,-29.419],[-32.214,1.008],[-0.832,-0.082],[-3.283,12.565],[15.288,5.851],[0.489,0.121]],"o":[[-23.073,-1.076],[6.095,19.702],[14.065,-0.44],[0.121,-1.208],[3.309,-12.665],[-13.919,-5.327],[-0.614,-0.394]],"v":[[-71.798,-151.798],[-94.084,-105.947],[-60.021,-72.991],[-33.989,-89.252],[-20.485,-112.731],[-38.296,-146.105],[-55.968,-150.339]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[5.031,0.235],[-7.25,-23.435],[-25.972,6.764],[-0.431,-0.143],[-2.615,10.009],[12.179,4.661],[0.389,0.096]],"o":[[-18.379,-0.857],[4.855,15.694],[13.893,-3.618],[0.096,-0.962],[2.636,-10.089],[-11.088,-4.243],[-0.489,-0.314]],"v":[[-79.715,-145.671],[-98.862,-110.939],[-68.143,-85.882],[-56.566,-101.822],[-39.636,-115.547],[-53.824,-142.132],[-68.897,-146.302]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[3.579,0.143],[-5.158,-14.301],[-17.82,5.878],[-0.307,-0.087],[-1.86,6.108],[8.664,2.844],[0.277,0.059]],"o":[[-13.075,-0.523],[3.454,9.578],[5.489,-1.81],[0.068,-0.587],[1.875,-6.157],[-7.888,-2.589],[-0.348,-0.191]],"v":[[-78.761,-148.352],[-92.204,-123.953],[-64.305,-112.628],[-60.693,-121.288],[-50.25,-129.968],[-59.987,-148.786],[-71.777,-147.059]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[1.942,0.078],[-0.5,-7.25],[-6,2.75],[-1.435,1.468],[0,2.813],[0.859,1.165],[1.856,0.669]],"o":[[-6.25,-0.25],[0.5,7.25],[2.785,-1.276],[1.656,-1.696],[0,-1.672],[-1,-1.356],[-1.555,-0.56]],"v":[[-73.75,-158.75],[-84,-146.25],[-71.5,-140],[-65.196,-143.967],[-62.75,-150.5],[-64.09,-154.755],[-68.456,-157.793]],"c":true}]},{"t":25.2,"s":[{"i":[[0.067,0.003],[-0.017,-0.25],[-0.207,0.095],[-0.049,0.051],[0,0.097],[0.03,0.04],[0.064,0.023]],"o":[[-0.216,-0.009],[0.017,0.25],[0.096,-0.044],[0.057,-0.058],[0,-0.058],[-0.034,-0.047],[-0.054,-0.019]],"v":[[-74.129,-165.241],[-74.483,-164.81],[-74.052,-164.595],[-73.834,-164.732],[-73.75,-164.957],[-73.796,-165.104],[-73.947,-165.208]],"c":true}]}],"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":7.2,"s":[0,0],"h":1},{"t":8.4,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 20","np":1,"cix":2,"bm":0,"ix":29,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[13.773,-0.038],[2.844,-8.6],[-9.07,-0.176],[-20.758,8.379],[9.469,10.386]],"o":[[-15.599,0.043],[-2.844,8.6],[11.374,0.221],[10.913,-4.405],[-5.628,-6.173]],"v":[[-134.546,-237.462],[-165.906,-222.802],[-155.48,-196.269],[-111.413,-192.629],[-111.666,-227.745]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[16.23,-0.048],[3.351,-11.039],[-10.688,-0.226],[-24.461,10.756],[11.158,13.332]],"o":[[-18.381,0.055],[-3.351,11.039],[13.403,0.283],[12.86,-5.655],[-6.631,-7.923]],"v":[[-140.619,-252.555],[-177.573,-233.737],[-165.286,-199.677],[-113.36,-195.006],[-113.658,-240.082]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[13,0.25],[2.5,-9.75],[-7.974,-0.199],[-18.25,9.5],[4.5,6.25]],"o":[[-8.974,-0.173],[-2.5,9.75],[10,0.25],[9.595,-4.994],[-1.633,-2.268]],"v":[[-149.5,-241.75],[-178.75,-228],[-173.5,-206.75],[-136.25,-196],[-131.25,-232.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[8.75,2],[2.5,-9.75],[-6.75,-4.25],[0,4.5],[-2.5,1.25]],"o":[[-8.75,-2],[-2.5,9.75],[6.75,4.25],[0,-4.5],[2.5,-1.25]],"v":[[-152.75,-227.5],[-172.25,-221],[-166.5,-199.5],[-152.75,-203.25],[-146.5,-215]],"c":true}]},{"t":25.2,"s":[{"i":[[0.273,0.063],[0.078,-0.305],[-0.211,-0.133],[-0.093,0.106],[0.016,0.172]],"o":[[-0.273,-0.063],[-0.078,0.305],[0.211,0.133],[0.109,-0.125],[-0.008,-0.087]],"v":[[-164.063,-215.953],[-164.672,-215.75],[-164.492,-215.078],[-163.969,-215.125],[-163.766,-215.625]],"c":true}]}],"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 19","np":1,"cix":2,"bm":0,"ix":30,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[15.713,-1.406],[6.428,-12.309],[-10.647,-6.405],[-0.096,-0.848],[-6.513,-3.96],[-7.185,2.638],[-0.503,1.294],[5.825,13.651],[2.513,5.504],[6.831,7.026]],"o":[[-15.285,1.367],[-4.929,9.438],[12.695,7.637],[-0.149,-0.01],[10.938,6.65],[17.727,-6.509],[-0.546,0.056],[-2.381,-5.579],[-1.744,-3.818],[-10.169,-6.974]],"v":[[-74.965,-191.367],[-109.927,-168.974],[-95.702,-129.019],[-82.209,-120.717],[-69.005,-110.65],[-36.815,-110.138],[-22.066,-133.104],[-26.348,-154.903],[-33.763,-172.004],[-40.831,-185.151]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[15.713,-1.406],[6.428,-12.309],[-10.647,-6.405],[-0.096,-0.848],[-6.513,-3.96],[-7.185,2.638],[-0.503,1.294],[5.825,13.651],[2.513,5.504],[6.831,7.026]],"o":[[-15.285,1.367],[-4.929,9.438],[12.695,7.637],[-0.149,-0.01],[10.938,6.65],[17.727,-6.509],[-0.546,0.056],[-2.381,-5.579],[-1.744,-3.818],[-10.169,-6.974]],"v":[[-65.715,-208.617],[-100.677,-186.224],[-86.452,-146.269],[-72.959,-137.967],[-59.755,-127.9],[-27.565,-127.388],[-12.816,-150.354],[-17.098,-172.153],[-24.513,-189.254],[-31.581,-202.401]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[15.715,-1.383],[7.732,-12.309],[-10.647,-6.405],[-0.096,-0.848],[-6.513,-3.96],[-7.185,2.638],[-0.503,1.294],[5.825,13.651],[1.513,14.254],[0.388,-0.2]],"o":[[-11.853,1.043],[-5.663,9.016],[12.695,7.637],[-0.149,-0.01],[10.938,6.65],[17.727,-6.509],[-0.546,0.056],[-2.381,-5.579],[-0.443,-4.174],[-0.531,-0.957]],"v":[[-42.215,-217.367],[-81.427,-197.974],[-71.952,-157.769],[-54.459,-152.467],[-45.505,-142.9],[-18.565,-143.138],[-1.566,-161.854],[-6.598,-181.403],[-11.013,-197.504],[-19.456,-209.651]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[9.322,-0.487],[7.516,-9.446],[-8.444,-5.77],[-0.011,-0.687],[-5.162,-3.563],[-6.768,1.019],[-0.529,1.011],[3.792,11.315],[4.178,8.844],[0.343,-0.138]],"o":[[-10.063,0.113],[-5.505,6.919],[10.068,6.88],[-0.124,-0.017],[8.669,5.984],[17.665,-2.472],[-0.464,0.014],[-1.55,-4.625],[-1.372,-2.702],[-0.369,-0.8]],"v":[[-44.663,-221.733],[-78.245,-207.872],[-72.654,-175.033],[-58.354,-169.75],[-50.653,-162.984],[-27.343,-160.745],[-8.523,-176.658],[-11.429,-193.47],[-19.419,-209.333],[-29.088,-215.562]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[2.853,0.274],[7.239,-9.189],[-6.172,-6.728],[0.073,-0.716],[-3.769,-4.15],[-6.296,-0.319],[-0.551,1.007],[1.728,12.101],[6.81,5.876],[0.295,-0.115]],"o":[[-8.19,-0.786],[-5.302,6.731],[7.36,8.022],[-0.099,-0.028],[6.33,6.97],[17.46,0.883],[-0.379,-0.026],[-0.706,-4.946],[-2.29,-1.976],[-0.205,-0.865]],"v":[[-46.81,-225.964],[-74.489,-213.811],[-72.828,-179.272],[-61.838,-172.551],[-55.45,-166.718],[-35.96,-161.383],[-15.473,-178.885],[-16.228,-197.601],[-27.728,-217.605],[-38.545,-219.635]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[1.857,1.045],[0.44,-17.147],[-1.847,-3.486],[0.053,-0.52],[-2.738,-3.015],[-4.578,-0.114],[-0.4,0.731],[-3.168,9.957],[2.037,2.634],[1.22,0.995]],"o":[[-7.034,-3.957],[-0.101,3.944],[1.083,2.044],[-0.072,-0.02],[4.598,5.063],[10.397,0.259],[-0.275,-0.019],[1.028,-3.23],[-0.854,-1.104],[-1.482,-1.209]],"v":[[-38.004,-227.043],[-69.552,-214.22],[-66.892,-204.748],[-62.178,-200.23],[-60.262,-192.36],[-48.647,-187.759],[-38.85,-202.106],[-27.957,-211.707],[-29.814,-220.512],[-32.951,-223.662]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[1.056,0.594],[0.25,-9.75],[-0.901,-1.347],[-0.687,-0.465],[-0.515,-0.215],[-1.385,-0.462],[-1.453,2.21],[-0.54,1.511],[1.12,1.835],[0.684,0.677]],"o":[[-4,-2.25],[-0.069,2.677],[0.512,0.766],[0.473,0.32],[2.213,0.921],[1.705,0.568],[1.104,-1.678],[0.648,-1.815],[-0.469,-0.769],[-0.831,-0.822]],"v":[[-49.5,-225.25],[-62.25,-216.75],[-60.864,-210.84],[-59.04,-209.016],[-57.549,-208.222],[-51.5,-206.75],[-46.556,-210.084],[-44,-215.25],[-44.899,-220.917],[-46.644,-223.101]],"c":true}]},{"t":25.2,"s":[{"i":[[0.018,0.01],[0.004,-0.164],[-0.015,-0.023],[-0.012,-0.008],[-0.009,-0.004],[-0.023,-0.008],[-0.024,0.037],[-0.009,0.025],[0.019,0.031],[0.011,0.011]],"o":[[-0.067,-0.038],[-0.001,0.045],[0.009,0.013],[0.008,0.005],[0.037,0.015],[0.029,0.01],[0.019,-0.028],[0.011,-0.031],[-0.008,-0.013],[-0.014,-0.014]],"v":[[-55.603,-222.212],[-55.817,-222.069],[-55.794,-221.97],[-55.764,-221.939],[-55.739,-221.926],[-55.637,-221.901],[-55.554,-221.957],[-55.511,-222.044],[-55.526,-222.139],[-55.555,-222.176]],"c":true}]}],"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":6,"s":[0,0],"h":1},{"t":7.2,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 18","np":1,"cix":2,"bm":0,"ix":31,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[13.75,3.25],[5.25,-14.25],[0.62,-0.145],[0.085,-15.743],[-7.53,0.145],[-2.25,4],[-3.25,3.5]],"o":[[-13.75,-3.25],[-0.66,1.791],[0.12,1.061],[-0.067,12.555],[13,-0.25],[2.25,-4],[3.25,-3.5]],"v":[[27.5,-216],[-8.25,-204],[-10.37,-196.855],[-21.835,-182.007],[-0.75,-161.25],[32.25,-167.25],[47,-191.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[13.75,3.25],[5.25,-14.25],[0.62,-0.145],[0.085,-15.743],[-7.53,0.145],[-2.25,4],[-3.25,3.5]],"o":[[-13.75,-3.25],[-0.66,1.791],[0.12,1.061],[-0.067,12.555],[13,-0.25],[2.25,-4],[3.25,-3.5]],"v":[[20.75,-227.5],[-15,-215.5],[-17.12,-208.355],[-28.585,-193.507],[-7.5,-172.75],[25.5,-178.75],[40.25,-203]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[13.75,3.25],[5.25,-14.25],[0.392,-1.771],[-0.993,-4.176],[-6.907,0.133],[-2.25,4],[-3.25,3.5]],"o":[[-13.75,-3.25],[-0.643,1.745],[-1.109,5.007],[1.524,6.408],[13,-0.25],[2.25,-4],[3.25,-3.5]],"v":[[20.25,-236],[-12,-223.25],[-13.554,-217.958],[-13.765,-203.799],[-1.25,-193],[19,-199.25],[30.25,-208]],"c":true}]},{"t":25.2,"s":[{"i":[[0.158,0.037],[0.06,-0.164],[0.004,-0.02],[-0.014,-0.047],[-0.08,0.002],[-0.049,0.02],[0.006,0.084]],"o":[[-0.158,-0.037],[-0.007,0.02],[-0.012,0.057],[0.021,0.072],[0.15,-0.003],[0.069,-0.028],[0.011,-0.109]],"v":[[14.821,-229.95],[14.435,-229.797],[14.418,-229.736],[14.422,-229.576],[14.574,-229.454],[14.85,-229.469],[14.989,-229.697]],"c":true}]}],"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 17","np":1,"cix":2,"bm":0,"ix":32,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[13.147,-2.866],[0,0],[4.419,-23.743],[0,0],[-39.757,-6.382],[-1.069,-0.535],[-0.46,8.232],[0.213,0.034],[5.197,5.598]],"o":[[-26.922,5.869],[0,0],[-3.466,18.621],[-0.183,-0.091],[31.175,5.004],[14.505,7.257],[1.111,-19.892],[0.548,-1.047],[-8.586,-9.248]],"v":[[133.422,-179.869],[103.784,-153.011],[90.331,-128.007],[100.412,-96.455],[131.941,-90.277],[169.55,-114.358],[185.639,-138.608],[168.394,-166.016],[163.057,-172.69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[13.147,-2.866],[0,0],[-1.831,-21.993],[0,0],[-39.757,-6.382],[-1.069,-0.535],[-0.46,8.232],[0.213,0.034],[5.197,5.598]],"o":[[-26.922,5.869],[0,0],[1.848,22.206],[-0.183,-0.091],[31.175,5.004],[14.505,7.257],[1.111,-19.892],[0.548,-1.047],[-8.586,-9.248]],"v":[[129.172,-178.619],[101.534,-155.511],[100.081,-133.257],[90.412,-119.455],[131.941,-90.277],[176.3,-103.358],[203.639,-128.858],[171.894,-161.016],[163.057,-172.69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[13.147,-2.866],[0,0],[-1.831,-21.993],[0,0],[-39.757,-6.382],[-1.069,-0.535],[-0.46,8.232],[0.213,0.034],[5.197,5.598]],"o":[[-26.922,5.869],[0,0],[1.848,22.206],[-0.183,-0.091],[31.175,5.004],[14.505,7.257],[1.111,-19.892],[0.548,-1.047],[-8.586,-9.248]],"v":[[140.922,-204.369],[100.034,-188.011],[85.081,-163.007],[100.662,-140.955],[142.191,-111.777],[186.55,-124.858],[213.889,-150.358],[182.144,-182.516],[173.307,-194.19]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[13.454,-0.249],[0,0],[3.986,-22.701],[0,0],[-43.964,-4.676],[-1.069,-0.535],[-0.792,8.206],[0.213,0.034],[5.197,5.598]],"o":[[-19.922,0.369],[0,0],[-6.064,34.537],[0,0],[30.809,3.277],[14.505,7.257],[2.861,-29.642],[0.548,-1.047],[-8.586,-9.248]],"v":[[152.422,-212.119],[128.034,-203.761],[87.081,-179.507],[92.912,-135.955],[140.691,-103.777],[192.8,-122.608],[221.889,-146.608],[190.144,-184.266],[183.557,-197.69]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[13.406,0.683],[0,0],[5.129,-22.439],[0,0],[-31.926,-8.305],[-1.039,-0.588],[-1.329,8.119],[0.21,0.044],[4.899,5.847]],"o":[[-15.587,-0.496],[0,0],[-7.803,34.139],[0,0],[24.063,6.834],[14.099,7.975],[3.995,-25.861],[0.6,-1.017],[-8.094,-9.66]],"v":[[158.656,-212.868],[135.099,-205.146],[94.937,-189.499],[101.687,-145.312],[145.312,-119.834],[192.304,-127.026],[224.505,-145.389],[194.766,-183.431],[188.978,-196.893]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[13.359,1.616],[0,0],[6.272,-22.178],[0,0],[-19.888,-11.934],[-1.009,-0.64],[-1.865,8.031],[0.208,0.055],[4.601,6.097]],"o":[[-11.252,-1.361],[0,0],[-9.543,33.742],[0,0],[17.317,10.391],[13.692,8.694],[5.128,-22.08],[0.652,-0.986],[-7.602,-10.073]],"v":[[164.891,-213.616],[142.165,-206.531],[102.793,-199.492],[137.962,-161.67],[149.933,-135.891],[191.808,-131.444],[227.122,-144.17],[199.389,-182.596],[194.399,-196.097]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[10.892,3.134],[0,0],[2.793,-22.878],[0,0],[-19.199,-13.014],[-6.056,-1.881],[-1.865,8.031],[0.208,0.055],[1.91,6.831]],"o":[[-10.892,-3.134],[0,0],[-2.793,22.878],[0,0],[16.067,10.891],[19.942,6.194],[5.128,-22.08],[0.652,-0.986],[-3.399,-12.153]],"v":[[187.141,-223.116],[165.165,-216.281],[130.543,-201.992],[147.712,-175.17],[164.183,-147.391],[197.058,-143.694],[228.872,-161.17],[207.389,-188.846],[206.149,-205.347]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[9.75,2.5],[0,0],[2.5,-18.25],[0,0],[-3.25,-4.5],[-5.5,1.25],[-1.964,1.097],[-2.243,1.823],[-3,13]],"o":[[-9.75,-2.5],[0,0],[-2.5,18.25],[0,0],[3.25,4.5],[2.416,-0.549],[2.508,-1.401],[4,-3.25],[3,-13]],"v":[[189.75,-227.5],[170.75,-221.25],[150.5,-210.25],[164.75,-190.25],[164.5,-182.25],[180.5,-179.5],[187.006,-182.033],[194,-187],[204.75,-204.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.383,1.292],[0,0],[0.879,-7.256],[0,0],[-2.153,-0.994],[-1.933,0.497],[-0.595,0.382],[-0.788,0.725],[-1.054,5.168]],"o":[[-3.352,-1.28],[0,0],[-0.879,7.256],[0,0],[1.806,0.834],[0.849,-0.218],[0.76,-0.488],[1.406,-1.292],[1.054,-5.168]],"v":[[192.708,-227.815],[186.162,-228.362],[178.254,-220.609],[179.791,-211.365],[183.306,-208.334],[189.676,-208.135],[191.783,-209.04],[193.982,-210.868],[197.321,-218.422]],"c":true}]},{"t":27.6,"s":[{"i":[[0.04,-0.032],[0,0],[0.01,0.178],[0,0],[-0.026,0.024],[-0.023,-0.012],[-0.007,-0.009],[-0.009,-0.018],[-0.013,-0.127]],"o":[[-0.04,0.031],[0,0],[-0.01,-0.178],[0,0],[0.022,-0.02],[0.01,0.005],[0.009,0.012],[0.017,0.032],[0.013,0.127]],"v":[[194.808,-230.377],[194.73,-230.363],[194.635,-230.553],[194.654,-230.78],[194.696,-230.855],[194.771,-230.859],[194.797,-230.837],[194.823,-230.792],[194.862,-230.607]],"c":true}]}],"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 16","np":1,"cix":2,"bm":0,"ix":33,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[19.497,-10.412],[-2.09,-19.636],[-11.707,-0.981],[-14.375,23.627],[-0.061,0.498]],"o":[[-17.653,9.427],[2.09,19.636],[19.382,1.625],[6.975,-11.464],[-7.253,-23.059]],"v":[[86.403,-42.677],[62.773,4.63],[91.979,30.065],[149.125,-5.127],[152.753,-28.191]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[19.497,-10.412],[-2.09,-19.636],[-11.707,-0.981],[-14.375,23.627],[-0.061,0.498]],"o":[[-17.653,9.427],[2.09,19.636],[19.382,1.625],[6.975,-11.464],[-5.613,-26.672]],"v":[[116.653,-49.677],[93.023,-2.37],[122.229,23.065],[179.375,-12.127],[175.753,-29.691]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[21.958,2.531],[3.911,-19.356],[-10.87,-4.456],[-8.703,7.41],[-0.208,0.457]],"o":[[-11.227,-1.294],[-3.911,19.356],[17.997,7.377],[10.217,-8.699],[2.666,-27.126]],"v":[[133.727,-70.706],[108.49,-48.458],[133.87,-8.544],[182.257,-16.035],[184.084,-33.874]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[21.508,5.094],[3.911,-19.356],[-10.87,-4.456],[-8.703,7.41],[-0.208,0.457]],"o":[[-21.508,-5.094],[-3.911,19.356],[17.997,7.377],[10.217,-8.699],[10.166,-17.251]],"v":[[163.227,-72.956],[111.74,-40.208],[129.12,-6.794],[179.507,-13.035],[184.084,-33.874]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[12.949,3.067],[2.354,-11.653],[-10.063,-5.215],[-5.24,4.461],[-0.125,0.275]],"o":[[-12.949,-3.067],[-2.354,11.653],[4.274,2.215],[6.151,-5.237],[14.125,-15.725]],"v":[[163.128,-65.433],[131.979,-46.545],[144.851,-22.59],[167.436,-22.885],[172.75,-33.4]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5.5,1.25],[1,-4.75],[-4.75,-0.75],[-2.094,1.272],[0,1.586]],"o":[[-5.5,-1.25],[-1,4.75],[2.239,0.354],[2.349,-1.427],[0,-3]],"v":[[162.75,-74.25],[151.75,-66.5],[159.5,-57.5],[166.405,-59.232],[170.5,-64.25]],"c":true}]},{"t":24,"s":[{"i":[[0.07,0.016],[0.013,-0.06],[-0.06,-0.009],[-0.027,0.016],[0,0.02]],"o":[[-0.07,-0.016],[-0.013,0.06],[0.028,0.004],[0.03,-0.018],[0,-0.038]],"v":[[165.902,-76.353],[165.763,-76.255],[165.861,-76.141],[165.948,-76.163],[166,-76.226]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 15","np":1,"cix":2,"bm":0,"ix":34,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[22.19,-4.227],[-2.244,-13.318],[-9.957,-4.849],[-7.675,2.348],[-4.773,2.735],[-2.688,4.127],[-2.703,4.56],[3.226,5.97]],"o":[[-12.994,2.476],[2.218,13.162],[11.293,7.901],[5.656,-1.73],[3.603,-2.065],[2.436,-3.74],[4.724,-7.969],[-7.903,-14.625]],"v":[[-9.94,-106.523],[-38.468,-58.662],[-8.543,-23.901],[20.344,-23.27],[29.211,-38.226],[42.743,-48.042],[51.757,-59.122],[50.681,-96.633]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[20.853,6.188],[0.844,-11.669],[-1.039,-1.255],[-5.927,-5.411],[-5.501,0],[-4.3,2.401],[-2.552,0.467],[-0.17,6.784]],"o":[[-34.755,-10.313],[-0.746,10.322],[0.734,0.388],[4.279,3.907],[4.152,0],[4.357,-2.433],[9.113,-1.668],[0.415,-16.619]],"v":[[52.255,-110.437],[6.996,-85.822],[16.516,-67.388],[28.927,-56.089],[44.101,-49.647],[66.057,-52.7],[79.387,-57.832],[78.585,-84.237]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[20.853,6.188],[0.844,-11.669],[-1.039,-1.255],[-5.927,-5.411],[-5.501,0],[-4.3,2.401],[-2.552,0.467],[-0.17,6.784]],"o":[[-34.755,-10.313],[-0.746,10.322],[0.734,0.388],[4.279,3.907],[4.152,0],[4.357,-2.433],[9.113,-1.668],[0.415,-16.619]],"v":[[57.505,-112.687],[11.996,-85.822],[25.016,-76.888],[34.177,-58.339],[49.351,-51.897],[71.307,-54.95],[84.637,-60.082],[83.835,-86.487]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[21.509,3.242],[0.844,-11.669],[-1.039,-1.255],[-5.927,-5.411],[-5.501,0],[-4.3,2.401],[-2.552,0.467],[-0.17,6.784]],"o":[[-17.005,-2.563],[-0.746,10.322],[0.734,0.388],[4.279,3.907],[4.152,0],[4.357,-2.433],[9.113,-1.668],[0.415,-16.619]],"v":[[57.505,-112.687],[27.746,-86.072],[33.516,-72.388],[33.927,-61.339],[51.101,-53.647],[64.807,-55.7],[73.137,-66.832],[83.835,-86.487]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5.75,-0.25],[-0.75,-7],[-1.142,-2.496],[-1.348,-1.331],[-3.204,0],[-2.519,0.845],[-2.284,1.922],[-0.105,4.219]],"o":[[-5.75,0.25],[0.272,2.536],[0.822,1.797],[1.948,1.924],[2.308,0],[2.844,-0.954],[3.143,-2.645],[0.25,-10]],"v":[[60.75,-113.75],[45.25,-103],[47.33,-95.202],[50.569,-90.417],[58.25,-87.25],[65.643,-88.537],[73.554,-92.879],[79,-103.25]],"c":true}]},{"t":24,"s":[{"i":[[0.124,-0.005],[-0.016,-0.151],[-0.025,-0.054],[-0.029,-0.029],[-0.069,0],[-0.054,0.018],[-0.049,0.041],[-0.002,0.091]],"o":[[-0.124,0.005],[0.006,0.055],[0.018,0.039],[0.042,0.042],[0.05,0],[0.061,-0.021],[0.068,-0.057],[0.005,-0.216]],"v":[[65.351,-110.408],[65.016,-110.176],[65.061,-110.008],[65.131,-109.905],[65.297,-109.836],[65.456,-109.864],[65.627,-109.958],[65.745,-110.182]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 14","np":1,"cix":2,"bm":0,"ix":35,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[7.826,-4.646],[3.961,-9.15],[-0.479,-6.402],[-9.897,-11.999],[-17.187,5.575],[-3.221,11.042],[6.351,7.674]],"o":[[-7.826,4.646],[-4.121,9.519],[0.479,6.402],[9.897,11.999],[17.187,-5.575],[3.221,-11.042],[-6.351,-7.674]],"v":[[-107.814,180.826],[-133.249,191.17],[-143.701,231.067],[-132.527,256.967],[-91.484,254.589],[-66.161,231.195],[-76.548,193.768]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[8.81,-2.285],[6.351,-7.686],[1.321,-6.283],[-6.167,-14.279],[-18.06,0.571],[-6.167,9.71],[3.964,9.139]],"o":[[-8.81,2.285],[-6.607,7.996],[-1.321,6.283],[6.167,14.279],[18.06,-0.571],[6.167,-9.71],[-3.964,-9.139]],"v":[[-90.905,152.966],[-118.214,155.822],[-139.357,191.234],[-135.833,219.221],[-95.75,228.36],[-64.917,212.938],[-64.476,174.099]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[6.799,-1.549],[4.902,-5.21],[1.02,-4.259],[-4.759,-9.679],[-13.938,0.387],[-4.759,6.582],[3.06,6.195]],"o":[[-6.799,1.549],[-5.099,5.42],[-1.02,4.259],[4.759,9.679],[13.938,-0.387],[4.759,-6.582],[-3.06,-6.195]],"v":[[-95.566,163.41],[-116.643,165.346],[-132.96,189.35],[-130.241,208.321],[-99.306,214.516],[-75.509,204.062],[-75.169,177.735]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[5,-1],[3.605,-3.364],[0.75,-2.75],[-3.5,-6.25],[-10.25,0.25],[-3.5,4.25],[2.25,4]],"o":[[-5,1],[-3.75,3.5],[-0.75,2.75],[3.5,6.25],[10.25,-0.25],[3.5,-4.25],[-2.25,-4]],"v":[[-87.5,151.25],[-103,152.5],[-115,168],[-113,180.25],[-90.25,184.25],[-72.75,177.5],[-72.5,160.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5,-1],[3.605,-3.364],[0.75,-2.75],[-3.5,-6.25],[-10.25,0.25],[-3.5,4.25],[2.25,4]],"o":[[-5,1],[-3.75,3.5],[-0.75,2.75],[3.5,6.25],[10.25,-0.25],[3.5,-4.25],[-2.25,-4]],"v":[[-77,126.25],[-92.5,127.5],[-104.5,143],[-102.5,155.25],[-79.75,159.25],[-62.25,152.5],[-62,135.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.8,"s":[{"i":[[4.64,0.341],[4.401,-3.422],[0.38,-4.397],[-3.315,-2.889],[-5.611,1.037],[-2.31,2.912],[1.167,2.074]],"o":[[-4.787,-0.352],[-3.375,2.625],[-0.278,3.213],[2.8,2.44],[5.228,-0.966],[1.774,-2.236],[-1.167,-2.074]],"v":[[-73.338,125.852],[-86,128.625],[-90.222,137.287],[-86.685,145.639],[-74.889,148.213],[-64.69,141.963],[-64.435,132.648]],"c":true}]},{"t":25.2,"s":[{"i":[[0.185,-0.037],[0.133,-0.125],[0.028,-0.102],[-0.13,-0.231],[-0.38,0.009],[-0.13,0.157],[0.083,0.148]],"o":[[-0.185,0.037],[-0.139,0.13],[-0.028,0.102],[0.13,0.231],[0.38,-0.009],[0.13,-0.157],[-0.083,-0.148]],"v":[[-70.926,130.954],[-71.5,131],[-71.944,131.575],[-71.87,132.028],[-71.028,132.176],[-70.38,131.926],[-70.37,131.297]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":7.2,"s":[0,0],"h":1},{"t":8.4,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 13","np":1,"cix":2,"bm":0,"ix":36,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[24.395,-3.579],[-0.4,-14.825],[-23.995,2.556],[-1.2,11.758]],"o":[[-24.395,3.579],[0.4,14.825],[23.995,-2.556],[1.2,-11.758]],"v":[[69.726,83.829],[35.461,114.659],[67.455,150.444],[104.989,125.709]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[24.395,-3.579],[-0.4,-14.825],[-23.995,2.556],[-1.2,11.758]],"o":[[-24.395,3.579],[0.4,14.825],[23.995,-2.556],[1.2,-11.758]],"v":[[77.976,92.079],[43.711,122.909],[75.705,158.694],[113.239,133.959]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[22.551,-3.308],[-0.37,-13.704],[-22.181,2.363],[-1.109,10.869]],"o":[[-22.551,3.308],[0.37,13.704],[22.181,-2.363],[1.109,-10.869]],"v":[[91.794,78.058],[60.12,106.557],[89.694,139.637],[124.391,116.772]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[18.263,-2.275],[-0.299,-9.425],[-17.964,1.625],[-0.898,7.475]],"o":[[-18.263,2.275],[0.299,9.425],[17.964,-1.625],[0.898,-7.475]],"v":[[108.952,70.525],[83.299,90.125],[107.251,112.875],[135.352,97.15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[15.25,-1.75],[-0.25,-7.25],[-15,1.25],[-0.75,5.75]],"o":[[-15.25,1.75],[0.25,7.25],[15,-1.25],[0.75,-5.75]],"v":[[114,61.5],[94.25,76],[114.25,93.5],[135,80.25]],"c":true}]},{"t":25.2,"s":[{"i":[[0.274,-0.031],[-0.004,-0.13],[-0.269,0.022],[-0.013,0.103]],"o":[[-0.274,0.031],[0.004,0.13],[0.269,-0.022],[0.013,-0.103]],"v":[[116.859,56.217],[116.505,56.478],[116.864,56.792],[117.237,56.554]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":24,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 12","np":1,"cix":2,"bm":0,"ix":37,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[11.765,-1.232],[2.886,-2.465],[2.325,-3.877],[0.628,-3.955],[0,0],[5.488,-4.364],[-3.396,-4.04],[-0.378,-14.312],[0,0],[-20.052,-20.694],[-2.657,-6.08],[0,0],[-1.142,-15.963],[-32.962,-25.988],[-2.318,4.72],[-2.507,6.398],[0,0],[-0.334,24.061],[0,0],[11.918,20.894],[0.785,1.247],[4.382,4.186],[0,0],[31.795,4.928]],"o":[[-9.437,0.988],[-3.842,3.282],[-3.04,5.069],[-0.951,5.989],[0,0],[-6.07,4.827],[1.141,1.357],[0.543,20.568],[0,0],[4.697,4.847],[4.992,11.425],[0,0],[-0.005,0.563],[19.126,15.08],[4.017,-8.18],[3.185,-8.127],[0,0],[0.223,-16.037],[0,0],[-10.507,-18.419],[-1.15,-1.825],[-5.644,-5.392],[0,0],[-4.782,-0.741]],"v":[[-152.765,-232.518],[-167.393,-224.752],[-172.123,-210.874],[-178.438,-198.03],[-176.488,-187.648],[-185.268,-184.87],[-188.837,-165.912],[-191.293,-145.818],[-169.545,-121.198],[-180.928,-84.533],[-183.742,-60.925],[-166.062,-49.813],[-148.921,-45.458],[-118.319,-20.189],[-63.118,-27.538],[-42.312,-38.602],[-23.523,-61.478],[-26.487,-86.588],[-21.151,-114.618],[-39.243,-152.831],[-70.53,-172.122],[-76.978,-186.25],[-97.896,-196.65],[-138.837,-227.801]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[12.034,2.407],[5.333,-0.671],[4.594,-2.134],[2.309,-1.78],[0,0],[6.119,-3.423],[-2.701,-4.535],[7.637,-3.265],[0,0],[-16.456,-23.654],[-5.243,-4.066],[0,0],[1.445,-15.939],[-28.344,-30.959],[-3.048,4.285],[-3.505,5.91],[0,0],[-4.206,23.692],[0,0],[1.448,17.282],[0.574,1.357],[3.65,4.838],[0,0],[19.235,15.389]],"o":[[-6.371,-1.274],[-6.475,0.815],[-4.89,2.271],[-1.783,1.374],[0,0],[-6.768,3.786],[0.907,1.523],[-4.622,1.976],[0,0],[3.854,5.54],[10.934,8.48],[0,0],[-0.096,0.555],[16.447,17.964],[5.283,-7.426],[4.453,-7.508],[0,0],[2.804,-15.792],[0,0],[-0.609,-7.268],[-0.841,-1.987],[-4.702,-6.231],[0,0],[-5.56,-4.449]],"v":[[-130.16,-238.232],[-147.771,-238.9],[-164.472,-234.052],[-175.388,-227.463],[-178.115,-225.167],[-185.732,-219.036],[-190.445,-196.797],[-196.137,-186.485],[-200.141,-172.832],[-206.794,-123.596],[-217.529,-101.681],[-182.922,-87.559],[-167.904,-70.055],[-144.447,-28.464],[-88.783,-26.824],[-75.49,-53.596],[-80.865,-93.357],[-76.724,-124.71],[-83.447,-146.609],[-73.948,-165.032],[-81.112,-172.576],[-82.4,-186.088],[-98.046,-189.047],[-104.315,-227.576]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[12.034,2.407],[4.969,-1.649],[3.954,-3.852],[1.839,-3.042],[0,0],[6.232,-3.214],[-2.701,-4.535],[7.637,-3.265],[0,0],[-11.97,-31.502],[-5.243,-4.066],[0,0],[1.445,-15.939],[-41.803,-3.786],[-3.048,4.285],[-3.505,5.91],[0,0],[-4.206,23.692],[0,0],[1.448,17.282],[0.574,1.357],[3.65,4.838],[0,0],[19.235,14.781]],"o":[[-6.371,-1.274],[-6.033,2.002],[-4.209,4.1],[-1.42,2.348],[0,0],[-19.908,10.266],[0.907,1.523],[-4.622,1.976],[0,0],[2.397,6.309],[10.934,8.48],[0,0],[-0.096,0.555],[6.955,0.63],[5.283,-7.426],[4.453,-7.508],[0,0],[2.804,-15.792],[0,0],[-0.609,-7.268],[-0.841,-1.987],[-4.702,-6.231],[0,0],[-5.56,-4.273]],"v":[[-130.41,-243.232],[-147.423,-242.293],[-162.407,-232.838],[-171.484,-221.313],[-173.615,-217.417],[-185.732,-218.036],[-201.695,-187.797],[-205.637,-174.235],[-204.891,-162.832],[-218.294,-120.096],[-210.779,-101.181],[-183.172,-92.559],[-168.154,-75.055],[-135.447,-49.714],[-112.783,-52.824],[-90.24,-69.346],[-88.615,-86.357],[-85.474,-112.21],[-92.697,-151.859],[-80.698,-174.282],[-86.362,-180.326],[-88.4,-191.088],[-98.296,-196.297],[-104.565,-232.865]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[6.613,1.196],[4.422,-0.742],[2.977,-2.17],[1.118,-1.787],[0,0],[13.447,-11.171],[-3.532,-3.922],[0.825,-2.404],[0,0],[-17.877,-28.567],[-5.935,-2.967],[0,0],[-13.144,-9.131],[-8.775,0.195],[-5.065,5.351],[0.249,7.31],[0,0],[0.489,24.058],[0,0],[5.058,15.23],[0.828,1.219],[3.458,4.088],[0,0],[12.601,7.044]],"o":[[-6.394,-1.157],[-5.369,0.901],[-3.168,2.31],[-0.863,1.379],[0,0],[-17.229,14.313],[1.186,1.317],[-1.632,4.754],[0,0],[3.58,5.721],[12.377,6.188],[0,0],[7.194,4.997],[12.518,-0.279],[7.415,-7.835],[-0.157,-4.617],[0,0],[-0.326,-16.036],[0,0],[-2.299,-6.922],[-1.212,-1.785],[-5.041,-5.96],[0,0],[-3.643,-2.036]],"v":[[-138.452,-212.541],[-154.597,-212.929],[-166.974,-207.904],[-173.233,-201.254],[-174.449,-198.953],[-202.197,-194.329],[-210.501,-155.477],[-209.118,-148.808],[-212.969,-145.083],[-218.873,-98.301],[-205.508,-84.984],[-179.299,-81.909],[-162.791,-57.911],[-132.671,-51.056],[-107.083,-60.579],[-98.804,-86.682],[-99.662,-94.46],[-91.174,-120.464],[-102.281,-139.311],[-92.031,-167.266],[-99.788,-175.965],[-102.708,-185.338],[-113.279,-190.334],[-123.283,-207.532]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[4.936,1.268],[3.091,-0.431],[1.768,-1.698],[0.482,-1.457],[0,0],[16.303,-13.991],[-3.532,-3.572],[0.825,-2.19],[0,0],[-17.877,-26.021],[-8.173,-2.309],[0,0],[-9.269,-7.414],[-10.978,2.297],[-3.034,2.263],[-0.062,2.286],[0,0],[11.424,60.726],[0,0],[11.14,5.06],[1.849,0.102],[0.201,-0.105],[0,0],[9.846,6.696]],"o":[[-4.887,-1.256],[-3.753,0.523],[-1.882,1.808],[-0.372,1.125],[0,0],[-16.303,13.991],[1.186,1.2],[-1.632,4.33],[0,0],[4.675,6.805],[11.138,3.147],[0,0],[7.706,6.163],[7.136,-1.493],[4.441,-3.313],[0.039,-1.444],[0,0],[-3.873,-20.589],[0,0],[-5.967,-2.71],[-1.206,-0.067],[-0.066,0.035],[0,0],[-2.846,-1.936]],"v":[[-149.952,-196.344],[-161.817,-197.38],[-169.916,-193.689],[-173.242,-188.359],[-173.699,-186.472],[-209.947,-183.399],[-215.751,-148.01],[-219.118,-143.073],[-218.969,-135.354],[-223.623,-97.979],[-202.342,-84.901],[-180.549,-81.681],[-165.407,-65.193],[-136.671,-56.31],[-121.834,-62.198],[-116.39,-71.391],[-116.662,-73.758],[-87.924,-125.226],[-115.531,-151.729],[-116.281,-172.411],[-127.472,-175.963],[-129.435,-175.719],[-129.529,-175.661],[-138.421,-191.4]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[4.541,1.065],[3.373,-0.781],[2.556,-2.162],[1.126,-1.764],[0,0],[15,-11.75],[-3.25,-3],[-1.383,-0.718],[0,0],[-21.75,-8],[-5.283,0.475],[0,0],[-5.789,-2.76],[-10.1,1.929],[-3.017,4.091],[-0.373,4.98],[0,0],[2,17.5],[0,0],[10.25,4.25],[3.049,-0.642],[0.545,-0.282],[0,0],[9.183,7.211]],"o":[[-4.496,-1.055],[-4.095,0.948],[-2.721,2.301],[-0.869,1.362],[0,0],[-15,11.75],[1.126,1.039],[2.609,1.356],[0,0],[9.205,3.386],[7.201,-0.647],[0,0],[4.812,2.294],[6.566,-1.254],[4.417,-5.99],[0.235,-3.145],[0,0],[-2,-17.5],[0,0],[-5.49,-2.276],[-1.99,0.419],[-0.179,0.093],[0,0],[-2.655,-2.084]],"v":[[-159,-189.75],[-170.786,-189.932],[-180.732,-184.859],[-186.464,-178.269],[-187.75,-176],[-222.25,-167.75],[-220,-129],[-216.066,-126.353],[-211,-124.25],[-195.5,-94.75],[-173.777,-91.274],[-163,-94.5],[-154.826,-87.939],[-132.75,-86],[-118.713,-94.69],[-112.587,-113.251],[-112.5,-118.5],[-98.25,-138],[-116.75,-153.75],[-122.5,-166.5],[-135.597,-167.973],[-139.479,-166.649],[-139.75,-166.5],[-148.332,-184.844]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.68,0.005],[2.525,-1.249],[1.705,-2.198],[0.644,-1.615],[0,0],[9.199,-12.155],[-3.067,-1.788],[-0.805,-0.629],[0,0],[-12.708,-13.22],[-2.645,-0.511],[0,0],[-4.687,-1.26],[-5.381,2.276],[-2.003,2.121],[-0.473,1.98],[0,0],[-6.425,10.381],[0,0],[10.145,12.845],[4.118,0.611],[0.879,-0.115],[0,0],[10.244,2.557]],"o":[[-3.644,-0.005],[-3.066,1.517],[-1.815,2.34],[-0.497,1.247],[0,0],[-9.199,12.155],[1.062,0.619],[1.519,1.188],[0,0],[2.473,2.572],[3.604,0.696],[0,0],[3.896,1.047],[3.972,-1.68],[2.932,-3.106],[0.299,-1.25],[0,0],[6.315,-10.203],[0,0],[-4.482,-5.675],[-2.688,-0.399],[-0.289,0.038],[0,0],[-2.961,-0.739]],"v":[[-184.07,-192.846],[-193.279,-190.801],[-200.356,-184.908],[-203.949,-178.589],[-204.65,-176.541],[-225.194,-164.553],[-224.218,-139.579],[-221.388,-137.646],[-218.913,-135.465],[-213.092,-115.328],[-204.97,-111.06],[-198.432,-110.919],[-190.709,-107.372],[-176.395,-108.264],[-167.6,-114.163],[-163.015,-122.407],[-162.699,-124.437],[-147.575,-134.631],[-143.277,-151.499],[-137.895,-175.095],[-151.97,-183.355],[-157.647,-183.457],[-158.091,-183.389],[-174.093,-191.623]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[2.481,0.004],[1.839,-0.89],[1.39,-1.565],[0.61,-1.15],[0,0],[5.192,-5.22],[-0.392,-2.361],[-0.407,-0.912],[0,0],[-8.567,-8.912],[-2.034,-1.213],[0,0],[-3.794,-0.347],[-3.628,1.535],[-1.529,0.915],[-0.569,0.615],[0,0],[-4.332,6.998],[0,0],[-0.154,6.636],[2.063,1.1],[0.552,0.192],[0,0],[6.75,2.203]],"o":[[-2.456,-0.003],[-2.233,1.08],[-1.479,1.666],[-0.471,0.888],[0,0],[-7.247,7.286],[0.168,1.011],[0.769,1.721],[0,0],[1.667,1.734],[2.771,1.653],[0,0],[3.154,0.289],[2.678,-1.133],[2.239,-1.339],[0.359,-0.389],[0,0],[4.257,-6.878],[0,0],[0.048,-2.069],[-1.346,-0.718],[-0.181,-0.063],[0,0],[-1.951,-0.637]],"v":[[-192.218,-202.604],[-198.651,-201.147],[-204.067,-196.951],[-207.179,-192.452],[-207.876,-190.994],[-221.192,-186.78],[-225.084,-169.874],[-224.143,-166.922],[-222.46,-163.892],[-213.764,-154.008],[-207.82,-149.51],[-202.667,-146.833],[-196.128,-145.497],[-185.468,-146.898],[-179.233,-149.994],[-175.257,-153.002],[-174.777,-153.604],[-170.337,-164.929],[-171.9,-178.637],[-167.589,-188.137],[-171.814,-192.97],[-174.996,-194.357],[-175.28,-194.453],[-185.566,-201.552]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[1.013,0.001],[0.782,-0.113],[0.623,-0.199],[0.29,-0.146],[0,0],[2.12,-2.132],[-0.16,-0.964],[-0.166,-0.373],[0,0],[-3.499,-3.64],[-0.746,-0.453],[0,0],[-1.549,-0.142],[-1.482,0.627],[-0.675,0.374],[-0.302,0.251],[0,0],[-0.884,2.932],[0,0],[1.364,2.404],[0.583,0.671],[0.135,0.143],[0,0],[3.032,0.597]],"o":[[-1.003,-0.001],[-0.95,0.137],[-0.663,0.212],[-0.224,0.113],[0,0],[-2.959,2.976],[0.068,0.413],[0.314,0.703],[0,0],[0.681,0.708],[1.017,0.617],[0,0],[1.288,0.118],[1.094,-0.463],[0.988,-0.547],[0.191,-0.159],[0,0],[0.953,-3.163],[0,0],[-0.417,-0.735],[-0.381,-0.438],[-0.044,-0.047],[0,0],[-0.877,-0.172]],"v":[[-200.705,-209.381],[-203.383,-209.197],[-205.743,-208.664],[-207.172,-208.092],[-207.508,-207.906],[-213.456,-203.633],[-214.127,-196.014],[-213.743,-194.808],[-213.056,-193.571],[-209.096,-189.33],[-206.826,-187.572],[-204.972,-186.604],[-202.302,-186.059],[-197.948,-186.631],[-195.316,-187.895],[-193.444,-189.123],[-193.174,-189.369],[-189.829,-193.382],[-188.834,-199.695],[-190.136,-203.881],[-191.862,-206.179],[-192.698,-207.103],[-192.767,-207.175],[-197.857,-209.095]],"c":true}]},{"t":31.2,"s":[{"i":[[-0.003,0],[-0.002,0],[-0.002,0.001],[-0.001,0],[0,0],[-0.006,0.006],[0,0.003],[0.001,0.001],[0,0],[0.011,0.011],[0.002,0.001],[0,0],[0.005,0],[0.005,-0.002],[0.002,-0.001],[0.001,-0.001],[0,0],[0.003,-0.009],[0,0],[-0.004,-0.007],[-0.002,-0.002],[0,0],[0,0],[-0.009,-0.002]],"o":[[0.003,0],[0.003,0],[0.002,-0.001],[0.001,0],[0,0],[0.009,-0.009],[0,-0.001],[-0.001,-0.002],[0,0],[-0.002,-0.002],[-0.003,-0.002],[0,0],[-0.004,0],[-0.003,0.001],[-0.003,0.002],[-0.001,0],[0,0],[-0.003,0.01],[0,0],[0.001,0.002],[0.001,0.001],[0,0],[0,0],[0.003,0.001]],"v":[[-208.464,-207.137],[-208.456,-207.138],[-208.448,-207.139],[-208.444,-207.141],[-208.443,-207.141],[-208.425,-207.154],[-208.423,-207.178],[-208.424,-207.181],[-208.426,-207.185],[-208.438,-207.198],[-208.445,-207.203],[-208.451,-207.206],[-208.459,-207.208],[-208.472,-207.206],[-208.48,-207.202],[-208.486,-207.199],[-208.487,-207.198],[-208.497,-207.186],[-208.5,-207.166],[-208.496,-207.154],[-208.491,-207.147],[-208.488,-207.144],[-208.488,-207.144],[-208.472,-207.138]],"c":true}]}],"ix":2},"nm":"Path 28","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":30,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":1,"cix":2,"bm":0,"ix":38,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[18.8,2.55],[4.4,-10.1],[-0.204,0],[-2.635,-12.455],[0,0],[-7.853,-2.541],[0,0],[-5.45,-4.8],[0,0],[-17.835,-1.411],[-41.5,17],[0,0],[-1.143,12.819],[12.739,5.935],[0,0],[13.343,9.406],[0,0]],"o":[[-24.03,-3.259],[-6.167,12.35],[0,0],[2.75,13],[4.85,5.2],[6.8,2.2],[0,0],[3.625,3.192],[0,0],[1.547,0.122],[19.224,-7.875],[0,0],[1.737,-19.482],[-20.075,-9.353],[0,0],[-15.25,-10.75],[0,0]],"v":[[-175.55,-78.3],[-218.9,-73.9],[-217.55,-51.5],[-220.25,-27.75],[-209.1,-5.45],[-191.3,4.3],[-179.15,6.75],[-172.8,14.55],[-163,16.4],[-144.297,36.628],[-96.75,39],[-85,6.25],[-75,-14],[-84.5,-42.05],[-108.4,-44.05],[-118.55,-64.8],[-156.9,-71.1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[24.25,0],[6.519,-15.973],[-0.204,0],[-2.635,-12.455],[0,0],[-4.75,-6.75],[0,0],[-14,-3.5],[0,0],[-17.853,1.172],[-8.599,10.384],[0,0],[-6.25,11.25],[7.272,13.505],[0,0],[13.343,9.406],[0,0]],"o":[[-24.25,0],[-6.836,16.75],[0,0],[2.75,13],[-1.5,1.5],[7.025,9.983],[0,0],[7.53,1.883],[0,0],[10.63,-0.698],[13.25,-16],[0,0],[6.25,-11.25],[-10.5,-19.5],[0,0],[-15.25,-10.75],[0,0]],"v":[[-210.75,-109.75],[-250.5,-83.5],[-243.25,-60.5],[-242.75,-47],[-231.75,-32],[-228,-1.75],[-209.5,12.75],[-196.75,21.25],[-176.75,33.5],[-158.147,36.328],[-116.5,27],[-106,-4.5],[-95,-24.5],[-109.5,-60.5],[-129,-78.25],[-146.25,-94],[-183.5,-96.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[24.25,0],[0.25,-17.25],[0,0],[-2.635,-12.455],[0,0],[-4.75,-6.75],[0,0],[-14,-3.5],[0,0],[-17.853,1.172],[-8.599,10.384],[0,0],[-6.25,11.25],[7.272,13.505],[0,0],[13.343,9.406],[0,0]],"o":[[-24.25,0],[-0.25,17.25],[0,0],[2.75,13],[-1.5,1.5],[7.025,9.983],[0,0],[7.53,1.883],[0,0],[10.63,-0.698],[13.25,-16],[0,0],[6.25,-11.25],[-10.5,-19.5],[0,0],[-15.25,-10.75],[0,0]],"v":[[-224.5,-109],[-258.75,-80.5],[-247.5,-51],[-246.25,-34],[-239.25,-19.5],[-233.75,-0.5],[-220,12.25],[-206.75,18.75],[-194,27.5],[-166.147,33.828],[-137,26],[-130.25,-10.75],[-116.75,-27.75],[-122.5,-57],[-145.75,-75.75],[-164,-89.25],[-191.5,-99]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[24.25,0],[0.25,-17.25],[0,0],[-2.635,-12.455],[0,0],[-4.75,-6.75],[0,0],[-14,-3.5],[0,0],[-17.853,1.172],[-8.599,10.384],[0,0],[-6.25,11.25],[7.272,13.505],[0,0],[13.343,9.406],[0,0]],"o":[[-24.25,0],[-0.25,17.25],[0,0],[2.75,13],[-1.5,1.5],[7.025,9.983],[0,0],[7.53,1.883],[0,0],[10.63,-0.698],[13.25,-16],[0,0],[6.25,-11.25],[-10.5,-19.5],[0,0],[-15.25,-10.75],[0,0]],"v":[[-224.5,-109],[-267.25,-73.75],[-255,-45.25],[-257.25,-33.25],[-245,-12.5],[-241.5,4.75],[-224.5,19],[-210.25,27.25],[-197.25,25],[-169.647,29.828],[-146.75,19.25],[-142,-6.5],[-131.5,-23],[-130.75,-53],[-153.25,-68.25],[-164,-89.25],[-191.5,-99]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[24.25,0],[0,-8.5],[0,0],[-1.343,-12.659],[0,0],[-7.701,-9.418],[0,0],[-22.481,-1.183],[0,0],[-3.145,0.097],[-8.599,10.384],[0,0],[-6.25,11.25],[7.272,13.505],[0,0],[13.343,9.406],[0,0]],"o":[[-24.25,0],[0,8.5],[0,0],[1.75,16.5],[-1.063,-0.532],[14.604,17.86],[0,0],[14.25,0.75],[0,0],[10.647,-0.328],[13.25,-16],[0,0],[6.25,-11.25],[-10.5,-19.5],[0,0],[-15.25,-10.75],[0,0]],"v":[[-230.25,-115.75],[-260,-99.5],[-256.75,-86],[-268.75,-65.25],[-257,-45.25],[-251,-8.5],[-226.75,12.75],[-203.5,23.5],[-184.25,15.5],[-171.897,16.828],[-148.75,1.5],[-149.75,-30.75],[-127,-37.25],[-126.5,-66],[-155.25,-79],[-166,-100],[-196.25,-103.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[24.25,0],[0,-8.5],[0,0],[-4.25,-12],[0,0],[-5,-7.5],[0,0],[-29.204,-1.659],[0,0],[-3.131,-0.308],[-8.599,10.384],[0,0],[-6.25,11.25],[14.5,5],[0,0],[8.5,7.5],[0,0]],"o":[[-24.25,0],[0,8.5],[0,0],[4.25,12],[0,0],[5,7.5],[0,0],[22,1.25],[0,0],[5.79,0.569],[13.25,-16],[0,0],[6.25,-11.25],[-14.5,-5],[0,0],[-8.5,-7.5],[0,0]],"v":[[-232.75,-128.25],[-266.25,-103.5],[-260.5,-89.75],[-262.25,-66.5],[-253.25,-53],[-254.5,-34.75],[-242,-26],[-216.25,-2.5],[-188,-13.75],[-182.897,-12.672],[-158.75,-23.5],[-151.75,-52.75],[-131,-65.25],[-144.5,-95.25],[-175,-100.5],[-173.75,-119.5],[-206.25,-122.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[14.664,1.76],[0,-8.5],[0,0],[-5.577,-16.986],[0,0],[-5,-7.5],[0,0],[-15.856,-2.478],[0,0],[-7.014,-4.733],[-8.5,11.25],[0,0],[-6.25,11.25],[14.5,5],[0,0],[8.914,7.003],[0,0]],"o":[[-18.75,-2.25],[0,8.5],[0,0],[5.5,16.75],[0,0],[5,7.5],[0,0],[8,1.25],[0,0],[7.095,4.787],[7.535,-9.973],[0,0],[6.25,-11.25],[-14.5,-5],[0,0],[-7,-5.5],[0,0]],"v":[[-244.75,-127],[-270.75,-108],[-265.75,-93.25],[-271.25,-68.5],[-256,-54],[-251.75,-44.25],[-240.5,-36.5],[-223.75,-28.25],[-209.5,-32.25],[-203.055,-18.918],[-171.5,-23.75],[-181.75,-49],[-174.25,-59],[-185.75,-88.5],[-203.75,-91.5],[-206.75,-104],[-220.75,-105.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[10.417,4.435],[0.641,-13.462],[0,0],[-4.278,-12.367],[0,0],[-3.836,-5.46],[0,0],[-3.888,0.217],[0,0],[-5.281,3.597],[-6.52,8.191],[0,0],[-2.858,3.676],[6.712,9.582],[0,0],[9.321,-4.133],[0,0]],"o":[[-18.529,-7.888],[-0.335,7.029],[0,0],[4.219,12.195],[0,0],[3.836,5.46],[0,0],[3.356,-0.187],[0,0],[5.987,-4.078],[5.78,-7.261],[0,0],[4.39,-5.646],[-6.824,-9.742],[0,0],[-6.123,2.715],[0,0]],"v":[[-240.221,-140.112],[-269.915,-123.779],[-261.83,-108.79],[-270.549,-92.771],[-260.535,-82.214],[-251.84,-76.616],[-240.211,-68.473],[-229.362,-65.467],[-222.43,-67.129],[-213.237,-71.672],[-203.28,-79.941],[-200.393,-88.324],[-190.89,-92.854],[-190.462,-115.832],[-201.02,-125.516],[-217.571,-125.117],[-228.06,-118.141]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[2.23,-0.201],[2.838,-7.443],[0,0],[-2.529,-7.309],[0,0],[-3.733,-1.272],[0,0],[-2.274,-0.359],[0,0],[-3.121,2.126],[-3.854,4.841],[0,0],[-1.689,2.172],[5.984,3.463],[0,0],[5.509,-2.443],[0,0]],"o":[[-4.007,0.362],[-1.527,4.006],[0,0],[2.493,7.207],[0,0],[5.992,2.042],[0,0],[4.457,0.703],[0,0],[3.538,-2.41],[3.416,-4.291],[0,0],[2.595,-3.337],[-6.533,-3.78],[0,0],[-3.619,1.605],[-3.128,-2.433]],"v":[[-252.716,-140.001],[-267.163,-130.792],[-264.851,-120.592],[-269.299,-107.59],[-263.631,-99.101],[-256.992,-95.042],[-249.619,-91.98],[-242.957,-88.453],[-233.86,-87.186],[-224.177,-90.621],[-215.793,-98.008],[-210.586,-106.712],[-203.72,-114.14],[-208.967,-128.97],[-220.706,-133.693],[-228.329,-136.867],[-239.369,-135.427]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31.2,"s":[{"i":[[3.759,-1.739],[1.51,-4.153],[0,0],[-1.462,-4.306],[0,0],[-2.12,-0.737],[0,0],[-1.256,-0.355],[0,0],[-1.022,1.912],[-2.164,2.873],[0,0],[-2.078,4.123],[1.757,3.65],[0,0],[3.096,0.86],[0,0]],"o":[[-3.069,1.42],[-0.861,2.367],[0,0],[1.442,4.246],[0,0],[3.403,1.183],[0,0],[2.154,0.608],[0,0],[1.023,-1.914],[1.918,-2.547],[0,0],[1.123,-2.227],[-1.743,-3.623],[0,0],[-2.168,-0.602],[-1.782,-1.425]],"v":[[-259.009,-139.136],[-266.886,-132.091],[-267.985,-127.024],[-267.655,-117.806],[-266.284,-113.69],[-262.257,-109.944],[-257.567,-108.415],[-254.154,-106.733],[-248.495,-105.77],[-242.148,-108.711],[-238.781,-114.896],[-236.935,-120.436],[-231.672,-125.998],[-231.978,-133.194],[-238.899,-136.649],[-242.708,-139.556],[-249.377,-139.82]],"c":true}]},{"t":33.6,"s":[{"i":[[-0.008,0.004],[-0.003,0.008],[0,0],[0.003,0.009],[0,0],[0.004,0.001],[0,0],[0.003,0.001],[0,0],[0.002,-0.004],[0.004,-0.006],[0,0],[0.004,-0.008],[-0.004,-0.007],[0,0],[-0.006,-0.002],[0,0]],"o":[[0.006,-0.003],[0.002,-0.005],[0,0],[-0.003,-0.009],[0,0],[-0.007,-0.002],[0,0],[-0.004,-0.001],[0,0],[-0.002,0.004],[-0.004,0.005],[0,0],[-0.002,0.005],[0.004,0.007],[0,0],[0.004,0.001],[0.004,0.003]],"v":[[-256.311,-134.975],[-256.296,-134.993],[-256.292,-135.002],[-256.295,-135.022],[-256.297,-135.03],[-256.306,-135.038],[-256.315,-135.041],[-256.322,-135.044],[-256.333,-135.046],[-256.348,-135.042],[-256.358,-135.031],[-256.366,-135.019],[-256.373,-135.005],[-256.371,-134.989],[-256.357,-134.978],[-256.346,-134.973],[-256.332,-134.971]],"c":true}]}],"ix":2},"nm":"Path 27","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":33.6,"s":[100,100],"h":1},{"t":34.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":1,"cix":2,"bm":0,"ix":39,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[4.677,-9.866],[0,0],[-0.393,-11.162],[-3.768,-6.909],[-17.626,-9.255],[0,0],[-10.686,15.097],[15.15,17.384],[0.945,0.316]],"o":[[-7.524,15.871],[0,0],[0.626,17.781],[0,0],[29.357,15.415],[0,0],[9.104,-12.862],[-27.747,-31.838],[-4.116,-1.087]],"v":[[-47.427,-162.884],[-52.357,-133.002],[-60.275,-116.429],[-32.506,-95.119],[-11.107,-60.165],[14.518,-79.102],[45.936,-95.847],[39.6,-153.134],[-17.695,-179.316]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[4.677,-9.866],[0,0],[-0.874,-11.135],[0,0],[-19.335,-4.74],[0,0],[-10.686,15.097],[15.15,17.384],[0.945,0.316]],"o":[[-7.524,15.871],[0,0],[1.525,19.429],[0,0],[23.107,5.665],[0,0],[9.104,-12.862],[-27.747,-31.838],[-4.116,-1.087]],"v":[[-40.677,-166.884],[-39.357,-145.252],[-46.525,-129.179],[-32.006,-107.369],[-10.857,-81.915],[16.518,-97.102],[47.186,-112.347],[38.35,-164.384],[-24.195,-175.316]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[17.5,1.5],[0,0],[8.5,-25],[0,0],[-19.75,-2.5],[0,0],[-11.75,10.5],[0.75,11.25],[0.25,4.25]],"o":[[-17.5,-1.5],[0,0],[-8.5,25],[0,0],[19.75,2.5],[0,0],[11.75,-10.5],[-0.75,-11.25],[-0.25,-4.25]],"v":[[26.75,-192],[0.25,-181.5],[-31.75,-162],[-19.75,-126],[-5.25,-110],[22.5,-119.75],[45.25,-126],[55.75,-155],[50.5,-173.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[11.562,1.075],[0,0],[10.426,-17.729],[0,0],[-20.762,-11.546],[0,0],[-7.335,9.841],[0.584,8.763],[1.313,3.72]],"o":[[-13.622,-1.267],[0,0],[-5.121,8.708],[0.201,0.1],[21.184,11.781],[0,0],[5.652,-7.584],[-0.584,-8.763],[-1.104,-3.127]],"v":[[27.188,-199.825],[4.046,-190.897],[-20.879,-181.708],[-21.532,-165.416],[-11.238,-133.454],[15.627,-137.548],[32.598,-145.666],[49.026,-167.755],[46.687,-185.72]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[7.357,0.684],[0,0],[6.635,-11.282],[0,0],[-15.609,-7.439],[0,0],[-4.668,6.262],[-0.812,6.844],[0.835,2.367]],"o":[[-8.668,-0.806],[0,0],[-3.259,5.541],[0.128,0.064],[11.287,5.379],[0,0],[3.597,-4.826],[0.659,-5.549],[-0.702,-1.99]],"v":[[31.854,-210.95],[17.128,-211.154],[-0.005,-199.739],[-3.443,-189.85],[7.403,-168.716],[26.407,-166.071],[39.592,-176.01],[43.841,-190.543],[43.148,-202.133]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[4.886,0.431],[0,0],[4.406,-7.108],[0,0],[-10.365,-4.687],[0,0],[-3.099,3.945],[-0.539,4.312],[0.555,1.492]],"o":[[-5.756,-0.508],[0,0],[-2.164,3.491],[0.085,0.04],[7.495,3.389],[0,0],[2.388,-3.04],[0.437,-3.496],[-0.466,-1.254]],"v":[[39.602,-225.498],[29.824,-225.627],[18.446,-218.435],[16.163,-212.204],[23.365,-198.889],[35.985,-197.223],[44.741,-203.485],[47.563,-212.641],[47.102,-219.943]],"c":true}]},{"t":31.2,"s":[{"i":[[0.209,0.014],[0,0],[0.189,-0.234],[0,0],[-0.444,-0.155],[0,0],[-0.133,0.13],[-0.023,0.142],[0.024,0.049]],"o":[[-0.247,-0.017],[0,0],[-0.093,0.115],[0.004,0.001],[0.321,0.112],[0,0],[0.102,-0.1],[0.019,-0.115],[-0.02,-0.041]],"v":[[44.89,-227.239],[44.471,-227.243],[43.983,-227.006],[43.886,-226.801],[44.194,-226.362],[44.735,-226.307],[45.11,-226.513],[45.231,-226.815],[45.212,-227.056]],"c":true}]}],"ix":2},"nm":"Path 25","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":31.2,"s":[100,100],"h":1},{"t":32.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":1,"cix":2,"bm":0,"ix":40,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[25.996,4.326],[0,0],[5.268,-8.676],[0,0],[14.391,-6.797],[-23.938,-20.657],[0,0],[-21.937,13.247],[0,0],[4.439,18.971],[2.725,13.001]],"o":[[-24.723,-4.114],[0,0],[-4.26,7.015],[0,0],[-25.851,12.21],[21.641,18.675],[0,0],[15.318,-9.25],[0,0],[-4.588,-19.608],[-0.238,-1.136]],"v":[[62.473,-187.386],[28.774,-183.382],[13.732,-168.574],[6.488,-143.532],[-18.399,-149.71],[-18.062,-70.843],[22.934,-61.737],[70.432,-72.5],[83.462,-97.443],[90.868,-121.984],[86.66,-159.229]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[25.996,4.326],[0,0],[6.644,-8.031],[0,0],[14.391,-6.797],[-23.938,-20.657],[0,0],[-21.937,13.247],[0,0],[4.162,19.034],[1.359,0.025]],"o":[[-24.723,-4.114],[0,0],[-5.232,6.324],[0,0],[-25.851,12.21],[21.641,18.675],[0,0],[15.318,-9.25],[0,0],[-4.868,-22.266],[-1.16,-0.021]],"v":[[46.473,-205.886],[14.274,-190.882],[3.482,-184.324],[-1.512,-173.282],[-20.399,-174.96],[-16.312,-97.593],[12.434,-88.737],[66.432,-88],[79.462,-112.943],[95.868,-164.234],[70.41,-187.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[33.388,4.06],[0,0],[9.768,-11.176],[0,0],[3.95,-15.418],[-23.938,-20.657],[0,0],[-21.937,13.247],[0,0],[-7.632,11.405],[20.09,4.979]],"o":[[-29.723,-3.614],[0,0],[-8.172,9.349],[0,0],[-4.601,17.96],[21.641,18.675],[0,0],[15.318,-9.25],[0,0],[7.632,-11.405],[-29.161,-7.227]],"v":[[49.473,-220.636],[14.524,-203.382],[-4.768,-195.574],[-9.262,-184.782],[-36.649,-170.21],[-14.062,-109.343],[30.184,-96.987],[60.682,-100.75],[84.212,-128.193],[106.118,-144.734],[93.16,-189.979]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[23.527,7.386],[0,0],[19.46,-12.976],[0,0],[3.95,-15.418],[-23.938,-20.657],[0,0],[-21.937,13.247],[0,0],[-7.632,11.405],[7.319,2.517]],"o":[[-15.481,-4.86],[0,0],[-20.732,13.824],[0,0],[-4.601,17.96],[21.641,18.675],[0,0],[15.318,-9.25],[0,0],[7.632,-11.405],[-28.41,-9.771]],"v":[[62.473,-222.886],[39.024,-219.382],[9.732,-213.824],[-10.262,-193.782],[-35.399,-172.21],[-11.812,-113.843],[32.434,-101.487],[62.932,-105.25],[86.462,-132.693],[108.368,-149.234],[101.41,-191.479]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[21,4.75],[0,0],[25.25,-15.25],[0,0],[-1.561,-17.398],[-14.767,-7.368],[0,0],[-9.155,0],[0,0],[-10.25,12.5],[1.271,8.419]],"o":[[-21,-4.75],[0,0],[-16.944,10.233],[0,0],[1.75,19.5],[13.212,6.592],[0,0],[8.5,0],[0,0],[10.25,-12.5],[-2,-13.25]],"v":[[76.5,-226.75],[44,-218.25],[-5.75,-221.75],[-18.5,-188],[-27.75,-166],[2.25,-130.25],[37.5,-125.75],[61,-122.75],[78.5,-126.25],[107.25,-145.75],[111,-185.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[21,4.75],[0,0],[17.5,-9.25],[0,0],[0.292,-10.964],[-14.767,-7.368],[0,0],[-9.155,0],[0,0],[-10.25,12.5],[-0.5,8.5]],"o":[[-21,-4.75],[0,0],[-17.5,9.25],[0,0],[-0.292,10.964],[13.212,6.592],[0,0],[8.5,0],[0,0],[10.25,-12.5],[0.5,-8.5]],"v":[[104.75,-244],[74.75,-230.5],[44.25,-228.25],[34.5,-204],[22.75,-180.75],[39.75,-153.75],[67.5,-153.75],[85.75,-149.5],[100,-158.75],[131.25,-168],[134.25,-207.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[21,4.75],[0,0],[17.5,-9.25],[0,0],[-4,-11.5],[-15,-2.25],[0,0],[-7.5,5.25],[0,0],[-10.25,12.5],[-0.5,8.5]],"o":[[-21,-4.75],[0,0],[-17.5,9.25],[0,0],[4,11.5],[15,2.25],[0,0],[7.5,-5.25],[0,0],[10.25,-12.5],[0.5,-8.5]],"v":[[123,-251.75],[83.25,-244.5],[56.75,-240],[45.5,-208],[42,-190.75],[67,-169.75],[86.5,-172],[103.5,-172],[111.5,-184],[134,-189],[144.25,-216.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[13.231,7.347],[0.293,0.195],[18.332,-7.467],[0,0],[-2.242,-10.269],[-11.684,-1.87],[0,0],[-8.74,2.724],[0,0],[-13.235,9.281],[-2.877,8.014]],"o":[[-13.231,-7.347],[0,0],[-23.753,9.675],[0,0],[2.598,11.895],[14.977,2.397],[0,0],[8.74,-2.724],[0,0],[5.884,-4.127],[2.441,-6.8]],"v":[[130.692,-249.25],[106.118,-252.415],[81.003,-257.675],[61.316,-226.853],[58.992,-213.231],[75.684,-193.13],[92.696,-194.852],[105.393,-192.189],[115.66,-200.693],[133.616,-205.623],[146.059,-222.7]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[5.761,5.184],[0.16,0.106],[10.003,-4.075],[0,0],[-1.224,-5.604],[-3.059,-1.429],[-1.471,-0.217],[-4.769,1.487],[0,0],[-6.456,6.012],[-0.093,4.645]],"o":[[-6.139,-5.524],[0,0],[-12.962,5.28],[0,0],[1.417,6.491],[2.836,1.324],[0,0],[4.769,-1.487],[0,0],[4.03,-3.752],[0.104,-5.211]],"v":[[134.92,-259.242],[121.783,-265.198],[105.895,-263.021],[93.924,-249.794],[92.884,-239.586],[99.559,-229.321],[107.73,-227.054],[117.114,-227.534],[123.217,-230.878],[136.06,-231.638],[141.396,-243.116]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[2.178,1.96],[0.06,0.04],[3.781,-1.54],[0,0],[-0.463,-2.118],[-1.156,-0.54],[-0.556,-0.082],[-1.884,-0.125],[0,0],[-2.44,2.272],[-0.035,1.756]],"o":[[-2.321,-2.088],[0,0],[-4.9,1.996],[0,0],[0.536,2.454],[1.072,0.501],[0,0],[1.611,0.107],[0,0],[1.523,-1.418],[0.039,-1.97]],"v":[[134.513,-265.358],[129.547,-267.609],[123.541,-266.786],[119.016,-261.786],[118.623,-257.927],[121.099,-253.906],[124.14,-252.529],[127.073,-252.001],[130.183,-252.037],[134.944,-254.923],[136.961,-259.262]],"c":true}]},{"t":31.2,"s":[{"i":[[0.087,0.099],[0.002,0.002],[0.151,-0.077],[0,0],[-0.018,-0.107],[-0.046,-0.027],[-0.022,-0.004],[-0.075,-0.006],[0,0],[-0.097,0.114],[-0.001,0.088]],"o":[[-0.092,-0.105],[0,0],[-0.195,0.1],[0,0],[0.021,0.123],[0.043,0.025],[0,0],[0.064,0.005],[0,0],[0.061,-0.071],[0.002,-0.099]],"v":[[131.651,-271.052],[131.453,-271.165],[131.214,-271.124],[131.034,-270.872],[131.018,-270.678],[131.117,-270.476],[131.238,-270.407],[131.355,-270.38],[131.479,-270.382],[131.668,-270.527],[131.748,-270.746]],"c":true}]}],"ix":2},"nm":"Path 24","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":31.2,"s":[100,100],"h":1},{"t":32.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":1,"cix":2,"bm":0,"ix":41,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[23.173,-1.077],[5.547,-16.412],[0,0],[-23.468,1.026],[0,0],[-9.387,9.745],[0,0],[11.947,11.796],[0,0]],"o":[[-11.131,0.517],[-5.547,16.412],[0,0],[23.468,-1.026],[0,0],[9.387,-9.745],[0,0],[-11.947,-11.796],[0,0]],"v":[[53.423,-194.673],[24.047,-169.265],[35.043,-135.738],[68.587,-104.776],[100.786,-118.055],[110.863,-138.741],[115.228,-157.718],[101.377,-177.069],[86.016,-181.685]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[17.65,-0.767],[4.225,-11.685],[0,0],[-17.875,0.73],[0,0],[-7.15,6.938],[0,0],[9.1,8.398],[0,0]],"o":[[-8.478,0.368],[-4.225,11.685],[0,0],[17.875,-0.73],[0,0],[7.15,-6.938],[0,0],[-9.1,-8.398],[0,0]],"v":[[50.35,-194.983],[27.975,-176.894],[36.35,-153.024],[61.9,-130.98],[86.425,-140.435],[94.1,-155.162],[97.425,-168.673],[86.875,-182.45],[75.175,-185.736]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[5.75,-2.75],[3.25,-8],[0,0],[-13.75,0.5],[0,0],[-5.5,4.75],[0,0],[7,5.75],[0,0]],"o":[[-5.75,2.75],[-3.25,8],[0,0],[13.75,-0.5],[0,0],[5.5,-4.75],[0,0],[-7,-5.75],[0,0]],"v":[[57,-185.25],[43.25,-178],[47,-162],[60.5,-147.25],[69.75,-154.75],[82,-158.5],[82.25,-167.75],[78.75,-179.75],[69.75,-182]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[2.883,-0.771],[1.438,-2.971],[0,0],[-6.146,-0.596],[0,0],[-1.755,2.262],[0,0],[3.149,2.121],[0,0]],"o":[[-2.883,0.771],[-1.438,2.971],[0,0],[6.185,0.6],[0,0],[1.574,-2.029],[0,0],[-3.149,-2.121],[0,0]],"v":[[63.7,-188.453],[57.74,-184.764],[57.234,-178.261],[63.981,-173.465],[71.347,-174.203],[74.776,-177.016],[76.069,-180.475],[74.101,-185.594],[69.885,-187.946]],"c":true}]},{"t":26.4,"s":[{"i":[[0.096,-0.026],[0.048,-0.099],[0,0],[-0.205,-0.02],[0,0],[-0.058,0.075],[0,0],[0.105,0.071],[0,0]],"o":[[-0.096,0.026],[-0.048,0.099],[0,0],[0.206,0.02],[0,0],[0.052,-0.068],[0,0],[-0.105,-0.071],[0,0]],"v":[[68.548,-187.417],[68.35,-187.294],[68.333,-187.077],[68.558,-186.917],[68.803,-186.942],[68.918,-187.036],[68.961,-187.151],[68.895,-187.321],[68.755,-187.4]],"c":true}]}],"ix":2},"nm":"Path 23","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":1,"cix":2,"bm":0,"ix":42,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[6.5,1],[1.75,-13.25],[-11.75,-5.5],[-3.75,7],[3.25,8.75]],"o":[[-6.5,-1],[-1.75,13.25],[11.75,5.5],[3.75,-7],[-3.239,-8.722]],"v":[[115,-129],[90.75,-116.25],[102.5,-91],[131.5,-95.5],[132,-117]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[7.401,1.078],[1.923,-14.744],[-13.399,-6.054],[-4.231,7.804],[3.743,9.713]],"o":[[-7.401,-1.078],[-1.923,14.744],[13.399,6.054],[4.231,-7.804],[-3.731,-9.682]],"v":[[124.713,-140.28],[97.186,-125.973],[110.687,-97.955],[143.662,-103.114],[144.119,-127.026]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[6.5,1],[1.75,-13.25],[-11.75,-5.5],[-3.75,7],[3.25,8.75]],"o":[[-6.5,-1],[-1.75,13.25],[11.75,5.5],[3.75,-7],[-3.239,-8.722]],"v":[[122.5,-141.75],[98.25,-129],[110,-103.75],[139,-108.25],[139.5,-129.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[6.5,1],[1.75,-13.25],[-11.75,-5.5],[-3.75,7],[4.75,8]],"o":[[-6.5,-1],[-1.75,13.25],[11.75,5.5],[3.75,-7],[-4.75,-8]],"v":[[123.75,-161],[104.25,-147.75],[114.5,-125.25],[140.75,-127.75],[145.75,-151]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[5.009,0.771],[1.349,-10.211],[-9.055,-4.238],[-2.89,5.394],[3.66,6.165]],"o":[[-5.009,-0.771],[-1.349,10.211],[9.055,4.238],[2.89,-5.394],[-3.66,-6.165]],"v":[[140.126,-195.479],[125.099,-185.269],[132.997,-167.93],[153.226,-169.856],[157.079,-187.773]],"c":true}]},{"t":26.4,"s":[{"i":[[0.577,0.089],[0.155,-1.176],[-1.043,-0.488],[-0.333,0.621],[0.422,0.71]],"o":[[-0.577,-0.089],[-0.155,1.176],[1.043,0.488],[0.333,-0.621],[-0.422,-0.71]],"v":[[151.876,-186.882],[150.145,-185.706],[151.055,-183.709],[153.385,-183.931],[153.828,-185.994]],"c":true}]}],"ix":2},"nm":"Path 22","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":26.4,"s":[100,100],"h":1},{"t":27.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":1,"cix":2,"bm":0,"ix":43,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[8.055,-4.409],[-2.249,-13.54],[-9.499,-2.23],[-7.408,12.332],[13.221,9.952]],"o":[[-11.146,6.1],[1.688,10.164],[13.533,3.177],[7.276,-12.111],[-13.707,-10.317]],"v":[[61.695,-97.048],[47.749,-67.015],[65.232,-46.052],[98.661,-60.373],[91.974,-93.433]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[8.055,-4.409],[-2.249,-13.54],[-9.499,-2.23],[-7.408,12.332],[13.221,9.952]],"o":[[-11.146,6.1],[1.688,10.164],[13.533,3.177],[7.276,-12.111],[-13.707,-10.317]],"v":[[91.695,-100.548],[77.749,-70.515],[95.232,-49.552],[128.661,-63.873],[121.974,-96.933]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.244,-3.588],[-2.023,-11.02],[-8.543,-1.815],[-6.663,10.037],[11.891,8.099]],"o":[[-10.024,4.965],[1.518,8.272],[12.17,2.586],[6.543,-9.857],[-12.327,-8.397]],"v":[[90.399,-119.965],[77.857,-95.522],[93.58,-78.461],[123.643,-90.116],[117.629,-117.023]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[4.5,-4],[-2.5,-3.75],[-6.5,-0.25],[-2.5,6.75],[3.5,4.25]],"o":[[-4.5,4],[2.5,3.75],[6.5,0.25],[2.5,-6.75],[-3.5,-4.25]],"v":[[90.75,-133.5],[86.25,-117.25],[96.75,-101.75],[117,-109.5],[115.5,-130.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.569,-7.962],[-2.156,-2.325],[-3.931,2.343],[1.112,4.941],[7.289,0.777]],"o":[[-2.843,6.343],[4.084,4.405],[3.931,-2.343],[-1.112,-4.941],[-8.625,-0.92]],"v":[[107.968,-162.093],[112.041,-147.155],[129.926,-147.034],[137.779,-157.992],[125.375,-169.955]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[1.217,-3.078],[-0.735,-0.899],[-1.341,0.906],[0.379,1.91],[2.486,0.301]],"o":[[-0.97,2.452],[1.393,1.703],[1.341,-0.906],[-0.379,-1.91],[-2.942,-0.356]],"v":[[132.47,-180.229],[133.859,-174.453],[139.958,-174.406],[142.636,-178.644],[138.406,-183.269]],"c":true}]},{"t":28.8,"s":[{"i":[[0.068,-0.212],[-0.041,-0.062],[-0.075,0.062],[0.021,0.132],[0.138,0.021]],"o":[[-0.054,0.169],[0.077,0.117],[0.075,-0.062],[-0.021,-0.132],[-0.164,-0.025]],"v":[[144.679,-187.516],[144.756,-187.117],[145.095,-187.114],[145.244,-187.406],[145.009,-187.725]],"c":true}]}],"ix":2},"nm":"Path 21","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":1,"cix":2,"bm":0,"ix":44,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[15.375,-10.372],[4.119,-6.184],[2.828,-13.158],[-34.964,-17.486],[-1.008,-0.983],[-25.197,17.037],[-11.104,6.796],[0,0],[-12.69,3.934],[0,0],[42.828,12.161],[0,0]],"o":[[-16.97,11.449],[-4.469,6.708],[-3.101,14.429],[12.154,6.078],[10.171,9.915],[9.217,-6.232],[11.104,-6.796],[0,0],[12.69,-3.934],[0,0],[-23.761,-6.747],[0,0]],"v":[[16.129,-94.967],[-4.781,-60.876],[-8.444,-24.259],[-7.536,81.057],[11.4,94.085],[72.433,84.705],[97.452,39.368],[115.456,14.393],[124.595,-3.907],[144.487,-43.16],[100.499,-105.171],[54.594,-107.622]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[11.633,-8.607],[3.117,-5.131],[2.14,-10.918],[-26.456,-14.51],[-0.763,-0.816],[-19.065,14.137],[-8.402,5.639],[0,0],[-9.602,3.265],[0,0],[32.407,10.091],[0,0]],"o":[[-12.841,9.5],[-3.381,5.567],[-2.347,11.973],[9.196,5.044],[7.696,8.228],[6.974,-5.171],[8.402,-5.639],[0,0],[9.602,-3.265],[0,0],[-17.979,-5.598],[0,0]],"v":[[53.862,-105.102],[38.04,-76.813],[35.269,-46.429],[17.456,35.462],[50.284,51.772],[96.466,43.989],[115.397,6.369],[129.02,-14.356],[135.936,-29.541],[150.987,-62.113],[117.703,-113.569],[82.968,-115.603]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[12.25,-8.831],[3.282,-5.265],[2.253,-11.203],[-27.858,-14.888],[-0.803,-0.837],[-20.076,14.506],[-8.847,5.786],[0,0],[-10.111,3.35],[0,0],[34.125,10.354],[0,0]],"o":[[-13.522,9.748],[-3.561,5.712],[-2.471,12.285],[9.684,5.175],[8.104,8.442],[7.344,-5.306],[8.847,-5.786],[0,0],[10.111,-3.35],[0,0],[-18.932,-5.744],[0,0]],"v":[[55.214,-111.985],[38.553,-82.959],[35.635,-51.782],[36.358,37.888],[51.446,48.981],[100.076,40.994],[120.01,2.393],[134.356,-18.872],[141.638,-34.453],[157.487,-67.875],[122.439,-120.673],[85.862,-122.76]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[12.25,-8.831],[3.282,-5.265],[2.253,-11.203],[-27.858,-14.888],[-0.803,-0.837],[-24.576,3.506],[-8.847,5.786],[0,0],[-10.111,3.35],[0,0],[34.125,10.354],[0,0]],"o":[[-13.522,9.748],[-3.561,5.712],[-2.471,12.285],[9.684,5.175],[8.104,8.442],[8.97,-1.28],[8.847,-5.786],[0,0],[10.111,-3.35],[0,0],[-18.932,-5.744],[0,0]],"v":[[75.214,-131.485],[53.053,-104.459],[45.135,-68.282],[57.358,-12.612],[57.446,9.981],[120.076,-0.006],[140.01,-17.107],[154.356,-38.372],[161.638,-53.953],[177.487,-87.375],[142.439,-140.173],[105.862,-142.26]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[10.646,-7.754],[2.852,-4.623],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-11.751,8.559],[-3.094,5.015],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[88.604,-133.246],[69.344,-109.515],[62.898,-88.287],[79.604,-41.163],[86.198,-21.765],[127.592,-17.802],[144.917,-32.817],[157.384,-51.489],[163.713,-65.17],[177.487,-94.515],[147.027,-140.874],[115.239,-142.707]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[10.646,-7.754],[2.852,-4.623],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-11.751,8.559],[-3.094,5.015],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[94.854,-139.496],[46.594,-116.515],[69.148,-94.537],[85.854,-47.413],[98.448,-35.14],[132.842,-33.302],[151.917,-46.692],[166.759,-57.739],[169.963,-71.42],[183.737,-100.765],[153.277,-147.124],[121.489,-148.957]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[10.646,-7.754],[2.852,-4.623],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-11.751,8.559],[-3.094,5.015],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[101.104,-145.746],[81.844,-122.015],[75.398,-100.787],[92.104,-53.663],[110.698,-48.515],[138.092,-48.802],[158.917,-60.567],[176.134,-63.989],[176.213,-77.67],[189.987,-107.015],[159.527,-153.374],[127.739,-155.207]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[8.146,-6.629],[2.387,-4.852],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-8.599,6.935],[-2.508,5.048],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[123.229,-153.496],[106.219,-133.39],[95.023,-115.412],[100.979,-71.413],[121.073,-71.515],[146.967,-68.927],[168.292,-77.567],[180.384,-86.114],[185.588,-94.67],[194.112,-122.39],[164.777,-174.499],[134.364,-163.332]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[5.646,-5.504],[1.922,-5.08],[1.958,-9.837],[-21.604,-14.837],[-0.698,-0.735],[-10.863,3.956],[-7.689,5.08],[0,0],[-8.787,2.941],[0,0],[29.657,9.091],[0,0]],"o":[[-5.447,5.311],[-1.922,5.08],[-2.148,10.787],[7.892,5.42],[7.043,7.413],[7.408,-2.698],[7.689,-5.08],[0,0],[8.787,-2.941],[0,0],[-16.454,-5.044],[0,0]],"v":[[119.354,-165.746],[111.094,-148.765],[104.648,-129.537],[109.854,-89.163],[131.448,-94.515],[155.842,-89.052],[177.667,-94.567],[184.634,-108.239],[194.963,-111.67],[198.237,-137.765],[169.027,-170.624],[135.489,-165.457]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[4.571,2.367],[1.75,-4.75],[-1.5,-9.25],[-6.183,1.546],[-3.75,-8.75],[-10.5,-0.75],[-7,4.75],[0,0],[-8,2.75],[0,0],[27,8.5],[0,0]],"o":[[-14,-7.25],[-1.75,4.75],[1.5,9.25],[1,-0.25],[3.75,8.75],[10.5,0.75],[7,-4.75],[0,0],[8,-2.75],[0,0],[-14.98,-4.716],[0,0]],"v":[[143.75,-188.5],[118.25,-178],[116.25,-156.75],[143.75,-137],[147.25,-120.5],[166.5,-110.25],[182.5,-121.25],[187.25,-134.5],[200.75,-133.5],[201,-149.25],[176,-186.75],[152.75,-180.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[3.89,1.77],[1.489,-3.552],[-1.277,-6.917],[-5.263,1.156],[-3.191,-6.543],[-4.043,-1.314],[-5.808,3.791],[0,0],[-6.69,2.413],[0,0],[19.497,4.395],[0,0]],"o":[[-11.915,-5.422],[-1.489,3.552],[1.277,6.917],[0.851,-0.187],[3.191,6.543],[3.377,1.098],[3.965,-2.588],[0,0],[16.434,-5.927],[0,0],[-12.904,-2.908],[0,0]],"v":[[147.181,-198.828],[125.479,-191.726],[123.902,-176.835],[142.931,-166.44],[143.785,-152.851],[153.793,-142.811],[167.41,-143.537],[172.452,-148.321],[184.191,-148.573],[197.529,-171.351],[174.628,-198.27],[155.84,-191.908]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[4.336,-1.72],[0.38,-1.667],[-0.392,-3.034],[-0.982,-2.213],[-3.487,-1.342],[-2.067,-0.224],[-3.159,1.299],[0,0],[-1.947,2.677],[0,0],[8.955,3.156],[0,0]],"o":[[-5.996,2.378],[-0.38,1.667],[0.445,3.445],[1.326,2.99],[3.217,1.238],[5.831,0.631],[2.304,-0.947],[0,0],[5.007,-6.883],[0,0],[-3.167,-1.116],[0,0]],"v":[[163.352,-203.62],[154.626,-195.488],[154.259,-188.496],[155.924,-179.865],[163.155,-174.839],[169.544,-173.381],[179.431,-178.046],[185.678,-178.84],[190.701,-183.102],[188.801,-196.608],[178.353,-204.13],[171.78,-205.384]],"c":true}]},{"t":28.8,"s":[{"i":[[0.063,-0.025],[0.006,-0.024],[-0.006,-0.044],[-0.014,-0.032],[-0.051,-0.02],[-0.03,-0.003],[-0.046,0.019],[0,0],[-0.028,0.039],[0,0],[0.131,0.046],[0,0]],"o":[[-0.088,0.035],[-0.006,0.024],[0.007,0.05],[0.019,0.044],[0.047,0.018],[0.085,0.009],[0.034,-0.014],[0,0],[0.073,-0.101],[0,0],[-0.046,-0.016],[0,0]],"v":[[180.777,-211.042],[180.65,-210.923],[180.632,-210.81],[180.669,-210.695],[180.76,-210.614],[180.862,-210.582],[181.032,-210.586],[181.111,-210.66],[181.177,-210.742],[181.149,-210.939],[180.996,-211.049],[180.9,-211.067]],"c":true}]}],"ix":2},"nm":"Path 20","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":1,"cix":2,"bm":0,"ix":45,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4.8,"s":[{"i":[[24.739,2.848],[0,0],[9.178,-20.369],[0,0],[-10.997,-12.676],[-24.792,1.628],[-1.474,0.888],[-3.377,5.631],[0,0],[-10.295,8.347],[-0.615,0.567],[0.016,3.011],[0,0]],"o":[[-25.056,-2.884],[0,0],[-7.046,15.637],[0,0],[4.841,5.581],[17.833,-1.171],[2.147,-1.293],[3.808,-6.35],[0,0],[14.496,-11.753],[0.635,-0.433],[-0.15,-28.174],[0,0]],"v":[[137.348,-137.616],[102.286,-123.182],[66.296,-102.049],[66.968,-69.63],[73.409,-36.331],[110.079,-24.128],[142.695,-31.944],[154.192,-41.15],[157.445,-51.483],[184.004,-62.247],[192.615,-87.317],[195.676,-97.592],[167.847,-125.26]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[24.739,2.848],[0,0],[9.178,-20.369],[0,0],[-10.997,-12.676],[-24.792,1.628],[-1.474,0.888],[-3.377,5.631],[0,0],[-10.295,8.347],[-0.615,0.567],[0.016,3.011],[0,0]],"o":[[-25.056,-2.884],[0,0],[-7.046,15.637],[0,0],[4.841,5.581],[17.833,-1.171],[2.147,-1.293],[3.808,-6.35],[0,0],[14.496,-11.753],[0.635,-0.433],[-0.15,-28.174],[0,0]],"v":[[139.348,-138.616],[104.286,-124.182],[68.296,-103.049],[68.968,-70.63],[75.409,-37.331],[112.079,-25.128],[144.695,-32.944],[156.192,-42.15],[159.445,-52.483],[186.004,-63.247],[194.615,-88.317],[197.676,-98.592],[169.847,-126.26]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[21.256,2.616],[0,0],[7.886,-18.711],[0,0],[-10.911,-10.078],[-21.301,1.495],[-1.267,0.815],[-5.289,2.097],[0,0],[-3.203,3.042],[-1.921,4.228],[0.013,2.671],[0,0]],"o":[[-21.528,-2.649],[0,0],[-6.054,14.365],[0,0],[7.822,7.224],[15.323,-1.076],[1.845,-1.188],[16.787,-6.655],[0,0],[2.84,-2.697],[1.084,-2.386],[-0.129,-25.882],[0,0]],"v":[[159.352,-145.101],[129.226,-131.841],[98.304,-112.428],[98.881,-82.646],[106.993,-55.732],[140.863,-41.995],[161.154,-54.917],[178.12,-58.092],[195.522,-84.119],[201.485,-88.972],[209.435,-99.562],[211.187,-107.185],[185.557,-133.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[18.209,2.335],[0,0],[6.756,-16.698],[0,0],[-9.347,-8.993],[-18.248,1.335],[-1.085,0.728],[-4.531,1.871],[0,0],[-2.744,2.714],[-1.646,3.773],[0.011,2.384],[0,0]],"o":[[-18.442,-2.364],[0,0],[-5.186,12.819],[0,0],[6.701,6.447],[13.126,-0.96],[1.58,-1.06],[14.381,-5.939],[0,0],[2.433,-2.407],[0.929,-2.129],[-0.11,-23.097],[0,0]],"v":[[178.291,-138.21],[152.484,-126.377],[125.994,-109.052],[126.489,-82.474],[133.438,-58.455],[162.453,-46.196],[179.835,-57.728],[194.369,-60.561],[209.277,-83.788],[214.384,-88.119],[221.195,-97.57],[222.696,-104.373],[200.74,-128.08]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[15.632,5.495],[0,0],[6.756,-16.698],[0,0],[-9.347,-8.993],[-18.248,1.335],[-1.085,0.728],[-3.102,3.796],[0,0],[-1.418,2.714],[-0.846,3.773],[0.011,2.384],[0,0]],"o":[[-17.541,-6.165],[0,0],[-5.186,12.819],[0,0],[6.701,6.447],[13.126,-0.96],[1.58,-1.06],[4.514,-5.524],[0,0],[1.258,-2.407],[0.477,-2.129],[-0.11,-23.097],[0,0]],"v":[[191.291,-142.835],[159.734,-128.627],[133.244,-111.302],[140.239,-86.724],[146.188,-64.705],[182.203,-54.446],[202.085,-67.478],[216.619,-72.311],[223.027,-86.038],[225.668,-90.369],[229.182,-99.82],[229.946,-106.623],[207.99,-130.33]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[15.632,5.495],[0,0],[6.756,-16.698],[0,0],[-2.313,-2.235],[-22.023,-0.814],[-4.635,8.11],[-0.526,2.646],[0,0],[-2.183,0.828],[-1.307,2.634],[0.011,2.384],[0,0]],"o":[[-17.541,-6.165],[0,0],[-5.186,12.819],[0,0],[3.822,3.692],[18.834,0.696],[2.398,-4.196],[0.366,-1.839],[0,0],[1.936,-0.734],[0.738,-1.487],[-0.11,-23.097],[0,0]],"v":[[191.041,-144.585],[165.484,-137.127],[142.494,-117.552],[146.739,-84.474],[149.388,-80.502],[184.453,-70.946],[217.282,-86.877],[221.339,-97.807],[221.777,-100.788],[225.841,-101.61],[231.257,-106.369],[232.446,-112.123],[209.99,-130.83]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[15.632,5.495],[0,0],[6.756,-16.698],[0,0],[-2.313,-2.235],[-22.023,-0.814],[-4.635,8.11],[-0.526,2.646],[0,0],[-2.183,0.828],[-1.307,2.634],[0.011,2.384],[0,0]],"o":[[-17.541,-6.165],[0,0],[-5.186,12.819],[0,0],[3.822,3.692],[18.834,0.696],[2.398,-4.196],[0.366,-1.839],[0,0],[1.936,-0.734],[0.738,-1.487],[-0.11,-23.097],[0,0]],"v":[[195.291,-143.335],[169.734,-135.877],[146.744,-116.302],[150.989,-83.224],[153.638,-79.252],[188.703,-69.696],[221.532,-85.627],[225.589,-96.557],[226.027,-99.538],[230.091,-100.36],[235.507,-105.119],[236.696,-110.873],[214.24,-129.58]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21.6,"s":[{"i":[[10,8],[0,0],[7.75,-7.5],[0,0],[0.497,-5.859],[-16.353,-1.713],[-3.782,4.256],[-0.5,1.445],[0,0],[-4.385,0.071],[-2.647,3.609],[0,3.983],[0,0]],"o":[[-10,-8],[0,0],[-7.75,7.5],[0,0],[-0.821,9.681],[13.986,1.465],[1.957,-2.202],[0.348,-1.004],[0,0],[3.888,-0.063],[1.494,-2.037],[0,-19],[0,0]],"v":[[213,-145.25],[193.25,-146.75],[174.5,-145],[171.5,-127],[169.475,-116.557],[187,-92],[212.083,-99.003],[215.551,-104.863],[216,-106.5],[224.157,-105.43],[235.062,-110.118],[237.5,-119],[217,-133.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[6.307,1.32],[0,0],[3.583,-4.209],[0,0],[-0.744,-2.528],[-8.379,-0.907],[-2.874,0.98],[-0.634,0.347],[0,0],[-1.592,1.576],[-0.901,2.564],[0.067,1.802],[0,0]],"o":[[-6.425,-1.345],[0,0],[-3.583,4.209],[0,0],[1.23,4.178],[5.684,0.615],[1.487,-0.507],[0.44,-0.241],[0,0],[1.412,-1.397],[0.509,-1.447],[-0.36,-9.732],[0,0]],"v":[[213.034,-155.867],[202.09,-154.549],[195.825,-148.792],[191.337,-136.642],[192.101,-132.147],[204.921,-121.35],[217.883,-122.62],[221.082,-124.002],[221.748,-124.397],[224.729,-126.785],[228.613,-132.745],[229.35,-137.621],[224.708,-149.66]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[1.974,0.413],[0,0],[1.121,-1.317],[0,0],[-0.233,-0.791],[-2.622,-0.284],[-0.899,0.307],[-0.198,0.109],[0,0],[-0.498,0.493],[-0.282,0.802],[0.021,0.564],[0,0]],"o":[[-2.011,-0.421],[0,0],[-1.121,1.317],[0,0],[0.385,1.307],[1.779,0.193],[0.465,-0.159],[0.138,-0.075],[0,0],[0.442,-0.437],[0.159,-0.453],[-0.113,-3.046],[0,0]],"v":[[214.795,-159.324],[211.37,-158.912],[209.409,-157.111],[208.005,-153.308],[208.244,-151.902],[212.256,-148.523],[216.312,-148.92],[217.313,-149.353],[217.522,-149.476],[218.455,-150.224],[219.67,-152.089],[219.901,-153.615],[218.448,-157.382]],"c":true}]},{"t":28.8,"s":[{"i":[[0.081,0.017],[0,0],[0.046,-0.054],[0,0],[-0.01,-0.033],[-0.108,-0.012],[-0.037,0.013],[-0.008,0.004],[0,0],[-0.021,0.02],[-0.012,0.033],[0.001,0.023],[0,0]],"o":[[-0.083,-0.017],[0,0],[-0.046,0.054],[0,0],[0.016,0.054],[0.073,0.008],[0.019,-0.007],[0.006,-0.003],[0,0],[0.018,-0.018],[0.007,-0.019],[-0.005,-0.126],[0,0]],"v":[[215.535,-160.425],[215.394,-160.408],[215.313,-160.334],[215.255,-160.177],[215.265,-160.119],[215.43,-159.979],[215.598,-159.996],[215.639,-160.014],[215.648,-160.019],[215.686,-160.05],[215.736,-160.126],[215.746,-160.189],[215.686,-160.345]],"c":true}]}],"ix":2},"nm":"Path 19","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":28.8,"s":[100,100],"h":1},{"t":30,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":1,"cix":2,"bm":0,"ix":46,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":30,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":0,"cix":2,"bm":0,"ix":47,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[21.25,6],[1.5,-7.5],[0,0],[2,-3],[0,0],[3.86,-26.594],[0,0],[-9,-3],[0,0],[-16.137,-4.21],[0,0],[-12.75,5.25],[0,0],[2.261,15.828],[0,0],[3.143,1.692],[0,0],[-2.751,7.566],[12.75,-0.75],[0,0],[0,0]],"o":[[-12.46,-3.518],[-1.5,7.5],[0,0],[-2,3],[0,0],[-2.25,15.5],[0,0],[9,3],[0,0],[11.5,3],[0,0],[12.75,-5.25],[0,0],[-1,-7],[0,0],[-1.707,-0.919],[0,0],[3,-8.25],[-8.792,0.517],[0,0],[0,0]],"v":[[-16.75,45],[-36,55.75],[-35,67.5],[-40.75,72.5],[-45.75,78.25],[-69.5,101],[-56,121.75],[-46.75,133.75],[-32.75,132.75],[-17.75,153.25],[-1.75,149.75],[16.5,150.25],[25,136.5],[33,115.5],[23.25,108.25],[20.607,103.558],[16.75,103],[24,92.25],[11.75,72.75],[-3,78.75],[-6.75,72.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":0,"s":[0,0],"h":1},{"t":1.2,"s":[100,100],"h":1},{"t":2.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 48","np":1,"cix":2,"bm":0,"ix":48,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.25,-3.25],[0.68,-14.549],[0,0],[1,-6.5],[0,0],[4,-5.5],[0,0],[4.471,-24.109],[0,0],[-3.5,-34.5],[0,0],[-6,-13],[0,0],[-5.5,-5],[0,0],[-4.614,-2.171],[0,0],[-28.736,10.111],[0,0],[-18,2.5],[0,0],[3.5,18],[0,0],[0.694,18.049],[0,0],[7,7],[0,0],[0,0],[-4,7.75],[0,0],[16,21.75],[0,0],[6,5.75],[0,0],[3.565,14.577]],"o":[[-23.116,3.376],[-0.688,14.707],[0,0],[-1,6.5],[0,0],[-2.93,4.028],[0,0],[-7,37.75],[0,0],[2.761,27.214],[0,0],[6.12,13.259],[0,0],[5.5,5],[0,0],[4.25,2],[0,0],[27,-9.5],[0,0],[18,-2.5],[0,0],[-3.5,-18],[0,0],[-0.5,-13],[0,0],[-7,-7],[0,0],[0,0],[4,-7.75],[0,0],[-16,-21.75],[0,0],[-6,-5.75],[0,0],[-4.828,-19.74]],"v":[[-38.25,-25.25],[-71.18,5.549],[-65,25],[-75,35.5],[-69.5,50],[-77.25,54],[-78,62],[-107.5,82],[-83.25,119],[-97.5,155],[-81.5,184.5],[-88.5,204.5],[-72.5,215.5],[-68.5,230],[-55.5,236],[-48.5,241.75],[-39.25,242.25],[-0.25,245],[28,217],[51.5,226.5],[67,208],[77.5,190.5],[61.5,174.5],[73,153.5],[57.5,141],[53.5,126.5],[40.5,120.5],[39.5,115],[49.25,107],[49,92],[52,51.25],[8.5,43],[8,30.25],[-1,27.25],[2.328,3.24]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":1.2,"s":[0,0],"h":1},{"t":2.4,"s":[100,100],"h":1},{"t":3.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 49","np":1,"cix":2,"bm":0,"ix":49,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-40.649,-2.751],[-6.494,21.299],[0,0],[-4.136,9.279],[0,0],[-9.094,6.78],[0,0],[-16.691,34.158],[0,0],[-6.328,52.242],[0,0],[5.919,21.276],[0,0],[7.939,9.268],[0,0],[7.395,4.781],[0,0],[54.648,-5.198],[0,0],[32.838,2.417],[0,0],[0.332,-27.825],[0,0],[5.327,-26.945],[0,0],[-9.873,-12.737],[0,0],[0,0],[9.912,-10.109],[0,0],[-20.478,-37.622],[0,0],[-8.554,-10.547],[0,0],[-1.027,-22.782]],"o":[[42.231,2.858],[6.564,-21.529],[0,0],[4.136,-9.279],[0,0],[6.661,-4.966],[0,0],[26.135,-53.483],[0,0],[4.992,-41.209],[0,0],[-6.037,-21.7],[0,0],[-7.939,-9.268],[0,0],[-6.812,-4.404],[0,0],[-51.346,4.884],[0,0],[-32.838,-2.417],[0,0],[-0.332,27.825],[0,0],[-3.837,19.407],[0,0],[9.873,12.737],[0,0],[0,0],[-9.912,10.109],[0,0],[20.478,37.622],[0,0],[8.554,10.547],[0,0],[1.391,30.851]],"v":[[-12.948,261.021],[56.659,226.634],[52.763,195.751],[74.317,183.611],[69.83,160.286],[85.031,157],[89.269,145.416],[148.865,125.844],[119.294,62.853],[157.654,14.422],[139.991,-34.668],[159.676,-61.885],[135.291,-83.599],[133.465,-106.415],[112.585,-119.711],[102.257,-130.598],[86.031,-134.481],[17.849,-151.802],[-42.437,-119.967],[-80.671,-142.01],[-114.888,-119.901],[-139.873,-97.572],[-117.305,-68.459],[-145.335,-41.292],[-122.383,-17.528],[-120.556,5.288],[-99.676,18.584],[-99.901,27.063],[-120.103,35.588],[-125.111,57.87],[-145.24,117.152],[-71.075,144.141],[-74.821,163.178],[-59.946,170.675],[-74.575,205.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 50","np":1,"cix":2,"bm":0,"ix":50,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":36,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Smoke Explosion 07 *","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,540,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":20,"nm":"Tint","np":6,"mn":"ADBE Tint","ix":1,"en":1,"ef":[{"ty":2,"nm":"Map Black To","mn":"ADBE Tint-0001","ix":1,"v":{"a":0,"k":[1,1,1,1],"ix":1}},{"ty":2,"nm":"Map White To","mn":"ADBE Tint-0002","ix":2,"v":{"a":0,"k":[0.49960783124,0.784618198872,0.866666674614,1],"ix":2}},{"ty":0,"nm":"Amount to Tint","mn":"ADBE Tint-0003","ix":3,"v":{"a":0,"k":100,"ix":3}},{"ty":6,"nm":"","mn":"ADBE Tint-0004","ix":4,"v":0}]}],"w":1920,"h":1080,"ip":0,"op":32.4,"st":0,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 3","parent":3,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[23.629,-12.442],[-31.77,-2.528],[-2.715,3.35],[2.5,29.833]],"o":[[-27.149,14.296],[7.465,0.594],[0.82,-1.012],[-1.166,-13.912]],"v":[[1.442,0.632],[8.932,61.617],[25.035,42.093],[49.162,17.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[22.25,-5.5],[-25.95,-8.65],[-2.952,2.232],[-4.061,25.371]],"o":[[-25.564,6.319],[6.097,2.032],[0.892,-0.675],[1.894,-11.831]],"v":[[16.75,-17.5],[11.45,27.15],[29.108,18.675],[49.561,6.129]],"c":true}]},{"t":24,"s":[{"i":[[2.826,0.226],[-6.248,-1.939],[-0.818,0.427],[-0.179,0.96]],"o":[[-5.386,-0.431],[1.416,0.439],[0.898,-0.468],[0.377,-2.026]],"v":[[25.445,-29.549],[24.153,-22.439],[27.505,-22.53],[29.119,-24.816]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 12","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[25.157,0],[-7.133,-34.239],[-50.404,-10.319],[-2.291,-1.08],[-13.034,10.818],[5.14,21.53],[7.395,9.457]],"o":[[-31.385,0],[4.129,19.818],[32.417,6.637],[13.968,6.583],[12.243,-10.161],[-2.43,-10.18],[-19.822,-25.351]],"v":[[84.696,-93.023],[17.566,-54.447],[76.583,23.363],[120.032,13.417],[167.138,5.564],[182.327,-49.917],[163.105,-70.957]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[19.767,0],[-5.825,-27.959],[-42.008,-0.703],[-19.934,-5.307],[-12.119,10.175],[4.346,18.205],[4.435,5.39]],"o":[[-25.629,0],[3.372,16.184],[10.273,0.172],[12.359,3.29],[12.193,-10.236],[-2.287,-9.58],[-14.955,-18.177]],"v":[[98.574,-112.672],[42.531,-60.347],[85.008,-25.797],[111.914,-18.812],[152.643,-30.532],[168.5,-74.614],[158.22,-96.772]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[13.475,0],[-3.971,-19.059],[-9.432,-1.919],[-13.588,-3.618],[-8.039,7.878],[5.812,11.358],[3.082,2.401]],"o":[[-17.471,0],[2.298,11.032],[6.863,1.396],[8.424,2.243],[8.088,-7.926],[-1.347,-2.632],[-10.392,-8.095]],"v":[[98.882,-158.5],[75.676,-125.559],[94.066,-108.824],[113.088,-95.882],[141.11,-106.013],[147.912,-136.647],[141.102,-144.251]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[8.484,0],[-2.5,-12],[-5.234,-0.939],[-4.844,0.22],[-2.564,3.92],[0.752,4.012],[1.183,1.452]],"o":[[-11,0],[1.399,6.716],[4.118,0.739],[5.483,-0.249],[2.58,-3.944],[-0.343,-1.83],[-3.989,-4.895]],"v":[[101.5,-172],[85,-150],[95.695,-139.701],[109.5,-139.5],[121.664,-146.652],[124.5,-159.5],[122.16,-164.428]],"c":true}]},{"t":28.8,"s":[{"i":[[-0.25,0],[0.074,0.353],[0.154,0.028],[0.142,-0.006],[0.075,-0.115],[-0.022,-0.118],[-0.035,-0.043]],"o":[[0.324,0],[-0.041,-0.198],[-0.121,-0.022],[-0.161,0.007],[-0.076,0.116],[0.01,0.054],[0.117,0.144]],"v":[[103.831,-187.5],[104.316,-188.147],[104.002,-188.45],[103.596,-188.456],[103.238,-188.246],[103.154,-187.868],[103.223,-187.723]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":28.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0.666,-1.023],[19.45,-2.017],[0.84,-0.782],[14.032,-14.486],[-18.576,-23.172],[-19.966,-35.115],[-45.062,-13.235],[-1.405,1.052],[-43.993,24.079],[-5.624,12.398],[1.493,13.983],[37.397,17.985]],"o":[[-0.882,1.354],[-16.952,1.758],[-2.391,2.225],[-14.221,14.681],[14.527,18.121],[0.48,0.284],[38.112,11.194],[2.484,-1.861],[10.642,-5.825],[6.505,-14.341],[-1.642,-15.378],[-20.416,-9.818]],"v":[[88.741,-204.955],[47.116,-213.879],[13.891,-195.225],[-22.532,-180.014],[-39.424,-108.828],[-28.034,-50.885],[27.954,-19.651],[98.724,-46.937],[160.843,-68.619],[176.165,-118.93],[179.642,-158.122],[136.603,-207.485]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0.479,-0.95],[6.476,-1.858],[5.73,-4.123],[2.985,-5.373],[-3.149,-15.55],[-1.978,-1.515],[-40.311,-7.14],[-1.116,1.047],[-35.802,25.085],[-3.682,11.281],[5.698,10.853],[32.872,2.435]],"o":[[-0.649,1.288],[-5.296,1.519],[-4.211,3.03],[-8.652,15.575],[4.018,19.842],[0.443,0.2],[34.093,6.038],[1.974,-1.851],[8.661,-6.068],[4.259,-13.049],[-6.103,-11.626],[-49.698,-3.681]],"v":[[34.521,-200.55],[22.409,-196.746],[5.091,-188.783],[-6.012,-176.377],[-17.899,-126.223],[3.553,-90.062],[40.811,-66.36],[96.948,-84.235],[159.802,-107.585],[157.56,-150.144],[156.377,-188.33],[97.698,-230.819]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[2.953,2.223],[8.094,-0.513],[7.652,-4.544],[4.606,-6.958],[-7.261,-7.104],[-1.308,-1.002],[-34.987,-6.73],[-0.932,0.874],[-10.155,7.757],[-2.869,8.124],[4.734,9.018],[27.476,1.597]],"o":[[-0.962,-0.724],[-6.62,0.42],[-5.624,3.34],[-10.388,15.693],[5.802,5.676],[0.37,0.167],[28.389,5.461],[1.648,-1.545],[7.056,-5.39],[3.285,-9.3],[-5.096,-9.707],[-23.985,-1.394]],"v":[[60.842,-254.532],[45.72,-256.204],[23.472,-249.5],[7.794,-234.348],[9.965,-200.505],[24.13,-190.667],[53.987,-158.77],[95.432,-180.374],[128.29,-186.929],[143.629,-207.888],[142.13,-236.396],[101.485,-263.106]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[10.73,0.457],[3.836,-1.865],[2.004,-2.497],[0.867,-2.178],[-0.225,-4.03],[-1.237,-3.044],[-5.754,-2.333],[-9.471,2.165],[-3.785,4.193],[-0.263,3.388],[3.105,4.777],[4.642,3.585]],"o":[[-5.554,-0.236],[-3.137,1.525],[-1.473,1.835],[-1.454,3.65],[0.18,3.22],[2.982,7.341],[6.786,2.752],[7.532,-1.722],[2.335,-2.587],[0.302,-3.878],[-3.532,-5.434],[-3.9,-3.012]],"v":[[94.5,-280.5],[80.422,-277.879],[72.715,-271.748],[69.207,-265.69],[67.372,-253.989],[69.5,-244.5],[82.798,-230.326],[107.5,-230],[125,-238.987],[129.021,-247.977],[125,-261],[115.065,-275.011]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[4.174,0.178],[1.575,-0.925],[0.872,-1.193],[0.405,-1.01],[-0.016,-1.739],[-0.481,-1.184],[-1.973,-1.528],[-3.685,0.842],[-1.983,2.291],[-0.551,1.749],[0.583,2.139],[2.439,1.701]],"o":[[-2.161,-0.092],[-1.288,0.756],[-0.641,0.877],[-0.679,1.692],[0.013,1.39],[1.16,2.856],[2.327,1.803],[2.93,-0.67],[1.223,-1.413],[0.631,-2.002],[-0.634,-2.326],[-2.049,-1.429]],"v":[[97.159,-306.686],[91.545,-305.337],[88.299,-302.359],[86.729,-299.508],[85.724,-294.259],[86.46,-290.346],[91.122,-283.638],[100.077,-281.981],[107.699,-286.651],[110.421,-291.447],[110.581,-297.738],[106.3,-304.09]],"c":true}]},{"t":31.2,"s":[{"i":[[0.235,0.01],[0.089,-0.052],[0.049,-0.067],[0.023,-0.057],[-0.001,-0.098],[-0.027,-0.067],[-0.111,-0.086],[-0.207,0.047],[-0.112,0.129],[-0.031,0.098],[0.033,0.12],[0.137,0.096]],"o":[[-0.122,-0.005],[-0.073,0.043],[-0.036,0.049],[-0.038,0.095],[0.001,0.078],[0.065,0.161],[0.131,0.101],[0.165,-0.038],[0.069,-0.08],[0.036,-0.113],[-0.036,-0.131],[-0.115,-0.08]],"v":[[98.656,-304.978],[98.34,-304.902],[98.157,-304.735],[98.069,-304.574],[98.013,-304.279],[98.054,-304.058],[98.316,-303.681],[98.82,-303.588],[99.249,-303.85],[99.403,-304.12],[99.412,-304.474],[99.171,-304.832]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[10.408,1.859],[7.443,-5.738],[3.012,-12.842],[-17.95,-10.905],[-3.656,-10.23],[-35.083,0.503],[-3.528,0.039],[-1.55,12.097],[16.654,8.637],[40.267,4.549]],"o":[[-10.415,-1.86],[-14.672,11.312],[-3.217,13.714],[12.983,7.887],[2.274,6.362],[43.85,-0.628],[25.046,-0.278],[1.2,-9.37],[-9.291,-4.819],[-32.912,-3.718]],"v":[[-127.342,-79.192],[-154.515,-74.214],[-177.302,-37.488],[-151.287,3.303],[-127.964,16.011],[-85.686,39.497],[-38.046,13.778],[6.05,-27.097],[-25.397,-71.054],[-91.241,-90.782]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[9.497,1.774],[6.791,-5.477],[2.749,-12.258],[-16.379,-10.409],[-3.336,-9.765],[-32.012,0.48],[-7.481,2.762],[-1.693,8.392],[15.196,8.245],[36.742,4.342]],"o":[[-9.503,-1.775],[-13.387,10.797],[-2.935,13.091],[11.846,7.529],[2.075,6.073],[40.011,-0.6],[13.849,-5.113],[1.779,-8.823],[-8.478,-4.6],[-30.031,-3.549]],"v":[[-113.997,-107.774],[-138.791,-103.023],[-159.584,-68.443],[-135.846,-29.029],[-114.564,-16.898],[-75.988,5.52],[-27.956,-16.167],[-1.864,-51.365],[-26.451,-95.233],[-81.969,-116.451]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[2.79,0],[9.472,-5.289],[0.543,-10.049],[-12.152,-6.059],[-6.974,0.9],[-5.231,0.773],[-5.071,3.349],[-0.245,6.856],[11.081,4.624],[7.423,-2.051]],"o":[[-6.573,0],[-10.568,5.901],[-0.58,10.732],[20.496,10.219],[3.98,-0.514],[5.778,-0.854],[8.756,-5.783],[0.257,-7.208],[-6.64,-2.771],[-4.973,1.374]],"v":[[-74.053,-152.872],[-108.208,-151.977],[-120.97,-119.91],[-102.996,-87.219],[-63.402,-93.688],[-49.15,-95.194],[-32.292,-100.927],[-23.015,-127.165],[-39.115,-156.922],[-61.9,-155.642]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[2.86,0],[5.561,-4.877],[0.54,-9.999],[-8.195,-3.768],[-6.968,0.899],[-3.614,2.241],[-2.882,3.757],[-0.222,6.213],[6.41,4.077],[4.915,1.202]],"o":[[-6.204,0],[-6.541,5.736],[-0.55,10.183],[6.693,3.077],[4.097,-0.529],[3.992,-2.475],[4.381,-5.712],[0.236,-6.607],[-4.295,-2.732],[-3.293,-0.805]],"v":[[-69,-174],[-87.496,-166.273],[-99.5,-142],[-85.74,-121.199],[-64,-118],[-52.332,-122.311],[-41.885,-131.87],[-34.5,-150.5],[-45.338,-166.789],[-59.628,-172.768]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[1.828,0],[3.554,-3.117],[0.345,-6.39],[-5.237,-2.408],[-4.453,0.575],[-2.31,1.432],[-1.842,2.401],[-0.142,3.971],[4.097,2.606],[3.141,0.768]],"o":[[-3.965,0],[-4.18,3.666],[-0.352,6.508],[4.277,1.966],[2.618,-0.338],[2.551,-1.581],[2.8,-3.65],[0.151,-4.223],[-2.745,-1.746],[-2.104,-0.515]],"v":[[-71.868,-187.534],[-83.689,-182.595],[-91.361,-167.083],[-82.567,-153.789],[-68.673,-151.744],[-61.216,-154.499],[-54.539,-160.608],[-49.82,-172.515],[-56.746,-182.925],[-65.879,-186.747]],"c":true}]},{"t":31.2,"s":[{"i":[[-0.108,0],[-0.209,0.183],[-0.02,0.376],[0.308,0.142],[0.262,-0.034],[0.136,-0.084],[0.108,-0.141],[0.008,-0.234],[-0.241,-0.153],[-0.185,-0.045]],"o":[[0.233,0],[0.246,-0.216],[0.021,-0.383],[-0.252,-0.116],[-0.154,0.02],[-0.15,0.093],[-0.165,0.215],[-0.009,0.248],[0.161,0.103],[0.124,0.03]],"v":[[-77.184,-187.91],[-76.489,-188.2],[-76.038,-189.113],[-76.555,-189.895],[-77.372,-190.015],[-77.811,-189.853],[-78.204,-189.494],[-78.481,-188.793],[-78.074,-188.181],[-77.537,-187.956]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[15.864,17.253],[34.705,1.588],[1.799,-4.405],[9.041,-2.704],[-13.75,-8.503],[-14.191,-1.467],[-24.62,-3.46],[-6.571,12.663],[1.056,7.355]],"o":[[-7.974,-8.672],[-12.45,-0.57],[-0.73,1.788],[-31.143,9.314],[9.3,5.751],[14.136,1.462],[10.6,1.49],[3.228,-6.221],[-1.4,-9.752]],"v":[[-2.632,-145.83],[-44.324,-166.835],[-70.65,-154.238],[-86.096,-149.683],[-101.528,-91.89],[-67.362,-80.98],[-31.388,-62.915],[5.933,-83.054],[11.405,-103.691]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[18.665,14.175],[34.438,-4.575],[0.991,-4.654],[8.421,-4.26],[-15.037,-5.937],[-14.227,1.065],[-24.844,0.948],[-4.228,13.625],[2.34,7.053]],"o":[[-9.382,-7.125],[-12.355,1.641],[-0.402,1.889],[-29.005,14.674],[10.17,4.016],[14.171,-1.061],[10.697,-0.408],[2.077,-6.694],[-3.102,-9.351]],"v":[[-6.665,-176.142],[-60.438,-194.425],[-75.098,-172.389],[-89.495,-165.174],[-94.463,-105.563],[-58.907,-100.867],[-20.305,-89.448],[12.867,-115.87],[14.602,-137.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[13.466,10.973],[7.517,-1.517],[5.917,-0.143],[5.761,-3.893],[-10.987,-12.103],[-10.263,0.825],[-17.923,0.734],[-3.05,10.547],[2.438,5.123]],"o":[[-6.781,-5.526],[-5.497,1.11],[-7.36,0.178],[-24.532,16.579],[5.504,6.063],[10.224,-0.821],[7.717,-0.316],[1.499,-5.182],[-2.343,-4.923]],"v":[[-10.966,-226.473],[-32.399,-229.93],[-49.513,-227.051],[-73.968,-221.079],[-80.077,-175.708],[-54.426,-172.073],[-26.577,-163.234],[-2.646,-183.687],[-4.64,-199.385]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[3.139,1.638],[4.047,-0.364],[2.627,-1.408],[2.458,-2.786],[-8,-4.5],[-5.194,2.138],[-3.327,2.815],[0.173,4.109],[1.416,2.189]],"o":[[-4.466,-2.33],[-2.959,0.266],[-3.032,1.625],[-10.061,11.403],[3.905,2.197],[5.446,-2.242],[3.021,-2.556],[-0.098,-2.32],[-1.473,-2.278]],"v":[[-31,-255],[-43.828,-257.788],[-52.23,-255.213],[-60.5,-248.5],[-55,-222],[-40.565,-222.842],[-26.5,-231.5],[-21.927,-242.124],[-24.143,-249]],"c":true}]},{"t":28.8,"s":[{"i":[[-0.058,-0.03],[-0.074,0.007],[-0.048,0.026],[-0.045,0.051],[0.147,0.083],[0.096,-0.039],[0.061,-0.052],[-0.003,-0.076],[-0.026,-0.04]],"o":[[0.082,0.043],[0.054,-0.005],[0.056,-0.03],[0.185,-0.21],[-0.072,-0.04],[-0.1,0.041],[-0.056,0.047],[0.002,0.043],[0.027,0.042]],"v":[[-47.289,-288.46],[-47.053,-288.409],[-46.898,-288.456],[-46.746,-288.58],[-46.847,-289.067],[-47.113,-289.052],[-47.371,-288.892],[-47.455,-288.697],[-47.415,-288.571]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":28.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[13.281,-0.5],[-3.018,-9],[-3.48,-2.928],[-3.788,-1.569],[-6.776,2.264],[-2.596,6.468],[-2.723,1.662]],"o":[[-13.281,0.5],[1.44,4.294],[3.813,3.209],[3.629,1.503],[2.016,-0.674],[2.355,-5.869],[7.29,-4.449]],"v":[[43.411,210.5],[18.056,226.5],[21.179,242.334],[37.978,244.5],[46.026,258.986],[49.738,241.545],[59.71,232]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[11,-0.5],[-2.5,-9],[-2.99,-2.972],[-3.055,-1.528],[-1.904,1.567],[-1.918,2.068],[-2.862,2.109]],"o":[[-11,0.5],[1.227,4.417],[3.102,3.083],[2.347,1.173],[1.498,-1.233],[1.878,-2.026],[6.038,-4.449]],"v":[[43,202.5],[22,218.5],[28.769,229.583],[38.5,236.5],[44.563,235.52],[49.533,230.379],[56.5,224]],"c":true}]},{"t":19.2,"s":[{"i":[[2.959,-0.134],[-0.672,-2.421],[-0.804,-0.799],[-0.822,-0.411],[-0.657,0.093],[-0.516,0.556],[-0.202,0.874]],"o":[[-2.959,0.134],[0.33,1.188],[0.834,0.829],[0.631,0.316],[0.992,-0.14],[0.505,-0.545],[0.454,-1.966]],"v":[[36.466,183.808],[30.818,188.112],[31.966,191.227],[34.651,192.684],[36.82,192.891],[39.233,191.643],[40.837,189.322]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[7.616,-2.496],[-7.972,-18.645],[-8.199,6.548],[2.474,5.786]],"o":[[-7.616,2.496],[7.972,18.645],[8.199,-6.548],[-2.474,-5.786]],"v":[[4.739,158.904],[-0.597,187.041],[27.32,194.116],[27.822,169.566]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[7.5,0.5],[0,-14.5],[-9.5,2],[0,4.5]],"o":[[-7.5,-0.5],[0,14.5],[9.5,-2],[0,-4.5]],"v":[[9,155],[-6,172],[15.5,184.5],[25,168.5]],"c":true}]},{"t":19.2,"s":[{"i":[[0.117,0.008],[0,-0.227],[-0.148,0.031],[0,0.07]],"o":[[-0.117,-0.008],[0,0.227],[0.148,-0.031],[0,-0.07]],"v":[[-1.758,138.945],[-1.992,139.211],[-1.656,139.406],[-1.508,139.156]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":20.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 13","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[24,-5],[0,0],[17,-8.5],[0,0],[12.67,-3.424],[0,0],[12.902,-26.796],[0,0],[4,-0.5],[0,0],[21.321,-10.481],[3.672,-1.663],[0.83,-11.235],[-6.126,-3.982],[0,0],[-6.5,-3.5],[0,0],[-35.5,-1.5],[0,0],[-9.5,5],[0,0],[-3.5,2],[0,0],[-6.5,-2],[5,-2.5],[14,-1],[0,0],[-2.5,-14.5],[-11.5,5],[0,0],[-12.5,22],[0,0],[-8.5,0.5],[-9.5,0.5],[-21,12.5],[0,0],[-34.436,37.019],[7.5,17.5],[0,0],[-2.5,25],[0,0],[10.5,9.5],[0,0]],"o":[[-19.115,3.982],[0,0],[-17,8.5],[0,0],[-18.5,5],[0,0],[-6.5,13.5],[0,0],[-4,0.5],[0,0],[-15.528,7.633],[-26.5,12],[-1.312,17.769],[10,6.5],[0,0],[6.5,3.5],[0,0],[35.5,1.5],[0,0],[9.5,-5],[0,0],[3.5,-2],[0,0],[6.5,2],[-5,2.5],[-14,1],[0,0],[3.436,19.93],[11.5,-5],[0,0],[9.082,-15.985],[0,0],[8.5,-0.5],[9.5,-0.5],[20.266,-12.063],[0,0],[20,-21.5],[-6.837,-15.953],[0,0],[3.637,-36.373],[0,0],[-41.229,-37.302],[0,0]],"v":[[55.5,-190],[32.5,-165],[-15.5,-171.5],[-38.5,-141],[-67.5,-142],[-87.5,-112],[-105.5,-95.5],[-108,-75],[-110,-76],[-108.5,-74],[-142.472,-68.633],[-157,-41.5],[-181.656,-1.975],[-170.5,34.5],[-149,36.5],[-144,50],[-132,58.5],[-96,65],[-68.5,50],[-39,61],[-9,50.5],[3,51.5],[11,42],[22,42],[36.5,42],[13.5,37],[6,47.5],[-33,55],[-12,86.5],[7.5,85.5],[45.5,69],[57,48.5],[73.5,57.5],[94,53.5],[132,56],[151.5,23.5],[183.5,7],[193.5,-45],[174.5,-64.5],[203,-98],[173.5,-142.5],[165.5,-168.5],[94,-175.5]],"c":true}]},{"t":15.6,"s":[{"i":[[24,-5],[0,0],[17,-8.5],[0,0],[12.67,-3.424],[0,0],[13.5,-26.5],[0,0],[4,-0.5],[0,0],[7.858,1.457],[14.496,-19.767],[-4.463,-11.344],[-4.602,-2.991],[0,0],[-6.5,-3.5],[0,0],[-35.5,-1.5],[0,0],[-9.5,5],[0,0],[-3.5,2],[0,0],[-6.5,-2],[5,-2.5],[14,-1],[0,0],[3,-20],[-11.5,5],[0,0],[-13,13],[0,0],[-8.5,0.5],[-9.5,0.5],[-9,3],[0,0],[-34.436,37.019],[13,11.5],[0,0],[-3,16.5],[0,0],[39.061,43.812],[0,0]],"o":[[-19.115,3.982],[0,0],[-17,8.5],[0,0],[-18.5,5],[0,0],[-13.5,26.5],[0,0],[-4,0.5],[0,0],[-8.76,-1.624],[-14.844,20.242],[3.805,9.671],[10,6.5],[0,0],[6.5,3.5],[0,0],[35.5,1.5],[0,0],[9.5,-5],[0,0],[3.5,-2],[0,0],[6.5,2],[-5,2.5],[-14,1],[0,0],[-3,20],[11.5,-5],[0,0],[13,-13],[0,0],[8.5,-0.5],[9.5,-0.5],[9,-3],[0,0],[20,-21.5],[-13,-11.5],[0,0],[3,-16.5],[0,0],[-37,-41.5],[0,0]],"v":[[43,-215.5],[18,-191],[-12,-190.5],[-28,-170],[-54.5,-172.5],[-76,-151.5],[-105.5,-135.5],[-102,-93.5],[-112.5,-91],[-114.5,-79],[-127.054,-85.6],[-163,-64.5],[-173.657,-17.043],[-158,2],[-141,4],[-140.5,14.5],[-125.5,14],[-86.5,37.5],[-45,16],[-17.5,8],[-2.5,-15],[7,-19.5],[10,-30],[18,-21.5],[31,-6],[12,-9.5],[-4.5,11],[-16,35],[8.5,60.5],[19,41.5],[43,36.5],[43.5,11],[54,15],[74.5,23],[104.5,23.5],[122,11],[172.5,-5],[170,-65.5],[160.5,-75],[173,-92],[172.5,-115.5],[168,-186],[87.5,-205.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[24.5,-6],[0,0],[27.5,-10],[0,0],[18.5,-13],[0,0],[4.683,-13.53],[0,0],[15.936,-17.96],[0,0],[-12.285,-25.638],[0,0],[-8,3.5],[0,0],[-10.023,-1.879],[0,0],[-13.543,-9.439],[0,0],[-21,11],[0,0],[-4,8],[0,0],[-11.5,-1.5],[0,0],[-21,10],[0,0],[-12.5,36],[0,0],[-4.783,22.547],[0,0],[36,12],[0,0]],"o":[[-24.62,6.029],[0,0],[-27.5,10],[0,0],[-15.791,11.097],[0,0],[-4.5,13],[0,0],[-31.5,35.5],[0,0],[11.5,24],[0,0],[9.023,-3.948],[0,0],[8,1.5],[0,0],[16.5,11.5],[0,0],[19.448,-10.187],[0,0],[4,-8],[0,0],[11.5,1.5],[0,0],[23.058,-10.98],[0,0],[12.5,-36],[0,0],[3.5,-16.5],[0,0],[-36,-12],[0,0]],"v":[[63.5,-163],[33.5,-149],[-8.5,-145.5],[-31.5,-112.5],[-80,-102.5],[-93.5,-65.5],[-116.5,-58.5],[-120.5,-37],[-185,-35],[-190.5,26],[-187.5,58],[-155.5,83.5],[-129.5,89.5],[-106,74],[-81,98.5],[-45.5,91],[-50,127.5],[-26.5,131],[9,136.5],[22,124],[41,119],[43,104],[70,105],[107,86.5],[149,87],[171.5,72],[196.5,6.5],[176.5,-44],[191,-69.5],[183.5,-96],[145,-148],[96.5,-152.5]],"c":true}]},{"t":13.2,"s":[{"i":[[24.5,-6],[0,0],[27.5,-10],[0,0],[18.5,-13],[0,0],[4.684,-13.53],[0,0],[20.5,-12.5],[0,0],[-2,-44],[0,0],[-35.5,-3.5],[0,0],[-10.023,-1.879],[0,0],[-13.543,-9.439],[0,0],[-7.5,7],[0,0],[-4,8],[0,0],[-11.5,-1.5],[0,0],[-21,10],[0,0],[-12.5,36],[0,0],[0,32.5],[0,0],[36,12],[0,0]],"o":[[-24.62,6.029],[0,0],[-27.5,10],[0,0],[-15.791,11.097],[0,0],[-4.5,13],[0,0],[-19.329,11.786],[0,0],[2.004,44.093],[0,0],[35.5,3.5],[0,0],[8,1.5],[0,0],[16.5,11.5],[0,0],[7.5,-7],[0,0],[4,-8],[0,0],[11.5,1.5],[0,0],[23.058,-10.98],[0,0],[12.5,-36],[0,0],[0,-32.5],[0,0],[-36,-12],[0,0]],"v":[[55.5,-188.5],[31.5,-166],[-13,-172.5],[-37.5,-140.5],[-73,-138],[-88,-112],[-104,-95],[-104.5,-74],[-141.5,-70],[-155,-42],[-181.5,3.5],[-147.5,38.5],[-112.5,63.5],[-66,52],[-51.5,62],[-33,58],[-22.5,82.5],[6.5,84],[35,80.5],[41.5,66.5],[55,61.5],[57,50.5],[75.5,58.5],[94.5,54],[130,55.5],[151.5,25],[193,-7.5],[176,-65],[201.5,-101],[175,-140.5],[144,-181.5],[93,-175]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[9.632,0.803],[-15.25,0]],"o":[[-9.632,-0.803],[15.25,0]],"v":[[31.5,272.217],[31.5,293.086]],"c":true}]},{"t":13.2,"s":[{"i":[[6,0.5],[-9.5,0]],"o":[[-6,-0.5],[9.5,0]],"v":[[28.5,261.5],[28.5,274.5]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[10,0],[-10.892,-11.763],[-1.96,-6.72],[-6,1],[-9,6.5],[11,7.5]],"o":[[-10,0],[12.5,13.5],[3.5,12],[6,-1],[9,-6.5],[-11,-7.5]],"v":[[31.5,232],[17.5,250.5],[23.5,287],[51.5,288.5],[50.5,259],[53.5,234.5]],"c":true}]},{"t":13.2,"s":[{"i":[[10,0],[-1,-16],[-7,0],[-6,1],[-9,6.5],[11,7.5]],"o":[[-10,0],[1,16],[7,0],[6,-1],[9,-6.5],[-11,-7.5]],"v":[[34,212],[17.5,232.5],[39,246],[45,259],[53,238],[56,214.5]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[13,0.5],[-5.5,-17],[-7.767,-1.328],[-3.187,9.561]],"o":[[-13,-0.5],[2.578,7.97],[8.8,1.505],[6,-18]],"v":[[3,175.5],[-8.5,201.5],[11.259,228.41],[30.5,204.5]],"c":true}]},{"t":13.2,"s":[{"i":[[13,0.5],[-5.5,-17],[-6.476,-1.464],[-3.142,9.426]],"o":[[-13,-0.5],[2.62,8.097],[7.12,1.609],[6,-18]],"v":[[9,158],[-2.5,184],[12.845,198.936],[30.5,188]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[3.238,15.896],[7.364,-19.086],[-12.232,-1.734]],"o":[[-2.321,-11.394],[-7.364,19.086],[12.232,1.734]],"v":[[36.321,146.394],[16.254,145.303],[26.642,165.907]],"c":true}]},{"t":13.2,"s":[{"i":[[3.148,0.439],[-2.139,-2.941],[-0.915,2.087]],"o":[[-2.856,-0.399],[1.171,1.611],[0.882,-2.011]],"v":[[20.631,109.151],[18.472,114.276],[23.743,113.544]],"c":true}]}],"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":14.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":5,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[17.25,-5.25],[-9.25,-5],[-0.5,-8.5],[1.419,-4.336],[1,-4.25],[6.083,-5.367],[3.75,-3.75],[-8,-1],[2,12],[5.878,5.143],[9.546,9.546],[1.274,4.078],[-0.5,5.5],[-0.742,9.355],[1.75,12.75]],"o":[[-17.25,5.25],[9.25,5],[0.5,8.5],[-4.5,13.75],[-1,4.25],[-8.5,7.5],[-3.75,3.75],[8,1],[-2,-12],[-8,-7],[-5.5,-5.5],[-2.5,-8],[0.405,-4.454],[1.25,-15.75],[-1.75,-12.75]],"v":[[-6.5,181.25],[-13.75,213],[2.5,230.75],[-10.5,236.75],[0.5,256.5],[-1,272],[-5.75,284.75],[24.5,296.5],[60,281],[48.5,263],[38,252.5],[32.5,241.5],[33.5,230],[36.25,215.75],[22.25,197.75]],"c":true}]},{"t":10.8,"s":[{"i":[[17.25,-5.25],[-9.25,-5],[-0.5,-8.5],[-4.5,0.75],[1,-4.25],[-4.5,-6.75],[3.75,-3.75],[-8,-1],[2,12],[-5,6],[13.5,0],[4,1.5],[4,2],[-7,6.25],[1.75,12.75]],"o":[[-17.25,5.25],[9.25,5],[0.5,8.5],[4.5,-0.75],[-1,4.25],[4.5,6.75],[-3.75,3.75],[8,1],[-2,-12],[5,-6],[-13.5,0],[-4,-1.5],[-4,-2],[7,-6.25],[-1.75,-12.75]],"v":[[3.5,172.75],[-6.75,200.5],[6.5,225.75],[15.5,228.75],[17,243],[23.5,259],[20.25,282.75],[34,294.5],[52.5,278.5],[52.5,253],[50,233],[35,241.5],[30,235],[25.75,226.75],[29.75,197.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[23,0.5],[0,0],[25,-12.25],[0,0],[11.75,-11.75],[0,0],[2.067,-7.853],[1.668,-0.834],[37.75,-26.25],[0,0],[-42.92,-17.937],[0,0],[-18.5,-7.25],[0,0],[-13.5,2.25],[0,0],[-21,-0.75],[-3.5,4.75],[-0.75,-8.75],[4.25,-2.25],[-12.5,-2.75],[4,8.5],[-5.25,7.5],[-4.25,7.75],[-12.25,1],[-11.25,-0.25],[-9.25,6],[0,0],[-34.5,21.25],[0,0],[1.576,29.989],[-1.233,1.234],[1.555,13.02],[0,0],[31.895,60.206],[2.206,2.794],[10.148,5.102],[0,0]],"o":[[-23,-0.5],[0,0],[-25,12.25],[0,0],[-23.939,23.939],[0,0],[-3.75,14.25],[0,0],[-37.75,26.25],[0,0],[16.75,7],[0,0],[18.5,7.25],[0,0],[19.141,-3.19],[0,0],[21,0.75],[3.5,-4.75],[0.75,8.75],[-4.25,2.25],[12.5,2.75],[-4,-8.5],[5.25,-7.5],[4.25,-7.75],[12.25,-1],[11.25,0.25],[9.25,-6],[0,0],[34.5,-21.25],[0,0],[-1.739,-33.095],[0.38,-0.38],[-1.512,-12.657],[0,0],[-7.252,-13.689],[-0.444,0.008],[-7.636,-3.839],[0,0]],"v":[[74,-147],[37,-131.25],[-4,-125.75],[-34.5,-90],[-78.75,-91.25],[-92.25,-64.25],[-113.25,-30.75],[-117,8],[-171.75,-3.25],[-202,64.5],[-168.75,107.5],[-142.25,106],[-107.5,138.25],[-80.25,148.75],[-50.5,153.25],[-33.5,144],[-8.5,164.25],[9.5,163],[28.25,160.5],[7.5,179.75],[2.25,198.5],[30.75,179.25],[45.5,162.25],[43.75,147],[52,138.75],[70.75,144.5],[94.75,139.25],[110,135.75],[167.75,129.25],[188.75,91.25],[205.924,49.511],[179.75,20.75],[194.091,-9.951],[174,-31],[172,-90.75],[139.278,-109.015],[118.772,-126.547],[102.5,-127.25]],"c":true}]},{"t":10.8,"s":[{"i":[[23,0.5],[0,0],[25,-12.25],[0,0],[26.75,-20.75],[0,0],[8.5,-12.25],[0,0],[37.75,-26.25],[0,0],[-41.25,-21.5],[0,0],[-18.5,-7.25],[0,0],[-7.25,-18],[0,0],[-21,-0.75],[-3.5,4.75],[-0.75,-8.75],[4.25,-2.25],[-12.5,-2.75],[4,8.5],[-5.25,7.5],[-4.25,7.75],[-12.25,1],[-11.25,-0.25],[-9.25,6],[0,0],[-34.5,21.25],[0,0],[-3.962,4.209],[-0.985,12.809],[5.582,6.1],[0,0],[31.895,60.206],[16.103,2.075],[6.126,-0.951],[0,0]],"o":[[-23,-0.5],[0,0],[-25,12.25],[0,0],[-26.75,20.75],[0,0],[-8.5,12.25],[0,0],[-37.75,26.25],[0,0],[41.25,21.5],[0,0],[18.5,7.25],[0,0],[7.25,18],[0,0],[21,0.75],[3.5,-4.75],[0.75,8.75],[-4.25,2.25],[12.5,2.75],[-4,-8.5],[5.25,-7.5],[4.25,-7.75],[12.25,-1],[11.25,0.25],[9.25,-6],[0,0],[34.5,-21.25],[0,0],[5.106,-5.424],[0.902,-11.728],[-5.246,-5.733],[0,0],[-10.553,-19.921],[-10.898,-1.405],[-3.906,0.606],[0,0]],"v":[[64,-163.5],[32,-146.25],[-7,-144.75],[-32.5,-110.5],[-76.25,-101.75],[-95.75,-70.25],[-115.75,-57.25],[-125,-35.5],[-180.75,-31.25],[-190,27.5],[-162.75,82],[-105.75,74],[-80,99.75],[-44.75,93.75],[-51.5,122.25],[-27.5,131.5],[-10.5,142.75],[8.5,132],[19.25,134],[16,149.75],[20.75,167],[37.75,148.25],[24,129.75],[42.75,116],[51.5,101.25],[72.25,104],[92.75,95.25],[107.5,86.75],[158.25,82.25],[179.25,30.25],[186.601,23.988],[198.75,-3.25],[188.527,-30.215],[178,-39],[173.5,-123.75],[128.753,-152.957],[101.742,-152.464],[95.5,-151.25]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":12,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[16.5,1.75],[0,0],[25.5,-18],[0,0],[21,-3],[0,0],[1,-21],[0,0],[5.78,-1.759],[6.647,-0.026],[9.366,-2.297],[0,0],[-14.139,-43.375],[0,0],[-9,-4.5],[0,0],[-5.463,-5.031],[0,0],[-23.5,-3.5],[0,0],[-4,-5.375],[-8.519,-1.917],[-3.625,1.25],[2.112,-10.561],[0.75,-5.5],[3.75,-13],[-15.5,0],[6.5,16.25],[0.5,5.25],[2.404,10.415],[-1.5,5.875],[-0.625,-0.125],[-9.25,-1],[-1.625,0.25],[-13.049,0.991],[0,0],[-40.514,19.542],[-1.733,0.284],[-3.867,27.833],[0,0],[2.5,33],[0,0],[-2.2,4.6],[0,0],[2.659,37.887],[3.733,10.905],[8.358,1.358],[15.014,8.974],[0,0],[13,1.25],[0,0]],"o":[[-25.855,-2.742],[0,0],[-25.5,18],[0,0],[-21,3],[0,0],[-1,21],[0,0],[-4.563,1.388],[-8.236,0.032],[-26.5,6.5],[0,0],[7.375,22.625],[0,0],[9,4.5],[0,0],[4.75,4.375],[0,0],[23.5,3.5],[0,0],[3.686,4.953],[5,1.125],[10.149,-3.5],[-1.25,6.25],[-0.643,4.713],[-2.256,7.821],[15.5,0],[-4.76,-11.899],[-0.844,-8.862],[-0.75,-3.25],[2.877,-11.268],[8.25,1.25],[13.257,1.433],[5.318,-0.819],[9.875,-0.75],[0,0],[21.25,-10.25],[1.436,-0.235],[4.065,-29.26],[0,0],[-2.5,-33],[0,0],[2.75,-5.75],[0,0],[-1,-14.25],[-4.206,-12.289],[-1.975,-0.321],[-9.269,-5.54],[0,0],[-14.086,-1.354],[0,0]],"v":[[70,-123.75],[41.75,-116],[-6.25,-112],[-28.75,-64.25],[-72,-62.5],[-93.5,-42],[-112.75,-15.5],[-103.75,11.5],[-118.851,12.241],[-130.251,17.904],[-157,12.25],[-180.25,40],[-208.625,111.5],[-184.875,142.25],[-171.625,166.625],[-157.625,171.875],[-149.625,185],[-134.75,191.375],[-92.125,220.125],[-49.625,215],[-44.875,225.375],[-28.125,231.875],[-16,231.25],[-6.5,241.75],[-10.5,257.75],[-18,279.25],[23,297],[71.5,277.5],[62.5,253],[58.625,232.75],[58,218.375],[65,213.5],[80.25,221.75],[95.625,219.75],[109.875,223],[125,212.5],[177,205.5],[198.983,183.466],[223.867,158.917],[212,122.5],[216.75,84],[165,30],[163.25,12.75],[169.25,2.5],[183,-39],[167.456,-65.961],[147.892,-83.358],[135.986,-105.974],[116.5,-101.5],[103.5,-107],[85.25,-103.5]],"c":true}]},{"t":8.4,"s":[{"i":[[26,0],[0,0],[25.5,-18],[0,0],[21,-3],[0,0],[1,-21],[0,0],[1.197,1.376],[5.039,3.638],[13.458,-3.301],[0,0],[-27.624,-36.306],[0,0],[-9,-4.5],[0,0],[-34.147,-9.485],[0,0],[-23.5,-3.5],[0,0],[11.5,-11.5],[8.5,-13.5],[-9.5,-5],[10,-4],[-7,-11],[6,-5.5],[-15.5,0],[4.5,12],[5.5,7],[-2,10.5],[10.5,5],[-6.5,8],[0,12.5],[-2,5],[-20.5,-1.5],[0,0],[-41,18.5],[-4.304,4.893],[0.262,4.334],[0,0],[2.5,33],[0,0],[7,20],[0,0],[13.5,35.5],[5.454,4.433],[3.58,1.003],[2.196,-0.145],[0,0],[12,7.5],[0,0]],"o":[[-26,0],[0,0],[-25.5,18],[0,0],[-21,3],[0,0],[-1,21],[0,0],[-2.067,-2.377],[-8.21,-5.928],[-26.5,6.5],[0,0],[17.5,23],[0,0],[9,4.5],[0,0],[18,5],[0,0],[23.5,3.5],[0,0],[-11.5,11.5],[-8.5,13.5],[9.5,5],[-10,4],[7,11],[-6,5.5],[15.5,0],[-4.5,-12],[-5.5,-7],[2,-10.5],[-10.5,-5],[6.5,-8],[0,-12.5],[2,-5],[20.5,1.5],[0,0],[11.059,-4.99],[5.354,-6.087],[-0.308,-5.098],[0,0],[-2.5,-33],[0,0],[-7,-20],[0,0],[-4.246,-11.166],[-4.028,-3.274],[-4.031,-1.129],[-1.608,0.106],[0,0],[-12,-7.5],[0,0]],"v":[[72.5,-147.5],[36.5,-129],[-6,-122],[-34,-88],[-72.5,-94],[-95,-60.5],[-113,-30.5],[-114,7.5],[-115.832,5.26],[-126.679,-4.663],[-160,-12.5],[-194.5,30],[-188,98.5],[-142.5,108.5],[-130.5,124.5],[-111.5,127],[-71,150.5],[-36,144],[-6.5,166],[19.5,147],[24,172],[-17.5,188],[-6.5,218],[-6,234.5],[-0.5,256],[-5.5,281],[23,297],[58,278.5],[40.5,258.5],[31.5,233.5],[33.5,208.5],[26.5,189],[45,157],[42,133],[66,143.5],[109.5,137.5],[163.5,131],[185.848,115.945],[192.145,99.869],[189.5,91.5],[205,49.5],[180.5,21.5],[190,-12.5],[174,-32.5],[177.5,-78.5],[162.367,-101.159],[150.72,-107.276],[141.044,-108.327],[138.5,-108],[116,-127],[102.5,-123.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":6,"s":[0,0],"h":1},{"t":7.2,"s":[100,100],"h":1},{"t":9.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[53.5,-1.5],[0,0],[4.5,0],[0,0],[27,-16],[0,0],[8.5,0],[0,0],[29.5,-7.5],[0,0],[-4,-46],[0,0],[-12.5,-14],[0,0],[-32,-0.5],[0,0],[-16.5,0],[0,0],[0,0],[-5.192,-4.863],[-20.226,-0.259],[-5.364,6.404],[0,0],[4.5,15],[0,0],[-28,-0.5],[0,0],[-23.5,26],[0,0],[32,37],[0,0],[1,6],[0,0],[-3,34],[22.589,6.706],[0,0]],"o":[[-53.5,1.5],[0,0],[-4.5,0],[0,0],[-27,16],[0,0],[-8.5,0],[0,0],[-29.5,7.5],[0,0],[4,46],[0,0],[12.5,14],[0,0],[32,0.5],[0,0],[16.5,0],[0,0],[0,0],[5.593,5.239],[21.717,0.278],[4.269,-5.096],[0,0],[-4.5,-15],[0,0],[28,0.5],[0,0],[23.5,-26],[0,0],[-32,-37],[0,0],[-1,-6],[0,0],[3,-34],[-32,-9.5],[0,0]],"v":[[31.5,-125.5],[-23.5,-71],[-38.5,-70],[-44.5,-57.5],[-88,-55],[-102,8],[-115,13],[-130.5,19.5],[-166,13],[-184,35],[-214,91.5],[-179.5,135.5],[-167.5,164],[-136.5,184.5],[-98,216],[-46.5,216.5],[-20,234],[-2,231],[-17,277.5],[-15.497,286.997],[25.5,298],[66.446,285.711],[68.5,275],[59,230],[56.5,209.5],[97,224.5],[126,212.5],[198.5,189.5],[217,121],[210,57],[161.5,32.5],[164,20.5],[157.5,11.5],[183,-27.5],[135,-102.5],[85,-97]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":7.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[42.5,3],[0,0],[9.5,-2.5],[0,0],[24.5,-15.5],[0,0],[7.5,-4.5],[0,0],[26.877,-62.023],[0,0],[-24.5,-34],[0,0],[-51.855,-12.964],[0,0],[-51,3.5],[0,0],[-13.5,-0.5],[0,0],[-42.5,37],[0,0],[24,23],[0,0],[6.5,4.5],[0,0],[1,10],[0,0],[7,35],[0,0]],"o":[[-42.5,-3],[0,0],[-9.5,2.5],[0,0],[-24.5,15.5],[0,0],[-7.5,4.5],[0,0],[-26,60],[0,0],[24.5,34],[0,0],[50,12.5],[0,0],[51,-3.5],[0,0],[13.937,0.516],[0,0],[43.446,-37.824],[0,0],[-24,-23],[0,0],[-6.5,-4.5],[0,0],[-1,-10],[0,0],[-7,-35],[0,0]],"v":[[66,-53],[5,-23],[-8.5,-24],[-17,-12],[-77,-15],[-92.5,24],[-110,26],[-117,41.5],[-213.5,86],[-201,167],[-202.5,235.5],[-142.5,256.5],[-108,303],[-49,287.5],[24,299],[89.5,280.5],[105.5,291],[125.5,285.5],[196,266],[217.5,193.5],[221.5,145],[182.5,133],[171.5,114],[155,100.5],[161,84],[145.5,63],[160,13],[122.5,-20]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[32.74,1.116],[0,0],[24.25,-6.5],[0,0],[18.25,-26.75],[0,0],[3,-5.75],[0,0],[-18.49,-52.167],[0,0],[-35,-6.25],[0,0],[-22.25,1.25],[0,0],[-10.75,1.5],[0,0],[-23.465,-6.663],[-22.652,14.044],[-1.014,10.049],[0,0],[-0.5,4.5],[0,0],[5,16.75],[0,0],[16.5,18.75],[0.75,-0.25],[36.932,3.756],[0,0]],"o":[[-22,-0.75],[0,0],[-24.25,6.5],[0,0],[-18.25,26.75],[0,0],[-3,5.75],[0,0],[7,19.75],[0,0],[35,6.25],[0,0],[22.25,-1.25],[0,0],[10.75,-1.5],[0,0],[14.714,4.178],[16.327,-10.123],[2.091,-20.724],[0,0],[0.39,-3.514],[0,0],[-5,-16.75],[0,0],[-16.5,-18.75],[-0.75,0.25],[-29.5,-3],[0,0]],"v":[[-0.25,100.5],[-26,113.25],[-64,111],[-83,133.25],[-118.25,152.75],[-123,202.75],[-130.5,211.5],[-126.75,221.25],[-144.25,286.25],[-104.5,310.25],[-68.25,331.5],[-24,314.75],[2.25,325.25],[24.25,316.25],[43.75,318],[57,312],[92.204,339.283],[149.5,327.5],[169.092,296.459],[156.5,256],[161,248.25],[155,241],[162.75,213],[143.25,186.5],[144.5,149.25],[105.5,132.75],[72.5,105.5],[33.5,122.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"op","nm":"Offset Paths 1","a":{"a":0,"k":1,"ix":1},"lj":1,"ml":{"a":0,"k":4,"ix":3},"ix":14,"mn":"ADBE Vector Filter - Offset","hd":false},{"ty":"fl","c":{"a":0,"k":[0.196078431373,0.109188775455,0.109188775455,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":32.4,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 2","parent":3,"tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[2.698,-0.355],[15.446,-7.015],[-9.115,-2.421],[-6.842,0.514],[-3.086,12.172]],"o":[[-3.581,0.471],[-11.645,5.289],[4.376,1.163],[6.967,-0.523],[2.831,-11.166]],"v":[[29.081,25.029],[14.645,39.961],[4.365,62.921],[16.033,59.523],[40.169,50.666]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[14.007,-3.27],[3.054,-10.589],[-9.098,-2.485],[-5.421,3.044],[-9.099,10.523]],"o":[[-14.448,3.328],[-4.034,5.358],[18.135,4.954],[5.89,-3.614],[8.581,-9.791]],"v":[[15.831,1.029],[-7.355,29.961],[3.615,52.046],[16.908,37.148],[37.669,31.041]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[25.315,-6.185],[-9.337,-14.163],[-9.115,-2.421],[-4,5.574],[-15.111,8.874]],"o":[[-25.315,6.185],[3.578,5.428],[4.376,1.163],[4.812,-6.705],[14.331,-8.416]],"v":[[4.081,-10.471],[-18.355,26.461],[2.865,41.171],[21.283,31.773],[35.169,11.416]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[20.25,-0.5],[-4.75,-12],[-3.392,-0.85],[-3.402,0.681],[-4.06,1.98]],"o":[[-20.25,0.5],[1.55,3.916],[2.885,0.723],[4.855,-0.971],[10.25,-5]],"v":[[23.25,-22.75],[2.25,4.75],[9.967,11.595],[19.585,11.471],[33.5,6.5]],"c":true}]},{"t":24,"s":[{"i":[[3.174,-0.078],[-0.745,-1.881],[-0.532,-0.133],[-0.533,0.107],[-0.636,0.31]],"o":[[-3.174,0.078],[0.243,0.614],[0.452,0.113],[0.761,-0.152],[1.607,-0.784]],"v":[[25.036,-31.557],[21.745,-27.246],[22.954,-26.173],[24.462,-26.192],[26.643,-26.972]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[26,0],[-47,-27],[13.5,48]],"o":[[-26,0],[47,27],[-13.5,-48]],"v":[[1.5,146],[15.5,254],[76.5,203]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":15.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[18.5,-3],[-24,-9.5],[2,21]],"o":[[-18.5,3],[24,9.5],[-2,-21]],"v":[[14.5,91.5],[6.5,131.5],[52,117.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":15.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[18.5,0],[13,-51.5],[-49.5,-16],[-11,29.5],[20,38]],"o":[[-18.5,0],[-13,51.5],[49.5,16],[11,-29.5],[-20,-38]],"v":[[27,158.5],[-43.5,194.5],[-32,338.5],[76.5,335],[84.5,208]],"c":true}]},{"t":13.2,"s":[{"i":[[18.5,0],[13,-51.5],[-49.5,-16],[-11,29.5],[20,38]],"o":[[-18.5,0],[-13,51.5],[49.5,16],[11,-29.5],[-20,-38]],"v":[[33,99],[-37.5,135],[-26,279],[82.5,275.5],[90.5,148.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[14.133,-6.395],[0,0],[-14.839,-7.903],[-13.19,-9.118],[0,0],[7.694,7.903]],"o":[[0,0],[-12.091,5.471],[0,0],[9.104,4.848],[9.001,6.222],[0,0],[-9.184,-9.432]],"v":[[5.814,59.314],[-10.872,82.051],[-31.207,80.835],[-25.161,98.464],[0.12,100.896],[25.401,94.817],[18.806,72.932]],"c":true}]},{"t":13.2,"s":[{"i":[[0,0],[7,-12],[0,0],[-13.5,-6.5],[-5.5,5],[0,0],[7,6.5]],"o":[[0,0],[-7,12],[0,0],[8.282,3.988],[5.5,-5],[0,0],[-8.355,-7.758]],"v":[[22,-1.5],[16,33],[1,49],[17.5,64.5],[37.5,53],[50,46.5],[35,35.5]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":14.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2,-4],[0,0],[5.814,-1.508],[-2.305,-6.66],[-11,0],[-6.5,1],[3.5,4],[8.5,3]],"o":[[0,0],[-2,4],[0,0],[-6.108,1.584],[4.5,13],[11,0],[6.5,-1],[-3.5,-4],[-8.5,-3]],"v":[[3,73],[-7,83],[-6,94.5],[-22.998,93.508],[-27.5,107.5],[3,119.5],[25.5,112],[30,97.5],[9.5,92.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[11,3],[7,-14],[-11.5,-26],[-26,4],[0,14],[8.5,5.5]],"o":[[-11,-3],[-7,14],[11.5,26],[26,-4],[0,-14],[-8.5,-5.5]],"v":[[3,162.5],[-50.5,171],[-24.5,266],[61,314],[75.5,250],[36.5,183]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":12,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[4,-11.5],[-3.5,-6],[0,-12],[-7.5,-3.5],[12.5,-4],[0,0],[-11.5,-19.5],[-18.5,-8],[-19.5,15.5],[9.5,45],[-6.389,13.358],[0,7.5],[8,4.5]],"o":[[0,0],[-4,11.5],[3.5,6],[0,12],[7.5,3.5],[-12.5,4],[0,0],[11.5,19.5],[18.5,8],[19.5,-15.5],[-9.5,-45],[5.5,-11.5],[0,-7.5],[-8,-4.5]],"v":[[7.5,74],[1.5,82],[-1,100.5],[0.5,127],[17,144],[-8,159.5],[-94.5,216.5],[-40,276],[9.5,332],[86.5,316.5],[61,211.5],[38.5,140.5],[33,111],[26.5,88]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":10.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":1,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.5,-4],[5.5,-10],[-3,-8.5],[-7.5,-11],[12.5,-18],[0,0],[-10,10.5],[0,28.5],[4,7.5],[-1.5,14],[11,6.5]],"o":[[0,0],[-2.5,4],[-5.5,10],[3,8.5],[4.797,7.035],[-12.5,18],[0,0],[10,-10.5],[0,-28.5],[-4,-7.5],[1.5,-14],[-11,-6.5]],"v":[[4,56],[8,88],[1,114],[1.5,137.5],[20,157],[-32.5,191.5],[-37,279],[76,325.5],[57,203],[47.5,141],[40,110],[21.5,86]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":7.2,"s":[0,0],"h":1},{"t":8.4,"s":[100,100],"h":1},{"t":9.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[17.25,-4.5],[1.5,-9.25],[-7.25,-5.75],[0,0],[-1,-18.5],[6,-11],[0,0],[-10.5,-28],[-15.75,0.25],[0,0],[-7.25,0.75],[-10,-7.25],[-2.5,0],[-16.5,5.75],[0,0],[14.75,0.5],[7.25,9.75],[13.75,7.75],[0,11.75],[0,0],[-4,-9.25],[0,0],[-8,8.25],[-9.5,-15],[-10.5,0.5],[0,0],[6.5,-6.25],[-8,-1.25],[-11.25,6.75],[4.5,20.25],[0,0],[-8.75,14.75],[4.5,9.25],[0,0],[30.5,1.25],[0,0],[-15.25,-2],[0,0],[18.75,-5.25],[0,0],[-4.25,6.25],[-2.5,10],[12.5,1.25],[0,0],[29.5,10.25]],"o":[[-17.25,4.5],[-1.5,9.25],[7.25,5.75],[0,0],[1,18.5],[-6,11],[0,0],[10.5,28],[15.75,-0.25],[0,0],[7.25,-0.75],[10,7.25],[2.5,0],[16.5,-5.75],[0,0],[-14.75,-0.5],[-7.25,-9.75],[-13.75,-7.75],[0,-11.75],[0,0],[4,9.25],[0,0],[8,-8.25],[9.5,15],[10.5,-0.5],[0,0],[-6.5,6.25],[8,1.25],[11.25,-6.75],[-4.5,-20.25],[0,0],[8.75,-14.75],[-4.5,-9.25],[0,0],[-30.5,-1.25],[0,0],[15.25,2],[0,0],[-18.75,5.25],[0,0],[4.25,-6.25],[2.5,-10],[-12.5,-1.25],[0,0],[-29.5,-10.25]],"v":[[-83.25,111.25],[-106.5,137.25],[-103.5,162.25],[-90.25,169.75],[-112.75,191.5],[-122.75,209.25],[-120.5,220.75],[-128.75,259.25],[-89.5,289.5],[-59,276],[-32.5,281],[-14,287],[3.75,289.5],[34,293.75],[51.25,279.25],[21.25,289.25],[-1.5,280.25],[-21.25,267.25],[-35.75,245.75],[-34,216.75],[-29.75,241.5],[-13.5,256.75],[-14.75,235.75],[16.25,243.75],[54.5,264],[82.5,243.25],[87.5,251.5],[89.5,265.25],[123.25,259.5],[140,225.5],[122.25,195.75],[146.75,178],[142.5,135.75],[107,127],[67.75,112.75],[34.25,151.75],[57.75,153.5],[84.75,174.5],[40,165.25],[4.75,181],[1.5,169.25],[21.5,149],[3,133.75],[-16.25,138],[-38,114.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":1,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[82.5,3.5],[73.5,-29.5],[5.5,-43.5],[0,0],[-27,-10],[0,0],[-30,9],[0,0],[12.5,20.5],[0,0],[-7,0],[-22,12.5],[0,0],[-16,8],[0,0],[-8,16],[-25.5,-7.5],[0,0],[-8.5,-5.5],[0,0],[-20.5,-26],[0,0],[12,-3],[-3.5,-6],[-23,0.5],[-3,10],[0,0],[10.5,28],[0,0],[-24,-18.5],[32,-37],[26,-5],[-3.5,10],[-7.5,27.5],[12,12.5],[4.5,-14],[2,-15.5],[2.5,-9],[0,7],[-2.5,17.5],[0,25.5],[9,0.5],[0,-13],[0,-16.5],[2.5,-10],[2.5,3.5],[-4,29.5],[5.5,14],[0.5,-17.5],[0,-13],[-1.5,-7.5],[0,-7.5],[-56,22.5],[16.5,47]],"o":[[-82.5,-3.5],[-73.5,29.5],[-5.5,43.5],[0,0],[27,10],[0,0],[30,-9],[0,0],[-12.5,-20.5],[0,0],[7,0],[22,-12.5],[0,0],[16,-8],[0,0],[8,-16],[25.5,7.5],[0,0],[8.5,5.5],[0,0],[20.5,26],[0,0],[-12,3],[3.5,6],[23,-0.5],[3,-10],[0,0],[-10.5,-28],[0,0],[24,18.5],[-32,37],[-26,5],[3.5,-10],[7.5,-27.5],[-12,-12.5],[-4.5,14],[-2,15.5],[-2.5,9],[0,-7],[2.5,-17.5],[0,-25.5],[-9,-0.5],[0,13],[0,16.5],[-2.5,10],[-2.5,-3.5],[4,-29.5],[-5.5,-14],[-0.5,17.5],[0,13],[1.5,7.5],[0,7.5],[56,-22.5],[-16.5,-47]],"v":[[96.5,-61],[-103.5,-25.5],[-256,62],[-208.5,167.5],[-187,205.5],[-149,204],[-101,222.5],[-95.5,194.5],[-96.5,166],[-149,152],[-146.5,141.5],[-97,137],[-74,105],[-42.5,109.5],[-32.5,83.5],[3,66.5],[37,71],[75,75.5],[85,96.5],[98.5,111],[102.5,153.5],[157,179],[142.5,190.5],[129.5,209],[163,227],[202.5,204],[202.5,184],[212.5,155.5],[185.5,130],[240.5,122],[240.5,268.5],[101,313.5],[86,286.5],[105,240],[100.5,179],[76.5,179.5],[64,252],[55,299],[41.5,309],[50,278],[59,192],[50,133.5],[29,159],[21.5,248],[18,305.5],[-8.5,307],[-4.5,274],[-12.5,183],[-30.5,194],[-24,245],[-19,291.5],[-10,323.5],[186.5,312],[267.5,124]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":1,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[17.283,-14.86],[1.486,-0.814],[-0.424,-12.862],[-3.85,-5.131],[-8.721,0.809],[-1.641,4.39],[-1.693,0.946],[-5.911,-1.465],[-22.818,2.774],[-2.398,6.531],[-0.728,-0.264],[0.61,-4.076],[-0.129,-3.715],[-0.993,-0.131],[-4.491,5.923],[8.341,11.143],[0.27,1.146],[25.768,7.321]],"o":[[-7.608,6.541],[-4.576,2.508],[0.523,15.869],[6.081,8.104],[17.368,-1.611],[3.794,-10.149],[6.812,-3.805],[8.611,2.134],[6.986,-0.849],[1.502,-4.091],[1.067,0.388],[-0.549,3.663],[0.343,9.884],[10.532,1.391],[8.157,-10.758],[-6.922,-9.248],[-1.173,-4.981],[-6.521,-1.853]],"v":[[-85.221,-61.64],[-102.111,-50.663],[-100.576,-31.638],[-85.195,-7.043],[-54.804,8.691],[-52.262,-17.689],[-65.307,-15.946],[-60.595,-8.204],[-36.432,7.476],[-19.364,-18.393],[-17.115,-27.107],[-22.295,-20.51],[-37.868,-5.774],[-32.623,5.17],[-11.407,-15.249],[-4.027,-41.121],[-13.678,-67.885],[-33.399,-80.585]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[17.283,-14.86],[1.486,-0.814],[0.944,-10.12],[-3.85,-5.131],[-8.721,0.809],[-1.641,4.39],[1.016,2.455],[-5.911,-1.465],[-14.729,2.042],[-2.398,6.531],[-0.728,-0.264],[0.61,-4.076],[-0.129,-3.715],[-0.993,-0.131],[-4.491,5.923],[8.341,11.143],[0.462,1.063],[16.753,4.452]],"o":[[-7.608,6.541],[-4.576,2.508],[-2.112,15.51],[6.081,8.104],[17.368,-1.611],[3.794,-10.149],[0.735,-4.746],[8.611,2.134],[6.945,-1.106],[1.502,-4.091],[1.067,0.388],[-0.549,3.663],[0.343,9.884],[10.532,1.391],[8.157,-10.758],[-6.922,-9.248],[-2.542,-5.417],[-6.581,-1.606]],"v":[[-90.471,-77.39],[-97.861,-52.413],[-102.826,-37.888],[-94.445,-16.043],[-71.304,-4.059],[-63.012,-19.189],[-71.307,-27.946],[-66.595,-20.204],[-38.307,-11.274],[-25.364,-30.393],[-23.115,-39.107],[-28.295,-32.51],[-36.618,-17.274],[-28.248,-5.08],[-5.032,-24.374],[-3.902,-52.621],[-20.678,-70.885],[-40.399,-83.585]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[17.283,-14.86],[1.486,-0.814],[2.312,-7.379],[-3.85,-5.131],[-8.721,0.809],[-1.641,4.39],[3.725,3.965],[-5.911,-1.465],[-6.641,1.31],[-2.398,6.531],[-0.728,-0.264],[0.61,-4.076],[-0.129,-3.715],[-0.993,-0.131],[-4.491,5.923],[8.341,11.143],[0.654,0.979],[7.737,1.584]],"o":[[-7.608,6.541],[-4.576,2.508],[-4.747,15.152],[6.081,8.104],[17.368,-1.611],[3.794,-10.149],[-5.343,-5.686],[8.611,2.134],[6.904,-1.362],[1.502,-4.091],[1.067,0.388],[-0.549,3.663],[0.343,9.884],[10.532,1.391],[8.157,-10.758],[-6.922,-9.248],[-3.912,-5.853],[-6.641,-1.359]],"v":[[-83.721,-78.14],[-93.611,-54.163],[-105.076,-44.138],[-103.695,-25.043],[-87.804,-16.809],[-73.762,-20.689],[-77.307,-39.946],[-72.595,-32.204],[-40.182,-30.024],[-31.364,-42.393],[-29.115,-51.107],[-34.295,-44.51],[-35.368,-28.774],[-23.873,-15.33],[1.343,-33.499],[-3.777,-64.121],[-27.678,-73.885],[-47.399,-86.585]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[19.887,-15.044],[1.709,-0.824],[2.66,-7.471],[-4.431,-5.195],[-10.036,0.819],[-1.888,4.445],[4.287,4.014],[-6.802,-1.483],[-7.642,1.327],[-2.759,6.612],[-0.837,-0.268],[0.702,-4.127],[-0.148,-3.761],[-1.142,-0.133],[-5.168,5.997],[9.598,11.281],[0.753,0.991],[8.903,1.604]],"o":[[-8.754,6.622],[-5.265,2.539],[-5.462,15.34],[6.997,8.204],[19.986,-1.631],[4.365,-10.275],[-6.148,-5.757],[9.909,2.161],[7.945,-1.379],[1.728,-4.142],[1.227,0.392],[-0.631,3.709],[0.394,10.007],[12.12,1.408],[9.387,-10.892],[-7.965,-9.363],[-4.501,-5.925],[-7.642,-1.376]],"v":[[-80.938,-88.456],[-90.018,-69.243],[-104.361,-53.019],[-104.497,-35.204],[-84.486,-26.869],[-63.726,-33.328],[-64.352,-46.243],[-50.876,-49.542],[-30.838,-49.865],[-18.39,-57.326],[-15.802,-66.149],[-11.982,-59.47],[-18.394,-41.007],[-8.62,-28.408],[16.944,-43.26],[9.902,-75.781],[-15.299,-85.666],[-42.595,-100.042]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[23.242,-17.582],[1.998,-0.963],[3.109,-8.731],[-7.3,3.22],[-6.167,-10.022],[-2.207,5.195],[-6.859,-0.231],[-7.949,-1.734],[-8.93,1.551],[-3.225,7.727],[-0.979,-0.313],[0.821,-4.823],[-0.373,-4.383],[-1.293,-0.365],[-6.04,7.008],[1.259,14.625],[0.88,1.158],[10.405,1.874]],"o":[[-10.231,7.739],[-6.153,2.967],[-6.383,17.927],[5.564,-2.454],[8.535,13.871],[5.102,-12.008],[4.053,0.136],[11.58,2.526],[9.285,-1.612],[2.02,-4.84],[1.434,0.459],[-0.738,4.334],[0.433,5.087],[6.491,1.834],[10.97,-12.729],[-1.232,-14.313],[-5.26,-6.925],[-8.931,-1.608]],"v":[[-72.742,-130.918],[-79.847,-110.217],[-96.609,-98.269],[-92.094,-71.606],[-65.785,-65.371],[-38.602,-66.492],[-62.707,-81.585],[-46.373,-81.934],[-20.035,-77.638],[-8.992,-94.538],[-5.969,-104.848],[-1.504,-97.043],[-7.245,-81.894],[0.089,-72.429],[20.03,-81.021],[19.982,-114.937],[-5.38,-127.658],[-27.347,-129.851]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[13.191,-6.497],[1.998,-0.963],[10.609,-22.231],[-6.115,-5.126],[-3.68,-0.109],[-4.465,3.212],[-5.674,-3.861],[-3.546,-2.062],[-9.211,3.116],[-2.2,1.18],[-0.835,0.554],[-0.769,0.663],[-0.725,0.945],[-0.35,0.63],[-0.583,0.956],[1.259,14.625],[0.88,1.158],[10.405,1.874]],"o":[[-11.508,5.668],[-6.153,2.967],[-8.196,17.174],[3.256,2.73],[3.477,0.103],[8.352,-6.008],[2.986,2.032],[6.199,3.605],[3.194,-1.081],[1.017,-0.546],[0.999,-0.663],[1.142,-0.984],[0.513,-0.669],[1.77,-3.18],[1.97,-3.229],[-1.232,-14.313],[-5.26,-6.925],[-8.931,-1.608]],"v":[[-59.492,-162.168],[-70.847,-141.967],[-98.109,-133.269],[-89.844,-99.606],[-79.615,-95.066],[-67.852,-99.492],[-66.207,-114.585],[-56.486,-108.038],[-33.785,-105.138],[-25.742,-108.55],[-22.969,-110.202],[-20.325,-112.194],[-17.552,-115.099],[-16.267,-117.051],[-13.97,-123.771],[6.232,-141.687],[-8.88,-154.158],[-32.347,-164.351]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[14.202,-5.704],[0.614,-0.82],[8.676,-16.841],[-5.79,-5.451],[-3.466,-0.38],[-4.248,2.001],[-5.532,-2.362],[-2.816,-1.277],[-6.754,2.38],[-2.099,1.128],[-0.801,0.509],[-0.744,0.585],[-0.716,0.797],[-0.354,0.519],[-0.627,0.924],[2.095,14.479],[1.173,1.903],[9.138,2.782]],"o":[[-11.175,4.668],[-2.925,2.27],[-9.406,16.419],[2.521,2.235],[3.274,0.359],[7.328,-3.811],[2.48,1.296],[4.924,2.232],[3.022,-1.16],[0.97,-0.521],[0.959,-0.609],[1.105,-0.868],[0.506,-0.564],[1.789,-2.623],[3.714,-5.038],[-1.056,-10.426],[-4.502,-6.536],[-8.828,-3.074]],"v":[[-55.492,-168.501],[-70.847,-150.801],[-96.609,-140.436],[-90.011,-108.106],[-81.068,-103.981],[-69.816,-106.273],[-63.277,-116.328],[-55.38,-112.198],[-38.118,-110.971],[-30.481,-114.413],[-27.829,-115.959],[-25.282,-117.75],[-22.575,-120.252],[-21.293,-121.879],[-18.803,-127.437],[5.565,-142.52],[-11.729,-155.427],[-27.607,-167.745]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[16.223,-4.119],[-2.153,-0.533],[4.809,-6.062],[-5.142,-6.102],[-3.038,-0.921],[-3.815,-0.421],[-5.247,0.637],[-1.357,0.294],[-1.841,0.907],[-1.897,1.023],[-0.733,0.417],[-0.695,0.428],[-0.698,0.501],[-0.362,0.299],[-0.716,0.861],[3.768,14.187],[1.759,3.392],[6.603,4.598]],"o":[[-10.508,2.668],[3.533,0.874],[-11.827,14.908],[1.05,1.245],[2.87,0.87],[5.281,0.582],[1.467,-0.178],[2.373,-0.514],[2.678,-1.32],[0.877,-0.473],[0.878,-0.499],[1.031,-0.635],[0.494,-0.354],[1.827,-1.509],[7.201,-8.655],[-0.704,-2.652],[-2.986,-5.758],[-8.623,-6.004]],"v":[[-60.992,-187.168],[-70.847,-168.467],[-93.609,-154.769],[-90.344,-125.106],[-83.973,-121.81],[-73.744,-119.834],[-57.416,-119.812],[-53.168,-120.518],[-46.785,-122.638],[-39.958,-126.139],[-37.547,-127.473],[-35.195,-128.862],[-32.622,-130.559],[-31.346,-131.535],[-28.47,-134.771],[-6.268,-156.187],[-9.927,-165.465],[-24.128,-182.034]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[6.802,-0.664],[5.208,-0.59],[4.966,-3.149],[-2.165,-5.663],[-1.509,-1.029],[-2.057,-0.744],[-3.346,-0.34],[-0.933,-0.026],[-1.548,0.191],[-1.636,0.556],[-0.642,0.299],[-0.623,0.401],[-0.655,0.638],[-0.355,0.446],[-0.729,0.439],[-1.233,3.207],[0.138,2.047],[2.569,2.658]],"o":[[-3.855,0.376],[-2.748,0.311],[-12.212,7.744],[0.442,1.156],[1.426,0.972],[2.848,1.031],[0.936,0.095],[1.631,0.046],[2.252,-0.278],[0.756,-0.257],[0.769,-0.358],[0.924,-0.595],[0.463,-0.451],[1.792,-2.252],[7.33,-4.412],[0.749,-1.946],[-0.234,-3.475],[-3.355,-3.471]],"v":[[-31.418,-225.529],[-44.752,-221.561],[-66.288,-219.244],[-69.719,-193.755],[-66.7,-190.444],[-61.398,-187.841],[-51.901,-185.711],[-49.093,-185.527],[-44.301,-185.736],[-38.497,-187.014],[-36.402,-187.851],[-34.32,-188.994],[-31.967,-190.858],[-30.745,-192.209],[-27.672,-196.95],[-12.661,-204.933],[-11.759,-210.994],[-16.031,-220.542]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[4.623,-0.451],[1.821,-0.982],[0.865,-2.219],[-1.311,-3.428],[-0.46,-0.534],[-0.574,-0.36],[-0.992,-0.247],[-0.289,-0.051],[-0.533,-0.036],[-0.566,0.016],[-0.264,0.018],[-0.319,0.036],[-0.473,0.084],[-0.332,0.074],[-1.469,0.692],[-0.748,1.944],[0.094,1.392],[1.746,1.807]],"o":[[-2.648,0.258],[-2.386,1.286],[-1.031,2.645],[0.27,0.707],[0.435,0.504],[0.794,0.498],[0.277,0.069],[0.505,0.089],[0.547,0.037],[0.262,-0.007],[0.316,-0.022],[0.473,-0.054],[0.335,-0.06],[1.678,-0.375],[2.743,-1.292],[0.509,-1.323],[-0.159,-2.362],[-2.281,-2.359]],"v":[[-44.25,-255],[-50.966,-253.101],[-55.871,-247.757],[-55.5,-238.5],[-54.395,-236.642],[-52.875,-235.349],[-50.176,-234.238],[-49.327,-234.058],[-47.768,-233.872],[-46.095,-233.842],[-45.306,-233.88],[-44.353,-233.966],[-42.932,-234.174],[-41.931,-234.376],[-37.148,-235.998],[-31.5,-241],[-30.887,-245.12],[-33.791,-251.61]],"c":true}]},{"t":27.6,"s":[{"i":[[2.215,-0.216],[0.872,-0.47],[0.414,-1.063],[-0.628,-1.642],[-0.22,-0.256],[-0.275,-0.172],[-0.475,-0.118],[-0.138,-0.024],[-0.255,-0.017],[-0.271,0.008],[-0.127,0.009],[-0.153,0.017],[-0.227,0.04],[-0.159,0.036],[-0.703,0.331],[-0.358,0.931],[0.045,0.667],[0.837,0.865]],"o":[[-1.268,0.124],[-1.143,0.616],[-0.494,1.267],[0.13,0.339],[0.208,0.241],[0.38,0.239],[0.133,0.033],[0.242,0.043],[0.262,0.018],[0.125,-0.004],[0.152,-0.01],[0.227,-0.026],[0.16,-0.029],[0.804,-0.18],[1.314,-0.619],[0.244,-0.634],[-0.076,-1.131],[-1.092,-1.13]],"v":[[-46.055,-270.771],[-49.272,-269.862],[-51.621,-267.302],[-51.443,-262.868],[-50.914,-261.978],[-50.186,-261.358],[-48.893,-260.826],[-48.486,-260.74],[-47.74,-260.651],[-46.938,-260.636],[-46.56,-260.655],[-46.104,-260.696],[-45.424,-260.796],[-44.944,-260.892],[-42.653,-261.669],[-39.947,-264.065],[-39.654,-266.039],[-41.045,-269.147]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0.292,0.164],[10.657,-11.483],[-1.39,-15.271],[-0.44,-0.021],[-20.79,-14.871],[-8.64,6.584],[-0.076,0.148],[-12.453,0.421],[-0.064,-0.028],[-8.236,3.44],[-9.284,7.21],[-1.015,7.164],[3.176,5.373],[18.993,-8.979],[4.921,1.35],[26.329,-6.502]],"o":[[0.15,-0.806],[-9.782,10.54],[1.377,15.13],[0.29,-0.551],[27.042,19.343],[8.256,-6.292],[0.654,-0.382],[19.04,-0.644],[0.469,0.077],[5.918,-2.472],[13.316,-10.341],[1.473,-10.396],[-16.644,-28.153],[-8.998,4.254],[-10.091,-2.769],[-18.754,4.631]],"v":[[-191.461,32.865],[-212.19,48.551],[-221.556,96.701],[-206.197,135.43],[-172.542,140.157],[-100.559,147.307],[-104.232,122.167],[-95.79,112.144],[-82.112,109.13],[-71.264,107.06],[-53.316,98.341],[-33.484,68.252],[-36.856,42.653],[-114.993,7.229],[-129.921,13.4],[-171.829,9.252]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0.292,0.164],[10.657,-11.483],[-1.39,-15.271],[-0.44,-0.021],[-47.833,5.468],[-8.64,6.584],[-0.076,0.148],[-12.453,0.421],[-0.064,-0.028],[-3.448,-0.905],[-10.519,3.58],[-1.015,7.164],[3.026,5.456],[18.993,-8.979],[7.921,-6.65],[15.579,0.248]],"o":[[0.15,-0.806],[-9.782,10.54],[1.377,15.13],[0.29,-0.551],[23.667,8.718],[8.257,-6.292],[0.654,-0.382],[19.04,-0.644],[0.469,0.077],[2.166,1.871],[14.83,-5.136],[1.473,-10.396],[-9.565,-16.47],[-8.998,4.254],[-5.917,-0.215],[-14.862,-5.635]],"v":[[-185.086,-0.01],[-194.815,27.801],[-214.556,71.576],[-206.447,88.93],[-156.167,110.532],[-103.434,107.432],[-102.732,84.167],[-86.415,83.394],[-64.987,77.755],[-60.014,81.81],[-44.816,84.966],[-24.984,61.127],[-32.356,34.903],[-91.743,9.604],[-118.671,1.775],[-146.829,-7.123]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0.292,0.164],[10.657,-11.483],[-1.39,-15.271],[-0.44,-0.021],[-25.45,2.392],[-8.64,6.584],[-0.076,0.148],[-12.453,0.421],[-0.064,-0.028],[1.341,-5.249],[-11.755,-0.05],[-1.015,7.164],[2.877,5.539],[18.993,-8.979],[10.921,-14.65],[4.829,6.998]],"o":[[0.15,-0.806],[-9.782,10.54],[1.377,15.13],[0.29,-0.551],[20.292,-1.907],[8.257,-6.292],[0.654,-0.382],[19.04,-0.644],[0.469,0.077],[-1.587,6.214],[16.343,0.069],[1.473,-10.396],[-2.486,-4.787],[-8.998,4.254],[-1.743,2.338],[-10.971,-15.9]],"v":[[-147.711,-4.885],[-177.44,7.051],[-185.556,46.451],[-175.697,70.43],[-139.792,80.907],[-106.309,67.557],[-101.232,46.167],[-77.04,54.644],[-47.862,46.38],[-48.764,56.56],[-36.316,71.591],[-16.484,54.002],[-27.856,27.153],[-68.493,11.979],[-102.421,14.15],[-117.829,9.502]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0.292,0.164],[10.657,-11.483],[-1.39,-15.271],[-0.44,-0.021],[-24.787,-6.243],[-8.64,6.584],[-0.076,0.148],[-4.372,-0.493],[-0.064,-0.028],[-2.575,-2.99],[-9.731,2.234],[-0.566,7.585],[2.546,4.903],[11.473,3.913],[9.539,-3.311],[7.329,19.998]],"o":[[0.15,-0.806],[-9.782,10.54],[1.377,15.13],[0.29,-0.551],[10.947,2.757],[8.257,-6.292],[0.654,-0.382],[6.241,0.703],[0.352,0.058],[4.9,5.689],[15.599,-3.581],[0.623,-8.352],[-2.486,-4.787],[-9.42,-3.213],[-2.754,0.956],[-4.861,-13.266]],"v":[[-144.711,-35.385],[-178.44,-28.949],[-188.556,4.951],[-176.197,20.93],[-153.292,41.907],[-113.809,34.557],[-102.232,20.667],[-80.04,24.144],[-60.362,16.88],[-55.818,22.332],[-32.816,33.591],[-11.525,15.212],[-18.356,-6.847],[-54.993,-21.521],[-91.921,-12.85],[-120.329,-18.998]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0.285,0.176],[11.109,-11.047],[-0.777,-15.315],[-0.438,-0.039],[-24.517,-7.232],[-8.897,6.232],[-0.082,0.145],[-4.349,-0.668],[-0.063,-0.031],[-1.828,-3.143],[-9.813,1.842],[-2.449,8.443],[2.348,5.001],[11.307,4.37],[9.664,-2.926],[24.556,-0.708]],"o":[[0.183,-0.799],[-10.197,10.14],[0.77,15.173],[0.312,-0.539],[10.828,3.194],[8.502,-5.955],[0.668,-0.355],[6.208,0.953],[0.35,0.072],[3.479,5.981],[15.73,-2.953],[2.697,-9.297],[-2.293,-4.883],[-9.284,-3.588],[-2.79,0.845],[-14.123,0.407]],"v":[[-99.096,-68.559],[-137.053,-63.64],[-148.52,-30.173],[-136.812,-13.711],[-119.483,13.482],[-84.853,10.518],[-72.668,-4.395],[-60.187,1.087],[-47.887,-1.687],[-44.667,4.037],[-25.05,16.455],[0.048,-2.79],[-2.325,-27.107],[-27.233,-45.795],[-57.164,-46.324],[-89.556,-72.292]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0.285,0.176],[15.108,-5.387],[0.957,-15.305],[-4.728,-4.832],[-7.996,-2.687],[-7.327,7.254],[-1.071,1.561],[-0.326,0.556],[-0.029,-0.014],[-4.293,-3.229],[-9.286,3.669],[-1.412,6.165],[2.348,5.001],[2.663,3.042],[12.563,2.992],[39.056,-2.208]],"o":[[0.183,-0.799],[-12.226,4.36],[-0.582,9.304],[7.302,7.462],[23.842,8.013],[2.059,-2.038],[0.705,-1.027],[0.28,-0.477],[0.35,0.072],[8.169,6.145],[11.089,-4.381],[1.555,-6.788],[-1.907,-4.063],[-3.165,-3.617],[-2.836,-0.676],[-14.106,0.797]],"v":[[-112.846,-72.809],[-135.803,-78.39],[-161.02,-46.673],[-153.814,-25.954],[-127.233,-12.518],[-82.041,-19.698],[-77.381,-25.282],[-75.844,-27.709],[-75.387,-28.437],[-67.797,-22.475],[-37.3,-11.795],[-20.084,-28.389],[-23.325,-47.107],[-28.834,-57.633],[-50.164,-67.324],[-89.556,-90.292]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.8,"s":[{"i":[[0.285,0.176],[15.108,-5.387],[0.957,-15.305],[-4.822,-4.988],[-7.996,-2.687],[-6.259,8.031],[-0.859,1.715],[-0.253,0.609],[-0.029,-0.014],[-3.922,-2.639],[-9.329,3.554],[-1.389,5.345],[1.35,5.163],[1.795,2.503],[8.743,2.742],[35.691,1.077]],"o":[[0.183,-0.799],[-12.226,4.36],[-0.582,9.304],[7.447,7.704],[23.842,8.013],[1.759,-2.257],[0.565,-1.129],[0.217,-0.523],[0.35,0.072],[7.464,5.022],[9.386,-3.625],[1.53,-5.885],[-1.237,-3.006],[-2.133,-2.976],[-3.005,-2.714],[-13.958,-0.671]],"v":[[-110.346,-82.142],[-138.137,-80.723],[-157.186,-55.006],[-149.809,-34.003],[-122.899,-20.018],[-80.165,-28.985],[-76.292,-35.141],[-75.08,-37.805],[-74.721,-38.604],[-67.786,-33.687],[-38.967,-25.628],[-24.142,-39.633],[-25.658,-56.94],[-29.265,-65.127],[-43.998,-73.574],[-84.39,-96.626]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0.285,0.176],[15.108,-5.387],[0.957,-15.305],[-5.01,-5.301],[-7.996,-2.687],[-4.122,9.585],[-0.436,2.023],[-0.106,0.716],[-0.029,-0.014],[-3.181,-1.458],[-9.414,3.325],[-1.343,3.704],[-0.645,5.487],[0.059,1.425],[1.103,2.241],[28.959,7.646]],"o":[[0.183,-0.799],[-12.226,4.36],[-0.582,9.304],[7.737,8.186],[23.842,8.013],[1.158,-2.693],[0.287,-1.331],[0.091,-0.615],[0.35,0.072],[6.054,2.774],[5.979,-2.112],[1.479,-4.079],[0.105,-0.891],[-0.07,-1.694],[-3.342,-6.79],[-13.661,-3.607]],"v":[[-105.346,-100.809],[-132.303,-98.89],[-149.52,-71.673],[-141.801,-50.1],[-114.233,-35.018],[-76.413,-47.559],[-74.113,-54.86],[-73.55,-57.995],[-73.387,-58.937],[-67.763,-56.113],[-42.3,-53.295],[-32.257,-62.121],[-30.325,-76.607],[-30.126,-80.114],[-31.667,-86.072],[-74.056,-109.292]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0.205,0.111],[10.313,-4.329],[-0.074,-3.496],[-2.138,-2.621],[-5.802,-0.972],[-3.491,2.57],[-0.552,0.529],[-0.18,0.183],[-0.021,-0.009],[-2.783,-0.322],[-6.428,2.675],[-2.029,2.781],[-0.239,3.845],[0.126,0.943],[0.481,1.327],[6.473,1.012]],"o":[[0.097,-0.563],[-8.346,3.504],[0.081,3.836],[3.302,4.048],[9.107,1.525],[0.981,-0.722],[0.363,-0.348],[0.154,-0.157],[0.246,0.037],[5.296,0.613],[4.082,-1.699],[2.234,-3.063],[0.039,-0.624],[-0.15,-1.121],[-1.458,-4.021],[-9.734,-1.522]],"v":[[-73.425,-148.481],[-102.7,-147.976],[-110.956,-130.26],[-107.43,-120.56],[-93.044,-112.977],[-74.219,-117.099],[-71.921,-119.032],[-71.107,-119.845],[-70.845,-120.078],[-65.918,-119.334],[-45.693,-121.012],[-36.623,-127.837],[-33.044,-138.337],[-33.159,-140.728],[-34.078,-144.466],[-45.233,-153.86]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[4.234,-0.114],[3.028,-2.467],[-0.116,-3.374],[-0.854,-1.269],[-2.502,-1.347],[-2.832,-0.432],[-0.772,-0.032],[-0.49,0.02],[-0.403,0.049],[-1.435,0.45],[-2.076,1.62],[-0.857,1.316],[-0.063,1.63],[0.179,0.583],[0.461,0.647],[2.909,1.314]],"o":[[-4.945,0.134],[-2.636,2.147],[0.049,1.424],[1.319,1.959],[2.54,1.367],[0.796,0.121],[0.508,0.021],[0.42,-0.017],[1.482,-0.18],[2.731,-0.856],[1.384,-1.08],[0.943,-1.449],[0.023,-0.609],[-0.213,-0.693],[-1.397,-1.959],[-3.948,-1.783]],"v":[[-67.25,-170],[-79.668,-165.908],[-83.75,-157.5],[-82.335,-153.441],[-76.38,-148.409],[-68.09,-145.635],[-65.734,-145.403],[-64.236,-145.401],[-63,-145.5],[-58.601,-146.454],[-51.23,-150.238],[-47.822,-153.853],[-46.25,-158.5],[-46.49,-160.29],[-47.511,-162.303],[-54.257,-167.294]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[2.886,-0.188],[2.002,-1.753],[-0.167,-2.286],[-0.616,-0.838],[-1.742,-0.848],[-1.944,-0.219],[-0.527,-0.002],[-0.334,0.026],[-0.274,0.044],[-0.968,0.342],[-1.375,1.153],[-0.55,0.915],[0,1.108],[0.137,0.391],[0.331,0.427],[2.019,0.815]],"o":[[-3.371,0.22],[-1.743,1.526],[0.07,0.965],[0.951,1.295],[1.769,0.861],[0.546,0.062],[0.347,0.001],[0.286,-0.023],[1.006,-0.161],[1.842,-0.652],[0.916,-0.769],[0.606,-1.008],[0,-0.414],[-0.163,-0.465],[-1.004,-1.293],[-2.74,-1.106]],"v":[[-71.681,-184.322],[-80.049,-181.222],[-82.616,-175.411],[-81.545,-172.694],[-77.351,-169.436],[-71.622,-167.77],[-70.008,-167.675],[-68.986,-167.712],[-68.145,-167.812],[-65.168,-168.574],[-60.236,-171.333],[-58.004,-173.874],[-57.052,-177.068],[-57.262,-178.276],[-58.011,-179.615],[-62.745,-182.825]],"c":true}]},{"t":30,"s":[{"i":[[1.445,-0.1],[1.002,-0.933],[-0.084,-1.217],[-0.308,-0.446],[-0.872,-0.452],[-0.973,-0.117],[-0.264,-0.001],[-0.167,0.014],[-0.137,0.023],[-0.484,0.182],[-0.688,0.614],[-0.275,0.487],[0,0.59],[0.069,0.208],[0.166,0.227],[1.011,0.434]],"o":[[-1.687,0.117],[-0.872,0.812],[0.035,0.514],[0.476,0.689],[0.885,0.458],[0.273,0.033],[0.174,0.001],[0.143,-0.012],[0.504,-0.085],[0.922,-0.347],[0.459,-0.409],[0.303,-0.536],[0,-0.22],[-0.082,-0.247],[-0.503,-0.688],[-1.371,-0.589]],"v":[[-75.322,-185.014],[-79.51,-183.364],[-80.795,-180.271],[-80.259,-178.825],[-78.16,-177.09],[-75.293,-176.204],[-74.485,-176.153],[-73.974,-176.173],[-73.553,-176.226],[-72.063,-176.631],[-69.594,-178.1],[-68.477,-179.453],[-68.001,-181.153],[-68.106,-181.796],[-68.481,-182.509],[-70.85,-184.217]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[13.246,-19.261],[7.48,-15.559],[-11.053,-12.587],[-7.787,-1.432],[-11.494,11.858],[-2.952,38.371],[12.185,15.007],[1.076,0.733]],"o":[[-16.255,23.636],[-13.794,28.693],[10.91,12.424],[20.341,3.739],[5.64,-5.819],[1.443,-18.75],[-10.039,-12.364],[-10.323,13.264]],"v":[[109.755,59.614],[73.355,76.827],[92.803,129.087],[132.159,146.511],[163.572,119.015],[201.202,70.379],[183.289,8.864],[138.573,12.486]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0.212,-23.375],[7.48,-15.559],[-3.761,-3.269],[-7.806,1.328],[-11.494,11.858],[-8.452,22.871],[12.185,15.007],[1.076,0.732]],"o":[[-0.255,28.136],[-13.794,28.693],[8.456,7.351],[1.078,-0.183],[5.64,-5.819],[6.519,-17.64],[-10.039,-12.364],[-15.323,-1.236]],"v":[[86.755,-40.636],[65.605,-5.173],[79.553,39.337],[115.159,46.761],[140.322,39.515],[175.452,15.129],[160.039,-37.136],[138.323,-56.264]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[5.338,-3.164],[7.48,-15.559],[-3.761,-3.269],[-7.806,1.328],[-11.494,11.858],[-3.786,9.916],[16.461,10.136],[1.076,0.732]],"o":[[-12.798,7.587],[-13.794,28.693],[8.456,7.351],[1.078,-0.183],[5.64,-5.819],[3.765,-9.86],[-6.333,-3.899],[-3.062,-2.277]],"v":[[64.255,-38.136],[32.605,-19.173],[43.553,19.837],[81.659,32.761],[106.822,25.515],[124.952,9.629],[108.539,-22.136],[92.823,-39.764]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[7.624,-1.504],[1.8,-14.947],[-5.301,-1.524],[-7.787,3.449],[-7.542,13.148],[-0.103,9.229],[11.589,9.334],[1.437,0.271]],"o":[[-16.37,3.23],[-3.32,27.564],[11.918,3.426],[1.076,-0.476],[3.701,-6.452],[0.102,-9.176],[-5.82,-4.688],[-1.869,1.008]],"v":[[78.514,-64.102],[44.32,-33.064],[65.582,-2.926],[111.287,-3.949],[131.549,-15.048],[134.792,-34.884],[118.161,-56.834],[100.22,-65.761]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[7.624,-1.504],[1.8,-14.947],[-3.082,-4.574],[-6.075,16.01],[-14.009,5.789],[-0.103,9.229],[10.999,0.525],[1.437,0.271]],"o":[[-16.37,3.23],[-3.32,27.564],[15.905,23.605],[0.417,-1.1],[10.385,-4.292],[0.102,-9.176],[-7.465,-0.357],[-1.869,1.008]],"v":[[80.014,-87.602],[45.32,-52.064],[66.582,-21.926],[124.787,-27.949],[139.299,-32.548],[146.042,-63.134],[118.411,-88.584],[101.97,-84.261]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[7.624,-1.504],[2.662,-13.373],[-3.645,-5.657],[-6.075,16.01],[-14.009,5.789],[-0.103,9.229],[10.999,0.525],[1.437,0.271]],"o":[[-17.077,3.37],[-1.525,7.661],[15.418,23.926],[0.417,-1.1],[10.385,-4.292],[0.102,-9.176],[-7.465,-0.357],[-1.869,1.008]],"v":[[82.514,-105.102],[52.481,-74.867],[55.582,-53.926],[116.287,-55.449],[128.799,-57.548],[147.542,-85.634],[122.411,-107.584],[107.47,-102.261]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[4.573,0.686],[3.673,-4.607],[-0.587,-3.961],[-6.614,7.751],[-9.009,0.434],[-1.908,5.15],[6.056,2.5],[0.751,0.44]],"o":[[-10.243,-1.536],[-2.104,2.639],[1.611,10.875],[0.454,-0.533],[6.678,-0.322],[1.897,-5.12],[-4.111,-1.697],[-1.249,0.19]],"v":[[104.299,-154.333],[82.908,-149.055],[80.535,-139.028],[111.91,-130.972],[122.259,-125.434],[136.908,-134.15],[126.868,-147.824],[115.749,-148.44]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[3.297,0.495],[2.28,-2.859],[-0.364,-2.459],[-6,2],[-0.453,0.411],[-0.225,1.007],[0.387,1.315],[0.545,0.835]],"o":[[-6.358,-0.954],[-1.306,1.638],[1,6.75],[0.654,-0.218],[0.735,-0.667],[0.26,-1.165],[-0.262,-0.892],[-1.451,-2.225]],"v":[[107.25,-169.25],[93.973,-165.974],[92.5,-159.75],[112.75,-154.75],[114.408,-155.706],[115.842,-158.269],[115.643,-162.072],[114.43,-164.688]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27.6,"s":[{"i":[[1.511,0.227],[1.045,-1.311],[-0.167,-1.127],[-2.75,0.917],[-0.207,0.188],[-0.103,0.461],[0.177,0.603],[0.25,0.383]],"o":[[-2.914,-0.437],[-0.599,0.751],[0.458,3.094],[0.3,-0.1],[0.337,-0.306],[0.119,-0.534],[-0.12,-0.409],[-0.665,-1.02]],"v":[[104.849,-177.313],[98.764,-175.811],[98.089,-172.958],[107.37,-170.667],[108.13,-171.105],[108.787,-172.28],[108.696,-174.023],[108.14,-175.222]],"c":true}]},{"t":28.8,"s":[{"i":[[3.297,0.495],[2.28,-2.859],[-0.364,-2.459],[-6,2],[-0.453,0.411],[-0.225,1.007],[0.387,1.315],[0.545,0.835]],"o":[[-6.358,-0.954],[-1.306,1.638],[1,6.75],[0.654,-0.218],[0.735,-0.667],[0.26,-1.165],[-0.262,-0.892],[-1.451,-2.225]],"v":[[85.25,-199],[71.973,-195.724],[70.5,-189.5],[90.75,-184.5],[92.408,-185.456],[93.842,-188.019],[93.643,-191.822],[92.43,-194.438]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0.104,0.261],[18.722,4.72],[25.956,-33.947],[-52.804,-8.529],[-9.862,-3.526],[-8.894,0.268],[-0.39,0.694],[-7.396,-10.14],[-22.222,2.819],[-9.061,1.293],[-2.034,15.029],[0.02,0.8],[5.448,10.218],[23.413,5.759]],"o":[[-0.05,0.023],[-18.475,-4.658],[-10.242,13.396],[9.236,1.492],[9.156,3.274],[5.82,-0.175],[0.446,0.134],[5.406,7.412],[30.911,-3.921],[19.828,-2.829],[1.427,-10.544],[-2.53,-8.43],[-6.265,-11.75],[-22.946,-5.644]],"v":[[86.575,-109.89],[59.943,-134.193],[-25.868,-96.126],[17.223,-25.269],[31.362,8.026],[56.894,-3.768],[63.368,1.081],[53.688,33.321],[110.222,42.681],[159.672,9.329],[188.573,-14.956],[186.03,-42.07],[175.552,-73.718],[131.587,-105.759]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.2,"s":[{"i":[[0.104,0.261],[18.722,4.72],[21.162,-20.411],[-27.948,-15.488],[-9.862,-3.526],[-8.894,0.268],[-0.39,0.694],[-7.396,-10.14],[-22.222,2.819],[-4.266,5.215],[-0.376,15.071],[0.02,0.8],[5.448,10.218],[19.163,11.259]],"o":[[-0.05,0.023],[-18.475,-4.658],[-10.952,9.147],[5.257,5.38],[9.156,3.274],[5.82,-0.175],[0.446,0.134],[5.406,7.412],[30.911,-3.921],[9.422,-9.906],[0.371,-9.306],[-2.53,-8.43],[-6.265,-11.75],[-19.327,-11.648]],"v":[[94.325,-123.89],[66.943,-136.693],[4.632,-110.126],[16.973,-59.269],[31.862,-33.224],[54.894,-40.018],[60.618,-37.169],[58.938,-10.179],[109.972,1.181],[162.922,-9.421],[189.823,-33.956],[185.78,-59.82],[169.552,-84.218],[125.087,-116.009]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[0.104,0.261],[18.722,4.72],[16.368,-6.874],[-3.093,-22.448],[-9.862,-3.526],[-8.894,0.268],[-0.39,0.694],[-7.396,-10.14],[-22.222,2.819],[0.53,9.138],[1.282,15.112],[0.02,0.8],[5.448,10.218],[14.913,16.759]],"o":[[-0.05,0.023],[-18.475,-4.658],[-11.661,4.897],[1.277,9.269],[9.156,3.274],[5.82,-0.175],[0.446,0.134],[5.406,7.412],[30.911,-3.921],[-0.985,-16.983],[-0.684,-8.067],[-2.53,-8.43],[-6.265,-11.75],[-15.709,-17.653]],"v":[[97.075,-119.89],[73.943,-139.193],[35.132,-124.126],[16.723,-93.269],[32.362,-74.474],[52.894,-76.268],[57.868,-75.419],[64.188,-53.679],[109.722,-40.319],[166.172,-28.171],[177.073,-57.956],[175.53,-76.57],[163.552,-94.718],[118.587,-116.259]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[0.104,0.261],[18.722,4.72],[4.592,-19.219],[-2.986,-22.462],[-8.019,-4.626],[-8.894,0.268],[-0.39,0.694],[-7.396,-10.14],[-10.862,-1.977],[-5.33,7.441],[2.427,20.456],[0.02,0.8],[5.448,10.218],[10.659,2.452]],"o":[[-0.05,0.023],[-18.475,-4.658],[-2.939,12.301],[1.209,9.092],[8.422,4.859],[5.82,-0.175],[0.446,0.134],[5.406,7.412],[30.656,5.579],[2.043,-2.853],[-0.954,-8.04],[0.091,-2.149],[-6.265,-11.75],[-23.029,-5.297]],"v":[[97.575,-144.39],[75.943,-151.693],[35.132,-138.626],[36.723,-107.269],[51.862,-82.974],[76.894,-74.768],[94.868,-80.919],[113.188,-64.679],[129.722,-43.319],[171.172,-52.671],[182.073,-82.456],[174.53,-106.07],[162.552,-125.218],[130.087,-144.259]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[0.167,0.226],[19.307,-0.2],[-0.45,-19.755],[-8.604,-20.963],[-8.932,-2.433],[-11.353,7.523],[-0.2,0.77],[-5.529,-5.135],[-20.198,-1.424],[-3.261,8.552],[9.07,15.114],[0.223,0.769],[4.69,9.933],[10.932,-0.341]],"o":[[-0.043,0.035],[-19.052,0.197],[0.288,12.644],[3.483,8.485],[9.381,2.555],[4.853,-3.216],[0.359,0.013],[6.891,6.4],[31.082,2.192],[1.25,-3.279],[-4.166,-6.942],[-0.459,-2.102],[-5.685,-12.041],[-23.618,0.737]],"v":[[93.508,-167.74],[68.364,-174.362],[40.95,-141.745],[40.517,-102.485],[60.119,-83.555],[87.103,-85.273],[96.659,-92.08],[104.734,-82.506],[143.904,-67.183],[193.393,-95.046],[190.68,-124.614],[167.527,-137.769],[166.06,-157.183],[129.818,-177.159]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.4,"s":[{"i":[[0.185,0.21],[19.149,-1.841],[0.307,-19.6],[-9.107,-14.613],[-8.553,-1.202],[-8.654,8.041],[-0.133,0.782],[-5.403,-4.455],[-16.668,-1.403],[15.815,12.9],[5.121,9.254],[2.516,3.228],[5.454,7.058],[10.154,0.971]],"o":[[-0.039,0.039],[-18.897,1.817],[-0.251,13.529],[6.233,8.105],[10.599,1.257],[4.09,-3.998],[0.357,-0.018],[6.734,5.553],[31.035,2.725],[0.845,-2.763],[6.732,-6.008],[-2.285,-3.482],[-6.32,-8.36],[-23.289,-2.427]],"v":[[91.82,-182.388],[59.337,-188.919],[28.693,-154.15],[36.555,-117.161],[60.419,-101.637],[89.706,-106.475],[97.847,-118.48],[106.187,-110.234],[140.708,-96.721],[166.685,-123.4],[164.768,-141.492],[166.787,-158.735],[158.287,-175.371],[127.889,-190.784]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0.203,0.194],[18.991,-3.482],[1.065,-19.444],[-9.61,-8.263],[-8.174,0.028],[-5.956,8.558],[-0.066,0.793],[-5.277,-3.776],[-13.138,-1.382],[-1.758,8.983],[1.172,3.395],[4.81,5.688],[6.218,4.182],[9.377,2.284]],"o":[[-0.036,0.042],[-18.741,3.436],[-0.79,14.413],[8.983,7.724],[11.816,-0.041],[3.326,-4.779],[0.356,-0.049],[6.576,4.706],[30.988,3.259],[0.44,-2.246],[-1.687,-4.888],[-4.111,-4.862],[-6.955,-4.678],[-22.959,-5.591]],"v":[[90.131,-197.036],[50.31,-203.476],[16.435,-166.556],[32.593,-131.837],[60.719,-119.719],[92.309,-127.678],[99.036,-144.881],[107.64,-137.962],[137.512,-126.259],[176.977,-154.753],[175.857,-163.371],[166.047,-179.701],[150.514,-193.559],[125.959,-204.409]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0.264,0.095],[15.947,-10.886],[-3.532,-6.423],[-10.182,-1.848],[-7.46,3.341],[-1.973,10.239],[0.261,0.752],[-4.785,-0.69],[-4.649,1.081],[2.037,8.923],[2.207,2.678],[6.184,3.309],[7.073,1.251],[9.647,-2.014]],"o":[[-0.016,0.053],[-15.736,10.742],[6.955,12.648],[9.518,1.728],[10.784,-4.83],[1.102,-5.717],[0.305,-0.189],[5.963,0.86],[17.491,-4.065],[-0.509,-2.232],[-3.177,-3.856],[-5.286,-2.829],[-7.912,-1.399],[-16.007,3.342]],"v":[[55.314,-195.328],[34.327,-187.59],[26.922,-146.648],[54.071,-126.194],[80.716,-129.67],[100.473,-148.239],[95.38,-166.44],[104.2,-165.214],[122.414,-164.627],[139.055,-196.074],[134.93,-203.584],[120.736,-214.767],[102.102,-221.158],[75.632,-220.615]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[0.225,0.168],[18.431,-5.752],[-1.501,-7.174],[-9.761,-5.309],[-8.027,1.544],[-2.293,6.864],[0.03,0.795],[-2.844,-0.671],[-4.762,-0.325],[-0.659,9.129],[0.745,2.271],[2.645,2.759],[3.157,1.598],[4.346,0.362]],"o":[[-0.031,0.046],[-18.188,5.676],[2.956,14.129],[9.123,4.963],[4.737,-0.911],[1.845,-5.522],[0.347,-0.091],[3.544,0.836],[17.915,1.222],[0.165,-2.283],[-1.073,-3.27],[-2.261,-2.359],[-3.532,-1.787],[-16.296,-1.356]],"v":[[70.055,-247.082],[34.188,-249.426],[14.28,-221.585],[35.438,-192.784],[62.865,-187.945],[81.155,-200.728],[82.97,-215.545],[88.138,-214.433],[101.335,-212.222],[127.659,-232.879],[126.758,-239.758],[121.089,-248.945],[112.904,-254.969],[101.006,-258.317]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[6.868,-1.446],[2.116,-3.472],[-0.579,-4.169],[-3.604,-1.86],[-3.503,0],[-1.754,0.342],[-2.135,0.833],[-1,0.512],[-1.058,0.778],[-0.678,2.214],[-0.02,1.189],[0.625,1.517],[0.932,1.111],[1.441,0.959]],"o":[[-7.648,1.61],[-1.826,2.997],[0.646,4.652],[3.369,1.739],[1.43,0],[2.072,-0.403],[1.063,-0.415],[1.246,-0.638],[2.262,-1.663],[0.385,-1.257],[0.029,-1.712],[-0.534,-1.296],[-1.042,-1.243],[-4.913,-3.269]],"v":[[89.5,-277.75],[75.473,-270.049],[74,-259.25],[81.1,-249.689],[92,-247.25],[96.841,-247.77],[103.257,-249.638],[106.363,-251.029],[109.844,-253.155],[114.5,-259],[115.098,-262.674],[114.174,-267.533],[111.956,-271.153],[108.206,-274.469]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[2.641,-0.556],[1.214,-1.736],[-0.223,-1.604],[-1.903,-1.296],[-1.347,0],[-0.815,0.319],[-1.078,0.663],[-0.514,0.369],[-0.546,0.484],[-0.261,0.852],[0.044,0.471],[0.393,0.625],[0.522,0.472],[0.748,0.422]],"o":[[-2.942,0.619],[-1.048,1.498],[0.248,1.789],[1.778,1.212],[0.55,0],[0.963,-0.377],[0.537,-0.33],[0.641,-0.46],[1.167,-1.036],[0.148,-0.484],[-0.064,-0.679],[-0.336,-0.534],[-0.583,-0.528],[-2.551,-1.438]],"v":[[95.692,-304.538],[89.465,-300.744],[88.231,-295.923],[92.012,-291.064],[97.154,-289.058],[99.244,-289.562],[102.375,-291.164],[103.959,-292.219],[105.755,-293.646],[108.058,-296.577],[108.207,-298.012],[107.501,-299.976],[106.202,-301.49],[104.187,-302.922]],"c":true}]},{"t":30,"s":[{"i":[[0.941,-0.198],[0.433,-0.618],[-0.079,-0.571],[-0.678,-0.462],[-0.48,0],[-0.291,0.114],[-0.384,0.236],[-0.183,0.132],[-0.194,0.173],[-0.093,0.303],[0.016,0.168],[0.14,0.223],[0.186,0.168],[0.267,0.15]],"o":[[-1.048,0.221],[-0.373,0.534],[0.089,0.638],[0.634,0.432],[0.196,0],[0.343,-0.134],[0.191,-0.118],[0.228,-0.164],[0.416,-0.369],[0.053,-0.172],[-0.023,-0.242],[-0.12,-0.19],[-0.208,-0.188],[-0.909,-0.512]],"v":[[96.83,-302.927],[94.611,-301.576],[94.171,-299.858],[95.519,-298.126],[97.351,-297.411],[98.096,-297.591],[99.211,-298.162],[99.776,-298.538],[100.416,-299.046],[101.236,-300.091],[101.289,-300.602],[101.038,-301.302],[100.575,-301.841],[99.857,-302.351]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[1.262,18],[0,-16.5],[0.841,-24],[3.786,-17.5],[-1.262,17.5],[-0.841,16.5],[0,9],[0.841,-8],[0,-12],[0,-12],[7.152,-15],[0,0],[-15.145,6],[2.945,21],[3.786,16],[0,14.5]],"o":[[-1.262,-18],[0,16.5],[-0.841,24],[-3.786,17.5],[1.262,-17.5],[0.841,-16.5],[0,-9],[-0.841,8],[0,12],[0,12],[-7.152,15],[0,0],[15.145,-6],[-2.945,-21],[-3.786,-16],[0,-14.5]],"v":[[44.01,85],[32.231,89.5],[28.445,173.5],[20.452,255],[14.141,258.5],[21.293,179.5],[21.714,111.5],[12.459,93.5],[12.459,120.5],[9.934,154],[2.783,217],[-35.5,311.5],[71.355,329.5],[70.514,276.5],[58.734,230.5],[45.272,156]],"c":true}]},{"t":7.2,"s":[{"i":[[1.11,18.01],[4.218,-15.952],[0.841,-24],[3.786,-17.5],[-1.262,17.5],[-0.841,16.5],[2.737,8.574],[8.541,-9.5],[0.324,-11.996],[0,-12],[7.152,-15],[0,0],[-15.145,6],[2.945,21],[3.786,16],[-5.772,23]],"o":[[-1.51,-24.5],[-4.231,16],[-0.841,24],[-3.786,17.5],[1.262,-17.5],[0.841,-16.5],[-2.714,-8.5],[-5.378,5.982],[-0.459,17],[0,12],[-7.152,15],[0,0],[15.145,-6],[-2.945,-21],[-3.786,-16],[3.53,-14.064]],"v":[[44.01,148],[30.231,127.5],[23.945,177.5],[20.452,255],[25.641,254],[23.793,179],[20.214,101.5],[3.459,114.5],[-4.541,135],[-9.566,162.5],[-18.217,188.5],[-35.5,311.5],[71.355,329.5],[70.514,276.5],[49.234,211.5],[58.772,182]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":8.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":32.4,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,540,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[149,149,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[23.629,-12.442],[-31.77,-2.528],[-2.715,3.35],[2.5,29.833]],"o":[[-27.149,14.296],[7.465,0.594],[0.82,-1.012],[-1.166,-13.912]],"v":[[1.442,0.632],[8.932,61.617],[25.035,42.093],[49.162,17.184]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[22.25,-5.5],[-25.95,-8.65],[-2.952,2.232],[-4.061,25.371]],"o":[[-25.564,6.319],[6.097,2.032],[0.892,-0.675],[1.894,-11.831]],"v":[[16.75,-17.5],[11.45,27.15],[29.108,18.675],[49.561,6.129]],"c":true}]},{"t":24,"s":[{"i":[[2.826,0.226],[-6.248,-1.939],[-0.818,0.427],[-0.179,0.96]],"o":[[-5.386,-0.431],[1.416,0.439],[0.898,-0.468],[0.377,-2.026]],"v":[[25.445,-29.549],[24.153,-22.439],[27.505,-22.53],[29.119,-24.816]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":25.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 12","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[25.157,0],[-7.133,-34.239],[-50.404,-10.319],[-2.291,-1.08],[-13.034,10.818],[5.14,21.53],[7.395,9.457]],"o":[[-31.385,0],[4.129,19.818],[32.417,6.637],[13.968,6.583],[12.243,-10.161],[-2.43,-10.18],[-19.822,-25.351]],"v":[[84.696,-93.023],[17.566,-54.447],[76.583,23.363],[120.032,13.417],[167.138,5.564],[182.327,-49.917],[163.105,-70.957]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[19.767,0],[-5.825,-27.959],[-42.008,-0.703],[-19.934,-5.307],[-12.119,10.175],[4.346,18.205],[4.435,5.39]],"o":[[-25.629,0],[3.372,16.184],[10.273,0.172],[12.359,3.29],[12.193,-10.236],[-2.287,-9.58],[-14.955,-18.177]],"v":[[98.574,-112.672],[42.531,-60.347],[85.008,-25.797],[111.914,-18.812],[152.643,-30.532],[168.5,-74.614],[158.22,-96.772]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[13.475,0],[-3.971,-19.059],[-9.432,-1.919],[-13.588,-3.618],[-8.039,7.878],[5.812,11.358],[3.082,2.401]],"o":[[-17.471,0],[2.298,11.032],[6.863,1.396],[8.424,2.243],[8.088,-7.926],[-1.347,-2.632],[-10.392,-8.095]],"v":[[98.882,-158.5],[75.676,-125.559],[94.066,-108.824],[113.088,-95.882],[141.11,-106.013],[147.912,-136.647],[141.102,-144.251]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[8.484,0],[-2.5,-12],[-5.234,-0.939],[-4.844,0.22],[-2.564,3.92],[0.752,4.012],[1.183,1.452]],"o":[[-11,0],[1.399,6.716],[4.118,0.739],[5.483,-0.249],[2.58,-3.944],[-0.343,-1.83],[-3.989,-4.895]],"v":[[101.5,-172],[85,-150],[95.695,-139.701],[109.5,-139.5],[121.664,-146.652],[124.5,-159.5],[122.16,-164.428]],"c":true}]},{"t":28.8,"s":[{"i":[[-0.25,0],[0.074,0.353],[0.154,0.028],[0.142,-0.006],[0.075,-0.115],[-0.022,-0.118],[-0.035,-0.043]],"o":[[0.324,0],[-0.041,-0.198],[-0.121,-0.022],[-0.161,0.007],[-0.076,0.116],[0.01,0.054],[0.117,0.144]],"v":[[103.831,-187.5],[104.316,-188.147],[104.002,-188.45],[103.596,-188.456],[103.238,-188.246],[103.154,-187.868],[103.223,-187.723]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":28.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[0.666,-1.023],[19.45,-2.017],[0.84,-0.782],[14.032,-14.486],[-18.576,-23.172],[-19.966,-35.115],[-45.062,-13.235],[-1.405,1.052],[-43.993,24.079],[-5.624,12.398],[1.493,13.983],[37.397,17.985]],"o":[[-0.882,1.354],[-16.952,1.758],[-2.391,2.225],[-14.221,14.681],[14.527,18.121],[0.48,0.284],[38.112,11.194],[2.484,-1.861],[10.642,-5.825],[6.505,-14.341],[-1.642,-15.378],[-20.416,-9.818]],"v":[[88.741,-204.955],[47.116,-213.879],[13.891,-195.225],[-22.532,-180.014],[-39.424,-108.828],[-28.034,-50.885],[27.954,-19.651],[98.724,-46.937],[160.843,-68.619],[176.165,-118.93],[179.642,-158.122],[136.603,-207.485]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[0.479,-0.95],[6.476,-1.858],[5.73,-4.123],[2.985,-5.373],[-3.149,-15.55],[-1.978,-1.515],[-40.311,-7.14],[-1.116,1.047],[-35.802,25.085],[-3.682,11.281],[5.698,10.853],[32.872,2.435]],"o":[[-0.649,1.288],[-5.296,1.519],[-4.211,3.03],[-8.652,15.575],[4.018,19.842],[0.443,0.2],[34.093,6.038],[1.974,-1.851],[8.661,-6.068],[4.259,-13.049],[-6.103,-11.626],[-49.698,-3.681]],"v":[[34.521,-200.55],[22.409,-196.746],[5.091,-188.783],[-6.012,-176.377],[-17.899,-126.223],[3.553,-90.062],[40.811,-66.36],[96.948,-84.235],[159.802,-107.585],[157.56,-150.144],[156.377,-188.33],[97.698,-230.819]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[2.953,2.223],[8.094,-0.513],[7.652,-4.544],[4.606,-6.958],[-7.261,-7.104],[-1.308,-1.002],[-34.987,-6.73],[-0.932,0.874],[-10.155,7.757],[-2.869,8.124],[4.734,9.018],[27.476,1.597]],"o":[[-0.962,-0.724],[-6.62,0.42],[-5.624,3.34],[-10.388,15.693],[5.802,5.676],[0.37,0.167],[28.389,5.461],[1.648,-1.545],[7.056,-5.39],[3.285,-9.3],[-5.096,-9.707],[-23.985,-1.394]],"v":[[60.842,-254.532],[45.72,-256.204],[23.472,-249.5],[7.794,-234.348],[9.965,-200.505],[24.13,-190.667],[53.987,-158.77],[95.432,-180.374],[128.29,-186.929],[143.629,-207.888],[142.13,-236.396],[101.485,-263.106]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[10.73,0.457],[3.836,-1.865],[2.004,-2.497],[0.867,-2.178],[-0.225,-4.03],[-1.237,-3.044],[-5.754,-2.333],[-9.471,2.165],[-3.785,4.193],[-0.263,3.388],[3.105,4.777],[4.642,3.585]],"o":[[-5.554,-0.236],[-3.137,1.525],[-1.473,1.835],[-1.454,3.65],[0.18,3.22],[2.982,7.341],[6.786,2.752],[7.532,-1.722],[2.335,-2.587],[0.302,-3.878],[-3.532,-5.434],[-3.9,-3.012]],"v":[[94.5,-280.5],[80.422,-277.879],[72.715,-271.748],[69.207,-265.69],[67.372,-253.989],[69.5,-244.5],[82.798,-230.326],[107.5,-230],[125,-238.987],[129.021,-247.977],[125,-261],[115.065,-275.011]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[4.174,0.178],[1.575,-0.925],[0.872,-1.193],[0.405,-1.01],[-0.016,-1.739],[-0.481,-1.184],[-1.973,-1.528],[-3.685,0.842],[-1.983,2.291],[-0.551,1.749],[0.583,2.139],[2.439,1.701]],"o":[[-2.161,-0.092],[-1.288,0.756],[-0.641,0.877],[-0.679,1.692],[0.013,1.39],[1.16,2.856],[2.327,1.803],[2.93,-0.67],[1.223,-1.413],[0.631,-2.002],[-0.634,-2.326],[-2.049,-1.429]],"v":[[97.159,-306.686],[91.545,-305.337],[88.299,-302.359],[86.729,-299.508],[85.724,-294.259],[86.46,-290.346],[91.122,-283.638],[100.077,-281.981],[107.699,-286.651],[110.421,-291.447],[110.581,-297.738],[106.3,-304.09]],"c":true}]},{"t":31.2,"s":[{"i":[[0.235,0.01],[0.089,-0.052],[0.049,-0.067],[0.023,-0.057],[-0.001,-0.098],[-0.027,-0.067],[-0.111,-0.086],[-0.207,0.047],[-0.112,0.129],[-0.031,0.098],[0.033,0.12],[0.137,0.096]],"o":[[-0.122,-0.005],[-0.073,0.043],[-0.036,0.049],[-0.038,0.095],[0.001,0.078],[0.065,0.161],[0.131,0.101],[0.165,-0.038],[0.069,-0.08],[0.036,-0.113],[-0.036,-0.131],[-0.115,-0.08]],"v":[[98.656,-304.978],[98.34,-304.902],[98.157,-304.735],[98.069,-304.574],[98.013,-304.279],[98.054,-304.058],[98.316,-303.681],[98.82,-303.588],[99.249,-303.85],[99.403,-304.12],[99.412,-304.474],[99.171,-304.832]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[10.408,1.859],[7.443,-5.738],[3.012,-12.842],[-17.95,-10.905],[-3.656,-10.23],[-35.083,0.503],[-3.528,0.039],[-1.55,12.097],[16.654,8.637],[40.267,4.549]],"o":[[-10.415,-1.86],[-14.672,11.312],[-3.217,13.714],[12.983,7.887],[2.274,6.362],[43.85,-0.628],[25.046,-0.278],[1.2,-9.37],[-9.291,-4.819],[-32.912,-3.718]],"v":[[-127.342,-79.192],[-154.515,-74.214],[-177.302,-37.488],[-151.287,3.303],[-127.964,16.011],[-85.686,39.497],[-38.046,13.778],[6.05,-27.097],[-25.397,-71.054],[-91.241,-90.782]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[9.497,1.774],[6.791,-5.477],[2.749,-12.258],[-16.379,-10.409],[-3.336,-9.765],[-32.012,0.48],[-7.481,2.762],[-1.693,8.392],[15.196,8.245],[36.742,4.342]],"o":[[-9.503,-1.775],[-13.387,10.797],[-2.935,13.091],[11.846,7.529],[2.075,6.073],[40.011,-0.6],[13.849,-5.113],[1.779,-8.823],[-8.478,-4.6],[-30.031,-3.549]],"v":[[-113.997,-107.774],[-138.791,-103.023],[-159.584,-68.443],[-135.846,-29.029],[-114.564,-16.898],[-75.988,5.52],[-27.956,-16.167],[-1.864,-51.365],[-26.451,-95.233],[-81.969,-116.451]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[2.79,0],[9.472,-5.289],[0.543,-10.049],[-12.152,-6.059],[-6.974,0.9],[-5.231,0.773],[-5.071,3.349],[-0.245,6.856],[11.081,4.624],[7.423,-2.051]],"o":[[-6.573,0],[-10.568,5.901],[-0.58,10.732],[20.496,10.219],[3.98,-0.514],[5.778,-0.854],[8.756,-5.783],[0.257,-7.208],[-6.64,-2.771],[-4.973,1.374]],"v":[[-74.053,-152.872],[-108.208,-151.977],[-120.97,-119.91],[-102.996,-87.219],[-63.402,-93.688],[-49.15,-95.194],[-32.292,-100.927],[-23.015,-127.165],[-39.115,-156.922],[-61.9,-155.642]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[2.86,0],[5.561,-4.877],[0.54,-9.999],[-8.195,-3.768],[-6.968,0.899],[-3.614,2.241],[-2.882,3.757],[-0.222,6.213],[6.41,4.077],[4.915,1.202]],"o":[[-6.204,0],[-6.541,5.736],[-0.55,10.183],[6.693,3.077],[4.097,-0.529],[3.992,-2.475],[4.381,-5.712],[0.236,-6.607],[-4.295,-2.732],[-3.293,-0.805]],"v":[[-69,-174],[-87.496,-166.273],[-99.5,-142],[-85.74,-121.199],[-64,-118],[-52.332,-122.311],[-41.885,-131.87],[-34.5,-150.5],[-45.338,-166.789],[-59.628,-172.768]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.8,"s":[{"i":[[1.828,0],[3.554,-3.117],[0.345,-6.39],[-5.237,-2.408],[-4.453,0.575],[-2.31,1.432],[-1.842,2.401],[-0.142,3.971],[4.097,2.606],[3.141,0.768]],"o":[[-3.965,0],[-4.18,3.666],[-0.352,6.508],[4.277,1.966],[2.618,-0.338],[2.551,-1.581],[2.8,-3.65],[0.151,-4.223],[-2.745,-1.746],[-2.104,-0.515]],"v":[[-71.868,-187.534],[-83.689,-182.595],[-91.361,-167.083],[-82.567,-153.789],[-68.673,-151.744],[-61.216,-154.499],[-54.539,-160.608],[-49.82,-172.515],[-56.746,-182.925],[-65.879,-186.747]],"c":true}]},{"t":31.2,"s":[{"i":[[-0.108,0],[-0.209,0.183],[-0.02,0.376],[0.308,0.142],[0.262,-0.034],[0.136,-0.084],[0.108,-0.141],[0.008,-0.234],[-0.241,-0.153],[-0.185,-0.045]],"o":[[0.233,0],[0.246,-0.216],[0.021,-0.383],[-0.252,-0.116],[-0.154,0.02],[-0.15,0.093],[-0.165,0.215],[-0.009,0.248],[0.161,0.103],[0.124,0.03]],"v":[[-77.184,-187.91],[-76.489,-188.2],[-76.038,-189.113],[-76.555,-189.895],[-77.372,-190.015],[-77.811,-189.853],[-78.204,-189.494],[-78.481,-188.793],[-78.074,-188.181],[-77.537,-187.956]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":31.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[15.864,17.253],[34.705,1.588],[1.799,-4.405],[9.041,-2.704],[-13.75,-8.503],[-14.191,-1.467],[-24.62,-3.46],[-6.571,12.663],[1.056,7.355]],"o":[[-7.974,-8.672],[-12.45,-0.57],[-0.73,1.788],[-31.143,9.314],[9.3,5.751],[14.136,1.462],[10.6,1.49],[3.228,-6.221],[-1.4,-9.752]],"v":[[-2.632,-145.83],[-44.324,-166.835],[-70.65,-154.238],[-86.096,-149.683],[-101.528,-91.89],[-67.362,-80.98],[-31.388,-62.915],[5.933,-83.054],[11.405,-103.691]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19.2,"s":[{"i":[[18.665,14.175],[34.438,-4.575],[0.991,-4.654],[8.421,-4.26],[-15.037,-5.937],[-14.227,1.065],[-24.844,0.948],[-4.228,13.625],[2.34,7.053]],"o":[[-9.382,-7.125],[-12.355,1.641],[-0.402,1.889],[-29.005,14.674],[10.17,4.016],[14.171,-1.061],[10.697,-0.408],[2.077,-6.694],[-3.102,-9.351]],"v":[[-6.665,-176.142],[-60.438,-194.425],[-75.098,-172.389],[-89.495,-165.174],[-94.463,-105.563],[-58.907,-100.867],[-20.305,-89.448],[12.867,-115.87],[14.602,-137.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[13.466,10.973],[7.517,-1.517],[5.917,-0.143],[5.761,-3.893],[-10.987,-12.103],[-10.263,0.825],[-17.923,0.734],[-3.05,10.547],[2.438,5.123]],"o":[[-6.781,-5.526],[-5.497,1.11],[-7.36,0.178],[-24.532,16.579],[5.504,6.063],[10.224,-0.821],[7.717,-0.316],[1.499,-5.182],[-2.343,-4.923]],"v":[[-10.966,-226.473],[-32.399,-229.93],[-49.513,-227.051],[-73.968,-221.079],[-80.077,-175.708],[-54.426,-172.073],[-26.577,-163.234],[-2.646,-183.687],[-4.64,-199.385]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.4,"s":[{"i":[[3.139,1.638],[4.047,-0.364],[2.627,-1.408],[2.458,-2.786],[-8,-4.5],[-5.194,2.138],[-3.327,2.815],[0.173,4.109],[1.416,2.189]],"o":[[-4.466,-2.33],[-2.959,0.266],[-3.032,1.625],[-10.061,11.403],[3.905,2.197],[5.446,-2.242],[3.021,-2.556],[-0.098,-2.32],[-1.473,-2.278]],"v":[[-31,-255],[-43.828,-257.788],[-52.23,-255.213],[-60.5,-248.5],[-55,-222],[-40.565,-222.842],[-26.5,-231.5],[-21.927,-242.124],[-24.143,-249]],"c":true}]},{"t":28.8,"s":[{"i":[[-0.058,-0.03],[-0.074,0.007],[-0.048,0.026],[-0.045,0.051],[0.147,0.083],[0.096,-0.039],[0.061,-0.052],[-0.003,-0.076],[-0.026,-0.04]],"o":[[0.082,0.043],[0.054,-0.005],[0.056,-0.03],[0.185,-0.21],[-0.072,-0.04],[-0.1,0.041],[-0.056,0.047],[0.002,0.043],[0.027,0.042]],"v":[[-47.289,-288.46],[-47.053,-288.409],[-46.898,-288.456],[-46.746,-288.58],[-46.847,-289.067],[-47.113,-289.052],[-47.371,-288.892],[-47.455,-288.697],[-47.415,-288.571]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":28.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[13.281,-0.5],[-3.018,-9],[-3.48,-2.928],[-3.788,-1.569],[-6.776,2.264],[-2.596,6.468],[-2.723,1.662]],"o":[[-13.281,0.5],[1.44,4.294],[3.813,3.209],[3.629,1.503],[2.016,-0.674],[2.355,-5.869],[7.29,-4.449]],"v":[[43.411,210.5],[18.056,226.5],[21.179,242.334],[37.978,244.5],[46.026,258.986],[49.738,241.545],[59.71,232]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[11,-0.5],[-2.5,-9],[-2.99,-2.972],[-3.055,-1.528],[-1.904,1.567],[-1.918,2.068],[-2.862,2.109]],"o":[[-11,0.5],[1.227,4.417],[3.102,3.083],[2.347,1.173],[1.498,-1.233],[1.878,-2.026],[6.038,-4.449]],"v":[[43,202.5],[22,218.5],[28.769,229.583],[38.5,236.5],[44.563,235.52],[49.533,230.379],[56.5,224]],"c":true}]},{"t":19.2,"s":[{"i":[[2.959,-0.134],[-0.672,-2.421],[-0.804,-0.799],[-0.822,-0.411],[-0.657,0.093],[-0.516,0.556],[-0.202,0.874]],"o":[[-2.959,0.134],[0.33,1.188],[0.834,0.829],[0.631,0.316],[0.992,-0.14],[0.505,-0.545],[0.454,-1.966]],"v":[[36.466,183.808],[30.818,188.112],[31.966,191.227],[34.651,192.684],[36.82,192.891],[39.233,191.643],[40.837,189.322]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[7.616,-2.496],[-7.972,-18.645],[-8.199,6.548],[2.474,5.786]],"o":[[-7.616,2.496],[7.972,18.645],[8.199,-6.548],[-2.474,-5.786]],"v":[[4.739,158.904],[-0.597,187.041],[27.32,194.116],[27.822,169.566]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15.6,"s":[{"i":[[7.5,0.5],[0,-14.5],[-9.5,2],[0,4.5]],"o":[[-7.5,-0.5],[0,14.5],[9.5,-2],[0,-4.5]],"v":[[9,155],[-6,172],[15.5,184.5],[25,168.5]],"c":true}]},{"t":19.2,"s":[{"i":[[0.117,0.008],[0,-0.227],[-0.148,0.031],[0,0.07]],"o":[[-0.117,-0.008],[0,0.227],[0.148,-0.031],[0,-0.07]],"v":[[-1.758,138.945],[-1.992,139.211],[-1.656,139.406],[-1.508,139.156]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":20.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 13","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.2,"s":[{"i":[[24,-5],[0,0],[17,-8.5],[0,0],[12.67,-3.424],[0,0],[12.902,-26.796],[0,0],[4,-0.5],[0,0],[21.321,-10.481],[3.672,-1.663],[0.83,-11.235],[-6.126,-3.982],[0,0],[-6.5,-3.5],[0,0],[-35.5,-1.5],[0,0],[-9.5,5],[0,0],[-3.5,2],[0,0],[-6.5,-2],[5,-2.5],[14,-1],[0,0],[-2.5,-14.5],[-11.5,5],[0,0],[-12.5,22],[0,0],[-8.5,0.5],[-9.5,0.5],[-21,12.5],[0,0],[-34.436,37.019],[7.5,17.5],[0,0],[-2.5,25],[0,0],[10.5,9.5],[0,0]],"o":[[-19.115,3.982],[0,0],[-17,8.5],[0,0],[-18.5,5],[0,0],[-6.5,13.5],[0,0],[-4,0.5],[0,0],[-15.528,7.633],[-26.5,12],[-1.312,17.769],[10,6.5],[0,0],[6.5,3.5],[0,0],[35.5,1.5],[0,0],[9.5,-5],[0,0],[3.5,-2],[0,0],[6.5,2],[-5,2.5],[-14,1],[0,0],[3.436,19.93],[11.5,-5],[0,0],[9.082,-15.985],[0,0],[8.5,-0.5],[9.5,-0.5],[20.266,-12.063],[0,0],[20,-21.5],[-6.837,-15.953],[0,0],[3.637,-36.373],[0,0],[-41.229,-37.302],[0,0]],"v":[[55.5,-190],[32.5,-165],[-15.5,-171.5],[-38.5,-141],[-67.5,-142],[-87.5,-112],[-105.5,-95.5],[-108,-75],[-110,-76],[-108.5,-74],[-142.472,-68.633],[-157,-41.5],[-181.656,-1.975],[-170.5,34.5],[-149,36.5],[-144,50],[-132,58.5],[-96,65],[-68.5,50],[-39,61],[-9,50.5],[3,51.5],[11,42],[22,42],[36.5,42],[13.5,37],[6,47.5],[-33,55],[-12,86.5],[7.5,85.5],[45.5,69],[57,48.5],[73.5,57.5],[94,53.5],[132,56],[151.5,23.5],[183.5,7],[193.5,-45],[174.5,-64.5],[203,-98],[173.5,-142.5],[165.5,-168.5],[94,-175.5]],"c":true}]},{"t":15.6,"s":[{"i":[[24,-5],[0,0],[17,-8.5],[0,0],[12.67,-3.424],[0,0],[13.5,-26.5],[0,0],[4,-0.5],[0,0],[7.858,1.457],[14.496,-19.767],[-4.463,-11.344],[-4.602,-2.991],[0,0],[-6.5,-3.5],[0,0],[-35.5,-1.5],[0,0],[-9.5,5],[0,0],[-3.5,2],[0,0],[-6.5,-2],[5,-2.5],[14,-1],[0,0],[3,-20],[-11.5,5],[0,0],[-13,13],[0,0],[-8.5,0.5],[-9.5,0.5],[-9,3],[0,0],[-34.436,37.019],[13,11.5],[0,0],[-3,16.5],[0,0],[39.061,43.812],[0,0]],"o":[[-19.115,3.982],[0,0],[-17,8.5],[0,0],[-18.5,5],[0,0],[-13.5,26.5],[0,0],[-4,0.5],[0,0],[-8.76,-1.624],[-14.844,20.242],[3.805,9.671],[10,6.5],[0,0],[6.5,3.5],[0,0],[35.5,1.5],[0,0],[9.5,-5],[0,0],[3.5,-2],[0,0],[6.5,2],[-5,2.5],[-14,1],[0,0],[-3,20],[11.5,-5],[0,0],[13,-13],[0,0],[8.5,-0.5],[9.5,-0.5],[9,-3],[0,0],[20,-21.5],[-13,-11.5],[0,0],[3,-16.5],[0,0],[-37,-41.5],[0,0]],"v":[[43,-215.5],[18,-191],[-12,-190.5],[-28,-170],[-54.5,-172.5],[-76,-151.5],[-105.5,-135.5],[-102,-93.5],[-112.5,-91],[-114.5,-79],[-127.054,-85.6],[-163,-64.5],[-173.657,-17.043],[-158,2],[-141,4],[-140.5,14.5],[-125.5,14],[-86.5,37.5],[-45,16],[-17.5,8],[-2.5,-15],[7,-19.5],[10,-30],[18,-21.5],[31,-6],[12,-9.5],[-4.5,11],[-16,35],[8.5,60.5],[19,41.5],[43,36.5],[43.5,11],[54,15],[74.5,23],[104.5,23.5],[122,11],[172.5,-5],[170,-65.5],[160.5,-75],[173,-92],[172.5,-115.5],[168,-186],[87.5,-205.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[24.5,-6],[0,0],[27.5,-10],[0,0],[18.5,-13],[0,0],[4.683,-13.53],[0,0],[15.936,-17.96],[0,0],[-12.285,-25.638],[0,0],[-8,3.5],[0,0],[-10.023,-1.879],[0,0],[-13.543,-9.439],[0,0],[-21,11],[0,0],[-4,8],[0,0],[-11.5,-1.5],[0,0],[-21,10],[0,0],[-12.5,36],[0,0],[-4.783,22.547],[0,0],[36,12],[0,0]],"o":[[-24.62,6.029],[0,0],[-27.5,10],[0,0],[-15.791,11.097],[0,0],[-4.5,13],[0,0],[-31.5,35.5],[0,0],[11.5,24],[0,0],[9.023,-3.948],[0,0],[8,1.5],[0,0],[16.5,11.5],[0,0],[19.448,-10.187],[0,0],[4,-8],[0,0],[11.5,1.5],[0,0],[23.058,-10.98],[0,0],[12.5,-36],[0,0],[3.5,-16.5],[0,0],[-36,-12],[0,0]],"v":[[63.5,-163],[33.5,-149],[-8.5,-145.5],[-31.5,-112.5],[-80,-102.5],[-93.5,-65.5],[-116.5,-58.5],[-120.5,-37],[-185,-35],[-190.5,26],[-187.5,58],[-155.5,83.5],[-129.5,89.5],[-106,74],[-81,98.5],[-45.5,91],[-50,127.5],[-26.5,131],[9,136.5],[22,124],[41,119],[43,104],[70,105],[107,86.5],[149,87],[171.5,72],[196.5,6.5],[176.5,-44],[191,-69.5],[183.5,-96],[145,-148],[96.5,-152.5]],"c":true}]},{"t":13.2,"s":[{"i":[[24.5,-6],[0,0],[27.5,-10],[0,0],[18.5,-13],[0,0],[4.684,-13.53],[0,0],[20.5,-12.5],[0,0],[-2,-44],[0,0],[-35.5,-3.5],[0,0],[-10.023,-1.879],[0,0],[-13.543,-9.439],[0,0],[-7.5,7],[0,0],[-4,8],[0,0],[-11.5,-1.5],[0,0],[-21,10],[0,0],[-12.5,36],[0,0],[0,32.5],[0,0],[36,12],[0,0]],"o":[[-24.62,6.029],[0,0],[-27.5,10],[0,0],[-15.791,11.097],[0,0],[-4.5,13],[0,0],[-19.329,11.786],[0,0],[2.004,44.093],[0,0],[35.5,3.5],[0,0],[8,1.5],[0,0],[16.5,11.5],[0,0],[7.5,-7],[0,0],[4,-8],[0,0],[11.5,1.5],[0,0],[23.058,-10.98],[0,0],[12.5,-36],[0,0],[0,-32.5],[0,0],[-36,-12],[0,0]],"v":[[55.5,-188.5],[31.5,-166],[-13,-172.5],[-37.5,-140.5],[-73,-138],[-88,-112],[-104,-95],[-104.5,-74],[-141.5,-70],[-155,-42],[-181.5,3.5],[-147.5,38.5],[-112.5,63.5],[-66,52],[-51.5,62],[-33,58],[-22.5,82.5],[6.5,84],[35,80.5],[41.5,66.5],[55,61.5],[57,50.5],[75.5,58.5],[94.5,54],[130,55.5],[151.5,25],[193,-7.5],[176,-65],[201.5,-101],[175,-140.5],[144,-181.5],[93,-175]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[9.632,0.803],[-15.25,0]],"o":[[-9.632,-0.803],[15.25,0]],"v":[[31.5,272.217],[31.5,293.086]],"c":true}]},{"t":13.2,"s":[{"i":[[6,0.5],[-9.5,0]],"o":[[-6,-0.5],[9.5,0]],"v":[[28.5,261.5],[28.5,274.5]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[10,0],[-10.892,-11.763],[-1.96,-6.72],[-6,1],[-9,6.5],[11,7.5]],"o":[[-10,0],[12.5,13.5],[3.5,12],[6,-1],[9,-6.5],[-11,-7.5]],"v":[[31.5,232],[17.5,250.5],[23.5,287],[51.5,288.5],[50.5,259],[53.5,234.5]],"c":true}]},{"t":13.2,"s":[{"i":[[10,0],[-1,-16],[-7,0],[-6,1],[-9,6.5],[11,7.5]],"o":[[-10,0],[1,16],[7,0],[6,-1],[9,-6.5],[-11,-7.5]],"v":[[34,212],[17.5,232.5],[39,246],[45,259],[53,238],[56,214.5]],"c":true}]}],"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[13,0.5],[-5.5,-17],[-7.767,-1.328],[-3.187,9.561]],"o":[[-13,-0.5],[2.578,7.97],[8.8,1.505],[6,-18]],"v":[[3,175.5],[-8.5,201.5],[11.259,228.41],[30.5,204.5]],"c":true}]},{"t":13.2,"s":[{"i":[[13,0.5],[-5.5,-17],[-6.476,-1.464],[-3.142,9.426]],"o":[[-13,-0.5],[2.62,8.097],[7.12,1.609],[6,-18]],"v":[[9,158],[-2.5,184],[12.845,198.936],[30.5,188]],"c":true}]}],"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.8,"s":[{"i":[[3.238,15.896],[7.364,-19.086],[-12.232,-1.734]],"o":[[-2.321,-11.394],[-7.364,19.086],[12.232,1.734]],"v":[[36.321,146.394],[16.254,145.303],[26.642,165.907]],"c":true}]},{"t":13.2,"s":[{"i":[[3.148,0.439],[-2.139,-2.941],[-0.915,2.087]],"o":[[-2.856,-0.399],[1.171,1.611],[0.882,-2.011]],"v":[[20.631,109.151],[18.472,114.276],[23.743,113.544]],"c":true}]}],"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":14.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":5,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[17.25,-5.25],[-9.25,-5],[-0.5,-8.5],[1.419,-4.336],[1,-4.25],[6.083,-5.367],[3.75,-3.75],[-8,-1],[2,12],[5.878,5.143],[9.546,9.546],[1.274,4.078],[-0.5,5.5],[-0.742,9.355],[1.75,12.75]],"o":[[-17.25,5.25],[9.25,5],[0.5,8.5],[-4.5,13.75],[-1,4.25],[-8.5,7.5],[-3.75,3.75],[8,1],[-2,-12],[-8,-7],[-5.5,-5.5],[-2.5,-8],[0.405,-4.454],[1.25,-15.75],[-1.75,-12.75]],"v":[[-6.5,181.25],[-13.75,213],[2.5,230.75],[-10.5,236.75],[0.5,256.5],[-1,272],[-5.75,284.75],[24.5,296.5],[60,281],[48.5,263],[38,252.5],[32.5,241.5],[33.5,230],[36.25,215.75],[22.25,197.75]],"c":true}]},{"t":10.8,"s":[{"i":[[17.25,-5.25],[-9.25,-5],[-0.5,-8.5],[-4.5,0.75],[1,-4.25],[-4.5,-6.75],[3.75,-3.75],[-8,-1],[2,12],[-5,6],[13.5,0],[4,1.5],[4,2],[-7,6.25],[1.75,12.75]],"o":[[-17.25,5.25],[9.25,5],[0.5,8.5],[4.5,-0.75],[-1,4.25],[4.5,6.75],[-3.75,3.75],[8,1],[-2,-12],[5,-6],[-13.5,0],[-4,-1.5],[-4,-2],[7,-6.25],[-1.75,-12.75]],"v":[[3.5,172.75],[-6.75,200.5],[6.5,225.75],[15.5,228.75],[17,243],[23.5,259],[20.25,282.75],[34,294.5],[52.5,278.5],[52.5,253],[50,233],[35,241.5],[30,235],[25.75,226.75],[29.75,197.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8.4,"s":[{"i":[[23,0.5],[0,0],[25,-12.25],[0,0],[11.75,-11.75],[0,0],[2.067,-7.853],[1.668,-0.834],[37.75,-26.25],[0,0],[-42.92,-17.937],[0,0],[-18.5,-7.25],[0,0],[-13.5,2.25],[0,0],[-21,-0.75],[-3.5,4.75],[-0.75,-8.75],[4.25,-2.25],[-12.5,-2.75],[4,8.5],[-5.25,7.5],[-4.25,7.75],[-12.25,1],[-11.25,-0.25],[-9.25,6],[0,0],[-34.5,21.25],[0,0],[1.576,29.989],[-1.233,1.234],[1.555,13.02],[0,0],[31.895,60.206],[2.206,2.794],[10.148,5.102],[0,0]],"o":[[-23,-0.5],[0,0],[-25,12.25],[0,0],[-23.939,23.939],[0,0],[-3.75,14.25],[0,0],[-37.75,26.25],[0,0],[16.75,7],[0,0],[18.5,7.25],[0,0],[19.141,-3.19],[0,0],[21,0.75],[3.5,-4.75],[0.75,8.75],[-4.25,2.25],[12.5,2.75],[-4,-8.5],[5.25,-7.5],[4.25,-7.75],[12.25,-1],[11.25,0.25],[9.25,-6],[0,0],[34.5,-21.25],[0,0],[-1.739,-33.095],[0.38,-0.38],[-1.512,-12.657],[0,0],[-7.252,-13.689],[-0.444,0.008],[-7.636,-3.839],[0,0]],"v":[[74,-147],[37,-131.25],[-4,-125.75],[-34.5,-90],[-78.75,-91.25],[-92.25,-64.25],[-113.25,-30.75],[-117,8],[-171.75,-3.25],[-202,64.5],[-168.75,107.5],[-142.25,106],[-107.5,138.25],[-80.25,148.75],[-50.5,153.25],[-33.5,144],[-8.5,164.25],[9.5,163],[28.25,160.5],[7.5,179.75],[2.25,198.5],[30.75,179.25],[45.5,162.25],[43.75,147],[52,138.75],[70.75,144.5],[94.75,139.25],[110,135.75],[167.75,129.25],[188.75,91.25],[205.924,49.511],[179.75,20.75],[194.091,-9.951],[174,-31],[172,-90.75],[139.278,-109.015],[118.772,-126.547],[102.5,-127.25]],"c":true}]},{"t":10.8,"s":[{"i":[[23,0.5],[0,0],[25,-12.25],[0,0],[26.75,-20.75],[0,0],[8.5,-12.25],[0,0],[37.75,-26.25],[0,0],[-41.25,-21.5],[0,0],[-18.5,-7.25],[0,0],[-7.25,-18],[0,0],[-21,-0.75],[-3.5,4.75],[-0.75,-8.75],[4.25,-2.25],[-12.5,-2.75],[4,8.5],[-5.25,7.5],[-4.25,7.75],[-12.25,1],[-11.25,-0.25],[-9.25,6],[0,0],[-34.5,21.25],[0,0],[-3.962,4.209],[-0.985,12.809],[5.582,6.1],[0,0],[31.895,60.206],[16.103,2.075],[6.126,-0.951],[0,0]],"o":[[-23,-0.5],[0,0],[-25,12.25],[0,0],[-26.75,20.75],[0,0],[-8.5,12.25],[0,0],[-37.75,26.25],[0,0],[41.25,21.5],[0,0],[18.5,7.25],[0,0],[7.25,18],[0,0],[21,0.75],[3.5,-4.75],[0.75,8.75],[-4.25,2.25],[12.5,2.75],[-4,-8.5],[5.25,-7.5],[4.25,-7.75],[12.25,-1],[11.25,0.25],[9.25,-6],[0,0],[34.5,-21.25],[0,0],[5.106,-5.424],[0.902,-11.728],[-5.246,-5.733],[0,0],[-10.553,-19.921],[-10.898,-1.405],[-3.906,0.606],[0,0]],"v":[[64,-163.5],[32,-146.25],[-7,-144.75],[-32.5,-110.5],[-76.25,-101.75],[-95.75,-70.25],[-115.75,-57.25],[-125,-35.5],[-180.75,-31.25],[-190,27.5],[-162.75,82],[-105.75,74],[-80,99.75],[-44.75,93.75],[-51.5,122.25],[-27.5,131.5],[-10.5,142.75],[8.5,132],[19.25,134],[16,149.75],[20.75,167],[37.75,148.25],[24,129.75],[42.75,116],[51.5,101.25],[72.25,104],[92.75,95.25],[107.5,86.75],[158.25,82.25],[179.25,30.25],[186.601,23.988],[198.75,-3.25],[188.527,-30.215],[178,-39],[173.5,-123.75],[128.753,-152.957],[101.742,-152.464],[95.5,-151.25]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":12,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[16.5,1.75],[0,0],[25.5,-18],[0,0],[21,-3],[0,0],[1,-21],[0,0],[5.78,-1.759],[6.647,-0.026],[9.366,-2.297],[0,0],[-14.139,-43.375],[0,0],[-9,-4.5],[0,0],[-5.463,-5.031],[0,0],[-23.5,-3.5],[0,0],[-4,-5.375],[-8.519,-1.917],[-3.625,1.25],[2.112,-10.561],[0.75,-5.5],[3.75,-13],[-15.5,0],[6.5,16.25],[0.5,5.25],[2.404,10.415],[-1.5,5.875],[-0.625,-0.125],[-9.25,-1],[-1.625,0.25],[-13.049,0.991],[0,0],[-40.514,19.542],[-1.733,0.284],[-3.867,27.833],[0,0],[2.5,33],[0,0],[-2.2,4.6],[0,0],[2.659,37.887],[3.733,10.905],[8.358,1.358],[15.014,8.974],[0,0],[13,1.25],[0,0]],"o":[[-25.855,-2.742],[0,0],[-25.5,18],[0,0],[-21,3],[0,0],[-1,21],[0,0],[-4.563,1.388],[-8.236,0.032],[-26.5,6.5],[0,0],[7.375,22.625],[0,0],[9,4.5],[0,0],[4.75,4.375],[0,0],[23.5,3.5],[0,0],[3.686,4.953],[5,1.125],[10.149,-3.5],[-1.25,6.25],[-0.643,4.713],[-2.256,7.821],[15.5,0],[-4.76,-11.899],[-0.844,-8.862],[-0.75,-3.25],[2.877,-11.268],[8.25,1.25],[13.257,1.433],[5.318,-0.819],[9.875,-0.75],[0,0],[21.25,-10.25],[1.436,-0.235],[4.065,-29.26],[0,0],[-2.5,-33],[0,0],[2.75,-5.75],[0,0],[-1,-14.25],[-4.206,-12.289],[-1.975,-0.321],[-9.269,-5.54],[0,0],[-14.086,-1.354],[0,0]],"v":[[70,-123.75],[41.75,-116],[-6.25,-112],[-28.75,-64.25],[-72,-62.5],[-93.5,-42],[-112.75,-15.5],[-103.75,11.5],[-118.851,12.241],[-130.251,17.904],[-157,12.25],[-180.25,40],[-208.625,111.5],[-184.875,142.25],[-171.625,166.625],[-157.625,171.875],[-149.625,185],[-134.75,191.375],[-92.125,220.125],[-49.625,215],[-44.875,225.375],[-28.125,231.875],[-16,231.25],[-6.5,241.75],[-10.5,257.75],[-18,279.25],[23,297],[71.5,277.5],[62.5,253],[58.625,232.75],[58,218.375],[65,213.5],[80.25,221.75],[95.625,219.75],[109.875,223],[125,212.5],[177,205.5],[198.983,183.466],[223.867,158.917],[212,122.5],[216.75,84],[165,30],[163.25,12.75],[169.25,2.5],[183,-39],[167.456,-65.961],[147.892,-83.358],[135.986,-105.974],[116.5,-101.5],[103.5,-107],[85.25,-103.5]],"c":true}]},{"t":8.4,"s":[{"i":[[26,0],[0,0],[25.5,-18],[0,0],[21,-3],[0,0],[1,-21],[0,0],[1.197,1.376],[5.039,3.638],[13.458,-3.301],[0,0],[-27.624,-36.306],[0,0],[-9,-4.5],[0,0],[-34.147,-9.485],[0,0],[-23.5,-3.5],[0,0],[11.5,-11.5],[8.5,-13.5],[-9.5,-5],[10,-4],[-7,-11],[6,-5.5],[-15.5,0],[4.5,12],[5.5,7],[-2,10.5],[10.5,5],[-6.5,8],[0,12.5],[-2,5],[-20.5,-1.5],[0,0],[-41,18.5],[-4.304,4.893],[0.262,4.334],[0,0],[2.5,33],[0,0],[7,20],[0,0],[13.5,35.5],[5.454,4.433],[3.58,1.003],[2.196,-0.145],[0,0],[12,7.5],[0,0]],"o":[[-26,0],[0,0],[-25.5,18],[0,0],[-21,3],[0,0],[-1,21],[0,0],[-2.067,-2.377],[-8.21,-5.928],[-26.5,6.5],[0,0],[17.5,23],[0,0],[9,4.5],[0,0],[18,5],[0,0],[23.5,3.5],[0,0],[-11.5,11.5],[-8.5,13.5],[9.5,5],[-10,4],[7,11],[-6,5.5],[15.5,0],[-4.5,-12],[-5.5,-7],[2,-10.5],[-10.5,-5],[6.5,-8],[0,-12.5],[2,-5],[20.5,1.5],[0,0],[11.059,-4.99],[5.354,-6.087],[-0.308,-5.098],[0,0],[-2.5,-33],[0,0],[-7,-20],[0,0],[-4.246,-11.166],[-4.028,-3.274],[-4.031,-1.129],[-1.608,0.106],[0,0],[-12,-7.5],[0,0]],"v":[[72.5,-147.5],[36.5,-129],[-6,-122],[-34,-88],[-72.5,-94],[-95,-60.5],[-113,-30.5],[-114,7.5],[-115.832,5.26],[-126.679,-4.663],[-160,-12.5],[-194.5,30],[-188,98.5],[-142.5,108.5],[-130.5,124.5],[-111.5,127],[-71,150.5],[-36,144],[-6.5,166],[19.5,147],[24,172],[-17.5,188],[-6.5,218],[-6,234.5],[-0.5,256],[-5.5,281],[23,297],[58,278.5],[40.5,258.5],[31.5,233.5],[33.5,208.5],[26.5,189],[45,157],[42,133],[66,143.5],[109.5,137.5],[163.5,131],[185.848,115.945],[192.145,99.869],[189.5,91.5],[205,49.5],[180.5,21.5],[190,-12.5],[174,-32.5],[177.5,-78.5],[162.367,-101.159],[150.72,-107.276],[141.044,-108.327],[138.5,-108],[116,-127],[102.5,-123.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":6,"s":[0,0],"h":1},{"t":7.2,"s":[100,100],"h":1},{"t":9.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":1,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[53.5,-1.5],[0,0],[4.5,0],[0,0],[27,-16],[0,0],[8.5,0],[0,0],[29.5,-7.5],[0,0],[-4,-46],[0,0],[-12.5,-14],[0,0],[-32,-0.5],[0,0],[-16.5,0],[0,0],[0,0],[-5.192,-4.863],[-20.226,-0.259],[-5.364,6.404],[0,0],[4.5,15],[0,0],[-28,-0.5],[0,0],[-23.5,26],[0,0],[32,37],[0,0],[1,6],[0,0],[-3,34],[22.589,6.706],[0,0]],"o":[[-53.5,1.5],[0,0],[-4.5,0],[0,0],[-27,16],[0,0],[-8.5,0],[0,0],[-29.5,7.5],[0,0],[4,46],[0,0],[12.5,14],[0,0],[32,0.5],[0,0],[16.5,0],[0,0],[0,0],[5.593,5.239],[21.717,0.278],[4.269,-5.096],[0,0],[-4.5,-15],[0,0],[28,0.5],[0,0],[23.5,-26],[0,0],[-32,-37],[0,0],[-1,-6],[0,0],[3,-34],[-32,-9.5],[0,0]],"v":[[31.5,-125.5],[-23.5,-71],[-38.5,-70],[-44.5,-57.5],[-88,-55],[-102,8],[-115,13],[-130.5,19.5],[-166,13],[-184,35],[-214,91.5],[-179.5,135.5],[-167.5,164],[-136.5,184.5],[-98,216],[-46.5,216.5],[-20,234],[-2,231],[-17,277.5],[-15.497,286.997],[25.5,298],[66.446,285.711],[68.5,275],[59,230],[56.5,209.5],[97,224.5],[126,212.5],[198.5,189.5],[217,121],[210,57],[161.5,32.5],[164,20.5],[157.5,11.5],[183,-27.5],[135,-102.5],[85,-97]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":7.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[42.5,3],[0,0],[9.5,-2.5],[0,0],[24.5,-15.5],[0,0],[7.5,-4.5],[0,0],[26.877,-62.023],[0,0],[-24.5,-34],[0,0],[-51.855,-12.964],[0,0],[-51,3.5],[0,0],[-13.5,-0.5],[0,0],[-42.5,37],[0,0],[24,23],[0,0],[6.5,4.5],[0,0],[1,10],[0,0],[7,35],[0,0]],"o":[[-42.5,-3],[0,0],[-9.5,2.5],[0,0],[-24.5,15.5],[0,0],[-7.5,4.5],[0,0],[-26,60],[0,0],[24.5,34],[0,0],[50,12.5],[0,0],[51,-3.5],[0,0],[13.937,0.516],[0,0],[43.446,-37.824],[0,0],[-24,-23],[0,0],[-6.5,-4.5],[0,0],[-1,-10],[0,0],[-7,-35],[0,0]],"v":[[66,-53],[5,-23],[-8.5,-24],[-17,-12],[-77,-15],[-92.5,24],[-110,26],[-117,41.5],[-213.5,86],[-201,167],[-202.5,235.5],[-142.5,256.5],[-108,303],[-49,287.5],[24,299],[89.5,280.5],[105.5,291],[125.5,285.5],[196,266],[217.5,193.5],[221.5,145],[182.5,133],[171.5,114],[155,100.5],[161,84],[145.5,63],[160,13],[122.5,-20]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[32.74,1.116],[0,0],[24.25,-6.5],[0,0],[18.25,-26.75],[0,0],[3,-5.75],[0,0],[-18.49,-52.167],[0,0],[-35,-6.25],[0,0],[-22.25,1.25],[0,0],[-10.75,1.5],[0,0],[-23.465,-6.663],[-22.652,14.044],[-1.014,10.049],[0,0],[-0.5,4.5],[0,0],[5,16.75],[0,0],[16.5,18.75],[0.75,-0.25],[36.932,3.756],[0,0]],"o":[[-22,-0.75],[0,0],[-24.25,6.5],[0,0],[-18.25,26.75],[0,0],[-3,5.75],[0,0],[7,19.75],[0,0],[35,6.25],[0,0],[22.25,-1.25],[0,0],[10.75,-1.5],[0,0],[14.714,4.178],[16.327,-10.123],[2.091,-20.724],[0,0],[0.39,-3.514],[0,0],[-5,-16.75],[0,0],[-16.5,-18.75],[-0.75,0.25],[-29.5,-3],[0,0]],"v":[[-0.25,100.5],[-26,113.25],[-64,111],[-83,133.25],[-118.25,152.75],[-123,202.75],[-130.5,211.5],[-126.75,221.25],[-144.25,286.25],[-104.5,310.25],[-68.25,331.5],[-24,314.75],[2.25,325.25],[24.25,316.25],[43.75,318],[57,312],[92.204,339.283],[149.5,327.5],[169.092,296.459],[156.5,256],[161,248.25],[155,241],[162.75,213],[143.25,186.5],[144.5,149.25],[105.5,132.75],[72.5,105.5],[33.5,122.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":32.4,"st":0,"bm":0}]},{"id":"comp_4","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Smoke Explosion 03 *","refId":"comp_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[960,540,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ef":[{"ty":20,"nm":"Tint","np":6,"mn":"ADBE Tint","ix":1,"en":1,"ef":[{"ty":2,"nm":"Map Black To","mn":"ADBE Tint-0001","ix":1,"v":{"a":0,"k":[0.890196084976,1,0.998708188534,1],"ix":1}},{"ty":2,"nm":"Map White To","mn":"ADBE Tint-0002","ix":2,"v":{"a":0,"k":[0.554740488529,0.809229373932,0.847058832645,1],"ix":2}},{"ty":0,"nm":"Amount to Tint","mn":"ADBE Tint-0003","ix":3,"v":{"a":0,"k":100,"ix":3}},{"ty":6,"nm":"","mn":"ADBE Tint-0004","ix":4,"v":0}]}],"w":1920,"h":1080,"ip":0,"op":20.4,"st":0,"bm":0}]},{"id":"comp_5","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","parent":3,"td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.75,0],[2,-13.75],[-4.25,-1.75],[0.5,4.75],[-2.75,0],[-2,8.75]],"o":[[-13.75,0],[-2,13.75],[4.25,1.75],[-0.5,-4.75],[2.75,0],[2,-8.75]],"v":[[-286.25,-108.5],[-303.25,-81.5],[-297,-58.5],[-291.25,-70],[-283.5,-75.5],[-271.5,-89.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":18,"s":[0,0],"h":1},{"t":19.2,"s":[100,100],"h":1},{"t":20.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 15","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[16,0],[4.75,-5],[-0.25,-10.5],[-4,0.75],[0.75,5],[-5.5,0],[-2.25,9.25]],"o":[[-16,0],[-4.75,5],[0.25,10.5],[4,-0.75],[-0.75,-5],[5.5,0],[2.25,-9.25]],"v":[[-279,-113.25],[-307,-90.75],[-313.25,-66.75],[-294.25,-51.5],[-288.75,-66.5],[-280,-77.5],[-261.25,-89]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[8,3.5],[-8.5,-2.5]],"o":[[-8,-3.5],[8.5,2.5]],"v":[[-285.25,-42.5],[-287.75,-33]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":19.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 14","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.75,-0.75],[-0.25,-4.75],[-2.75,3.5],[-1.25,6.25]],"o":[[-5.75,0.75],[0.25,4.75],[2.75,-3.5],[1.25,-6.25]],"v":[[-198.75,56.25],[-212,69.5],[-207.5,78.25],[-197.25,69.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[9,-6.25],[1.75,-17],[-12.5,-10.75],[-7,-4],[-2.5,0],[5,7.5],[-1.5,8.25],[-9,8],[11.25,10.5]],"o":[[-9,6.25],[-1.75,17],[12.5,10.75],[7,4],[2.5,0],[-5,-7.5],[1.5,-8.25],[9,-8],[-11.25,-10.5]],"v":[[-290.75,-115],[-318.5,-74.5],[-308.25,-36.75],[-287.75,-25.25],[-274.25,-22],[-268,-42.5],[-278.25,-62.25],[-266.25,-78.75],[-256.75,-109.75]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[6.5,-2],[-1.25,-3.5],[-7.064,-1.705],[-3,-2.5],[0,0],[0.75,0.25],[2.25,3.25]],"o":[[-6.5,2],[1.25,3.5],[7.25,1.75],[3,2.5],[0,0],[-0.75,-0.25],[-2.25,-3.25]],"v":[[61,199.25],[49.75,206.25],[58.75,209.75],[73.25,210.5],[91,213.75],[83.5,209.75],[76.25,200]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":18,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 13","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.125,4],[3.25,-3.25],[11.5,-1.75],[-2.375,-5.75],[-0.25,4.375],[-6.5,0]],"o":[[-1.125,-4],[-3.25,3.25],[-11.5,1.75],[2.375,5.75],[0.25,-4.375],[6.5,0]],"v":[[-115.875,-47.75],[-122,-45.875],[-138.25,-47],[-147,-30],[-133.75,-29.5],[-124.875,-40]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[7,4.25],[7,-4.5],[0.75,-0.75],[-8.75,-2.25],[-4.25,1.5],[-0.5,-6.25],[0,0],[3.75,7.75]],"o":[[-7,-4.25],[-7,4.5],[-0.75,0.75],[8.75,2.25],[4.25,-1.5],[0.5,6.25],[0,0],[-3.75,-7.75]],"v":[[71.5,193.5],[46,197],[32.25,195.5],[43.25,209.5],[67.5,206],[80.5,210.75],[93.25,220.75],[86.25,210.75]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[4.75,0.25],[0,-6.5],[-0.5,5.25]],"o":[[-4.75,-0.25],[0,6.5],[0.5,-5.25]],"v":[[-125.5,159],[-125.75,173],[-112.75,172]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[5,0.25],[5.75,-3.5],[4.5,-4],[-9.5,-8],[-2.5,18.5],[-7.75,1.25],[0.75,5.25]],"o":[[-5,-0.25],[-5.75,3.5],[-4.5,4],[9.5,8],[2.5,-18.5],[7.75,-1.25],[-0.75,-5.25]],"v":[[-177.25,39.25],[-188.5,49.5],[-207.25,54.75],[-213.75,83.25],[-182.5,75.25],[-176.5,60.5],[-168.25,46.75]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[6,0],[5.25,-4.75],[7.75,-2],[1,-13.75],[-10.75,-9.25],[-3.25,-10.75],[-9.25,0],[0.5,7.75],[0.75,5.75],[-3.25,2.75],[0.5,7.75],[-4.25,5],[5.5,4.25]],"o":[[-6,0],[-5.25,4.75],[-7.75,2],[-1,13.75],[10.75,9.25],[3.25,10.75],[9.25,0],[-0.5,-7.75],[-0.75,-5.75],[3.25,-2.75],[-0.5,-7.75],[4.25,-5],[-5.5,-4.25]],"v":[[-274.75,-108.75],[-292.5,-107.5],[-308.75,-101.25],[-318.75,-80],[-311,-54],[-300.75,-25],[-268.25,-13],[-262.25,-32.5],[-268.75,-46],[-262,-58.25],[-259.25,-74.75],[-249.75,-85],[-253.25,-105.75]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":14.4,"s":[0,0],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 12","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.375,-6.375],[-8.875,-3.5],[-5.5,0.375],[-1.75,-4.125],[0,0],[0.375,3.5],[8.25,3.375],[11,-3]],"o":[[0,0],[3.375,6.375],[8.875,3.5],[5.5,-0.375],[1.75,4.125],[0,0],[-0.375,-3.5],[-8.25,-3.375],[-11,3]],"v":[[15.75,188.625],[18.75,195.75],[42.875,208],[64.875,205.375],[83.5,216.125],[94.75,224.125],[89.125,208.875],[71.5,190.75],[37.625,197.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[4.25,-6.25],[10.25,3.75],[8.5,-3.5],[3.75,-4],[4.5,-9.5],[5.25,-8],[-6.5,-1.25],[-2.75,-7.25],[-5,0],[-5.25,-1],[0,0],[2,8.25],[-4,6.5],[-3,6.5],[-6.75,5.75],[6.75,15.25]],"o":[[-4.25,6.25],[-10.25,-3.75],[-8.5,3.5],[-3.75,4],[-4.5,9.5],[-5.25,8],[6.5,1.25],[2.75,7.25],[5,0],[5.25,1],[0,0],[-2,-8.25],[4,-6.5],[3,-6.5],[6.75,-5.75],[-6.75,-15.25]],"v":[[-251.5,-110.25],[-268,-104.25],[-287,-103.75],[-301.75,-90.25],[-318.5,-80.5],[-325,-48],[-317.75,-31],[-307,-17.75],[-289,-8],[-277.25,-4.75],[-266.75,-5.75],[-257,-19.75],[-263,-38.75],[-249.25,-52.5],[-240.75,-78],[-229.75,-103]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[9.034,-0.539],[0,0],[-10.25,-16],[0,0],[-7.25,1.25],[0,0],[10,14.75],[3.301,-0.009],[0,0],[1.981,3.164]],"o":[[-16.75,1],[0,0],[10.25,16],[0,0],[7.25,-1.25],[0,0],[-4.317,-6.367],[-4.345,0.011],[0,0],[-2.319,-3.704]],"v":[[-135.25,-65.5],[-151.25,-49.25],[-155.25,-20.5],[-122.75,-23.25],[-109.5,-23.5],[-100.75,-28.5],[-98,-47.25],[-109.748,-51.91],[-117,-52.25],[-119.299,-58.439]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[7.5,-2.75],[-0.25,-5.75],[9.5,-4.5],[-3.75,-15.5],[-5.75,-4.5],[-6.5,0],[-2,5.25],[0.75,4],[-0.75,3.5],[5.5,12.5]],"o":[[-7.5,2.75],[0.25,5.75],[-9.5,4.5],[3.75,15.5],[5.75,4.5],[6.5,0],[2,-5.25],[-0.75,-4],[0.75,-3.5],[-5.5,-12.5]],"v":[[-182.5,27.5],[-197.5,47],[-210.5,57],[-218,89],[-197.25,97.75],[-178.5,97.5],[-160,90.25],[-152.75,69.5],[-157.75,57.5],[-153.75,35.75]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[1.75,-1.375],[-3.5,-1],[-1,-5.75],[-2.75,-8.75],[3.5,-11],[-10,-0.75],[-3,2.25],[-5.25,-2.5],[-3.125,1.125],[-1.125,5.625],[0,0],[4.625,-2.5],[4.375,-1.5],[10,2.5],[6.875,5.75],[3.5,8.75],[0.625,6]],"o":[[-1.75,1.375],[3.5,1],[1,5.75],[2.75,8.75],[-3.5,11],[10,0.75],[3,-2.25],[5.25,2.5],[3.125,-1.125],[1.125,-5.625],[0,0],[-4.625,2.5],[-4.375,1.5],[-10,-2.5],[-6.875,-5.75],[-3.5,-8.75],[-0.625,-6]],"v":[[-148.75,110.625],[-149.75,116.75],[-141.5,123.5],[-133.25,141.75],[-135.25,171],[-118.5,187],[-100,176.5],[-76.5,176.25],[-68.625,183.375],[-58.375,174.375],[-59.375,159],[-67.625,167.125],[-81.125,172.375],[-99.25,168.875],[-121,153.375],[-132.75,135.125],[-135.375,118.375]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":15.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":5,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.097,-0.585],[-4.25,-7],[-13.75,0.25],[-7.5,-3.5],[-4.75,-6.25],[-3.75,1.5],[6.25,12],[13.25,0],[11.75,0.75]],"o":[[-1.75,0.25],[4.25,7],[13.75,-0.25],[7.5,3.5],[4.75,6.25],[3.75,-1.5],[-6.25,-12],[-13.25,0],[-11.75,-0.75]],"v":[[8.75,179],[14.75,195.75],[38.5,210],[67.25,209.5],[86,228.5],[103.75,234.75],[93.25,213.5],[72,186],[33.5,192]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[16,12.25],[7.25,-2.5],[25.75,-11.5],[2.25,-14.75],[-9.25,-5.75],[-4.5,-8.25],[-8.25,-3],[-4.5,6.75],[0,10.75],[-11.25,6],[-3.25,4],[-0.75,7.5],[-9,0]],"o":[[-16,-12.25],[-7.25,2.5],[-25.75,11.5],[-2.25,14.75],[9.25,5.75],[4.5,8.25],[8.25,3],[4.5,-6.75],[0,-10.75],[11.25,-6],[3.25,-4],[0.75,-7.5],[9,0]],"v":[[-222,-108.5],[-251,-99.75],[-295.25,-94.5],[-326.75,-49],[-314,-21.5],[-298,-0.25],[-278,15.25],[-254.5,7.75],[-254,-16],[-239.25,-37.75],[-230.5,-41],[-232.25,-58.25],[-221.5,-68.5]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[9.75,1.5],[0,0],[2.5,-4.5],[0,-11.25],[-14,-2],[-6,2.5],[-6.75,3.5],[-0.5,2.25],[-1.5,-4],[0.25,6],[1.5,-1.75],[2.5,3.75],[8.25,4.25],[6.5,0.75]],"o":[[-9.75,-1.5],[0,0],[-2.5,4.5],[0,11.25],[14,2],[6,-2.5],[6.75,-3.5],[0.5,-2.25],[1.5,4],[-0.25,-6],[-1.5,1.75],[-2.5,-3.75],[-8.25,-4.25],[-6.5,-0.75]],"v":[[-137,-61],[-145.5,-57.75],[-148.25,-48.5],[-160.75,-27.75],[-149.75,-0.75],[-123.75,-8.75],[-97,-11],[-84.25,-24.75],[-75.75,-25.25],[-68.75,-29],[-75,-35.25],[-81.25,-32],[-94,-48],[-117.75,-48.75]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[10,0.5],[14.5,-4.75],[0,-7],[5.25,-4],[-10.25,-20.75],[-18.25,4],[0.5,5],[-4.5,5.5],[-0.75,7.25],[0.25,4.25]],"o":[[-7.31,-0.365],[-14.5,4.75],[0,7],[-5.25,4],[10.25,20.75],[18.25,-4],[-0.5,-5],[4.5,-5.5],[0.75,-7.25],[-0.25,-4.25]],"v":[[-155.5,14.75],[-183.5,24.75],[-192,39.75],[-200,55],[-214.75,94.5],[-164.5,116.75],[-150.5,86.75],[-149,70.75],[-136,55],[-137.75,25.25]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[1.25,-6.25],[-6.25,-5.5],[4,-5.75],[-19,-1.25],[-9.75,0],[-1.75,-5],[-3.5,8],[0.75,3.25],[0,0],[8.25,-2.5],[13.25,3],[1,5.25],[3.75,2],[-1.5,4.75],[1.5,2.25]],"o":[[0,0],[-1.25,6.25],[6.25,5.5],[-4,5.75],[19,1.25],[9.75,0],[1.75,5],[3.5,-8],[-0.75,-3.25],[0,0],[-8.25,2.5],[-13.25,-3],[-1,-5.25],[-3.75,-2],[1.5,-4.75],[-1.5,-2.25]],"v":[[-142.75,115.5],[-140.25,130],[-134.75,146.5],[-133.75,166],[-124.5,192.5],[-95.25,175.25],[-70.5,181.25],[-55.5,182.5],[-55.25,162.25],[-59,155.5],[-67.25,167.25],[-93,167.5],[-111.75,155.25],[-127.25,140.75],[-134,133.5],[-136.5,119.5]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[5.5,-7.25],[-4,-4.75],[0,0],[-4,5.25],[-3.25,-7],[-0.75,3],[7,-0.75],[5,4.25]],"o":[[-5.5,7.25],[4,4.75],[0,0],[4,-5.25],[3.25,7],[0.75,-3],[-7,0.75],[-5,-4.25]],"v":[[-62.5,115.75],[-64.25,138.25],[-57.75,149.75],[-56,131],[-41.25,130.5],[-24,130.25],[-34.5,121],[-48.25,118.75]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":12,"s":[0,0],"h":1},{"t":13.2,"s":[100,100],"h":1},{"t":14.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":6,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.75,-3.375],[-4.125,-6.625],[-4.5,3.125],[0.375,3.75],[2,4.25]],"o":[[-4.75,3.375],[4.125,6.625],[4.5,-3.125],[-0.375,-3.75],[-2,-4.25]],"v":[[-149.375,-123.125],[-152.625,-106.625],[-138.875,-101.625],[-132,-109.75],[-138,-122.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.5,3.25],[4.75,-13.75],[-3.951,-6.079],[0,0],[-4.25,3.25],[-5,-2.5],[-9.755,-3.147],[-4.25,-11.25],[-13.75,-15.25],[-13,3.5],[-13.5,-15.5],[10.5,5.5],[3.5,11.75],[18.261,0.41],[12.5,0.25],[8.5,13],[2,7],[3.25,8],[14.5,0]],"o":[[-1.5,-3.25],[-4.75,13.75],[3.25,5],[0,0],[4.25,-3.25],[5,2.5],[7.75,2.5],[6.579,17.415],[13.75,15.25],[13,-3.5],[13.5,15.5],[-10.5,-5.5],[-3.5,-11.75],[-22.25,-0.5],[-7.351,-0.147],[-8.5,-13],[-2,-7],[-3.25,-8],[-14.5,0]],"v":[[-58,103.5],[-73,115.25],[-67.75,137],[-61,157],[-52.5,134],[-38.25,132],[-25.5,140.25],[-13.25,157.5],[16.5,206.25],[52.25,211.25],[80.25,231.25],[115.75,219.5],[97.25,197.5],[73.5,169.75],[34.75,184.75],[-0.75,165.75],[-10,148.25],[-21.5,120.25],[-37.75,113.5]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[13.75,-0.5],[0,0],[-6,-17],[5.75,-5.5],[15.5,-4.25],[3.25,-7],[3.25,-5.25],[0,0],[8.25,-1],[-9,-4],[0,-8.25],[-4.5,-11],[-11.25,1],[-8,-2.25],[-0.5,-11],[0,0],[4,-14.75],[-11.25,-10.25],[0,0],[-9.25,4.25],[-3.75,-3.75],[-4,7.25],[0.5,9.5],[0,0],[0.5,-6],[8.75,-1.25],[4.25,5],[0,0],[8.75,8.75],[-1.75,3.5],[0,6.5],[-2.75,9],[2.75,8.25],[0,0],[-8,6.75],[-7.25,1],[0,0],[-2.035,8.211],[0,0],[14.75,1.25],[0,0]],"o":[[-13.75,0.5],[0,0],[6,17],[-5.75,5.5],[-15.5,4.25],[-3.25,7],[-3.25,5.25],[0,0],[-8.25,1],[9,4],[0,8.25],[4.5,11],[11.25,-1],[8,2.25],[0.5,11],[0,0],[-4,14.75],[11.25,10.25],[0,0],[9.25,-4.25],[3.75,3.75],[4,-7.25],[-0.5,-9.5],[0,0],[-0.5,6],[-8.75,1.25],[-4.25,-5],[0,0],[-8.75,-8.75],[1.75,-3.5],[0,-6.5],[2.75,-9],[-2.75,-8.25],[0,0],[8,-6.75],[7.25,-1],[0,0],[7.25,-29.25],[0,0],[-14.75,-1.25],[0,0]],"v":[[-136.25,-66],[-154,-49.25],[-163.5,-22.25],[-154.75,0.75],[-177.25,9.5],[-195.5,26.25],[-197.5,41.25],[-205.5,42.5],[-223.25,35.5],[-223.75,54.5],[-211.75,64.75],[-218.5,96.75],[-172.75,124],[-148.25,121],[-136.75,138.25],[-133.5,149.25],[-144.5,165],[-140.25,196.5],[-113,202],[-102.75,187.75],[-76.25,182],[-52.25,184.5],[-55.5,156.5],[-55.25,138.25],[-64,146.5],[-68.25,159.25],[-102.75,157],[-107,133.75],[-123.75,136.25],[-132.75,113.5],[-121,98.25],[-122.5,78.5],[-119.75,46.75],[-127,29.5],[-105,4.5],[-86.75,-5.75],[-77.25,-14.75],[-63,-18.75],[-81,-38],[-100,-54.5],[-121.75,-52.5]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[18.5,-1.5],[0,0],[3.5,1],[2.75,-4.75],[6.5,0.25],[2.75,-6.75],[-0.5,-11.25],[-12.25,-7.5],[0,-6],[-9.5,-5],[-3.5,3.25],[-10.5,9.25],[1.5,4.25],[-3.5,0],[-5.5,9.75],[0,0],[-4.75,3.25],[-6.25,5.75],[1.5,5],[1,6.5]],"o":[[-18.5,1.5],[0,0],[-3.5,-1],[-2.75,4.75],[-6.5,-0.25],[-2.75,6.75],[0.5,11.25],[12.25,7.5],[0,6],[9.5,5],[3.5,-3.25],[10.5,-9.25],[-1.5,-4.25],[3.5,0],[5.5,-9.75],[0,0],[4.75,-3.25],[6.25,-5.75],[-1.5,-5],[-1,-6.5]],"v":[[-229.75,-111.25],[-252.25,-95.25],[-267.5,-96.25],[-280.75,-87.75],[-300.25,-81.75],[-311,-72.25],[-324.5,-41.5],[-304.25,-14.75],[-302.75,6.25],[-284,26.25],[-273.25,19],[-254.5,6.25],[-254,-5],[-253,-18.25],[-236,-31.25],[-240.25,-53.5],[-229.75,-54],[-210,-67],[-200.5,-80.5],[-203.25,-102]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":13.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.5,7.25],[2,1.25],[22.75,-8.75],[2.25,-15.25],[7,-7.25],[4.25,-2.5],[-1,-4.75],[3.75,5.5],[-0.25,-6.25],[-1.5,0.25],[5,-10.75],[-8,-9],[-13.75,-8],[2.75,-7.5],[-19.5,-2.75],[-3.5,5.25],[-3.25,-4.25],[-14.5,6.75],[3.75,10],[-7.75,1.75],[-4,-6.75],[-1.25,-8.75],[-9.25,-8],[-14.053,3.011],[-4.397,-5.412],[-11.111,-3.03],[-3.75,4.5],[6.292,5.566],[3,16.5],[10,0],[6.5,-5],[10.5,7.75],[0.5,8.75],[5,7],[15.5,-10],[-4.25,-13],[15.25,7.75],[1.75,7.75],[-9.25,7],[2.5,1.25],[-1,7.25],[-11,13.5],[0,0],[-7.5,3.25],[0,0],[-10,1.25],[-2,10.75],[4.75,-1.75]],"o":[[-10.5,-7.25],[-2,-1.25],[-22.75,8.75],[-2.25,15.25],[-7,7.25],[-4.25,2.5],[1,4.75],[-3.75,-5.5],[0.25,6.25],[1.5,-0.25],[-5,10.75],[8,9],[13.75,8],[-2.75,7.5],[19.5,2.75],[3.5,-5.25],[3.25,4.25],[14.5,-6.75],[-3.75,-10],[7.75,-1.75],[4,6.75],[1.25,8.75],[9.25,8],[10.5,-2.25],[3.25,4],[11,3],[8.036,-9.643],[-6.5,-5.75],[-2.132,-11.727],[-10,0],[-6.5,5],[-10.5,-7.75],[-0.5,-8.75],[-5,-7],[-15.5,10],[4.25,13],[-15.25,-7.75],[-1.75,-7.75],[9.25,-7],[-2.5,-1.25],[1,-7.25],[11,-13.5],[0,0],[7.5,-3.25],[0,0],[10,-1.25],[2,-10.75],[-4.75,1.75]],"v":[[-93.5,-42],[-112,-40.75],[-153.25,-41.75],[-165.5,7.25],[-179.5,24.25],[-193,38],[-200.75,54.75],[-213.25,57.25],[-224,61.5],[-214.5,70],[-211.25,78.5],[-199,116.75],[-157.75,131.25],[-149,166.5],[-132.25,195.25],[-102.25,180.5],[-81,191],[-54.5,190.25],[-48.75,151.75],[-48,137.25],[-15,151],[-8,174.75],[16.25,208.5],[48.25,216.25],[69,230.75],[86.5,236.75],[113.25,237.5],[105.25,210.75],[82,183.5],[64.25,168.25],[45,181.25],[13.25,173.25],[-12.25,135.25],[-26.75,111.25],[-75,103.25],[-69.25,138],[-103.5,142.25],[-124.75,114.5],[-105,82.5],[-106.25,59],[-109.5,43],[-91.75,25.5],[-91.5,10.5],[-78.75,5.75],[-78,-4.75],[-67,-3],[-50.25,-22.5],[-72.25,-37]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[9.75,-2.25],[-8.75,-10],[-8.5,2],[2.25,9],[6,3.75]],"o":[[-9.75,2.25],[8.75,10],[8.5,-2],[-2.25,-9],[-6,-3.75]],"v":[[-150.75,-129.5],[-155.5,-102.25],[-134.25,-91.25],[-119.75,-109],[-131.25,-123.5]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[17.25,9.5],[11,-4],[0,0],[8.5,-2],[9,-12.75],[-1.25,-12],[0,0],[0,-21.25],[0,0],[-10,0],[0,0],[-6.25,11],[-3.5,5],[0,0],[-7.25,9.25],[0,0],[-7.75,9.25]],"o":[[-17.25,-9.5],[-11,4],[0,0],[-8.5,2],[-9,12.75],[1.25,12],[0,0],[0,21.25],[0,0],[10,0],[0,0],[6.25,-11],[3.5,-5],[0,0],[7.25,-9.25],[0,0],[7.75,-9.25]],"v":[[-202.5,-107.5],[-234.75,-105.25],[-241.75,-89.25],[-257,-89],[-299.5,-68.5],[-300.25,-26.5],[-282.5,7.75],[-292.25,27],[-276,46.75],[-264,54],[-253.5,44.5],[-238.25,31.25],[-230.75,7.5],[-234,-9.25],[-211.25,-23],[-206,-57.5],[-195.5,-65.75]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":12,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.5,-0.5],[0,0],[9.75,-15],[-6.5,-8.5],[1.5,-7.5],[-14.5,-10.75],[-3,-1.75],[1.75,-8.5],[-6.75,-5.75],[0,0],[-8,-8],[-5.75,-7.5],[-0.5,-13.25],[-5.25,-6.75],[0,0],[-12.5,-3.5],[-12.5,2],[-7,10.5],[2.25,6.75],[-14.75,2.75],[-4.5,-5.5],[-3.5,-13],[-7.25,-5.25],[-13.5,0],[-3,-8.5],[-13.75,-6],[-6,3.25],[9,5.75],[2.25,2.25],[2,6.75],[11.25,7.5],[5.5,-5.25],[13.25,5.25],[4.5,8.25],[1.75,10.5],[8,-0.25],[7.25,0],[0.75,-5.75],[3.5,-5],[5.25,6.75],[-5.75,5],[2,7.75],[0,0],[-8.25,3.75],[0,9],[-2.75,1.75],[-3.75,7.5],[0,0],[-6.25,11.25],[12.25,0],[8.5,-3.25],[0,0],[17.5,-4.75],[2.75,-20.5],[13.5,-11],[4.5,4],[-5.75,12.5],[-9.25,8.25],[-0.5,9.75],[-5.75,8.5],[7.25,5.75],[7.5,7]],"o":[[-13.5,0.5],[0,0],[-9.75,15],[6.5,8.5],[-1.5,7.5],[14.5,10.75],[3,1.75],[-1.75,8.5],[6.75,5.75],[0,0],[8,8],[5.75,7.5],[0.5,13.25],[5.25,6.75],[0,0],[12.5,3.5],[12.5,-2],[7,-10.5],[-2.25,-6.75],[14.75,-2.75],[4.5,5.5],[3.5,13],[7.25,5.25],[13.5,0],[3,8.5],[13.75,6],[11.011,-5.964],[-8.022,-5.125],[-2.25,-2.25],[-2,-6.75],[-11.25,-7.5],[-5.5,5.25],[-13.25,-5.25],[-4.5,-8.25],[-1.75,-10.5],[-8,0.25],[-7.25,0],[-0.75,5.75],[-3.5,5],[-5.25,-6.75],[5.75,-5],[-2,-7.75],[0,0],[8.25,-3.75],[0,-9],[2.75,-1.75],[3.75,-7.5],[0,0],[6.25,-11.25],[-12.25,0],[-8.5,3.25],[0,0],[-17.5,4.75],[-2.75,20.5],[-13.5,11],[-4.5,-4],[5.75,-12.5],[9.25,-8.25],[0.5,-9.75],[5.75,-8.5],[-7.25,-5.75],[-7.5,-7]],"v":[[-228.25,-112.5],[-251.25,-98.25],[-299.5,-65.5],[-298.75,-15.25],[-280.5,13.5],[-271.25,48.25],[-246,66.5],[-241.25,78.75],[-222.75,93.75],[-210.5,104],[-201.5,122.75],[-178.5,135.25],[-165.5,160.75],[-153.25,184.75],[-108.25,184.5],[-91.75,197.5],[-73.25,195.5],[-45.5,179.5],[-43,160.5],[-34,143.75],[-19.5,154],[-12,175.75],[9.75,206.75],[36.25,214.5],[50.5,227.75],[85,233.75],[116.5,242.25],[109.5,220.25],[99,206.5],[86,186.25],[65.25,161],[43.75,168.5],[14.5,162.5],[-6,137],[-10.75,114],[-25.25,98.5],[-57.75,97.25],[-70.5,104.75],[-81.25,119.75],[-105.75,123],[-93,106],[-88,91],[-92.75,63],[-75.5,56.25],[-68.5,33],[-80.75,15.5],[-68.75,0.25],[-53.75,2.25],[-43.25,-4.75],[-61,-38.5],[-84.5,-28.5],[-101.75,-26.5],[-139.5,-33.5],[-165.5,5.75],[-172.5,35.75],[-226.25,36],[-221.25,6.75],[-196,-21.25],[-188.5,-52.25],[-179.25,-71.75],[-179,-92.25],[-189.5,-109.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[6.25,3.75],[11,-10],[-2.5,-7.25],[-3.25,-6.25],[-12.25,4.25],[1.5,9.75]],"o":[[-6.25,-3.75],[-11,10],[2.5,7.25],[3.25,6.25],[12.25,-4.25],[-1.5,-9.75]],"v":[[-134.25,-130],[-155.75,-127],[-166.5,-107.25],[-152.75,-96.25],[-123.75,-77.75],[-113.75,-110.75]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":10.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.5,9],[6,-0.5],[3.5,-3.5],[0,0],[30.5,-0.5],[0,0],[16,-5.5],[2,-24.5],[0,0],[-11.5,-9.5],[-2,-7],[-4.25,-3.75],[-8.25,-7.75],[0.25,-3],[-10.75,-3.25],[0,-4],[-4,-9.25],[-11,-4.5],[0,0],[-7.5,-3],[-11.25,5],[0,0],[-3.5,3],[-2.75,-3.5],[2.5,-7.5],[-1.75,-6.25],[-13.25,-0.5],[0,0],[-8.5,-7.75],[-12.5,-5],[-8,2],[-6.25,9],[6,0],[9,6],[9,18.5],[5.5,-2],[5.5,11],[0.5,14.5],[11.5,0.5],[0,0],[-1,7],[-8,3],[-2,6],[7.5,3.5],[0,0],[-6,23.5],[14,0],[7,-2],[9.5,-0.5],[0,0],[11.5,-18],[0,0],[4,-4.5],[2.5,1.5],[12,6.5],[-1.5,0],[-6,17],[0,0],[-7,6],[0,0],[-3,-14],[-6,2],[-9,6],[-0.5,11.5]],"o":[[-10.5,-9],[-6,0.5],[-3.5,3.5],[0,0],[-30.5,0.5],[0,0],[-16,5.5],[-2,24.5],[0,0],[11.5,9.5],[2,7],[4.25,3.75],[8.25,7.75],[-0.25,3],[10.75,3.25],[0,4],[4,9.25],[11,4.5],[0,0],[7.5,3],[11.25,-5],[0,0],[3.5,-3],[2.75,3.5],[-2.5,7.5],[1.75,6.25],[13.25,0.5],[0,0],[8.5,7.75],[12.5,5],[8,-2],[6.25,-9],[-6,0],[-9,-6],[-9,-18.5],[-5.5,2],[-5.5,-11],[-0.5,-14.5],[-11.5,-0.5],[0,0],[1,-7],[8,-3],[2,-6],[-7.5,-3.5],[0,0],[6,-23.5],[-14,0],[-7,2],[-9.5,0.5],[0,0],[-11.5,18],[0,0],[-4,4.5],[-2.5,-1.5],[-12,-6.5],[1.5,0],[6,-17],[0,0],[7,-6],[0,0],[1.128,5.266],[6,-2],[9,-6],[0.5,-11.5]],"v":[[-116.5,-131.5],[-142.5,-129],[-162,-125],[-175,-108.5],[-209,-117.5],[-245.5,-91],[-274.5,-86.5],[-301.5,-28.5],[-270,22],[-277,59],[-246.5,75],[-226,98],[-203,102.25],[-192.75,121.25],[-171.5,131.5],[-156.25,150.25],[-151.75,165],[-127.75,186.25],[-98,182.75],[-82.5,189],[-51,187.75],[-35.5,159.75],[-37,147.25],[-21,150],[-18.75,165.75],[-10,194.25],[23.25,216.75],[37,211.5],[53.75,227.75],[84,242.5],[110,241.5],[130.5,224.25],[118.75,206.75],[96.5,199.5],[74,165.5],[30,165],[9.5,152],[-9.5,97.5],[-47,80.5],[-60,93.5],[-72.5,79],[-52,69],[-38.5,48],[-52.5,34.5],[-61.5,25.5],[-26,-3.5],[-56,-41],[-82,-27],[-95,-34.5],[-103.5,-30],[-139,-12],[-146,21],[-160.5,35.5],[-179,32.5],[-201.5,28.5],[-212.5,4],[-182,-31],[-186.5,-59],[-171,-61],[-164.5,-84],[-147,-70.5],[-130,-64.5],[-114.5,-73.5],[-106,-103]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":7.2,"s":[0,0],"h":1},{"t":8.4,"s":[100,100],"h":1},{"t":9.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[26.5,0],[6,-7],[17,0],[0,-6.5],[20.5,-6],[-3.5,-26],[-0.5,-10],[-17,-4.75],[-5,-14.25],[-3.5,4.5],[-3,-4.25],[-10,-8.25],[1.5,-2.5],[-19.25,-9.5],[-14.75,-1.75],[-4.25,5.75],[-7.25,-1.25],[0.5,-8.25],[-4.75,-2.5],[-12.5,-11],[0,0],[-10,-9.25],[-14.5,-2.25],[-7.75,3.25],[-4.5,5.25],[3.75,-0.5],[4.5,-0.5],[9,1],[0,13],[15,-5],[17.5,7.5],[0,16],[0,0],[-2.5,8.5],[0,0],[-6.5,26.5],[19,6.5],[15.5,-9.5],[-3.5,-13],[12,-8],[0,0],[12,4],[1.5,6.5],[0,0],[2,13],[-12.5,3],[0,0],[-20.5,0.5],[1,6],[0,12.5]],"o":[[-26.5,0],[-6,7],[-17,0],[0,6.5],[-20.5,6],[3.5,26],[0.5,10],[17,4.75],[5,14.25],[3.5,-4.5],[3,4.25],[10,8.25],[-1.5,2.5],[19.25,9.5],[14.75,1.75],[4.25,-5.75],[7.25,1.25],[-0.5,8.25],[4.75,2.5],[12.5,11],[0,0],[10,9.25],[14.5,2.25],[7.75,-3.25],[4.5,-5.25],[-3.75,0.5],[-4.5,0.5],[-9,-1],[0,-13],[-15,5],[-17.5,-7.5],[0,-16],[0,0],[2.5,-8.5],[0,0],[6.5,-26.5],[-19,-6.5],[-15.5,9.5],[3.5,13],[-12,8],[0,0],[-12,-4],[-1.5,-6.5],[0,0],[-2,-13],[12.5,-3],[0,0],[20.5,-0.5],[-1,-6],[0,-12.5]],"v":[[-132.5,-138],[-177,-118],[-203,-114.5],[-236.5,-87],[-265.5,-75.5],[-306.5,-12.5],[-295.25,43.25],[-267.5,69.75],[-238.5,94.5],[-213.25,108],[-192,109.25],[-161,132.75],[-152.25,151],[-123.5,172.5],[-87.5,182.5],[-41.75,171],[-24.25,157.75],[-20,174.5],[-8.75,190.5],[4,211.75],[39.25,214],[57,231.75],[87.5,244.25],[114.25,234.5],[139.25,209.5],[141.5,195],[126.5,199],[99.5,198],[73.5,173],[44.5,153.5],[12.5,153],[-1,92.5],[-31,76],[-24,55.5],[-32,30.5],[-12,1.5],[-46,-41],[-95,-32],[-128,3.5],[-142,24],[-148,46],[-166.5,36.5],[-193.5,26],[-201.5,6.5],[-180.5,-19.5],[-174.5,-44],[-159.5,-60.5],[-128,-57],[-98,-80.5],[-102.5,-106.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":6,"s":[0,0],"h":1},{"t":7.2,"s":[100,100],"h":1},{"t":8.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[9.5,-3.25],[17.5,-1.5],[0,0],[18.5,0],[12.75,-4],[3.75,-2.25],[23.25,-7],[0,0],[-11.5,-43.25],[-6.25,-0.5],[-2,-12.75],[-15.5,-0.25],[-7,-2.5],[-2.5,-9.25],[-5.5,-7],[-7,-7.75],[-18.5,-1],[-11,6.5],[0,0],[-0.75,-7.25],[-18.25,-10.25],[-22.75,-5.25],[-2,-9],[-15.75,0],[-2.25,5.25],[-7.25,14],[5.75,-1.5],[4.25,0],[1,12],[16.75,14.5],[2.5,-4],[8.25,8.75],[0,0],[8.25,20.75],[7.75,-1.25],[-1.5,3.75],[3.25,6.75],[-7.25,5.5],[2.25,7],[5.5,2],[0,0],[18,-6],[5.75,-4.5],[26.25,-9.75],[0,0],[16.25,-8],[7,8.25],[0,0],[-9.5,13.25],[0,0],[-8,11],[-14,-4.5],[-12,4.25],[6.75,8],[0.75,15.25]],"o":[[-9.5,3.25],[-17.5,1.5],[0,0],[-18.5,0],[-12.75,4],[-3.75,2.25],[-23.25,7],[0,0],[11.5,43.25],[6.25,0.5],[2,12.75],[15.5,0.25],[7,2.5],[2.5,9.25],[5.5,7],[7,7.75],[18.5,1],[11,-6.5],[0,0],[0.75,7.25],[18.25,10.25],[22.75,5.25],[2,9],[15.75,0],[2.25,-5.25],[7.25,-14],[-5.75,1.5],[-4.25,0],[-1,-12],[-16.75,-14.5],[-2.5,4],[-8.25,-8.75],[0,0],[-8.25,-20.75],[-7.75,1.25],[1.5,-3.75],[-3.25,-6.75],[7.25,-5.5],[-2.25,-7],[-5.5,-2],[0,0],[-18,6],[-5.75,4.5],[-26.25,9.75],[0,0],[-16.25,8],[-7,-8.25],[0,0],[9.5,-13.25],[0,0],[8,-11],[14,4.5],[12,-4.25],[-6.75,-8],[-0.75,-15.25]],"v":[[-134.25,-126.75],[-164.5,-121.75],[-179.25,-98.75],[-201.75,-107.5],[-227.5,-90.5],[-244.75,-70],[-269.5,-69],[-290.25,-13],[-287.25,43.75],[-244.5,82.5],[-239,110],[-198.25,127.25],[-164.75,105.5],[-160.75,126.75],[-124.5,144.75],[-115,158.75],[-77.25,174],[-45.5,166.5],[-19.25,151],[-20,167.5],[-9.5,195.75],[31.25,201.75],[43.25,227.75],[83.75,243.5],[115.75,226],[142.25,184],[111.25,193.5],[97.5,197],[80.25,182.25],[66,142],[31.5,144.75],[13.5,146.25],[1.25,121.5],[8,92.75],[-17.25,74],[-20.25,60],[-22.75,38.25],[-10,23],[-5.5,-3.25],[-29.5,-23.5],[-30,-33.25],[-56.25,-36.25],[-77,-20],[-113.5,-12.75],[-124.75,24.75],[-140.75,44],[-178.25,33],[-186.25,9.5],[-161.5,-9.5],[-166.5,-35.75],[-151.75,-48],[-123.75,-51],[-99.75,-51.5],[-88,-83.25],[-100.5,-113.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":7.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[18,-2.25],[2,-8.75],[0,0],[25.75,-5.5],[0,0],[1,-2.75],[6.5,-5.75],[0.25,-16.75],[0,0],[-21.25,-36.75],[0,0],[-23.25,-14],[0,0],[-7,-3.75],[0,0],[-18.5,0.5],[0,0],[-15.25,-13.25],[-23.5,6.75],[-14.25,-3.5],[0.5,-7.75],[-13.75,1.75],[-11.25,-1.25],[2.5,-7],[-14,-5],[-3.25,9.25],[-15.75,10.5],[0,0],[4.25,-0.75],[10.75,-2.5],[0,0],[12.5,4],[-2.25,3.5],[16,8.25],[0,0],[7.75,-0.25],[-3.5,10.25],[12.25,17.75],[0,0],[-6.75,6.5],[0,0],[35.959,26.253],[0,0],[16.5,-24.25],[0,0],[8,0.25],[0.467,6.07],[0,0],[3.25,22],[-6.25,3.25],[0,0],[-7.75,5.5],[0,10.5],[8.5,10.5]],"o":[[-18,2.25],[-2,8.75],[0,0],[-25.75,5.5],[0,0],[-1,2.75],[-6.5,5.75],[-0.25,16.75],[0,0],[21.25,36.75],[0,0],[23.25,14],[0,0],[7,3.75],[0,0],[18.5,-0.5],[0,0],[15.25,13.25],[23.5,-6.75],[14.25,3.5],[-0.5,7.75],[13.75,-1.75],[11.25,1.25],[-2.5,7],[14,5],[3.25,-9.25],[18.555,-12.37],[0.25,-1.25],[-20.879,3.685],[-10.75,2.5],[0,0],[-12.5,-4],[2.25,-3.5],[-16,-8.25],[0,0],[-7.75,0.25],[3.5,-10.25],[-12.25,-17.75],[0,0],[6.75,-6.5],[0,0],[-56.5,-41.25],[0,0],[-16.5,24.25],[0,0],[-8,-0.25],[-1.75,-22.75],[0,0],[-3.25,-22],[6.25,-3.25],[0,0],[7.75,-5.5],[0,-10.5],[-8.5,-10.5]],"v":[[-138,-120],[-174.25,-101.25],[-176.5,-84],[-213,-90],[-233,-69.25],[-240.25,-65],[-256.25,-63],[-276,-31],[-274,-10.5],[-279.5,48],[-238.75,81],[-225.75,113],[-192.25,114],[-188.5,124.75],[-172.25,127.5],[-156.75,138],[-136,130.5],[-117,153.25],[-54,174.75],[-19.5,153.25],[-11.5,173.75],[3.5,186.25],[30,183.75],[43,202.25],[68.75,231.25],[108.25,212.25],[132.25,179.5],[141.25,122.75],[134.25,153.75],[113,172.75],[99,188],[88.75,172.25],[79.25,156.25],[75.25,120.5],[47.5,129.25],[31,131],[18.75,108.25],[25.5,69.5],[-6.75,55],[-14,44.75],[-3.75,42.5],[-3.5,-16.25],[-76.25,-7.5],[-117.75,8.5],[-133,63.75],[-144.75,60.5],[-145.25,49.25],[-168,21.75],[-149.25,-18.5],[-137.5,-42.25],[-124.25,-43],[-100.25,-35.75],[-78.75,-70.5],[-105.75,-109.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[26.25,-5],[2.25,-10.25],[0,0],[5.25,-9.75],[10.5,-6],[1.75,-28],[0,0],[-41.25,-16.25],[-11.25,5.75],[0,-16.75],[-46.25,-16.25],[0,0],[-11.75,-3.75],[0,0],[-3,-3.75],[0,0],[-5,-11.25],[-15.5,9.25],[0,0],[-3.75,21.25],[0,0],[-1.25,5.75],[-4.5,3.25],[7.5,2],[1,-11],[0,0],[5,-4.75],[0,0],[15.5,9.75],[0,0],[2.75,1.25],[0,0],[18.25,10.25],[0,0],[6.5,6.5],[-6.5,2],[5.25,13],[25.75,2.25],[9.25,-14.25],[7,-7.5],[13,-0.5],[-4.75,9.5],[-0.75,13],[-5.25,7.5],[-3.5,10.5],[9.25,10.5]],"o":[[-26.25,5],[-2.25,10.25],[0,0],[-5.25,9.75],[-10.5,6],[-1.75,28],[0,0],[41.25,16.25],[11.25,-5.75],[0,16.75],[46.25,16.25],[0,0],[11.75,3.75],[0,0],[3,3.75],[0,0],[5,11.25],[15.5,-9.25],[0,0],[3.75,-21.25],[0,0],[1.25,-5.75],[4.5,-3.25],[-7.5,-2],[-1,11],[0,0],[-5,4.75],[0,0],[-15.5,-9.75],[0,0],[-2.75,-1.25],[0,0],[-18.25,-10.25],[0,0],[-6.5,-6.5],[6.5,-2],[-5.25,-13],[-25.75,-2.25],[-9.25,14.25],[-7,7.5],[-13,0.5],[4.75,-9.5],[0.75,-13],[5.25,-7.5],[3.5,-10.5],[-9.25,-10.5]],"v":[[-120,-103.5],[-166.5,-76.75],[-174,-66.75],[-195.5,-55.25],[-215.75,-35],[-231.75,21.5],[-209,57.25],[-173.75,109.5],[-110.25,102.25],[-89.25,117],[-51.5,179],[26.5,149.75],[41.25,161.25],[62,159.5],[61.75,164.75],[70,168.25],[64.25,188.25],[110,198.25],[125.75,175.75],[149,155],[139,123.25],[144,117.5],[142.75,101.75],[145.5,93.5],[127,107.5],[129,118.75],[116.5,125.25],[106.25,133.25],[95.25,103.5],[61,106.25],[58,100.5],[50.5,103.25],[47.75,70.25],[21.75,60.75],[19.25,44.75],[19.5,35],[24.25,16.5],[-15,-13.75],[-64,4],[-88,39.25],[-109.75,53.25],[-135.25,41.25],[-112.75,8.5],[-106.25,-23.75],[-80.25,-42.25],[-79,-83.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":1,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[20.665,-5.933],[0,0],[5.459,-28.097],[0,0],[-4.435,-3.669],[0,0],[-4.582,-11.429],[-9.681,2.519],[0,0],[-6.875,-5.829],[-0.757,-0.823],[-7.894,3.307],[0,0],[-24.034,3.258],[-5.001,9.759],[-9.168,8.431],[0,0],[9.159,19.219],[8.451,2.256],[0,0],[4.41,11.739],[0,0]],"o":[[-20.665,5.933],[0,0],[-5.459,28.097],[0,0],[4.435,3.669],[0,0],[4.582,11.429],[9.681,-2.519],[0,0],[6.875,5.829],[0.757,0.823],[7.894,-3.307],[0,0],[24.034,-3.258],[5.001,-9.759],[8.642,-7.947],[0,0],[-9.159,-19.219],[-8.451,-2.256],[0,0],[-4.41,-11.739],[0,0]],"v":[[-2.431,18.417],[-17.858,38.972],[-43.163,68.606],[-29.189,93.725],[-26.259,103.027],[-16.814,104.217],[-12.492,127.426],[11.358,141.647],[29.83,138.945],[33.52,150.89],[50.221,160.141],[61.593,164.419],[75.154,161.826],[97.162,155.786],[121.566,131.932],[128.358,120.447],[136.511,104.22],[100.491,103.313],[81.983,76.895],[63.649,80.077],[58.516,40.455],[21.06,20.517]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":1.2,"s":[0,0],"h":1},{"t":2.4,"s":[100,100],"h":1},{"t":3.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[9.774,-0.796],[0,0],[7.841,-8.464],[2.677,-3.235],[-13.747,-6.663],[-2.336,-0.493],[0,0],[-6.349,5.276],[-5.89,1.825],[0,0],[15.633,1.442],[6.146,2.729]],"o":[[-6.82,0.556],[0,0],[-7.841,8.464],[-14.355,17.35],[13.747,6.663],[17.347,3.661],[0,0],[6.349,-5.276],[5.89,-1.825],[0,0],[-13.921,-1.284],[-3.833,-1.702]],"v":[[85.007,94.865],[73.476,96.058],[50.898,95.166],[51.411,110.421],[57.603,155.667],[87.234,148.858],[106.067,131.593],[118.908,126.488],[131.563,113.411],[140.081,102.766],[121.19,106.026],[106.137,96.611]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":0,"s":[0,0],"h":1},{"t":1.2,"s":[100,100],"h":1},{"t":2.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 16","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.058,2.203],[5.331,-5.104],[0,0],[0.725,-7.289],[0,0],[-1.674,-2.072],[0,0],[-7.973,3.836],[0,0],[-5.784,3.46],[0.778,2.673],[0,0],[-0.026,1.705],[4.025,4.496]],"o":[[-2.988,-0.932],[-5.349,5.122],[0,0],[-0.979,9.839],[0,0],[1.674,2.072],[0,0],[7.973,-3.836],[0,0],[5.784,-3.46],[-0.778,-2.673],[0,0],[0.026,-1.705],[-4.025,-4.496]],"v":[[116.82,90.994],[102.825,96.035],[98.322,104.973],[91.509,113.329],[93.516,124.89],[95.302,128.602],[100.132,129.494],[109.764,128.754],[117.416,123.548],[123.428,123.026],[129.534,116.364],[136.235,110.94],[133.227,106.8],[128.862,97.728]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":-1.2,"s":[0,0],"h":1},{"t":0,"s":[100,100],"h":1},{"t":1.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 17","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"op","nm":"Offset Paths 1","a":{"a":0,"k":1,"ix":1},"lj":1,"ml":{"a":0,"k":4,"ix":3},"ix":18,"mn":"ADBE Vector Filter - Offset","hd":false},{"ty":"fl","c":{"a":0,"k":[0.227450980392,0.274509803922,0.305882352941,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":20.4,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 3","parent":3,"tt":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.875,-1.125],[2.313,-3.563],[-1.125,-2.625],[3.563,-0.188],[0,1.563],[1.313,2],[-2.438,-4],[-2.5,0.75],[-0.625,3.438],[-5.063,2.938],[-2.313,4.625]],"o":[[0,0],[-5.875,1.125],[-2.313,3.563],[1.125,2.625],[-3.563,0.188],[0,-1.563],[-1.313,-2],[2.438,4],[2.5,-0.75],[0.625,-3.438],[5.063,-2.938],[2.313,-4.625]],"v":[[-269.813,-93.375],[-277.75,-85.063],[-292,-81.063],[-293.25,-68.375],[-295.5,-60.875],[-301.375,-68.25],[-305,-77.75],[-303.188,-62.313],[-296.063,-56.563],[-288.563,-64],[-281.5,-71.875],[-272.063,-79.438]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":18,"s":[0,0],"h":1},{"t":19.2,"s":[100,100],"h":1},{"t":20.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 17","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.5,0.5],[-4.25,-12.75],[-3.25,-0.5],[-7.5,6],[-3.75,4.25],[-1.5,7.75],[0,0],[7.25,-1.25],[0.75,-4],[-2,-3.5],[2,-3.75],[5,2.5],[-2.75,7.75],[-2.5,7.5]],"o":[[-1.5,-0.5],[4.25,12.75],[3.25,0.5],[7.5,-6],[3.75,-4.25],[1.5,-7.75],[0,0],[-7.25,1.25],[-0.75,4],[2,3.5],[-2,3.75],[-5,-2.5],[2.75,-7.75],[2.5,-7.5]],"v":[[-298.75,-108.75],[-319,-66.75],[-302,-48.25],[-286,-52],[-271.5,-67],[-259.75,-88.25],[-258.75,-99.5],[-272.5,-89],[-291.25,-83.5],[-293.25,-66.75],[-290.25,-56.5],[-308,-56.5],[-310.5,-71.75],[-300.75,-91.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":19.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 16","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.75,1.5],[10,-16.5],[-9.5,-19.75],[-17.5,-5],[-3,19.25],[0,10.75],[0,0],[9,-1.75],[-2.75,-9.75],[-6.5,-4.25],[0.25,-8.75],[8,2.25],[5.5,6.75],[-1.75,12],[-0.75,0.5],[-3.75,6.5],[-3.25,5]],"o":[[2.75,-1.5],[-10,16.5],[9.5,19.75],[17.5,5],[3,-19.25],[0,-10.75],[0,0],[-9,1.75],[2.75,9.75],[6.5,4.25],[-0.25,8.75],[-8,-2.25],[-5.5,-6.75],[1.75,-12],[0.75,-0.5],[3.75,-6.5],[3.25,-5]],"v":[[-286.75,-118.75],[-324,-103.75],[-334.5,-43.5],[-295.25,-6.25],[-251.25,-11.5],[-248,-52.5],[-249.75,-95.5],[-277,-81.5],[-292.75,-65.25],[-275.5,-53.25],[-264.75,-35.5],[-289.5,-16.75],[-308,-36.75],[-311.5,-66.25],[-308,-88.25],[-300,-93.5],[-294,-106]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":18,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 15","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.625,-4],[-5.875,-9.375],[-0.375,-0.75],[-3.875,0.25],[-1,8.25],[-7.125,12.25],[0,0],[3.625,-0.75],[-0.125,-8.25],[2.25,-1.875],[2.25,1.125],[-1.75,-5.25],[-3,-3.5],[1,-8.25],[6.5,0.125],[3,4.875],[-4.25,6.125],[4.75,6.125],[-1.375,5.875],[-3.75,2.25],[-0.625,1.75]],"o":[[-5.625,4],[5.875,9.375],[0.375,0.75],[3.875,-0.25],[1,-8.25],[7.125,-12.25],[0,0],[-3.625,0.75],[0.125,8.25],[-2.25,1.875],[-2.25,-1.125],[1.75,5.25],[3,3.5],[-1,8.25],[-6.5,-0.125],[-3,-4.875],[4.25,-6.125],[-4.75,-6.125],[1.375,-5.875],[3.75,-2.25],[0.625,-1.75]],"v":[[-317,-108.5],[-319.875,-48.875],[-300.75,-12.5],[-273.5,-4.625],[-254.75,-25.75],[-258.125,-59.875],[-245,-95.875],[-254.5,-81.5],[-262.625,-76],[-264.125,-60],[-275.375,-56.375],[-279.875,-46.875],[-271.875,-36.125],[-262.25,-21.75],[-274.5,-11.375],[-298.625,-18.75],[-297.875,-37.625],[-295.25,-58.375],[-309.125,-86],[-301.125,-97.25],[-291.25,-107.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[6.625,0.875],[5.875,-4.125],[0,0],[-2,-1.75],[-11.25,1.75],[1.25,4.375]],"o":[[-6.625,-0.875],[-5.875,4.125],[0,0],[2,1.75],[11.25,-1.75],[-1.25,-4.375]],"v":[[64.875,199.5],[53,207.625],[39.625,208],[44.75,215],[74.5,216],[78.625,206.625]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[6.875,-1.25],[0,0],[-4,-8.125],[-3.625,5.75]],"o":[[0,0],[-6.875,1.25],[0,0],[4,8.125],[3.625,-5.75]],"v":[[-117.5,161.125],[-119.625,171.5],[-127.625,163.375],[-127.375,180.25],[-105,180.25]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[3.375,-2.625],[2.125,0.5],[2.625,-4],[4.625,-1.25],[0,0],[-1.625,-3.875],[-3.875,0],[-12,4.375]],"o":[[0,0],[-3.375,2.625],[-2.125,-0.5],[-2.625,4],[-4.625,1.25],[0,0],[1.625,3.875],[3.875,0],[12,-4.375]],"v":[[-115.625,-49.25],[-121.125,-42],[-127.5,-42],[-134.625,-37.625],[-141,-29.75],[-150,-38.875],[-146.75,-25.75],[-136.75,-17.625],[-117.125,-36.375]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[4.375,-1.25],[0,-4.125],[5.75,0],[1.375,-3.125],[1.625,-5.875],[9.625,1.5],[0,0],[-5.375,-4.5],[-4.25,1.125],[-4.375,7.125]],"o":[[-4.375,1.25],[0,4.125],[-5.75,0],[-1.375,3.125],[-1.625,5.875],[-9.625,-1.5],[0,0],[5.375,4.5],[4.25,-1.125],[4.375,-7.125]],"v":[[-169.25,43],[-171.25,51.625],[-178.625,55.375],[-187,61.5],[-189.625,76.875],[-204.875,82.875],[-216.5,61.375],[-215.625,89.375],[-198,93],[-168.875,81]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":14.4,"s":[0,0],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 14","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.125,-4.375],[-5,-12.5],[-15.5,0.375],[1.125,2.125],[-1.25,2.5],[2.375,1.5],[3,-1.25],[5.375,-0.125],[2.875,-2],[6,5],[1.125,8.75]],"o":[[0,0],[-3.125,4.375],[5,12.5],[15.5,-0.375],[-1.125,-2.125],[1.25,-2.5],[-2.375,-1.5],[-3,1.25],[-5.375,0.125],[-2.875,2],[-6,-5],[-1.125,-8.75]],"v":[[-136.75,140.625],[-141.25,150.75],[-145.5,189.125],[-115.125,206.75],[-70.375,187.5],[-68.5,181.625],[-70.625,174],[-80.875,175.875],[-97.375,174.875],[-109.625,179.125],[-128.25,176.75],[-130.75,149.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-2.125,-3.875],[-15.5,-7.625],[0,0],[2.5,2.5],[0,2.875],[1.625,3.625],[2.75,5.25],[5.75,-4.5],[11.375,3]],"o":[[0,0],[2.125,3.875],[15.5,7.625],[0,0],[-2.5,-2.5],[0,-2.875],[-1.625,-3.625],[-2.75,-5.25],[-5.75,4.5],[-11.375,-3]],"v":[[15.5,190.125],[14.75,201.125],[36.125,212.375],[95.5,226.25],[91.25,221.125],[86.375,215.5],[81.5,210],[72.625,201.875],[58.125,203.625],[33.25,203]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[9.25,0],[3.088,-6.331],[0,0],[-3.875,7.375],[0,0],[-0.375,4.375],[0,0],[-10.125,-3.875],[1,-3.5],[-2.125,0],[-6,0],[-0.75,-11],[2,-2.125],[4.875,0.375],[0.045,-1.891],[0,0],[-3.75,0.375],[-1.875,1.375],[-4.25,6.5],[0.75,5.125],[8.5,1.125]],"o":[[-9.25,0],[-5,10.25],[0,0],[3.875,-7.375],[0,0],[0.801,-9.341],[0,0],[10.125,3.875],[-1,3.5],[2.125,0],[6,0],[0.75,11],[-2,2.125],[-4.875,-0.375],[-0.125,5.25],[0,0],[3.75,-0.375],[1.875,-1.375],[4.25,-6.5],[-0.75,-5.125],[-8.5,-1.125]],"v":[[-143.5,-71.75],[-162.5,-41.25],[-155.625,-21.375],[-154.125,-40.5],[-142.375,-46.375],[-146.875,-53.5],[-140.875,-64.375],[-129,-65],[-122.625,-53.25],[-116.5,-47.875],[-106.375,-52.625],[-93.75,-43.25],[-100.125,-29.25],[-116.375,-25.75],[-125,-25.75],[-135.375,-15.625],[-121,-16.625],[-106.875,-18.625],[-90.75,-30.375],[-87.875,-45.25],[-113.625,-64.125]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[4.625,-1.5],[0,0],[6.5,-5.75],[-2.125,-6.875],[6.125,-2.125],[-5.375,-4.25],[-0.875,-2.875]],"o":[[0,0],[-4.625,1.5],[0,0],[-6.5,5.75],[2.125,6.875],[-6.125,2.125],[5.375,4.25],[0.875,2.875]],"v":[[-228.25,-86.375],[-240,-79.875],[-251.625,-81.125],[-252.875,-68.625],[-261,-57.75],[-262,-45.75],[-265.875,-32.375],[-256.125,-21.25]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[3.25,-0.25],[7.75,-6.375],[4.375,-4.5],[2.625,-10.5],[-8.875,-2.875],[-2.625,3.125],[1.75,-0.125],[2.875,4.25],[4.375,2.125],[0.75,5],[5.375,1.125],[4.875,2.375],[4.25,2.75],[-6,1.875],[-0.25,3.375],[-2.75,2.25],[0,0],[-3.125,6.5],[-4.875,-1.5],[-8.5,5.125]],"o":[[0,0],[-3.25,0.25],[-7.75,6.375],[-4.375,4.5],[-2.625,10.5],[8.875,2.875],[2.625,-3.125],[-1.75,0.125],[-2.875,-4.25],[-4.375,-2.125],[-0.75,-5],[-5.375,-1.125],[-4.875,-2.375],[-4.25,-2.75],[6,-1.875],[0.25,-3.375],[2.75,-2.25],[0,0],[3.125,-6.5],[4.875,1.5],[8.5,-5.125]],"v":[[-252,-111.875],[-275.125,-108.625],[-307.25,-97],[-323.375,-85.5],[-335.625,-42.125],[-311.125,-2.625],[-259,-2],[-270.625,-5],[-282,-9.25],[-295.25,-13.75],[-300.625,-23.25],[-308.625,-30.375],[-321.125,-31.75],[-329.625,-32.625],[-326.25,-49],[-318.625,-56.25],[-311.375,-66.5],[-296.125,-66.25],[-296.875,-85],[-273.75,-97.125],[-257.375,-97.875]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[2.75,-3.375],[-2.625,-2.875],[0.192,-3.208],[3.625,-1.125],[3.5,-1],[-3.5,2.875],[-3.5,8.375],[0,7.625]],"o":[[0,0],[-2.75,3.375],[2.625,2.875],[-0.375,6.25],[-3.625,1.125],[-3.5,1],[3.5,-2.875],[3.5,-8.375],[0,-7.625]],"v":[[-153.625,52.125],[-159.5,58.375],[-162.625,69.875],[-159.5,80.5],[-166.875,92.25],[-175.75,99.125],[-163.25,98.75],[-153.75,87.75],[-147.5,65]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[5.375,-2.375],[1.75,-7.5],[-4.625,-13.875],[-10.5,-3.5],[-0.375,3],[6.625,-0.125],[1,1.25],[3.125,-0.5],[0.875,4.625],[-2,5.125],[-2.75,2.375],[0,0],[1.25,7.375]],"o":[[0,0],[-5.375,2.375],[-1.75,7.5],[4.625,13.875],[10.5,3.5],[0.375,-3],[-6.625,0.125],[-1,-1.25],[-3.125,0.5],[-0.875,-4.625],[2,-5.125],[2.75,-2.375],[0,0],[-1.25,-7.375]],"v":[[-192.625,35.5],[-209.25,53.125],[-224,65.375],[-223.625,96.875],[-205.75,108.625],[-168.125,102.625],[-181.375,96.375],[-191.625,96.5],[-202.5,93],[-212,89.75],[-214.875,73.125],[-208.125,65.375],[-189.125,63],[-195.75,52]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0,0],[0,-3.875],[-7.25,-8],[-0.875,1.25],[1.25,3.625],[0.375,0.5],[4.125,1.625]],"o":[[0,0],[0,3.875],[7.25,8],[0.875,-1.25],[-1.25,-3.625],[-0.375,-0.5],[-4.125,-1.625]],"v":[[-150,110.5],[-155.25,119],[-144.875,131.875],[-136.375,136.5],[-138.125,129],[-140.5,121.25],[-146.5,115.75]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":15.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 13","np":8,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[20.25,-1],[11.75,-30.75],[-19.75,-18.75],[-6.25,7.5],[-1.75,10],[3.25,-0.75],[1.5,3.75],[1,-7],[-2.5,-2.5],[4.75,-2.25],[3.5,-4],[-2.25,-5],[0.25,-4.25],[9,-2],[2.75,9.5],[7.75,11.75],[1.75,12.25],[-17.75,1],[-5.25,10.25]],"o":[[-20.25,1],[-11.75,30.75],[19.75,18.75],[6.25,-7.5],[1.75,-10],[-3.25,0.75],[-1.5,-3.75],[-1,7],[2.5,2.5],[-4.75,2.25],[-3.5,4],[2.25,5],[-0.25,4.25],[-9,2],[-2.75,-9.5],[-7.75,-11.75],[-1.75,-12.25],[17.75,-1],[5.25,-10.25]],"v":[[-259.5,-111],[-335,-61.75],[-306.5,14.75],[-255.25,16],[-236.25,-16.75],[-216.75,-66.75],[-228.75,-70.5],[-236.75,-66.25],[-233.25,-48.5],[-234.25,-38.75],[-252,-37.75],[-260,-17],[-253.5,1.5],[-267,17.25],[-296.5,9.25],[-300.25,-13.25],[-320.75,-40],[-291.5,-77],[-249,-96.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-1,-12.625],[-12.5,-7.375],[-13.75,-0.625],[4.5,-0.875],[4.375,2.375],[1.875,3.375],[2.375,1.875],[-2.375,7.875],[5.875,1],[10.375,-5.25],[6.625,12.875]],"o":[[0,0],[1,12.625],[12.5,7.375],[13.75,0.625],[-4.5,0.875],[-4.375,-2.375],[-1.875,-3.375],[-2.375,-1.875],[2.375,-7.875],[-5.875,-1],[-10.375,5.25],[-6.625,-12.875]],"v":[[3.625,177.375],[2.375,196.875],[30.5,227.625],[90,244],[103.5,235.25],[96.375,229],[87.875,228.875],[76.25,216],[75.75,204.25],[62.75,200.125],[39,208.75],[10,199.5]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[2.688,0.5],[2.813,-7.75],[0,0],[-2.125,0.813],[-6.5,1.813],[-1.875,6.375],[0.125,-1.813],[2.063,-1.313],[1.25,3.25]],"o":[[-2.688,-0.5],[-2.813,7.75],[0,0],[2.125,-0.813],[6.5,-1.813],[1.875,-6.375],[-0.125,1.813],[-2.063,1.313],[-1.25,-3.25]],"v":[[-50.125,121.813],[-59.875,130.5],[-57.5,150.063],[-54.25,144.875],[-40.25,141.25],[-21.75,129.125],[-26.375,126.75],[-31.188,131.063],[-43.5,128.188]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[1.5,-2],[-3.25,-1.563],[-2.75,-1.75],[3.563,5.625]],"o":[[0,0],[-1.5,2],[3.25,1.563],[2.75,1.75],[-3.563,-5.625]],"v":[[-134.438,122.375],[-135.063,128.813],[-136.313,137.688],[-127.5,140.438],[-127.875,134.688]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0.5,0],[3.375,-9.75],[-3.5,-7.125],[-10.375,0],[-5.125,0.125],[1.125,5.25],[0,-2.125],[2.875,-3.875],[1.875,1.875],[4.25,0],[5.5,1.875],[2.75,-1.5],[6.25,-5.75],[0,5],[-4.75,1.75],[2.75,4]],"o":[[-0.5,0],[-3.375,9.75],[3.5,7.125],[10.375,0],[5.125,-0.125],[-1.125,-5.25],[0,2.125],[-2.875,3.875],[-1.875,-1.875],[-4.25,0],[-5.5,-1.875],[-2.75,1.5],[-6.25,5.75],[0,-5],[4.75,-1.75],[-2.75,-4]],"v":[[-141,140.125],[-145,161.75],[-139.875,189],[-120.25,197],[-64.25,193.125],[-48.375,166.875],[-54.125,169.75],[-58.5,180.875],[-68.75,177.75],[-84.125,175.75],[-93.875,175.875],[-108.125,176.75],[-119.875,186.75],[-135.125,178.375],[-125.625,162.875],[-123.375,151]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[-4.375,-18.625],[12.375,-8.875],[0,0],[-7.625,2.625],[-8.375,5.5],[1.5,6],[-0.375,6.125]],"o":[[0,0],[2.558,10.89],[-12.375,8.875],[0,0],[7.625,-2.625],[8.375,-5.5],[-1.5,-6],[0.375,-6.125]],"v":[[-187.375,26.5],[-196.875,40.5],[-215.375,57],[-214.75,69.25],[-208.875,63.625],[-191.5,61.5],[-188.5,41.75],[-192,32.625]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[9.125,-2],[-2,-9.25],[9.25,-3.125],[3.625,4.875],[3.625,7.25],[0,0],[-12.75,-14.625],[-13,5.125],[-0.75,10.625]],"o":[[0,0],[-9.125,2],[2,9.25],[-9.25,3.125],[-3.625,-4.875],[-3.625,-7.25],[0,0],[12.75,14.625],[13,-5.125],[0.75,-10.625]],"v":[[-135.125,55],[-145.625,62.625],[-159.875,83.25],[-167.875,105.125],[-192.5,100.875],[-213.125,91.375],[-216.5,68.625],[-215.25,106.75],[-164.75,122.25],[-142.5,87.625]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0,0],[4.875,-3.5],[0,-10.375],[-6.25,-0.125],[-8.75,2.875],[0,2.875],[0.625,-1.375],[0.5,2.125],[1.75,-1.125],[5,6],[3,-3.875],[11,1.375],[1.875,0.625],[1.375,-5.625],[6.25,10],[-3.625,3],[-1,3.125]],"o":[[0,0],[-4.875,3.5],[0,10.375],[6.25,0.125],[8.75,-2.875],[0,-2.875],[-0.625,1.375],[-0.5,-2.125],[-1.75,1.125],[-5,-6],[-3,3.875],[-11,-1.375],[-1.875,-0.625],[-1.375,5.625],[-6.25,-10],[3.625,-3],[1,-3.125]],"v":[[-145.5,-61.625],[-161.25,-44.875],[-172.25,-10.25],[-157.5,9.125],[-111,4.25],[-63.375,-21.375],[-68.5,-27.875],[-72.875,-25.625],[-77.75,-26.875],[-81.875,-25.375],[-90.625,-18],[-111.375,-11.875],[-124.125,-22],[-131.375,-14.5],[-156.125,-11.125],[-150.5,-40.5],[-144.375,-50.375]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":12,"s":[0,0],"h":1},{"t":13.2,"s":[100,100],"h":1},{"t":14.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 12","np":8,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.5,3.375],[3.125,-3],[-3.875,-6.25],[-3.875,-0.125],[3.125,0.5],[3.625,-1.25],[1.125,6.5]],"o":[[-1.5,-3.375],[-3.125,3],[3.875,6.25],[3.875,0.125],[-3.125,-0.5],[-3.625,1.25],[-1.125,-6.5]],"v":[[-140.625,-125],[-157.625,-119.875],[-157.125,-102.375],[-137.875,-92],[-131.375,-106.5],[-139,-103.5],[-147,-111.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[14.5,0.75],[11.25,1.5],[0,0],[-3.5,-10],[2.25,-4],[5,-1.5],[-1.5,-3],[-1,-0.5],[3,-2],[7,0],[-1,-2.25],[4.5,1],[0.25,7.5],[-3.25,7.75],[8.75,3],[-9.5,5.75],[-2.75,6.75],[-12.25,-0.25],[0,0],[-16.25,3]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-9.438,-0.488],[-13.913,-1.855],[0,0],[3.5,10],[-2.25,4],[-5,1.5],[1.5,3],[1,0.5],[-3,2],[-7,0],[1,2.25],[-4.5,-1],[-0.25,-7.5],[3.25,-7.75],[-8.75,-3],[9.5,-5.75],[2.75,-6.75],[12.25,0.25],[0,0],[16.25,-3]],"v":[[-258.5,-112.75],[-325.75,-71.25],[-325.75,-10.25],[-305.5,27],[-275.75,34],[-243.25,1.25],[-193.25,-75.5],[-203,-99.25],[-216.25,-74.5],[-231.5,-58.25],[-244,-61.25],[-240.25,-47.25],[-245.75,-33.75],[-261.75,-30],[-265.5,-11.5],[-256,-2],[-256.5,9.25],[-270.5,12.5],[-281.25,19.75],[-279.75,28.5],[-305.75,8.5],[-293.75,-5.5],[-302,-25.25],[-306.75,-69.5],[-284.75,-78.25],[-264.25,-90],[-249.5,-82.5],[-235.5,-111.25]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[11.676,-39.123],[-3.59,-2.094],[0,-3.5],[0,0],[0,0],[0,0],[0,0],[-0.25,3.25],[-1.5,-18.375],[4.375,4.125],[4,0.625],[3,-2],[5.25,-1.25],[3.625,-1.25],[2.375,6.125],[-7.5,2.75],[0,0],[3,3.5],[-0.375,5.75],[4.625,2.25],[8.125,-3.125],[5.125,1.375],[3.125,2.25],[2.25,5.75],[-2.5,4.625],[2,5.625],[6.25,-0.75],[2.625,6],[1.625,7.875],[-5.25,-2.125],[-1.5,-4.25],[-5.375,3],[2.5,8.875],[-1,3],[-6,2.25],[-3.75,0],[-4.625,3.75],[0,0],[6.75,5],[-1.25,2.5],[-6.375,2],[-2,0.875],[-2.625,-0.875],[0.375,-4.875],[0,0],[-2.5,4.875],[-10.5,1.125],[-1,-3.375],[0,0],[-2.75,1.5],[-7.25,-1.25],[0.5,5.75],[2.125,-3.75],[1.125,5.125],[-0.125,-3.25],[2.75,-2.375],[5.75,-2.75],[5,-2.625],[8.5,-1],[0.875,-3.875],[-2.875,-0.375],[-1.125,-0.625],[-1,-2.5],[4.25,-4.375],[2.125,-4.125],[4.625,-1.875],[-0.75,-5.875],[-4.375,-3.125],[0,0],[-1.375,-5.375],[-2.75,-4.375],[-8,0.5],[-8.375,-3.125],[-2.625,0.875],[0.25,3.75],[6.25,3.125],[1,14],[-10.875,3.625],[0.75,-2.75],[0,-3.875],[-7.25,0],[-4.125,-2],[-1.25,-8.625],[-1.75,-5],[-4.25,-3.625],[-2.75,3.875],[-11.5,5.75],[-4.375,-6.25],[-9.125,-3.125],[0.625,-2.75],[3.125,-0.5],[4.75,-3.25],[4.75,4.375],[-0.125,4.25],[10.75,6.125],[3.125,-4.625],[5,-0.125],[1.25,-0.625],[5.875,8.875],[-1.25,1.125],[1.875,5],[0.375,5.875],[4.625,1.25],[0.25,4.625],[8.75,-7.375],[-1.41,-4.396],[-0.081,0],[-18,-19],[-16,-5],[-25,6],[0,27],[22,8],[-2,20.5],[14.5,11.5]],"o":[[0,0],[-17.396,58.291],[6,3.5],[0,3.5],[0,0],[0,0],[0,0],[0,0],[0.25,-3.25],[1.5,18.375],[-4.375,-4.125],[-4,-0.625],[-3,2],[-5.25,1.25],[-3.625,1.25],[-2.375,-6.125],[7.5,-2.75],[0,0],[-3,-3.5],[0.375,-5.75],[-4.625,-2.25],[-8.125,3.125],[-5.125,-1.375],[-3.125,-2.25],[-2.25,-5.75],[2.5,-4.625],[-2,-5.625],[-6.25,0.75],[-2.625,-6],[-1.625,-7.875],[5.25,2.125],[1.5,4.25],[5.375,-3],[-2.5,-8.875],[1,-3],[6,-2.25],[3.75,0],[4.625,-3.75],[0,0],[-6.75,-5],[1.25,-2.5],[6.375,-2],[2,-0.875],[2.625,0.875],[-0.375,4.875],[0,0],[2.5,-4.875],[10.5,-1.125],[1,3.375],[0,0],[2.75,-1.5],[7.25,1.25],[-0.5,-5.75],[-2.125,3.75],[-1.125,-5.125],[0.125,3.25],[-2.75,2.375],[-5.75,2.75],[-5,2.625],[-8.5,1],[-0.875,3.875],[2.875,0.375],[1.125,0.625],[1,2.5],[-4.25,4.375],[-2.125,4.125],[-4.625,1.875],[0.75,5.875],[4.375,3.125],[0,0],[1.375,5.375],[2.75,4.375],[8,-0.5],[8.375,3.125],[2.625,-0.875],[-0.25,-3.75],[-6.25,-3.125],[-1,-14],[10.875,-3.625],[-0.75,2.75],[0,3.875],[7.25,0],[4.125,2],[1.25,8.625],[1.75,5],[4.25,3.625],[2.75,-3.875],[11.5,-5.75],[4.375,6.25],[9.125,3.125],[-0.625,2.75],[-3.125,0.5],[-4.75,3.25],[-4.75,-4.375],[0.125,-4.25],[-10.75,-6.125],[-3.125,4.625],[-5,0.125],[-1.25,0.625],[-5.875,-8.875],[1.25,-1.125],[-1.875,-5],[-0.375,-5.875],[-4.625,-1.25],[-0.25,-4.625],[-7.335,6.182],[0.272,0.848],[0.5,0],[18,19],[16,5],[25,-6],[0,-27],[-22,-8],[2,-20.5],[-14.5,-11.5]],"v":[[-160,-92],[-247.257,24.625],[-216.5,113],[-162,170.5],[-151,200.5],[-124.5,205.75],[-110.25,203.75],[-55.5,193.25],[-45.25,182],[-51.5,170.25],[-73.375,182.75],[-80.5,178.375],[-93.125,179.375],[-118.75,182.375],[-131.75,189.75],[-141.75,187.875],[-136.75,161.625],[-123.75,149.25],[-133.5,147.125],[-134,137.375],[-142.625,122.125],[-163.5,120.375],[-182.375,115.375],[-197.625,108],[-206.25,94.625],[-207.875,83.25],[-205.25,64.25],[-217.25,54.875],[-230.25,47.625],[-236.625,46.125],[-219,36.375],[-206.625,42.375],[-198.375,50.375],[-195.75,31],[-197.875,22.75],[-185.375,13.875],[-166.375,10.375],[-146.125,3.25],[-140.5,-7.25],[-154.125,-11.875],[-159.375,-39.5],[-147.875,-44],[-139.625,-47.5],[-127.25,-48.875],[-120.875,-40.125],[-114.25,-30.125],[-114,-41.875],[-103.875,-50.375],[-84.75,-38.25],[-79,-32.125],[-76.875,-39.75],[-63.25,-42.375],[-58.625,-20.625],[-63.75,-18.375],[-74.625,-15.75],[-80,-20.125],[-84.875,-7.5],[-97.875,-1.375],[-109.25,6.75],[-126.25,10.625],[-141.75,25.375],[-133.5,27.75],[-126.125,30.25],[-114.125,44.875],[-121,71.375],[-126.375,82.125],[-129.875,92.875],[-134,107.625],[-128.875,120],[-102.625,128],[-109.625,144.625],[-108.125,155.375],[-96.375,156],[-80.375,161.75],[-63.375,165],[-59.5,145.625],[-75,128.625],[-83,126.625],[-65.375,102],[-57.875,104.625],[-63.5,108.75],[-42.625,114.625],[-23.75,114],[-6.625,151.875],[-0.5,168.375],[18.75,188.75],[37.75,191],[60.5,169.375],[93.5,172.125],[108.875,208.375],[117.375,223.125],[110.25,225],[102.75,234.375],[85.75,235.25],[73.375,218.625],[68,199.375],[47.25,209.875],[34.375,216.25],[32.75,219.875],[16,211.25],[5.25,200.125],[-1.125,180.625],[-12.625,153.375],[-22.125,140.125],[-29.5,133.25],[-52,128.5],[-55.071,153.164],[-54.5,154.5],[-34,161],[-14,228],[103,251.5],[130,208],[37.5,133],[-39,53],[-57.5,-54.5]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":13.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.5,-1.25],[-1.75,-11],[-11.25,-3.5],[1.75,-16.125],[-9.125,-4.375],[-14.5,0],[-9.625,3.125],[-1.125,6.875],[-4.875,-1.125],[-2.75,-8.625],[-13.25,-4.875],[-5,1.75],[6.375,-5.25],[3,4.875],[8.5,-0.5],[2,3.375],[2.75,4.625],[12.375,1],[15.125,0.125],[0.5,0.375],[1,9.625],[3.25,8.875],[4.375,3.75],[2.375,-8.375],[0,0],[7.25,-9.25],[0.5,9.5],[8,4.5],[-2.75,-3],[8,-6.5],[5.25,7.25],[0,12.5],[7.25,9.25],[10.5,-5],[4.5,8],[-2.5,3.75]],"o":[[-4.5,1.25],[1.75,11],[11.25,3.5],[-1.75,16.125],[9.125,4.375],[14.5,0],[9.625,-3.125],[1.125,-6.875],[4.875,1.125],[2.75,8.625],[13.25,4.875],[5,-1.75],[-6.375,5.25],[-3,-4.875],[-8.5,0.5],[-2,-3.375],[-2.75,-4.625],[-12.375,-1],[-15.125,-0.125],[-0.5,-0.375],[-1,-9.625],[-3.25,-8.875],[-4.542,-3.893],[-2.375,8.375],[0,0],[-8.643,11.028],[-0.5,-9.5],[-8,-4.5],[2.75,3],[-8,6.5],[-5.25,-7.25],[0,-12.5],[-7.25,-9.25],[-10.5,5],[-4.5,-8],[2.5,-3.75]],"v":[[-212,71],[-217.5,100.5],[-185.75,141],[-158.375,172],[-141.25,200.625],[-108.5,205.875],[-61,204],[-43,186],[-35.875,155.75],[-23.625,176.75],[36.625,228],[116.125,246.5],[113.125,236.875],[98.25,236],[78.75,227.875],[67.875,229.875],[57.625,216.125],[48.125,203.125],[34.25,213.5],[7.5,198.375],[0,178.75],[-14.125,152.5],[-32.625,139.25],[-54.5,136.625],[-46.75,154],[-51.5,173],[-80.25,183],[-97.25,163.5],[-116.25,167.5],[-115.5,177.5],[-140,171.25],[-142.25,135.25],[-158.5,113.5],[-181,107.75],[-203.75,96],[-206,77]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[4.125,6.875],[-2.5,-4.875],[0,-11.75],[1.25,-3],[3.875,-4.25],[-1.375,-3.125],[-0.057,-3.415],[0,-0.079],[-4,6.375],[-4.75,7.75]],"o":[[-4.125,-6.875],[2.5,4.875],[0,11.75],[-1.25,3],[-3.875,4.25],[1.158,2.632],[0.011,0.64],[0,0.5],[4,-6.375],[4.75,-7.75]],"v":[[-192.875,-102.875],[-196.25,-101.5],[-192.5,-87.125],[-195.875,-72.375],[-211.875,-64.75],[-207.875,-52.75],[-206.389,-36.625],[-206.375,-35.5],[-198.25,-47.5],[-188.375,-60.625]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[-0.875,-5.625],[-2,-3.25],[0.25,-13.5],[0,0],[-3.625,11],[0,0],[10.125,0],[3.5,5.5]],"o":[[0,0],[0.875,5.625],[2,3.25],[-0.25,13.5],[0,0],[3.625,-11],[0,0],[-10.125,0],[-3.5,-5.5]],"v":[[-251.75,-35],[-255.875,-14.875],[-247.875,-2.5],[-234.375,6],[-234.375,25.5],[-220.875,4.125],[-215.625,-19.25],[-228,-16],[-247.625,-23.625]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[5,1.75],[9.625,-3],[2.875,-17.875],[-5.75,-9.5],[2,2.25],[3.125,5.75],[-0.75,3],[-8.375,1.875],[5.875,9.375],[-7.875,13.25],[0,0]],"o":[[-5,-1.75],[-9.625,3],[-2.875,17.875],[5.75,9.5],[-2,-2.25],[-3.125,-5.75],[0.75,-3],[8.375,-1.875],[-5.875,-9.375],[7.875,-13.25],[0,0]],"v":[[-253.125,-91.375],[-285.25,-86.875],[-308.25,-60.5],[-302,-17],[-288.125,1.75],[-287,-6.75],[-290.875,-22.625],[-288.625,-42.375],[-273.25,-54.25],[-265.5,-73.625],[-242.25,-90.625]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[-0.875,-11.125],[-7.5,-0.75],[-13.75,4.125],[0.5,-3],[4.5,-4],[1.375,-4.25],[2.25,-0.875],[2,-1.25],[0,0],[3.375,1.625],[-0.875,8.375],[-2.875,2.5],[0,0],[1.25,-1.875],[7,2.125]],"o":[[0,0],[0.875,11.125],[7.5,0.75],[13.75,-4.125],[-0.5,3],[-4.5,4],[-1.375,4.25],[-2.25,0.875],[-2,1.25],[0,0],[-3.375,-1.625],[0.875,-8.375],[2.875,-2.5],[0,0],[-1.25,1.875],[-7,-2.125]],"v":[[-291.75,-4.625],[-294.875,42],[-266.125,56.25],[-247.875,52.625],[-225.125,1.625],[-235.75,12],[-243.5,20.625],[-257.375,32.625],[-263.875,38.375],[-269.625,34.75],[-275.875,37.25],[-276.875,21.75],[-263.125,8.375],[-261.25,-1],[-266.25,2.625],[-282.375,2.625]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[6.25,-4],[-1.625,-7.5],[-15.125,-3.375],[2.625,7.625],[1.75,-3.625],[2.5,1.875],[3,-1],[4.225,4.29],[0.75,-0.375]],"o":[[-6.25,4],[1.625,7.5],[15.125,3.375],[-2.625,-7.625],[-1.75,3.625],[-2.5,-1.875],[-3,1],[-8.125,-8.25],[-0.75,0.375]],"v":[[-160.625,-135.375],[-167.375,-103],[-131.75,-83.5],[-117.875,-107.5],[-122,-104.25],[-128,-101.25],[-139.625,-100.125],[-154.625,-104.25],[-155.375,-127.625]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[19.375,1.875],[5,-11],[5.25,-9.75],[-2.125,2],[-3.5,1.125],[-2.75,5.75],[-0.125,8.25],[-11.5,3.625],[-9,-3.125],[3.125,2.625],[-1.875,2.25],[0,0]],"o":[[-19.375,-1.875],[-5,11],[-5.25,9.75],[2.125,-2],[3.5,-1.125],[2.75,-5.75],[0.125,-8.25],[11.5,-3.625],[9,3.125],[-3.125,-2.625],[1.875,-2.25],[0,0]],"v":[[-121.375,-50],[-172.5,-36.375],[-186.5,21.875],[-187,32.5],[-172.5,22.875],[-159.25,13.25],[-155.75,-14.625],[-138.75,-34.125],[-115.375,-32.875],[-106.875,-33.75],[-107,-41.75],[-97.25,-44.25]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0,0],[1.375,-6.75],[-2.5,-1.875],[-2.375,2.25],[2.625,1.375],[2.5,5.375]],"o":[[0,0],[-1.375,6.75],[2.5,1.875],[2.375,-2.25],[-2.625,-1.375],[-2.5,-5.375]],"v":[[-217.5,54.125],[-227.375,61.375],[-221.75,71],[-210.5,72.875],[-212,66.125],[-220.5,62.875]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[0,0],[-2.75,-3],[3.875,-4.125],[4.625,-8],[3.75,-3.875],[0,0],[2,-5.5],[9.375,1.25],[1.375,-3],[-6.625,-11.875],[-6.625,-4.125],[4.5,-4.625],[7.5,-10.625],[-10.875,-8.875],[-8.25,3.125],[-1.125,5.75],[-4.625,2.375],[3.625,-0.25],[1.125,6],[0,0],[31.75,7.125]],"o":[[0,0],[2.75,3],[-3.875,4.125],[-4.625,8],[-3.75,3.875],[0,0],[-2,5.5],[-9.375,-1.25],[-1.375,3],[6.625,11.875],[6.625,4.125],[-4.5,4.625],[-7.5,10.625],[10.875,8.875],[8.25,-3.125],[1.125,-5.75],[4.625,-2.375],[-3.625,0.25],[-1.125,-6],[0,0],[-16.223,-3.641]],"v":[[-80.125,-36],[-61.125,-28.375],[-63.625,-12.625],[-80,-9.25],[-95,1],[-103.75,12],[-92.5,17.5],[-109,31.75],[-119.125,29.625],[-116,47],[-101.5,60.625],[-105.25,82.625],[-123.625,102.75],[-116.625,144.875],[-72,147.375],[-66.625,136.375],[-57.25,128.5],[-62.875,119.5],[-75,109.625],[-70.25,99.25],[-56.5,-35.625]],"c":true},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-7,-12.375],[-6.125,-1.875],[-1,-4.625],[-1.625,4],[6.125,4.875]],"o":[[0,0],[0,0],[7,12.375],[6.125,1.875],[1,4.625],[1.625,-4],[-6.125,-4.875]],"v":[[83.5,180.5],[82,180.625],[82,197.875],[103.5,215.625],[114,225.875],[120,235],[109.25,193]],"c":true},"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[0,0],[-0.75,-8],[-3.25,-3.875],[-7.25,-4.625],[-0.375,2.625]],"o":[[0,0],[0.75,8],[3.25,3.875],[7.25,4.625],[0.375,-2.625]],"v":[[-14.375,125.875],[-12.25,141.625],[-2,160.125],[7.25,174],[22.125,173.375]],"c":true},"ix":2},"nm":"Path 11","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":12,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":11,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.283,-0.677],[0,0],[-6.863,-1.353],[-5.896,4.349],[0,0],[4.929,-3.286],[4.156,6.573]],"o":[[-6.283,0.677],[0,0],[6.863,1.353],[5.896,-4.349],[0,0],[-4.929,3.286],[-3.926,-6.209]],"v":[[-157.237,-99.484],[-158.403,-90.194],[-142.069,-72.603],[-118.195,-78.982],[-112.105,-95.414],[-119.161,-84.298],[-137.369,-95.321]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.546,4.174],[10.668,-3.401],[18.398,-0.618],[0,0],[-1.546,-6.184],[-4.484,-2.628],[0,0],[-4.174,9.122],[-4.484,0.309],[0,0],[-7.576,4.638]],"o":[[-1.546,-4.174],[-10.668,3.401],[-18.398,0.618],[0,0],[1.546,6.184],[4.484,2.628],[0,0],[4.174,-9.122],[4.484,-0.309],[0,0],[7.576,-4.638]],"v":[[-194.382,-134.826],[-244.474,-131.27],[-266.892,-117.201],[-289,-113.336],[-263.026,-100.813],[-252.513,-94.628],[-245.247,-87.671],[-244.474,-101.122],[-218.655,-119.056],[-206.441,-115.5],[-203.194,-123.385]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[-3.625,0.375],[9.75,-1.125],[5.625,-1.875],[0,0],[-5.125,-2.375],[0,0],[-2,1.25],[-0.75,-2.875],[-3.25,3.25]],"o":[[3.625,-0.375],[-9.75,1.125],[-5.625,1.875],[0,0],[5.125,2.375],[0,0],[2,-1.25],[0.75,2.875],[3.25,-3.25]],"v":[[-58.375,-39.625],[-77.875,-37.25],[-99.625,-33.25],[-103.5,-31.25],[-99.875,-23.5],[-90.625,-23.75],[-84.125,-27.5],[-78.75,-26.875],[-69.375,-27.25]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[9.786,-10.455],[-2.374,-5.952],[-3.489,0.572],[-6.8,-2.36],[-1.422,3.78],[0,0],[4.66,7.655]],"o":[[0,0],[-9.786,10.455],[2.374,5.952],[3.489,-0.572],[6.8,2.36],[1.422,-3.78],[0,0],[-4.66,-7.655]],"v":[[-158.217,-20.031],[-194.025,1.715],[-217.664,31.461],[-205.964,40.971],[-183.84,46.764],[-171.222,40.251],[-146.377,32.485],[-163.939,17.596]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[4.25,-7.75],[9.5,-6],[0,0],[-3.25,-3.75],[0,0],[-7.5,6.75]],"o":[[0,0],[-4.25,7.75],[-9.5,6],[0,0],[3.25,3.75],[0,0],[7.5,-6.75]],"v":[[-40.5,-22.5],[-48.5,-8.5],[-66.5,-6],[-79.75,18.25],[-73.5,20.5],[-66.75,25.5],[-41.5,8.5]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[-6,-4],[-8.5,-7],[0,0],[2,12],[8.75,1.5]],"o":[[0,0],[8.947,5.965],[8.5,7],[0,0],[-2,-12],[-8.75,-1.5]],"v":[[-51,98.25],[-28,103],[-15.5,119.25],[-2.75,145.25],[-0.5,108.25],[-24.5,86.25]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[-11,-4.25],[-3.5,4.5],[-11.75,3.25],[-3.25,-9],[-12.75,-4.75],[-3,3.5],[13.5,6.5]],"o":[[0,0],[8.575,3.313],[3.5,-4.5],[11.75,-3.25],[3.25,9],[12.75,4.75],[3,-3.5],[-13.5,-6.5]],"v":[[3.75,145.75],[11,165.75],[31.5,178.25],[56,172],[75.5,172.5],[103.5,209.25],[130,205.5],[77.25,147.75]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[-4.067,-2.566],[-0.758,-7.348],[9.115,2.619],[-8.514,-6.606],[0,0],[-5.454,6.072],[-3.381,-0.366],[-5.854,3.36],[1.124,3.967],[0,0],[-1.944,5.151],[-4.485,5.745],[16.922,11.906]],"o":[[4.067,2.566],[0.758,7.348],[-10.49,-3.014],[26.251,20.371],[0,0],[3.834,-4.268],[3.381,0.366],[5.854,-3.36],[-1.124,-3.967],[0,0],[1.944,-5.151],[4.485,-5.745],[-16.922,-11.906]],"v":[[-80.067,22.354],[-72.644,36.825],[-88.115,50.381],[-118.751,66.629],[-106.256,120.495],[-90.834,112.268],[-81.012,105.418],[-67.297,92.848],[-62.326,81.923],[-67.336,72.692],[-70.707,60.791],[-56.604,41.167],[-66.945,17.124]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[0,0],[7,-32.5],[-23.5,-20],[-74.5,-36],[-18.75,12.25],[0,0],[11.081,12.786],[21.5,-2.5],[2,6.5],[0,0],[15.75,5],[0,0],[3.25,6],[-6.25,10.25],[17,-3],[14,0],[0,0],[6.5,-6],[-3,13.5],[8.75,0.25],[5,20.5],[8.25,-7],[6,2.75],[-0.75,8.5],[0,0],[13.75,5.25],[-5,7],[0,0],[15.5,21]],"o":[[0,0],[-7,32.5],[23.5,20],[116.434,56.263],[18.75,-12.25],[0,0],[-9.75,-11.25],[-21.5,2.5],[-2,-6.5],[0,0],[-15.75,-5],[0,0],[-3.25,-6],[6.25,-10.25],[-17,3],[-32.75,0],[0,0],[-6.5,6],[3,-13.5],[-8.75,-0.25],[-5,-20.5],[-8.25,7],[-6,-2.75],[0.75,-8.5],[0,0],[-13.75,-5.25],[5,-7],[0,0],[-15.5,-21]],"v":[[-282.5,-82.75],[-334,-38],[-258.5,83.5],[-128.5,203.5],[125.75,247],[123.75,235.25],[103.75,238.25],[72.5,230],[56,213],[46,203.25],[27.5,210.5],[1.75,190.25],[-4.75,183.25],[-9.25,162],[-34.25,139.25],[-67.75,169.75],[-100,152.75],[-108.25,161.75],[-132.5,153.5],[-152.75,137.25],[-168.75,107.25],[-206,90.25],[-224.75,88.75],[-234.5,71],[-244,56],[-261.5,48.5],[-264.75,21.75],[-247,7.75],[-287,-22.75]],"c":true},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[1,-5.25],[10.375,-4.75],[0,0],[-0.93,-9.18],[9.106,-2.775],[0,0],[-12.125,4.875],[-3.5,11],[1.75,4.375]],"o":[[-1,5.25],[-10.375,4.75],[0,0],[1,9.875],[-29.125,8.875],[0,0],[12.125,-4.875],[3.5,-11],[-1.75,-4.375]],"v":[[-176,-83.875],[-186.875,-69.25],[-202.625,-66.5],[-198.5,-51.5],[-215,-15.375],[-217.75,17.75],[-200,-0.875],[-179.5,-31.75],[-170.5,-82.875]],"c":true},"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":10.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":10,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[26.5,4.5],[25.25,-12.75],[0,0],[-7.25,-10],[0,0],[-0.25,5],[-16.5,0],[0,0],[-11.5,-5.25],[0,0]],"o":[[-26.5,-4.5],[-25.25,12.75],[0,0],[7.25,10],[0,0],[0.25,-5],[16.5,0],[0,0],[11.5,5.25],[0,0]],"v":[[-117,-145.25],[-219.75,-131.25],[-222,-116.25],[-180.5,-105.75],[-171.75,-85.75],[-169.5,-108.5],[-146,-123],[-131.5,-111],[-117.25,-120.5],[-100.75,-103.5]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[20.25,-9.5],[22.75,-35],[-17,-9.25],[4.25,5.25],[1.25,6.25],[0,0],[15.75,-7.75],[4.75,2.75],[-5,9.75],[0,0],[6,1],[3,6.25],[3,9.75],[-12,15.5],[0,0]],"o":[[-20.25,9.5],[-22.75,35],[17,9.25],[-4.25,-5.25],[-1.25,-6.25],[0,0],[-15.75,7.75],[-4.75,-2.75],[5,-9.75],[0,0],[-6,-1],[-3,-6.25],[-3,-9.75],[12,-15.5],[0,0]],"v":[[-280.25,-109.5],[-334.5,-64.5],[-281.25,86.25],[-234,96.25],[-237.25,75.75],[-226.75,62],[-247.5,62.75],[-274,54.5],[-269.25,28.25],[-248.75,16.75],[-265.5,16.5],[-278.5,6.75],[-288.75,-19.25],[-277.75,-67.25],[-245,-91.25]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[9.75,-2.5],[0,0],[4.5,-4.5],[1.5,-13.25],[9.75,-0.5],[0,0],[-15,-13],[1.5,-5.25],[-2,-7.25],[0,0],[-8.5,0.25],[-7.25,5.5],[1,0.75],[-16.25,0],[-4.575,13.725]],"o":[[0,0],[-9.75,2.5],[0,0],[-4.5,4.5],[-1.5,13.25],[-12.506,0.641],[0,0],[8.426,7.302],[-1.5,5.25],[2,7.25],[0,0],[8.5,-0.25],[7.25,-5.5],[-1,-0.75],[16.25,0],[12,-36]],"v":[[-27.75,-25.25],[-37.75,-6.75],[-54.25,-7.25],[-66.5,9],[-77,30],[-89,48],[-103.25,38.75],[-105.75,64.25],[-98.75,83.25],[-99,104.5],[-88.25,111],[-78,97.5],[-60.5,99.25],[-58.75,87.5],[-31.5,70],[-13,20.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-18,-8],[-6.25,14]],"o":[[0,0],[0,0],[18,8],[6.25,-14]],"v":[[101.75,162.75],[75.5,166.25],[90,201.5],[133.25,198.25]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[-54.25,-11.75],[-28.25,-14.5],[-42.75,-17.5],[0,0],[11.5,0],[6.75,1.5],[3.75,4.25],[3,9],[16.75,2.5],[3.25,12.75],[0.25,1],[1,4.5],[12.75,0.75],[0,0],[0,-9],[30,-4],[-3,2.25],[6,7.25],[0.75,7.5],[8.5,6.75],[18.75,-6.5]],"o":[[0,0],[23.4,5.068],[28.25,14.5],[42.75,17.5],[0,0],[-11.5,0],[-6.75,-1.5],[-3.75,-4.25],[-3,-9],[-16.75,-2.5],[-3.25,-12.75],[-0.25,-1],[-1,-4.5],[-12.75,-0.75],[0,0],[0,9],[-30,4],[3,-2.25],[-6,-7.25],[-0.75,-7.5],[-8.5,-6.75],[-18.75,6.5]],"v":[[-253.5,84.75],[-208.75,135.5],[-156.75,175.5],[56.5,247.5],[111.5,252.25],[95.5,238.75],[75,235.25],[61,223.25],[46.5,201.5],[16,189.75],[-9.75,159.25],[-23.5,157],[-28.75,149.5],[-41.25,132.5],[-57.25,138.75],[-52.75,156.5],[-95.75,169.25],[-141.25,159.5],[-148,137.75],[-171,116.5],[-187,98.75],[-221.5,94.75]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[6.5,1.25],[0,-3.25],[3.5,-1.75],[0.5,-8.25],[5,-9.25],[5.5,-5.75],[-1.25,-4],[-3.5,-2.25],[0,0],[-6.5,6],[-14.75,5.75],[0,0],[10.75,3]],"o":[[-6.5,-1.25],[0,3.25],[-3.5,1.75],[-0.5,8.25],[-5,9.25],[-5.5,5.75],[1.25,4],[3.5,2.25],[0,0],[6.5,-6],[14.75,-5.75],[0,0],[-10.75,-3]],"v":[[-149,-71.75],[-164,-71.75],[-166.5,-59.5],[-185.25,-51],[-187,-25.75],[-201,-7.25],[-206.75,8],[-199.25,16.25],[-181.75,17.5],[-160.75,-35.75],[-128.25,-45.25],[-108.5,-66],[-126.75,-64.5]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":7.2,"s":[0,0],"h":1},{"t":8.4,"s":[100,100],"h":1},{"t":9.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":6,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.25,1.25],[0,0],[-0.5,0.75],[-5.75,-1.5],[-0.5,-3.5],[-3.25,3],[4,0],[0,0]],"o":[[-7.25,-1.25],[0,0],[0.5,-0.75],[5.75,1.5],[0.5,3.5],[3.25,-3],[-4,0],[0,0]],"v":[[-80,82.75],[-93.5,88.75],[-88,88.5],[-76.75,90],[-67.25,95.25],[-54.25,99.75],[-62.75,91],[-70.25,90.5]],"c":true},"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-6.75,-20.75],[-19,-9],[-10.75,-6.5],[-20,0.25],[0,0],[5.5,-2.75],[10.75,4.5],[3.25,7.75],[6,4.25],[9.75,1.75],[5.5,9]],"o":[[0,0],[6.75,20.75],[19,9],[10.75,6.5],[20,-0.25],[0,0],[-5.5,2.75],[-10.75,-4.5],[-3.25,-7.75],[-6,-4.25],[-9.75,-1.75],[-5.5,-9]],"v":[[-25,160.75],[-19.25,192.75],[11.5,228.75],[53.25,242.75],[96.75,247.75],[124,228.25],[101.75,237.5],[74.25,232],[54.25,212],[41,196.25],[7,191.25],[-11.75,163.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[6,-17],[-5.5,-23],[-6,0],[7.5,11],[4.5,9.5],[-1.5,16.5]],"o":[[0,0],[-6,17],[5.5,23],[6,0],[-7.5,-11],[-4.5,-9.5],[1.5,-16.5]],"v":[[-296,-56],[-318,-21.5],[-315,46],[-267,85.5],[-265,59],[-285.5,35.5],[-296.5,-7]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[0.5,-3.25],[3.75,-5.25],[0,0],[-4.25,0.25],[-5.75,1.5],[0,0],[10,0.25],[4.5,-0.25],[5.285,4.651]],"o":[[0,0],[-0.532,3.459],[-3.75,5.25],[0,0],[4.25,-0.25],[5.75,-1.5],[0,0],[-10,-0.25],[-4.5,0.25],[-6.25,-5.5]],"v":[[-160.75,-82.5],[-162,-69],[-171.25,-54.75],[-166.5,-44],[-145.25,-47.75],[-123.75,-50.5],[-102.5,-66.75],[-120.5,-63.75],[-137.25,-66.25],[-152.5,-70.25]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[5,-4.5],[0,0],[-6,0],[-1.5,5]],"o":[[0,0],[-5,4.5],[0,0],[6,0],[1.5,-5]],"v":[[-91.5,18],[-102.5,29],[-102.5,41.5],[-96,35],[-86.5,28.5]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[6.75,7.75],[-5.25,-11.75],[2.25,-7.75],[5.75,-1.5],[0,0],[-8,-4.75],[5.25,-9.75],[-10.25,-2.25],[0,0],[-0.25,11]],"o":[[-6.75,-7.75],[5.25,11.75],[-2.25,7.75],[-5.75,1.5],[0,0],[8,4.75],[-5.25,9.75],[10.25,2.25],[0,0],[0.25,-11]],"v":[[-18.75,-27.75],[-26.5,-18.25],[-21.5,8.75],[-30,21],[-47.75,26],[-42.75,39],[-32,58.5],[-28.25,79.25],[-4.5,38],[-1.25,2.75]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[0,0],[10.5,-2.75],[1.75,-9],[-5.5,-3.75],[3,-6.5],[-10.25,-2],[-3.25,-4.25],[0,8],[2,11.5],[0,11.25]],"o":[[0,0],[-10.5,2.75],[-1.75,9],[5.5,3.75],[-3,6.5],[10.25,2],[3.25,4.25],[0,-8],[-2,-11.5],[0,-11.25]],"v":[[-175,-40.5],[-184.75,-4.75],[-212,3.75],[-206,17.75],[-201.25,30.75],[-185.5,40.5],[-163.25,48],[-144.75,43.5],[-158.25,23.5],[-158.25,-14.25]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[0,0],[0,-8],[-9.75,-6.25],[0.25,1.75],[2.25,5.25],[2,4.25],[9.75,6.75],[1.75,7.75]],"o":[[0,0],[0,8],[9.75,6.25],[-0.25,-1.75],[-2.25,-5.25],[-2,-4.25],[-9.75,-6.75],[-1.75,-7.75]],"v":[[-244,77],[-251,95.75],[-232.75,120],[-183.5,136.25],[-190.5,112.75],[-186.25,105.5],[-199.75,94],[-228,87.25]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[0,0],[4.25,-5.75],[0,-6],[-2,-2.5],[-11.5,0],[-3.25,2.5],[-7.25,-2.25],[0,0],[11.5,5.25],[1.111,8.549]],"o":[[0,0],[-4.25,5.75],[0,6],[2,2.5],[11.5,0],[3.25,-2.5],[7.25,2.25],[0,0],[-11.5,-5.25],[-3.25,-25]],"v":[[-3.5,88.25],[-3,112.75],[-6,135.75],[1.75,157],[22.5,167.25],[43.75,161.5],[58,159.75],[71.25,170],[53.25,140.75],[17.75,118.25]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[11.5,-8.5],[0.5,-6.25],[4.25,-2.25],[5,-2.5],[1.5,4.5],[10.25,-0.5],[16,3.25],[0,0],[2.25,-9.75],[-4.25,-5.5],[-4.5,-4.25],[-8.5,-4.25],[-10.25,0.5],[-7.5,8.25],[0,0],[-3.75,8]],"o":[[-11.5,8.5],[-0.5,6.25],[-4.25,2.25],[-5,2.5],[-1.5,-4.5],[-10.25,0.5],[-16,-3.25],[0,0],[-2.25,9.75],[4.25,5.5],[4.5,4.25],[8.5,4.25],[10.25,-0.5],[7.5,-8.25],[0,0],[3.75,-8]],"v":[[-48.5,136.75],[-48.25,160.5],[-66,161.75],[-71,173.5],[-100.25,173],[-117.25,162],[-142,157.25],[-147.75,138.5],[-159.25,148.75],[-153.5,166.25],[-120,176],[-104.25,189],[-74,196],[-37.75,178.25],[-36.75,161.75],[-28.25,148.25]],"c":true},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":6,"s":[0,0],"h":1},{"t":7.2,"s":[100,100],"h":1},{"t":8.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":10,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[7,-1],[0.75,1.75],[-7.25,-16],[4.5,-3.75],[3.5,-6.5],[3,-0.75],[0,0],[-7.75,-2.25],[0.75,-4],[-17,-7.5],[-5.5,6.5],[-5.5,4],[0.5,9.5],[-7.5,5],[2,2.5],[7,5]],"o":[[0,0],[-7,1],[-0.75,-1.75],[7.25,16],[-4.5,3.75],[-3.5,6.5],[-3,0.75],[0,0],[7.75,2.25],[-0.75,4],[17,7.5],[5.5,-6.5],[5.5,-4],[-0.5,-9.5],[7.5,-5],[-2,-2.5],[-7,-5]],"v":[[-147,-51],[-162,-44.5],[-172.75,-46.5],[-172.5,-33.25],[-168.5,-12.75],[-187,0.25],[-202.5,16.5],[-221,19.5],[-205.75,28.25],[-193.75,35.75],[-165.75,64.75],[-136.5,53.5],[-127,32.5],[-113,13],[-107.5,-7.5],[-92.5,-26.5],[-138,-39]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[10.883,-4.842],[-2.683,-7.658],[0,0],[-10.605,13.524],[0,0],[3.227,5.626]],"o":[[0,0],[-22.741,10.119],[4.225,12.058],[0,0],[14.765,-18.828],[0,0],[-1.909,-3.328]],"v":[[-51.578,28.141],[-72.509,21.881],[-88.817,53.908],[-76.686,63.189],[-73.27,46.976],[-53.342,43.631],[-56.727,34.124]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0.25,-6.5],[4.75,-2.5],[6.75,0],[-19.25,-6.25],[-5.5,11.75]],"o":[[0,0],[-0.25,6.5],[-4.75,2.5],[-6.75,0],[19.25,6.25],[5.5,-11.75]],"v":[[-89.5,-92.5],[-97.75,-77.5],[-106.75,-63.25],[-121.5,-54],[-126.5,-41.5],[-79.5,-57.25]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[17.25,-6.5],[29.25,-8],[12.75,-29.5],[-9.25,-2.75],[4.5,3.75],[4.5,11.5],[-11.5,-2.25],[-3.5,2.25],[7.25,3.75],[3.5,9.5],[-3.25,8.5],[-8.25,0],[0,0],[-1.75,12.75],[-10,4.5],[-6.5,0.5],[0,0]],"o":[[-17.25,6.5],[-29.25,8],[-12.75,29.5],[9.25,2.75],[-4.5,-3.75],[-4.5,-11.5],[11.5,2.25],[3.5,-2.25],[-7.25,-3.75],[-3.5,-9.5],[3.25,-8.5],[8.25,0],[0,0],[1.75,-12.75],[10,-4.5],[6.5,-0.5],[0,0]],"v":[[-210.5,-111.75],[-284.5,-75.5],[-323,-20.75],[-273,91.5],[-260.25,79.75],[-270.75,59.25],[-265.75,24.75],[-248,20.75],[-262.25,1.75],[-278,-17.5],[-275.5,-45.25],[-249,-61.25],[-235.75,-50.75],[-234,-69],[-215.75,-90],[-189.5,-89.75],[-180.75,-103.75]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[3.75,-14.25],[-37.75,-13.5],[-14.75,2.25],[0,0],[4.25,-1],[11,4.25],[-0.5,10.5],[5.25,3],[-3,10.5],[3,-6.75],[17,6]],"o":[[0,0],[-3.75,14.25],[37.75,13.5],[14.75,-2.25],[0,0],[-4.25,1],[-11,-4.25],[0.5,-10.5],[-5.25,-3],[3,-10.5],[-3,6.75],[-17,-6]],"v":[[-19,156.5],[-32.75,192],[5.5,233],[81.25,251.25],[104,230.75],[84.5,237],[59.25,231.75],[49.75,216],[38.5,203.25],[39,188.25],[25.5,180],[1.25,185]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[0,0],[11.75,-4],[18.75,-6],[0,0],[-1.25,-5.75],[-17,-5],[-23.75,-9],[-12.75,0],[-4,6.25],[0,4.5],[8.25,2],[-1.75,-8.5],[4.25,-6.25],[10.25,-0.75],[4.75,6],[10.5,-1.25],[6.5,8.75]],"o":[[0,0],[-11.75,4],[-18.75,6],[0,0],[1.25,5.75],[17,5],[23.75,9],[12.75,0],[4,-6.25],[0,-4.5],[-8.25,-2],[1.75,8.5],[-4.25,6.25],[-10.25,0.75],[-4.75,-6],[-10.5,1.25],[-6.5,-8.75]],"v":[[-155.25,88.25],[-179.5,95],[-214.5,111.5],[-246.25,89.75],[-249.75,105.5],[-222.25,134],[-160.75,146.75],[-76.25,186.75],[-24.75,161.25],[-20.25,140.25],[-36.75,128],[-53.5,137.5],[-55.25,154.5],[-80.25,163.25],[-109.25,149.75],[-125.25,133],[-152,118.25]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":7.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":6,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[16.5,-6.5],[2,-6.75],[0,0],[-7.5,7.5],[-12,-0.25],[0,-5],[-3.5,-1],[9.75,12]],"o":[[-16.5,6.5],[-2,6.75],[0,0],[7.5,-7.5],[12,0.25],[0,5],[3.5,1],[-9.75,-12]],"v":[[-147.25,-130.5],[-176.5,-110.25],[-177.5,-94.25],[-163.5,-104],[-130.75,-113.5],[-108,-100.5],[-85.75,-90.25],[-102.5,-116.25]],"c":true},"ix":2},"nm":"Path 14","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[10.5,0],[12.75,-1],[0,0],[-9.5,1.75],[-0.25,4.5],[-0.75,5.75]],"o":[[-10.5,0],[-12.75,1],[0,0],[9.5,-1.75],[0.25,-4.5],[0.75,-5.75]],"v":[[-114.75,-56.75],[-139.5,-48.5],[-155.5,-42.5],[-114.75,-28.75],[-91,-39.25],[-94.5,-46]],"c":true},"ix":2},"nm":"Path 15","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,-10.5],[-5.479,-6.332],[-5.78,-1.137],[-4.844,5.232],[-0.005,-6.617],[-1.979,2.184],[-1.055,3.491]],"o":[[0,0],[0,6.521],[3.344,3.864],[5.615,1.105],[2.679,-2.894],[0.001,1.066],[3.84,-4.238],[21,-69.5]],"v":[[90,143.5],[75.25,161],[85.64,178.494],[96.75,190.5],[107.951,178.686],[117.505,178.617],[125.523,159.841],[138,153.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[2.5,0.75],[-5.75,-18],[-15.5,-6],[2.5,4.5],[0,5.75],[5,6.75],[9.932,8.513]],"o":[[-8.86,-2.658],[5.75,18],[15.5,6],[-2.5,-4.5],[0,-5.75],[-5,-6.75],[-14,-12]],"v":[[-275.75,-10.75],[-293,44.25],[-254.75,78.25],[-239,76.5],[-253.75,60],[-273,41.25],[-271,18]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[7,-4],[3.75,-11.75],[-1.75,-5.25],[1.535,10.435],[-6.5,5.5],[-4.5,2.75],[0.25,4.75]],"o":[[0,0],[-7,4],[-3.75,11.75],[1.75,5.25],[-1.25,-8.5],[6.5,-5.5],[4.5,-2.75],[-0.25,-4.75]],"v":[[-241,-74.75],[-267.5,-65.5],[-281.25,-36.25],[-289.25,-13.5],[-269.5,-17.25],[-264.25,-45],[-241.5,-58.75],[-231.75,-66.5]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[5,4.25],[6.75,-4.25],[0,0],[-4.75,-4],[-3.5,6]],"o":[[-5,-4.25],[-6.75,4.25],[0,0],[4.75,4],[3.5,-6]],"v":[[-186,-95.5],[-216.25,-95.25],[-236.75,-81],[-204.75,-83],[-176.75,-82.25]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":6,"ty":"sh","ix":7,"ks":{"a":0,"k":{"i":[[16.75,-9.75],[-0.75,-8.5],[3.25,-0.25],[3.75,-8.25],[2.75,-3.75],[-1,-6.75],[0,0],[-5,-2.25],[-1.5,-3.25],[-4.25,0.25],[-0.25,7.25],[-10.25,14],[-14.75,4.75],[8,0],[0,0]],"o":[[-16.75,9.75],[0.75,8.5],[-3.25,0.25],[-3.75,8.25],[-2.75,3.75],[1,6.75],[0,0],[5,2.25],[1.5,3.25],[4.25,-0.25],[0.25,-7.25],[10.25,-14],[14.75,-4.75],[-8,0],[0,0]],"v":[[-161.75,-43],[-164.75,-21.75],[-169.5,-6.5],[-184.75,2.25],[-192.75,14],[-194,30.5],[-195.25,42.5],[-174.25,39],[-159.25,51.5],[-149.25,60.25],[-139.75,38.5],[-134.75,0.25],[-104.5,-25],[-125,-28.75],[-136.75,-39.5]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":7,"ty":"sh","ix":8,"ks":{"a":0,"k":{"i":[[-5.5,-4],[-1.5,-8.75],[-0.5,-10],[8.5,-3.25],[-5.25,-2.75],[-4.25,6.25],[0.335,12.506]],"o":[[5.5,4],[1.412,8.235],[0.5,10],[-8.5,3.25],[5.25,2.75],[4.25,-6.25],[-0.75,-28]],"v":[[-15,-25.5],[1.25,-1.5],[1.25,18.5],[-12,35.75],[-15,49.75],[13,38.25],[18.75,-0.25]],"c":true},"ix":2},"nm":"Path 7","mn":"ADBE Vector Shape - Group","hd":false},{"ind":8,"ty":"sh","ix":9,"ks":{"a":0,"k":{"i":[[3.687,1.572],[0,0],[-12.25,-11.5],[-2.25,-2],[0,7]],"o":[[-17,-7.25],[0,0],[12.25,11.5],[2.25,2],[0,-7]],"v":[[69.75,115.75],[46.75,129],[75.5,130],[83,150.25],[95,131.25]],"c":true},"ix":2},"nm":"Path 8","mn":"ADBE Vector Shape - Group","hd":false},{"ind":9,"ty":"sh","ix":10,"ks":{"a":0,"k":{"i":[[0,0],[3.75,-9],[-3.25,-5],[-6.5,-1],[0.25,-7.5],[-2.558,-7.418],[-5,2.5],[0,10.25],[2.75,2]],"o":[[0,0],[-3.75,9],[3.25,5],[6.5,1],[-0.25,7.5],[2.5,7.25],[5,-2.5],[0,-10.25],[-2.75,-2]],"v":[[4,52.75],[-14.75,49.25],[-12.25,67.5],[6,78.25],[15.5,94.5],[15.25,116],[26,126],[35.75,89.75],[22.5,57.75]],"c":true},"ix":2},"nm":"Path 9","mn":"ADBE Vector Shape - Group","hd":false},{"ind":10,"ty":"sh","ix":11,"ks":{"a":0,"k":{"i":[[0,0],[-2.75,-4.75],[0,-5.5],[1.5,-2.75],[0,0],[-4,2],[-3.5,1],[-4.75,4.75],[8.25,0.25],[3.25,8]],"o":[[0,0],[2.75,4.75],[0,5.5],[-1.5,2.75],[0,0],[4,-2],[3.5,-1],[4.75,-4.75],[-8.25,-0.25],[-3.25,-8]],"v":[[-78.25,21.5],[-73.25,32],[-74,47.25],[-71.5,59],[-72,70],[-60.75,65],[-46.25,71.5],[-41,51.5],[-46.75,37.75],[-58,27.75]],"c":true},"ix":2},"nm":"Path 10","mn":"ADBE Vector Shape - Group","hd":false},{"ind":11,"ty":"sh","ix":12,"ks":{"a":0,"k":{"i":[[0,0],[-5.75,-4.5],[-4.25,1.75],[-3,-1],[7,2.5],[4.75,7.5],[5.5,-8.25],[3,8.25]],"o":[[0,0],[5.75,4.5],[4.25,-1.75],[3,1],[-7,-2.5],[-4.75,-7.5],[-5.5,8.25],[-3,-8.25]],"v":[[-243.75,86.75],[-235.5,117.75],[-184.75,132.25],[-177,125.75],[-178,116.25],[-191.75,98],[-206.75,104.25],[-231.75,88.5]],"c":true},"ix":2},"nm":"Path 11","mn":"ADBE Vector Shape - Group","hd":false},{"ind":12,"ty":"sh","ix":13,"ks":{"a":0,"k":{"i":[[0,0],[9.25,-0.25],[2.75,3.25],[-5.5,-6.75],[-9.25,-4.5],[-21.5,-9.75],[-9,5.25],[0,0],[-3,8.75],[14.5,-0.75],[8.25,-3.75],[0,0],[7,0],[5.75,4.75],[3,1.5],[-0.25,3.5]],"o":[[0,0],[-9.25,0.25],[-2.75,-3.25],[5.5,6.75],[9.25,4.5],[21.5,9.75],[9,-5.25],[0,0],[3,-8.75],[-14.5,0.75],[-8.25,3.75],[0,0],[-7,0],[-5.75,-4.75],[-3,-1.5],[0.25,-3.5]],"v":[[-139.25,121],[-148.5,126.25],[-171.5,123.75],[-187,131],[-150.5,143],[-125.75,171.5],[-49.5,181.75],[-23.75,153],[-17.25,150.25],[-32.75,133.75],[-52.75,144.25],[-66.25,143.25],[-75,152.75],[-103.25,145.5],[-121.5,135.25],[-130,126.75]],"c":true},"ix":2},"nm":"Path 12","mn":"ADBE Vector Shape - Group","hd":false},{"ind":13,"ty":"sh","ix":14,"ks":{"a":0,"k":{"i":[[8.75,-2],[1.25,-10.5],[8,4.5],[2,8.25],[4,-6],[-8,-7.75],[-7,4.75],[-5,-13.5],[-5.25,-10.25],[-13.5,-0.25],[-4,8.25],[-4.25,3.25],[3.75,-2.75],[16.25,-2],[7.75,14.25],[-4.5,7.25],[5.25,3.5],[-4.5,0.25]],"o":[[-8.75,2],[-1.25,10.5],[-8,-4.5],[-2,-8.25],[-4,6],[8,7.75],[7,-4.75],[5,13.5],[5.25,10.25],[13.5,0.25],[4,-8.25],[4.25,-3.25],[-3.75,2.75],[-7.105,0.874],[-7.75,-14.25],[4.5,-7.25],[-5.25,-3.5],[4.5,-0.25]],"v":[[45.75,159],[19.25,168.75],[8,180],[1.5,166],[-11.25,159.75],[-10.25,183.5],[12.25,198.75],[31,196.75],[36.25,229.75],[81.5,248.5],[111.25,228.25],[113.75,208.5],[115.75,196],[90.75,220.5],[59,213.75],[47.5,194.75],[54,181.5],[48.5,174]],"c":true},"ix":2},"nm":"Path 13","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":14,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-13.75,-28.5],[-27.5,-9],[-24.75,-8],[-19.5,-5.5],[-21,0.75],[-9.25,19.5],[3.25,12.5],[0,0],[10.75,-9.25],[1,0],[15.25,-4.25],[0,8.5],[0,0],[0,9.25],[16.75,4.75],[0,0],[8,6.5],[12.75,-6.75],[16.75,9.25],[0.5,5.75],[13.5,11],[-0.25,-10.75],[9.75,-2.25],[2.5,7],[0,0],[8.25,2.5],[-0.25,7.75],[3.5,5.25],[1.75,8.75],[-4.75,9.25]],"o":[[0,0],[13.75,28.5],[27.5,9],[24.75,8],[19.5,5.5],[21,-0.75],[9.25,-19.5],[-3.25,-12.5],[0,0],[-10.75,9.25],[-1,0],[-15.25,4.25],[0,-8.5],[0,0],[0,-9.25],[-16.75,-4.75],[0,0],[-8,-6.5],[-12.75,6.75],[-16.75,-9.25],[-0.5,-5.75],[-13.5,-11],[0.25,10.75],[-9.75,2.25],[-2.5,-7],[0,0],[-8.25,-2.5],[0.25,-7.75],[-3.5,-5.25],[-1.75,-8.75],[4.75,-9.25]],"v":[[-230,-39],[-251.75,48.75],[-153,137.5],[-56.5,188],[24.5,193.5],[102,217.5],[149,189.5],[160.75,143.75],[146,127.5],[137,156.5],[113.25,158.25],[95.5,192.25],[72.5,182.5],[77.5,170.75],[71.5,155.25],[55.5,128.5],[30,140.25],[11.25,131.5],[-22.5,141.75],[-57,146.75],[-79.75,129.75],[-92,82],[-122,86.25],[-134,112],[-160.75,95.75],[-160.25,84.25],[-182.25,82],[-201.5,69.25],[-198.5,50.75],[-228.75,33.75],[-228.5,-16]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[6.5,-4.5],[9.75,-2.5],[8.25,-5],[0,0],[-4.75,-10.5],[6,-4.75],[3.75,-3.5],[0,0],[-9.5,-3],[-9.25,-9],[0,0],[-2.75,16],[-8.5,15.25]],"o":[[0,0],[-6.5,4.5],[-9.75,2.5],[-8.25,5],[0,0],[4.75,10.5],[-6,4.75],[-3.75,3.5],[0,0],[9.5,3],[9.25,9],[0,0],[2.75,-16],[8.5,-15.25]],"v":[[-71.25,-63.75],[-84.75,-44.75],[-107.25,-48.25],[-122,-34.25],[-129.5,-16.75],[-122.5,-15.5],[-132,7.75],[-146.25,25.25],[-162.75,25],[-150.5,33.5],[-131,50.25],[-114.5,50.75],[-108.25,25],[-73,-28.25]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[2.75,-29],[0.25,-11],[-10,-9],[-6.566,-10.814],[-4.75,1],[0,0],[14.75,7.5],[7.25,30.25]],"o":[[0,0],[-1.894,19.968],[-0.25,11],[10,9],[4.25,7],[4.75,-1],[0,0],[-14.75,-7.5],[-7.25,-30.25]],"v":[[-35.75,-19.25],[3.5,19.5],[-5.5,49.5],[8,75.25],[34,102.75],[53.5,108.75],[64,91.5],[51.75,62],[39,16.25]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[0,0],[2.5,-8.75],[0,0],[-11.5,2],[-3.5,10.25]],"o":[[0,0],[-2.5,8.75],[0,0],[11.5,-2],[3.5,-10.25]],"v":[[96.75,101.75],[94.75,125],[84.25,134.25],[97.25,142.25],[114.5,128.25]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":4,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[11,-2.25],[0,0],[-3.5,-27.5],[-21.75,-15],[-19,0.25],[-26.75,15.75],[-3.25,9.5],[0,0],[12,-7.75],[0,0],[2.75,-6.75],[5.5,5.25],[10.25,-0.25],[3.75,7.25],[0,0],[17.5,-6.5],[-6,9.25],[0,0],[1,3.25],[-5,27.75],[0,0],[0.509,6.274],[-10.5,3.75]],"o":[[-11,2.25],[0,0],[3.5,27.5],[21.75,15],[19,-0.25],[26.75,-15.75],[3.25,-9.5],[0,0],[-5.544,3.581],[0,0],[-2.75,6.75],[-5.5,-5.25],[-10.25,0.25],[-3.75,-7.25],[0,0],[-17.5,6.5],[6,-9.25],[0,0],[-1,-3.25],[2.443,-13.559],[0,0],[-0.75,-9.25],[3.918,-1.399]],"v":[[-4.75,15.5],[-24,31.25],[-50.25,75.75],[-16.75,141.5],[54.25,175.25],[100,167.25],[132,135.5],[138.25,101.5],[124.75,118.5],[113.5,120.25],[114.5,132.25],[91.75,141.25],[70.5,130.25],[46.25,134.5],[51.5,125.75],[27.5,119.25],[7.5,106.5],[7.75,85.25],[-4.5,85.25],[-20.75,60.25],[-3.25,52.5],[-8.75,38.5],[0.75,18.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-1,-4.75],[0,0],[-7.5,-0.25],[-7.25,-3.5],[8,3.25]],"o":[[0,0],[1,4.75],[0,0],[7.5,0.25],[7.25,3.5],[-8,-3.25]],"v":[[12,15.5],[19.5,20.25],[14,31],[27,27.5],[48,29.75],[29,19.75]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[2.5,-8.5],[4,-2.25],[0,0],[-11,3.75],[-9,0],[0,0],[-1.75,-2.75],[-3.75,11],[7.5,9]],"o":[[0,0],[-2.5,8.5],[-4,2.25],[0,0],[11,-3.75],[9,0],[0,0],[1.75,2.75],[3.75,-11],[-7.5,-9]],"v":[[61.25,42.5],[59.75,68.75],[53,84],[41,84.5],[52.5,91.5],[75,83.75],[82.25,91.5],[89.75,92.5],[103.5,94],[76.75,55.25]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":1.2,"s":[0,0],"h":1},{"t":2.4,"s":[100,100],"h":1},{"t":3.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":3,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.75,-5.5],[-19.25,-16.5],[-10.375,6.5],[-5.5,8.125],[-1.5,5],[0,0],[7.13,-2.936],[0,0],[4.203,-3.258],[0,0],[12.125,0.25],[0,0],[7.25,-0.375],[6,0],[-2.465,7.586],[0,0],[5.25,2.125],[-0.715,4.409]],"o":[[-1.75,5.5],[19.25,16.5],[10.375,-6.5],[5.5,-8.125],[1.5,-5],[0,0],[-4.25,1.75],[0,0],[-5,3.875],[0,0],[-16.589,-0.342],[0,0],[-7.25,0.375],[-6,0],[1.625,-5],[0,0],[-5.25,-2.125],[1.5,-9.25]],"v":[[45.875,89.75],[45.125,153.25],[86.875,160.25],[117.75,135.25],[137.25,116],[142.25,101.375],[129,112.375],[121.875,113.875],[115.625,126.75],[103.875,129.5],[92.625,142.75],[83.625,134.625],[75,132.125],[64,135.625],[49.875,117.875],[57,114],[52.625,107.125],[47.75,98.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":0,"s":[0,0],"h":1},{"t":1.2,"s":[100,100],"h":1},{"t":2.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.375,2.313],[-0.25,-26.563],[-7,0.625],[-5.688,3.813],[-0.938,3.438],[0,0],[2.875,-1.125],[0,0],[2.121,-1.35],[0,0],[7.188,0],[1.82,2.547],[-2.75,3.5],[0,0],[-0.216,3.294]],"o":[[1.206,-1.174],[0.104,11.014],[7,-0.625],[5.688,-3.813],[0.938,-3.438],[0,0],[-2.875,1.125],[0,0],[-6.875,4.375],[0,0],[-7.188,0],[-1.563,-2.188],[1.641,-2.088],[0,0],[0.25,-3.813]],"v":[[104.625,94.25],[84.563,120.313],[103.813,136.25],[125.563,130.75],[137,118.5],[136.938,111.25],[130.188,112.688],[126.063,111.75],[125.688,118.688],[116.375,117.938],[105.5,124],[95.875,119.938],[96.25,110.063],[101.188,107.125],[100.188,102.063]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":-1.2,"s":[0,0],"h":1},{"t":0,"s":[100,100],"h":1},{"t":1.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":20.4,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[958,536,0],"ix":2},"a":{"a":0,"k":[-74,38,0],"ix":1},"s":{"a":0,"k":[205.109,205.109,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.75,0],[2,-13.75],[-4.25,-1.75],[0.5,4.75],[-2.75,0],[-2,8.75]],"o":[[-13.75,0],[-2,13.75],[4.25,1.75],[-0.5,-4.75],[2.75,0],[2,-8.75]],"v":[[-286.25,-108.5],[-303.25,-81.5],[-297,-58.5],[-291.25,-70],[-283.5,-75.5],[-271.5,-89.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":18,"s":[0,0],"h":1},{"t":19.2,"s":[100,100],"h":1},{"t":20.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 15","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[16,0],[4.75,-5],[-0.25,-10.5],[-4,0.75],[0.75,5],[-5.5,0],[-2.25,9.25]],"o":[[-16,0],[-4.75,5],[0.25,10.5],[4,-0.75],[-0.75,-5],[5.5,0],[2.25,-9.25]],"v":[[-279,-113.25],[-307,-90.75],[-313.25,-66.75],[-294.25,-51.5],[-288.75,-66.5],[-280,-77.5],[-261.25,-89]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[8,3.5],[-8.5,-2.5]],"o":[[-8,-3.5],[8.5,2.5]],"v":[[-285.25,-42.5],[-287.75,-33]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":16.8,"s":[0,0],"h":1},{"t":18,"s":[100,100],"h":1},{"t":19.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 14","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.75,-0.75],[-0.25,-4.75],[-2.75,3.5],[-1.25,6.25]],"o":[[-5.75,0.75],[0.25,4.75],[2.75,-3.5],[1.25,-6.25]],"v":[[-198.75,56.25],[-212,69.5],[-207.5,78.25],[-197.25,69.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[9,-6.25],[1.75,-17],[-12.5,-10.75],[-7,-4],[-2.5,0],[5,7.5],[-1.5,8.25],[-9,8],[11.25,10.5]],"o":[[-9,6.25],[-1.75,17],[12.5,10.75],[7,4],[2.5,0],[-5,-7.5],[1.5,-8.25],[9,-8],[-11.25,-10.5]],"v":[[-290.75,-115],[-318.5,-74.5],[-308.25,-36.75],[-287.75,-25.25],[-274.25,-22],[-268,-42.5],[-278.25,-62.25],[-266.25,-78.75],[-256.75,-109.75]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[6.5,-2],[-1.25,-3.5],[-7.064,-1.705],[-3,-2.5],[0,0],[0.75,0.25],[2.25,3.25]],"o":[[-6.5,2],[1.25,3.5],[7.25,1.75],[3,2.5],[0,0],[-0.75,-0.25],[-2.25,-3.25]],"v":[[61,199.25],[49.75,206.25],[58.75,209.75],[73.25,210.5],[91,213.75],[83.5,209.75],[76.25,200]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":15.6,"s":[0,0],"h":1},{"t":16.8,"s":[100,100],"h":1},{"t":18,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 13","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.125,4],[3.25,-3.25],[11.5,-1.75],[-2.375,-5.75],[-0.25,4.375],[-6.5,0]],"o":[[-1.125,-4],[-3.25,3.25],[-11.5,1.75],[2.375,5.75],[0.25,-4.375],[6.5,0]],"v":[[-115.875,-47.75],[-122,-45.875],[-138.25,-47],[-147,-30],[-133.75,-29.5],[-124.875,-40]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[7,4.25],[7,-4.5],[0.75,-0.75],[-8.75,-2.25],[-4.25,1.5],[-0.5,-6.25],[0,0],[3.75,7.75]],"o":[[-7,-4.25],[-7,4.5],[-0.75,0.75],[8.75,2.25],[4.25,-1.5],[0.5,6.25],[0,0],[-3.75,-7.75]],"v":[[71.5,193.5],[46,197],[32.25,195.5],[43.25,209.5],[67.5,206],[80.5,210.75],[93.25,220.75],[86.25,210.75]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[4.75,0.25],[0,-6.5],[-0.5,5.25]],"o":[[-4.75,-0.25],[0,6.5],[0.5,-5.25]],"v":[[-125.5,159],[-125.75,173],[-112.75,172]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[5,0.25],[5.75,-3.5],[4.5,-4],[-9.5,-8],[-2.5,18.5],[-7.75,1.25],[0.75,5.25]],"o":[[-5,-0.25],[-5.75,3.5],[-4.5,4],[9.5,8],[2.5,-18.5],[7.75,-1.25],[-0.75,-5.25]],"v":[[-177.25,39.25],[-188.5,49.5],[-207.25,54.75],[-213.75,83.25],[-182.5,75.25],[-176.5,60.5],[-168.25,46.75]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[6,0],[5.25,-4.75],[7.75,-2],[1,-13.75],[-10.75,-9.25],[-3.25,-10.75],[-9.25,0],[0.5,7.75],[0.75,5.75],[-3.25,2.75],[0.5,7.75],[-4.25,5],[5.5,4.25]],"o":[[-6,0],[-5.25,4.75],[-7.75,2],[-1,13.75],[10.75,9.25],[3.25,10.75],[9.25,0],[-0.5,-7.75],[-0.75,-5.75],[3.25,-2.75],[-0.5,-7.75],[4.25,-5],[-5.5,-4.25]],"v":[[-274.75,-108.75],[-292.5,-107.5],[-308.75,-101.25],[-318.75,-80],[-311,-54],[-300.75,-25],[-268.25,-13],[-262.25,-32.5],[-268.75,-46],[-262,-58.25],[-259.25,-74.75],[-249.75,-85],[-253.25,-105.75]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":14.4,"s":[0,0],"h":1},{"t":15.6,"s":[100,100],"h":1},{"t":16.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 12","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-3.375,-6.375],[-8.875,-3.5],[-5.5,0.375],[-1.75,-4.125],[0,0],[0.375,3.5],[8.25,3.375],[11,-3]],"o":[[0,0],[3.375,6.375],[8.875,3.5],[5.5,-0.375],[1.75,4.125],[0,0],[-0.375,-3.5],[-8.25,-3.375],[-11,3]],"v":[[15.75,188.625],[18.75,195.75],[42.875,208],[64.875,205.375],[83.5,216.125],[94.75,224.125],[89.125,208.875],[71.5,190.75],[37.625,197.125]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[4.25,-6.25],[10.25,3.75],[8.5,-3.5],[3.75,-4],[4.5,-9.5],[5.25,-8],[-6.5,-1.25],[-2.75,-7.25],[-5,0],[-5.25,-1],[0,0],[2,8.25],[-4,6.5],[-3,6.5],[-6.75,5.75],[6.75,15.25]],"o":[[-4.25,6.25],[-10.25,-3.75],[-8.5,3.5],[-3.75,4],[-4.5,9.5],[-5.25,8],[6.5,1.25],[2.75,7.25],[5,0],[5.25,1],[0,0],[-2,-8.25],[4,-6.5],[3,-6.5],[6.75,-5.75],[-6.75,-15.25]],"v":[[-251.5,-110.25],[-268,-104.25],[-287,-103.75],[-301.75,-90.25],[-318.5,-80.5],[-325,-48],[-317.75,-31],[-307,-17.75],[-289,-8],[-277.25,-4.75],[-266.75,-5.75],[-257,-19.75],[-263,-38.75],[-249.25,-52.5],[-240.75,-78],[-229.75,-103]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[9.034,-0.539],[0,0],[-10.25,-16],[0,0],[-7.25,1.25],[0,0],[10,14.75],[3.301,-0.009],[0,0],[1.981,3.164]],"o":[[-16.75,1],[0,0],[10.25,16],[0,0],[7.25,-1.25],[0,0],[-4.317,-6.367],[-4.345,0.011],[0,0],[-2.319,-3.704]],"v":[[-135.25,-65.5],[-151.25,-49.25],[-155.25,-20.5],[-122.75,-23.25],[-109.5,-23.5],[-100.75,-28.5],[-98,-47.25],[-109.748,-51.91],[-117,-52.25],[-119.299,-58.439]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[7.5,-2.75],[-0.25,-5.75],[9.5,-4.5],[-3.75,-15.5],[-5.75,-4.5],[-6.5,0],[-2,5.25],[0.75,4],[-0.75,3.5],[5.5,12.5]],"o":[[-7.5,2.75],[0.25,5.75],[-9.5,4.5],[3.75,15.5],[5.75,4.5],[6.5,0],[2,-5.25],[-0.75,-4],[0.75,-3.5],[-5.5,-12.5]],"v":[[-182.5,27.5],[-197.5,47],[-210.5,57],[-218,89],[-197.25,97.75],[-178.5,97.5],[-160,90.25],[-152.75,69.5],[-157.75,57.5],[-153.75,35.75]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[1.75,-1.375],[-3.5,-1],[-1,-5.75],[-2.75,-8.75],[3.5,-11],[-10,-0.75],[-3,2.25],[-5.25,-2.5],[-3.125,1.125],[-1.125,5.625],[0,0],[4.625,-2.5],[4.375,-1.5],[10,2.5],[6.875,5.75],[3.5,8.75],[0.625,6]],"o":[[-1.75,1.375],[3.5,1],[1,5.75],[2.75,8.75],[-3.5,11],[10,0.75],[3,-2.25],[5.25,2.5],[3.125,-1.125],[1.125,-5.625],[0,0],[-4.625,2.5],[-4.375,1.5],[-10,-2.5],[-6.875,-5.75],[-3.5,-8.75],[-0.625,-6]],"v":[[-148.75,110.625],[-149.75,116.75],[-141.5,123.5],[-133.25,141.75],[-135.25,171],[-118.5,187],[-100,176.5],[-76.5,176.25],[-68.625,183.375],[-58.375,174.375],[-59.375,159],[-67.625,167.125],[-81.125,172.375],[-99.25,168.875],[-121,153.375],[-132.75,135.125],[-135.375,118.375]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":13.2,"s":[0,0],"h":1},{"t":14.4,"s":[100,100],"h":1},{"t":15.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 11","np":5,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.097,-0.585],[-4.25,-7],[-13.75,0.25],[-7.5,-3.5],[-4.75,-6.25],[-3.75,1.5],[6.25,12],[13.25,0],[11.75,0.75]],"o":[[-1.75,0.25],[4.25,7],[13.75,-0.25],[7.5,3.5],[4.75,6.25],[3.75,-1.5],[-6.25,-12],[-13.25,0],[-11.75,-0.75]],"v":[[8.75,179],[14.75,195.75],[38.5,210],[67.25,209.5],[86,228.5],[103.75,234.75],[93.25,213.5],[72,186],[33.5,192]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[16,12.25],[7.25,-2.5],[25.75,-11.5],[2.25,-14.75],[-9.25,-5.75],[-4.5,-8.25],[-8.25,-3],[-4.5,6.75],[0,10.75],[-11.25,6],[-3.25,4],[-0.75,7.5],[-9,0]],"o":[[-16,-12.25],[-7.25,2.5],[-25.75,11.5],[-2.25,14.75],[9.25,5.75],[4.5,8.25],[8.25,3],[4.5,-6.75],[0,-10.75],[11.25,-6],[3.25,-4],[0.75,-7.5],[9,0]],"v":[[-222,-108.5],[-251,-99.75],[-295.25,-94.5],[-326.75,-49],[-314,-21.5],[-298,-0.25],[-278,15.25],[-254.5,7.75],[-254,-16],[-239.25,-37.75],[-230.5,-41],[-232.25,-58.25],[-221.5,-68.5]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[9.75,1.5],[0,0],[2.5,-4.5],[0,-11.25],[-14,-2],[-6,2.5],[-6.75,3.5],[-0.5,2.25],[-1.5,-4],[0.25,6],[1.5,-1.75],[2.5,3.75],[8.25,4.25],[6.5,0.75]],"o":[[-9.75,-1.5],[0,0],[-2.5,4.5],[0,11.25],[14,2],[6,-2.5],[6.75,-3.5],[0.5,-2.25],[1.5,4],[-0.25,-6],[-1.5,1.75],[-2.5,-3.75],[-8.25,-4.25],[-6.5,-0.75]],"v":[[-137,-61],[-145.5,-57.75],[-148.25,-48.5],[-160.75,-27.75],[-149.75,-0.75],[-123.75,-8.75],[-97,-11],[-84.25,-24.75],[-75.75,-25.25],[-68.75,-29],[-75,-35.25],[-81.25,-32],[-94,-48],[-117.75,-48.75]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[10,0.5],[14.5,-4.75],[0,-7],[5.25,-4],[-10.25,-20.75],[-18.25,4],[0.5,5],[-4.5,5.5],[-0.75,7.25],[0.25,4.25]],"o":[[-7.31,-0.365],[-14.5,4.75],[0,7],[-5.25,4],[10.25,20.75],[18.25,-4],[-0.5,-5],[4.5,-5.5],[0.75,-7.25],[-0.25,-4.25]],"v":[[-155.5,14.75],[-183.5,24.75],[-192,39.75],[-200,55],[-214.75,94.5],[-164.5,116.75],[-150.5,86.75],[-149,70.75],[-136,55],[-137.75,25.25]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ind":4,"ty":"sh","ix":5,"ks":{"a":0,"k":{"i":[[0,0],[1.25,-6.25],[-6.25,-5.5],[4,-5.75],[-19,-1.25],[-9.75,0],[-1.75,-5],[-3.5,8],[0.75,3.25],[0,0],[8.25,-2.5],[13.25,3],[1,5.25],[3.75,2],[-1.5,4.75],[1.5,2.25]],"o":[[0,0],[-1.25,6.25],[6.25,5.5],[-4,5.75],[19,1.25],[9.75,0],[1.75,5],[3.5,-8],[-0.75,-3.25],[0,0],[-8.25,2.5],[-13.25,-3],[-1,-5.25],[-3.75,-2],[1.5,-4.75],[-1.5,-2.25]],"v":[[-142.75,115.5],[-140.25,130],[-134.75,146.5],[-133.75,166],[-124.5,192.5],[-95.25,175.25],[-70.5,181.25],[-55.5,182.5],[-55.25,162.25],[-59,155.5],[-67.25,167.25],[-93,167.5],[-111.75,155.25],[-127.25,140.75],[-134,133.5],[-136.5,119.5]],"c":true},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":5,"ty":"sh","ix":6,"ks":{"a":0,"k":{"i":[[5.5,-7.25],[-4,-4.75],[0,0],[-4,5.25],[-3.25,-7],[-0.75,3],[7,-0.75],[5,4.25]],"o":[[-5.5,7.25],[4,4.75],[0,0],[4,-5.25],[3.25,7],[0.75,-3],[-7,0.75],[-5,-4.25]],"v":[[-62.5,115.75],[-64.25,138.25],[-57.75,149.75],[-56,131],[-41.25,130.5],[-24,130.25],[-34.5,121],[-48.25,118.75]],"c":true},"ix":2},"nm":"Path 6","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":12,"s":[0,0],"h":1},{"t":13.2,"s":[100,100],"h":1},{"t":14.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 10","np":6,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.75,-3.375],[-4.125,-6.625],[-4.5,3.125],[0.375,3.75],[2,4.25]],"o":[[-4.75,3.375],[4.125,6.625],[4.5,-3.125],[-0.375,-3.75],[-2,-4.25]],"v":[[-149.375,-123.125],[-152.625,-106.625],[-138.875,-101.625],[-132,-109.75],[-138,-122.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[1.5,3.25],[4.75,-13.75],[-3.951,-6.079],[0,0],[-4.25,3.25],[-5,-2.5],[-9.755,-3.147],[-4.25,-11.25],[-13.75,-15.25],[-13,3.5],[-13.5,-15.5],[10.5,5.5],[3.5,11.75],[18.261,0.41],[12.5,0.25],[8.5,13],[2,7],[3.25,8],[14.5,0]],"o":[[-1.5,-3.25],[-4.75,13.75],[3.25,5],[0,0],[4.25,-3.25],[5,2.5],[7.75,2.5],[6.579,17.415],[13.75,15.25],[13,-3.5],[13.5,15.5],[-10.5,-5.5],[-3.5,-11.75],[-22.25,-0.5],[-7.351,-0.147],[-8.5,-13],[-2,-7],[-3.25,-8],[-14.5,0]],"v":[[-58,103.5],[-73,115.25],[-67.75,137],[-61,157],[-52.5,134],[-38.25,132],[-25.5,140.25],[-13.25,157.5],[16.5,206.25],[52.25,211.25],[80.25,231.25],[115.75,219.5],[97.25,197.5],[73.5,169.75],[34.75,184.75],[-0.75,165.75],[-10,148.25],[-21.5,120.25],[-37.75,113.5]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[13.75,-0.5],[0,0],[-6,-17],[5.75,-5.5],[15.5,-4.25],[3.25,-7],[3.25,-5.25],[0,0],[8.25,-1],[-9,-4],[0,-8.25],[-4.5,-11],[-11.25,1],[-8,-2.25],[-0.5,-11],[0,0],[4,-14.75],[-11.25,-10.25],[0,0],[-9.25,4.25],[-3.75,-3.75],[-4,7.25],[0.5,9.5],[0,0],[0.5,-6],[8.75,-1.25],[4.25,5],[0,0],[8.75,8.75],[-1.75,3.5],[0,6.5],[-2.75,9],[2.75,8.25],[0,0],[-8,6.75],[-7.25,1],[0,0],[-2.035,8.211],[0,0],[14.75,1.25],[0,0]],"o":[[-13.75,0.5],[0,0],[6,17],[-5.75,5.5],[-15.5,4.25],[-3.25,7],[-3.25,5.25],[0,0],[-8.25,1],[9,4],[0,8.25],[4.5,11],[11.25,-1],[8,2.25],[0.5,11],[0,0],[-4,14.75],[11.25,10.25],[0,0],[9.25,-4.25],[3.75,3.75],[4,-7.25],[-0.5,-9.5],[0,0],[-0.5,6],[-8.75,1.25],[-4.25,-5],[0,0],[-8.75,-8.75],[1.75,-3.5],[0,-6.5],[2.75,-9],[-2.75,-8.25],[0,0],[8,-6.75],[7.25,-1],[0,0],[7.25,-29.25],[0,0],[-14.75,-1.25],[0,0]],"v":[[-136.25,-66],[-154,-49.25],[-163.5,-22.25],[-154.75,0.75],[-177.25,9.5],[-195.5,26.25],[-197.5,41.25],[-205.5,42.5],[-223.25,35.5],[-223.75,54.5],[-211.75,64.75],[-218.5,96.75],[-172.75,124],[-148.25,121],[-136.75,138.25],[-133.5,149.25],[-144.5,165],[-140.25,196.5],[-113,202],[-102.75,187.75],[-76.25,182],[-52.25,184.5],[-55.5,156.5],[-55.25,138.25],[-64,146.5],[-68.25,159.25],[-102.75,157],[-107,133.75],[-123.75,136.25],[-132.75,113.5],[-121,98.25],[-122.5,78.5],[-119.75,46.75],[-127,29.5],[-105,4.5],[-86.75,-5.75],[-77.25,-14.75],[-63,-18.75],[-81,-38],[-100,-54.5],[-121.75,-52.5]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ind":3,"ty":"sh","ix":4,"ks":{"a":0,"k":{"i":[[18.5,-1.5],[0,0],[3.5,1],[2.75,-4.75],[6.5,0.25],[2.75,-6.75],[-0.5,-11.25],[-12.25,-7.5],[0,-6],[-9.5,-5],[-3.5,3.25],[-10.5,9.25],[1.5,4.25],[-3.5,0],[-5.5,9.75],[0,0],[-4.75,3.25],[-6.25,5.75],[1.5,5],[1,6.5]],"o":[[-18.5,1.5],[0,0],[-3.5,-1],[-2.75,4.75],[-6.5,-0.25],[-2.75,6.75],[0.5,11.25],[12.25,7.5],[0,6],[9.5,5],[3.5,-3.25],[10.5,-9.25],[-1.5,-4.25],[3.5,0],[5.5,-9.75],[0,0],[4.75,-3.25],[6.25,-5.75],[-1.5,-5],[-1,-6.5]],"v":[[-229.75,-111.25],[-252.25,-95.25],[-267.5,-96.25],[-280.75,-87.75],[-300.25,-81.75],[-311,-72.25],[-324.5,-41.5],[-304.25,-14.75],[-302.75,6.25],[-284,26.25],[-273.25,19],[-254.5,6.25],[-254,-5],[-253,-18.25],[-236,-31.25],[-240.25,-53.5],[-229.75,-54],[-210,-67],[-200.5,-80.5],[-203.25,-102]],"c":true},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":10.8,"s":[0,0],"h":1},{"t":12,"s":[100,100],"h":1},{"t":13.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 9","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.5,7.25],[2,1.25],[22.75,-8.75],[2.25,-15.25],[7,-7.25],[4.25,-2.5],[-1,-4.75],[3.75,5.5],[-0.25,-6.25],[-1.5,0.25],[5,-10.75],[-8,-9],[-13.75,-8],[2.75,-7.5],[-19.5,-2.75],[-3.5,5.25],[-3.25,-4.25],[-14.5,6.75],[3.75,10],[-7.75,1.75],[-4,-6.75],[-1.25,-8.75],[-9.25,-8],[-14.053,3.011],[-4.397,-5.412],[-11.111,-3.03],[-3.75,4.5],[6.292,5.566],[3,16.5],[10,0],[6.5,-5],[10.5,7.75],[0.5,8.75],[5,7],[15.5,-10],[-4.25,-13],[15.25,7.75],[1.75,7.75],[-9.25,7],[2.5,1.25],[-1,7.25],[-11,13.5],[0,0],[-7.5,3.25],[0,0],[-10,1.25],[-2,10.75],[4.75,-1.75]],"o":[[-10.5,-7.25],[-2,-1.25],[-22.75,8.75],[-2.25,15.25],[-7,7.25],[-4.25,2.5],[1,4.75],[-3.75,-5.5],[0.25,6.25],[1.5,-0.25],[-5,10.75],[8,9],[13.75,8],[-2.75,7.5],[19.5,2.75],[3.5,-5.25],[3.25,4.25],[14.5,-6.75],[-3.75,-10],[7.75,-1.75],[4,6.75],[1.25,8.75],[9.25,8],[10.5,-2.25],[3.25,4],[11,3],[8.036,-9.643],[-6.5,-5.75],[-2.132,-11.727],[-10,0],[-6.5,5],[-10.5,-7.75],[-0.5,-8.75],[-5,-7],[-15.5,10],[4.25,13],[-15.25,-7.75],[-1.75,-7.75],[9.25,-7],[-2.5,-1.25],[1,-7.25],[11,-13.5],[0,0],[7.5,-3.25],[0,0],[10,-1.25],[2,-10.75],[-4.75,1.75]],"v":[[-93.5,-42],[-112,-40.75],[-153.25,-41.75],[-165.5,7.25],[-179.5,24.25],[-193,38],[-200.75,54.75],[-213.25,57.25],[-224,61.5],[-214.5,70],[-211.25,78.5],[-199,116.75],[-157.75,131.25],[-149,166.5],[-132.25,195.25],[-102.25,180.5],[-81,191],[-54.5,190.25],[-48.75,151.75],[-48,137.25],[-15,151],[-8,174.75],[16.25,208.5],[48.25,216.25],[69,230.75],[86.5,236.75],[113.25,237.5],[105.25,210.75],[82,183.5],[64.25,168.25],[45,181.25],[13.25,173.25],[-12.25,135.25],[-26.75,111.25],[-75,103.25],[-69.25,138],[-103.5,142.25],[-124.75,114.5],[-105,82.5],[-106.25,59],[-109.5,43],[-91.75,25.5],[-91.5,10.5],[-78.75,5.75],[-78,-4.75],[-67,-3],[-50.25,-22.5],[-72.25,-37]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[9.75,-2.25],[-8.75,-10],[-8.5,2],[2.25,9],[6,3.75]],"o":[[-9.75,2.25],[8.75,10],[8.5,-2],[-2.25,-9],[-6,-3.75]],"v":[[-150.75,-129.5],[-155.5,-102.25],[-134.25,-91.25],[-119.75,-109],[-131.25,-123.5]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[17.25,9.5],[11,-4],[0,0],[8.5,-2],[9,-12.75],[-1.25,-12],[0,0],[0,-21.25],[0,0],[-10,0],[0,0],[-6.25,11],[-3.5,5],[0,0],[-7.25,9.25],[0,0],[-7.75,9.25]],"o":[[-17.25,-9.5],[-11,4],[0,0],[-8.5,2],[-9,12.75],[1.25,12],[0,0],[0,21.25],[0,0],[10,0],[0,0],[6.25,-11],[3.5,-5],[0,0],[7.25,-9.25],[0,0],[7.75,-9.25]],"v":[[-202.5,-107.5],[-234.75,-105.25],[-241.75,-89.25],[-257,-89],[-299.5,-68.5],[-300.25,-26.5],[-282.5,7.75],[-292.25,27],[-276,46.75],[-264,54],[-253.5,44.5],[-238.25,31.25],[-230.75,7.5],[-234,-9.25],[-211.25,-23],[-206,-57.5],[-195.5,-65.75]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":9.6,"s":[0,0],"h":1},{"t":10.8,"s":[100,100],"h":1},{"t":12,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[13.5,-0.5],[0,0],[9.75,-15],[-6.5,-8.5],[1.5,-7.5],[-14.5,-10.75],[-3,-1.75],[1.75,-8.5],[-6.75,-5.75],[0,0],[-8,-8],[-5.75,-7.5],[-0.5,-13.25],[-5.25,-6.75],[0,0],[-12.5,-3.5],[-12.5,2],[-7,10.5],[2.25,6.75],[-14.75,2.75],[-4.5,-5.5],[-3.5,-13],[-7.25,-5.25],[-13.5,0],[-3,-8.5],[-13.75,-6],[-6,3.25],[9,5.75],[2.25,2.25],[2,6.75],[11.25,7.5],[5.5,-5.25],[13.25,5.25],[4.5,8.25],[1.75,10.5],[8,-0.25],[7.25,0],[0.75,-5.75],[3.5,-5],[5.25,6.75],[-5.75,5],[2,7.75],[0,0],[-8.25,3.75],[0,9],[-2.75,1.75],[-3.75,7.5],[0,0],[-6.25,11.25],[12.25,0],[8.5,-3.25],[0,0],[17.5,-4.75],[2.75,-20.5],[13.5,-11],[4.5,4],[-5.75,12.5],[-9.25,8.25],[-0.5,9.75],[-5.75,8.5],[7.25,5.75],[7.5,7]],"o":[[-13.5,0.5],[0,0],[-9.75,15],[6.5,8.5],[-1.5,7.5],[14.5,10.75],[3,1.75],[-1.75,8.5],[6.75,5.75],[0,0],[8,8],[5.75,7.5],[0.5,13.25],[5.25,6.75],[0,0],[12.5,3.5],[12.5,-2],[7,-10.5],[-2.25,-6.75],[14.75,-2.75],[4.5,5.5],[3.5,13],[7.25,5.25],[13.5,0],[3,8.5],[13.75,6],[11.011,-5.964],[-8.022,-5.125],[-2.25,-2.25],[-2,-6.75],[-11.25,-7.5],[-5.5,5.25],[-13.25,-5.25],[-4.5,-8.25],[-1.75,-10.5],[-8,0.25],[-7.25,0],[-0.75,5.75],[-3.5,5],[-5.25,-6.75],[5.75,-5],[-2,-7.75],[0,0],[8.25,-3.75],[0,-9],[2.75,-1.75],[3.75,-7.5],[0,0],[6.25,-11.25],[-12.25,0],[-8.5,3.25],[0,0],[-17.5,4.75],[-2.75,20.5],[-13.5,11],[-4.5,-4],[5.75,-12.5],[9.25,-8.25],[0.5,-9.75],[5.75,-8.5],[-7.25,-5.75],[-7.5,-7]],"v":[[-228.25,-112.5],[-251.25,-98.25],[-299.5,-65.5],[-298.75,-15.25],[-280.5,13.5],[-271.25,48.25],[-246,66.5],[-241.25,78.75],[-222.75,93.75],[-210.5,104],[-201.5,122.75],[-178.5,135.25],[-165.5,160.75],[-153.25,184.75],[-108.25,184.5],[-91.75,197.5],[-73.25,195.5],[-45.5,179.5],[-43,160.5],[-34,143.75],[-19.5,154],[-12,175.75],[9.75,206.75],[36.25,214.5],[50.5,227.75],[85,233.75],[116.5,242.25],[109.5,220.25],[99,206.5],[86,186.25],[65.25,161],[43.75,168.5],[14.5,162.5],[-6,137],[-10.75,114],[-25.25,98.5],[-57.75,97.25],[-70.5,104.75],[-81.25,119.75],[-105.75,123],[-93,106],[-88,91],[-92.75,63],[-75.5,56.25],[-68.5,33],[-80.75,15.5],[-68.75,0.25],[-53.75,2.25],[-43.25,-4.75],[-61,-38.5],[-84.5,-28.5],[-101.75,-26.5],[-139.5,-33.5],[-165.5,5.75],[-172.5,35.75],[-226.25,36],[-221.25,6.75],[-196,-21.25],[-188.5,-52.25],[-179.25,-71.75],[-179,-92.25],[-189.5,-109.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[6.25,3.75],[11,-10],[-2.5,-7.25],[-3.25,-6.25],[-12.25,4.25],[1.5,9.75]],"o":[[-6.25,-3.75],[-11,10],[2.5,7.25],[3.25,6.25],[12.25,-4.25],[-1.5,-9.75]],"v":[[-134.25,-130],[-155.75,-127],[-166.5,-107.25],[-152.75,-96.25],[-123.75,-77.75],[-113.75,-110.75]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":8.4,"s":[0,0],"h":1},{"t":9.6,"s":[100,100],"h":1},{"t":10.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 7","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[10.5,9],[6,-0.5],[3.5,-3.5],[0,0],[30.5,-0.5],[0,0],[16,-5.5],[2,-24.5],[0,0],[-11.5,-9.5],[-2,-7],[-4.25,-3.75],[-8.25,-7.75],[0.25,-3],[-10.75,-3.25],[0,-4],[-4,-9.25],[-11,-4.5],[0,0],[-7.5,-3],[-11.25,5],[0,0],[-3.5,3],[-2.75,-3.5],[2.5,-7.5],[-1.75,-6.25],[-13.25,-0.5],[0,0],[-8.5,-7.75],[-12.5,-5],[-8,2],[-6.25,9],[6,0],[9,6],[9,18.5],[5.5,-2],[5.5,11],[0.5,14.5],[11.5,0.5],[0,0],[-1,7],[-8,3],[-2,6],[7.5,3.5],[0,0],[-6,23.5],[14,0],[7,-2],[9.5,-0.5],[0,0],[11.5,-18],[0,0],[4,-4.5],[2.5,1.5],[12,6.5],[-1.5,0],[-6,17],[0,0],[-7,6],[0,0],[-3,-14],[-6,2],[-9,6],[-0.5,11.5]],"o":[[-10.5,-9],[-6,0.5],[-3.5,3.5],[0,0],[-30.5,0.5],[0,0],[-16,5.5],[-2,24.5],[0,0],[11.5,9.5],[2,7],[4.25,3.75],[8.25,7.75],[-0.25,3],[10.75,3.25],[0,4],[4,9.25],[11,4.5],[0,0],[7.5,3],[11.25,-5],[0,0],[3.5,-3],[2.75,3.5],[-2.5,7.5],[1.75,6.25],[13.25,0.5],[0,0],[8.5,7.75],[12.5,5],[8,-2],[6.25,-9],[-6,0],[-9,-6],[-9,-18.5],[-5.5,2],[-5.5,-11],[-0.5,-14.5],[-11.5,-0.5],[0,0],[1,-7],[8,-3],[2,-6],[-7.5,-3.5],[0,0],[6,-23.5],[-14,0],[-7,2],[-9.5,0.5],[0,0],[-11.5,18],[0,0],[-4,4.5],[-2.5,-1.5],[-12,-6.5],[1.5,0],[6,-17],[0,0],[7,-6],[0,0],[1.128,5.266],[6,-2],[9,-6],[0.5,-11.5]],"v":[[-116.5,-131.5],[-142.5,-129],[-162,-125],[-175,-108.5],[-209,-117.5],[-245.5,-91],[-274.5,-86.5],[-301.5,-28.5],[-270,22],[-277,59],[-246.5,75],[-226,98],[-203,102.25],[-192.75,121.25],[-171.5,131.5],[-156.25,150.25],[-151.75,165],[-127.75,186.25],[-98,182.75],[-82.5,189],[-51,187.75],[-35.5,159.75],[-37,147.25],[-21,150],[-18.75,165.75],[-10,194.25],[23.25,216.75],[37,211.5],[53.75,227.75],[84,242.5],[110,241.5],[130.5,224.25],[118.75,206.75],[96.5,199.5],[74,165.5],[30,165],[9.5,152],[-9.5,97.5],[-47,80.5],[-60,93.5],[-72.5,79],[-52,69],[-38.5,48],[-52.5,34.5],[-61.5,25.5],[-26,-3.5],[-56,-41],[-82,-27],[-95,-34.5],[-103.5,-30],[-139,-12],[-146,21],[-160.5,35.5],[-179,32.5],[-201.5,28.5],[-212.5,4],[-182,-31],[-186.5,-59],[-171,-61],[-164.5,-84],[-147,-70.5],[-130,-64.5],[-114.5,-73.5],[-106,-103]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":7.2,"s":[0,0],"h":1},{"t":8.4,"s":[100,100],"h":1},{"t":9.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 6","np":3,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[26.5,0],[6,-7],[17,0],[0,-6.5],[20.5,-6],[-3.5,-26],[-0.5,-10],[-17,-4.75],[-5,-14.25],[-3.5,4.5],[-3,-4.25],[-10,-8.25],[1.5,-2.5],[-19.25,-9.5],[-14.75,-1.75],[-4.25,5.75],[-7.25,-1.25],[0.5,-8.25],[-4.75,-2.5],[-12.5,-11],[0,0],[-10,-9.25],[-14.5,-2.25],[-7.75,3.25],[-4.5,5.25],[3.75,-0.5],[4.5,-0.5],[9,1],[0,13],[15,-5],[17.5,7.5],[0,16],[0,0],[-2.5,8.5],[0,0],[-6.5,26.5],[19,6.5],[15.5,-9.5],[-3.5,-13],[12,-8],[0,0],[12,4],[1.5,6.5],[0,0],[2,13],[-12.5,3],[0,0],[-20.5,0.5],[1,6],[0,12.5]],"o":[[-26.5,0],[-6,7],[-17,0],[0,6.5],[-20.5,6],[3.5,26],[0.5,10],[17,4.75],[5,14.25],[3.5,-4.5],[3,4.25],[10,8.25],[-1.5,2.5],[19.25,9.5],[14.75,1.75],[4.25,-5.75],[7.25,1.25],[-0.5,8.25],[4.75,2.5],[12.5,11],[0,0],[10,9.25],[14.5,2.25],[7.75,-3.25],[4.5,-5.25],[-3.75,0.5],[-4.5,0.5],[-9,-1],[0,-13],[-15,5],[-17.5,-7.5],[0,-16],[0,0],[2.5,-8.5],[0,0],[6.5,-26.5],[-19,-6.5],[-15.5,9.5],[3.5,13],[-12,8],[0,0],[-12,-4],[-1.5,-6.5],[0,0],[-2,-13],[12.5,-3],[0,0],[20.5,-0.5],[-1,-6],[0,-12.5]],"v":[[-132.5,-138],[-177,-118],[-203,-114.5],[-236.5,-87],[-265.5,-75.5],[-306.5,-12.5],[-295.25,43.25],[-267.5,69.75],[-238.5,94.5],[-213.25,108],[-192,109.25],[-161,132.75],[-152.25,151],[-123.5,172.5],[-87.5,182.5],[-41.75,171],[-24.25,157.75],[-20,174.5],[-8.75,190.5],[4,211.75],[39.25,214],[57,231.75],[87.5,244.25],[114.25,234.5],[139.25,209.5],[141.5,195],[126.5,199],[99.5,198],[73.5,173],[44.5,153.5],[12.5,153],[-1,92.5],[-31,76],[-24,55.5],[-32,30.5],[-12,1.5],[-46,-41],[-95,-32],[-128,3.5],[-142,24],[-148,46],[-166.5,36.5],[-193.5,26],[-201.5,6.5],[-180.5,-19.5],[-174.5,-44],[-159.5,-60.5],[-128,-57],[-98,-80.5],[-102.5,-106.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":6,"s":[0,0],"h":1},{"t":7.2,"s":[100,100],"h":1},{"t":8.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 5","np":1,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[9.5,-3.25],[17.5,-1.5],[0,0],[18.5,0],[12.75,-4],[3.75,-2.25],[23.25,-7],[0,0],[-11.5,-43.25],[-6.25,-0.5],[-2,-12.75],[-15.5,-0.25],[-7,-2.5],[-2.5,-9.25],[-5.5,-7],[-7,-7.75],[-18.5,-1],[-11,6.5],[0,0],[-0.75,-7.25],[-18.25,-10.25],[-22.75,-5.25],[-2,-9],[-15.75,0],[-2.25,5.25],[-7.25,14],[5.75,-1.5],[4.25,0],[1,12],[16.75,14.5],[2.5,-4],[8.25,8.75],[0,0],[8.25,20.75],[7.75,-1.25],[-1.5,3.75],[3.25,6.75],[-7.25,5.5],[2.25,7],[5.5,2],[0,0],[18,-6],[5.75,-4.5],[26.25,-9.75],[0,0],[16.25,-8],[7,8.25],[0,0],[-9.5,13.25],[0,0],[-8,11],[-14,-4.5],[-12,4.25],[6.75,8],[0.75,15.25]],"o":[[-9.5,3.25],[-17.5,1.5],[0,0],[-18.5,0],[-12.75,4],[-3.75,2.25],[-23.25,7],[0,0],[11.5,43.25],[6.25,0.5],[2,12.75],[15.5,0.25],[7,2.5],[2.5,9.25],[5.5,7],[7,7.75],[18.5,1],[11,-6.5],[0,0],[0.75,7.25],[18.25,10.25],[22.75,5.25],[2,9],[15.75,0],[2.25,-5.25],[7.25,-14],[-5.75,1.5],[-4.25,0],[-1,-12],[-16.75,-14.5],[-2.5,4],[-8.25,-8.75],[0,0],[-8.25,-20.75],[-7.75,1.25],[1.5,-3.75],[-3.25,-6.75],[7.25,-5.5],[-2.25,-7],[-5.5,-2],[0,0],[-18,6],[-5.75,4.5],[-26.25,9.75],[0,0],[-16.25,8],[-7,-8.25],[0,0],[9.5,-13.25],[0,0],[8,-11],[14,4.5],[12,-4.25],[-6.75,-8],[-0.75,-15.25]],"v":[[-134.25,-126.75],[-164.5,-121.75],[-179.25,-98.75],[-201.75,-107.5],[-227.5,-90.5],[-244.75,-70],[-269.5,-69],[-290.25,-13],[-287.25,43.75],[-244.5,82.5],[-239,110],[-198.25,127.25],[-164.75,105.5],[-160.75,126.75],[-124.5,144.75],[-115,158.75],[-77.25,174],[-45.5,166.5],[-19.25,151],[-20,167.5],[-9.5,195.75],[31.25,201.75],[43.25,227.75],[83.75,243.5],[115.75,226],[142.25,184],[111.25,193.5],[97.5,197],[80.25,182.25],[66,142],[31.5,144.75],[13.5,146.25],[1.25,121.5],[8,92.75],[-17.25,74],[-20.25,60],[-22.75,38.25],[-10,23],[-5.5,-3.25],[-29.5,-23.5],[-30,-33.25],[-56.25,-36.25],[-77,-20],[-113.5,-12.75],[-124.75,24.75],[-140.75,44],[-178.25,33],[-186.25,9.5],[-161.5,-9.5],[-166.5,-35.75],[-151.75,-48],[-123.75,-51],[-99.75,-51.5],[-88,-83.25],[-100.5,-113.5]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":4.8,"s":[0,0],"h":1},{"t":6,"s":[100,100],"h":1},{"t":7.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 4","np":1,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[18,-2.25],[2,-8.75],[0,0],[25.75,-5.5],[0,0],[1,-2.75],[6.5,-5.75],[0.25,-16.75],[0,0],[-21.25,-36.75],[0,0],[-23.25,-14],[0,0],[-7,-3.75],[0,0],[-18.5,0.5],[0,0],[-15.25,-13.25],[-23.5,6.75],[-14.25,-3.5],[0.5,-7.75],[-13.75,1.75],[-11.25,-1.25],[2.5,-7],[-14,-5],[-3.25,9.25],[-15.75,10.5],[0,0],[4.25,-0.75],[10.75,-2.5],[0,0],[12.5,4],[-2.25,3.5],[16,8.25],[0,0],[7.75,-0.25],[-3.5,10.25],[12.25,17.75],[0,0],[-6.75,6.5],[0,0],[35.959,26.253],[0,0],[16.5,-24.25],[0,0],[8,0.25],[0.467,6.07],[0,0],[3.25,22],[-6.25,3.25],[0,0],[-7.75,5.5],[0,10.5],[8.5,10.5]],"o":[[-18,2.25],[-2,8.75],[0,0],[-25.75,5.5],[0,0],[-1,2.75],[-6.5,5.75],[-0.25,16.75],[0,0],[21.25,36.75],[0,0],[23.25,14],[0,0],[7,3.75],[0,0],[18.5,-0.5],[0,0],[15.25,13.25],[23.5,-6.75],[14.25,3.5],[-0.5,7.75],[13.75,-1.75],[11.25,1.25],[-2.5,7],[14,5],[3.25,-9.25],[18.555,-12.37],[0.25,-1.25],[-20.879,3.685],[-10.75,2.5],[0,0],[-12.5,-4],[2.25,-3.5],[-16,-8.25],[0,0],[-7.75,0.25],[3.5,-10.25],[-12.25,-17.75],[0,0],[6.75,-6.5],[0,0],[-56.5,-41.25],[0,0],[-16.5,24.25],[0,0],[-8,-0.25],[-1.75,-22.75],[0,0],[-3.25,-22],[6.25,-3.25],[0,0],[7.75,-5.5],[0,-10.5],[-8.5,-10.5]],"v":[[-138,-120],[-174.25,-101.25],[-176.5,-84],[-213,-90],[-233,-69.25],[-240.25,-65],[-256.25,-63],[-276,-31],[-274,-10.5],[-279.5,48],[-238.75,81],[-225.75,113],[-192.25,114],[-188.5,124.75],[-172.25,127.5],[-156.75,138],[-136,130.5],[-117,153.25],[-54,174.75],[-19.5,153.25],[-11.5,173.75],[3.5,186.25],[30,183.75],[43,202.25],[68.75,231.25],[108.25,212.25],[132.25,179.5],[141.25,122.75],[134.25,153.75],[113,172.75],[99,188],[88.75,172.25],[79.25,156.25],[75.25,120.5],[47.5,129.25],[31,131],[18.75,108.25],[25.5,69.5],[-6.75,55],[-14,44.75],[-3.75,42.5],[-3.5,-16.25],[-76.25,-7.5],[-117.75,8.5],[-133,63.75],[-144.75,60.5],[-145.25,49.25],[-168,21.75],[-149.25,-18.5],[-137.5,-42.25],[-124.25,-43],[-100.25,-35.75],[-78.75,-70.5],[-105.75,-109.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":3.6,"s":[0,0],"h":1},{"t":4.8,"s":[100,100],"h":1},{"t":6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 3","np":1,"cix":2,"bm":0,"ix":13,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[26.25,-5],[2.25,-10.25],[0,0],[5.25,-9.75],[10.5,-6],[1.75,-28],[0,0],[-41.25,-16.25],[-11.25,5.75],[0,-16.75],[-46.25,-16.25],[0,0],[-11.75,-3.75],[0,0],[-3,-3.75],[0,0],[-5,-11.25],[-15.5,9.25],[0,0],[-3.75,21.25],[0,0],[-1.25,5.75],[-4.5,3.25],[7.5,2],[1,-11],[0,0],[5,-4.75],[0,0],[15.5,9.75],[0,0],[2.75,1.25],[0,0],[18.25,10.25],[0,0],[6.5,6.5],[-6.5,2],[5.25,13],[25.75,2.25],[9.25,-14.25],[7,-7.5],[13,-0.5],[-4.75,9.5],[-0.75,13],[-5.25,7.5],[-3.5,10.5],[9.25,10.5]],"o":[[-26.25,5],[-2.25,10.25],[0,0],[-5.25,9.75],[-10.5,6],[-1.75,28],[0,0],[41.25,16.25],[11.25,-5.75],[0,16.75],[46.25,16.25],[0,0],[11.75,3.75],[0,0],[3,3.75],[0,0],[5,11.25],[15.5,-9.25],[0,0],[3.75,-21.25],[0,0],[1.25,-5.75],[4.5,-3.25],[-7.5,-2],[-1,11],[0,0],[-5,4.75],[0,0],[-15.5,-9.75],[0,0],[-2.75,-1.25],[0,0],[-18.25,-10.25],[0,0],[-6.5,-6.5],[6.5,-2],[-5.25,-13],[-25.75,-2.25],[-9.25,14.25],[-7,7.5],[-13,0.5],[4.75,-9.5],[0.75,-13],[5.25,-7.5],[3.5,-10.5],[-9.25,-10.5]],"v":[[-120,-103.5],[-166.5,-76.75],[-174,-66.75],[-195.5,-55.25],[-215.75,-35],[-231.75,21.5],[-209,57.25],[-173.75,109.5],[-110.25,102.25],[-89.25,117],[-51.5,179],[26.5,149.75],[41.25,161.25],[62,159.5],[61.75,164.75],[70,168.25],[64.25,188.25],[110,198.25],[125.75,175.75],[149,155],[139,123.25],[144,117.5],[142.75,101.75],[145.5,93.5],[127,107.5],[129,118.75],[116.5,125.25],[106.25,133.25],[95.25,103.5],[61,106.25],[58,100.5],[50.5,103.25],[47.75,70.25],[21.75,60.75],[19.25,44.75],[19.5,35],[24.25,16.5],[-15,-13.75],[-64,4],[-88,39.25],[-109.75,53.25],[-135.25,41.25],[-112.75,8.5],[-106.25,-23.75],[-80.25,-42.25],[-79,-83.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":2.4,"s":[0,0],"h":1},{"t":3.6,"s":[100,100],"h":1},{"t":4.8,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":1,"cix":2,"bm":0,"ix":14,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[20.665,-5.933],[0,0],[5.459,-28.097],[0,0],[-4.435,-3.669],[0,0],[-4.582,-11.429],[-9.681,2.519],[0,0],[-6.875,-5.829],[-0.757,-0.823],[-7.894,3.307],[0,0],[-24.034,3.258],[-5.001,9.759],[-9.168,8.431],[0,0],[9.159,19.219],[8.451,2.256],[0,0],[4.41,11.739],[0,0]],"o":[[-20.665,5.933],[0,0],[-5.459,28.097],[0,0],[4.435,3.669],[0,0],[4.582,11.429],[9.681,-2.519],[0,0],[6.875,5.829],[0.757,0.823],[7.894,-3.307],[0,0],[24.034,-3.258],[5.001,-9.759],[8.642,-7.947],[0,0],[-9.159,-19.219],[-8.451,-2.256],[0,0],[-4.41,-11.739],[0,0]],"v":[[-2.431,18.417],[-17.858,38.972],[-43.163,68.606],[-29.189,93.725],[-26.259,103.027],[-16.814,104.217],[-12.492,127.426],[11.358,141.647],[29.83,138.945],[33.52,150.89],[50.221,160.141],[61.593,164.419],[75.154,161.826],[97.162,155.786],[121.566,131.932],[128.358,120.447],[136.511,104.22],[100.491,103.313],[81.983,76.895],[63.649,80.077],[58.516,40.455],[21.06,20.517]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":1.2,"s":[0,0],"h":1},{"t":2.4,"s":[100,100],"h":1},{"t":3.6,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":1,"cix":2,"bm":0,"ix":15,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[9.774,-0.796],[0,0],[7.841,-8.464],[2.677,-3.235],[-13.747,-6.663],[-2.336,-0.493],[0,0],[-6.349,5.276],[-5.89,1.825],[0,0],[15.633,1.442],[6.146,2.729]],"o":[[-6.82,0.556],[0,0],[-7.841,8.464],[-14.355,17.35],[13.747,6.663],[17.347,3.661],[0,0],[6.349,-5.276],[5.89,-1.825],[0,0],[-13.921,-1.284],[-3.833,-1.702]],"v":[[85.007,94.865],[73.476,96.058],[50.898,95.166],[51.411,110.421],[57.603,155.667],[87.234,148.858],[106.067,131.593],[118.908,126.488],[131.563,113.411],[140.081,102.766],[121.19,106.026],[106.137,96.611]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":0,"s":[0,0],"h":1},{"t":1.2,"s":[100,100],"h":1},{"t":2.4,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 16","np":1,"cix":2,"bm":0,"ix":16,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.058,2.203],[5.331,-5.104],[0,0],[0.725,-7.289],[0,0],[-1.674,-2.072],[0,0],[-7.973,3.836],[0,0],[-5.784,3.46],[0.778,2.673],[0,0],[-0.026,1.705],[4.025,4.496]],"o":[[-2.988,-0.932],[-5.349,5.122],[0,0],[-0.979,9.839],[0,0],[1.674,2.072],[0,0],[7.973,-3.836],[0,0],[5.784,-3.46],[-0.778,-2.673],[0,0],[0.026,-1.705],[-4.025,-4.496]],"v":[[116.82,90.994],[102.825,96.035],[98.322,104.973],[91.509,113.329],[93.516,124.89],[95.302,128.602],[100.132,129.494],[109.764,128.754],[117.416,123.548],[123.428,123.026],[129.534,116.364],[136.235,110.94],[133.227,106.8],[128.862,97.728]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"t":-1.2,"s":[0,0],"h":1},{"t":0,"s":[100,100],"h":1},{"t":1.2,"s":[0,0],"h":1}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 17","np":1,"cix":2,"bm":0,"ix":17,"mn":"ADBE Vector Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false}],"ip":0,"op":20.4,"st":0,"bm":0}]},{"id":"comp_6","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"6","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.298],"y":[0]},"t":65,"s":[41.861]},{"i":{"x":[0.793],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[41.861]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.163],"y":[0]},"t":90,"s":[38.579]},{"i":{"x":[0.828],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[38.579]},{"i":{"x":[0.787],"y":[0.901]},"o":{"x":[0.163],"y":[0]},"t":109,"s":[-1.589]},{"i":{"x":[0.712],"y":[1]},"o":{"x":[0.377],"y":[0.004]},"t":261,"s":[23.262]},{"i":{"x":[0.712],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[55.476]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[55.476]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[23.262]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-165.855,602.156,0],"ix":2},"a":{"a":0,"k":[-127.415,604.287,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[7.315,-1.778]],"o":[[-1.99,-3.98],[5.971,-31.843],[0,0],[0,0],[-9.893,2.405]],"v":[[-133.78,643.285],[-139.75,607.462],[-113.877,603.481],[-113.877,629.354],[-120.902,644.778]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"5","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[59.535]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[59.535]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[29.428]},{"t":292,"s":[29.428]}],"ix":10},"p":{"a":0,"k":[-126.246,637.764,0],"ix":2},"a":{"a":0,"k":[-126.246,637.764,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.478,-6.924],[-10.217,-3.654],[-4.333,2.167],[7.167,1.635],[3.5,0]],"o":[[0,0],[10.217,3.654],[4.333,-2.167],[-7.167,-1.635],[-3.5,0]],"v":[[-134.734,640.058],[-125.384,648.18],[-107,649.333],[-107,634.661],[-123.667,629.167]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"4","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[48.619]},{"t":292,"s":[48.619]}],"ix":10},"p":{"a":0,"k":[-110.06,644.266,0],"ix":2},"a":{"a":0,"k":[-110.06,644.266,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.651,-2.416],[-8.295,8.651],[-1.415,1.927],[8.333,0.345],[5,-5.865]],"o":[[0,0],[8.295,-8.651],[1.415,-1.927],[-8.333,-0.345],[-5,5.865]],"v":[[-116.5,649.5],[-99.245,647.07],[-88.815,635.591],[-96.65,625.842],[-114.65,638.799]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"9","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.298],"y":[0]},"t":65,"s":[10.035]},{"i":{"x":[0.793],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[10.035]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.163],"y":[0]},"t":90,"s":[38.579]},{"i":{"x":[0.828],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[38.579]},{"i":{"x":[0.787],"y":[0.901]},"o":{"x":[0.163],"y":[0]},"t":109,"s":[-1.589]},{"i":{"x":[0.712],"y":[1]},"o":{"x":[0.377],"y":[0.654]},"t":261,"s":[23.262]},{"i":{"x":[0.712],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[23.481]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[23.481]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[23.262]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-148.55,603.802,0],"ix":2},"a":{"a":0,"k":[-127.415,604.287,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[7.315,-1.778]],"o":[[-1.99,-3.98],[5.971,-31.843],[0,0],[0,0],[-9.893,2.405]],"v":[[-133.78,643.285],[-139.75,607.462],[-113.877,603.481],[-113.877,629.354],[-120.902,644.778]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"8","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[56.735]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[56.735]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[29.428]},{"t":292,"s":[29.428]}],"ix":10},"p":{"a":0,"k":[-126.246,637.764,0],"ix":2},"a":{"a":0,"k":[-126.246,637.764,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.478,-6.924],[-10.217,-3.654],[-4.333,2.167],[7.167,1.635],[3.5,0]],"o":[[0,0],[10.217,3.654],[4.333,-2.167],[-7.167,-1.635],[-3.5,0]],"v":[[-134.734,640.058],[-125.384,648.18],[-107,649.333],[-107,634.661],[-123.667,629.167]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"7","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[48.619]},{"t":292,"s":[48.619]}],"ix":10},"p":{"a":0,"k":[-110.06,644.266,0],"ix":2},"a":{"a":0,"k":[-110.06,644.266,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.651,-2.416],[-8.295,8.651],[-1.415,1.927],[8.333,0.345],[5,-5.865]],"o":[[0,0],[8.295,-8.651],[1.415,-1.927],[-8.333,-0.345],[-5,5.865]],"v":[[-116.5,649.5],[-99.245,647.07],[-88.815,635.591],[-96.65,625.842],[-114.65,638.799]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"1","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.163],"y":[0]},"t":90,"s":[38.579]},{"i":{"x":[0.828],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[38.579]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":109,"s":[-1.589]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[-1.589]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[-1.589]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-128.758,601.711,0],"ix":2},"a":{"a":0,"k":[-127.415,604.287,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[7.315,-1.778]],"o":[[-1.99,-3.98],[5.971,-31.843],[0,0],[0,0],[-9.893,2.405]],"v":[[-133.78,643.285],[-139.75,607.462],[-113.877,603.481],[-113.877,629.354],[-120.902,644.778]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"2","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.298],"y":[0]},"t":65,"s":[21.31]},{"i":{"x":[0.793],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[21.31]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[48.296]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[48.296]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[0]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-126.246,637.764,0],"ix":2},"a":{"a":0,"k":[-126.246,637.764,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.478,-6.924],[-10.217,-3.654],[-4.333,2.167],[7.167,1.635],[3.5,0]],"o":[[0,0],[10.217,3.654],[4.333,-2.167],[-7.167,-1.635],[-3.5,0]],"v":[[-134.734,640.058],[-125.384,648.18],[-107,649.333],[-107,634.661],[-123.667,629.167]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"3","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[50.728]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[50.728]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[0]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-110.06,644.266,0],"ix":2},"a":{"a":0,"k":[-110.06,644.266,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.651,-2.416],[-8.295,8.651],[-1.415,1.927],[8.333,0.345],[5,-5.865]],"o":[[0,0],[8.295,-8.651],[1.415,-1.927],[-8.333,-0.345],[-5,5.865]],"v":[[-116.5,649.5],[-99.245,647.07],[-88.815,635.591],[-96.65,625.842],[-114.65,638.799]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Layer 6","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":239,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":261,"s":[-29.963]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":266,"s":[-55.92]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":277,"s":[-55.92]},{"t":287,"s":[0]}],"ix":10},"p":{"a":0,"k":[-105.178,566.094,0],"ix":2},"a":{"a":0,"k":[-105.178,566.094,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.971,5.971],[-11.66,9.304],[-6.786,1.041],[-1.312,-13.118],[11.941,-7.961],[0,0],[13.931,3.98]],"o":[[0,0],[3.898,-3.898],[6.201,-4.948],[13.121,-2.012],[1.99,19.902],[-11.941,7.961],[0,0],[-13.931,-3.98]],"v":[[-173.537,597.628],[-169.556,587.677],[-136.53,560.399],[-113.898,549.424],[-79.997,559.814],[-89.948,597.628],[-117.526,608.125],[-151.645,619.52]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Layer 3","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-563.898,1011.177,0],"ix":2},"a":{"a":0,"k":[-113.898,665.177,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.616,9.417]],"o":[[-0.619,-9.467]],"v":[[-113.898,665.177]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Shape Layer 10","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-450,346,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Layer 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[13.492]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[47.954]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[-14.518]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[2.785]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":44,"s":[2.785]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":54,"s":[26.659]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[-56.194]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":65,"s":[-43.681]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":77,"s":[-43.681]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":84,"s":[31.108]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":90,"s":[122.661]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":111,"s":[122.661]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":121,"s":[32.159]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":171,"s":[32.159]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.153],"y":[0]},"t":185,"s":[78.608]},{"i":{"x":[0.803],"y":[1]},"o":{"x":[0.16],"y":[0]},"t":206,"s":[78.608]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":215,"s":[85.333]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":226,"s":[57.199]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":233,"s":[47.459]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":239,"s":[110.484]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":249,"s":[170.639]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[184.839]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":266,"s":[282.177]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":278,"s":[399.301]},{"t":287,"s":[373.492]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[1177.97,893.947,0],"to":[3.25,-7.333,0],"ti":[-0.179,-0.327,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.198,"y":0},"t":8,"s":[1197.47,849.947,0],"to":[30.597,55.695,0],"ti":[-11.486,-28.883,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":15,"s":[1260.97,1026.447,0],"to":[0.351,0.883,0],"ti":[1.333,5.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":21,"s":[1252.97,994.447,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[1252.97,994.447,0],"to":[-9.333,-1.167,0],"ti":[8.47,4.447,0]},{"i":{"x":0.855,"y":1},"o":{"x":0.552,"y":0},"t":54,"s":[1196.97,987.447,0],"to":[-8.47,-4.447,0],"ti":[-24.417,74.417,0]},{"i":{"x":0.855,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[1333.47,747.947,0],"to":[3.417,18.583,0],"ti":[0,0,0]},{"i":{"x":0.855,"y":0.855},"o":{"x":0.049,"y":0.049},"t":65,"s":[1322.97,774.447,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.924,"y":1},"o":{"x":0.049,"y":0},"t":77,"s":[1322.97,774.447,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":1,"y":1},"o":{"x":0.058,"y":0},"t":84,"s":[1068.97,993.447,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.659},"o":{"x":0.635,"y":0.635},"t":90,"s":[940.97,526.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.026,"y":0},"t":111,"s":[940.97,526.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":0.646},"o":{"x":0.167,"y":0.167},"t":121,"s":[1117.47,1010.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.848,"y":1},"o":{"x":0.167,"y":0},"t":171,"s":[1117.47,1010.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.848,"y":0.848},"o":{"x":0.376,"y":0.376},"t":185,"s":[1078.47,965.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.647,"y":1},"o":{"x":0.375,"y":0},"t":206,"s":[1078.47,965.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[993.47,890.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":226,"s":[1075.47,857.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.956,"y":1},"o":{"x":0.256,"y":0},"t":233,"s":[1134.47,848.947,0],"to":[0,0,0],"ti":[17.47,19.947,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":239,"s":[1042.47,736.947,0],"to":[-17.47,-19.947,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":249,"s":[1112.47,594.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[1203.47,553.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[1451.47,690.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[1150.47,869.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[1109.47,955.947,0],"to":[0,0,0],"ti":[-11.417,10.333,0]},{"t":287,"s":[1177.97,893.947,0]}],"ix":2},"a":{"a":0,"k":[-107.032,513.422,0],"ix":1},"s":{"a":0,"k":[106.42,106.42,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.166,3.193],[-3.98,1.99],[-14.021,1.206],[-5.971,-1.99],[1.715,-4.75],[0,0],[29.448,0]],"o":[[0,0],[-0.166,-3.193],[3.98,-1.99],[15.424,-1.327],[5.971,1.99],[-4.276,11.846],[0,0],[-29.448,0]],"v":[[-129.693,555.679],[-138.226,536.101],[-138.392,522.958],[-107.665,521.763],[-76.154,522.867],[-74.164,534.809],[-80.044,559.697],[-104.552,578.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[811,750,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"HAND 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[811,750,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-7.358,60.075],[0,0]],"o":[[0,0],[5.682,-46.385],[0,0]],"v":[[359.937,172.388],[392.358,17.925],[372.063,-129.388]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[-35.92,44.789],[0,0]],"o":[[0,0],[29.142,-36.494],[0,0]],"v":[[365.984,115.811],[462.405,12.577],[508.964,-122.726]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[43.642,26.075],[0,0]],"o":[[0,0],[-40.117,-23.968],[0,0]],"v":[[454.937,297.388],[393.358,179.925],[240.063,126.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":21,"s":[{"i":[[0,0],[35.401,36.486],[0,0]],"o":[[0,0],[-32.542,-33.539],[0,0]],"v":[[438.892,268.143],[409.829,138.741],[252.063,86.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[{"i":[[0,0],[35.401,36.486],[0,0]],"o":[[0,0],[-32.542,-33.539],[0,0]],"v":[[438.892,268.143],[409.829,138.741],[252.063,86.612]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-12.057,55.534],[0,0]],"o":[[0,0],[8.641,-39.799],[0,0]],"v":[[374.816,259.288],[415.878,134.908],[352.811,-6.563]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[72.298,23.789],[0,0]],"o":[[0,0],[-44.39,-14.606],[0,0]],"v":[[527.32,1.979],[408.141,-58.644],[251.854,-44.913]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.167,"y":0.19},"t":65,"s":[{"i":[[0,0],[68.297,33.591],[0,0]],"o":[[0,0],[-41.934,-20.625],[0,0]],"v":[[527.865,36.926],[418.251,-39.649],[261.571,-47.739]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":77,"s":[{"i":[[0,0],[68.297,33.591],[0,0]],"o":[[0,0],[-41.934,-20.625],[0,0]],"v":[[527.865,36.926],[418.251,-39.649],[261.571,-47.739]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-2.717,58.567],[0,0]],"o":[[0,0],[1.668,-35.959],[0,0]],"v":[[249,256],[277.138,154.792],[250.297,40.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-19.089,20.453],[23.302,45.186]],"o":[[0,0],[27.267,-29.215],[0,0]],"v":[[114.006,-230.973],[273.733,-194.785],[221.698,-333.186]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-19.089,20.453],[23.302,45.186]],"o":[[0,0],[27.267,-29.215],[0,0]],"v":[[114.006,-230.973],[273.733,-194.785],[221.698,-333.186]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":139,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":149,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":185,"s":[{"i":[[0,0],[-9.358,33.075],[0,0]],"o":[[37.063,-10.388],[12.723,-44.966],[0,0]],"v":[[253.937,222.388],[366.358,128.925],[314.063,-10.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":206,"s":[{"i":[[0,0],[-9.358,33.075],[0,0]],"o":[[37.063,-10.388],[12.723,-44.966],[0,0]],"v":[[253.937,222.388],[366.358,128.925],[314.063,-10.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-35.597,53.219],[0,0]],"o":[[0,0],[25.926,-38.76],[0,0]],"v":[[159.566,140.653],[312.476,83.082],[363.953,-43.797]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[251.937,118.388],[364.358,11.925],[368.063,-133.388]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":233,"s":[{"i":[[0,0],[-31.89,40.501],[0,0]],"o":[[0,0],[28.879,-36.738],[0,0]],"v":[[302.011,120.871],[408.988,15.429],[428.343,-126.823]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":239,"s":[{"i":[[0,0],[-48.583,34.241],[0,0]],"o":[[0,0],[35.362,-27.842],[0,0]],"v":[[200.941,-21.959],[375.941,-11.261],[433.636,-137.917]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":249,"s":[{"i":[[0,0],[-70.358,26.075],[0,0]],"o":[[0,0],[43.819,-16.239],[0,0]],"v":[[294.937,-180.612],[397.358,-46.075],[505.063,-152.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-70.358,26.075],[0,0]],"o":[[0,0],[43.819,-16.239],[0,0]],"v":[[388.937,-210.612],[435.358,-42.075],[541.063,-146.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[122.466,21.092],[0,0]],"o":[[0,0],[-45.955,-7.915],[0,0]],"v":[[658,-59],[440.534,-101.092],[252,-112]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[70.738,-10.549],[27.888,-24.185]],"o":[[0,0],[-46.121,6.878],[0,0]],"v":[[355.396,121.45],[207.641,106.82],[77.857,186.252]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-11.931,62.905],[12.754,33.015]],"o":[[0,0],[8.689,-45.814],[0,0]],"v":[[284.045,228.46],[364.058,96.186],[350.485,-46.674]],"c":false}]},{"t":287,"s":[{"i":[[0,0],[-7.358,60.075],[0,0]],"o":[[0,0],[5.682,-46.385],[0,0]],"v":[[359.937,172.388],[392.358,17.925],[372.063,-129.388]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":65,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":76,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 2","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Layer 14","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[224.442,-114.047,0],"ix":2},"a":{"a":0,"k":[224.442,-114.047,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[-23.882,-31.843],[-8.213,-34.264],[-0.906,-2.719],[-39.468,37.156],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[6.572,27.419],[2.683,8.048],[19.091,-17.973],[-11.941,-95.53],[-35.824,15.922]],"v":[[104.925,-195.855],[130.999,-162.662],[187.921,-9.409],[216.511,30.264],[307.898,-11.771],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-26.876,-29.361],[1.106,-35.217],[-27.843,-26.194],[-39.468,37.156],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[27.582,30.133],[-1.07,34.074],[6.179,5.813],[19.091,-17.973],[-11.941,-95.53],[-35.824,15.922]],"v":[[104.925,-195.855],[130.999,-162.662],[180.079,-29.865],[209.241,43.604],[307.898,-11.77],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-26.876,-29.361],[1.106,-35.217],[-27.843,-26.194],[-39.468,37.156],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[27.582,30.133],[-1.07,34.074],[6.179,5.813],[19.091,-17.973],[-11.941,-95.53],[-35.824,15.922]],"v":[[104.925,-195.855],[130.999,-162.662],[180.079,-29.865],[209.241,43.604],[307.898,-11.77],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-29.064,28.378],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[2.683,8.048],[14.059,-13.727],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[234.3,-1.482],[316.664,-19.167],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-29.064,28.378],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[2.683,8.048],[14.059,-13.727],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[234.3,-1.482],[316.664,-19.167],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-29.064,28.378],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[2.683,8.048],[14.059,-13.727],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[234.3,-1.482],[316.664,-19.167],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-29.064,28.378],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[2.683,8.048],[14.059,-13.727],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[234.3,-1.482],[316.664,-19.167],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-5.314,-3.541],[2.615,20.919],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[3.109,9.326],[5.314,3.541],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[246.024,32.614],[330.043,-30.95],[332.845,-85.049],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-5.314,-3.541],[2.615,20.919],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[3.109,9.326],[5.314,3.541],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[246.024,32.614],[330.043,-30.95],[332.845,-85.049],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":121,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"t":287,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Shape Layer 8","parent":25,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-5.878,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[164.862,-110.395,0],"to":[-2.88,1.073,0],"ti":[2.88,-1.073,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[147.582,-103.959,0],"to":[-2.88,1.073,0],"ti":[-3.683,1.725,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[147.582,-103.959,0],"to":[3.683,-1.725,0],"ti":[-5.776,2.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[169.677,-114.306,0],"to":[5.776,-2.833,0],"ti":[-2.988,2.142,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[182.237,-120.958,0],"to":[1.511,-1.083,0],"ti":[-2.895,1.718,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[182.237,-120.958,0],"to":[2.895,-1.718,0],"ti":[-0.925,0.697,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[199.605,-131.265,0],"to":[0.633,-0.477,0],"ti":[1.97,-1.021,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[199.605,-131.265,0],"to":[-1.97,1.021,0],"ti":[0.621,-0.322,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[187.785,-125.139,0],"to":[-1.97,1.021,0],"ti":[0,0,0]},{"t":215,"s":[187.785,-125.139,0]}],"ix":2},"a":{"a":0,"k":[225.75,-265.25,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[66,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[66,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[92.054,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[120.841,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[120.841,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[120.841,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[120.841,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[99.135,100,100]},{"t":215,"s":[99.135,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":95,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":97.5,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":100,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.833,"y":0.6},"o":{"x":0.167,"y":0},"t":102.5,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.4},"t":105,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":215,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.126,-272.331],[216.307,-265.518],[225.495,-261.212],[235.476,-267.287]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":239,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[225.891,-269.581],[216.307,-265.518],[224.486,-263.962],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.126,-272.331],[216.307,-265.518],[225.495,-261.212],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":263,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":274,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":281,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":287,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"t":293,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Shape Layer 9","parent":25,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-5.878,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[140.463,-103.961,0],"to":[1.325,-0.223,0],"ti":[-1.325,0.223,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[148.413,-105.301,0],"to":[1.325,-0.223,0],"ti":[0.827,0.053,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[148.413,-105.301,0],"to":[-0.827,-0.053,0],"ti":[0.679,0.363,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[143.454,-105.618,0],"to":[-0.679,-0.363,0],"ti":[-1.995,1.957,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[144.339,-107.48,0],"to":[1.159,-1.136,0],"ti":[-2.895,1.718,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[144.339,-107.48,0],"to":[2.895,-1.718,0],"ti":[-2.408,1.861,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[161.707,-117.787,0],"to":[1.597,-1.234,0],"ti":[0.486,0.143,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[161.707,-117.787,0],"to":[-0.486,-0.143,0],"ti":[0.164,0.048,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[158.789,-118.643,0],"to":[-0.486,-0.143,0],"ti":[0,0,0]},{"t":215,"s":[158.789,-118.643,0]}],"ix":2},"a":{"a":0,"k":[226.321,-263.599,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[66,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[66,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[101.668,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[155.177,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[155.177,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[155.177,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[155.177,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[117.301,100,100]},{"t":215,"s":[117.301,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":95,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":97.5,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":100,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.833,"y":0.6},"o":{"x":0.167,"y":0},"t":102.5,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.4},"t":105,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":215,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[4,-0.973],[-1.572,-1.99],[-3.902,-0.092],[2.5,2.687]],"o":[[-2.372,0.577],[1.5,1.899],[3.51,0.083],[-2.392,-2.571]],"v":[[225.008,-268.33],[219.926,-263.601],[227.524,-259.211],[233.389,-265.458]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":239,"s":[{"i":[[4,-0.973],[-1.572,-1.99],[-3.902,-0.092],[2.5,2.687]],"o":[[-2.372,0.577],[1.5,1.899],[3.51,0.083],[-2.392,-2.571]],"v":[[225.861,-266.58],[219.926,-263.601],[227.098,-261.961],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[4,-0.973],[-1.572,-1.99],[-3.902,-0.092],[2.5,2.687]],"o":[[-2.372,0.577],[1.5,1.899],[3.51,0.083],[-2.392,-2.571]],"v":[[225.008,-268.33],[219.926,-263.601],[227.524,-259.211],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":263,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":274,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":281,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":287,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"t":293,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":25,"ty":3,"nm":"skull","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[162.778,-121.426,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[162.778,-121.426,0],"to":[-1.257,0.823,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[162.778,-121.426,0],"to":[-2.513,1.646,0],"ti":[1.257,-0.823,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[147.697,-111.548,0],"to":[-2.513,1.646,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":215,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":232.934,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":239,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":249,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":271,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"t":278,"s":[147.697,-111.548,0]}],"ix":2},"a":{"a":0,"k":[162.778,-121.426,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Layer 7","parent":27,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[165.82,-71.126,0],"ix":2},"a":{"a":0,"k":[165.82,-71.126,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":15,"s":[{"i":[[0,0],[-14.549,-0.501],[1.99,23.882],[3.69,22.386],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[9.235,0.318],[-1.99,-23.882],[-8.496,-51.545],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[172.711,-19.026],[224.054,32.681],[202.874,-40.251],[212.151,-108.305],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-9.268,-1.07],[1.99,23.882],[3.69,22.386],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[9.179,1.059],[-1.99,-23.882],[-8.496,-51.545],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[210.837,41.636],[202.874,-40.251],[212.151,-108.305],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-9.268,-1.07],[1.99,23.882],[3.69,22.386],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[9.179,1.059],[-1.99,-23.882],[-8.496,-51.545],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[210.837,41.636],[202.874,-40.251],[212.151,-108.305],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.167,"y":0},"t":54,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[-23.263,2.647],[-1.333,23.928],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[32.04,-3.646],[1.858,-33.364],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[208.36,56.102],[235.275,-34.609],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-23.263,2.647],[-1.333,23.928],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[32.04,-3.646],[1.858,-33.364],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[208.36,56.102],[235.275,-34.609],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-23.263,2.647],[-1.333,23.928],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[32.04,-3.646],[1.858,-33.364],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[208.36,56.102],[235.275,-34.609],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-23.263,2.647],[-1.333,23.928],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[32.04,-3.646],[1.858,-33.364],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[208.36,56.102],[235.275,-34.609],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-13.866,4.982],[5.914,27.437],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[12.352,-4.438],[-7.042,-32.666],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[188.194,-18.205],[234.424,48.313],[244.299,-37.535],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-13.866,4.982],[5.914,27.437],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[12.352,-4.438],[-7.042,-32.666],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[188.194,-18.205],[234.424,48.313],[244.299,-37.535],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":121,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":185.318,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[175.625,-19.542],[201.498,52.105],[231.351,-35.464],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":203.732,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"t":287,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"head","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.166],"y":[0]},"t":0,"s":[5.878]},{"i":{"x":[0.828],"y":[1]},"o":{"x":[0.193],"y":[0]},"t":8,"s":[44.956]},{"i":{"x":[0.833],"y":[0.914]},"o":{"x":[0.252],"y":[0]},"t":15,"s":[-20.174]},{"i":{"x":[0.833],"y":[0.735]},"o":{"x":[0.167],"y":[0.22]},"t":21,"s":[-16.307]},{"i":{"x":[0.814],"y":[1]},"o":{"x":[0.167],"y":[0.09]},"t":44,"s":[-10.514]},{"i":{"x":[0.659],"y":[1]},"o":{"x":[0.275],"y":[0]},"t":54,"s":[-3.089]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.34],"y":[0]},"t":60,"s":[-11.384]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":65,"s":[-11.384]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":77,"s":[-11.384]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":84,"s":[-11.384]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.329],"y":[0]},"t":90,"s":[-0.465]},{"i":{"x":[0.82],"y":[1]},"o":{"x":[0.329],"y":[0]},"t":111,"s":[-0.465]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":121,"s":[-6.892]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":130.207,"s":[-6.892]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":139,"s":[-2.475]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":148.975,"s":[-2.475]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[4.247]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":171,"s":[4.247]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":185.318,"s":[18.495]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":203.732,"s":[18.495]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":215,"s":[18.495]},{"i":{"x":[0.652],"y":[0.679]},"o":{"x":[0.199],"y":[0]},"t":226,"s":[5.878]},{"i":{"x":[0.668],"y":[-0.825]},"o":{"x":[0.359],"y":[-1.291]},"t":232.934,"s":[22.584]},{"i":{"x":[0.683],"y":[0.743]},"o":{"x":[0.285],"y":[-0.418]},"t":239,"s":[18.847]},{"i":{"x":[0.813],"y":[1]},"o":{"x":[0.437],"y":[0.76]},"t":249,"s":[41.96]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[54.869]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":266,"s":[26.413]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.512],"y":[0]},"t":271,"s":[-66.143]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":278,"s":[4.557]},{"t":292,"s":[5.878]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.297,"y":0},"t":0,"s":[1126.666,565.691,0],"to":[0,0.907,0],"ti":[0,-2,0]},{"i":{"x":0.789,"y":1},"o":{"x":0.185,"y":0},"t":8,"s":[1330.666,532.691,0],"to":[0,0.482,0],"ti":[-0.058,0.811,0]},{"i":{"x":0.646,"y":0.25},"o":{"x":0.261,"y":0},"t":15,"s":[974.666,868.691,0],"to":[0.001,-0.02,0],"ti":[-0.132,0.327,0]},{"i":{"x":0.996,"y":0},"o":{"x":0.004,"y":1},"t":21,"s":[992.709,826.232,0],"to":[0.132,-0.327,0],"ti":[-0.053,-0.03,0]},{"i":{"x":0.796,"y":1},"o":{"x":0.413,"y":0.452},"t":44,"s":[993.459,824.732,0],"to":[0.053,0.03,0],"ti":[-0.031,0.429,0]},{"i":{"x":0.66,"y":1},"o":{"x":0.283,"y":0},"t":54,"s":[1086.666,708.691,0],"to":[0.012,-0.165,0],"ti":[0.005,-0.065,0]},{"i":{"x":0.67,"y":0.207},"o":{"x":0.34,"y":0.002},"t":60,"s":[966.661,713.758,0],"to":[-0.002,0.029,0],"ti":[-1.089,-0.007,0]},{"i":{"x":0.986,"y":0},"o":{"x":0.001,"y":0.072},"t":65,"s":[982.791,714.005,0],"to":[1.089,0.007,0],"ti":[-1.089,-0.007,0]},{"i":{"x":0.67,"y":0.686},"o":{"x":0.001,"y":0.001},"t":77,"s":[982.791,714.005,0],"to":[0.604,0.004,0],"ti":[-1.089,-0.007,0]},{"i":{"x":0.771,"y":0.972},"o":{"x":0.162,"y":0.02},"t":84,"s":[982.791,771.005,0],"to":[1.089,0.007,0],"ti":[-0.016,0.003,0]},{"i":{"x":1,"y":0},"o":{"x":0,"y":1},"t":90,"s":[942.166,390.755,0],"to":[0.074,-0.016,0],"ti":[-0.016,0.003,0]},{"i":{"x":0.787,"y":1},"o":{"x":0.265,"y":0.057},"t":111,"s":[942.166,390.755,0],"to":[0.074,-0.016,0],"ti":[-0.034,0.48,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[1067.666,730.691,0],"to":[0.055,-0.771,0],"ti":[-0.167,2.333,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130.207,"s":[1067.666,730.691,0],"to":[0.167,-2.333,0],"ti":[1.786,4.799,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[1068.666,716.691,0],"to":[-1.003,-2.694,0],"ti":[1.786,4.799,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[1068.666,716.691,0],"to":[-1.003,-2.694,0],"ti":[-2.08,3.224,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":185.318,"s":[1051.666,687.691,0],"to":[3.333,-5.167,0],"ti":[-9,3.833,0]},{"i":{"x":0.753,"y":1},"o":{"x":0.209,"y":0},"t":203.732,"s":[1105.666,664.691,0],"to":[0.332,-0.141,0],"ti":[-0.015,0.071,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[1105.666,664.691,0],"to":[3.5,-16.5,0],"ti":[-37.167,21,0]},{"i":{"x":0.649,"y":0.679},"o":{"x":0.22,"y":0},"t":226,"s":[1126.666,565.691,0],"to":[10.251,-5.792,0],"ti":[-11.214,1.194,0]},{"i":{"x":0.66,"y":0.344},"o":{"x":0.295,"y":1},"t":232.934,"s":[1207.163,558.083,0],"to":[12.191,-1.298,0],"ti":[11.143,-1.489,0]},{"i":{"x":0.662,"y":0.723},"o":{"x":0.29,"y":0.207},"t":239,"s":[1200.819,559.393,0],"to":[-15.369,2.054,0],"ti":[-24.32,1.529,0]},{"i":{"x":0.697,"y":1},"o":{"x":0.352,"y":0.645},"t":249,"s":[1281.371,551.652,0],"to":[16.146,-1.015,0],"ti":[-7.894,1.055,0]},{"i":{"x":0.697,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[1326.666,544.691,0],"to":[33.667,-4.5,0],"ti":[0,0,0]},{"i":{"x":0.697,"y":1},"o":{"x":0.181,"y":0},"t":266,"s":[969.666,640.691,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.724,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[872.666,966.691,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.566,"y":0.703},"o":{"x":0.179,"y":0},"t":278,"s":[1103.666,668.691,0],"to":[0,0,0],"ti":[-4.135,18.768,0]},{"i":{"x":0.84,"y":1},"o":{"x":0.386,"y":0.749},"t":283,"s":[1118.142,605.671,0],"to":[6.715,-30.474,0],"ti":[0,-1.238,0]},{"t":292,"s":[1126.666,565.691,0]}],"ix":2},"a":{"a":0,"k":[254.666,-45.309,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":1,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[379.861,-233.563],[440.945,-109.615],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[0,0],[-17.631,-2.457],[-20.908,-40.281],[29.155,-22.833],[14.208,5.215],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[27.154,52.315],[-26.083,20.427],[-20.797,-7.633],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[375.463,-191.636],[392.216,-62.132],[339.232,-92.185],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[-17.721,1.404],[-43.853,1.642],[-22.726,-38.864],[28.472,-11.784],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[26.329,-2.229],[44.173,-3.151],[58.624,84.777],[-20.334,7.942],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[252.622,-302.573],[357.951,-285.951],[445.412,-343.893],[348.641,-97.114],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":21,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[36.455,-6.51],[6.701,-2.366],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-45.869,8.191],[-20.89,7.376],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[373.33,-229.28],[395.391,-73.313],[347.28,-97.986],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":25,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[379.861,-233.563],[440.945,-109.615],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":44,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[379.861,-233.563],[440.945,-109.615],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.701,-38.703],[24.007,-26.597],[5.811,-3.93],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[45.615,74.488],[-26.468,29.324],[-18.351,12.41],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[377.991,-224.068],[400.536,-65.772],[342.139,-96.903],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.701,-38.703],[24.007,-26.597],[5.811,-3.93],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[45.615,74.488],[-26.468,29.324],[-18.351,12.41],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[377.991,-224.068],[400.536,-65.772],[342.139,-96.903],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":56,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[388.956,-235.075],[450.04,-111.127],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":62,"s":[{"i":[[0,0],[-17.631,-2.457],[-35.774,-41.371],[19.797,-31.296],[17.423,-5.704],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[37.886,43.813],[-14.339,22.667],[-21.054,6.892],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[344.55,-225.372],[393.073,-94.772],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":66,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.683,-38.714],[23.634,-24.527],[5.065,-3.243],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.821,55.287],[-32.09,33.303],[-6.653,4.26],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[353.694,-225.277],[388.625,-82.54],[340.521,-94.683],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0,0],[-17.631,-2.457],[-35.224,-27.937],[17.01,-40.672],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[45.549,36.173],[-6.986,16.482],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[423.667,-126.316],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":96,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":111,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":116,"s":[{"i":[[0,0],[-17.631,-2.457],[-44.387,7.14],[24.026,-44.255],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.345,-5.364],[-6.986,16.482],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[346.428,-260.828],[415.051,-222.948],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[{"i":[[0,0],[-17.631,-2.457],[-44.387,7.14],[24.026,-44.255],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.345,-5.364],[-6.986,16.482],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[346.428,-260.828],[415.051,-222.948],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":122,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[30.009,-21.699],[9.854,2.09],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-43.409,31.388],[-21.672,-4.597],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[391.617,-81.155],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":126,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":239,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":249,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.416,-38.876],[29.836,-21.054],[16.188,-3.381],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.262,55.221],[-31.727,22.389],[-21.686,4.53],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[400.753,-83.798],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.416,-38.876],[29.836,-21.054],[16.188,-3.381],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.262,55.221],[-31.727,22.389],[-21.686,4.53],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[400.753,-83.798],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-17.631,-2.457],[-43.841,11.733],[15.179,-33.778],[73.454,-71.73],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[38.971,-10.43],[-7.34,16.333],[-15.85,15.478],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[373.885,-328.599],[467.448,-310.108],[343.684,-195.734],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-17.731,-1.575],[-6.286,22.68],[-50.798,-1.103],[42.685,-93.373],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[19.219,1.707],[3.721,-13.425],[44.355,0.963],[-13.095,28.646],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[251.299,-299.682],[309.199,-324.048],[369.457,-415.478],[373.617,-184.916],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":277,"s":[{"i":[[0,0],[-17.731,-1.575],[0.19,11.689],[0.069,14.226],[22.324,-118.707],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[19.219,1.707],[-0.069,-4.229],[-0.311,-64.514],[-9.476,50.385],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[251.299,-299.682],[295.7,-309.773],[252.952,-337.84],[407.004,-216.812],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":280,"s":[{"i":[[0,0],[-17.673,-2.088],[-18.578,-13.819],[-15.85,-24.722],[37.948,-38.182],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[16.825,1.939],[30.814,10.191],[13.416,49.092],[-15.781,26.21],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[251.882,-295.485],[331.637,-275.613],[413.179,-243.623],[369.468,-145.71],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":283,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"t":292,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[379.861,-233.563],[440.945,-109.615],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Layer 15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1249.59,919.949,0],"ix":2},"a":{"a":0,"k":[438.59,169.949,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-1.548,-12.322]],"o":[[0,0],[0,0]],"v":[[330.631,104.789],[352.548,126.822]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":7.651,"s":[{"i":[[0,0],[-7.548,-12.822]],"o":[[0,0],[0,0]],"v":[[304.631,78.789],[318.548,98.822]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[-19.048,-2.822]],"o":[[0,0],[0,0]],"v":[[418.131,249.789],[462.048,256.822]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-19.048,-2.822]],"o":[[0,0],[0,0]],"v":[[421.458,231.488],[465.376,238.521]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-19.048,-2.822]],"o":[[0,0],[0,0]],"v":[[421.458,231.488],[465.376,238.521]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-31.048,5.178]],"o":[[0,0],[0,0]],"v":[[436.131,169.789],[488.048,177.322]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[-40.048,12.678]],"o":[[0,0],[0,0]],"v":[[402.131,173.039],[477.048,167.072]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-40.048,12.678]],"o":[[0,0],[0,0]],"v":[[404.631,172.914],[479.548,166.947]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-40.048,12.678]],"o":[[0,0],[0,0]],"v":[[404.631,172.914],[479.548,166.947]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-40.048,12.678]],"o":[[0,0],[0,0]],"v":[[395.631,208.914],[470.548,202.947]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-8.548,-4.947]],"o":[[0,0],[0,0]],"v":[[200.631,-47.086],[214.548,-37.053]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-8.548,-4.947]],"o":[[0,0],[0,0]],"v":[[200.631,-47.086],[214.548,-37.053]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0,0],[-31.048,5.178]],"o":[[0,0],[0,0]],"v":[[436.131,169.789],[488.048,177.322]],"c":false}]},{"i":{"x":0.833,"y":0.743},"o":{"x":0.333,"y":0},"t":130.207,"s":[{"i":[[0,0],[-31.048,5.178]],"o":[[0,0],[0,0]],"v":[[436.131,169.789],[488.048,177.322]],"c":false}]},{"i":{"x":0.833,"y":0.743},"o":{"x":0.167,"y":0.257},"t":139,"s":[{"i":[[0,0],[-25.616,4.168]],"o":[[0,0],[0,0]],"v":[[427.304,168.491],[472.471,174.466]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.257},"t":148.975,"s":[{"i":[[0,0],[-25.616,4.168]],"o":[[0,0],[0,0]],"v":[[427.304,168.491],[472.471,174.466]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[419.131,167.289],[458.048,171.822]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[419.131,167.289],[458.048,171.822]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":185,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[358.395,161.035],[397.312,165.567]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[401.813,155.54],[440.731,160.073]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[401.813,155.54],[440.731,160.073]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-1.548,-12.322]],"o":[[0,0],[0,0]],"v":[[330.631,104.789],[352.548,126.822]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-3.594,-12.492]],"o":[[0,0],[0,0]],"v":[[321.765,95.923],[340.954,117.274]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-3.223,-12.462]],"o":[[0,0],[0,0]],"v":[[323.372,97.53],[343.055,119.004]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-5.932,-12.687]],"o":[[0,0],[0,0]],"v":[[311.633,85.791],[327.705,106.363]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-7.548,-12.822]],"o":[[0,0],[0,0]],"v":[[304.631,78.789],[318.548,98.822]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[429.813,74.54],[468.731,79.073]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-18.864,8.851]],"o":[[0,0],[0,0]],"v":[[335.003,234.628],[373.638,228.114]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[406.813,184.54],[445.731,189.073]],"c":false}]},{"t":287,"s":[{"i":[[0,0],[-1.548,-12.322]],"o":[[0,0],[0,0]],"v":[[330.631,104.789],[352.548,126.822]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1182.337,917.528,0],"ix":2},"a":{"a":0,"k":[371.337,167.528,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-17.157,-5.513],[0,0]],"o":[[0,0],[35.182,11.305],[0,0]],"v":[[263.146,87.756],[309.818,97.695],[378.028,116.607]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":7.651,"s":[{"i":[[0,0],[-19.464,-9.47],[0,0]],"o":[[0,0],[21.182,10.305],[0,0]],"v":[[273.146,54.756],[301.818,75.695],[333.028,90.607]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[272.146,252.756],[331.818,260.195],[468.028,237.107]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[273.042,234.071],[334.25,240.741],[474.043,220.214]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[273.042,234.071],[334.25,240.741],[474.043,220.214]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[278.646,166.256],[344.818,175.195],[485.028,162.607]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[221.146,168.506],[304.318,193.445],[445.028,152.357]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[225.146,168.381],[308.318,193.32],[449.028,152.232]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[225.146,168.381],[308.318,193.32],[449.028,152.232]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[226.146,201.381],[309.318,226.32],[450.028,185.232]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-9.941,-2.736],[0,0]],"o":[[0,0],[12.532,3.45],[0,0]],"v":[[167.146,-58.619],[184.466,-51.45],[213,-48.408]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-9.941,-2.736],[0,0]],"o":[[0,0],[12.532,3.45],[0,0]],"v":[[167.146,-58.619],[184.466,-51.45],[213,-48.408]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[279.146,174.756],[341.818,180.695],[485.028,162.607]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130.207,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[279.146,174.756],[341.818,180.695],[485.028,162.607]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[274.646,162.756],[341.318,175.195],[468.028,159.107]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[274.646,162.756],[341.318,175.195],[468.028,159.107]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":185,"s":[{"i":[[0,0],[-42.836,-1.277],[0,0]],"o":[[7.779,1.89],[60.219,1.79],[0,0]],"v":[[243.686,152.257],[309.858,159.204],[400.621,154.6]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[0,0],[-42.833,-1.285],[0,0]],"o":[[0,0],[60.182,1.805],[0,0]],"v":[[277.646,143.756],[343.818,150.695],[434.528,146.107]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-42.833,-1.285],[0,0]],"o":[[0,0],[60.182,1.805],[0,0]],"v":[[277.646,143.756],[343.818,150.695],[434.528,146.107]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-17.157,-5.513],[0,0]],"o":[[0,0],[35.182,11.305],[0,0]],"v":[[263.146,87.756],[309.818,97.695],[378.028,116.607]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-17.943,-6.862],[0,0]],"o":[[0,0],[30.408,10.964],[0,0]],"v":[[266.556,76.503],[307.09,90.193],[362.683,107.741]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-17.801,-6.618],[0,0]],"o":[[0,0],[31.273,11.026],[0,0]],"v":[[265.938,78.542],[307.585,91.552],[365.464,109.348]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-18.842,-8.404],[0,0]],"o":[[0,0],[24.952,10.575],[0,0]],"v":[[270.453,63.643],[303.973,81.619],[345.147,97.609]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-19.464,-9.47],[0,0]],"o":[[0,0],[21.182,10.305],[0,0]],"v":[[273.146,54.756],[301.818,75.695],[333.028,90.607]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-42.833,-1.285],[0,0]],"o":[[7.78,1.885],[60.182,1.805],[0,0]],"v":[[285.146,70.756],[351.318,77.695],[487.028,65.607]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-38.456,18.906],[0,0]],"o":[[7.757,-1.975],[54.032,-26.563],[0,0]],"v":[[228.717,269.466],[300.445,256.137],[369.966,208.639]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-42.833,-1.285],[0,0]],"o":[[0,0],[60.182,1.805],[0,0]],"v":[[282.146,176.756],[348.318,183.695],[439.028,179.107]],"c":false}]},{"t":287,"s":[{"i":[[0,0],[-17.157,-5.513],[0,0]],"o":[[0,0],[35.182,11.305],[0,0]],"v":[[263.146,87.756],[309.818,97.695],[378.028,116.607]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1157.718,945.435,0],"ix":2},"a":{"a":0,"k":[346.718,195.435,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-3.837,-24.197],[-7.842,-41.883],[0,0],[19.932,-56.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-8.481,50.651],[-1.128,69.161],[21.671,44.118],[21.922,33.133],[8.938,5.683]],"o":[[0,0],[0,0],[-1.99,9.951],[3.732,23.535],[7.193,38.417],[0,0],[-15.309,43.185],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[6.201,-37.035],[0.748,-45.833],[-11.747,-23.914],[0,0],[-1.264,-0.804]],"v":[[395.269,-203.049],[239.886,-164.441],[220.935,-154.49],[231.837,-69.803],[248.583,11.883],[265.377,96.756],[233.068,259.227],[220.077,354.805],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[477.936,329.075],[489.481,205.349],[506.128,64.839],[467.647,-61.397],[422.078,-168.133],[398.674,-202.141]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[1.289,0.584],[0,0],[7.673,-6.54],[11.758,-21.084],[19.512,-37.164],[0,0],[8.241,-71.586],[0,0],[-5.971,-13.913],[-31.843,-1.988],[-11.941,1.988],[4.122,9.261],[1.99,27.827],[-7.156,50.346],[-13.345,64.207],[-7.145,43.276],[-17.689,38.296],[8.161,12.254]],"o":[[0,0],[0,0],[-7.673,6.54],[-11.3,20.624],[-18.007,33.997],[0,0],[-6.44,55.192],[0,0],[5.971,13.913],[31.843,1.988],[11.941,-1.988],[-7.961,-17.888],[-1.99,-27.826],[5.903,-40.955],[9.16,-45.579],[6.484,-36.564],[0,0],[-1.36,-2.042]],"v":[[582.282,-191.44],[448.312,-252.73],[427.538,-256.641],[384.101,-191.226],[339.473,-101.892],[286.353,22.331],[225.329,246.905],[219.407,354.976],[219.916,444.407],[263.7,470.245],[490.584,468.258],[500.535,438.444],[476.94,329.025],[478.193,229.146],[520.997,88.012],[548.875,-32.069],[581.917,-148.045],[584.868,-186.769]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0.826,-0.491],[0,0],[-1.649,-7.768],[-16.954,-7.745],[-24.104,-10.731],[0,0],[25.873,-29.303],[0,0],[-5.971,-11.393],[-31.843,-1.628],[-11.941,1.628],[4.122,7.584],[8.064,17.112],[-27.863,16.276],[6.962,56.195],[67.158,18.544],[-5.523,1.903],[11.172,-1.957]],"o":[[0,0],[0,0],[1.649,7.768],[25.654,11.72],[14.743,6.563],[0,0],[-25.873,29.303],[0,0],[5.971,11.393],[31.843,1.628],[11.941,-1.628],[-7.961,-14.649],[-9.75,-20.691],[27.863,-16.276],[-11.931,-96.3],[-30.973,-8.552],[0,0],[-1.58,0.277]],"v":[[202.566,70.098],[122.828,172.969],[117.112,183.273],[158.334,211.98],[217.664,238.87],[272.14,253.241],[183.068,308.65],[181.077,377.016],[219.916,449.446],[263.7,470.605],[490.584,468.977],[500.535,444.563],[416.936,347.888],[464.74,306.314],[530.931,212.3],[354.588,82.962],[244.4,69.858],[206.237,68.957]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0.867,-0.472],[0,0],[-0.923,-8.603],[-16.14,-9.763],[-22.972,-13.574],[0,0],[25.873,-32.178],[0,0],[-5.971,-12.147],[-31.843,-1.735],[-11.941,1.735],[4.122,8.085],[4.955,21.524],[-27.863,17.352],[9.576,59.406],[65.053,25.431],[-5.666,1.649],[11.287,-1.27]],"o":[[0,0],[0,0],[0.922,8.603],[24.423,14.773],[14.051,8.302],[0,0],[-25.873,32.178],[0,0],[5.971,12.147],[31.843,1.735],[11.941,-1.735],[-7.961,-15.617],[-5.778,-23.271],[27.863,-17.352],[-14.635,-92.612],[-30.002,-11.729],[0,0],[-1.597,0.18]],"v":[[221.146,25.323],[131.651,132.836],[125.019,143.637],[165.203,182.972],[225.461,216.046],[274.187,234.514],[183.068,296.897],[181.077,370.721],[219.916,447.939],[263.7,470.497],[490.584,468.762],[500.535,442.733],[418.472,336.776],[463.205,290.142],[530.419,181.703],[369.027,54.434],[262.756,28.298],[224.9,24.361]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0.867,-0.472],[0,0],[-0.923,-8.603],[-16.14,-9.763],[-22.972,-13.574],[0,0],[25.873,-32.178],[0,0],[-5.971,-12.147],[-31.843,-1.735],[-11.941,1.735],[4.122,8.085],[4.955,21.524],[-27.863,17.352],[9.576,59.406],[65.053,25.431],[-5.666,1.649],[11.287,-1.27]],"o":[[0,0],[0,0],[0.922,8.603],[24.423,14.773],[14.051,8.302],[0,0],[-25.873,32.178],[0,0],[5.971,12.147],[31.843,1.735],[11.941,-1.735],[-7.961,-15.617],[-5.778,-23.271],[27.863,-17.352],[-14.635,-92.612],[-30.002,-11.729],[0,0],[-1.597,0.18]],"v":[[221.146,25.323],[131.651,132.836],[125.019,143.637],[165.203,182.972],[225.461,216.046],[274.187,234.514],[183.068,296.897],[181.077,370.721],[219.916,447.939],[263.7,470.497],[490.584,468.762],[500.535,442.733],[418.472,336.776],[463.205,290.141],[530.419,181.703],[369.027,54.434],[262.756,28.298],[224.9,24.361]],"c":true}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[1.003,-0.168],[0,0],[2.772,-9.762],[-8.5,-18.644],[-13.099,-11.024],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[-1.68,48.107],[49.624,53.857],[-5.952,-0.473],[11.007,3.141]],"o":[[0,0],[0,0],[-2.772,9.762],[8.5,18.644],[13.099,11.024],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[3.129,-89.593],[-22.887,-24.839],[0,0],[-1.557,-0.444]],"v":[[329.058,-87.864],[199.722,-5.245],[189.014,3.886],[203.807,68.95],[250.343,136.536],[289.956,165.639],[188.068,270.227],[186.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[424.936,314.075],[466.74,258.349],[549.234,169.279],[451.401,5.777],[366.405,-67.926],[332.946,-87.408]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0.971,-0.303],[0,0],[1.412,-10.049],[-11.406,-17.022],[-19.844,-16.764],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-23.733,24.681],[5.471,47.825],[56.521,46.567],[-5.961,0.345],[11.333,1.606]],"o":[[0,0],[0,0],[-1.412,10.049],[10.857,16.203],[13.078,11.048],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.26,-28.349],[-9.518,-83.209],[-26.067,-21.477],[0,0],[-1.603,-0.227]],"v":[[217.401,-92.383],[93.875,12.539],[84.516,23.048],[117.701,78.911],[174.7,140.742],[219.322,171.087],[182.068,268.227],[180.077,353.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[418.936,318.075],[455.74,246.349],[495.518,129.209],[351.397,-16.346],[257.123,-77.737],[221.315,-92.462]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0.979,-0.275],[0,0],[1.701,-10],[-10.905,-17.337],[-19.343,-17.324],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-23.733,24.681],[3.804,47.957],[55.128,48.161],[-5.966,0.173],[11.277,1.932]],"o":[[0,0],[0,0],[-1.701,10],[10.38,16.503],[12.748,11.417],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.26,-28.349],[-6.749,-86.384],[-25.425,-22.212],[0,0],[-1.595,-0.273]],"v":[[232.465,-90.716],[106.01,10.549],[96.355,20.779],[127.899,77.554],[180.271,137.312],[223.979,168.921],[182.568,269.227],[180.577,354.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[421.436,318.075],[457.74,249.849],[500.453,138.524],[364.152,-10.872],[271.731,-74.935],[236.378,-90.682]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0.979,-0.275],[0,0],[1.701,-10],[-10.905,-17.337],[-19.343,-17.324],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-23.733,24.681],[3.804,47.957],[55.128,48.161],[-5.966,0.173],[11.277,1.932]],"o":[[0,0],[0,0],[-1.701,10],[10.38,16.503],[12.748,11.417],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.26,-28.349],[-6.749,-86.384],[-25.425,-22.212],[0,0],[-1.595,-0.273]],"v":[[232.465,-90.716],[106.01,10.549],[96.355,20.779],[127.899,77.554],[180.271,137.312],[223.979,168.921],[182.568,269.227],[180.577,354.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[421.436,318.075],[457.74,249.849],[500.453,138.524],[364.152,-10.872],[271.731,-74.935],[236.378,-90.682]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0.962,-0.307],[0,0],[1.171,-9.213],[-11.801,-15.173],[-20.225,-14.673],[0,0],[25.873,-34.525],[0,0],[-5.971,-12.72],[-31.843,-1.817],[-11.941,1.817],[4.122,8.467],[1.99,25.439],[-23.733,22.535],[6.271,43.501],[57.577,40.713],[-5.947,0.502],[11.36,1.11]],"o":[[0,0],[0,0],[-1.171,9.213],[11.234,14.443],[13.329,9.67],[0,0],[-25.873,34.525],[0,0],[5.971,12.72],[31.843,1.817],[11.941,-1.817],[-7.961,-16.354],[-1.99,-25.439],[27.26,-25.883],[-11.295,-78.349],[-26.554,-18.777],[0,0],[-1.607,-0.157]],"v":[[225.273,-33.669],[104.371,65.94],[95.272,75.822],[129.758,125.749],[185.195,177.193],[230.498,203.479],[182.568,286.885],[180.577,365.02],[219.916,446.793],[263.7,470.416],[490.584,468.598],[500.535,441.342],[421.436,331.484],[457.74,269.193],[504.906,159.798],[360.952,31.5],[265.305,-21.553],[229.181,-33.864]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0.986,0.246],[0,0],[6.435,-7.841],[-13.846,-27.964],[-8.21,-24.635],[-6.204,-71.731],[-5.999,-36.774],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[2.863,51.218],[-1.74,49.151],[-5.926,47.741],[34.907,73.04],[18.788,29.653],[8.836,7.269]],"o":[[0,0],[0,0],[-6.435,7.841],[5.368,10.841],[5.411,16.235],[6.204,71.731],[8.732,53.531],[0,0],[5.971,13.932],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-2.628,-47.002],[1.913,-54.014],[13.592,-109.507],[-14.558,-30.461],[-18.788,-29.653],[-1.25,-1.028]],"v":[[214.91,-387.538],[54.886,-362.286],[41.429,-358.188],[85.914,-275.62],[137.484,-150.752],[170.043,-17.271],[164.268,167.439],[208.278,307.503],[234.616,380.067],[278.401,405.94],[415.284,404.889],[425.235,375.036],[406.137,273.752],[403.441,157.062],[415.29,47.462],[358.807,-222.647],[296.565,-321.408],[218.292,-385.569]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0.986,0.246],[0,0],[6.435,-7.841],[-13.846,-27.964],[-8.21,-24.635],[-6.204,-71.731],[-5.999,-36.774],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[2.863,51.218],[-1.74,49.151],[-5.926,47.741],[34.907,73.04],[18.788,29.653],[8.836,7.269]],"o":[[0,0],[0,0],[-6.435,7.841],[5.368,10.841],[5.411,16.235],[6.204,71.731],[8.732,53.531],[0,0],[5.971,13.932],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-2.628,-47.002],[1.913,-54.014],[13.592,-109.507],[-14.558,-30.461],[-18.788,-29.653],[-1.25,-1.028]],"v":[[214.91,-387.538],[54.886,-362.286],[41.429,-358.188],[85.914,-275.62],[137.484,-150.752],[170.043,-17.271],[164.268,167.439],[208.278,307.503],[234.616,380.067],[278.401,405.94],[415.284,404.889],[425.235,375.036],[406.137,273.752],[403.441,157.062],[415.29,47.462],[358.807,-222.647],[296.565,-321.408],[218.292,-385.569]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[176.146,12.559],[166.195,22.51],[186.097,86.197],[237.842,149.883],[279.637,175.756],[183.068,270.227],[181.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[419.936,314.075],[461.74,258.349],[538.388,158.839],[427.907,3.603],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.833,"y":0.743},"o":{"x":0.333,"y":0},"t":130.207,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[176.146,12.559],[166.195,22.51],[186.097,86.197],[237.842,149.883],[279.637,175.756],[183.068,270.227],[181.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[419.936,314.075],[461.74,258.349],[538.388,158.839],[427.907,3.603],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.833,"y":0.743},"o":{"x":0.167,"y":0.257},"t":139,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[174.588,5.809],[164.637,15.76],[184.539,79.447],[236.285,143.133],[278.079,169.006],[186.183,270.227],[184.193,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[419.417,307.325],[460.183,251.599],[534.234,152.089],[426.349,-3.147],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.257},"t":148.975,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[174.588,5.809],[164.637,15.76],[184.539,79.447],[236.285,143.133],[278.079,169.006],[186.183,270.227],[184.193,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[419.417,307.325],[460.183,251.599],[534.234,152.089],[426.349,-3.147],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[173.146,-0.441],[163.195,9.51],[183.097,73.197],[234.842,136.883],[276.637,162.756],[189.068,270.227],[187.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[418.936,301.075],[458.74,245.349],[530.388,145.839],[424.907,-9.397],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":170.741,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[173.146,-0.441],[163.195,9.51],[183.097,73.197],[234.842,136.883],[276.637,162.756],[189.068,270.227],[187.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[418.936,301.075],[458.74,245.349],[530.388,145.839],[424.907,-9.397],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":185.318,"s":[{"i":[[1.017,-0.022],[0,0],[4.147,-9.262],[-5.732,-19.672],[-11.378,-12.792],[0,0],[21.932,-49.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-16.577,29.961],[4.19,44.203],[46.674,44.88],[-5.822,-1.324],[10.441,4.69]],"o":[[0,0],[0,0],[-4.147,9.262],[5.732,19.672],[11.378,12.792],[0,0],[-18.647,41.852],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[21.26,-38.424],[-5.388,-56.839],[-24.346,-23.41],[0,0],[-1.477,-0.664]],"v":[[297.76,-109.796],[157.846,-59.971],[145.936,-52.474],[151.222,14.04],[187.557,87.615],[242.574,152.111],[201.068,270.302],[199.077,355.881],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[430.936,301.15],[470.74,215.424],[503.388,116.839],[410.326,-9.88],[331.852,-84.695],[301.542,-108.785]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[1.017,-0.022],[0,0],[4.147,-9.262],[-15.222,-45.19],[-7.557,-23.615],[0,0],[21.932,-49.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-20.419,27.487],[-1.389,48.117],[46.674,44.88],[-5.822,-1.324],[10.441,4.69]],"o":[[0,0],[0,0],[-4.147,9.262],[6.541,19.418],[5.218,16.306],[0,0],[-18.647,41.852],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[26.26,-35.349],[1.612,-55.839],[-24.346,-23.41],[0,0],[-1.477,-0.664]],"v":[[367.317,-108.657],[228.404,-93.832],[216.494,-86.335],[220.779,15.179],[249.115,92.754],[276.574,143.522],[223.068,279.452],[209.077,355.881],[219.916,444.37],[263.7,470.242],[490.584,468.252],[500.535,438.399],[466.936,316.3],[509.74,240.574],[542.945,143.978],[466.883,-8.741],[401.409,-83.556],[371.099,-107.646]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[1.017,-0.022],[0,0],[4.147,-9.262],[-15.222,-45.19],[-7.557,-23.615],[0,0],[21.932,-49.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-20.419,27.487],[-1.389,48.117],[46.674,44.88],[-5.822,-1.324],[10.441,4.69]],"o":[[0,0],[0,0],[-4.147,9.262],[6.541,19.418],[5.218,16.306],[0,0],[-18.647,41.852],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[26.26,-35.349],[1.612,-55.839],[-24.346,-23.41],[0,0],[-1.477,-0.664]],"v":[[367.317,-108.657],[228.404,-93.832],[216.494,-86.335],[220.779,15.179],[249.115,92.754],[276.574,143.522],[223.068,279.452],[209.077,355.881],[219.916,444.37],[263.7,470.242],[490.584,468.252],[500.535,438.399],[466.936,316.3],[509.74,240.574],[542.945,143.978],[466.883,-8.741],[401.409,-83.556],[371.099,-107.646]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-3.837,-24.197],[-7.842,-41.883],[0,0],[19.932,-56.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-8.481,50.651],[-1.128,69.161],[21.671,44.118],[21.922,33.133],[8.938,5.683]],"o":[[0,0],[0,0],[-1.99,9.951],[3.732,23.535],[7.193,38.417],[0,0],[-15.309,43.185],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[6.201,-37.035],[0.748,-45.833],[-11.747,-23.914],[0,0],[-1.264,-0.804]],"v":[[395.269,-203.049],[239.886,-164.441],[220.935,-154.49],[231.837,-69.803],[248.583,11.883],[265.377,96.756],[233.068,259.227],[220.077,354.805],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[477.936,329.075],[489.481,205.349],[506.128,64.839],[467.647,-61.397],[422.078,-168.133],[398.674,-202.141]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[1.09,0.037],[0,0],[3.928,-8.788],[1.481,-23.135],[1.486,-40.274],[0,0],[15.946,-61.464],[0,0],[-5.971,-13.925],[-31.843,-1.989],[-11.941,1.989],[4.122,9.269],[1.99,27.851],[-8.029,50.547],[-5.294,67.472],[11.845,43.83],[8.414,34.893],[8.673,7.923]],"o":[[0,0],[0,0],[-3.928,8.788],[-1.394,22.542],[-1.4,36.909],[0,0],[-12.285,47.279],[0,0],[5.971,13.925],[31.843,1.989],[11.941,-1.989],[-7.961,-17.904],[-1.99,-27.85],[6.099,-38.372],[3.616,-45.746],[-5.53,-28.228],[0,0],[-1.297,-1.226]],"v":[[459.04,-199.091],[310.959,-194.548],[291.386,-189.323],[283.759,-111.208],[279.576,-26.914],[272.53,71.377],[230.429,255.025],[219.849,354.864],[219.916,444.382],[263.7,470.243],[490.584,468.254],[500.535,438.414],[477.597,329.058],[485.632,213.464],[511.199,72.741],[495.346,-51.396],[476.583,-161.283],[462.166,-196.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[1.071,-0.015],[0,0],[3.577,-8.999],[0.517,-23.327],[-0.205,-40.566],[0,0],[16.668,-60.515],[0,0],[-5.971,-13.926],[-31.843,-1.99],[-11.941,1.99],[4.122,9.27],[1.99,27.853],[-8.111,50.565],[-4.539,67.778],[13.626,43.883],[10.862,34.574],[8.721,7.517]],"o":[[0,0],[0,0],[-3.577,8.999],[-0.465,22.722],[0.157,37.183],[0,0],[-12.833,46.537],[0,0],[5.971,13.926],[31.843,1.989],[11.941,-1.989],[-7.961,-17.905],[-1.99,-27.852],[6.118,-38.13],[3.096,-45.762],[-6.657,-27.446],[0,0],[-1.291,-1.15]],"v":[[447.483,-199.808],[298.079,-189.091],[278.619,-183.011],[274.349,-103.705],[273.959,-19.883],[271.233,75.976],[230.907,255.787],[219.89,354.853],[219.916,444.38],[263.7,470.243],[490.584,468.254],[500.535,438.412],[477.658,329.061],[486.329,211.993],[510.28,71.309],[490.326,-53.209],[466.705,-162.524],[450.659,-197.849]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[1.207,0.36],[0,0],[6.142,-7.459],[7.558,-21.922],[12.145,-38.435],[0,0],[11.389,-67.45],[0,0],[-5.971,-13.918],[-31.843,-1.988],[-11.941,1.988],[4.122,9.265],[1.99,27.836],[-7.513,50.428],[-10.055,65.541],[0.616,43.502],[-7.021,36.906],[8.371,10.484]],"o":[[0,0],[0,0],[-6.142,7.459],[-7.252,21.408],[-11.22,35.187],[0,0],[-8.829,51.958],[0,0],[5.971,13.918],[31.843,1.988],[11.941,-1.988],[-7.961,-17.895],[-1.99,-27.836],[5.983,-39.899],[6.894,-45.647],[1.575,-33.157],[0,0],[-1.334,-1.708]],"v":[[531.917,-194.567],[392.18,-228.953],[371.897,-229.13],[343.094,-158.525],[314.995,-71.251],[280.704,42.375],[227.413,250.223],[219.588,354.93],[219.916,444.397],[263.7,470.244],[490.584,468.256],[500.535,438.432],[477.208,329.038],[481.233,222.737],[516.993,81.772],[527,-39.967],[538.871,-153.455],[534.724,-190.909]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[1.289,0.584],[0,0],[7.673,-6.54],[11.758,-21.084],[19.512,-37.164],[0,0],[8.241,-71.586],[0,0],[-5.971,-13.913],[-31.843,-1.988],[-11.941,1.988],[4.122,9.261],[1.99,27.827],[-7.156,50.346],[-13.345,64.207],[-7.145,43.276],[-17.689,38.296],[8.161,12.254]],"o":[[0,0],[0,0],[-7.673,6.54],[-11.3,20.624],[-18.007,33.997],[0,0],[-6.44,55.192],[0,0],[5.971,13.913],[31.843,1.988],[11.941,-1.988],[-7.961,-17.888],[-1.99,-27.826],[5.903,-40.955],[9.16,-45.579],[6.484,-36.564],[0,0],[-1.36,-2.042]],"v":[[582.282,-191.44],[448.312,-252.73],[427.538,-256.641],[384.101,-191.226],[339.473,-101.892],[286.353,22.331],[225.329,246.905],[219.407,354.976],[219.916,444.407],[263.7,470.245],[490.584,468.258],[500.535,438.444],[476.94,329.025],[478.193,229.146],[520.997,88.012],[548.875,-32.069],[581.917,-148.045],[584.868,-186.769]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":266,"s":[{"i":[[0.935,-0.419],[0,0],[3.425,-9.49],[-31.478,-24.123],[-23.619,-18.489],[0,0],[59.146,-11.691],[0,0],[6.113,-13.735],[-11.699,-29.408],[-9.498,-7.349],[-9.045,2.607],[-73.283,25.641],[-43.954,67.381],[44.275,55.553],[56.509,20.225],[-6.131,5.32],[11.329,0.303]],"o":[[0,0],[0,0],[-8.318,24.562],[23.522,20.877],[23.619,18.489],[0,0],[-30.385,7.415],[0,0],[-6.113,13.735],[13.132,33.01],[9.498,7.349],[44.796,-10.004],[70.717,-26.359],[34.046,-42.619],[-54.724,-58.899],[-29.486,-11.906],[0,0],[-1.628,-0.068]],"v":[[260.031,-204.177],[114.095,-86.456],[105.748,-75.378],[150.478,-27.877],[231.381,25.511],[282.717,64.797],[235.149,87.963],[142.159,112.712],[89.456,129.777],[99.868,170.99],[155.762,288.383],[182.008,315.755],[388.283,264.359],[546.954,162.619],[538.393,-38.223],[397.977,-141.166],[330.17,-180.566],[263.813,-204.588]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[0,0],[-9.016,-3.423],[0,0],[0,0],[0,0],[12.371,-17.676],[-3.077,-28.648],[-5.971,-12.519],[-31.843,-1.788],[-11.941,1.788],[4.122,8.333],[1.99,25.037],[15.265,49.081],[44.128,-3.656],[50.856,-14.15],[-1.479,5.36],[4.938,-9.702]],"o":[[0,0],[0,0],[9.016,3.423],[0,0],[0,0],[0,0],[-16.068,22.957],[3.184,29.639],[5.971,12.519],[31.843,1.788],[11.941,-1.788],[-7.961,-16.095],[-1.99,-25.037],[-24.618,-79.153],[-44.671,3.701],[-32.499,9.043],[0,0],[-0.699,1.372]],"v":[[32.186,157.237],[45.693,293.332],[52.737,303.901],[121.196,296.249],[177.222,293.34],[219.098,290.675],[200.068,313.379],[179.077,373.072],[219.916,447.195],[263.7,470.444],[490.584,468.656],[500.535,441.83],[418.936,356.375],[478.735,190.208],[293.814,80.879],[138.847,103.139],[57.964,125.178],[33.295,153.75]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[1.017,-0.022],[0,0],[4.147,-9.262],[-15.222,-45.19],[-7.557,-23.615],[0,0],[21.932,-49.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-20.419,27.487],[-1.389,48.117],[46.674,44.88],[-5.822,-1.324],[10.441,4.69]],"o":[[0,0],[0,0],[-4.147,9.262],[6.541,19.418],[5.218,16.306],[0,0],[-18.647,41.852],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[26.26,-35.349],[1.612,-55.839],[-24.346,-23.41],[0,0],[-1.477,-0.664]],"v":[[375.76,-90.646],[236.846,-75.821],[224.936,-68.324],[229.222,33.19],[257.557,110.765],[281.574,177.261],[223.068,279.452],[209.077,355.881],[219.916,444.37],[263.7,470.242],[490.584,468.252],[500.535,438.399],[466.936,316.3],[509.74,240.574],[542.388,141.989],[475.326,9.27],[409.852,-65.545],[379.542,-89.635]],"c":true}]},{"t":287,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-3.837,-24.197],[-7.842,-41.883],[0,0],[19.932,-56.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-8.481,50.651],[-1.128,69.161],[21.671,44.118],[21.922,33.133],[8.938,5.683]],"o":[[0,0],[0,0],[-1.99,9.951],[3.732,23.535],[7.193,38.417],[0,0],[-15.309,43.185],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[6.201,-37.035],[0.748,-45.833],[-11.747,-23.914],[0,0],[-1.264,-0.804]],"v":[[395.269,-203.049],[239.886,-164.441],[220.935,-154.49],[231.837,-69.803],[248.583,11.883],[265.377,96.756],[233.068,259.227],[220.077,354.805],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[477.936,329.075],[489.481,205.349],[506.128,64.839],[467.647,-61.397],[422.078,-168.133],[398.674,-202.141]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":"Layer 18","parent":32,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":121,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":127,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":139,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":145,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":166,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":185,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":189,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":196,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":200,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":204,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":212,"s":[-24.343]},{"t":217,"s":[0]}],"ix":10},"p":{"a":0,"k":[-186.764,-79.115,0],"ix":2},"a":{"a":0,"k":[-188.825,-77.227,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.252,-9.696],[-6.567,-1.635],[-6.955,0.379],[0.411,2.967],[8.816,1.761]],"o":[[0,0],[-1.84,7.923],[6.567,1.635],[6.955,-0.379],[-0.411,-2.967],[-8.816,-1.761]],"v":[[-211.117,-49.368],[-223.402,-42.755],[-219.418,-29.133],[-190.73,-24.489],[-183.766,-33.839],[-199.415,-46.688]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-11.444,12.439],[0,0]],"o":[[0,0],[0,0],[11.444,-12.439],[0,0]],"v":[[-199.52,-82.537],[-225.973,-11.47],[-204.413,-22.167],[-176.467,-71.259]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"sanitazer","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.612],"y":[1]},"o":{"x":[0.192],"y":[0]},"t":15,"s":[-51.804]},{"i":{"x":[0.612],"y":[1]},"o":{"x":[0.43],"y":[0]},"t":21,"s":[-51.804]},{"i":{"x":[0.835],"y":[1]},"o":{"x":[0.43],"y":[0]},"t":44,"s":[-51.804]},{"i":{"x":[0.644],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":54,"s":[-51.804]},{"i":{"x":[0.666],"y":[0.381]},"o":{"x":[0.339],"y":[0]},"t":60,"s":[-61.454]},{"i":{"x":[0.666],"y":[-0.568]},"o":{"x":[0.328],"y":[1.54]},"t":65,"s":[-61.454]},{"i":{"x":[0.666],"y":[1]},"o":{"x":[0.328],"y":[0]},"t":77,"s":[-61.454]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.326],"y":[0]},"t":84,"s":[-61.454]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.323],"y":[0]},"t":90,"s":[-24.712]},{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.323],"y":[0]},"t":111,"s":[-24.712]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":121,"s":[-20.938]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":130.207,"s":[-20.938]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":139,"s":[-16.967]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":148.975,"s":[-16.967]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[-1.108]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":171,"s":[-1.108]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":185,"s":[16.089]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":203.732,"s":[7.55]},{"i":{"x":[0.783],"y":[1]},"o":{"x":[0.157],"y":[0]},"t":215,"s":[7.55]},{"i":{"x":[0.572],"y":[1]},"o":{"x":[0.189],"y":[0]},"t":232.934,"s":[7.55]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.341],"y":[0]},"t":239,"s":[7.55]},{"i":{"x":[0.577],"y":[2.586]},"o":{"x":[0.169],"y":[0]},"t":249,"s":[7.55]},{"i":{"x":[0.836],"y":[1]},"o":{"x":[0.41],"y":[0.082]},"t":261,"s":[32.905]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":266,"s":[-164.535]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":271,"s":[-132.688]},{"i":{"x":[0.839],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":278,"s":[-51.935]},{"t":287,"s":[-51.804]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.297,"y":0},"t":0,"s":[955.615,889.17,0],"to":[-0.874,0.159,0],"ti":[1.833,-0.333,0]},{"i":{"x":0.809,"y":1},"o":{"x":0.308,"y":0},"t":8,"s":[1021.615,826.169,0],"to":[-0.449,0.082,0],"ti":[0.262,-0.614,0]},{"i":{"x":0.646,"y":0.276},"o":{"x":0.261,"y":0},"t":15,"s":[995.615,1077.17,0],"to":[-0.02,0.047,0],"ti":[0.052,-0.121,0]},{"i":{"x":0.954,"y":0},"o":{"x":0.046,"y":1},"t":21,"s":[995.716,1076.932,0],"to":[-0.014,0.033,0],"ti":[0.052,-0.121,0]},{"i":{"x":0.796,"y":1},"o":{"x":0.24,"y":1},"t":44,"s":[995.716,1076.932,0],"to":[-0.014,0.033,0],"ti":[0.12,-0.282,0]},{"i":{"x":0.66,"y":0.998},"o":{"x":0.283,"y":0},"t":54,"s":[995.615,1077.17,0],"to":[-0.099,0.233,0],"ti":[0.01,-0.023,0]},{"i":{"x":0.594,"y":1},"o":{"x":0.138,"y":1},"t":60,"s":[954.446,1064.566,0],"to":[-0.01,0.025,0],"ti":[-0.002,0.004,0]},{"i":{"x":0.594,"y":1},"o":{"x":0.4,"y":0},"t":65,"s":[954.436,1064.59,0],"to":[0,-0.001,0],"ti":[-0.002,0.004,0]},{"i":{"x":0.594,"y":1},"o":{"x":0.391,"y":0},"t":77,"s":[954.436,1064.59,0],"to":[0,-0.001,0],"ti":[-0.002,0.004,0]},{"i":{"x":0.608,"y":1},"o":{"x":0.391,"y":0},"t":84,"s":[954.436,1034.59,0],"to":[0.001,-0.001,0],"ti":[0,0.001,0]},{"i":{"x":0.608,"y":1},"o":{"x":0.417,"y":0},"t":90,"s":[794.436,556.59,0],"to":[0.002,-0.005,0],"ti":[0,0.001,0]},{"i":{"x":0.787,"y":1},"o":{"x":0.417,"y":0},"t":111,"s":[794.436,556.59,0],"to":[0.002,-0.005,0],"ti":[-3.742,-8.622,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[773.615,1048.17,0],"to":[1.103,2.541,0],"ti":[-6.278,-0.11,0]},{"i":{"x":0.734,"y":1},"o":{"x":0.333,"y":0},"t":130.207,"s":[793.615,1038.17,0],"to":[2.769,0.049,0],"ti":[-1.153,1.873,0]},{"i":{"x":0.734,"y":1},"o":{"x":0.469,"y":0},"t":139,"s":[714.469,892.015,0],"to":[1.153,-1.873,0],"ti":[-1.153,1.873,0]},{"i":{"x":0.479,"y":1},"o":{"x":0.469,"y":0},"t":148.975,"s":[725.469,891.015,0],"to":[1.153,-1.873,0],"ti":[45.111,-3.038,0]},{"i":{"x":0.479,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[661.754,705.098,0],"to":[-1.117,-0.047,0],"ti":[45.111,-3.038,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[661.754,705.098,0],"to":[-1.117,-0.047,0],"ti":[28.504,1.318,0]},{"i":{"x":0.595,"y":0.392},"o":{"x":0.244,"y":0},"t":185.318,"s":[643.991,623.605,0],"to":[-0.986,-2.945,0],"ti":[-28.597,-2.091,0]},{"i":{"x":0.653,"y":0.646},"o":{"x":0.316,"y":0.298},"t":190,"s":[687.964,636.334,0],"to":[14.123,1.032,0],"ti":[-16.873,-0.512,0]},{"i":{"x":0.664,"y":0.664},"o":{"x":0.327,"y":0.334},"t":193,"s":[734.294,626.627,0],"to":[15.875,0.482,0],"ti":[-15.978,-1.394,0]},{"i":{"x":0.678,"y":0.744},"o":{"x":0.339,"y":0.36},"t":196,"s":[777.868,644.661,0],"to":[21.556,1.881,0],"ti":[0,0,0]},{"i":{"x":0.699,"y":1},"o":{"x":0.359,"y":0.59},"t":200,"s":[835.076,628.949,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.699,"y":1},"o":{"x":0.167,"y":0},"t":203.732,"s":[860.701,637.491,0],"to":[0,0,0],"ti":[-0.727,0.672,0]},{"i":{"x":0.699,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[860.701,637.491,0],"to":[14.822,-13.704,0],"ti":[0,0,0]},{"i":{"x":0.65,"y":0.684},"o":{"x":0.216,"y":0},"t":226,"s":[955.615,889.169,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.662,"y":0.764},"o":{"x":0.177,"y":1},"t":232.934,"s":[981.401,864.555,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.668,"y":0.748},"o":{"x":0.307,"y":0.041},"t":239,"s":[977.804,867.989,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.714,"y":1},"o":{"x":0.365,"y":0.064},"t":249,"s":[1008.572,838.62,0],"to":[0,0,0],"ti":[7.615,114.169,0]},{"i":{"x":0.714,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[991.615,618.169,0],"to":[218.385,239.831,0],"ti":[0,0,0]},{"i":{"x":0.714,"y":1},"o":{"x":0.179,"y":0},"t":266,"s":[1420.701,668.491,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.736,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[1203.701,877.491,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.736,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[1034.701,965.491,0],"to":[0,0,0],"ti":[0,0,0]},{"t":287,"s":[955.615,889.169,0]}],"ix":2},"a":{"a":0,"k":[-153.353,-0.057,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.275,9.151],[5.689,-6.199],[-7.186,-7.675],[-7.186,8.856]],"o":[[-8.218,-6.126],[-5.689,6.199],[7.186,7.675],[7.186,-8.856]],"v":[[-104.874,-37.287],[-127.329,-23.707],[-131.221,-0.386],[-105.473,-12.489]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.14,-8.054],[-6.764,-0.204],[-6.717,1.846],[1.031,2.813],[8.989,-0.149]],"o":[[0,0],[-1.14,8.054],[6.764,0.204],[6.717,-1.846],[-1.031,-2.813],[-8.989,0.149]],"v":[[-188.567,5.54],[-200.273,10.822],[-194.002,26.126],[-157.085,25.266],[-152.263,14.652],[-172.31,6.489]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.234,-7.463],[-6.468,-1.99],[-6.966,0],[0.249,2.985],[8.707,2.239]],"o":[[0,0],[-3.234,7.463],[6.468,1.99],[6.966,0],[-0.249,-2.985],[-8.707,-2.239]],"v":[[-185.506,-16.446],[-198.193,-14.455],[-196.203,1.964],[-160.379,10.92],[-152.916,1.964],[-170.082,-11.221]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[9.619,0.663],[-1.327,-27.863],[0,0],[-31.346,-0.498],[-12.439,0],[4.478,36.321],[7.297,22.722],[20.39,2.188]],"o":[[-9.619,-0.663],[1.042,21.89],[0,0],[31.346,0.498],[12.439,0],[-3.908,-31.7],[-4.366,-13.594],[-15.91,-1.707]],"v":[[-167.511,-44.557],[-179.784,-14.704],[-193.384,90.113],[-169.335,116.649],[-106.146,117.147],[-88.566,66.231],[-104.488,-23.992],[-138.487,-44.228]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-133.677,-59.484],[-133.392,-55.419],[-162.308,-55.173],[-162.535,-59.981]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-1.923,1.236],[0,0]],"v":[[-210.601,-106.92],[-210.317,-84.519],[-206.32,-84.361],[-204.33,-83.253],[-204.654,-108.868],[-207.647,-106.751]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-20.151,-0.995],[-2.985,-11.444],[6.468,-5.473],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[15.074,0.744],[2.985,11.444],[-3.603,3.049],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-207.647,-106.751],[-173.813,-117.2],[-108.8,-104.927],[-110.293,-62.967],[-133.677,-59.484],[-132.185,-38.255],[-161.54,-38.918],[-162.535,-59.981],[-206.32,-84.361],[-218.925,-84.859],[-219.256,-107.415]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"HAND","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[811,750,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[189.937,150.388],[302.358,43.925],[306.063,-101.388]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[-36.358,45.075],[0,0]],"o":[[0,0],[29.34,-36.373],[0,0]],"v":[[248.937,75.388],[345.358,-28.075],[395.063,-164.388]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[-13.358,30.075],[0,0]],"o":[[0,0],[18.97,-42.708],[0,0]],"v":[[198.937,307.388],[295.358,215.925],[180.063,132.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-20.635,48.267],[0,0]],"o":[[0,0],[18.487,-42.917],[0,0]],"v":[[191.66,317.091],[272.315,201.978],[210.99,59.842]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-20.635,48.267],[0,0]],"o":[[0,0],[18.487,-42.917],[0,0]],"v":[[191.66,317.091],[272.315,201.978],[210.99,59.842]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-25.358,60.075],[0,0]],"o":[[0,0],[18.173,-43.053],[0,0]],"v":[[186.937,323.388],[257.358,192.925],[231.063,12.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[-2.358,76.075],[0,0]],"o":[[0,0],[1.448,-46.709],[0,0]],"v":[[156.937,282.388],[181.358,150.925],[158.063,2.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-2.358,76.075],[0,0]],"o":[[0,0],[1.448,-46.709],[0,0]],"v":[[156.937,282.388],[181.358,150.925],[158.063,2.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-2.358,76.075],[0,0]],"o":[[0,0],[1.448,-46.709],[0,0]],"v":[[156.937,282.388],[181.358,150.925],[158.063,2.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-2.717,58.567],[0,0]],"o":[[0,0],[1.668,-35.959],[0,0]],"v":[[153,258],[181.138,156.792],[154.297,42.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-22.733,36.785],[9.302,29.186]],"o":[[0,0],[24.567,-39.753],[0,0]],"v":[[22.006,-170.973],[195.733,-178.785],[175.698,-323.186]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-22.733,36.785],[9.302,29.186]],"o":[[0,0],[24.567,-39.753],[0,0]],"v":[[22.006,-170.973],[195.733,-178.785],[175.698,-323.186]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[5.937,298.388],[120.358,180.925],[206.063,17.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130.207,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[7.937,302.388],[120.358,180.925],[206.063,17.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":139,"s":[{"i":[[0,0],[-60.04,26.225],[0,0]],"o":[[0,0],[41.655,-18.194],[0,0]],"v":[[-64.92,148.134],[85.345,118.194],[218.92,35.866]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":148.975,"s":[{"i":[[0,0],[-60.04,26.225],[0,0]],"o":[[0,0],[41.655,-18.194],[0,0]],"v":[[-64.92,148.134],[85.345,118.194],[218.92,35.866]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-84.478,-4.908],[0,0]],"o":[[0,0],[86.464,5.023],[0,0]],"v":[[-127,-36],[45.478,36.908],[229,20]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-84.478,-4.908],[0,0]],"o":[[0,0],[86.464,5.023],[0,0]],"v":[[-127,-36],[45.478,36.908],[229,20]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":185.318,"s":[{"i":[[0,0],[-80.309,-26.666],[0,0]],"o":[[0,0],[63.522,21.092],[0,0]],"v":[[-135,-90],[39.478,20.908],[229,44]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[0,0],[-63.378,9.092],[0,0]],"o":[[0,0],[46.159,-6.622],[0,0]],"v":[[74,-93],[178.534,50.908],[306,-24]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-63.378,9.092],[0,0]],"o":[[0,0],[46.159,-6.622],[0,0]],"v":[[74,-93],[178.534,50.908],[306,-24]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[189.937,150.388],[302.358,43.925],[306.063,-101.388]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-31.895,40.506],[0,0]],"o":[[0,0],[28.88,-36.737],[0,0]],"v":[[210.056,124.813],[317.021,19.374],[336.412,-122.871]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-31.477,40.078],[0,0]],"o":[[0,0],[28.836,-36.771],[0,0]],"v":[[206.41,129.448],[314.364,23.823],[330.912,-118.978]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-34.534,43.208],[0,0]],"o":[[0,0],[29.152,-36.522],[0,0]],"v":[[233.048,95.587],[333.778,-8.684],[409.094,-179.421]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-70.358,26.075],[0,0]],"o":[[0,0],[43.819,-16.239],[0,0]],"v":[[196.937,-118.612],[349.358,-50.075],[453.063,-182.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[122.466,21.092],[0,0]],"o":[[0,0],[-45.955,-7.915],[0,0]],"v":[[658,-59],[440.534,-101.092],[252,-112]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[70.738,-10.549],[27.888,-24.185]],"o":[[0,0],[-46.121,6.878],[0,0]],"v":[[355.396,121.45],[207.641,106.82],[77.857,186.252]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-11.931,62.905],[12.754,33.015]],"o":[[0,0],[8.689,-45.814],[0,0]],"v":[[226.045,222.46],[306.058,90.186],[292.485,-52.674]],"c":false}]},{"t":287,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[189.937,150.388],[302.358,43.925],[306.063,-101.388]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":65,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":76,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 2","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"Layer 2","parent":31,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-188.825,-77.227,0],"ix":2},"a":{"a":0,"k":[-188.825,-77.227,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.493,-0.498],[0,0],[8.458,2.985]],"o":[[0,0],[1.493,0.498],[0,0],[-8.458,-2.985]],"v":[[-217.929,-28.055],[-178.125,-3.924],[-167.677,-30.294],[-194.545,-44.226]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"Layer 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[423.088,810.699,0],"ix":2},"a":{"a":0,"k":[-251.912,50.973,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.564,2.626],[0.461,14.985],[0.525,-0.171],[0,0],[-1.689,-5.451],[-14.018,1.053],[-0.299,3.303],[0.006,0.253]],"o":[[-8.602,-3.441],[-1.29,0.221],[-4.804,1.564],[0,0],[2.707,8.738],[32.192,-2.419],[0.012,-0.134],[-14.908,1.759]],"v":[[-414.96,-220.856],[-426.302,-294.734],[-429.112,-294.137],[-431.508,-282.364],[-423.932,-216.029],[-395.615,-210.546],[-354.98,-225.023],[-354.974,-225.627]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.804,1.564],[-14.398,0.513],[-0.605,-4.348],[0.299,-3.304],[32.192,-2.419],[2.707,8.738]],"o":[[0,0],[3.364,-1.095],[5.839,-0.208],[4.368,25.374],[-0.299,3.304],[-14.018,1.053],[-1.689,-5.451]],"v":[[-431.508,-282.364],[-429.112,-294.137],[-390.42,-298.116],[-379.799,-290.679],[-354.98,-225.023],[-395.615,-210.546],[-423.932,-216.029]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-11.273,2.976],[3.842,9.016],[0,0]],"o":[[0,0],[-2.605,-38.014],[-9.48,2.36],[0,0]],"v":[[-362.102,-223.859],[-344.14,-228.794],[-374.805,-296.456],[-389.585,-292.504]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.811,0.092],[16.256,-13.753],[8.652,6.064],[-3.058,-3.158],[-5.201,0],[-2.113,-1.053],[-2.057,1.977],[-68.156,-3.467],[-3.874,4.212]],"o":[[-72.343,-3.666],[-1.577,1.334],[0.561,4.041],[3.898,4.025],[2.328,0],[21.762,10.849],[0.476,-0.459],[6.144,0.304],[-1.644,-0.538]],"v":[[-268.83,156.976],[-409.86,205.692],[-429.33,194.986],[-423.926,206.095],[-409.636,212.142],[-373.762,224.425],[-366.809,220.075],[-279.31,164.388],[-263.643,157.958]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.976,0],[3.898,4.025],[-7.85,7.654],[-85.982,-4.357],[0.558,-10.977],[10.949,0.542],[0.476,-0.459]],"o":[[-5.201,0],[-7.627,-7.877],[2.422,-2.359],[10.977,0.558],[-0.56,10.977],[-68.156,-3.467],[-3.865,3.714]],"v":[[-409.636,212.142],[-423.926,206.095],[-423.546,178.026],[-277.289,124.635],[-258.423,145.522],[-279.31,164.388],[-366.809,220.075]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-16.046,-117.669],[-4.933,-3.01],[0.411,3.011],[92.676,167.076],[0.04,2.261],[1.419,7.65],[-0.088,-5.076],[-95.514,-172.196]],"o":[[0.842,6.172],[-1.21,-5.104],[-16.79,-123.128],[-90.613,-163.36],[-0.075,-4.308],[-3.068,3.569],[0.166,9.629],[90.001,162.254]],"v":[[-183.913,447.06],[-174.547,461.359],[-177.313,448.646],[-325.577,55.582],[-421.265,-335.808],[-423.408,-355.377],[-428.225,-342.082],[-327.546,67.924]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.896,0],[1.361,9.978],[90.001,162.254],[0.166,9.629],[-10.99,0.189],[-0.192,-10.987],[0,0],[-89.634,-162.381],[-16.79,-123.128],[13.005,2.685]],"o":[[-9.797,0],[-16.046,-117.669],[-95.514,-172.195],[-0.19,-10.99],[11.002,-0.192],[0,0],[17.432,19.653],[92.331,167.267],[-0.525,-0.406],[-0.901,-0.186]],"v":[[-164.219,464.274],[-183.913,447.06],[-327.546,67.923],[-428.225,-342.082],[-408.668,-362.324],[-376.426,-333.274],[-375.926,-322.774],[-288.239,47.116],[-114.975,487.18],[-139.005,485.589]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-245.866,-314.742],[-283.55,-242.123],[-251.452,-248.609],[-221.709,-316.256]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":47,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-213.431,-315.531],[-240.801,-248.958],[-228.79,-250.644],[-202.34,-316.696]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":47,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-52.409,5.307],[-13.931,-9.288],[60.37,-5.971],[0,0]],"o":[[0,0],[52.409,-5.307],[-44.448,-5.307],[-60.37,5.971],[0,0]],"v":[[-389.087,-273.928],[-267.685,-299.138],[-131.024,-289.187],[-271.002,-287.197],[-385.77,-261.987]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-107.64,-6.52],[0,0],[58.55,1.303],[0,0]],"o":[[0,0],[120.481,7.297],[0,0],[-79.684,-1.773],[0,0]],"v":[[-389.585,-292.504],[-184.096,-315.391],[-56.331,-236.437],[-161.55,-255.029],[-362.102,-223.859]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":338,"st":0,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"shoes2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":261,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":266,"s":[93.713]},{"t":271,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[1250.5,1155.453,0],"to":[-58.333,-28.833,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[900.5,982.453,0],"to":[0,0,0],"ti":[-58.333,-28.833,0]},{"t":271,"s":[1250.5,1155.453,0]}],"ix":2},"a":{"a":0,"k":[401,407,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0,0],[0.738,-9.191],[1.486,-6.79],[0,0],[17.053,-7.017],[5.874,6.247],[-7.804,10.064],[-1.859,1.174]],"o":[[0,0],[-0.069,0.855],[-1.525,6.965],[0,0],[-14.62,6.016],[-6.175,-6.567],[6.762,-11.494],[1.953,-0.296]],"v":[[366.935,401.334],[398.512,410.488],[404.361,434.344],[395.813,446.481],[371.12,465.531],[335.425,466.615],[356.063,444.765],[371.32,420.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[3.642,-24.499],[14.13,9.089],[2.921,16.854],[0.411,1.962]],"o":[[0,0],[0,0],[0,0],[0,0],[-3.915,26.34],[-4.008,-2.578],[-3.469,-20.013],[-0.049,-0.232]],"v":[[334.5,397.5],[361.078,393.752],[372.1,392.197],[373.5,392],[369.379,429.499],[337.758,468.625],[340.579,430.146],[334.573,397.848]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[3.642,-24.499],[14.13,9.089],[2.921,16.854],[0.411,1.962]],"o":[[0,0],[0,0],[0,0],[0,0],[-3.915,26.34],[-4.008,-2.578],[-3.469,-20.013],[-0.049,-0.232]],"v":[[334.5,397.5],[361.078,393.752],[372.1,392.197],[373.5,392],[369.379,429.499],[337.758,468.625],[340.579,430.146],[334.573,397.848]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[{"i":[[0,0],[0.738,-9.191],[1.486,-6.79],[0,0],[17.053,-7.017],[5.874,6.247],[-7.804,10.064],[-1.859,1.174]],"o":[[0,0],[-0.069,0.855],[-1.525,6.965],[0,0],[-14.62,6.016],[-6.175,-6.567],[6.762,-11.494],[1.953,-0.296]],"v":[[366.935,401.334],[398.512,410.488],[404.361,434.344],[395.813,446.481],[371.12,465.531],[335.425,466.615],[356.063,444.765],[371.32,420.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[375.672,358.483],[400.222,359.408],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"t":271,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"shoes","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":261,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":266,"s":[100.514]},{"t":271,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[1186,1154.5,0],"to":[-56.667,-41.167,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[846,907.5,0],"to":[0,0,0],"ti":[-56.667,-41.167,0]},{"t":271,"s":[1186,1154.5,0]}],"ix":2},"a":{"a":0,"k":[405.5,412,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0,0],[0.738,-9.191],[1.486,-6.79],[0,0],[17.053,-7.017],[5.874,6.247],[-7.804,10.064],[-1.859,1.174]],"o":[[0,0],[-0.069,0.855],[-1.525,6.965],[0,0],[-14.62,6.016],[-6.175,-6.567],[6.762,-11.494],[1.953,-0.296]],"v":[[366.935,401.334],[398.512,410.488],[404.361,434.344],[395.813,446.481],[371.12,465.531],[335.425,466.615],[356.063,444.765],[371.32,420.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[3.642,-24.499],[14.13,9.089],[2.921,16.854],[0.411,1.962]],"o":[[0,0],[0,0],[0,0],[0,0],[-3.915,26.34],[-4.008,-2.578],[-3.469,-20.013],[-0.049,-0.232]],"v":[[334.5,397.5],[361.078,393.752],[372.1,392.197],[373.5,392],[369.379,429.499],[337.758,468.625],[340.579,430.146],[334.573,397.848]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[3.642,-24.499],[14.13,9.089],[2.921,16.854],[0.411,1.962]],"o":[[0,0],[0,0],[0,0],[0,0],[-3.915,26.34],[-4.008,-2.578],[-3.469,-20.013],[-0.049,-0.232]],"v":[[334.5,397.5],[361.078,393.752],[372.1,392.197],[373.5,392],[369.379,429.499],[337.758,468.625],[340.579,430.146],[334.573,397.848]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[{"i":[[0,0],[0.738,-9.191],[1.486,-6.79],[0,0],[17.053,-7.017],[5.874,6.247],[-7.804,10.064],[-1.859,1.174]],"o":[[0,0],[-0.069,0.855],[-1.525,6.965],[0,0],[-14.62,6.016],[-6.175,-6.567],[6.762,-11.494],[1.953,-0.296]],"v":[[366.935,401.334],[398.512,410.488],[404.361,434.344],[395.813,446.481],[371.12,465.531],[335.425,466.615],[356.063,444.765],[371.32,420.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[373.625,342.653],[398.175,343.578],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"t":271,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"6","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.298],"y":[0]},"t":65,"s":[41.861]},{"i":{"x":[0.793],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[41.861]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.163],"y":[0]},"t":90,"s":[38.579]},{"i":{"x":[0.828],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[38.579]},{"i":{"x":[0.787],"y":[0.901]},"o":{"x":[0.163],"y":[0]},"t":109,"s":[-1.589]},{"i":{"x":[0.712],"y":[1]},"o":{"x":[0.377],"y":[0.004]},"t":261,"s":[23.262]},{"i":{"x":[0.712],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[55.476]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[55.476]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[23.262]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-165.855,602.156,0],"ix":2},"a":{"a":0,"k":[-127.415,604.287,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[7.315,-1.778]],"o":[[-1.99,-3.98],[5.971,-31.843],[0,0],[0,0],[-9.893,2.405]],"v":[[-133.78,643.285],[-139.75,607.462],[-113.877,603.481],[-113.877,629.354],[-120.902,644.778]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"5","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[59.535]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[59.535]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[29.428]},{"t":292,"s":[29.428]}],"ix":10},"p":{"a":0,"k":[-126.246,637.764,0],"ix":2},"a":{"a":0,"k":[-126.246,637.764,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.478,-6.924],[-10.217,-3.654],[-4.333,2.167],[7.167,1.635],[3.5,0]],"o":[[0,0],[10.217,3.654],[4.333,-2.167],[-7.167,-1.635],[-3.5,0]],"v":[[-134.734,640.058],[-125.384,648.18],[-107,649.333],[-107,634.661],[-123.667,629.167]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"4","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[48.619]},{"t":292,"s":[48.619]}],"ix":10},"p":{"a":0,"k":[-110.06,644.266,0],"ix":2},"a":{"a":0,"k":[-110.06,644.266,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.651,-2.416],[-8.295,8.651],[-1.415,1.927],[8.333,0.345],[5,-5.865]],"o":[[0,0],[8.295,-8.651],[1.415,-1.927],[-8.333,-0.345],[-5,5.865]],"v":[[-116.5,649.5],[-99.245,647.07],[-88.815,635.591],[-96.65,625.842],[-114.65,638.799]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"9","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.298],"y":[0]},"t":65,"s":[10.035]},{"i":{"x":[0.793],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[10.035]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.163],"y":[0]},"t":90,"s":[38.579]},{"i":{"x":[0.828],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[38.579]},{"i":{"x":[0.787],"y":[0.901]},"o":{"x":[0.163],"y":[0]},"t":109,"s":[-1.589]},{"i":{"x":[0.712],"y":[1]},"o":{"x":[0.377],"y":[0.654]},"t":261,"s":[23.262]},{"i":{"x":[0.712],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[23.481]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[23.481]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[23.262]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-148.55,603.802,0],"ix":2},"a":{"a":0,"k":[-127.415,604.287,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[7.315,-1.778]],"o":[[-1.99,-3.98],[5.971,-31.843],[0,0],[0,0],[-9.893,2.405]],"v":[[-133.78,643.285],[-139.75,607.462],[-113.877,603.481],[-113.877,629.354],[-120.902,644.778]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"8","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[29.428]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[56.735]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[56.735]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[29.428]},{"t":292,"s":[29.428]}],"ix":10},"p":{"a":0,"k":[-126.246,637.764,0],"ix":2},"a":{"a":0,"k":[-126.246,637.764,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.478,-6.924],[-10.217,-3.654],[-4.333,2.167],[7.167,1.635],[3.5,0]],"o":[[0,0],[10.217,3.654],[4.333,-2.167],[-7.167,-1.635],[-3.5,0]],"v":[[-134.734,640.058],[-125.384,648.18],[-107,649.333],[-107,634.661],[-123.667,629.167]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"7","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[48.619]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[48.619]},{"t":292,"s":[48.619]}],"ix":10},"p":{"a":0,"k":[-110.06,644.266,0],"ix":2},"a":{"a":0,"k":[-110.06,644.266,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.651,-2.416],[-8.295,8.651],[-1.415,1.927],[8.333,0.345],[5,-5.865]],"o":[[0,0],[8.295,-8.651],[1.415,-1.927],[-8.333,-0.345],[-5,5.865]],"v":[[-116.5,649.5],[-99.245,647.07],[-88.815,635.591],[-96.65,625.842],[-114.65,638.799]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"1","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.163],"y":[0]},"t":90,"s":[38.579]},{"i":{"x":[0.828],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":95,"s":[38.579]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":109,"s":[-1.589]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[-1.589]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[-1.589]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-128.758,601.711,0],"ix":2},"a":{"a":0,"k":[-127.415,604.287,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[7.315,-1.778]],"o":[[-1.99,-3.98],[5.971,-31.843],[0,0],[0,0],[-9.893,2.405]],"v":[[-133.78,643.285],[-139.75,607.462],[-113.877,603.481],[-113.877,629.354],[-120.902,644.778]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"2","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.298],"y":[0]},"t":65,"s":[21.31]},{"i":{"x":[0.793],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[21.31]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[48.296]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[48.296]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[0]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-126.246,637.764,0],"ix":2},"a":{"a":0,"k":[-126.246,637.764,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.478,-6.924],[-10.217,-3.654],[-4.333,2.167],[7.167,1.635],[3.5,0]],"o":[[0,0],[10.217,3.654],[4.333,-2.167],[-7.167,-1.635],[-3.5,0]],"v":[[-134.734,640.058],[-125.384,648.18],[-107,649.333],[-107,634.661],[-123.667,629.167]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"3","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.173],"y":[0]},"t":266,"s":[50.728]},{"i":{"x":[0.838],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":277,"s":[50.728]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":283,"s":[0]},{"t":292,"s":[0]}],"ix":10},"p":{"a":0,"k":[-110.06,644.266,0],"ix":2},"a":{"a":0,"k":[-110.06,644.266,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-1.651,-2.416],[-8.295,8.651],[-1.415,1.927],[8.333,0.345],[5,-5.865]],"o":[[0,0],[8.295,-8.651],[1.415,-1.927],[-8.333,-0.345],[-5,5.865]],"v":[[-116.5,649.5],[-99.245,647.07],[-88.815,635.591],[-96.65,625.842],[-114.65,638.799]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Layer 6","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":239,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":261,"s":[-29.963]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":266,"s":[-55.92]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":277,"s":[-55.92]},{"t":287,"s":[0]}],"ix":10},"p":{"a":0,"k":[-105.178,566.094,0],"ix":2},"a":{"a":0,"k":[-105.178,566.094,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-5.971,5.971],[-11.66,9.304],[-6.786,1.041],[-1.312,-13.118],[11.941,-7.961],[0,0],[13.931,3.98]],"o":[[0,0],[3.898,-3.898],[6.201,-4.948],[13.121,-2.012],[1.99,19.902],[-11.941,7.961],[0,0],[-13.931,-3.98]],"v":[[-173.537,597.628],[-169.556,587.677],[-136.53,560.399],[-113.898,549.424],[-79.997,559.814],[-89.948,597.628],[-117.526,608.125],[-151.645,619.52]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Layer 3","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-563.898,1011.177,0],"ix":2},"a":{"a":0,"k":[-113.898,665.177,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.616,9.417]],"o":[[-0.619,-9.467]],"v":[[-113.898,665.177]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Shape Layer 10","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-450,346,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Layer 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[13.492]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[47.954]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[-14.518]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[2.785]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":44,"s":[2.785]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":54,"s":[26.659]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":60,"s":[-56.194]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":65,"s":[-43.681]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":77,"s":[-43.681]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":84,"s":[31.108]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":90,"s":[122.661]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":111,"s":[122.661]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":121,"s":[32.159]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":171,"s":[32.159]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.153],"y":[0]},"t":185,"s":[78.608]},{"i":{"x":[0.803],"y":[1]},"o":{"x":[0.16],"y":[0]},"t":206,"s":[78.608]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":215,"s":[85.333]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":226,"s":[57.199]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":233,"s":[47.459]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":239,"s":[110.484]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":249,"s":[170.639]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[184.839]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":266,"s":[282.177]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":278,"s":[399.301]},{"t":287,"s":[373.492]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[1177.97,893.947,0],"to":[3.25,-7.333,0],"ti":[-0.179,-0.327,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.198,"y":0},"t":8,"s":[1197.47,849.947,0],"to":[30.597,55.695,0],"ti":[-11.486,-28.883,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":15,"s":[1260.97,1026.447,0],"to":[0.351,0.883,0],"ti":[1.333,5.333,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":21,"s":[1252.97,994.447,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[1252.97,994.447,0],"to":[-9.333,-1.167,0],"ti":[8.47,4.447,0]},{"i":{"x":0.855,"y":1},"o":{"x":0.552,"y":0},"t":54,"s":[1196.97,987.447,0],"to":[-8.47,-4.447,0],"ti":[-24.417,74.417,0]},{"i":{"x":0.855,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[1333.47,747.947,0],"to":[3.417,18.583,0],"ti":[0,0,0]},{"i":{"x":0.855,"y":0.855},"o":{"x":0.049,"y":0.049},"t":65,"s":[1322.97,774.447,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.924,"y":1},"o":{"x":0.049,"y":0},"t":77,"s":[1322.97,774.447,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":1,"y":1},"o":{"x":0.058,"y":0},"t":84,"s":[1068.97,993.447,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.659},"o":{"x":0.635,"y":0.635},"t":90,"s":[940.97,526.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.026,"y":0},"t":111,"s":[940.97,526.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":0.646},"o":{"x":0.167,"y":0.167},"t":121,"s":[1117.47,1010.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.848,"y":1},"o":{"x":0.167,"y":0},"t":171,"s":[1117.47,1010.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.848,"y":0.848},"o":{"x":0.376,"y":0.376},"t":185,"s":[1078.47,965.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.647,"y":1},"o":{"x":0.375,"y":0},"t":206,"s":[1078.47,965.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[993.47,890.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":226,"s":[1075.47,857.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.956,"y":1},"o":{"x":0.256,"y":0},"t":233,"s":[1134.47,848.947,0],"to":[0,0,0],"ti":[17.47,19.947,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":239,"s":[1042.47,736.947,0],"to":[-17.47,-19.947,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":249,"s":[1112.47,594.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[1203.47,553.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[1451.47,690.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.646,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[1150.47,869.947,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[1109.47,955.947,0],"to":[0,0,0],"ti":[-11.417,10.333,0]},{"t":287,"s":[1177.97,893.947,0]}],"ix":2},"a":{"a":0,"k":[-107.032,513.422,0],"ix":1},"s":{"a":0,"k":[106.42,106.42,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0.166,3.193],[-3.98,1.99],[-14.021,1.206],[-5.971,-1.99],[1.715,-4.75],[0,0],[29.448,0]],"o":[[0,0],[-0.166,-3.193],[3.98,-1.99],[15.424,-1.327],[5.971,1.99],[-4.276,11.846],[0,0],[-29.448,0]],"v":[[-129.693,555.679],[-138.226,536.101],[-138.392,522.958],[-107.665,521.763],[-76.154,522.867],[-74.164,534.809],[-80.044,559.697],[-104.552,578.75]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":0,"nm":"Smoke Explosion 13","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":60,"ix":11},"r":{"a":0,"k":-90,"ix":10},"p":{"a":0,"k":[524,696,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[58,58,100],"ix":6}},"ao":0,"w":1920,"h":1080,"ip":265,"op":301,"st":265,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[811,750,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":0,"nm":" 5","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":80,"ix":11},"r":{"a":0,"k":-54.456,"ix":10},"p":{"a":0,"k":[623,414,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[38,38,100],"ix":6}},"ao":0,"w":1920,"h":1080,"ip":201,"op":233.4,"st":201,"bm":0},{"ddd":0,"ind":19,"ty":0,"nm":" 4","refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":80,"ix":11},"r":{"a":0,"k":13.749,"ix":10},"p":{"a":0,"k":[565,414,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[34,34,100],"ix":6}},"ao":0,"w":1920,"h":1080,"ip":194,"op":214.4,"st":194,"bm":0},{"ddd":0,"ind":20,"ty":0,"nm":" 3","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":80,"ix":11},"r":{"a":0,"k":-68.274,"ix":10},"p":{"a":0,"k":[449,458,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[38,38,100],"ix":6}},"ao":0,"w":1920,"h":1080,"ip":186,"op":218.4,"st":186,"bm":0},{"ddd":0,"ind":21,"ty":0,"nm":" 2","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":80,"ix":11},"r":{"a":0,"k":-97.717,"ix":10},"p":{"a":0,"k":[455,630,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[28,28,100],"ix":6}},"ao":0,"w":1920,"h":1080,"ip":163,"op":195.4,"st":163,"bm":0},{"ddd":0,"ind":22,"ty":0,"nm":"Smoke Explosion 03","refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":80,"ix":11},"r":{"a":0,"k":-30.376,"ix":10},"p":{"a":0,"k":[471,838,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[28,28,100],"ix":6}},"ao":0,"w":1920,"h":1080,"ip":142,"op":162.4,"st":142,"bm":0},{"ddd":0,"ind":23,"ty":0,"nm":"Smoke Explosion 07","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":80,"ix":11},"r":{"a":0,"k":-97.717,"ix":10},"p":{"a":0,"k":[559,1014,0],"ix":2},"a":{"a":0,"k":[960,540,0],"ix":1},"s":{"a":0,"k":[28,28,100],"ix":6}},"ao":0,"w":1920,"h":1080,"ip":124,"op":156.4,"st":124,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"HAND 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[811,750,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-7.358,60.075],[0,0]],"o":[[0,0],[5.682,-46.385],[0,0]],"v":[[359.937,172.388],[392.358,17.925],[372.063,-129.388]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[-35.92,44.789],[0,0]],"o":[[0,0],[29.142,-36.494],[0,0]],"v":[[365.984,115.811],[462.405,12.577],[508.964,-122.726]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[43.642,26.075],[0,0]],"o":[[0,0],[-40.117,-23.968],[0,0]],"v":[[454.937,297.388],[393.358,179.925],[240.063,126.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":21,"s":[{"i":[[0,0],[35.401,36.486],[0,0]],"o":[[0,0],[-32.542,-33.539],[0,0]],"v":[[438.892,268.143],[409.829,138.741],[252.063,86.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[{"i":[[0,0],[35.401,36.486],[0,0]],"o":[[0,0],[-32.542,-33.539],[0,0]],"v":[[438.892,268.143],[409.829,138.741],[252.063,86.612]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-12.057,55.534],[0,0]],"o":[[0,0],[8.641,-39.799],[0,0]],"v":[[374.816,259.288],[415.878,134.908],[352.811,-6.563]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[72.298,23.789],[0,0]],"o":[[0,0],[-44.39,-14.606],[0,0]],"v":[[527.32,1.979],[408.141,-58.644],[251.854,-44.913]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.167,"y":0.19},"t":65,"s":[{"i":[[0,0],[68.297,33.591],[0,0]],"o":[[0,0],[-41.934,-20.625],[0,0]],"v":[[527.865,36.926],[418.251,-39.649],[261.571,-47.739]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":77,"s":[{"i":[[0,0],[68.297,33.591],[0,0]],"o":[[0,0],[-41.934,-20.625],[0,0]],"v":[[527.865,36.926],[418.251,-39.649],[261.571,-47.739]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-2.717,58.567],[0,0]],"o":[[0,0],[1.668,-35.959],[0,0]],"v":[[249,256],[277.138,154.792],[250.297,40.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-19.089,20.453],[23.302,45.186]],"o":[[0,0],[27.267,-29.215],[0,0]],"v":[[114.006,-230.973],[273.733,-194.785],[221.698,-333.186]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-19.089,20.453],[23.302,45.186]],"o":[[0,0],[27.267,-29.215],[0,0]],"v":[[114.006,-230.973],[273.733,-194.785],[221.698,-333.186]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":139,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":149,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-11.358,49.075],[0,0]],"o":[[0,0],[10.538,-45.528],[0,0]],"v":[[297.937,276.388],[374.358,140.925],[322.063,1.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":185,"s":[{"i":[[0,0],[-9.358,33.075],[0,0]],"o":[[37.063,-10.388],[12.723,-44.966],[0,0]],"v":[[253.937,222.388],[366.358,128.925],[314.063,-10.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":206,"s":[{"i":[[0,0],[-9.358,33.075],[0,0]],"o":[[37.063,-10.388],[12.723,-44.966],[0,0]],"v":[[253.937,222.388],[366.358,128.925],[314.063,-10.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-35.597,53.219],[0,0]],"o":[[0,0],[25.926,-38.76],[0,0]],"v":[[159.566,140.653],[312.476,83.082],[363.953,-43.797]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[251.937,118.388],[364.358,11.925],[368.063,-133.388]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":233,"s":[{"i":[[0,0],[-31.89,40.501],[0,0]],"o":[[0,0],[28.879,-36.738],[0,0]],"v":[[302.011,120.871],[408.988,15.429],[428.343,-126.823]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":239,"s":[{"i":[[0,0],[-48.583,34.241],[0,0]],"o":[[0,0],[35.362,-27.842],[0,0]],"v":[[200.941,-21.959],[375.941,-11.261],[433.636,-137.917]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":249,"s":[{"i":[[0,0],[-70.358,26.075],[0,0]],"o":[[0,0],[43.819,-16.239],[0,0]],"v":[[294.937,-180.612],[397.358,-46.075],[505.063,-152.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-70.358,26.075],[0,0]],"o":[[0,0],[43.819,-16.239],[0,0]],"v":[[388.937,-210.612],[435.358,-42.075],[541.063,-146.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[122.466,21.092],[0,0]],"o":[[0,0],[-45.955,-7.915],[0,0]],"v":[[658,-59],[440.534,-101.092],[252,-112]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[70.738,-10.549],[27.888,-24.185]],"o":[[0,0],[-46.121,6.878],[0,0]],"v":[[355.396,121.45],[207.641,106.82],[77.857,186.252]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-11.931,62.905],[12.754,33.015]],"o":[[0,0],[8.689,-45.814],[0,0]],"v":[[284.045,228.46],[364.058,96.186],[350.485,-46.674]],"c":false}]},{"t":287,"s":[{"i":[[0,0],[-7.358,60.075],[0,0]],"o":[[0,0],[5.682,-46.385],[0,0]],"v":[[359.937,172.388],[392.358,17.925],[372.063,-129.388]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.184313729405,0.203921571374,0.337254911661,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":65,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"st","c":{"a":0,"k":[0.156862750649,0.133333340287,0.227450981736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":76,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 2","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"Layer 14","parent":36,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[224.442,-114.047,0],"ix":2},"a":{"a":0,"k":[224.442,-114.047,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[-23.882,-31.843],[-8.213,-34.264],[-0.906,-2.719],[-39.468,37.156],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[6.572,27.419],[2.683,8.048],[19.091,-17.973],[-11.941,-95.53],[-35.824,15.922]],"v":[[104.925,-195.855],[130.999,-162.662],[187.921,-9.409],[216.511,30.264],[307.898,-11.771],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-26.876,-29.361],[1.106,-35.217],[-27.843,-26.194],[-39.468,37.156],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[27.582,30.133],[-1.07,34.074],[6.179,5.813],[19.091,-17.973],[-11.941,-95.53],[-35.824,15.922]],"v":[[104.925,-195.855],[130.999,-162.662],[180.079,-29.865],[209.241,43.604],[307.898,-11.77],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-26.876,-29.361],[1.106,-35.217],[-27.843,-26.194],[-39.468,37.156],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[27.582,30.133],[-1.07,34.074],[6.179,5.813],[19.091,-17.973],[-11.941,-95.53],[-35.824,15.922]],"v":[[104.925,-195.855],[130.999,-162.662],[180.079,-29.865],[209.241,43.604],[307.898,-11.77],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-29.064,28.378],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[2.683,8.048],[14.059,-13.727],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[234.3,-1.482],[316.664,-19.167],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-29.064,28.378],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[2.683,8.048],[14.059,-13.727],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[234.3,-1.482],[316.664,-19.167],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-29.064,28.378],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[2.683,8.048],[14.059,-13.727],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[234.3,-1.482],[316.664,-19.167],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-29.064,28.378],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[2.683,8.048],[14.059,-13.727],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[234.3,-1.482],[316.664,-19.167],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-5.314,-3.541],[2.615,20.919],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[3.109,9.326],[5.314,3.541],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[246.024,32.614],[330.043,-30.95],[332.845,-85.049],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-28.343,-32.921],[-10.146,-53.774],[-0.906,-2.719],[-5.314,-3.541],[2.615,20.919],[35.824,-15.922]],"o":[[0,0],[20.056,23.296],[4.097,21.717],[3.109,9.326],[5.314,3.541],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[182.313,-179.305],[233.413,-59.324],[246.024,32.614],[330.043,-30.95],[332.845,-85.049],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":121,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]},{"t":287,"s":[{"i":[[0,0],[-23.882,-31.843],[-13.061,-32.724],[-0.906,-2.719],[-31.85,27.213],[3.893,31.145],[35.824,-15.922]],"o":[[0,0],[18.444,24.592],[3.851,9.649],[2.683,8.048],[15.407,-13.163],[-11.941,-95.53],[-35.824,15.922]],"v":[[112.196,-196.228],[162.2,-170.604],[220.458,-50.712],[224.891,-5.417],[314.316,-20.149],[335.845,-85.025],[158.219,-226.329]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.184313729405,0.203921571374,0.337254911661,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"Shape Layer 8","parent":34,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-5.878,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[164.862,-110.395,0],"to":[-2.88,1.073,0],"ti":[2.88,-1.073,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[147.582,-103.959,0],"to":[-2.88,1.073,0],"ti":[-3.683,1.725,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[147.582,-103.959,0],"to":[3.683,-1.725,0],"ti":[-5.776,2.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[169.677,-114.306,0],"to":[5.776,-2.833,0],"ti":[-2.988,2.142,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[182.237,-120.958,0],"to":[1.511,-1.083,0],"ti":[-2.895,1.718,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[182.237,-120.958,0],"to":[2.895,-1.718,0],"ti":[-0.925,0.697,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[199.605,-131.265,0],"to":[0.633,-0.477,0],"ti":[1.97,-1.021,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[199.605,-131.265,0],"to":[-1.97,1.021,0],"ti":[0.621,-0.322,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[187.785,-125.139,0],"to":[-1.97,1.021,0],"ti":[0,0,0]},{"t":215,"s":[187.785,-125.139,0]}],"ix":2},"a":{"a":0,"k":[225.75,-265.25,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[66,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[66,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[92.054,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[120.841,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[120.841,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[120.841,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[120.841,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[99.135,100,100]},{"t":215,"s":[99.135,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":95,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":97.5,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":100,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.833,"y":0.6},"o":{"x":0.167,"y":0},"t":102.5,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.4},"t":105,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":215,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.126,-272.331],[216.307,-265.518],[225.495,-261.212],[235.476,-267.287]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":239,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[225.891,-269.581],[216.307,-265.518],[224.486,-263.962],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.126,-272.331],[216.307,-265.518],[225.495,-261.212],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":263,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":274,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":281,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":287,"s":[{"i":[[7.374,0.494],[-0.791,-3.223],[-4.712,0.375],[0.185,0.95]],"o":[[-1.877,-0.126],[0.566,2.307],[6.984,-0.556],[0.689,-2.175]],"v":[[224.567,-268.071],[216.307,-265.518],[224.502,-266.267],[235.476,-267.287]],"c":true}]},{"t":293,"s":[{"i":[[7.382,-14.765],[-4,-18],[-9.34,2.002],[4,13.5]],"o":[[-1.75,3.5],[4,18],[7,-1.5],[-4,-13.5]],"v":[[213.75,-291.5],[217.5,-257.5],[233.75,-234],[236,-273.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.650980392157,0.894117706897,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"Shape Layer 9","parent":34,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-5.878,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[140.463,-103.961,0],"to":[1.325,-0.223,0],"ti":[-1.325,0.223,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[148.413,-105.301,0],"to":[1.325,-0.223,0],"ti":[0.827,0.053,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":44,"s":[148.413,-105.301,0],"to":[-0.827,-0.053,0],"ti":[0.679,0.363,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[143.454,-105.618,0],"to":[-0.679,-0.363,0],"ti":[-1.995,1.957,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[144.339,-107.48,0],"to":[1.159,-1.136,0],"ti":[-2.895,1.718,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[144.339,-107.48,0],"to":[2.895,-1.718,0],"ti":[-2.408,1.861,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[161.707,-117.787,0],"to":[1.597,-1.234,0],"ti":[0.486,0.143,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[161.707,-117.787,0],"to":[-0.486,-0.143,0],"ti":[0.164,0.048,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":121,"s":[158.789,-118.643,0],"to":[-0.486,-0.143,0],"ti":[0,0,0]},{"t":215,"s":[158.789,-118.643,0]}],"ix":2},"a":{"a":0,"k":[226.321,-263.599,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":8,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":15,"s":[66,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":44,"s":[66,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":54,"s":[101.668,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":60,"s":[155.177,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":84,"s":[155.177,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":90,"s":[155.177,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":111,"s":[155.177,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":121,"s":[117.301,100,100]},{"t":215,"s":[117.301,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":95,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":97.5,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":100,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.833,"y":0.6},"o":{"x":0.167,"y":0},"t":102.5,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.4},"t":105,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":215,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[4,-0.973],[-1.572,-1.99],[-3.902,-0.092],[2.5,2.687]],"o":[[-2.372,0.577],[1.5,1.899],[3.51,0.083],[-2.392,-2.571]],"v":[[225.008,-268.33],[219.926,-263.601],[227.524,-259.211],[233.389,-265.458]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":233,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":239,"s":[{"i":[[4,-0.973],[-1.572,-1.99],[-3.902,-0.092],[2.5,2.687]],"o":[[-2.372,0.577],[1.5,1.899],[3.51,0.083],[-2.392,-2.571]],"v":[[225.861,-266.58],[219.926,-263.601],[227.098,-261.961],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":249,"s":[{"i":[[4,-0.973],[-1.572,-1.99],[-3.902,-0.092],[2.5,2.687]],"o":[[-2.372,0.577],[1.5,1.899],[3.51,0.083],[-2.392,-2.571]],"v":[[225.008,-268.33],[219.926,-263.601],[227.524,-259.211],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":263,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":274,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":281,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":287,"s":[{"i":[[4,-0.973],[-0.469,-0.918],[-3.902,-0.092],[1.458,1.894]],"o":[[-2.372,0.577],[1.101,2.155],[3.51,0.083],[-1.264,-1.643]],"v":[[226.085,-265.358],[219.926,-263.601],[226.682,-263.876],[233.389,-265.458]],"c":true}]},{"t":293,"s":[{"i":[[4,-5.25],[-1.572,-10.74],[-6.762,2.898],[2.5,14.5]],"o":[[-2.372,3.113],[1.5,10.25],[3.5,-1.5],[-2.392,-13.875]],"v":[[220,-282.75],[219.5,-259.25],[232,-245],[232.75,-267.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.424144580317,0.666853362439,0.772549019608,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":34,"ty":3,"nm":"skull","parent":36,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[162.778,-121.426,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[162.778,-121.426,0],"to":[-1.257,0.823,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[162.778,-121.426,0],"to":[-2.513,1.646,0],"ti":[1.257,-0.823,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[147.697,-111.548,0],"to":[-2.513,1.646,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":111,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":215,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":232.934,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":239,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":249,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":271,"s":[147.697,-111.548,0],"to":[0,0,0],"ti":[0,0,0]},{"t":278,"s":[147.697,-111.548,0]}],"ix":2},"a":{"a":0,"k":[162.778,-121.426,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"Layer 7","parent":36,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[165.82,-71.126,0],"ix":2},"a":{"a":0,"k":[165.82,-71.126,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":15,"s":[{"i":[[0,0],[-14.549,-0.501],[1.99,23.882],[3.69,22.386],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[9.235,0.318],[-1.99,-23.882],[-8.496,-51.545],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[172.711,-19.026],[224.054,32.681],[202.874,-40.251],[212.151,-108.305],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-9.268,-1.07],[1.99,23.882],[3.69,22.386],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[9.179,1.059],[-1.99,-23.882],[-8.496,-51.545],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[210.837,41.636],[202.874,-40.251],[212.151,-108.305],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-9.268,-1.07],[1.99,23.882],[3.69,22.386],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[9.179,1.059],[-1.99,-23.882],[-8.496,-51.545],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[210.837,41.636],[202.874,-40.251],[212.151,-108.305],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.167,"y":0},"t":54,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[-23.263,2.647],[-1.333,23.928],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[32.04,-3.646],[1.858,-33.364],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[208.36,56.102],[235.275,-34.609],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-23.263,2.647],[-1.333,23.928],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[32.04,-3.646],[1.858,-33.364],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[208.36,56.102],[235.275,-34.609],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-23.263,2.647],[-1.333,23.928],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[32.04,-3.646],[1.858,-33.364],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[208.36,56.102],[235.275,-34.609],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-23.263,2.647],[-1.333,23.928],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[32.04,-3.646],[1.858,-33.364],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[208.36,56.102],[235.275,-34.609],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-13.866,4.982],[5.914,27.437],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[12.352,-4.438],[-7.042,-32.666],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[188.194,-18.205],[234.424,48.313],[244.299,-37.535],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-13.866,4.982],[5.914,27.437],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[12.352,-4.438],[-7.042,-32.666],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[188.194,-18.205],[234.424,48.313],[244.299,-37.535],[221.725,-110.342],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":121,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":185.318,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[175.625,-19.542],[201.498,52.105],[231.351,-35.464],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":203.732,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[186.525,-14.424],[212.397,57.224],[227.583,-27.05],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]},{"t":287,"s":[{"i":[[0,0],[-13.931,0],[1.99,23.882],[15.922,49.755],[19.902,0],[0,-17.912],[-9.951,-15.922]],"o":[[0,0],[13.931,0],[-1.99,-23.882],[-15.922,-49.755],[-19.902,0],[0,17.912],[9.951,15.922]],"v":[[168.17,-15.368],[194.043,56.28],[223.896,-31.289],[215.935,-106.917],[138.317,-198.467],[106.474,-182.545],[138.317,-67.113]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.133333340287,0.113725490868,0.207843139768,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"head","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.166],"y":[0]},"t":0,"s":[5.878]},{"i":{"x":[0.828],"y":[1]},"o":{"x":[0.193],"y":[0]},"t":8,"s":[44.956]},{"i":{"x":[0.833],"y":[0.914]},"o":{"x":[0.252],"y":[0]},"t":15,"s":[-20.174]},{"i":{"x":[0.833],"y":[0.735]},"o":{"x":[0.167],"y":[0.22]},"t":21,"s":[-16.307]},{"i":{"x":[0.814],"y":[1]},"o":{"x":[0.167],"y":[0.09]},"t":44,"s":[-10.514]},{"i":{"x":[0.659],"y":[1]},"o":{"x":[0.275],"y":[0]},"t":54,"s":[-3.089]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.34],"y":[0]},"t":60,"s":[-11.384]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":65,"s":[-11.384]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":77,"s":[-11.384]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.33],"y":[0]},"t":84,"s":[-11.384]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.329],"y":[0]},"t":90,"s":[-0.465]},{"i":{"x":[0.82],"y":[1]},"o":{"x":[0.329],"y":[0]},"t":111,"s":[-0.465]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":121,"s":[-6.892]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":130.207,"s":[-6.892]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":139,"s":[-2.475]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":148.975,"s":[-2.475]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[4.247]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":171,"s":[4.247]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":185.318,"s":[18.495]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":203.732,"s":[18.495]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":215,"s":[18.495]},{"i":{"x":[0.652],"y":[0.679]},"o":{"x":[0.199],"y":[0]},"t":226,"s":[5.878]},{"i":{"x":[0.668],"y":[-0.825]},"o":{"x":[0.359],"y":[-1.291]},"t":232.934,"s":[22.584]},{"i":{"x":[0.683],"y":[0.743]},"o":{"x":[0.285],"y":[-0.418]},"t":239,"s":[18.847]},{"i":{"x":[0.813],"y":[1]},"o":{"x":[0.437],"y":[0.76]},"t":249,"s":[41.96]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":261,"s":[54.869]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":266,"s":[26.413]},{"i":{"x":[1],"y":[1]},"o":{"x":[0.512],"y":[0]},"t":271,"s":[-66.143]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":278,"s":[4.557]},{"t":292,"s":[5.878]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.297,"y":0},"t":0,"s":[1126.666,565.691,0],"to":[0,0.907,0],"ti":[0,-2,0]},{"i":{"x":0.789,"y":1},"o":{"x":0.185,"y":0},"t":8,"s":[1330.666,532.691,0],"to":[0,0.482,0],"ti":[-0.058,0.811,0]},{"i":{"x":0.646,"y":0.25},"o":{"x":0.261,"y":0},"t":15,"s":[974.666,868.691,0],"to":[0.001,-0.02,0],"ti":[-0.132,0.327,0]},{"i":{"x":0.996,"y":0},"o":{"x":0.004,"y":1},"t":21,"s":[992.709,826.232,0],"to":[0.132,-0.327,0],"ti":[-0.053,-0.03,0]},{"i":{"x":0.796,"y":1},"o":{"x":0.413,"y":0.452},"t":44,"s":[993.459,824.732,0],"to":[0.053,0.03,0],"ti":[-0.031,0.429,0]},{"i":{"x":0.66,"y":1},"o":{"x":0.283,"y":0},"t":54,"s":[1086.666,708.691,0],"to":[0.012,-0.165,0],"ti":[0.005,-0.065,0]},{"i":{"x":0.67,"y":0.207},"o":{"x":0.34,"y":0.002},"t":60,"s":[966.661,713.758,0],"to":[-0.002,0.029,0],"ti":[-1.089,-0.007,0]},{"i":{"x":0.986,"y":0},"o":{"x":0.001,"y":0.072},"t":65,"s":[982.791,714.005,0],"to":[1.089,0.007,0],"ti":[-1.089,-0.007,0]},{"i":{"x":0.67,"y":0.686},"o":{"x":0.001,"y":0.001},"t":77,"s":[982.791,714.005,0],"to":[0.604,0.004,0],"ti":[-1.089,-0.007,0]},{"i":{"x":0.771,"y":0.972},"o":{"x":0.162,"y":0.02},"t":84,"s":[982.791,771.005,0],"to":[1.089,0.007,0],"ti":[-0.016,0.003,0]},{"i":{"x":1,"y":0},"o":{"x":0,"y":1},"t":90,"s":[942.166,390.755,0],"to":[0.074,-0.016,0],"ti":[-0.016,0.003,0]},{"i":{"x":0.787,"y":1},"o":{"x":0.265,"y":0.057},"t":111,"s":[942.166,390.755,0],"to":[0.074,-0.016,0],"ti":[-0.034,0.48,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[1067.666,730.691,0],"to":[0.055,-0.771,0],"ti":[-0.167,2.333,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130.207,"s":[1067.666,730.691,0],"to":[0.167,-2.333,0],"ti":[1.786,4.799,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[1068.666,716.691,0],"to":[-1.003,-2.694,0],"ti":[1.786,4.799,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[1068.666,716.691,0],"to":[-1.003,-2.694,0],"ti":[-2.08,3.224,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":185.318,"s":[1051.666,687.691,0],"to":[3.333,-5.167,0],"ti":[-9,3.833,0]},{"i":{"x":0.753,"y":1},"o":{"x":0.209,"y":0},"t":203.732,"s":[1105.666,664.691,0],"to":[0.332,-0.141,0],"ti":[-0.015,0.071,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[1105.666,664.691,0],"to":[3.5,-16.5,0],"ti":[-37.167,21,0]},{"i":{"x":0.649,"y":0.679},"o":{"x":0.22,"y":0},"t":226,"s":[1126.666,565.691,0],"to":[10.251,-5.792,0],"ti":[-11.214,1.194,0]},{"i":{"x":0.66,"y":0.344},"o":{"x":0.295,"y":1},"t":232.934,"s":[1207.163,558.083,0],"to":[12.191,-1.298,0],"ti":[11.143,-1.489,0]},{"i":{"x":0.662,"y":0.723},"o":{"x":0.29,"y":0.207},"t":239,"s":[1200.819,559.393,0],"to":[-15.369,2.054,0],"ti":[-24.32,1.529,0]},{"i":{"x":0.697,"y":1},"o":{"x":0.352,"y":0.645},"t":249,"s":[1281.371,551.652,0],"to":[16.146,-1.015,0],"ti":[-7.894,1.055,0]},{"i":{"x":0.697,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[1326.666,544.691,0],"to":[33.667,-4.5,0],"ti":[0,0,0]},{"i":{"x":0.697,"y":1},"o":{"x":0.181,"y":0},"t":266,"s":[969.666,640.691,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.724,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[872.666,966.691,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.566,"y":0.703},"o":{"x":0.179,"y":0},"t":278,"s":[1103.666,668.691,0],"to":[0,0,0],"ti":[-4.135,18.768,0]},{"i":{"x":0.84,"y":1},"o":{"x":0.386,"y":0.749},"t":283,"s":[1118.142,605.671,0],"to":[6.715,-30.474,0],"ti":[0,-1.238,0]},{"t":292,"s":[1126.666,565.691,0]}],"ix":2},"a":{"a":0,"k":[254.666,-45.309,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":1,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[379.861,-233.563],[440.945,-109.615],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[0,0],[-17.631,-2.457],[-20.908,-40.281],[29.155,-22.833],[14.208,5.215],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[27.154,52.315],[-26.083,20.427],[-20.797,-7.633],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[375.463,-191.636],[392.216,-62.132],[339.232,-92.185],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[-17.721,1.404],[-43.853,1.642],[-22.726,-38.864],[28.472,-11.784],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[26.329,-2.229],[44.173,-3.151],[58.624,84.777],[-20.334,7.942],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[252.622,-302.573],[357.951,-285.951],[445.412,-343.893],[348.641,-97.114],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":21,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[36.455,-6.51],[6.701,-2.366],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-45.869,8.191],[-20.89,7.376],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[373.33,-229.28],[395.391,-73.313],[347.28,-97.986],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":25,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[379.861,-233.563],[440.945,-109.615],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":44,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[379.861,-233.563],[440.945,-109.615],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.701,-38.703],[24.007,-26.597],[5.811,-3.93],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[45.615,74.488],[-26.468,29.324],[-18.351,12.41],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[377.991,-224.068],[400.536,-65.772],[342.139,-96.903],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.701,-38.703],[24.007,-26.597],[5.811,-3.93],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[45.615,74.488],[-26.468,29.324],[-18.351,12.41],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[377.991,-224.068],[400.536,-65.772],[342.139,-96.903],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":56,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[388.956,-235.075],[450.04,-111.127],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":62,"s":[{"i":[[0,0],[-17.631,-2.457],[-35.774,-41.371],[19.797,-31.296],[17.423,-5.704],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[37.886,43.813],[-14.339,22.667],[-21.054,6.892],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[344.55,-225.372],[393.073,-94.772],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":66,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.683,-38.714],[23.634,-24.527],[5.065,-3.243],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.821,55.287],[-32.09,33.303],[-6.653,4.26],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[353.694,-225.277],[388.625,-82.54],[340.521,-94.683],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":92,"s":[{"i":[[0,0],[-17.631,-2.457],[-35.224,-27.937],[17.01,-40.672],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[45.549,36.173],[-6.986,16.482],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[423.667,-126.316],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":96,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":111,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":116,"s":[{"i":[[0,0],[-17.631,-2.457],[-44.387,7.14],[24.026,-44.255],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.345,-5.364],[-6.986,16.482],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[346.428,-260.828],[415.051,-222.948],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":119,"s":[{"i":[[0,0],[-17.631,-2.457],[-44.387,7.14],[24.026,-44.255],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.345,-5.364],[-6.986,16.482],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[346.428,-260.828],[415.051,-222.948],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":122,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[30.009,-21.699],[9.854,2.09],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-43.409,31.388],[-21.672,-4.597],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[391.617,-81.155],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":126,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":239,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":249,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.416,-38.876],[29.836,-21.054],[16.188,-3.381],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.262,55.221],[-31.727,22.389],[-21.686,4.53],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[400.753,-83.798],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-17.631,-2.457],[-23.416,-38.876],[29.836,-21.054],[16.188,-3.381],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[33.262,55.221],[-31.727,22.389],[-21.686,4.53],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[400.753,-83.798],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-17.631,-2.457],[-43.841,11.733],[15.179,-33.778],[73.454,-71.73],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[38.971,-10.43],[-7.34,16.333],[-15.85,15.478],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[373.885,-328.599],[467.448,-310.108],[343.684,-195.734],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-17.731,-1.575],[-6.286,22.68],[-50.798,-1.103],[42.685,-93.373],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[19.219,1.707],[3.721,-13.425],[44.355,0.963],[-13.095,28.646],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[251.299,-299.682],[309.199,-324.048],[369.457,-415.478],[373.617,-184.916],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":277,"s":[{"i":[[0,0],[-17.731,-1.575],[0.19,11.689],[0.069,14.226],[22.324,-118.707],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[19.219,1.707],[-0.069,-4.229],[-0.311,-64.514],[-9.476,50.385],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[251.299,-299.682],[295.7,-309.773],[252.952,-337.84],[407.004,-216.812],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":280,"s":[{"i":[[0,0],[-17.673,-2.088],[-18.578,-13.819],[-15.85,-24.722],[37.948,-38.182],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[16.825,1.939],[30.814,10.191],[13.416,49.092],[-15.781,26.21],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[251.882,-295.485],[331.637,-275.613],[413.179,-243.623],[369.468,-145.71],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":283,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[200.308,-282.303],[252.301,-292.471],[355.735,-230.26],[416.818,-106.312],[342.521,-94.666],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]},{"t":292,"s":[{"i":[[0,0],[-17.631,-2.457],[-32.051,-32.131],[15.179,-33.778],[29.309,-12.78],[5.702,-3.258],[43.785,13.931],[-1.99,15.922],[-45.775,25.873]],"o":[[0,0],[15.107,2.105],[41.627,41.73],[-7.34,16.333],[-20.307,8.855],[-13.931,7.961],[-43.785,-13.931],[1.99,-15.922],[45.775,-25.873]],"v":[[206.979,-285.04],[258.973,-295.208],[379.861,-233.563],[440.945,-109.615],[349.193,-97.403],[331.798,-65.835],[169.166,-22.333],[97.518,-191.501],[149.263,-255.187]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.156862750649,0.133333340287,0.227450981736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.184313729405,0.203921571374,0.337254911661,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"Layer 15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1249.59,919.949,0],"ix":2},"a":{"a":0,"k":[438.59,169.949,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-1.548,-12.322]],"o":[[0,0],[0,0]],"v":[[330.631,104.789],[352.548,126.822]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":7.651,"s":[{"i":[[0,0],[-7.548,-12.822]],"o":[[0,0],[0,0]],"v":[[304.631,78.789],[318.548,98.822]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[-19.048,-2.822]],"o":[[0,0],[0,0]],"v":[[418.131,249.789],[462.048,256.822]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-19.048,-2.822]],"o":[[0,0],[0,0]],"v":[[421.458,231.488],[465.376,238.521]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-19.048,-2.822]],"o":[[0,0],[0,0]],"v":[[421.458,231.488],[465.376,238.521]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-31.048,5.178]],"o":[[0,0],[0,0]],"v":[[436.131,169.789],[488.048,177.322]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[-40.048,12.678]],"o":[[0,0],[0,0]],"v":[[402.131,173.039],[477.048,167.072]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-40.048,12.678]],"o":[[0,0],[0,0]],"v":[[404.631,172.914],[479.548,166.947]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-40.048,12.678]],"o":[[0,0],[0,0]],"v":[[404.631,172.914],[479.548,166.947]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-40.048,12.678]],"o":[[0,0],[0,0]],"v":[[395.631,208.914],[470.548,202.947]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-8.548,-4.947]],"o":[[0,0],[0,0]],"v":[[200.631,-47.086],[214.548,-37.053]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-8.548,-4.947]],"o":[[0,0],[0,0]],"v":[[200.631,-47.086],[214.548,-37.053]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0,0],[-31.048,5.178]],"o":[[0,0],[0,0]],"v":[[436.131,169.789],[488.048,177.322]],"c":false}]},{"i":{"x":0.833,"y":0.743},"o":{"x":0.333,"y":0},"t":130.207,"s":[{"i":[[0,0],[-31.048,5.178]],"o":[[0,0],[0,0]],"v":[[436.131,169.789],[488.048,177.322]],"c":false}]},{"i":{"x":0.833,"y":0.743},"o":{"x":0.167,"y":0.257},"t":139,"s":[{"i":[[0,0],[-25.616,4.168]],"o":[[0,0],[0,0]],"v":[[427.304,168.491],[472.471,174.466]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.257},"t":148.975,"s":[{"i":[[0,0],[-25.616,4.168]],"o":[[0,0],[0,0]],"v":[[427.304,168.491],[472.471,174.466]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[419.131,167.289],[458.048,171.822]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[419.131,167.289],[458.048,171.822]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":185,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[358.395,161.035],[397.312,165.567]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[401.813,155.54],[440.731,160.073]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[401.813,155.54],[440.731,160.073]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-1.548,-12.322]],"o":[[0,0],[0,0]],"v":[[330.631,104.789],[352.548,126.822]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-3.594,-12.492]],"o":[[0,0],[0,0]],"v":[[321.765,95.923],[340.954,117.274]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-3.223,-12.462]],"o":[[0,0],[0,0]],"v":[[323.372,97.53],[343.055,119.004]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-5.932,-12.687]],"o":[[0,0],[0,0]],"v":[[311.633,85.791],[327.705,106.363]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-7.548,-12.822]],"o":[[0,0],[0,0]],"v":[[304.631,78.789],[318.548,98.822]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[429.813,74.54],[468.731,79.073]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-18.864,8.851]],"o":[[0,0],[0,0]],"v":[[335.003,234.628],[373.638,228.114]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-20.586,3.232]],"o":[[0,0],[0,0]],"v":[[406.813,184.54],[445.731,189.073]],"c":false}]},{"t":287,"s":[{"i":[[0,0],[-1.548,-12.322]],"o":[[0,0],[0,0]],"v":[[330.631,104.789],[352.548,126.822]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.156862750649,0.133333340287,0.227450981736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.184313729405,0.203921571374,0.337254911661,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1182.337,917.528,0],"ix":2},"a":{"a":0,"k":[371.337,167.528,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-17.157,-5.513],[0,0]],"o":[[0,0],[35.182,11.305],[0,0]],"v":[[263.146,87.756],[309.818,97.695],[378.028,116.607]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":7.651,"s":[{"i":[[0,0],[-19.464,-9.47],[0,0]],"o":[[0,0],[21.182,10.305],[0,0]],"v":[[273.146,54.756],[301.818,75.695],[333.028,90.607]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[272.146,252.756],[331.818,260.195],[468.028,237.107]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[273.042,234.071],[334.25,240.741],[474.043,220.214]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[273.042,234.071],[334.25,240.741],[474.043,220.214]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[278.646,166.256],[344.818,175.195],[485.028,162.607]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[221.146,168.506],[304.318,193.445],[445.028,152.357]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[225.146,168.381],[308.318,193.32],[449.028,152.232]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[225.146,168.381],[308.318,193.32],[449.028,152.232]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[226.146,201.381],[309.318,226.32],[450.028,185.232]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-9.941,-2.736],[0,0]],"o":[[0,0],[12.532,3.45],[0,0]],"v":[[167.146,-58.619],[184.466,-51.45],[213,-48.408]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-9.941,-2.736],[0,0]],"o":[[0,0],[12.532,3.45],[0,0]],"v":[[167.146,-58.619],[184.466,-51.45],[213,-48.408]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[279.146,174.756],[341.818,180.695],[485.028,162.607]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130.207,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[279.146,174.756],[341.818,180.695],[485.028,162.607]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[274.646,162.756],[341.318,175.195],[468.028,159.107]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-45.277,4.478],[0,0]],"o":[[0,0],[85.487,-8.455],[0,0]],"v":[[274.646,162.756],[341.318,175.195],[468.028,159.107]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":185,"s":[{"i":[[0,0],[-42.836,-1.277],[0,0]],"o":[[7.779,1.89],[60.219,1.79],[0,0]],"v":[[243.686,152.257],[309.858,159.204],[400.621,154.6]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[0,0],[-42.833,-1.285],[0,0]],"o":[[0,0],[60.182,1.805],[0,0]],"v":[[277.646,143.756],[343.818,150.695],[434.528,146.107]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-42.833,-1.285],[0,0]],"o":[[0,0],[60.182,1.805],[0,0]],"v":[[277.646,143.756],[343.818,150.695],[434.528,146.107]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-17.157,-5.513],[0,0]],"o":[[0,0],[35.182,11.305],[0,0]],"v":[[263.146,87.756],[309.818,97.695],[378.028,116.607]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-17.943,-6.862],[0,0]],"o":[[0,0],[30.408,10.964],[0,0]],"v":[[266.556,76.503],[307.09,90.193],[362.683,107.741]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-17.801,-6.618],[0,0]],"o":[[0,0],[31.273,11.026],[0,0]],"v":[[265.938,78.542],[307.585,91.552],[365.464,109.348]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-18.842,-8.404],[0,0]],"o":[[0,0],[24.952,10.575],[0,0]],"v":[[270.453,63.643],[303.973,81.619],[345.147,97.609]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-19.464,-9.47],[0,0]],"o":[[0,0],[21.182,10.305],[0,0]],"v":[[273.146,54.756],[301.818,75.695],[333.028,90.607]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[-42.833,-1.285],[0,0]],"o":[[7.78,1.885],[60.182,1.805],[0,0]],"v":[[285.146,70.756],[351.318,77.695],[487.028,65.607]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[-38.456,18.906],[0,0]],"o":[[7.757,-1.975],[54.032,-26.563],[0,0]],"v":[[228.717,269.466],[300.445,256.137],[369.966,208.639]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-42.833,-1.285],[0,0]],"o":[[0,0],[60.182,1.805],[0,0]],"v":[[282.146,176.756],[348.318,183.695],[439.028,179.107]],"c":false}]},{"t":287,"s":[{"i":[[0,0],[-17.157,-5.513],[0,0]],"o":[[0,0],[35.182,11.305],[0,0]],"v":[[263.146,87.756],[309.818,97.695],[378.028,116.607]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.156862750649,0.133333340287,0.227450981736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.184313729405,0.203921571374,0.337254911661,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":39,"ty":4,"nm":"Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1157.718,945.435,0],"ix":2},"a":{"a":0,"k":[346.718,195.435,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-3.837,-24.197],[-7.842,-41.883],[0,0],[19.932,-56.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-8.481,50.651],[-1.128,69.161],[21.671,44.118],[21.922,33.133],[8.938,5.683]],"o":[[0,0],[0,0],[-1.99,9.951],[3.732,23.535],[7.193,38.417],[0,0],[-15.309,43.185],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[6.201,-37.035],[0.748,-45.833],[-11.747,-23.914],[0,0],[-1.264,-0.804]],"v":[[395.269,-203.049],[239.886,-164.441],[220.935,-154.49],[231.837,-69.803],[248.583,11.883],[265.377,96.756],[233.068,259.227],[220.077,354.805],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[477.936,329.075],[489.481,205.349],[506.128,64.839],[467.647,-61.397],[422.078,-168.133],[398.674,-202.141]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[1.289,0.584],[0,0],[7.673,-6.54],[11.758,-21.084],[19.512,-37.164],[0,0],[8.241,-71.586],[0,0],[-5.971,-13.913],[-31.843,-1.988],[-11.941,1.988],[4.122,9.261],[1.99,27.827],[-7.156,50.346],[-13.345,64.207],[-7.145,43.276],[-17.689,38.296],[8.161,12.254]],"o":[[0,0],[0,0],[-7.673,6.54],[-11.3,20.624],[-18.007,33.997],[0,0],[-6.44,55.192],[0,0],[5.971,13.913],[31.843,1.988],[11.941,-1.988],[-7.961,-17.888],[-1.99,-27.826],[5.903,-40.955],[9.16,-45.579],[6.484,-36.564],[0,0],[-1.36,-2.042]],"v":[[582.282,-191.44],[448.312,-252.73],[427.538,-256.641],[384.101,-191.226],[339.473,-101.892],[286.353,22.331],[225.329,246.905],[219.407,354.976],[219.916,444.407],[263.7,470.245],[490.584,468.258],[500.535,438.444],[476.94,329.025],[478.193,229.146],[520.997,88.012],[548.875,-32.069],[581.917,-148.045],[584.868,-186.769]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0.826,-0.491],[0,0],[-1.649,-7.768],[-16.954,-7.745],[-24.104,-10.731],[0,0],[25.873,-29.303],[0,0],[-5.971,-11.393],[-31.843,-1.628],[-11.941,1.628],[4.122,7.584],[8.064,17.112],[-27.863,16.276],[6.962,56.195],[67.158,18.544],[-5.523,1.903],[11.172,-1.957]],"o":[[0,0],[0,0],[1.649,7.768],[25.654,11.72],[14.743,6.563],[0,0],[-25.873,29.303],[0,0],[5.971,11.393],[31.843,1.628],[11.941,-1.628],[-7.961,-14.649],[-9.75,-20.691],[27.863,-16.276],[-11.931,-96.3],[-30.973,-8.552],[0,0],[-1.58,0.277]],"v":[[202.566,70.098],[122.828,172.969],[117.112,183.273],[158.334,211.98],[217.664,238.87],[272.14,253.241],[183.068,308.65],[181.077,377.016],[219.916,449.446],[263.7,470.605],[490.584,468.977],[500.535,444.563],[416.936,347.888],[464.74,306.314],[530.931,212.3],[354.588,82.962],[244.4,69.858],[206.237,68.957]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0.867,-0.472],[0,0],[-0.923,-8.603],[-16.14,-9.763],[-22.972,-13.574],[0,0],[25.873,-32.178],[0,0],[-5.971,-12.147],[-31.843,-1.735],[-11.941,1.735],[4.122,8.085],[4.955,21.524],[-27.863,17.352],[9.576,59.406],[65.053,25.431],[-5.666,1.649],[11.287,-1.27]],"o":[[0,0],[0,0],[0.922,8.603],[24.423,14.773],[14.051,8.302],[0,0],[-25.873,32.178],[0,0],[5.971,12.147],[31.843,1.735],[11.941,-1.735],[-7.961,-15.617],[-5.778,-23.271],[27.863,-17.352],[-14.635,-92.612],[-30.002,-11.729],[0,0],[-1.597,0.18]],"v":[[221.146,25.323],[131.651,132.836],[125.019,143.637],[165.203,182.972],[225.461,216.046],[274.187,234.514],[183.068,296.897],[181.077,370.721],[219.916,447.939],[263.7,470.497],[490.584,468.762],[500.535,442.733],[418.472,336.776],[463.205,290.142],[530.419,181.703],[369.027,54.434],[262.756,28.298],[224.9,24.361]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0.867,-0.472],[0,0],[-0.923,-8.603],[-16.14,-9.763],[-22.972,-13.574],[0,0],[25.873,-32.178],[0,0],[-5.971,-12.147],[-31.843,-1.735],[-11.941,1.735],[4.122,8.085],[4.955,21.524],[-27.863,17.352],[9.576,59.406],[65.053,25.431],[-5.666,1.649],[11.287,-1.27]],"o":[[0,0],[0,0],[0.922,8.603],[24.423,14.773],[14.051,8.302],[0,0],[-25.873,32.178],[0,0],[5.971,12.147],[31.843,1.735],[11.941,-1.735],[-7.961,-15.617],[-5.778,-23.271],[27.863,-17.352],[-14.635,-92.612],[-30.002,-11.729],[0,0],[-1.597,0.18]],"v":[[221.146,25.323],[131.651,132.836],[125.019,143.637],[165.203,182.972],[225.461,216.046],[274.187,234.514],[183.068,296.897],[181.077,370.721],[219.916,447.939],[263.7,470.497],[490.584,468.762],[500.535,442.733],[418.472,336.776],[463.205,290.141],[530.419,181.703],[369.027,54.434],[262.756,28.298],[224.9,24.361]],"c":true}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[1.003,-0.168],[0,0],[2.772,-9.762],[-8.5,-18.644],[-13.099,-11.024],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[-1.68,48.107],[49.624,53.857],[-5.952,-0.473],[11.007,3.141]],"o":[[0,0],[0,0],[-2.772,9.762],[8.5,18.644],[13.099,11.024],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[3.129,-89.593],[-22.887,-24.839],[0,0],[-1.557,-0.444]],"v":[[329.058,-87.864],[199.722,-5.245],[189.014,3.886],[203.807,68.95],[250.343,136.536],[289.956,165.639],[188.068,270.227],[186.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[424.936,314.075],[466.74,258.349],[549.234,169.279],[451.401,5.777],[366.405,-67.926],[332.946,-87.408]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0.971,-0.303],[0,0],[1.412,-10.049],[-11.406,-17.022],[-19.844,-16.764],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-23.733,24.681],[5.471,47.825],[56.521,46.567],[-5.961,0.345],[11.333,1.606]],"o":[[0,0],[0,0],[-1.412,10.049],[10.857,16.203],[13.078,11.048],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.26,-28.349],[-9.518,-83.209],[-26.067,-21.477],[0,0],[-1.603,-0.227]],"v":[[217.401,-92.383],[93.875,12.539],[84.516,23.048],[117.701,78.911],[174.7,140.742],[219.322,171.087],[182.068,268.227],[180.077,353.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[418.936,318.075],[455.74,246.349],[495.518,129.209],[351.397,-16.346],[257.123,-77.737],[221.315,-92.462]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0.979,-0.275],[0,0],[1.701,-10],[-10.905,-17.337],[-19.343,-17.324],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-23.733,24.681],[3.804,47.957],[55.128,48.161],[-5.966,0.173],[11.277,1.932]],"o":[[0,0],[0,0],[-1.701,10],[10.38,16.503],[12.748,11.417],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.26,-28.349],[-6.749,-86.384],[-25.425,-22.212],[0,0],[-1.595,-0.273]],"v":[[232.465,-90.716],[106.01,10.549],[96.355,20.779],[127.899,77.554],[180.271,137.312],[223.979,168.921],[182.568,269.227],[180.577,354.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[421.436,318.075],[457.74,249.849],[500.453,138.524],[364.152,-10.872],[271.731,-74.935],[236.378,-90.682]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0.979,-0.275],[0,0],[1.701,-10],[-10.905,-17.337],[-19.343,-17.324],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-23.733,24.681],[3.804,47.957],[55.128,48.161],[-5.966,0.173],[11.277,1.932]],"o":[[0,0],[0,0],[-1.701,10],[10.38,16.503],[12.748,11.417],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.26,-28.349],[-6.749,-86.384],[-25.425,-22.212],[0,0],[-1.595,-0.273]],"v":[[232.465,-90.716],[106.01,10.549],[96.355,20.779],[127.899,77.554],[180.271,137.312],[223.979,168.921],[182.568,269.227],[180.577,354.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[421.436,318.075],[457.74,249.849],[500.453,138.524],[364.152,-10.872],[271.731,-74.935],[236.378,-90.682]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0.962,-0.307],[0,0],[1.171,-9.213],[-11.801,-15.173],[-20.225,-14.673],[0,0],[25.873,-34.525],[0,0],[-5.971,-12.72],[-31.843,-1.817],[-11.941,1.817],[4.122,8.467],[1.99,25.439],[-23.733,22.535],[6.271,43.501],[57.577,40.713],[-5.947,0.502],[11.36,1.11]],"o":[[0,0],[0,0],[-1.171,9.213],[11.234,14.443],[13.329,9.67],[0,0],[-25.873,34.525],[0,0],[5.971,12.72],[31.843,1.817],[11.941,-1.817],[-7.961,-16.354],[-1.99,-25.439],[27.26,-25.883],[-11.295,-78.349],[-26.554,-18.777],[0,0],[-1.607,-0.157]],"v":[[225.273,-33.669],[104.371,65.94],[95.272,75.822],[129.758,125.749],[185.195,177.193],[230.498,203.479],[182.568,286.885],[180.577,365.02],[219.916,446.793],[263.7,470.416],[490.584,468.598],[500.535,441.342],[421.436,331.484],[457.74,269.193],[504.906,159.798],[360.952,31.5],[265.305,-21.553],[229.181,-33.864]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0.986,0.246],[0,0],[6.435,-7.841],[-13.846,-27.964],[-8.21,-24.635],[-6.204,-71.731],[-5.999,-36.774],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[2.863,51.218],[-1.74,49.151],[-5.926,47.741],[34.907,73.04],[18.788,29.653],[8.836,7.269]],"o":[[0,0],[0,0],[-6.435,7.841],[5.368,10.841],[5.411,16.235],[6.204,71.731],[8.732,53.531],[0,0],[5.971,13.932],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-2.628,-47.002],[1.913,-54.014],[13.592,-109.507],[-14.558,-30.461],[-18.788,-29.653],[-1.25,-1.028]],"v":[[214.91,-387.538],[54.886,-362.286],[41.429,-358.188],[85.914,-275.62],[137.484,-150.752],[170.043,-17.271],[164.268,167.439],[208.278,307.503],[234.616,380.067],[278.401,405.94],[415.284,404.889],[425.235,375.036],[406.137,273.752],[403.441,157.062],[415.29,47.462],[358.807,-222.647],[296.565,-321.408],[218.292,-385.569]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0.986,0.246],[0,0],[6.435,-7.841],[-13.846,-27.964],[-8.21,-24.635],[-6.204,-71.731],[-5.999,-36.774],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[2.863,51.218],[-1.74,49.151],[-5.926,47.741],[34.907,73.04],[18.788,29.653],[8.836,7.269]],"o":[[0,0],[0,0],[-6.435,7.841],[5.368,10.841],[5.411,16.235],[6.204,71.731],[8.732,53.531],[0,0],[5.971,13.932],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-2.628,-47.002],[1.913,-54.014],[13.592,-109.507],[-14.558,-30.461],[-18.788,-29.653],[-1.25,-1.028]],"v":[[214.91,-387.538],[54.886,-362.286],[41.429,-358.188],[85.914,-275.62],[137.484,-150.752],[170.043,-17.271],[164.268,167.439],[208.278,307.503],[234.616,380.067],[278.401,405.94],[415.284,404.889],[425.235,375.036],[406.137,273.752],[403.441,157.062],[415.29,47.462],[358.807,-222.647],[296.565,-321.408],[218.292,-385.569]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[176.146,12.559],[166.195,22.51],[186.097,86.197],[237.842,149.883],[279.637,175.756],[183.068,270.227],[181.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[419.936,314.075],[461.74,258.349],[538.388,158.839],[427.907,3.603],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.833,"y":0.743},"o":{"x":0.333,"y":0},"t":130.207,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[176.146,12.559],[166.195,22.51],[186.097,86.197],[237.842,149.883],[279.637,175.756],[183.068,270.227],[181.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[419.936,314.075],[461.74,258.349],[538.388,158.839],[427.907,3.603],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.833,"y":0.743},"o":{"x":0.167,"y":0.257},"t":139,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[174.588,5.809],[164.637,15.76],[184.539,79.447],[236.285,143.133],[278.079,169.006],[186.183,270.227],[184.193,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[419.417,307.325],[460.183,251.599],[534.234,152.089],[426.349,-3.147],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.257},"t":148.975,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[174.588,5.809],[164.637,15.76],[184.539,79.447],[236.285,143.133],[278.079,169.006],[186.183,270.227],[184.193,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[419.417,307.325],[460.183,251.599],[534.234,152.089],[426.349,-3.147],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[173.146,-0.441],[163.195,9.51],[183.097,73.197],[234.842,136.883],[276.637,162.756],[189.068,270.227],[187.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[418.936,301.075],[458.74,245.349],[530.388,145.839],[424.907,-9.397],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":170.741,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-9.951,-17.912],[-13.931,-9.951],[0,0],[25.873,-37.814],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-27.863,19.902],[2.137,48.089],[53.736,49.755],[-5.971,0],[11.221,2.259]],"o":[[0,0],[0,0],[-1.99,9.951],[9.951,17.912],[13.931,9.951],[0,0],[-25.873,37.814],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[27.863,-19.902],[-3.98,-89.559],[-24.783,-22.947],[0,0],[-1.587,-0.32]],"v":[[298.529,-80.049],[173.146,-0.441],[163.195,9.51],[183.097,73.197],[234.842,136.883],[276.637,162.756],[189.068,270.227],[187.077,355.806],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[418.936,301.075],[458.74,245.349],[530.388,145.839],[424.907,-9.397],[337.338,-63.133],[302.441,-79.902]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":185.318,"s":[{"i":[[1.017,-0.022],[0,0],[4.147,-9.262],[-5.732,-19.672],[-11.378,-12.792],[0,0],[21.932,-49.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-16.577,29.961],[4.19,44.203],[46.674,44.88],[-5.822,-1.324],[10.441,4.69]],"o":[[0,0],[0,0],[-4.147,9.262],[5.732,19.672],[11.378,12.792],[0,0],[-18.647,41.852],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[21.26,-38.424],[-5.388,-56.839],[-24.346,-23.41],[0,0],[-1.477,-0.664]],"v":[[297.76,-109.796],[157.846,-59.971],[145.936,-52.474],[151.222,14.04],[187.557,87.615],[242.574,152.111],[201.068,270.302],[199.077,355.881],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[430.936,301.15],[470.74,215.424],[503.388,116.839],[410.326,-9.88],[331.852,-84.695],[301.542,-108.785]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[1.017,-0.022],[0,0],[4.147,-9.262],[-15.222,-45.19],[-7.557,-23.615],[0,0],[21.932,-49.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-20.419,27.487],[-1.389,48.117],[46.674,44.88],[-5.822,-1.324],[10.441,4.69]],"o":[[0,0],[0,0],[-4.147,9.262],[6.541,19.418],[5.218,16.306],[0,0],[-18.647,41.852],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[26.26,-35.349],[1.612,-55.839],[-24.346,-23.41],[0,0],[-1.477,-0.664]],"v":[[367.317,-108.657],[228.404,-93.832],[216.494,-86.335],[220.779,15.179],[249.115,92.754],[276.574,143.522],[223.068,279.452],[209.077,355.881],[219.916,444.37],[263.7,470.242],[490.584,468.252],[500.535,438.399],[466.936,316.3],[509.74,240.574],[542.945,143.978],[466.883,-8.741],[401.409,-83.556],[371.099,-107.646]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[1.017,-0.022],[0,0],[4.147,-9.262],[-15.222,-45.19],[-7.557,-23.615],[0,0],[21.932,-49.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-20.419,27.487],[-1.389,48.117],[46.674,44.88],[-5.822,-1.324],[10.441,4.69]],"o":[[0,0],[0,0],[-4.147,9.262],[6.541,19.418],[5.218,16.306],[0,0],[-18.647,41.852],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[26.26,-35.349],[1.612,-55.839],[-24.346,-23.41],[0,0],[-1.477,-0.664]],"v":[[367.317,-108.657],[228.404,-93.832],[216.494,-86.335],[220.779,15.179],[249.115,92.754],[276.574,143.522],[223.068,279.452],[209.077,355.881],[219.916,444.37],[263.7,470.242],[490.584,468.252],[500.535,438.399],[466.936,316.3],[509.74,240.574],[542.945,143.978],[466.883,-8.741],[401.409,-83.556],[371.099,-107.646]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-3.837,-24.197],[-7.842,-41.883],[0,0],[19.932,-56.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-8.481,50.651],[-1.128,69.161],[21.671,44.118],[21.922,33.133],[8.938,5.683]],"o":[[0,0],[0,0],[-1.99,9.951],[3.732,23.535],[7.193,38.417],[0,0],[-15.309,43.185],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[6.201,-37.035],[0.748,-45.833],[-11.747,-23.914],[0,0],[-1.264,-0.804]],"v":[[395.269,-203.049],[239.886,-164.441],[220.935,-154.49],[231.837,-69.803],[248.583,11.883],[265.377,96.756],[233.068,259.227],[220.077,354.805],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[477.936,329.075],[489.481,205.349],[506.128,64.839],[467.647,-61.397],[422.078,-168.133],[398.674,-202.141]],"c":true}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[1.09,0.037],[0,0],[3.928,-8.788],[1.481,-23.135],[1.486,-40.274],[0,0],[15.946,-61.464],[0,0],[-5.971,-13.925],[-31.843,-1.989],[-11.941,1.989],[4.122,9.269],[1.99,27.851],[-8.029,50.547],[-5.294,67.472],[11.845,43.83],[8.414,34.893],[8.673,7.923]],"o":[[0,0],[0,0],[-3.928,8.788],[-1.394,22.542],[-1.4,36.909],[0,0],[-12.285,47.279],[0,0],[5.971,13.925],[31.843,1.989],[11.941,-1.989],[-7.961,-17.904],[-1.99,-27.85],[6.099,-38.372],[3.616,-45.746],[-5.53,-28.228],[0,0],[-1.297,-1.226]],"v":[[459.04,-199.091],[310.959,-194.548],[291.386,-189.323],[283.759,-111.208],[279.576,-26.914],[272.53,71.377],[230.429,255.025],[219.849,354.864],[219.916,444.382],[263.7,470.243],[490.584,468.254],[500.535,438.414],[477.597,329.058],[485.632,213.464],[511.199,72.741],[495.346,-51.396],[476.583,-161.283],[462.166,-196.899]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[1.071,-0.015],[0,0],[3.577,-8.999],[0.517,-23.327],[-0.205,-40.566],[0,0],[16.668,-60.515],[0,0],[-5.971,-13.926],[-31.843,-1.99],[-11.941,1.99],[4.122,9.27],[1.99,27.853],[-8.111,50.565],[-4.539,67.778],[13.626,43.883],[10.862,34.574],[8.721,7.517]],"o":[[0,0],[0,0],[-3.577,8.999],[-0.465,22.722],[0.157,37.183],[0,0],[-12.833,46.537],[0,0],[5.971,13.926],[31.843,1.989],[11.941,-1.989],[-7.961,-17.905],[-1.99,-27.852],[6.118,-38.13],[3.096,-45.762],[-6.657,-27.446],[0,0],[-1.291,-1.15]],"v":[[447.483,-199.808],[298.079,-189.091],[278.619,-183.011],[274.349,-103.705],[273.959,-19.883],[271.233,75.976],[230.907,255.787],[219.89,354.853],[219.916,444.38],[263.7,470.243],[490.584,468.254],[500.535,438.412],[477.658,329.061],[486.329,211.993],[510.28,71.309],[490.326,-53.209],[466.705,-162.524],[450.659,-197.849]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[1.207,0.36],[0,0],[6.142,-7.459],[7.558,-21.922],[12.145,-38.435],[0,0],[11.389,-67.45],[0,0],[-5.971,-13.918],[-31.843,-1.988],[-11.941,1.988],[4.122,9.265],[1.99,27.836],[-7.513,50.428],[-10.055,65.541],[0.616,43.502],[-7.021,36.906],[8.371,10.484]],"o":[[0,0],[0,0],[-6.142,7.459],[-7.252,21.408],[-11.22,35.187],[0,0],[-8.829,51.958],[0,0],[5.971,13.918],[31.843,1.988],[11.941,-1.988],[-7.961,-17.895],[-1.99,-27.836],[5.983,-39.899],[6.894,-45.647],[1.575,-33.157],[0,0],[-1.334,-1.708]],"v":[[531.917,-194.567],[392.18,-228.953],[371.897,-229.13],[343.094,-158.525],[314.995,-71.251],[280.704,42.375],[227.413,250.223],[219.588,354.93],[219.916,444.397],[263.7,470.244],[490.584,468.256],[500.535,438.432],[477.208,329.038],[481.233,222.737],[516.993,81.772],[527,-39.967],[538.871,-153.455],[534.724,-190.909]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[1.289,0.584],[0,0],[7.673,-6.54],[11.758,-21.084],[19.512,-37.164],[0,0],[8.241,-71.586],[0,0],[-5.971,-13.913],[-31.843,-1.988],[-11.941,1.988],[4.122,9.261],[1.99,27.827],[-7.156,50.346],[-13.345,64.207],[-7.145,43.276],[-17.689,38.296],[8.161,12.254]],"o":[[0,0],[0,0],[-7.673,6.54],[-11.3,20.624],[-18.007,33.997],[0,0],[-6.44,55.192],[0,0],[5.971,13.913],[31.843,1.988],[11.941,-1.988],[-7.961,-17.888],[-1.99,-27.826],[5.903,-40.955],[9.16,-45.579],[6.484,-36.564],[0,0],[-1.36,-2.042]],"v":[[582.282,-191.44],[448.312,-252.73],[427.538,-256.641],[384.101,-191.226],[339.473,-101.892],[286.353,22.331],[225.329,246.905],[219.407,354.976],[219.916,444.407],[263.7,470.245],[490.584,468.258],[500.535,438.444],[476.94,329.025],[478.193,229.146],[520.997,88.012],[548.875,-32.069],[581.917,-148.045],[584.868,-186.769]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":266,"s":[{"i":[[0.935,-0.419],[0,0],[3.425,-9.49],[-31.478,-24.123],[-23.619,-18.489],[0,0],[59.146,-11.691],[0,0],[6.113,-13.735],[-11.699,-29.408],[-9.498,-7.349],[-9.045,2.607],[-73.283,25.641],[-43.954,67.381],[44.275,55.553],[56.509,20.225],[-6.131,5.32],[11.329,0.303]],"o":[[0,0],[0,0],[-8.318,24.562],[23.522,20.877],[23.619,18.489],[0,0],[-30.385,7.415],[0,0],[-6.113,13.735],[13.132,33.01],[9.498,7.349],[44.796,-10.004],[70.717,-26.359],[34.046,-42.619],[-54.724,-58.899],[-29.486,-11.906],[0,0],[-1.628,-0.068]],"v":[[260.031,-204.177],[114.095,-86.456],[105.748,-75.378],[150.478,-27.877],[231.381,25.511],[282.717,64.797],[235.149,87.963],[142.159,112.712],[89.456,129.777],[99.868,170.99],[155.762,288.383],[182.008,315.755],[388.283,264.359],[546.954,162.619],[538.393,-38.223],[397.977,-141.166],[330.17,-180.566],[263.813,-204.588]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[0,0],[-9.016,-3.423],[0,0],[0,0],[0,0],[12.371,-17.676],[-3.077,-28.648],[-5.971,-12.519],[-31.843,-1.788],[-11.941,1.788],[4.122,8.333],[1.99,25.037],[15.265,49.081],[44.128,-3.656],[50.856,-14.15],[-1.479,5.36],[4.938,-9.702]],"o":[[0,0],[0,0],[9.016,3.423],[0,0],[0,0],[0,0],[-16.068,22.957],[3.184,29.639],[5.971,12.519],[31.843,1.788],[11.941,-1.788],[-7.961,-16.095],[-1.99,-25.037],[-24.618,-79.153],[-44.671,3.701],[-32.499,9.043],[0,0],[-0.699,1.372]],"v":[[32.186,157.237],[45.693,293.332],[52.737,303.901],[121.196,296.249],[177.222,293.34],[219.098,290.675],[200.068,313.379],[179.077,373.072],[219.916,447.195],[263.7,470.444],[490.584,468.656],[500.535,441.83],[418.936,356.375],[478.735,190.208],[293.814,80.879],[138.847,103.139],[57.964,125.178],[33.295,153.75]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[1.017,-0.022],[0,0],[4.147,-9.262],[-15.222,-45.19],[-7.557,-23.615],[0,0],[21.932,-49.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-20.419,27.487],[-1.389,48.117],[46.674,44.88],[-5.822,-1.324],[10.441,4.69]],"o":[[0,0],[0,0],[-4.147,9.262],[6.541,19.418],[5.218,16.306],[0,0],[-18.647,41.852],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[26.26,-35.349],[1.612,-55.839],[-24.346,-23.41],[0,0],[-1.477,-0.664]],"v":[[375.76,-90.646],[236.846,-75.821],[224.936,-68.324],[229.222,33.19],[257.557,110.765],[281.574,177.261],[223.068,279.452],[209.077,355.881],[219.916,444.37],[263.7,470.242],[490.584,468.252],[500.535,438.399],[466.936,316.3],[509.74,240.574],[542.388,141.989],[475.326,9.27],[409.852,-65.545],[379.542,-89.635]],"c":true}]},{"t":287,"s":[{"i":[[0.987,-0.247],[0,0],[1.99,-9.951],[-3.837,-24.197],[-7.842,-41.883],[0,0],[19.932,-56.227],[0,0],[-5.971,-13.931],[-31.843,-1.99],[-11.941,1.99],[4.122,9.273],[1.99,27.863],[-8.481,50.651],[-1.128,69.161],[21.671,44.118],[21.922,33.133],[8.938,5.683]],"o":[[0,0],[0,0],[-1.99,9.951],[3.732,23.535],[7.193,38.417],[0,0],[-15.309,43.185],[0,0],[5.971,13.931],[31.843,1.99],[11.941,-1.99],[-7.961,-17.912],[-1.99,-27.863],[6.201,-37.035],[0.748,-45.833],[-11.747,-23.914],[0,0],[-1.264,-0.804]],"v":[[395.269,-203.049],[239.886,-164.441],[220.935,-154.49],[231.837,-69.803],[248.583,11.883],[265.377,96.756],[233.068,259.227],[220.077,354.805],[219.916,444.37],[263.7,470.243],[490.584,468.252],[500.535,438.399],[477.936,329.075],[489.481,205.349],[506.128,64.839],[467.647,-61.397],[422.078,-168.133],[398.674,-202.141]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.156862750649,0.133333340287,0.227450981736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.184313729405,0.203921571374,0.337254911661,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":40,"ty":4,"nm":"Layer 18","parent":41,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":121,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":127,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":139,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":145,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":166,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":185,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":189,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":196,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":200,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":204,"s":[-24.343]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":212,"s":[-24.343]},{"t":217,"s":[0]}],"ix":10},"p":{"a":0,"k":[-186.764,-79.115,0],"ix":2},"a":{"a":0,"k":[-188.825,-77.227,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.252,-9.696],[-6.567,-1.635],[-6.955,0.379],[0.411,2.967],[8.816,1.761]],"o":[[0,0],[-1.84,7.923],[6.567,1.635],[6.955,-0.379],[-0.411,-2.967],[-8.816,-1.761]],"v":[[-211.117,-49.368],[-223.402,-42.755],[-219.418,-29.133],[-190.73,-24.489],[-183.766,-33.839],[-199.415,-46.688]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-11.444,12.439],[0,0]],"o":[[0,0],[0,0],[11.444,-12.439],[0,0]],"v":[[-199.52,-82.537],[-225.973,-11.47],[-204.413,-22.167],[-176.467,-71.259]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.65098041296,0.89411765337,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":41,"ty":4,"nm":"sanitazer","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.612],"y":[1]},"o":{"x":[0.192],"y":[0]},"t":15,"s":[-51.804]},{"i":{"x":[0.612],"y":[1]},"o":{"x":[0.43],"y":[0]},"t":21,"s":[-51.804]},{"i":{"x":[0.835],"y":[1]},"o":{"x":[0.43],"y":[0]},"t":44,"s":[-51.804]},{"i":{"x":[0.644],"y":[1]},"o":{"x":[0.17],"y":[0]},"t":54,"s":[-51.804]},{"i":{"x":[0.666],"y":[0.381]},"o":{"x":[0.339],"y":[0]},"t":60,"s":[-61.454]},{"i":{"x":[0.666],"y":[-0.568]},"o":{"x":[0.328],"y":[1.54]},"t":65,"s":[-61.454]},{"i":{"x":[0.666],"y":[1]},"o":{"x":[0.328],"y":[0]},"t":77,"s":[-61.454]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.326],"y":[0]},"t":84,"s":[-61.454]},{"i":{"x":[0.67],"y":[1]},"o":{"x":[0.323],"y":[0]},"t":90,"s":[-24.712]},{"i":{"x":[0.831],"y":[1]},"o":{"x":[0.323],"y":[0]},"t":111,"s":[-24.712]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":121,"s":[-20.938]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":130.207,"s":[-20.938]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":139,"s":[-16.967]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":148.975,"s":[-16.967]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":160,"s":[-1.108]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":171,"s":[-1.108]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":185,"s":[16.089]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":203.732,"s":[7.55]},{"i":{"x":[0.783],"y":[1]},"o":{"x":[0.157],"y":[0]},"t":215,"s":[7.55]},{"i":{"x":[0.572],"y":[1]},"o":{"x":[0.189],"y":[0]},"t":232.934,"s":[7.55]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.341],"y":[0]},"t":239,"s":[7.55]},{"i":{"x":[0.577],"y":[2.586]},"o":{"x":[0.169],"y":[0]},"t":249,"s":[7.55]},{"i":{"x":[0.836],"y":[1]},"o":{"x":[0.41],"y":[0.082]},"t":261,"s":[32.905]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":266,"s":[-164.535]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":271,"s":[-132.688]},{"i":{"x":[0.839],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":278,"s":[-51.935]},{"t":287,"s":[-51.804]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.297,"y":0},"t":0,"s":[955.615,889.17,0],"to":[-0.874,0.159,0],"ti":[1.833,-0.333,0]},{"i":{"x":0.809,"y":1},"o":{"x":0.308,"y":0},"t":8,"s":[1021.615,826.169,0],"to":[-0.449,0.082,0],"ti":[0.262,-0.614,0]},{"i":{"x":0.646,"y":0.276},"o":{"x":0.261,"y":0},"t":15,"s":[995.615,1077.17,0],"to":[-0.02,0.047,0],"ti":[0.052,-0.121,0]},{"i":{"x":0.954,"y":0},"o":{"x":0.046,"y":1},"t":21,"s":[995.716,1076.932,0],"to":[-0.014,0.033,0],"ti":[0.052,-0.121,0]},{"i":{"x":0.796,"y":1},"o":{"x":0.24,"y":1},"t":44,"s":[995.716,1076.932,0],"to":[-0.014,0.033,0],"ti":[0.12,-0.282,0]},{"i":{"x":0.66,"y":0.998},"o":{"x":0.283,"y":0},"t":54,"s":[995.615,1077.17,0],"to":[-0.099,0.233,0],"ti":[0.01,-0.023,0]},{"i":{"x":0.594,"y":1},"o":{"x":0.138,"y":1},"t":60,"s":[954.446,1064.566,0],"to":[-0.01,0.025,0],"ti":[-0.002,0.004,0]},{"i":{"x":0.594,"y":1},"o":{"x":0.4,"y":0},"t":65,"s":[954.436,1064.59,0],"to":[0,-0.001,0],"ti":[-0.002,0.004,0]},{"i":{"x":0.594,"y":1},"o":{"x":0.391,"y":0},"t":77,"s":[954.436,1064.59,0],"to":[0,-0.001,0],"ti":[-0.002,0.004,0]},{"i":{"x":0.608,"y":1},"o":{"x":0.391,"y":0},"t":84,"s":[954.436,1034.59,0],"to":[0.001,-0.001,0],"ti":[0,0.001,0]},{"i":{"x":0.608,"y":1},"o":{"x":0.417,"y":0},"t":90,"s":[794.436,556.59,0],"to":[0.002,-0.005,0],"ti":[0,0.001,0]},{"i":{"x":0.787,"y":1},"o":{"x":0.417,"y":0},"t":111,"s":[794.436,556.59,0],"to":[0.002,-0.005,0],"ti":[-3.742,-8.622,0]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[773.615,1048.17,0],"to":[1.103,2.541,0],"ti":[-6.278,-0.11,0]},{"i":{"x":0.734,"y":1},"o":{"x":0.333,"y":0},"t":130.207,"s":[793.615,1038.17,0],"to":[2.769,0.049,0],"ti":[-1.153,1.873,0]},{"i":{"x":0.734,"y":1},"o":{"x":0.469,"y":0},"t":139,"s":[714.469,892.015,0],"to":[1.153,-1.873,0],"ti":[-1.153,1.873,0]},{"i":{"x":0.479,"y":1},"o":{"x":0.469,"y":0},"t":148.975,"s":[725.469,891.015,0],"to":[1.153,-1.873,0],"ti":[45.111,-3.038,0]},{"i":{"x":0.479,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[661.754,705.098,0],"to":[-1.117,-0.047,0],"ti":[45.111,-3.038,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[661.754,705.098,0],"to":[-1.117,-0.047,0],"ti":[28.504,1.318,0]},{"i":{"x":0.595,"y":0.392},"o":{"x":0.244,"y":0},"t":185.318,"s":[643.991,623.605,0],"to":[-0.986,-2.945,0],"ti":[-28.597,-2.091,0]},{"i":{"x":0.653,"y":0.646},"o":{"x":0.316,"y":0.298},"t":190,"s":[687.964,636.334,0],"to":[14.123,1.032,0],"ti":[-16.873,-0.512,0]},{"i":{"x":0.664,"y":0.664},"o":{"x":0.327,"y":0.334},"t":193,"s":[734.294,626.627,0],"to":[15.875,0.482,0],"ti":[-15.978,-1.394,0]},{"i":{"x":0.678,"y":0.744},"o":{"x":0.339,"y":0.36},"t":196,"s":[777.868,644.661,0],"to":[21.556,1.881,0],"ti":[0,0,0]},{"i":{"x":0.699,"y":1},"o":{"x":0.359,"y":0.59},"t":200,"s":[835.076,628.949,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.699,"y":1},"o":{"x":0.167,"y":0},"t":203.732,"s":[860.701,637.491,0],"to":[0,0,0],"ti":[-0.727,0.672,0]},{"i":{"x":0.699,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[860.701,637.491,0],"to":[14.822,-13.704,0],"ti":[0,0,0]},{"i":{"x":0.65,"y":0.684},"o":{"x":0.216,"y":0},"t":226,"s":[955.615,889.169,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.662,"y":0.764},"o":{"x":0.177,"y":1},"t":232.934,"s":[981.401,864.555,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.668,"y":0.748},"o":{"x":0.307,"y":0.041},"t":239,"s":[977.804,867.989,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.714,"y":1},"o":{"x":0.365,"y":0.064},"t":249,"s":[1008.572,838.62,0],"to":[0,0,0],"ti":[7.615,114.169,0]},{"i":{"x":0.714,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[991.615,618.169,0],"to":[218.385,239.831,0],"ti":[0,0,0]},{"i":{"x":0.714,"y":1},"o":{"x":0.179,"y":0},"t":266,"s":[1420.701,668.491,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.736,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[1203.701,877.491,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.736,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[1034.701,965.491,0],"to":[0,0,0],"ti":[0,0,0]},{"t":287,"s":[955.615,889.169,0]}],"ix":2},"a":{"a":0,"k":[-153.353,-0.057,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[12.275,9.151],[5.689,-6.199],[-7.186,-7.675],[-7.186,8.856]],"o":[[-8.218,-6.126],[-5.689,6.199],[7.186,7.675],[7.186,-8.856]],"v":[[-104.874,-37.287],[-127.329,-23.707],[-131.221,-0.386],[-105.473,-12.489]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[1.14,-8.054],[-6.764,-0.204],[-6.717,1.846],[1.031,2.813],[8.989,-0.149]],"o":[[0,0],[-1.14,8.054],[6.764,0.204],[6.717,-1.846],[-1.031,-2.813],[-8.989,0.149]],"v":[[-188.567,5.54],[-200.273,10.822],[-194.002,26.126],[-157.085,25.266],[-152.263,14.652],[-172.31,6.489]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[3.234,-7.463],[-6.468,-1.99],[-6.966,0],[0.249,2.985],[8.707,2.239]],"o":[[0,0],[-3.234,7.463],[6.468,1.99],[6.966,0],[-0.249,-2.985],[-8.707,-2.239]],"v":[[-185.506,-16.446],[-198.193,-14.455],[-196.203,1.964],[-160.379,10.92],[-152.916,1.964],[-170.082,-11.221]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.392156869173,0.909803926945,0.623529434204,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[9.619,0.663],[-1.327,-27.863],[0,0],[-31.346,-0.498],[-12.439,0],[4.478,36.321],[7.297,22.722],[20.39,2.188]],"o":[[-9.619,-0.663],[1.042,21.89],[0,0],[31.346,0.498],[12.439,0],[-3.908,-31.7],[-4.366,-13.594],[-15.91,-1.707]],"v":[[-167.511,-44.557],[-179.784,-14.704],[-193.384,90.113],[-169.335,116.649],[-106.146,117.147],[-88.566,66.231],[-104.488,-23.992],[-138.487,-44.228]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.184313729405,0.427450984716,0.466666668653,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-133.677,-59.484],[-133.392,-55.419],[-162.308,-55.173],[-162.535,-59.981]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.309803932905,0.54509806633,0.600000023842,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-1.923,1.236],[0,0]],"v":[[-210.601,-106.92],[-210.317,-84.519],[-206.32,-84.361],[-204.33,-83.253],[-204.654,-108.868],[-207.647,-106.751]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.309803932905,0.54509806633,0.600000023842,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-20.151,-0.995],[-2.985,-11.444],[6.468,-5.473],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[15.074,0.744],[2.985,11.444],[-3.603,3.049],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-207.647,-106.751],[-173.813,-117.2],[-108.8,-104.927],[-110.293,-62.967],[-133.677,-59.484],[-132.185,-38.255],[-161.54,-38.918],[-162.535,-59.981],[-206.32,-84.361],[-218.925,-84.859],[-219.256,-107.415]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.65098041296,0.89411765337,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":42,"ty":4,"nm":"HAND","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[811,750,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[189.937,150.388],[302.358,43.925],[306.063,-101.388]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":8,"s":[{"i":[[0,0],[-36.358,45.075],[0,0]],"o":[[0,0],[29.34,-36.373],[0,0]],"v":[[248.937,75.388],[345.358,-28.075],[395.063,-164.388]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":15,"s":[{"i":[[0,0],[-13.358,30.075],[0,0]],"o":[[0,0],[18.97,-42.708],[0,0]],"v":[[198.937,307.388],[295.358,215.925],[180.063,132.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,0],[-20.635,48.267],[0,0]],"o":[[0,0],[18.487,-42.917],[0,0]],"v":[[191.66,317.091],[272.315,201.978],[210.99,59.842]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[{"i":[[0,0],[-20.635,48.267],[0,0]],"o":[[0,0],[18.487,-42.917],[0,0]],"v":[[191.66,317.091],[272.315,201.978],[210.99,59.842]],"c":false}]},{"i":{"x":0.833,"y":0.81},"o":{"x":0.333,"y":0},"t":54,"s":[{"i":[[0,0],[-25.358,60.075],[0,0]],"o":[[0,0],[18.173,-43.053],[0,0]],"v":[[186.937,323.388],[257.358,192.925],[231.063,12.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.19},"t":60,"s":[{"i":[[0,0],[-2.358,76.075],[0,0]],"o":[[0,0],[1.448,-46.709],[0,0]],"v":[[156.937,282.388],[181.358,150.925],[158.063,2.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-2.358,76.075],[0,0]],"o":[[0,0],[1.448,-46.709],[0,0]],"v":[[156.937,282.388],[181.358,150.925],[158.063,2.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":77,"s":[{"i":[[0,0],[-2.358,76.075],[0,0]],"o":[[0,0],[1.448,-46.709],[0,0]],"v":[[156.937,282.388],[181.358,150.925],[158.063,2.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-2.717,58.567],[0,0]],"o":[[0,0],[1.668,-35.959],[0,0]],"v":[[153,258],[181.138,156.792],[154.297,42.612]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-22.733,36.785],[9.302,29.186]],"o":[[0,0],[24.567,-39.753],[0,0]],"v":[[22.006,-170.973],[195.733,-178.785],[175.698,-323.186]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":111,"s":[{"i":[[0,0],[-22.733,36.785],[9.302,29.186]],"o":[[0,0],[24.567,-39.753],[0,0]],"v":[[22.006,-170.973],[195.733,-178.785],[175.698,-323.186]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":121,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[5.937,298.388],[120.358,180.925],[206.063,17.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130.207,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[7.937,302.388],[120.358,180.925],[206.063,17.612]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":139,"s":[{"i":[[0,0],[-60.04,26.225],[0,0]],"o":[[0,0],[41.655,-18.194],[0,0]],"v":[[-64.92,148.134],[85.345,118.194],[218.92,35.866]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":148.975,"s":[{"i":[[0,0],[-60.04,26.225],[0,0]],"o":[[0,0],[41.655,-18.194],[0,0]],"v":[[-64.92,148.134],[85.345,118.194],[218.92,35.866]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":160,"s":[{"i":[[0,0],[-84.478,-4.908],[0,0]],"o":[[0,0],[86.464,5.023],[0,0]],"v":[[-127,-36],[45.478,36.908],[229,20]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":171,"s":[{"i":[[0,0],[-84.478,-4.908],[0,0]],"o":[[0,0],[86.464,5.023],[0,0]],"v":[[-127,-36],[45.478,36.908],[229,20]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":185.318,"s":[{"i":[[0,0],[-80.309,-26.666],[0,0]],"o":[[0,0],[63.522,21.092],[0,0]],"v":[[-135,-90],[39.478,20.908],[229,44]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[0,0],[-63.378,9.092],[0,0]],"o":[[0,0],[46.159,-6.622],[0,0]],"v":[[74,-93],[178.534,50.908],[306,-24]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":215,"s":[{"i":[[0,0],[-63.378,9.092],[0,0]],"o":[[0,0],[46.159,-6.622],[0,0]],"v":[[74,-93],[178.534,50.908],[306,-24]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[189.937,150.388],[302.358,43.925],[306.063,-101.388]],"c":false}]},{"i":{"x":0.833,"y":0.808},"o":{"x":0.167,"y":0.192},"t":232.934,"s":[{"i":[[0,0],[-31.895,40.506],[0,0]],"o":[[0,0],[28.88,-36.737],[0,0]],"v":[[210.056,124.813],[317.021,19.374],[336.412,-122.871]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.192},"t":239,"s":[{"i":[[0,0],[-31.477,40.078],[0,0]],"o":[[0,0],[28.836,-36.771],[0,0]],"v":[[206.41,129.448],[314.364,23.823],[330.912,-118.978]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":249,"s":[{"i":[[0,0],[-34.534,43.208],[0,0]],"o":[[0,0],[29.152,-36.522],[0,0]],"v":[[233.048,95.587],[333.778,-8.684],[409.094,-179.421]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":261,"s":[{"i":[[0,0],[-70.358,26.075],[0,0]],"o":[[0,0],[43.819,-16.239],[0,0]],"v":[[196.937,-118.612],[349.358,-50.075],[453.063,-182.388]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":266,"s":[{"i":[[0,0],[122.466,21.092],[0,0]],"o":[[0,0],[-45.955,-7.915],[0,0]],"v":[[658,-59],[440.534,-101.092],[252,-112]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":271,"s":[{"i":[[0,0],[70.738,-10.549],[27.888,-24.185]],"o":[[0,0],[-46.121,6.878],[0,0]],"v":[[355.396,121.45],[207.641,106.82],[77.857,186.252]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":278,"s":[{"i":[[0,0],[-11.931,62.905],[12.754,33.015]],"o":[[0,0],[8.689,-45.814],[0,0]],"v":[[226.045,222.46],[306.058,90.186],[292.485,-52.674]],"c":false}]},{"t":287,"s":[{"i":[[0,0],[-29.586,38.143],[0,0]],"o":[[0,0],[28.642,-36.925],[0,0]],"v":[[189.937,150.388],[302.358,43.925],[306.063,-101.388]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.184313729405,0.203921571374,0.337254911661,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":65,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"st","c":{"a":0,"k":[0.156862750649,0.133333340287,0.227450981736,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":76,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 2","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":43,"ty":4,"nm":"Layer 2","parent":40,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-188.825,-77.227,0],"ix":2},"a":{"a":0,"k":[-188.825,-77.227,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-1.493,-0.498],[0,0],[8.458,2.985]],"o":[[0,0],[1.493,0.498],[0,0],[-8.458,-2.985]],"v":[[-217.929,-28.055],[-178.125,-3.924],[-167.677,-30.294],[-194.545,-44.226]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.258823543787,0.549019634724,0.376470595598,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":45,"ty":4,"nm":"Layer 17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[423.088,810.699,0],"ix":2},"a":{"a":0,"k":[-251.912,50.973,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.564,2.626],[0.461,14.985],[0.525,-0.171],[0,0],[-1.689,-5.451],[-14.018,1.053],[-0.299,3.303],[0.006,0.253]],"o":[[-8.602,-3.441],[-1.29,0.221],[-4.804,1.564],[0,0],[2.707,8.738],[32.192,-2.419],[0.012,-0.134],[-14.908,1.759]],"v":[[-414.96,-220.856],[-426.302,-294.734],[-429.112,-294.137],[-431.508,-282.364],[-423.932,-216.029],[-400.115,-210.546],[-370.48,-221.523],[-370.474,-222.127]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.568627476692,0.568627476692,0.568627476692,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-4.804,1.564],[-14.398,0.513],[-0.605,-4.348],[0.299,-3.304],[32.192,-2.419],[2.707,8.738]],"o":[[0,0],[3.364,-1.095],[5.839,-0.208],[4.368,25.374],[-0.299,3.304],[-14.018,1.053],[-1.689,-5.451]],"v":[[-431.508,-282.364],[-429.112,-294.137],[-390.42,-298.116],[-379.799,-290.679],[-370.48,-221.523],[-400.115,-210.546],[-423.932,-216.029]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.666666686535,0.666666686535,0.666666686535,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-11.273,2.976],[3.842,9.016],[0,0]],"o":[[0,0],[-2.605,-38.014],[-9.48,2.36],[0,0]],"v":[[-377.602,-220.359],[-359.64,-225.294],[-374.805,-296.456],[-389.585,-292.504]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.568627476692,0.568627476692,0.568627476692,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.811,0.092],[22.426,-16.687],[5.86,1.082],[8.652,6.064],[-3.058,-3.158],[-5.201,0],[-3.865,3.714],[-68.156,-3.467],[-3.874,4.212]],"o":[[-62.195,-3.152],[-3.659,2.723],[-2.032,-0.375],[0.561,4.041],[3.898,4.025],[4.976,0],[0.476,-0.459],[6.144,0.304],[-1.644,-0.538]],"v":[[-268.83,156.976],[-400.928,198.62],[-413.36,203.692],[-429.33,194.986],[-423.926,206.095],[-409.636,212.142],[-395.809,206.575],[-279.31,164.388],[-263.643,157.958]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.119953866098,0.158400606642,0.235294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4.976,0],[3.898,4.025],[-7.85,7.654],[-85.982,-4.357],[0.558,-10.977],[10.949,0.542],[0.476,-0.459]],"o":[[-5.201,0],[-7.627,-7.877],[2.422,-2.359],[10.977,0.558],[-0.56,10.977],[-68.156,-3.467],[-3.865,3.714]],"v":[[-409.636,212.142],[-423.926,206.095],[-423.546,178.026],[-277.289,124.635],[-258.423,145.522],[-279.31,164.388],[-395.809,206.575]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.229942336737,0.262001606062,0.349019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-16.046,-117.669],[-4.933,-3.01],[0.411,3.011],[92.676,167.076],[0.04,2.261],[1.419,7.65],[-0.088,-5.076],[-95.514,-172.196]],"o":[[0.842,6.172],[-1.21,-5.104],[-16.79,-123.128],[-90.613,-163.36],[-0.075,-4.308],[-3.068,3.569],[0.166,9.629],[90.001,162.254]],"v":[[-183.913,447.06],[-174.547,461.359],[-177.313,448.646],[-325.577,55.582],[-421.265,-335.808],[-423.408,-355.377],[-428.225,-342.082],[-327.546,67.924]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.121568627451,0.156862745098,0.235294117647,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.896,0],[1.36,9.978],[90.001,162.254],[0.166,9.629],[-10.99,0.189],[-0.192,-10.987],[0,0],[-90.613,-163.36],[-16.79,-123.128],[10.891,-1.485]],"o":[[-9.797,0],[-16.046,-117.669],[-95.514,-172.196],[-0.19,-10.99],[11.002,-0.192],[0,0],[0.04,2.261],[92.676,167.076],[1.485,10.892],[-0.911,0.124]],"v":[[-164.219,464.274],[-183.913,447.06],[-327.546,67.924],[-428.225,-342.082],[-408.668,-362.324],[-388.426,-342.774],[-388.426,-342.774],[-292.739,48.616],[-144.475,441.68],[-161.505,464.089]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.23137254902,0.262745098039,0.349019607843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 7","np":1,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-245.866,-314.742],[-283.55,-242.123],[-251.452,-248.609],[-221.709,-316.256]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":47,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-213.431,-315.531],[-240.801,-248.958],[-228.79,-250.644],[-202.34,-316.696]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":47,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-52.409,5.307],[-13.931,-9.288],[60.37,-5.971],[0,0]],"o":[[0,0],[52.409,-5.307],[-44.448,-5.307],[-60.37,5.971],[0,0]],"v":[[-389.087,-273.928],[-267.685,-299.138],[-131.024,-289.187],[-271.002,-287.197],[-385.77,-261.987]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.568627476692,0.568627476692,0.568627476692,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-107.64,-6.52],[0,0],[79.369,7.297],[0,0]],"o":[[0,0],[120.481,7.297],[0,0],[-79.369,-7.297],[0,0]],"v":[[-389.585,-292.504],[-184.096,-315.391],[-71.831,-204.437],[-160.05,-253.529],[-377.602,-220.359]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.525490196078,0.525490196078,0.525490196078,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":338,"st":0,"bm":0},{"ddd":0,"ind":46,"ty":4,"nm":"shoes2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":261,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":266,"s":[93.713]},{"t":271,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[1250.5,1155.453,0],"to":[-58.333,-28.833,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[900.5,982.453,0],"to":[0,0,0],"ti":[-58.333,-28.833,0]},{"t":271,"s":[1250.5,1155.453,0]}],"ix":2},"a":{"a":0,"k":[401,407,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0,0],[0.738,-9.191],[1.486,-6.79],[0,0],[17.053,-7.017],[5.874,6.247],[-7.804,10.064],[-1.859,1.174]],"o":[[0,0],[-0.069,0.855],[-1.525,6.965],[0,0],[-14.62,6.016],[-6.175,-6.567],[6.762,-11.494],[1.953,-0.296]],"v":[[366.935,401.334],[398.512,410.488],[404.361,434.344],[395.813,446.481],[371.12,465.531],[335.425,466.615],[356.063,444.765],[371.32,420.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[3.642,-24.499],[14.13,9.089],[2.921,16.854],[0.411,1.962]],"o":[[0,0],[0,0],[0,0],[0,0],[-3.915,26.34],[-4.008,-2.578],[-3.469,-20.013],[-0.049,-0.232]],"v":[[334.5,397.5],[361.078,393.752],[372.1,392.197],[373.5,392],[369.379,429.499],[337.758,468.625],[340.579,430.146],[334.573,397.848]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[3.642,-24.499],[14.13,9.089],[2.921,16.854],[0.411,1.962]],"o":[[0,0],[0,0],[0,0],[0,0],[-3.915,26.34],[-4.008,-2.578],[-3.469,-20.013],[-0.049,-0.232]],"v":[[334.5,397.5],[361.078,393.752],[372.1,392.197],[373.5,392],[369.379,429.499],[337.758,468.625],[340.579,430.146],[334.573,397.848]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[{"i":[[0,0],[0.738,-9.191],[1.486,-6.79],[0,0],[17.053,-7.017],[5.874,6.247],[-7.804,10.064],[-1.859,1.174]],"o":[[0,0],[-0.069,0.855],[-1.525,6.965],[0,0],[-14.62,6.016],[-6.175,-6.567],[6.762,-11.494],[1.953,-0.296]],"v":[[366.935,401.334],[398.512,410.488],[404.361,434.344],[395.813,446.481],[371.12,465.531],[335.425,466.615],[356.063,444.765],[371.32,420.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[375.672,358.483],[400.222,359.408],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"t":271,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.156862745098,0.133333333333,0.227450995352,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":47,"ty":4,"nm":"shoes","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":261,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":266,"s":[100.514]},{"t":271,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[1186,1154.5,0],"to":[-56.667,-41.167,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[846,907.5,0],"to":[0,0,0],"ti":[-56.667,-41.167,0]},{"t":271,"s":[1186,1154.5,0]}],"ix":2},"a":{"a":0,"k":[405.5,412,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":86,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":88,"s":[{"i":[[0,0],[0.738,-9.191],[1.486,-6.79],[0,0],[17.053,-7.017],[5.874,6.247],[-7.804,10.064],[-1.859,1.174]],"o":[[0,0],[-0.069,0.855],[-1.525,6.965],[0,0],[-14.62,6.016],[-6.175,-6.567],[6.762,-11.494],[1.953,-0.296]],"v":[[366.935,401.334],[398.512,410.488],[404.361,434.344],[395.813,446.481],[371.12,465.531],[335.425,466.615],[356.063,444.765],[371.32,420.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[3.642,-24.499],[14.13,9.089],[2.921,16.854],[0.411,1.962]],"o":[[0,0],[0,0],[0,0],[0,0],[-3.915,26.34],[-4.008,-2.578],[-3.469,-20.013],[-0.049,-0.232]],"v":[[334.5,397.5],[361.078,393.752],[372.1,392.197],[373.5,392],[369.379,429.499],[337.758,468.625],[340.579,430.146],[334.573,397.848]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":113,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[3.642,-24.499],[14.13,9.089],[2.921,16.854],[0.411,1.962]],"o":[[0,0],[0,0],[0,0],[0,0],[-3.915,26.34],[-4.008,-2.578],[-3.469,-20.013],[-0.049,-0.232]],"v":[[334.5,397.5],[361.078,393.752],[372.1,392.197],[373.5,392],[369.379,429.499],[337.758,468.625],[340.579,430.146],[334.573,397.848]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":115,"s":[{"i":[[0,0],[0.738,-9.191],[1.486,-6.79],[0,0],[17.053,-7.017],[5.874,6.247],[-7.804,10.064],[-1.859,1.174]],"o":[[0,0],[-0.069,0.855],[-1.525,6.965],[0,0],[-14.62,6.016],[-6.175,-6.567],[6.762,-11.494],[1.953,-0.296]],"v":[[366.935,401.334],[398.512,410.488],[404.361,434.344],[395.813,446.481],[371.12,465.531],[335.425,466.615],[356.063,444.765],[371.32,420.2]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":117,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":261,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":266,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[373.625,342.653],[398.175,343.578],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]},{"t":271,"s":[{"i":[[0,0],[-1.376,-2.023],[1.599,-13.809],[0,0],[24.749,0.959],[3.706,10.904],[-16.437,4.734],[-3.876,0.747]],"o":[[0,0],[0.964,1.418],[-1.64,14.165],[0,0],[-26.61,-1.031],[-1.923,-5.659],[14.624,-4.212],[3.876,-0.747]],"v":[[390.949,408.599],[415.499,409.524],[420.89,457.382],[409.778,471.896],[372.053,471.872],[328.278,457.923],[368.282,443.312],[392.874,435.419]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.156862745098,0.133333333333,0.227450995352,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":48,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1373,1184,0],"ix":2},"a":{"a":0,"k":[-682,434,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[18,0]],"o":[[0,0],[-18,0]],"v":[[-1097,434],[-423,434]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.505882352941,0.505882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":49,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[647,1184,0],"ix":2},"a":{"a":0,"k":[-682,434,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[18,0]],"o":[[0,0],[-18,0]],"v":[[-825,434],[-423,434]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.505882352941,0.505882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":50,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[455,1184,0],"ix":2},"a":{"a":0,"k":[-682,434,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[18,0]],"o":[[0,0],[-18,0]],"v":[[-825,434],[-717,434]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.505882352941,0.505882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":51,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[129,1184,0],"ix":2},"a":{"a":0,"k":[-682,434,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[18,0]],"o":[[0,0],[-18,0]],"v":[[-825,434],[-537,434]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.505882352941,0.505882352941,0.505882352941,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":339,"st":0,"bm":0},{"ddd":0,"ind":53,"ty":0,"nm":"Comp 3","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":27,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[761,734,0],"ix":2},"a":{"a":0,"k":[811,750,0],"ix":1},"s":{"a":0,"k":[100,94.4,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Change to Color","np":13,"mn":"ADBE Change To Color","ix":2,"en":1,"ef":[{"ty":2,"nm":"From","mn":"ADBE Change To Color-0001","ix":1,"v":{"a":0,"k":[1,1,1,1],"ix":1}},{"ty":2,"nm":"To","mn":"ADBE Change To Color-0002","ix":2,"v":{"a":0,"k":[0,0,0,1],"ix":2}},{"ty":7,"nm":"Change","mn":"ADBE Change To Color-0003","ix":3,"v":{"a":0,"k":4,"ix":3}},{"ty":7,"nm":"Change By","mn":"ADBE Change To Color-0004","ix":4,"v":{"a":0,"k":1,"ix":4}},{"ty":6,"nm":"Tolerance","mn":"ADBE Change To Color-0010","ix":5,"v":0},{"ty":0,"nm":"Hue","mn":"ADBE Change To Color-0005","ix":6,"v":{"a":0,"k":2,"ix":6}},{"ty":0,"nm":"Lightness","mn":"ADBE Change To Color-0006","ix":7,"v":{"a":0,"k":1,"ix":7}},{"ty":0,"nm":"Saturation","mn":"ADBE Change To Color-0007","ix":8,"v":{"a":0,"k":1,"ix":8}},{"ty":6,"nm":"Saturation","mn":"ADBE Change To Color-0011","ix":9,"v":0},{"ty":0,"nm":"Softness","mn":"ADBE Change To Color-0008","ix":10,"v":{"a":0,"k":0.5,"ix":10}},{"ty":7,"nm":"View Correction Matte","mn":"ADBE Change To Color-0009","ix":11,"v":{"a":0,"k":0,"ix":11}}]}],"w":1622,"h":1500,"ip":0,"op":330,"st":0,"bm":0},{"ddd":0,"ind":54,"ty":1,"nm":"White Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[811,750,0],"ix":2},"a":{"a":0,"k":[811,750,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":1622,"sh":1500,"sc":"#ffffff","ip":0,"op":339,"st":0,"bm":0}],"markers":[{"tm":32,"cm":"","dr":0}]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/im_thirsty.json b/platform_tools/android/apps/skottie/src/main/res/raw/im_thirsty.json new file mode 100644 index 0000000000000..30681f148bfae --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/im_thirsty.json @@ -0,0 +1 @@ +{"v":"4.5.9","fr":25,"ip":0,"op":229,"w":500,"h":500,"ddd":0,"assets":[],"layers":[{"ddd":0,"ind":0,"ty":4,"nm":"Beerglass","ks":{"o":{"a":0,"k":10},"r":{"a":0,"k":0},"p":{"a":0,"k":[379.5,270.781,0]},"a":{"a":0,"k":[8191.5,82.75,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.644,"y":0},"n":"0p833_0p833_0p644_0","t":12,"s":[{"i":[[-2.5,0],[0,0],[0.572,-5.313],[2.347,-27.261],[1.586,-18.569],[0.083,-1.081],[3.5,0],[0,0],[0.25,2.5],[2.158,25.715],[1.538,18.342],[0.188,2.154]],"o":[[0,0],[2.75,0],[-0.286,2.656],[-1.723,20.011],[-1.868,21.864],[-0.25,3.25],[0,0],[-3.75,0],[-0.092,-0.92],[-1.51,-17.996],[-2.238,-26.701],[-0.5,-5.75]],"v":[[-58.958,-82.75],[50.792,-82.75],[56.636,-76.5],[52.019,-23.758],[46.792,37.223],[43.435,76.719],[38.542,82.75],[-46.708,82.75],[-51.708,78.25],[-55.673,31.213],[-60.446,-25.724],[-64.708,-76.5]],"c":true}],"e":[{"i":[[-2.5,0],[0,0],[0.572,-5.313],[2.347,-27.261],[1.586,-18.569],[0.083,-1.081],[3.5,0],[0,0],[0.25,2.5],[2.158,25.715],[0.691,18.943],[0.188,2.154]],"o":[[0,0],[2.75,0],[-0.286,2.656],[-1.723,20.011],[-1.868,21.864],[-0.25,3.25],[0,0],[-3.75,0],[-0.092,-0.92],[-1.51,-17.996],[-0.977,-26.777],[-0.5,-5.75]],"v":[[-58.958,-82.75],[50.792,-82.75],[56.636,-76.5],[58.519,-25.258],[53.292,36.723],[43.435,76.719],[38.542,82.75],[-46.708,82.75],[-51.708,78.25],[-65.173,30.713],[-68.946,-27.724],[-64.708,-76.5]],"c":true}]},{"i":{"x":0.215,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p215_1_0p167_0p167","t":26,"s":[{"i":[[-2.5,0],[0,0],[0.572,-5.313],[2.347,-27.261],[1.586,-18.569],[0.083,-1.081],[3.5,0],[0,0],[0.25,2.5],[2.158,25.715],[0.691,18.943],[0.188,2.154]],"o":[[0,0],[2.75,0],[-0.286,2.656],[-1.723,20.011],[-1.868,21.864],[-0.25,3.25],[0,0],[-3.75,0],[-0.092,-0.92],[-1.51,-17.996],[-0.977,-26.777],[-0.5,-5.75]],"v":[[-58.958,-82.75],[50.792,-82.75],[56.636,-76.5],[58.519,-25.258],[53.292,36.723],[43.435,76.719],[38.542,82.75],[-46.708,82.75],[-51.708,78.25],[-65.173,30.713],[-68.946,-27.724],[-64.708,-76.5]],"c":true}],"e":[{"i":[[-2.5,0],[-2.75,0],[3.5,-5.166],[0,0],[0,0],[-0.505,-0.174],[3.5,0],[3.75,0],[-2.384,0.794],[0,0],[0,0],[2.074,2.613]],"o":[[0,0],[2.75,0],[-1.888,2.786],[0,0],[0,0],[4.833,1.666],[-3.5,0],[-3.75,0],[0.523,-0.175],[0,0],[0,0],[-3.589,-4.52]],"v":[[-66.058,-90.25],[60.245,-90.083],[65.078,-82.417],[5.995,1.417],[5.87,65.446],[43.18,76.729],[42.572,81.904],[-43.866,81.99],[-44.866,77.157],[-5.755,65.917],[-5.88,1.417],[-69.987,-81.812]],"c":true}]},{"i":{"x":0.677,"y":1},"o":{"x":0.167,"y":0},"n":"0p677_1_0p167_0","t":40,"s":[{"i":[[-2.5,0],[-2.75,0],[3.5,-5.166],[0,0],[0,0],[-0.505,-0.174],[3.5,0],[3.75,0],[-2.384,0.794],[0,0],[0,0],[2.074,2.613]],"o":[[0,0],[2.75,0],[-1.888,2.786],[0,0],[0,0],[4.833,1.666],[-3.5,0],[-3.75,0],[0.523,-0.175],[0,0],[0,0],[-3.589,-4.52]],"v":[[-66.058,-90.25],[60.245,-90.083],[65.078,-82.417],[5.995,1.417],[5.87,65.446],[43.18,76.729],[42.572,81.904],[-43.866,81.99],[-44.866,77.157],[-5.755,65.917],[-5.88,1.417],[-69.987,-81.812]],"c":true}],"e":[{"i":[[-2.5,0],[-2.75,0],[3.5,-5.166],[0,0],[0,0],[-0.505,-0.174],[3.5,0],[3.75,0],[-2.384,0.794],[0,0],[0,0],[2.074,2.613]],"o":[[0,0],[2.75,0],[-1.888,2.786],[0,0],[0,0],[4.833,1.666],[-3.5,0],[-3.75,0],[0.523,-0.175],[0,0],[0,0],[-3.589,-4.52]],"v":[[-66.058,-90.25],[60.245,-90.083],[65.078,-82.417],[5.995,1.417],[5.87,65.446],[43.18,76.729],[42.572,81.904],[-43.866,81.99],[-44.866,77.157],[-5.755,65.917],[-5.88,1.417],[-69.987,-81.812]],"c":true}]},{"i":{"x":0.455,"y":1},"o":{"x":0.931,"y":0},"n":"0p455_1_0p931_0","t":88,"s":[{"i":[[-2.5,0],[-2.75,0],[3.5,-5.166],[0,0],[0,0],[-0.505,-0.174],[3.5,0],[3.75,0],[-2.384,0.794],[0,0],[0,0],[2.074,2.613]],"o":[[0,0],[2.75,0],[-1.888,2.786],[0,0],[0,0],[4.833,1.666],[-3.5,0],[-3.75,0],[0.523,-0.175],[0,0],[0,0],[-3.589,-4.52]],"v":[[-66.058,-90.25],[60.245,-90.083],[65.078,-82.417],[5.995,1.417],[5.87,65.446],[43.18,76.729],[42.572,81.904],[-43.866,81.99],[-44.866,77.157],[-5.755,65.917],[-5.88,1.417],[-69.987,-81.812]],"c":true}],"e":[{"i":[[-3.5,0],[0,0],[-2.18,-5.59],[-0.382,-27.269],[3.341,-18.031],[1.6,-3.291],[3.105,0],[0,0],[2.186,4.5],[3.372,24.949],[0.731,18.392],[-1.125,5.302]],"o":[[0,0],[3.5,0],[1.775,4.552],[0.275,19.636],[-4.587,24.754],[-2.188,4.5],[0,0],[-3.106,0],[-1.599,-3.291],[-2.419,-17.897],[-1.083,-27.25],[1.245,-5.87]],"v":[[-35.005,-100.5],[31.095,-100.5],[37.595,-91.958],[44.22,-25.417],[38.154,32.375],[24.47,78],[10.532,81.667],[-14.442,81.667],[-28.38,78],[-42.063,32.5],[-46.88,-23.417],[-41.63,-91.833]],"c":true}]},{"i":{"x":0.188,"y":1},"o":{"x":0.739,"y":0},"n":"0p188_1_0p739_0","t":102.044,"s":[{"i":[[-3.5,0],[0,0],[-2.18,-5.59],[-0.382,-27.269],[3.341,-18.031],[1.6,-3.291],[3.105,0],[0,0],[2.186,4.5],[3.372,24.949],[0.731,18.392],[-1.125,5.302]],"o":[[0,0],[3.5,0],[1.775,4.552],[0.275,19.636],[-4.587,24.754],[-2.188,4.5],[0,0],[-3.106,0],[-1.599,-3.291],[-2.419,-17.897],[-1.083,-27.25],[1.245,-5.87]],"v":[[-35.005,-100.5],[31.095,-100.5],[37.595,-91.958],[44.22,-25.417],[38.154,32.375],[24.47,78],[10.532,81.667],[-14.442,81.667],[-28.38,78],[-42.063,32.5],[-46.88,-23.417],[-41.63,-91.833]],"c":true}],"e":[{"i":[[-3.5,0],[0,0],[0.081,-6],[1.082,-27.25],[2.418,-17.897],[1.6,-3.291],[3.105,0],[0,0],[2.186,4.5],[3.372,24.949],[0.731,18.392],[0.03,2.162]],"o":[[0,0],[3.5,0],[-0.029,2.162],[-0.73,18.392],[-3.371,24.949],[-2.188,4.5],[0,0],[-3.106,0],[-1.599,-3.291],[-2.419,-17.897],[-1.083,-27.25],[-0.083,-6]],"v":[[-35.005,-100.5],[31.095,-100.5],[35.97,-92.083],[37.72,-23.417],[33.154,32],[24.47,78],[10.532,81.667],[-14.442,81.667],[-28.38,78],[-37.063,32],[-41.63,-23.417],[-39.88,-92.083]],"c":true}]},{"i":{"x":0.188,"y":1},"o":{"x":0.167,"y":0},"n":"0p188_1_0p167_0","t":116,"s":[{"i":[[-3.5,0],[0,0],[0.081,-6],[1.082,-27.25],[2.418,-17.897],[1.6,-3.291],[3.105,0],[0,0],[2.186,4.5],[3.372,24.949],[0.731,18.392],[0.03,2.162]],"o":[[0,0],[3.5,0],[-0.029,2.162],[-0.73,18.392],[-3.371,24.949],[-2.188,4.5],[0,0],[-3.106,0],[-1.599,-3.291],[-2.419,-17.897],[-1.083,-27.25],[-0.083,-6]],"v":[[-35.005,-100.5],[31.095,-100.5],[35.97,-92.083],[37.72,-23.417],[33.154,32],[24.47,78],[10.532,81.667],[-14.442,81.667],[-28.38,78],[-37.063,32],[-41.63,-23.417],[-39.88,-92.083]],"c":true}],"e":[{"i":[[-3.5,0],[0,0],[0.081,-6],[1.082,-27.25],[2.418,-17.897],[1.6,-3.291],[3.105,0],[0,0],[2.186,4.5],[3.372,24.949],[0.731,18.392],[0.03,2.162]],"o":[[0,0],[3.5,0],[-0.029,2.162],[-0.73,18.392],[-3.371,24.949],[-2.188,4.5],[0,0],[-3.106,0],[-1.599,-3.291],[-2.419,-17.897],[-1.083,-27.25],[-0.083,-6]],"v":[[-35.005,-100.5],[31.095,-100.5],[35.97,-92.083],[37.72,-23.417],[33.154,32],[24.47,78],[10.532,81.667],[-14.442,81.667],[-28.38,78],[-37.063,32],[-41.63,-23.417],[-39.88,-92.083]],"c":true}]},{"i":{"x":0.833,"y":0.75},"o":{"x":0.972,"y":0},"n":"0p833_0p75_0p972_0","t":187,"s":[{"i":[[-3.5,0],[0,0],[0.081,-6],[1.082,-27.25],[2.418,-17.897],[1.6,-3.291],[3.105,0],[0,0],[2.186,4.5],[3.372,24.949],[0.731,18.392],[0.03,2.162]],"o":[[0,0],[3.5,0],[-0.029,2.162],[-0.73,18.392],[-3.371,24.949],[-2.188,4.5],[0,0],[-3.106,0],[-1.599,-3.291],[-2.419,-17.897],[-1.083,-27.25],[-0.083,-6]],"v":[[-35.005,-100.5],[31.095,-100.5],[35.97,-92.083],[37.72,-23.417],[33.154,32],[24.47,78],[10.532,81.667],[-14.442,81.667],[-28.38,78],[-37.063,32],[-41.63,-23.417],[-39.88,-92.083]],"c":true}],"e":[{"i":[[-3.075,0],[0,0],[0.29,-5.708],[1.62,-27.255],[2.064,-18.183],[0.955,-2.351],[3.273,0],[0,0],[1.363,3.65],[2.856,25.274],[1.074,18.371],[0.097,2.159]],"o":[[0,0],[3.181,0],[-0.138,2.372],[-1.152,19.08],[-2.732,23.638],[-1.364,3.969],[0,0],[-3.38,0],[-0.958,-2.283],[-2.033,-17.939],[-1.574,-27.017],[-0.26,-5.894]],"v":[[-45.187,-92.954],[39.468,-92.954],[44.755,-85.459],[41.298,-23.562],[36.952,34.22],[32.532,77.455],[22.439,82.127],[-28.159,82.127],[-38.297,78.106],[-42.974,30.165],[-46.629,-24.898],[-50.434,-85.459]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.25},"n":"0_1_0p167_0p25","t":191.667,"s":[{"i":[[-3.075,0],[0,0],[0.29,-5.708],[1.62,-27.255],[2.064,-18.183],[0.955,-2.351],[3.273,0],[0,0],[1.363,3.65],[2.856,25.274],[1.074,18.371],[0.097,2.159]],"o":[[0,0],[3.181,0],[-0.138,2.372],[-1.152,19.08],[-2.732,23.638],[-1.364,3.969],[0,0],[-3.38,0],[-0.958,-2.283],[-2.033,-17.939],[-1.574,-27.017],[-0.26,-5.894]],"v":[[-45.187,-92.954],[39.468,-92.954],[44.755,-85.459],[41.298,-23.562],[36.952,34.22],[32.532,77.455],[22.439,82.127],[-28.159,82.127],[-38.297,78.106],[-42.974,30.165],[-46.629,-24.898],[-50.434,-85.459]],"c":true}],"e":[{"i":[[-2.479,-0.324],[0,0],[1.256,-5.194],[2.552,-27.242],[6.005,-18.853],[0.223,-1.061],[3.47,0.453],[0,0],[-0.076,2.511],[2.684,25.665],[-0.852,18.387],[-0.093,2.16]],"o":[[0,0],[2.727,0.356],[-0.628,2.597],[-2.007,21.429],[-6.66,20.908],[-0.669,3.19],[0,0],[-3.718,-0.486],[0.028,-0.924],[-2.028,-19.388],[1.24,-26.766],[0.249,-5.766]],"v":[[-40.278,-93.615],[68.546,-79.397],[73.532,-72.443],[71.822,-25.527],[56.906,40.579],[40.593,77.775],[34.96,83.121],[-49.572,72.077],[-53.947,66.967],[-58.294,19.467],[-56.944,-39.291],[-46.79,-88.163]],"c":true}]},{"i":{"x":0.155,"y":1},"o":{"x":0.754,"y":0},"n":"0p155_1_0p754_0","t":198,"s":[{"i":[[-2.479,-0.324],[0,0],[1.256,-5.194],[2.552,-27.242],[6.005,-18.853],[0.223,-1.061],[3.47,0.453],[0,0],[-0.076,2.511],[2.684,25.665],[-0.852,18.387],[-0.093,2.16]],"o":[[0,0],[2.727,0.356],[-0.628,2.597],[-2.007,21.429],[-6.66,20.908],[-0.669,3.19],[0,0],[-3.718,-0.486],[0.028,-0.924],[-2.028,-19.388],[1.24,-26.766],[0.249,-5.766]],"v":[[-40.278,-93.615],[68.546,-79.397],[73.532,-72.443],[71.822,-25.527],[56.906,40.579],[40.593,77.775],[34.96,83.121],[-49.572,72.077],[-53.947,66.967],[-58.294,19.467],[-56.944,-39.291],[-46.79,-88.163]],"c":true}],"e":[{"i":[[-2.5,0],[0,0],[0.572,-5.313],[2.347,-27.261],[1.586,-18.569],[0.083,-1.081],[3.5,0],[0,0],[0.25,2.5],[2.158,25.715],[1.538,18.342],[0.188,2.154]],"o":[[0,0],[2.75,0],[-0.286,2.656],[-1.723,20.011],[-1.868,21.864],[-0.25,3.25],[0,0],[-3.75,0],[-0.092,-0.92],[-1.51,-17.996],[-2.238,-26.701],[-0.5,-5.75]],"v":[[-58.958,-82.75],[50.792,-82.75],[56.636,-76.5],[52.019,-23.758],[46.792,37.223],[43.435,76.719],[38.542,82.75],[-46.708,82.75],[-51.708,78.25],[-55.673,31.213],[-60.446,-25.724],[-64.708,-76.5]],"c":true}]},{"t":207}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[8063.695,83.218],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":517,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"BeerglassGloss2","ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":38,"s":[0],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":52,"s":[10],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":88,"s":[10],"e":[4]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":94,"s":[4],"e":[1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":101,"s":[1],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":113,"s":[10],"e":[10]},{"t":208}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[220.5,270.75,0]},"a":{"a":0,"k":[18.5,82.75,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.125,"y":1},"o":{"x":0.167,"y":0},"n":"0p125_1_0p167_0","t":38,"s":[{"i":[[1.848,-1],[0.61,0.084],[0,0],[0,0]],"o":[[-1.848,1],[-0.89,-0.041],[0,0],[0,0]],"v":[[41.348,-20.5],[31.265,-17.334],[51.889,-89.5],[83.557,-89.5]],"c":true}],"e":[{"i":[[0,0],[4,5.302],[0,0],[0,0]],"o":[[0,0],[-5.661,-7.504],[0,0],[0,0]],"v":[[30.223,-14.25],[22.39,-19.084],[-30.111,-89.25],[1.557,-89.25]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":71,"s":[{"i":[[0,0],[4,5.302],[0,0],[0,0]],"o":[[0,0],[-5.661,-7.504],[0,0],[0,0]],"v":[[30.223,-14.25],[22.39,-19.084],[-30.111,-89.25],[1.557,-89.25]],"c":true}],"e":[{"i":[[0,0],[4,5.302],[0,0],[0,0]],"o":[[0,0],[-5.661,-7.504],[0,0],[0,0]],"v":[[30.223,-14.25],[22.39,-19.084],[-30.111,-89.25],[1.557,-89.25]],"c":true}]},{"i":{"x":0.263,"y":1},"o":{"x":0.7,"y":0},"n":"0p263_1_0p7_0","t":88,"s":[{"i":[[0,0],[4,5.302],[0,0],[0,0]],"o":[[0,0],[-5.661,-7.504],[0,0],[0,0]],"v":[[30.223,-14.25],[22.39,-19.084],[-30.111,-89.25],[1.557,-89.25]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[34.953,81.917],[24.336,81.917],[31.499,-100.251],[50.859,-100.251]],"c":true}]},{"i":{"x":0.228,"y":1},"o":{"x":0.333,"y":0},"n":"0p228_1_0p333_0","t":104,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[34.953,81.917],[24.336,81.917],[31.499,-100.251],[50.859,-100.251]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[27.453,81.917],[16.836,81.917],[-1.001,-100.25],[23.109,-100.25]],"c":true}]},{"i":{"x":0.228,"y":1},"o":{"x":0.167,"y":0},"n":"0p228_1_0p167_0","t":125,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[27.453,81.917],[16.836,81.917],[-1.001,-100.25],[23.109,-100.25]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[27.453,81.917],[16.836,81.917],[-1.001,-100.25],[23.109,-100.25]],"c":true}]},{"i":{"x":0.325,"y":1},"o":{"x":0.72,"y":0},"n":"0p325_1_0p72_0","t":187,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[27.453,81.917],[16.836,81.917],[-1.001,-100.25],[23.109,-100.25]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[49.069,81.694],[32.131,78.834],[44.572,-85.262],[67.364,-82.663]],"c":true}]},{"i":{"x":0.08,"y":1},"o":{"x":0.439,"y":0},"n":"0p08_1_0p439_0","t":198,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[49.069,81.694],[32.131,78.834],[44.572,-85.262],[67.364,-82.663]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[18.5,82.75],[-3.834,82.75],[-18.5,-82.75],[3.833,-82.75]],"c":true}]},{"t":219}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[18.501,82.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":38,"op":517,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"BeerglassGloss","ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":24,"s":[10],"e":[1]},{"t":29}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[220.5,270.75,0]},"a":{"a":0,"k":[18.5,82.75,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.604,"y":0},"n":"0p833_1_0p604_0","t":23,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[18.5,82.75],[-3.834,82.75],[-18.5,-82.75],[3.833,-82.75]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-14,82.5],[-14.334,82.75],[-29,-82.75],[-28.667,-83]],"c":true}]},{"t":28}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[18.501,82.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":28,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"MartiniGloss","ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":38,"s":[0],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":52,"s":[10],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":92,"s":[10],"e":[0]},{"t":97}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[236.062,344.25,0]},"a":{"a":0,"k":[11.875,4.5,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.134,"y":1},"o":{"x":0.167,"y":0},"n":"0p134_1_0p167_0","t":38,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[26.125,4.5],[9.375,4.5],[5.875,-4.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[4.875,4.5],[-11.875,4.5],[11.875,-4.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":71,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[4.875,4.5],[-11.875,4.5],[11.875,-4.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[4.875,4.5],[-11.875,4.5],[11.875,-4.5]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":90,"s":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[4.875,4.5],[-11.875,4.5],[11.875,-4.5]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-12.812,-3.188],[-20.75,3.375],[-9.125,-10.375]],"c":true}]},{"t":97}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"mn":"ADBE Vector Group"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[11.875,4.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"mn":"ADBE Vector Group"}],"ip":38,"op":98,"st":3,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"Drop Left 3","ks":{"o":{"a":0,"k":66},"r":{"a":0,"k":0},"p":{"a":0,"k":[339,253,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p2_1_0p167_0p167","t":105,"s":[{"i":[[-1.316,2.109],[0.979,2.851],[0.349,-1.983],[-1.404,-1.234]],"o":[[1.316,-2.109],[-0.979,-2.851],[-0.349,1.983],[1.404,1.234]],"v":[[-65.774,-42.562],[-64.754,-45.173],[-67.678,-43.422],[-67.572,-40.817]],"c":true}],"e":[{"i":[[-0.497,1.527],[1.058,1.635],[-0.09,-1.298],[-1.073,-0.555]],"o":[[0.497,-1.527],[-1.058,-1.635],[0.09,1.298],[1.073,0.555]],"v":[[-72.592,-96.339],[-72.355,-101.455],[-75.21,-98.776],[-74.969,-94.879]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.816,"y":0},"n":"0p833_0p833_0p816_0","t":116,"s":[{"i":[[-0.497,1.527],[1.058,1.635],[-0.09,-1.298],[-1.073,-0.555]],"o":[[0.497,-1.527],[-1.058,-1.635],[0.09,1.298],[1.073,0.555]],"v":[[-72.592,-96.339],[-72.355,-101.455],[-75.21,-98.776],[-74.969,-94.879]],"c":true}],"e":[{"i":[[0.194,1.994],[1.89,-0.859],[0.722,-1.311],[-1.158,-0.576]],"o":[[-0.194,-1.994],[-1.792,0.815],[-0.746,1.354],[0.204,0.684]],"v":[[-76.103,-62.685],[-77.583,-64.796],[-78.087,-62.115],[-76.941,-60.526]],"c":true}]},{"t":126}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.675,0.29,0.231,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"}],"ip":105,"op":127,"st":78,"bm":0,"sr":1},{"ddd":0,"ind":6,"ty":4,"nm":"Drop Left 4","ks":{"o":{"a":0,"k":66},"r":{"a":0,"k":0},"p":{"a":0,"k":[336.5,252.781,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":104,"s":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-57.492,-9.707],[-59.389,-15.634],[-62.015,-8.689],[-58.68,-6.035]],"c":true}],"e":[{"i":[[-1.316,2.109],[0.979,2.851],[0.349,-1.983],[-1.404,-1.234]],"o":[[1.316,-2.109],[-0.979,-2.851],[-0.349,1.983],[1.404,1.234]],"v":[[-116.399,-48.187],[-115.379,-50.798],[-118.303,-49.047],[-118.197,-46.442]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p2_1_0p167_0p167","t":111,"s":[{"i":[[-1.316,2.109],[0.979,2.851],[0.349,-1.983],[-1.404,-1.234]],"o":[[1.316,-2.109],[-0.979,-2.851],[-0.349,1.983],[1.404,1.234]],"v":[[-116.399,-48.187],[-115.379,-50.798],[-118.303,-49.047],[-118.197,-46.442]],"c":true}],"e":[{"i":[[-0.252,-1.586],[-1.686,-0.976],[0.67,1.115],[1.208,0.007]],"o":[[0.252,1.586],[1.686,0.976],[-0.67,-1.115],[-1.208,-0.007]],"v":[[-103.035,-106.064],[-100.654,-102.787],[-97.641,-107.34],[-101.364,-108.966]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.816,"y":0},"n":"0p833_0p833_0p816_0","t":122,"s":[{"i":[[-0.252,-1.586],[-1.686,-0.976],[0.67,1.115],[1.208,0.007]],"o":[[0.252,1.586],[1.686,0.976],[-0.67,-1.115],[-1.208,-0.007]],"v":[[-103.035,-106.064],[-100.654,-102.787],[-97.641,-107.34],[-101.364,-108.966]],"c":true}],"e":[{"i":[[0.194,1.994],[1.89,-0.859],[0.722,-1.311],[-1.158,-0.576]],"o":[[-0.194,-1.994],[-1.792,0.815],[-0.746,1.354],[0.204,0.684]],"v":[[-97.353,-60.81],[-98.833,-62.921],[-99.337,-60.24],[-98.191,-58.651]],"c":true}]},{"t":132}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.675,0.29,0.231,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"}],"ip":115,"op":132,"st":84,"bm":0,"sr":1},{"ddd":0,"ind":7,"ty":4,"nm":"Drop Left 2","ks":{"o":{"a":0,"k":66},"r":{"a":0,"k":0},"p":{"a":0,"k":[339,253,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":107,"s":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-57.492,-9.707],[-59.389,-15.634],[-62.015,-8.689],[-58.68,-6.035]],"c":true}],"e":[{"i":[[-1.316,2.109],[0.979,2.851],[0.349,-1.983],[-1.404,-1.234]],"o":[[1.316,-2.109],[-0.979,-2.851],[-0.349,1.983],[1.404,1.234]],"v":[[-116.399,-48.187],[-115.379,-50.798],[-118.303,-49.047],[-118.197,-46.442]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p2_1_0p167_0p167","t":114,"s":[{"i":[[-1.316,2.109],[0.979,2.851],[0.349,-1.983],[-1.404,-1.234]],"o":[[1.316,-2.109],[-0.979,-2.851],[-0.349,1.983],[1.404,1.234]],"v":[[-116.399,-48.187],[-115.379,-50.798],[-118.303,-49.047],[-118.197,-46.442]],"c":true}],"e":[{"i":[[-0.497,1.527],[1.058,1.635],[-0.09,-1.298],[-1.073,-0.555]],"o":[[0.497,-1.527],[-1.058,-1.635],[0.09,1.298],[1.073,0.555]],"v":[[-102.03,-115.214],[-101.542,-119.205],[-104.96,-115.838],[-103.719,-113.379]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.816,"y":0},"n":"0p833_0p833_0p816_0","t":125,"s":[{"i":[[-0.497,1.527],[1.058,1.635],[-0.09,-1.298],[-1.073,-0.555]],"o":[[0.497,-1.527],[-1.058,-1.635],[0.09,1.298],[1.073,0.555]],"v":[[-102.03,-115.214],[-101.542,-119.205],[-104.96,-115.838],[-103.719,-113.379]],"c":true}],"e":[{"i":[[0.194,1.994],[1.89,-0.859],[0.722,-1.311],[-1.158,-0.576]],"o":[[-0.194,-1.994],[-1.792,0.815],[-0.746,1.354],[0.204,0.684]],"v":[[-92.228,-63.185],[-93.708,-65.296],[-94.212,-62.615],[-93.066,-61.026]],"c":true}]},{"t":135}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.675,0.29,0.231,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"}],"ip":118,"op":135,"st":87,"bm":0,"sr":1},{"ddd":0,"ind":8,"ty":4,"nm":"Drop Left","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[339,253,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":20,"s":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-57.492,-9.707],[-59.389,-15.634],[-62.015,-8.689],[-58.68,-6.035]],"c":true}],"e":[{"i":[[-1.316,2.109],[0.979,2.851],[0.349,-1.983],[-1.404,-1.234]],"o":[[1.316,-2.109],[-0.979,-2.851],[-0.349,1.983],[1.404,1.234]],"v":[[-123.524,-21.187],[-122.504,-23.798],[-125.428,-22.047],[-125.322,-19.442]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":27,"s":[{"i":[[-1.316,2.109],[0.979,2.851],[0.349,-1.983],[-1.404,-1.234]],"o":[[1.316,-2.109],[-0.979,-2.851],[-0.349,1.983],[1.404,1.234]],"v":[[-123.524,-21.187],[-122.504,-23.798],[-125.428,-22.047],[-125.322,-19.442]],"c":true}],"e":[{"i":[[-0.497,1.527],[1.058,1.635],[-0.09,-1.298],[-1.073,-0.555]],"o":[[0.497,-1.527],[-1.058,-1.635],[0.09,1.298],[1.073,0.555]],"v":[[-114.905,-87.214],[-114.417,-91.205],[-117.835,-87.838],[-116.594,-85.379]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"n":"0p833_0p833_0p333_0","t":34,"s":[{"i":[[-0.497,1.527],[1.058,1.635],[-0.09,-1.298],[-1.073,-0.555]],"o":[[0.497,-1.527],[-1.058,-1.635],[0.09,1.298],[1.073,0.555]],"v":[[-114.905,-87.214],[-114.417,-91.205],[-117.835,-87.838],[-116.594,-85.379]],"c":true}],"e":[{"i":[[0.194,1.994],[1.89,-0.859],[0.722,-1.311],[-1.158,-0.576]],"o":[[-0.194,-1.994],[-1.792,0.815],[-0.746,1.354],[0.204,0.684]],"v":[[-112.853,-44.405],[-114.333,-46.516],[-114.837,-43.835],[-113.691,-42.247]],"c":true}]},{"t":41}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.367],"y":[1]},"o":{"x":[0.773],"y":[0]},"n":["0p367_1_0p773_0"],"t":25,"s":[0.998,0.651,0.128,1],"e":[0.978,0.14,0.247,1]},{"t":45}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"}],"ip":30,"op":49,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":9,"ty":4,"nm":"Drop Right","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[339,253,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":26,"s":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-57.492,-9.707],[-59.389,-15.634],[-62.015,-8.689],[-58.68,-6.035]],"c":true}],"e":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-58.805,-42.77],[-59.639,-45.446],[-60.828,-42.252],[-59.117,-40.285]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":33,"s":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-58.805,-42.77],[-59.639,-45.446],[-60.828,-42.252],[-59.117,-40.285]],"c":true}],"e":[{"i":[[0.187,1.595],[1.645,1.043],[-0.624,-1.141],[-1.207,-0.056]],"o":[[-0.187,-1.595],[-1.645,-1.043],[0.624,1.141],[1.207,0.056]],"v":[[-66.252,-76.252],[-67.477,-80.082],[-69.174,-75.594],[-67.019,-73.879]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"n":"0p833_0p833_0p333_0","t":40,"s":[{"i":[[0.187,1.595],[1.645,1.043],[-0.624,-1.141],[-1.207,-0.056]],"o":[[-0.187,-1.595],[-1.645,-1.043],[0.624,1.141],[1.207,0.056]],"v":[[-66.252,-76.252],[-67.477,-80.082],[-69.174,-75.594],[-67.019,-73.879]],"c":true}],"e":[{"i":[[0.194,1.994],[1.89,-0.859],[0.722,-1.311],[-1.158,-0.576]],"o":[[-0.194,-1.994],[-1.792,0.815],[-0.746,1.354],[0.204,0.684]],"v":[[-67.353,-42.405],[-68.833,-44.516],[-69.337,-41.835],[-68.191,-40.247]],"c":true}]},{"t":46}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.367],"y":[1]},"o":{"x":[0.773],"y":[0]},"n":["0p367_1_0p773_0"],"t":25,"s":[0.998,0.651,0.128,1],"e":[0.978,0.14,0.247,1]},{"t":45}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"}],"ip":30,"op":49,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":10,"ty":4,"nm":"Drop Right 2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[339,253,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":25,"s":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-57.492,-9.707],[-59.389,-15.634],[-62.015,-8.689],[-58.68,-6.035]],"c":true}],"e":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-56.992,-43.457],[-57.639,-47.134],[-59.015,-42.939],[-56.93,-38.535]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":32,"s":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-56.992,-43.457],[-57.639,-47.134],[-59.015,-42.939],[-56.93,-38.535]],"c":true}],"e":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-59.992,-72.207],[-61.889,-78.134],[-64.515,-71.189],[-61.18,-68.535]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"n":"0p833_0p833_0p333_0","t":39,"s":[{"i":[[0.29,2.469],[2.545,1.615],[-0.966,-1.766],[-1.867,-0.086]],"o":[[-0.29,-2.469],[-2.545,-1.615],[0.966,1.766],[1.867,0.086]],"v":[[-59.992,-72.207],[-61.889,-78.134],[-64.515,-71.189],[-61.18,-68.535]],"c":true}],"e":[{"i":[[0.29,2.469],[2.82,-1.064],[1.078,-1.623],[-1.728,-0.713]],"o":[[-0.29,-2.469],[-2.674,1.009],[-1.114,1.677],[0.305,0.847]],"v":[[-64.43,-42.582],[-66.639,-45.196],[-67.39,-41.877],[-65.68,-39.91]],"c":true}]},{"t":45}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.367],"y":[1]},"o":{"x":[0.773],"y":[0]},"n":["0p367_1_0p773_0"],"t":25,"s":[0.998,0.651,0.128,1],"e":[0.978,0.14,0.247,1]},{"t":45}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"}],"ip":30,"op":49,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":11,"ty":4,"nm":"Ice4","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[544.717,182.086,0]},"a":{"a":0,"k":[13.215,15.58,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":23,"s":[{"i":[[-0.102,-0.927],[0.441,-0.161],[0.101,0.927],[-0.441,0.161]],"o":[[0.102,0.927],[-0.441,0.161],[-0.101,-0.927],[0.441,-0.161]],"v":[[-316.194,-28.717],[-316.808,-26.747],[-317.789,-28.134],[-317.175,-30.104]],"c":true}],"e":[{"i":[[-1.133,-6.494],[4.946,-1.006],[1.131,6.494],[-4.947,1.005]],"o":[[1.133,6.494],[-4.946,1.006],[-1.131,-6.494],[4.947,-1.005]],"v":[[-310.89,-78.422],[-317.796,-64.842],[-328.804,-74.78],[-321.897,-88.36]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[{"i":[[-1.133,-6.494],[4.946,-1.006],[1.131,6.494],[-4.947,1.005]],"o":[[1.133,6.494],[-4.946,1.006],[-1.131,-6.494],[4.947,-1.005]],"v":[[-310.89,-78.422],[-317.796,-64.842],[-328.804,-74.78],[-321.897,-88.36]],"c":true}],"e":[{"i":[[-1.454,-7.813],[6.356,-1.183],[1.452,7.812],[-6.356,1.182]],"o":[[1.454,7.812],[-6.356,1.183],[-1.452,-7.812],[6.356,-1.182]],"v":[[-283.741,-2.893],[-292.616,13.394],[-306.759,1.392],[-297.883,-14.896]],"c":true}]},{"i":{"x":0.176,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p176_1_0p167_0p167","t":38,"s":[{"i":[[-1.454,-7.813],[6.356,-1.183],[1.452,7.812],[-6.356,1.182]],"o":[[1.454,7.812],[-6.356,1.183],[-1.452,-7.812],[6.356,-1.182]],"v":[[-283.741,-2.893],[-292.616,13.394],[-306.759,1.392],[-297.883,-14.896]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"n":"0p833_1_0p333_0","t":71,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":87,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.242,4.899],[-262.391,16.894],[-271.257,0.601],[-257.107,-11.394]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":92,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.242,4.899],[-262.391,16.894],[-271.257,0.601],[-257.107,-11.394]],"c":true}],"e":[{"i":[[1.27,-0.048],[0.274,1.074],[-0.838,0.025],[-0.173,-0.881]],"o":[[-1.27,0.048],[-0.274,-1.074],[0.838,-0.025],[0.173,0.881]],"v":[[-281.142,-49.339],[-299.611,-61.999],[-285.683,-82.317],[-267.214,-69.658]],"c":true}]},{"i":{"x":0.259,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p259_1_0p167_0p167","t":102,"s":[{"i":[[1.27,-0.048],[0.274,1.074],[-0.838,0.025],[-0.173,-0.881]],"o":[[-1.27,0.048],[-0.274,-1.074],[0.838,-0.025],[0.173,0.881]],"v":[[-281.142,-49.339],[-299.611,-61.999],[-285.683,-82.317],[-267.214,-69.658]],"c":true}],"e":[{"i":[[1.058,-0.704],[0.795,0.773],[-0.701,0.459],[-0.607,-0.661]],"o":[[-1.058,0.704],[-0.795,-0.773],[0.701,-0.459],[0.607,0.661]],"v":[[-272.612,50.047],[-294.974,48.903],[-293.716,24.301],[-271.354,25.445]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":129,"s":[{"i":[[1.058,-0.704],[0.795,0.773],[-0.701,0.459],[-0.607,-0.661]],"o":[[-1.058,0.704],[-0.795,-0.773],[0.701,-0.459],[0.607,0.661]],"v":[[-272.612,50.047],[-294.974,48.903],[-293.716,24.301],[-271.354,25.445]],"c":true}],"e":[{"i":[[0.898,-0.899],[0.931,0.601],[-0.597,0.588],[-0.726,-0.528]],"o":[[-0.898,0.899],[-0.931,-0.601],[0.597,-0.588],[0.726,0.528]],"v":[[-266.806,48.446],[-288.954,51.737],[-292.574,27.37],[-270.426,24.079]],"c":true}]},{"i":{"x":0.853,"y":1},"o":{"x":0.167,"y":0},"n":"0p853_1_0p167_0","t":159,"s":[{"i":[[0.898,-0.899],[0.931,0.601],[-0.597,0.588],[-0.726,-0.528]],"o":[[-0.898,0.899],[-0.931,-0.601],[0.597,-0.588],[0.726,0.528]],"v":[[-266.806,48.446],[-288.954,51.737],[-292.574,27.37],[-270.426,24.079]],"c":true}],"e":[{"i":[[0.898,-0.899],[0.931,0.601],[-0.597,0.588],[-0.726,-0.528]],"o":[[-0.898,0.899],[-0.931,-0.601],[0.597,-0.588],[0.726,0.528]],"v":[[-266.806,48.446],[-288.954,51.737],[-292.574,27.37],[-270.426,24.079]],"c":true}]},{"i":{"x":0.878,"y":1},"o":{"x":0.71,"y":0},"n":"0p878_1_0p71_0","t":187,"s":[{"i":[[0.898,-0.899],[0.931,0.601],[-0.597,0.588],[-0.726,-0.528]],"o":[[-0.898,0.899],[-0.931,-0.601],[0.597,-0.588],[0.726,0.528]],"v":[[-266.806,48.446],[-288.954,51.737],[-292.574,27.37],[-270.426,24.079]],"c":true}],"e":[{"i":[[1.11,-0.233],[0.638,0.821],[-0.734,0.148],[-0.477,-0.681]],"o":[[-1.11,0.233],[-0.638,-0.821],[0.734,-0.148],[0.477,0.681]],"v":[[-244.289,53.017],[-265.34,45.68],[-260.459,27.22],[-239.409,34.557]],"c":true}]},{"t":195}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":94,"s":[0.997,0.921,0.777,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0.333]},"n":["0p833_0p833_0p333_0p333"],"t":98,"s":[0.848,0.966,1,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":108,"s":[0.848,0.966,1,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":109,"s":[0.576,0.341,0.31,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":187,"s":[0.576,0.341,0.31,1],"e":[0.996,0.925,0.812,1]},{"t":195}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[13.215,15.581],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":0,"mn":"ADBE Vector Group"}],"ip":102,"op":195,"st":36,"bm":0,"sr":1},{"ddd":0,"ind":12,"ty":4,"nm":"Ice3","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[544.717,182.086,0]},"a":{"a":0,"k":[13.215,15.58,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":23,"s":[{"i":[[-0.102,-0.927],[0.441,-0.161],[0.101,0.927],[-0.441,0.161]],"o":[[0.102,0.927],[-0.441,0.161],[-0.101,-0.927],[0.441,-0.161]],"v":[[-316.194,-28.717],[-316.808,-26.747],[-317.789,-28.134],[-317.175,-30.104]],"c":true}],"e":[{"i":[[-1.133,-6.494],[4.946,-1.006],[1.131,6.494],[-4.947,1.005]],"o":[[1.133,6.494],[-4.946,1.006],[-1.131,-6.494],[4.947,-1.005]],"v":[[-310.89,-78.422],[-317.796,-64.842],[-328.804,-74.78],[-321.897,-88.36]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[{"i":[[-1.133,-6.494],[4.946,-1.006],[1.131,6.494],[-4.947,1.005]],"o":[[1.133,6.494],[-4.946,1.006],[-1.131,-6.494],[4.947,-1.005]],"v":[[-310.89,-78.422],[-317.796,-64.842],[-328.804,-74.78],[-321.897,-88.36]],"c":true}],"e":[{"i":[[-1.454,-7.813],[6.356,-1.183],[1.452,7.812],[-6.356,1.182]],"o":[[1.454,7.812],[-6.356,1.183],[-1.452,-7.812],[6.356,-1.182]],"v":[[-283.741,-2.893],[-292.616,13.394],[-306.759,1.392],[-297.883,-14.896]],"c":true}]},{"i":{"x":0.176,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p176_1_0p167_0p167","t":38,"s":[{"i":[[-1.454,-7.813],[6.356,-1.183],[1.452,7.812],[-6.356,1.182]],"o":[[1.454,7.812],[-6.356,1.183],[-1.452,-7.812],[6.356,-1.182]],"v":[[-283.741,-2.893],[-292.616,13.394],[-306.759,1.392],[-297.883,-14.896]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"n":"0p833_1_0p333_0","t":71,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":87,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.242,4.899],[-262.391,16.894],[-271.257,0.601],[-257.107,-11.394]],"c":true}]},{"i":{"x":0.164,"y":1},"o":{"x":0.167,"y":0},"n":"0p164_1_0p167_0","t":92,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.242,4.899],[-262.391,16.894],[-271.257,0.601],[-257.107,-11.394]],"c":true}],"e":[{"i":[[1.27,-0.048],[0.274,1.074],[-0.838,0.025],[-0.173,-0.881]],"o":[[-1.27,0.048],[-0.274,-1.074],[0.838,-0.025],[0.173,0.881]],"v":[[-281.142,-49.339],[-299.611,-61.999],[-285.683,-82.317],[-267.214,-69.658]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"n":"0_1_0p333_0","t":101,"s":[{"i":[[1.27,-0.048],[0.274,1.074],[-0.838,0.025],[-0.173,-0.881]],"o":[[-1.27,0.048],[-0.274,-1.074],[0.838,-0.025],[0.173,0.881]],"v":[[-281.142,-49.339],[-299.611,-61.999],[-285.683,-82.317],[-267.214,-69.658]],"c":true}],"e":[{"i":[[0.694,-1.065],[1.035,0.396],[-0.463,0.698],[-0.819,-0.367]],"o":[[-0.694,1.065],[-1.035,-0.396],[0.463,-0.698],[0.819,0.367]],"v":[[-265.902,96.38],[-286.899,104.157],[-295.456,81.057],[-274.459,73.28]],"c":true}]},{"i":{"x":0.843,"y":1},"o":{"x":0.167,"y":0},"n":"0p843_1_0p167_0","t":132,"s":[{"i":[[0.694,-1.065],[1.035,0.396],[-0.463,0.698],[-0.819,-0.367]],"o":[[-0.694,1.065],[-1.035,-0.396],[0.463,-0.698],[0.819,0.367]],"v":[[-265.902,96.38],[-286.899,104.157],[-295.456,81.057],[-274.459,73.28]],"c":true}],"e":[{"i":[[0.694,-1.065],[1.035,0.396],[-0.463,0.698],[-0.819,-0.367]],"o":[[-0.694,1.065],[-1.035,-0.396],[0.463,-0.698],[0.819,0.367]],"v":[[-265.902,96.38],[-286.899,104.157],[-295.456,81.057],[-274.459,73.28]],"c":true}]},{"i":{"x":0.878,"y":1},"o":{"x":0.71,"y":0},"n":"0p878_1_0p71_0","t":187,"s":[{"i":[[0.694,-1.065],[1.035,0.396],[-0.463,0.698],[-0.819,-0.367]],"o":[[-0.694,1.065],[-1.035,-0.396],[0.463,-0.698],[0.819,0.367]],"v":[[-265.902,96.38],[-286.899,104.157],[-295.456,81.057],[-274.459,73.28]],"c":true}],"e":[{"i":[[0.795,-0.635],[0.665,0.567],[-0.527,0.414],[-0.512,-0.49]],"o":[[-0.795,0.635],[-0.665,-0.567],[0.527,-0.414],[0.512,0.49]],"v":[[-260.586,47.748],[-278.225,48.316],[-278.513,28.498],[-260.873,27.93]],"c":true}]},{"t":195}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":94,"s":[0.997,0.921,0.777,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0.333]},"n":["0p833_0p833_0p333_0p333"],"t":99,"s":[0.848,0.966,1,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":107,"s":[0.848,0.966,1,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":108,"s":[0.576,0.341,0.31,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":187,"s":[0.576,0.341,0.31,1],"e":[0.996,0.925,0.812,1]},{"t":195}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[13.215,15.581],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":0,"mn":"ADBE Vector Group"}],"ip":98,"op":195,"st":36,"bm":0,"sr":1},{"ddd":0,"ind":13,"ty":4,"nm":"Ice2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[538.463,199.399,0]},"a":{"a":0,"k":[11.099,12.419,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":25,"s":[{"i":[[-0.161,-0.807],[0.701,-0.14],[0.161,0.807],[-0.701,0.14]],"o":[[0.161,0.807],[-0.701,0.14],[-0.161,-0.807],[0.701,-0.14]],"v":[[-305.699,-41.255],[-306.676,-39.539],[-308.237,-40.747],[-307.26,-42.463]],"c":true}],"e":[{"i":[[-1.356,-6.776],[5.884,-1.177],[1.354,6.777],[-5.883,1.176]],"o":[[1.356,6.776],[-5.883,1.177],[-1.354,-6.777],[5.884,-1.177]],"v":[[-297.461,-69.978],[-305.66,-55.576],[-318.768,-65.715],[-310.569,-80.116]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":31,"s":[{"i":[[-1.356,-6.776],[5.884,-1.177],[1.354,6.777],[-5.883,1.176]],"o":[[1.356,6.776],[-5.883,1.177],[-1.354,-6.777],[5.884,-1.177]],"v":[[-297.461,-69.978],[-305.66,-55.576],[-318.768,-65.715],[-310.569,-80.116]],"c":true}],"e":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-293.92,-46.936],[-301.365,-33.86],[-313.267,-43.066],[-305.822,-56.142]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":34,"s":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-293.92,-46.936],[-301.365,-33.86],[-313.267,-43.066],[-305.822,-56.142]],"c":true}],"e":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-280.42,-1.936],[-287.865,11.14],[-299.767,1.934],[-292.322,-11.142]],"c":true}]},{"i":{"x":0.176,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p176_1_0p167_0p167","t":38,"s":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-280.42,-1.936],[-287.865,11.14],[-299.767,1.934],[-292.322,-11.142]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"n":"0p833_1_0p333_0","t":73,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":88,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-251.146,5.811],[-262.93,15.168],[-270.541,2.188],[-258.757,-7.169]],"c":true}]},{"i":{"x":0.164,"y":1},"o":{"x":0.167,"y":0},"n":"0p164_1_0p167_0","t":92,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-251.146,5.811],[-262.93,15.168],[-270.541,2.188],[-258.757,-7.169]],"c":true}],"e":[{"i":[[0.967,-0.741],[0.81,0.688],[-0.641,0.484],[-0.623,-0.593]],"o":[[-0.967,0.741],[-0.81,-0.688],[0.641,-0.484],[0.623,0.593]],"v":[[-278.642,-38.816],[-300.097,-38.472],[-300.475,-62.077],[-279.02,-62.42]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"n":"0_1_0p333_0","t":101,"s":[{"i":[[0.967,-0.741],[0.81,0.688],[-0.641,0.484],[-0.623,-0.593]],"o":[[-0.967,0.741],[-0.81,-0.688],[0.641,-0.484],[0.623,0.593]],"v":[[-278.642,-38.816],[-300.097,-38.472],[-300.475,-62.077],[-279.02,-62.42]],"c":true}],"e":[{"i":[[1.409,-0.115],[0.357,1.179],[-0.929,0.069],[-0.235,-0.97]],"o":[[-1.409,0.115],[-0.357,-1.179],[0.929,-0.069],[0.235,0.97]],"v":[[-299.384,70.36],[-320.52,57.208],[-306.05,33.955],[-284.915,47.107]],"c":true}]},{"i":{"x":0.844,"y":1},"o":{"x":0.167,"y":0},"n":"0p844_1_0p167_0","t":137,"s":[{"i":[[1.409,-0.115],[0.357,1.179],[-0.929,0.069],[-0.235,-0.97]],"o":[[-1.409,0.115],[-0.357,-1.179],[0.929,-0.069],[0.235,0.97]],"v":[[-299.384,70.36],[-320.52,57.208],[-306.05,33.955],[-284.915,47.107]],"c":true}],"e":[{"i":[[1.409,-0.115],[0.357,1.179],[-0.929,0.069],[-0.235,-0.97]],"o":[[-1.409,0.115],[-0.357,-1.179],[0.929,-0.069],[0.235,0.97]],"v":[[-299.384,70.36],[-320.52,57.208],[-306.05,33.955],[-284.915,47.107]],"c":true}]},{"i":{"x":0.878,"y":1},"o":{"x":0.71,"y":0},"n":"0p878_1_0p71_0","t":187,"s":[{"i":[[1.409,-0.115],[0.357,1.179],[-0.929,0.069],[-0.235,-0.97]],"o":[[-1.409,0.115],[-0.357,-1.179],[0.929,-0.069],[0.235,0.97]],"v":[[-299.384,70.36],[-320.52,57.208],[-306.05,33.955],[-284.915,47.107]],"c":true}],"e":[{"i":[[1.038,-0.682],[0.752,0.714],[-0.688,0.445],[-0.573,-0.612]],"o":[[-1.038,0.682],[-0.752,-0.714],[0.688,-0.445],[0.573,0.612]],"v":[[-300.907,27.958],[-322.508,27.271],[-320.765,4.058],[-299.164,4.746]],"c":true}]},{"t":195}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1.821]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1p821_0p333_0"],"t":94,"s":[0.995,0.751,0.324,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":108,"s":[0.848,0.966,1,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.667],"y":[0.667]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_0p667_0p167_0p167"],"t":109,"s":[0.576,0.341,0.31,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.667],"y":[0.667]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_0p667_0p167_0p167"],"t":115,"s":[0.576,0.341,0.31,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p667_1_0p167_0"],"t":187,"s":[0.576,0.341,0.31,1],"e":[0.996,0.925,0.812,1]},{"t":195}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[13.215,15.581],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":98,"op":195,"st":38,"bm":0,"sr":1},{"ddd":0,"ind":14,"ty":4,"nm":"Ice1","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[538.463,199.399,0]},"a":{"a":0,"k":[11.099,12.419,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":25,"s":[{"i":[[-0.161,-0.807],[0.701,-0.14],[0.161,0.807],[-0.701,0.14]],"o":[[0.161,0.807],[-0.701,0.14],[-0.161,-0.807],[0.701,-0.14]],"v":[[-305.699,-41.255],[-306.676,-39.539],[-308.237,-40.747],[-307.26,-42.463]],"c":true}],"e":[{"i":[[-1.356,-6.776],[5.884,-1.177],[1.354,6.777],[-5.883,1.176]],"o":[[1.356,6.776],[-5.883,1.177],[-1.354,-6.777],[5.884,-1.177]],"v":[[-297.461,-69.978],[-305.66,-55.576],[-318.768,-65.715],[-310.569,-80.116]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":31,"s":[{"i":[[-1.356,-6.776],[5.884,-1.177],[1.354,6.777],[-5.883,1.176]],"o":[[1.356,6.776],[-5.883,1.177],[-1.354,-6.777],[5.884,-1.177]],"v":[[-297.461,-69.978],[-305.66,-55.576],[-318.768,-65.715],[-310.569,-80.116]],"c":true}],"e":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-293.92,-46.936],[-301.365,-33.86],[-313.267,-43.066],[-305.822,-56.142]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":34,"s":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-293.92,-46.936],[-301.365,-33.86],[-313.267,-43.066],[-305.822,-56.142]],"c":true}],"e":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-280.42,-1.936],[-287.865,11.14],[-299.767,1.934],[-292.322,-11.142]],"c":true}]},{"i":{"x":0.176,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p176_1_0p167_0p167","t":38,"s":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-280.42,-1.936],[-287.865,11.14],[-299.767,1.934],[-292.322,-11.142]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"n":"0p833_1_0p333_0","t":73,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":88,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-251.146,5.811],[-262.93,15.168],[-270.541,2.188],[-258.757,-7.169]],"c":true}]},{"i":{"x":0.164,"y":1},"o":{"x":0.167,"y":0},"n":"0p164_1_0p167_0","t":92,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-251.146,5.811],[-262.93,15.168],[-270.541,2.188],[-258.757,-7.169]],"c":true}],"e":[{"i":[[0.967,-0.741],[0.81,0.688],[-0.641,0.484],[-0.623,-0.593]],"o":[[-0.967,0.741],[-0.81,-0.688],[0.641,-0.484],[0.623,0.593]],"v":[[-278.642,-38.816],[-300.097,-38.472],[-300.475,-62.077],[-279.02,-62.42]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"n":"0_1_0p333_0","t":101,"s":[{"i":[[0.967,-0.741],[0.81,0.688],[-0.641,0.484],[-0.623,-0.593]],"o":[[-0.967,0.741],[-0.81,-0.688],[0.641,-0.484],[0.623,0.593]],"v":[[-278.642,-38.816],[-300.097,-38.472],[-300.475,-62.077],[-279.02,-62.42]],"c":true}],"e":[{"i":[[1.207,-0.399],[0.562,0.955],[-0.798,0.257],[-0.411,-0.798]],"o":[[-1.207,0.399],[-0.562,-0.955],[0.798,-0.257],[0.411,0.798]],"v":[[-288.256,111.016],[-309.519,103.999],[-301.799,80.606],[-280.536,87.623]],"c":true}]},{"i":{"x":0.843,"y":1},"o":{"x":0.167,"y":0},"n":"0p843_1_0p167_0","t":132,"s":[{"i":[[1.207,-0.399],[0.562,0.955],[-0.798,0.257],[-0.411,-0.798]],"o":[[-1.207,0.399],[-0.562,-0.955],[0.798,-0.257],[0.411,0.798]],"v":[[-288.256,111.016],[-309.519,103.999],[-301.799,80.606],[-280.536,87.623]],"c":true}],"e":[{"i":[[1.207,-0.399],[0.562,0.955],[-0.798,0.257],[-0.411,-0.798]],"o":[[-1.207,0.399],[-0.562,-0.955],[0.798,-0.257],[0.411,0.798]],"v":[[-288.256,111.016],[-309.519,103.999],[-301.799,80.606],[-280.536,87.623]],"c":true}]},{"i":{"x":0.878,"y":1},"o":{"x":0.71,"y":0},"n":"0p878_1_0p71_0","t":187,"s":[{"i":[[1.207,-0.399],[0.562,0.955],[-0.798,0.257],[-0.411,-0.798]],"o":[[-1.207,0.399],[-0.562,-0.955],[0.798,-0.257],[0.411,0.798]],"v":[[-288.256,111.016],[-309.519,103.999],[-301.799,80.606],[-280.536,87.623]],"c":true}],"e":[{"i":[[1.176,-0.679],[0.806,0.744],[-0.779,0.442],[-0.611,-0.636]],"o":[[-1.176,0.679],[-0.806,-0.744],[0.779,-0.442],[0.611,0.636]],"v":[[-273.552,29.551],[-301.328,30.835],[-298.508,7.137],[-274.608,8.228]],"c":true}]},{"t":195}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1.821]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1p821_0p333_0"],"t":94,"s":[0.995,0.751,0.324,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":106,"s":[0.848,0.966,1,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.667],"y":[0.667]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_0p667_0p167_0p167"],"t":107,"s":[0.576,0.341,0.31,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.667],"y":[0.667]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_0p667_0p167_0p167"],"t":115,"s":[0.576,0.341,0.31,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p667_1_0p167_0"],"t":187,"s":[0.576,0.341,0.31,1],"e":[0.996,0.925,0.812,1]},{"t":195}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[13.215,15.581],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":98,"op":195,"st":38,"bm":0,"sr":1},{"ddd":0,"ind":15,"ty":4,"nm":"BeerFoam04","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[251.198,238.526,0]},"a":{"a":0,"k":[45.716,19.042,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.684,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p684_1_0p167_0p167","t":191,"s":[{"i":[[-6.438,-0.568],[3.269,0.734],[5,0],[19.853,-0.984],[2.801,0.131],[0.139,0.277],[0,0],[-9,0]],"o":[[0,0],[-3.272,-0.734],[-2.402,0],[-19.003,0.942],[-5.975,-0.278],[-0.021,0.766],[0,0],[9,0]],"v":[[37.865,-37.958],[37.324,-37.917],[25.953,-37.975],[5.324,-36.792],[-16.928,-37.167],[-35.552,-38.792],[-35.052,-38.459],[-2.217,-36.417]],"c":true}],"e":[{"i":[[-8.688,-2.818],[3.103,0.828],[5,0],[19.729,-0.544],[2.266,0.068],[0.05,-2.237],[0,0],[-8.979,-0.611]],"o":[[0,0],[-1.627,-3.117],[-2.402,0],[-19.014,0.524],[-4.654,-0.139],[0.003,2.058],[0,0],[16.77,1.141]],"v":[[49.24,-14.958],[48.449,-24.48],[35.078,-27.162],[8.511,-28.105],[-11.552,-29.23],[-31.49,-29.23],[-32.365,-16.772],[0.783,-10.792]],"c":true}]},{"i":{"x":0.429,"y":1},"o":{"x":0.041,"y":0},"n":"0p429_1_0p041_0","t":195,"s":[{"i":[[-8.688,-2.818],[3.103,0.828],[5,0],[19.729,-0.544],[2.266,0.068],[0.05,-2.237],[0,0],[-8.979,-0.611]],"o":[[0,0],[-1.627,-3.117],[-2.402,0],[-19.014,0.524],[-4.654,-0.139],[0.003,2.058],[0,0],[16.77,1.141]],"v":[[49.24,-14.958],[48.449,-24.48],[35.078,-27.162],[8.511,-28.105],[-11.552,-29.23],[-31.49,-29.23],[-32.365,-16.772],[0.783,-10.792]],"c":true}],"e":[{"i":[[-11.188,-3.693],[-0.011,3.35],[5,0],[19.508,-1.935],[1.732,0],[5.354,-3.984],[0,0],[-10.356,-0.484]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-14.021,1.391],[-3.333,0],[-2.688,2],[0,0],[12.547,0.587]],"v":[[51.49,-10.333],[54.574,-21.792],[40.703,-27.85],[13.199,-29.917],[-7.052,-32.292],[-26.802,-31.167],[-32.177,-11.834],[2.908,-4.792]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":199,"s":[{"i":[[-11.188,-3.693],[-0.011,3.35],[5,0],[19.508,-1.935],[1.732,0],[5.354,-3.984],[0,0],[-10.356,-0.484]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-14.021,1.391],[-3.333,0],[-2.688,2],[0,0],[12.547,0.587]],"v":[[51.49,-10.333],[54.574,-21.792],[40.703,-27.85],[13.199,-29.917],[-7.052,-32.292],[-26.802,-31.167],[-32.177,-11.834],[2.908,-4.792]],"c":true}],"e":[{"i":[[-11.076,-2.927],[-0.011,3.35],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-8.985,-0.512]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[15.782,0.9]],"v":[[51.503,-10.099],[54.438,-21.836],[40.599,-27.917],[8.07,-30.95],[-10.035,-32.811],[-31.116,-31.141],[-32.958,-12.323],[-0.48,-5.177]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":200,"s":[{"i":[[-11.076,-2.927],[-0.011,3.35],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-8.985,-0.512]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[15.782,0.9]],"v":[[51.503,-10.099],[54.438,-21.836],[40.599,-27.917],[8.07,-30.95],[-10.035,-32.811],[-31.116,-31.141],[-32.958,-12.323],[-0.48,-5.177]],"c":true}],"e":[{"i":[[-10.342,-1.966],[0.969,3.025],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-17.887,5.04]],"o":[[0,0],[-1.939,-5.432],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[14.091,-2.37]],"v":[[44.653,-5.61],[43.905,-21.996],[30.959,-29.58],[1.834,-31.055],[-25.548,-36.617],[-39.201,-32.971],[-39.594,-12.733],[1.148,-5.406]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":203,"s":[{"i":[[-10.342,-1.966],[0.969,3.025],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-17.887,5.04]],"o":[[0,0],[-1.939,-5.432],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[14.091,-2.37]],"v":[[44.653,-5.61],[43.905,-21.996],[30.959,-29.58],[1.834,-31.055],[-25.548,-36.617],[-39.201,-32.971],[-39.594,-12.733],[1.148,-5.406]],"c":true}],"e":[{"i":[[-9.94,-1.438],[1.506,2.847],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-22.774,8.089]],"o":[[0,0],[-3.014,-5.394],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[11.989,-2.352]],"v":[[40.516,-2.582],[38.122,-22.084],[25.666,-30.494],[-1.59,-31.113],[-34.038,-36.449],[-43.612,-31.717],[-44.449,-12.874],[-3.75,-5.799]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":205,"s":[{"i":[[-9.94,-1.438],[1.506,2.847],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-22.774,8.089]],"o":[[0,0],[-3.014,-5.394],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[11.989,-2.352]],"v":[[40.516,-2.582],[38.122,-22.084],[25.666,-30.494],[-1.59,-31.113],[-34.038,-36.449],[-43.612,-31.717],[-44.449,-12.874],[-3.75,-5.799]],"c":true}],"e":[{"i":[[-9.562,-0.943],[2.011,2.68],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-27.357,10.948]],"o":[[0,0],[-4.021,-5.359],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[9.02,-3.609]],"v":[[37.365,-0.833],[32.699,-22.167],[20.703,-31.35],[-4.801,-31.167],[-41.998,-36.292],[-47.748,-30.542],[-47.427,-14.459],[-8.342,-6.167]],"c":true}]},{"i":{"x":0.385,"y":1},"o":{"x":0.333,"y":0},"n":"0p385_1_0p333_0","t":208,"s":[{"i":[[-9.562,-0.943],[2.011,2.68],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-27.357,10.948]],"o":[[0,0],[-4.021,-5.359],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[9.02,-3.609]],"v":[[37.365,-0.833],[32.699,-22.167],[20.703,-31.35],[-4.801,-31.167],[-41.998,-36.292],[-47.748,-30.542],[-47.427,-14.459],[-8.342,-6.167]],"c":true}],"e":[{"i":[[-9.473,-1.033],[0.559,3.161],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-13.274,0.621]],"o":[[0,0],[-1.12,-5.46],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[10.726,0.871]],"v":[[39.34,-3.975],[39.522,-24.771],[28.244,-33.235],[-3.904,-33.142],[-42.307,-35.035],[-48.057,-29.285],[-44.677,-3.585],[-4.424,-4.148]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"n":"0p667_1_0p167_0","t":219,"s":[{"i":[[-9.473,-1.033],[0.559,3.161],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-13.274,0.621]],"o":[[0,0],[-1.12,-5.46],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[10.726,0.871]],"v":[[39.34,-3.975],[39.522,-24.771],[28.244,-33.235],[-3.904,-33.142],[-42.307,-35.035],[-48.057,-29.285],[-44.677,-3.585],[-4.424,-4.148]],"c":true}],"e":[{"i":[[-9.438,-1.068],[-0.011,3.35],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-9,0]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[9,0]],"v":[[40.115,-5.208],[42.199,-25.792],[31.203,-33.975],[-3.551,-33.917],[-42.427,-34.542],[-48.177,-28.792],[-47.427,-5.584],[-1.842,-5.792]],"c":true}]},{"t":228}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.667]},"o":{"x":[0.294],"y":[0.294]},"n":["0p667_0p667_0p294_0p294"],"t":224,"s":[0.995,0.926,0.81,1],"e":[0.995,0.926,0.81,1]},{"t":228}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[45.716,19.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":199,"op":252,"st":203,"bm":0,"sr":1},{"ddd":0,"ind":16,"ty":4,"nm":"Booze","ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":103,"s":[100],"e":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":116,"s":[66],"e":[66]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":187,"s":[66],"e":[100]},{"t":198}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[250.833,295.667,0]},"a":{"a":0,"k":[44.084,47.584,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.773,"y":0},"n":"0p667_1_0p773_0","t":25,"s":[{"i":[[0.333,3.667],[-9,0],[-10.272,-0.521],[0.334,-3.334],[5,0],[0,0],[0.333,3.334]],"o":[[0,0],[9,0],[0,0],[-0.334,3.333],[0,0],[-3.333,0],[-0.333,-3.333]],"v":[[-44.083,-43.584],[1.251,-43.667],[44.083,-43.584],[38.501,38.334],[34.501,47.334],[-31.833,47.334],[-36.833,42.667]],"c":true}],"e":[{"i":[[4.526,7.188],[-19.588,-9.44],[-38.253,20.492],[3.333,-4.666],[7.063,-2.09],[9.084,2.173],[5.677,9.971]],"o":[[0,0],[18.746,9.034],[0,0],[-2.779,3.89],[-6.939,2.054],[-7.834,-1.874],[-3.273,-5.749]],"v":[[-40.689,-85.521],[-24.81,-91.263],[40.689,-79.471],[33.773,-50.054],[16.748,-36.264],[-9.605,-36.23],[-29.616,-53.825]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.564,"y":0},"n":"0p833_0p833_0p564_0","t":31,"s":[{"i":[[4.526,7.188],[-19.588,-9.44],[-38.253,20.492],[3.333,-4.666],[7.063,-2.09],[9.084,2.173],[5.677,9.971]],"o":[[0,0],[18.746,9.034],[0,0],[-2.779,3.89],[-6.939,2.054],[-7.834,-1.874],[-3.273,-5.749]],"v":[[-40.689,-85.521],[-24.81,-91.263],[40.689,-79.471],[33.773,-50.054],[16.748,-36.264],[-9.605,-36.23],[-29.616,-53.825]],"c":true}],"e":[{"i":[[2,6.666],[-23.81,2.48],[-2.378,-14.633],[2.148,-5.317],[4.815,-4.341],[5.918,5.876],[8.988,8.919]],"o":[[-1.977,-6.59],[18.871,-1.966],[0,0],[-3.212,7.95],[-6.591,5.941],[-5.329,-5.291],[-5.823,-5.779]],"v":[[-34.689,-68.771],[3.19,-74.138],[38.939,-72.721],[27.023,-47.304],[16.746,-29.513],[-9.357,-32.48],[-22.616,-48.825]],"c":true}]},{"i":{"x":0.404,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p404_1_0p167_0p167","t":39,"s":[{"i":[[2,6.666],[-23.81,2.48],[-2.378,-14.633],[2.148,-5.317],[4.815,-4.341],[5.918,5.876],[8.988,8.919]],"o":[[-1.977,-6.59],[18.871,-1.966],[0,0],[-3.212,7.95],[-6.591,5.941],[-5.329,-5.291],[-5.823,-5.779]],"v":[[-34.689,-68.771],[3.19,-74.138],[38.939,-72.721],[27.023,-47.304],[16.746,-29.513],[-9.357,-32.48],[-22.616,-48.825]],"c":true}],"e":[{"i":[[4.526,7.188],[-24.629,0.034],[-18.806,-1.049],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[2.158,2.881]],"o":[[0,0],[8.926,-0.012],[0,0],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.934,-3.916]],"v":[[-45.689,-80.271],[-1.56,-70.638],[40.689,-67.971],[19.523,-35.805],[11.998,-25.264],[-4.355,-25.48],[-12.116,-35.826]],"c":true}]},{"i":{"x":0.442,"y":1},"o":{"x":0.478,"y":0},"n":"0p442_1_0p478_0","t":47,"s":[{"i":[[4.526,7.188],[-24.629,0.034],[-18.806,-1.049],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[2.158,2.881]],"o":[[0,0],[8.926,-0.012],[0,0],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.934,-3.916]],"v":[[-45.689,-80.271],[-1.56,-70.638],[40.689,-67.971],[19.523,-35.805],[11.998,-25.264],[-4.355,-25.48],[-12.116,-35.826]],"c":true}],"e":[{"i":[[4.526,7.188],[-8.763,0.125],[-18.128,4.367],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[2.158,2.881]],"o":[[0,0],[15.121,-0.216],[0,0],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.934,-3.916]],"v":[[-37.876,-69.771],[1.44,-70.888],[46.939,-76.221],[19.523,-35.805],[11.998,-25.264],[-4.355,-25.48],[-12.116,-35.826]],"c":true}]},{"i":{"x":0.499,"y":1},"o":{"x":0.438,"y":0},"n":"0p499_1_0p438_0","t":61,"s":[{"i":[[4.526,7.188],[-8.763,0.125],[-18.128,4.367],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[2.158,2.881]],"o":[[0,0],[15.121,-0.216],[0,0],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.934,-3.916]],"v":[[-37.876,-69.771],[1.44,-70.888],[46.939,-76.221],[19.523,-35.805],[11.998,-25.264],[-4.355,-25.48],[-12.116,-35.826]],"c":true}],"e":[{"i":[[4.526,7.188],[-9,0],[-18.806,-1.049],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[2.158,2.881]],"o":[[0,0],[9,0],[0,0],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.934,-3.916]],"v":[[-39.939,-73.521],[0.44,-71.638],[42.439,-70.721],[19.523,-35.805],[11.998,-25.264],[-4.355,-25.48],[-12.116,-35.826]],"c":true}]},{"i":{"x":0.341,"y":1},"o":{"x":0.202,"y":0},"n":"0p341_1_0p202_0","t":77,"s":[{"i":[[4.526,7.188],[-9,0],[-18.806,-1.049],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[2.158,2.881]],"o":[[0,0],[9,0],[0,0],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.934,-3.916]],"v":[[-39.939,-73.521],[0.44,-71.638],[42.439,-70.721],[19.523,-35.805],[11.998,-25.264],[-4.355,-25.48],[-12.116,-35.826]],"c":true}],"e":[{"i":[[5.5,7.291],[-9,0],[-18.806,-1.049],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[2.158,2.881]],"o":[[0,0],[9,0],[0,0],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.934,-3.916]],"v":[[-39.314,-71.896],[0.69,-72.138],[43.814,-71.846],[19.523,-35.805],[11.998,-25.264],[-4.355,-25.48],[-12.116,-35.826]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.788,"y":0},"n":"0p833_0p833_0p788_0","t":88,"s":[{"i":[[5.5,7.291],[-9,0],[-18.806,-1.049],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[2.158,2.881]],"o":[[0,0],[9,0],[0,0],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.934,-3.916]],"v":[[-39.314,-71.896],[0.69,-72.138],[43.814,-71.846],[19.523,-35.805],[11.998,-25.264],[-4.355,-25.48],[-12.116,-35.826]],"c":true}],"e":[{"i":[[6.564,10.833],[-8.489,0.981],[-16.155,-1.317],[4.345,-4.877],[3.299,-4.685],[5.567,7.5],[2.277,3.259]],"o":[[0,0],[9.182,-1.974],[1.9,5.677],[-3.18,3.569],[-4.166,5.917],[-1.987,-2.677],[-2.85,-3.969]],"v":[[-40.611,-74.739],[1.621,-74.815],[45.161,-74.656],[19.091,-36.852],[11.865,-25.629],[-4.222,-25.78],[-11.65,-36.823]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":91,"s":[{"i":[[6.564,10.833],[-8.489,0.981],[-16.155,-1.317],[4.345,-4.877],[3.299,-4.685],[5.567,7.5],[2.277,3.259]],"o":[[0,0],[9.182,-1.974],[1.9,5.677],[-3.18,3.569],[-4.166,5.917],[-1.987,-2.677],[-2.85,-3.969]],"v":[[-40.611,-74.739],[1.621,-74.815],[45.161,-74.656],[19.091,-36.852],[11.865,-25.629],[-4.222,-25.78],[-11.65,-36.823]],"c":true}],"e":[{"i":[[9.056,19.126],[-7.291,3.279],[-9.948,-1.945],[3.982,-4.801],[3.299,-4.685],[5.567,7.5],[2.556,4.143]],"o":[[0,0],[9.609,-6.597],[0.496,16.132],[-3.036,3.685],[-4.166,5.917],[-1.987,-2.677],[-2.654,-4.094]],"v":[[-43.648,-81.397],[3.801,-81.084],[48.315,-81.237],[19.078,-39.305],[11.554,-26.486],[-3.91,-26.481],[-10.56,-39.159]],"c":true}]},{"i":{"x":0.341,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p341_1_0p167_0p167","t":92,"s":[{"i":[[9.056,19.126],[-7.291,3.279],[-9.948,-1.945],[3.982,-4.801],[3.299,-4.685],[5.567,7.5],[2.556,4.143]],"o":[[0,0],[9.609,-6.597],[0.496,16.132],[-3.036,3.685],[-4.166,5.917],[-1.987,-2.677],[-2.654,-4.094]],"v":[[-43.648,-81.397],[3.801,-81.084],[48.315,-81.237],[19.078,-39.305],[11.554,-26.486],[-3.91,-26.481],[-10.56,-39.159]],"c":true}],"e":[{"i":[[13.5,33.916],[-5.155,7.377],[1.122,-3.065],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[3.052,5.721]],"o":[[0,0],[10.371,-14.841],[-6.128,16.742],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.303,-4.317]],"v":[[-49.064,-93.271],[7.69,-92.263],[53.939,-92.971],[16.273,-43.679],[10.998,-28.014],[-3.355,-27.73],[-8.616,-43.326]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.462,"y":0},"n":"0_1_0p462_0","t":96,"s":[{"i":[[13.5,33.916],[-5.155,7.377],[1.122,-3.065],[3.333,-4.666],[3.299,-4.685],[5.567,7.5],[3.052,5.721]],"o":[[0,0],[10.371,-14.841],[-6.128,16.742],[-2.779,3.89],[-4.166,5.917],[-1.987,-2.677],[-2.303,-4.317]],"v":[[-49.064,-93.271],[7.69,-92.263],[53.939,-92.971],[16.273,-43.679],[10.998,-28.014],[-3.355,-27.73],[-8.616,-43.326]],"c":true}],"e":[{"i":[[-3.232,3.708],[-16.565,9.708],[-2.024,-8.042],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[3.232,-3.708],[16.565,-9.708],[2.024,8.042],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.421,-52.396],[3.246,-45.146],[38.037,-60.146],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"n":"0p667_1_0p333_0","t":103,"s":[{"i":[[-3.232,3.708],[-16.565,9.708],[-2.024,-8.042],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[3.232,-3.708],[16.565,-9.708],[2.024,8.042],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.421,-52.396],[3.246,-45.146],[38.037,-60.146],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-0.477,6.168],[-9.935,22.792],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0,0],[14.805,-33.965],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.921,-73.396],[1.996,-103.896],[35.287,-103.896],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.559,"y":0},"n":"0p833_0p833_0p559_0","t":110,"s":[{"i":[[-0.477,6.168],[-9.935,22.792],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0,0],[14.805,-33.965],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.921,-73.396],[1.996,-103.896],[35.287,-103.896],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-6.052,6.961],[-11.246,5.744],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[6.416,-4.437],[13.877,-10.811],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-27.151,-94.114],[0.717,-86.183],[36.205,-93.798],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.229,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p229_1_0p167_0p167","t":113,"s":[{"i":[[-6.052,6.961],[-11.246,5.744],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[6.416,-4.437],[13.877,-10.811],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-27.151,-94.114],[0.717,-86.183],[36.205,-93.798],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-11.105,7.679],[-12.435,-9.708],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[12.232,-8.458],[13.036,10.178],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-21.921,-112.896],[-4.254,-90.146],[37.037,-84.646],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.481,"y":1},"o":{"x":0.511,"y":0},"n":"0p481_1_0p511_0","t":117,"s":[{"i":[[-11.105,7.679],[-12.435,-9.708],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[12.232,-8.458],[13.036,10.178],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-21.921,-112.896],[-4.254,-90.146],[37.037,-84.646],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-0.477,6.168],[-11.637,0.717],[-6.601,-8.833],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0,0],[15.565,-0.958],[2.405,3.219],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.671,-87.146],[2.996,-86.396],[34.162,-96.271],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.553,"y":0},"n":"0p833_0p833_0p553_0","t":125,"s":[{"i":[[-0.477,6.168],[-11.637,0.717],[-6.601,-8.833],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0,0],[15.565,-0.958],[2.405,3.219],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.671,-87.146],[2.996,-86.396],[34.162,-96.271],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-0.945,4.623],[-9.659,4.695],[-12.847,-4.414],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0.587,0.01],[10.841,-7.305],[2.855,0.981],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.671,-88.545],[-2.28,-90.049],[34.158,-93.815],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":129,"s":[{"i":[[-0.945,4.623],[-9.659,4.695],[-12.847,-4.414],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0.587,0.01],[10.841,-7.305],[2.855,0.981],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.671,-88.545],[-2.28,-90.049],[34.158,-93.815],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-2.128,0.717],[-7.035,-3.416],[-2.17,-0.006],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[2.069,0.036],[8.215,4.584],[0.491,0.001],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.671,-92.084],[-0.404,-89.438],[36.673,-86.764],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.389,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p389_1_0p167_0p167","t":133,"s":[{"i":[[-2.128,0.717],[-7.035,-3.416],[-2.17,-0.006],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[2.069,0.036],[8.215,4.584],[0.491,0.001],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.671,-92.084],[-0.404,-89.438],[36.673,-86.764],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-2.357,-0.042],[-5.565,-0.542],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[2.357,0.042],[5.565,0.542],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.171,-95.021],[-2.129,-89.021],[37.162,-83.646],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.507,"y":1},"o":{"x":0.353,"y":0},"n":"0p507_1_0p353_0","t":136,"s":[{"i":[[-2.357,-0.042],[-5.565,-0.542],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[2.357,0.042],[5.565,0.542],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.171,-95.021],[-2.129,-89.021],[37.162,-83.646],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-2.357,-0.042],[-5.565,-0.542],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[2.357,0.042],[5.565,0.542],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.671,-89.021],[-1.379,-88.146],[37.287,-90.396],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":156,"s":[{"i":[[-2.357,-0.042],[-5.565,-0.542],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[2.357,0.042],[5.565,0.542],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-31.671,-89.021],[-1.379,-88.146],[37.287,-90.396],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-1.329,4.582],[-2.498,-0.243],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[1.058,0.019],[2.498,0.243],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.86,-88.186],[1.289,-87.365],[37.718,-89.549],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":166,"s":[{"i":[[-1.329,4.582],[-2.498,-0.243],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[1.058,0.019],[2.498,0.243],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.86,-88.186],[1.289,-87.365],[37.718,-89.549],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-0.477,6.168],[0,0],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0,0],[0,0],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.921,-88.396],[-2.504,-88.396],[37.037,-88.396],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":177,"s":[{"i":[[-0.477,6.168],[0,0],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0,0],[0,0],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.921,-88.396],[-2.504,-88.396],[37.037,-88.396],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-0.477,6.168],[0,0],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0,0],[0,0],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.921,-88.396],[-2.504,-88.396],[37.037,-88.396],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}]},{"i":{"x":0.498,"y":1},"o":{"x":0.4,"y":0},"n":"0p498_1_0p4_0","t":187,"s":[{"i":[[-0.477,6.168],[0,0],[0,0],[10.993,-64.722],[5,0],[0,0],[0.507,3.312]],"o":[[0,0],[0,0],[0,0],[-0.561,3.303],[0,0],[-5,0],[-10.955,-71.625]],"v":[[-32.921,-88.396],[-2.504,-88.396],[37.037,-88.396],[31.829,40.189],[24.829,49.189],[-20.588,49.189],[-27.633,39.647]],"c":true}],"e":[{"i":[[-0.582,4.331],[-19.294,1.032],[-14.423,-2.864],[6.516,-19.786],[4.938,0.786],[0,0],[-0.146,3.346]],"o":[[0,0],[6.465,-0.346],[0,0],[-0.915,3.221],[0,0],[-3.754,-0.597],[-4.616,-40.126]],"v":[[-28.791,-50.043],[15.855,-43.636],[55.734,-48.491],[35.392,44.483],[29.195,52.61],[-30.517,43.108],[-35.073,36.272]],"c":true}]},{"i":{"x":0.594,"y":1},"o":{"x":0.473,"y":0},"n":"0p594_1_0p473_0","t":198,"s":[{"i":[[-0.582,4.331],[-19.294,1.032],[-14.423,-2.864],[6.516,-19.786],[4.938,0.786],[0,0],[-0.146,3.346]],"o":[[0,0],[6.465,-0.346],[0,0],[-0.915,3.221],[0,0],[-3.754,-0.597],[-4.616,-40.126]],"v":[[-28.791,-50.043],[15.855,-43.636],[55.734,-48.491],[35.392,44.483],[29.195,52.61],[-30.517,43.108],[-35.073,36.272]],"c":true}],"e":[{"i":[[1.145,13.979],[-22.439,8.062],[-10.272,-0.521],[0.334,-3.334],[5,0],[0,0],[0.333,3.334]],"o":[[0,0],[17.913,-6.436],[0,0],[-0.334,3.333],[0,0],[-3.333,0],[-0.333,-3.333]],"v":[[-44.333,-52.334],[-8.5,-43.167],[41.333,-38.584],[38.501,38.334],[34.501,47.334],[-31.833,47.334],[-36.833,42.667]],"c":true}]},{"i":{"x":0.552,"y":1},"o":{"x":0.457,"y":0},"n":"0p552_1_0p457_0","t":208,"s":[{"i":[[1.145,13.979],[-22.439,8.062],[-10.272,-0.521],[0.334,-3.334],[5,0],[0,0],[0.333,3.334]],"o":[[0,0],[17.913,-6.436],[0,0],[-0.334,3.333],[0,0],[-3.333,0],[-0.333,-3.333]],"v":[[-44.333,-52.334],[-8.5,-43.167],[41.333,-38.584],[38.501,38.334],[34.501,47.334],[-31.833,47.334],[-36.833,42.667]],"c":true}],"e":[{"i":[[0.333,3.667],[-7.809,-1.197],[-11.772,7.229],[0.334,-3.334],[5,0],[0,0],[0.333,3.334]],"o":[[0,0],[8.561,1.312],[0,0],[-0.334,3.333],[0,0],[-3.333,0],[-0.333,-3.333]],"v":[[-42.083,-44.834],[1.251,-43.667],[43.583,-47.584],[38.501,38.334],[34.501,47.334],[-31.833,47.334],[-36.833,42.667]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.413,"y":0},"n":"0p667_1_0p413_0","t":219,"s":[{"i":[[0.333,3.667],[-7.809,-1.197],[-11.772,7.229],[0.334,-3.334],[5,0],[0,0],[0.333,3.334]],"o":[[0,0],[8.561,1.312],[0,0],[-0.334,3.333],[0,0],[-3.333,0],[-0.333,-3.333]],"v":[[-42.083,-44.834],[1.251,-43.667],[43.583,-47.584],[38.501,38.334],[34.501,47.334],[-31.833,47.334],[-36.833,42.667]],"c":true}],"e":[{"i":[[0.333,3.667],[-9,0],[-10.272,-0.521],[0.334,-3.334],[5,0],[0,0],[0.333,3.334]],"o":[[0,0],[9,0],[0,0],[-0.334,3.333],[0,0],[-3.333,0],[-0.333,-3.333]],"v":[[-44.083,-43.584],[1.251,-43.667],[44.083,-43.584],[38.501,38.334],[34.501,47.334],[-31.833,47.334],[-36.833,42.667]],"c":true}]},{"t":228}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.232],"y":[1]},"o":{"x":[0.608],"y":[0]},"n":["0p232_1_0p608_0"],"t":25,"s":[0.998,0.651,0.128,1],"e":[0.978,0.14,0.247,1]},{"i":{"x":[0.232],"y":[0.232]},"o":{"x":[0.167],"y":[0.167]},"n":["0p232_0p232_0p167_0p167"],"t":47,"s":[0.978,0.14,0.247,1],"e":[0.978,0.14,0.247,1]},{"i":{"x":[0.344],"y":[1.353]},"o":{"x":[0.225],"y":[0]},"n":["0p344_1p353_0p225_0"],"t":103,"s":[0.978,0.14,0.247,1],"e":[0.675,0.29,0.23,1]},{"i":{"x":[0.587],"y":[1]},"o":{"x":[0.262],"y":[-0.666]},"n":["0p587_1_0p262_-0p666"],"t":111,"s":[0.675,0.29,0.23,1],"e":[0.627,0.314,0.227,1]},{"i":{"x":[0.587],"y":[0.587]},"o":{"x":[0.167],"y":[0.167]},"n":["0p587_0p587_0p167_0p167"],"t":117,"s":[0.627,0.314,0.227,1],"e":[0.627,0.314,0.227,1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p667_1_0p167_0"],"t":187,"s":[0.627,0.314,0.227,1],"e":[0.998,0.651,0.128,1]},{"t":198}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[40.939,28.271],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":517,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":17,"ty":4,"nm":"BeerFoam03","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[251.198,238.526,0]},"a":{"a":0,"k":[45.716,19.042,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.684,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p684_1_0p167_0p167","t":191,"s":[{"i":[[-6.438,-0.568],[3.269,0.734],[5,0],[19.853,-0.984],[2.801,0.131],[0.139,0.277],[0,0],[-9,0]],"o":[[0,0],[-3.272,-0.734],[-2.402,0],[-19.003,0.942],[-5.975,-0.278],[-0.021,0.766],[0,0],[9,0]],"v":[[37.865,-37.958],[37.324,-37.917],[25.953,-37.975],[5.324,-36.792],[-16.928,-37.167],[-35.552,-38.792],[-35.052,-38.459],[-2.217,-36.417]],"c":true}],"e":[{"i":[[-8.688,-2.818],[3.103,0.828],[5,0],[19.729,-0.544],[2.266,0.068],[0.05,-2.237],[0,0],[-8.979,-0.611]],"o":[[0,0],[-1.627,-3.117],[-2.402,0],[-19.014,0.524],[-4.654,-0.139],[0.003,2.058],[0,0],[16.77,1.141]],"v":[[49.24,-14.958],[48.449,-24.48],[35.078,-27.162],[8.511,-28.105],[-11.552,-29.23],[-31.49,-29.23],[-32.74,-16.397],[0.783,-10.292]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.003,"y":0},"n":"0p833_0p833_0p003_0","t":195,"s":[{"i":[[-8.688,-2.818],[3.103,0.828],[5,0],[19.729,-0.544],[2.266,0.068],[0.05,-2.237],[0,0],[-8.979,-0.611]],"o":[[0,0],[-1.627,-3.117],[-2.402,0],[-19.014,0.524],[-4.654,-0.139],[0.003,2.058],[0,0],[16.77,1.141]],"v":[[49.24,-14.958],[48.449,-24.48],[35.078,-27.162],[8.511,-28.105],[-11.552,-29.23],[-31.49,-29.23],[-32.74,-16.397],[0.783,-10.292]],"c":true}],"e":[{"i":[[-10.148,-0.974],[1.946,1.765],[5,0],[19.647,-1.061],[2.068,0.043],[2.021,-2.886],[0,0],[-9.491,-0.564]],"o":[[0,0],[-1.016,-4.003],[-2.402,0],[-17.159,0.846],[-4.163,-0.087],[-0.997,2.036],[0,0],[15.201,0.935]],"v":[[50.512,-12.428],[50.724,-23.481],[37.167,-27.418],[10.253,-28.778],[-9.881,-30.367],[-29.748,-29.949],[-32.733,-13.313],[1.322,-7.313]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":196,"s":[{"i":[[-10.148,-0.974],[1.946,1.765],[5,0],[19.647,-1.061],[2.068,0.043],[2.021,-2.886],[0,0],[-9.491,-0.564]],"o":[[0,0],[-1.016,-4.003],[-2.402,0],[-17.159,0.846],[-4.163,-0.087],[-0.997,2.036],[0,0],[15.201,0.935]],"v":[[50.512,-12.428],[50.724,-23.481],[37.167,-27.418],[10.253,-28.778],[-9.881,-30.367],[-29.748,-29.949],[-32.733,-13.313],[1.322,-7.313]],"c":true}],"e":[{"i":[[-11.238,-1.637],[0.785,2.706],[5,0],[19.564,-1.579],[1.868,0.017],[3.999,-3.538],[0,0],[-10.004,-0.517]],"o":[[0,0],[-0.402,-4.891],[-2.402,0],[-15.297,1.169],[-3.67,-0.036],[-2,2.015],[0,0],[13.626,0.728]],"v":[[51.415,-10.89],[53.009,-22.479],[39.266,-27.674],[12.001,-29.454],[-8.202,-31.51],[-28,-30.672],[-32.475,-11.595],[2.115,-5.575]],"c":true}]},{"i":{"x":0.429,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p429_1_0p167_0p167","t":197,"s":[{"i":[[-11.238,-1.637],[0.785,2.706],[5,0],[19.564,-1.579],[1.868,0.017],[3.999,-3.538],[0,0],[-10.004,-0.517]],"o":[[0,0],[-0.402,-4.891],[-2.402,0],[-15.297,1.169],[-3.67,-0.036],[-2,2.015],[0,0],[13.626,0.728]],"v":[[51.415,-10.89],[53.009,-22.479],[39.266,-27.674],[12.001,-29.454],[-8.202,-31.51],[-28,-30.672],[-32.475,-11.595],[2.115,-5.575]],"c":true}],"e":[{"i":[[-11.188,-3.693],[-0.011,3.35],[5,0],[19.508,-1.935],[1.732,0],[5.354,-3.984],[0,0],[-10.356,-0.484]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-14.021,1.391],[-3.333,0],[-2.688,2],[0,0],[12.547,0.587]],"v":[[51.49,-10.333],[54.574,-21.792],[40.703,-27.85],[13.199,-29.917],[-7.052,-32.292],[-26.802,-31.167],[-32.177,-11.834],[2.908,-4.792]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":199,"s":[{"i":[[-11.188,-3.693],[-0.011,3.35],[5,0],[19.508,-1.935],[1.732,0],[5.354,-3.984],[0,0],[-10.356,-0.484]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-14.021,1.391],[-3.333,0],[-2.688,2],[0,0],[12.547,0.587]],"v":[[51.49,-10.333],[54.574,-21.792],[40.703,-27.85],[13.199,-29.917],[-7.052,-32.292],[-26.802,-31.167],[-32.177,-11.834],[2.908,-4.792]],"c":true}],"e":[{"i":[[-11.076,-2.927],[-0.011,3.35],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-8.985,-0.512]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[15.782,0.9]],"v":[[51.503,-10.099],[54.438,-21.836],[40.599,-27.917],[8.07,-30.95],[-10.035,-32.811],[-31.116,-31.141],[-32.958,-12.323],[-0.48,-5.177]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":200,"s":[{"i":[[-11.076,-2.927],[-0.011,3.35],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-8.985,-0.512]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[15.782,0.9]],"v":[[51.503,-10.099],[54.438,-21.836],[40.599,-27.917],[8.07,-30.95],[-10.035,-32.811],[-31.116,-31.141],[-32.958,-12.323],[-0.48,-5.177]],"c":true}],"e":[{"i":[[-10.342,-1.966],[0.969,3.025],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-17.887,5.04]],"o":[[0,0],[-1.939,-5.432],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[14.091,-2.37]],"v":[[44.653,-5.61],[43.905,-21.996],[30.959,-29.58],[1.834,-31.055],[-25.548,-36.617],[-39.201,-32.971],[-39.969,-13.358],[0.711,-5.906]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":203,"s":[{"i":[[-10.342,-1.966],[0.969,3.025],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-17.887,5.04]],"o":[[0,0],[-1.939,-5.432],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[14.091,-2.37]],"v":[[44.653,-5.61],[43.905,-21.996],[30.959,-29.58],[1.834,-31.055],[-25.548,-36.617],[-39.201,-32.971],[-39.969,-13.358],[0.711,-5.906]],"c":true}],"e":[{"i":[[-9.562,-0.943],[2.011,2.68],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-27.357,10.948]],"o":[[0,0],[-4.021,-5.359],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[9.02,-3.609]],"v":[[37.365,-0.833],[32.699,-22.167],[20.703,-31.35],[-4.801,-31.167],[-41.998,-36.292],[-47.748,-30.542],[-47.427,-14.459],[-8.342,-6.167]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"n":"0p833_0p833_0p333_0","t":208,"s":[{"i":[[-9.562,-0.943],[2.011,2.68],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-27.357,10.948]],"o":[[0,0],[-4.021,-5.359],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[9.02,-3.609]],"v":[[37.365,-0.833],[32.699,-22.167],[20.703,-31.35],[-4.801,-31.167],[-41.998,-36.292],[-47.748,-30.542],[-47.427,-14.459],[-8.342,-6.167]],"c":true}],"e":[{"i":[[-8.804,2.31],[0.88,3.844],[5,0],[19.604,-0.109],[1.732,0],[1.167,-4.996],[0,0],[-21.508,3.878]],"o":[[0,0],[-1.238,-6.035],[-2.402,0],[-19.026,0.106],[-3.333,0],[-0.717,3.225],[0,0],[20.382,0.549]],"v":[[38.795,-6.519],[37.052,-23.843],[28.915,-32.248],[0.044,-28.543],[-38.443,-31.9],[-44.193,-26.15],[-44.975,-1.987],[-3.486,-5.784]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":216,"s":[{"i":[[-8.804,2.31],[0.88,3.844],[5,0],[19.604,-0.109],[1.732,0],[1.167,-4.996],[0,0],[-21.508,3.878]],"o":[[0,0],[-1.238,-6.035],[-2.402,0],[-19.026,0.106],[-3.333,0],[-0.717,3.225],[0,0],[20.382,0.549]],"v":[[38.795,-6.519],[37.052,-23.843],[28.915,-32.248],[0.044,-28.543],[-38.443,-31.9],[-44.193,-26.15],[-44.975,-1.987],[-3.486,-5.784]],"c":true}],"e":[{"i":[[-8.393,4.071],[0.268,4.474],[5,0],[19.604,-0.109],[1.732,0],[1.82,-5.13],[0,0],[-18.341,0.05]],"o":[[0,0],[0.268,-6.401],[-2.402,0],[-19.026,0.106],[-3.333,0],[-1.12,3.157],[0,0],[26.534,2.8]],"v":[[39.57,-9.598],[39.409,-24.75],[33.362,-32.734],[2.667,-27.123],[-36.518,-29.522],[-42.268,-23.772],[-44.802,0.142],[-0.857,-5.576]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":219,"s":[{"i":[[-8.393,4.071],[0.268,4.474],[5,0],[19.604,-0.109],[1.732,0],[1.82,-5.13],[0,0],[-18.341,0.05]],"o":[[0,0],[0.268,-6.401],[-2.402,0],[-19.026,0.106],[-3.333,0],[-1.12,3.157],[0,0],[26.534,2.8]],"v":[[39.57,-9.598],[39.409,-24.75],[33.362,-32.734],[2.667,-27.123],[-36.518,-29.522],[-42.268,-23.772],[-44.802,0.142],[-0.857,-5.576]],"c":true}],"e":[{"i":[[-9.438,-1.068],[-0.011,3.35],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-9,0]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[9,0]],"v":[[40.115,-5.208],[42.199,-25.792],[31.203,-33.975],[-3.551,-33.917],[-42.427,-34.542],[-48.177,-28.792],[-47.427,-5.584],[-1.842,-5.792]],"c":true}]},{"t":228}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[0.667]},"o":{"x":[0.294],"y":[0.294]},"n":["0p667_0p667_0p294_0p294"],"t":224,"s":[0.995,0.926,0.81,1],"e":[0.995,0.926,0.81,1]},{"t":228}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[45.716,19.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":191,"op":199,"st":203,"bm":0,"sr":1},{"ddd":0,"ind":19,"ty":4,"nm":"BeerFoam01","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[251.198,238.526,0]},"a":{"a":0,"k":[45.716,19.042,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"n":"0p833_1_0p333_0","t":25,"s":[{"i":[[-9.438,-1.068],[-0.011,3.35],[5,0],[19.604,-0.109],[1.732,0],[-0.038,-4.75],[0,0],[-9,0]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-19.026,0.106],[-3.333,0],[0.027,3.35],[0,0],[9,0]],"v":[[40.115,-5.208],[42.199,-25.792],[31.203,-33.975],[-3.551,-33.917],[-42.427,-34.542],[-48.177,-28.792],[-47.427,-5.584],[-1.842,-5.792]],"c":true}],"e":[{"i":[[-6.062,8.932],[-0.011,3.35],[5,0],[18.999,4.831],[13.729,4.266],[-0.038,-4.75],[-7.98,-17.308],[-9,0]],"o":[[0,0],[0.018,-5.5],[-2.402,0],[-17.146,-4.359],[-3.183,-0.989],[0.027,3.35],[7.979,17.308],[9,0]],"v":[[30.115,-11.958],[37.199,-39.792],[22.703,-36.225],[-3.301,-38.167],[-31.677,-55.792],[-43.677,-51.542],[-33.427,-15.084],[2.908,2.458]],"c":true}]},{"t":31}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.683],"y":[-217.822]},"o":{"x":[0.294],"y":[0]},"n":["0p683_-217p822_0p294_0"],"t":25,"s":[0.995,0.926,0.81,1],"e":[0.996,0.671,0.224,1]},{"i":{"x":[0.816],"y":[5.434]},"o":{"x":[0.444],"y":[-30.711]},"n":["0p816_5p434_0p444_-30p711"],"t":29,"s":[0.996,0.671,0.224,1],"e":[0.991,0.476,0.168,1]},{"t":31}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[45.716,19.042],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":30,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":20,"ty":4,"nm":"Lime","ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.553],"y":[1]},"o":{"x":[0.285],"y":[0]},"n":["0p553_1_0p285_0"],"t":98,"s":[34],"e":[9]},{"i":{"x":[0.553],"y":[1]},"o":{"x":[0.167],"y":[0]},"n":["0p553_1_0p167_0"],"t":123,"s":[9],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":166,"s":[0],"e":[0]},{"t":177}]},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.522,"y":0},"n":"0p833_0p833_0p522_0","t":98,"s":[239.72,78.096,0],"e":[240.88,188.853,0],"to":[0.17096444964409,17.369987487793,0],"ti":[-0.25715479254723,-32.244255065918,0]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"n":"0_1_0p167_0p167","t":108,"s":[240.88,188.853,0],"e":[240.97,205.096,0],"to":[0.05620810389519,7.04784965515137,0],"ti":[0,-3.52762246131897,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.333,"y":0},"n":"0p1_1_0p333_0","t":123,"s":[240.97,205.096,0],"e":[239.72,196.096,0],"to":[0,0.04166666790843,0],"ti":[0.08333333581686,0.0625,0]},{"t":166,"s":[239.72,196.096,0],"h":1},{"i":{"x":0.833,"y":0.833},"o":{"x":0.806,"y":0},"n":"0p833_0p833_0p806_0","t":184,"s":[239.72,196.096,0],"e":[239.72,259.096,0],"to":[0,0,0],"ti":[0,0,0]},{"t":195}]},"a":{"a":0,"k":[24.947,30.54,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":98,"s":[{"i":[[-0.007,0],[0.025,0.027],[0.007,0.009],[0.015,0.016],[0.014,0],[0.007,-0.009],[-0.001,-0.028],[-0.015,-0.005],[-0.029,-0.005],[-0.012,-0.003]],"o":[[0,0],[-0.025,-0.027],[-0.007,-0.009],[-0.015,-0.016],[-0.014,0],[-0.007,0.009],[0.001,0.028],[0.015,0.005],[0.035,0.006],[0.009,0.002]],"v":[[-5.882,10.22],[-5.884,10.199],[-5.94,10.142],[-5.994,10.088],[-6.058,10.03],[-6.105,10.047],[-6.151,10.136],[-6.134,10.176],[-6.031,10.191],[-5.936,10.206]],"c":true}],"e":[{"i":[[-0.137,0.032],[0.643,0.384],[0.178,0.13],[0.386,0.221],[0.277,-0.082],[0.088,-0.206],[-0.168,-0.542],[-0.321,-0.005],[-0.595,0.056],[-0.241,0.012]],"o":[[0,0],[-0.643,-0.384],[-0.178,-0.13],[-0.386,-0.221],[-0.277,0.082],[-0.088,0.206],[0.168,0.542],[0.321,0.005],[0.728,-0.068],[0.179,-0.009]],"v":[[-10.268,5.693],[-10.417,5.294],[-11.822,4.489],[-13.17,3.716],[-14.74,2.947],[-15.573,3.524],[-15.978,5.519],[-15.426,6.216],[-13.328,5.945],[-11.397,5.716]],"c":true}]},{"i":{"x":0.22,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p22_1_0p167_0p167","t":100,"s":[{"i":[[-0.137,0.032],[0.643,0.384],[0.178,0.13],[0.386,0.221],[0.277,-0.082],[0.088,-0.206],[-0.168,-0.542],[-0.321,-0.005],[-0.595,0.056],[-0.241,0.012]],"o":[[0,0],[-0.643,-0.384],[-0.178,-0.13],[-0.386,-0.221],[-0.277,0.082],[-0.088,0.206],[0.168,0.542],[0.321,0.005],[0.728,-0.068],[0.179,-0.009]],"v":[[-10.268,5.693],[-10.417,5.294],[-11.822,4.489],[-13.17,3.716],[-14.74,2.947],[-15.573,3.524],[-15.978,5.519],[-15.426,6.216],[-13.328,5.945],[-11.397,5.716]],"c":true}],"e":[{"i":[[-0.12,-0.614],[-1.815,2.792],[-0.609,0.766],[-1.048,1.676],[0.32,1.243],[0.9,0.425],[2.434,-0.655],[0.078,-1.424],[-0.147,-2.653],[-0.014,-1.071]],"o":[[0,0],[1.815,-2.791],[0.609,-0.766],[1.048,-1.676],[-0.319,-1.243],[-0.9,-0.426],[-2.434,0.655],[-0.079,1.423],[0.18,3.242],[0.011,0.798]],"v":[[-5.876,11.887],[-4.077,11.294],[-0.262,5.194],[3.397,-0.658],[7.077,-7.498],[4.658,-11.295],[-4.129,-13.431],[-7.318,-11.101],[-6.472,-1.738],[-5.784,6.874]],"c":true}]},{"i":{"x":0.22,"y":1},"o":{"x":0.167,"y":0},"n":"0p22_1_0p167_0","t":108,"s":[{"i":[[-0.12,-0.614],[-1.815,2.792],[-0.609,0.766],[-1.048,1.676],[0.32,1.243],[0.9,0.425],[2.434,-0.655],[0.078,-1.424],[-0.147,-2.653],[-0.014,-1.071]],"o":[[0,0],[1.815,-2.791],[0.609,-0.766],[1.048,-1.676],[-0.319,-1.243],[-0.9,-0.426],[-2.434,0.655],[-0.079,1.423],[0.18,3.242],[0.011,0.798]],"v":[[-5.876,11.887],[-4.077,11.294],[-0.262,5.194],[3.397,-0.658],[7.077,-7.498],[4.658,-11.295],[-4.129,-13.431],[-7.318,-11.101],[-6.472,-1.738],[-5.784,6.874]],"c":true}],"e":[{"i":[[-0.12,-0.614],[-1.815,2.792],[-0.609,0.766],[-1.048,1.676],[0.32,1.243],[0.9,0.425],[2.434,-0.655],[0.078,-1.424],[-0.147,-2.653],[-0.014,-1.071]],"o":[[0,0],[1.815,-2.791],[0.609,-0.766],[1.048,-1.676],[-0.319,-1.243],[-0.9,-0.426],[-2.434,0.655],[-0.079,1.423],[0.18,3.242],[0.011,0.798]],"v":[[-5.876,11.887],[-4.077,11.294],[-0.262,5.194],[3.397,-0.658],[7.077,-7.498],[4.658,-11.295],[-4.129,-13.431],[-7.318,-11.101],[-6.472,-1.738],[-5.784,6.874]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.78,"y":0},"n":"0p833_0p833_0p78_0","t":189,"s":[{"i":[[-0.12,-0.614],[-1.815,2.792],[-0.609,0.766],[-1.048,1.676],[0.32,1.243],[0.9,0.425],[2.434,-0.655],[0.078,-1.424],[-0.147,-2.653],[-0.014,-1.071]],"o":[[0,0],[1.815,-2.791],[0.609,-0.766],[1.048,-1.676],[-0.319,-1.243],[-0.9,-0.426],[-2.434,0.655],[-0.079,1.423],[0.18,3.242],[0.011,0.798]],"v":[[-5.876,11.887],[-4.077,11.294],[-0.262,5.194],[3.397,-0.658],[7.077,-7.498],[4.658,-11.295],[-4.129,-13.431],[-7.318,-11.101],[-6.472,-1.738],[-5.784,6.874]],"c":true}],"e":[{"i":[[-0.137,0.032],[0.643,0.384],[0.178,0.13],[0.386,0.221],[0.277,-0.082],[0.088,-0.206],[-0.168,-0.542],[-0.321,-0.005],[-0.595,0.056],[-0.241,0.012]],"o":[[0,0],[-0.643,-0.384],[-0.178,-0.13],[-0.386,-0.221],[-0.277,0.082],[-0.088,0.206],[0.168,0.542],[0.321,0.005],[0.728,-0.068],[0.179,-0.009]],"v":[[-10.268,5.693],[-10.417,5.294],[-11.822,4.489],[-13.17,3.716],[-14.74,2.947],[-15.573,3.524],[-15.978,5.519],[-15.426,6.216],[-13.328,5.945],[-11.397,5.716]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":197,"s":[{"i":[[-0.137,0.032],[0.643,0.384],[0.178,0.13],[0.386,0.221],[0.277,-0.082],[0.088,-0.206],[-0.168,-0.542],[-0.321,-0.005],[-0.595,0.056],[-0.241,0.012]],"o":[[0,0],[-0.643,-0.384],[-0.178,-0.13],[-0.386,-0.221],[-0.277,0.082],[-0.088,0.206],[0.168,0.542],[0.321,0.005],[0.728,-0.068],[0.179,-0.009]],"v":[[-10.268,5.693],[-10.417,5.294],[-11.822,4.489],[-13.17,3.716],[-14.74,2.947],[-15.573,3.524],[-15.978,5.519],[-15.426,6.216],[-13.328,5.945],[-11.397,5.716]],"c":true}],"e":[{"i":[[-0.007,0],[0.025,0.027],[0.007,0.009],[0.015,0.016],[0.014,0],[0.007,-0.009],[-0.001,-0.028],[-0.015,-0.005],[-0.029,-0.005],[-0.012,-0.003]],"o":[[0,0],[-0.025,-0.027],[-0.007,-0.009],[-0.015,-0.016],[-0.014,0],[-0.007,0.009],[0.001,0.028],[0.015,0.005],[0.035,0.006],[0.009,0.002]],"v":[[-5.882,10.22],[-5.884,10.199],[-5.94,10.142],[-5.994,10.088],[-6.058,10.03],[-6.105,10.047],[-6.151,10.136],[-6.134,10.176],[-6.031,10.191],[-5.936,10.206]],"c":true}]},{"t":199}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ind":1,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":98,"s":[{"i":[[-0.009,-0.003],[0.015,0.031],[0.003,0.012],[0.004,0.012],[0.01,0.006],[0.015,-0.015],[0.008,-0.021],[-0.014,-0.026],[-0.023,-0.012]],"o":[[0,0],[-0.015,-0.031],[-0.003,-0.012],[-0.004,-0.012],[-0.01,-0.006],[-0.015,0.015],[-0.008,0.021],[0.014,0.026],[0.023,0.012]],"v":[[-6.166,10.208],[-6.146,10.191],[-6.235,10.044],[-6.299,9.906],[-6.332,9.86],[-6.378,9.865],[-6.469,9.959],[-6.481,10.033],[-6.398,10.093]],"c":true}],"e":[{"i":[[-0.197,-0.193],[-0.005,0.987],[-0.061,0.347],[-0.039,0.363],[0.173,0.27],[0.565,-0.209],[0.452,-0.436],[-0.047,-0.842],[-0.427,-0.596]],"o":[[0,0],[0.005,-0.987],[0.061,-0.347],[0.039,-0.363],[-0.173,-0.27],[-0.565,0.209],[-0.452,0.436],[0.047,0.842],[0.427,0.596]],"v":[[-6.373,2.868],[-5.653,2.677],[-6.134,-2.157],[-6.083,-6.472],[-6.337,-8.058],[-7.589,-8.504],[-11.074,-7.198],[-12.282,-5.454],[-10.896,-2.904]],"c":true}]},{"i":{"x":0.21,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p21_1_0p167_0p167","t":100,"s":[{"i":[[-0.197,-0.193],[-0.005,0.987],[-0.061,0.347],[-0.039,0.363],[0.173,0.27],[0.565,-0.209],[0.452,-0.436],[-0.047,-0.842],[-0.427,-0.596]],"o":[[0,0],[0.005,-0.987],[0.061,-0.347],[0.039,-0.363],[-0.173,-0.27],[-0.565,0.209],[-0.452,0.436],[0.047,0.842],[0.427,0.596]],"v":[[-6.373,2.868],[-5.653,2.677],[-6.134,-2.157],[-6.083,-6.472],[-6.337,-8.058],[-7.589,-8.504],[-11.074,-7.198],[-12.282,-5.454],[-10.896,-2.904]],"c":true}],"e":[{"i":[[-0.433,-0.387],[0.085,2.078],[-0.094,0.739],[-0.047,0.769],[0.391,0.552],[1.169,-0.496],[0.91,-0.965],[-0.181,-1.77],[-0.96,-1.213]],"o":[[0,0],[-0.086,-2.079],[0.094,-0.738],[0.047,-0.768],[-0.392,-0.551],[-1.169,0.496],[-0.91,0.964],[0.182,1.77],[0.959,1.213]],"v":[[-7.738,11.765],[-6.24,11.291],[-7.73,1.156],[-8.05,-7.94],[-8.741,-11.256],[-11.421,-12.072],[-18.634,-8.975],[-21.006,-5.182],[-17.836,0.051]],"c":true}]},{"i":{"x":0.21,"y":1},"o":{"x":0.167,"y":0},"n":"0p21_1_0p167_0","t":108,"s":[{"i":[[-0.433,-0.387],[0.085,2.078],[-0.094,0.739],[-0.047,0.769],[0.391,0.552],[1.169,-0.496],[0.91,-0.965],[-0.181,-1.77],[-0.96,-1.213]],"o":[[0,0],[-0.086,-2.079],[0.094,-0.738],[0.047,-0.768],[-0.392,-0.551],[-1.169,0.496],[-0.91,0.964],[0.182,1.77],[0.959,1.213]],"v":[[-7.738,11.765],[-6.24,11.291],[-7.73,1.156],[-8.05,-7.94],[-8.741,-11.256],[-11.421,-12.072],[-18.634,-8.975],[-21.006,-5.182],[-17.836,0.051]],"c":true}],"e":[{"i":[[-0.433,-0.387],[0.085,2.078],[-0.094,0.739],[-0.047,0.769],[0.391,0.552],[1.169,-0.496],[0.91,-0.965],[-0.181,-1.77],[-0.96,-1.213]],"o":[[0,0],[-0.086,-2.079],[0.094,-0.738],[0.047,-0.768],[-0.392,-0.551],[-1.169,0.496],[-0.91,0.964],[0.182,1.77],[0.959,1.213]],"v":[[-7.738,11.765],[-6.24,11.291],[-7.73,1.156],[-8.05,-7.94],[-8.741,-11.256],[-11.421,-12.072],[-18.634,-8.975],[-21.006,-5.182],[-17.836,0.051]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.79,"y":0},"n":"0p833_0p833_0p79_0","t":189,"s":[{"i":[[-0.433,-0.387],[0.085,2.078],[-0.094,0.739],[-0.047,0.769],[0.391,0.552],[1.169,-0.496],[0.91,-0.965],[-0.181,-1.77],[-0.96,-1.213]],"o":[[0,0],[-0.086,-2.079],[0.094,-0.738],[0.047,-0.768],[-0.392,-0.551],[-1.169,0.496],[-0.91,0.964],[0.182,1.77],[0.959,1.213]],"v":[[-7.738,11.765],[-6.24,11.291],[-7.73,1.156],[-8.05,-7.94],[-8.741,-11.256],[-11.421,-12.072],[-18.634,-8.975],[-21.006,-5.182],[-17.836,0.051]],"c":true}],"e":[{"i":[[-0.197,-0.193],[-0.005,0.987],[-0.061,0.347],[-0.039,0.363],[0.173,0.27],[0.565,-0.209],[0.452,-0.436],[-0.047,-0.842],[-0.427,-0.596]],"o":[[0,0],[0.005,-0.987],[0.061,-0.347],[0.039,-0.363],[-0.173,-0.27],[-0.565,0.209],[-0.452,0.436],[0.047,0.842],[0.427,0.596]],"v":[[-6.373,2.868],[-5.653,2.677],[-6.134,-2.157],[-6.083,-6.472],[-6.337,-8.058],[-7.589,-8.504],[-11.074,-7.198],[-12.282,-5.454],[-10.896,-2.904]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":197,"s":[{"i":[[-0.197,-0.193],[-0.005,0.987],[-0.061,0.347],[-0.039,0.363],[0.173,0.27],[0.565,-0.209],[0.452,-0.436],[-0.047,-0.842],[-0.427,-0.596]],"o":[[0,0],[0.005,-0.987],[0.061,-0.347],[0.039,-0.363],[-0.173,-0.27],[-0.565,0.209],[-0.452,0.436],[0.047,0.842],[0.427,0.596]],"v":[[-6.373,2.868],[-5.653,2.677],[-6.134,-2.157],[-6.083,-6.472],[-6.337,-8.058],[-7.589,-8.504],[-11.074,-7.198],[-12.282,-5.454],[-10.896,-2.904]],"c":true}],"e":[{"i":[[-0.009,-0.003],[0.015,0.031],[0.003,0.012],[0.004,0.012],[0.01,0.006],[0.015,-0.015],[0.008,-0.021],[-0.014,-0.026],[-0.023,-0.012]],"o":[[0,0],[-0.015,-0.031],[-0.003,-0.012],[-0.004,-0.012],[-0.01,-0.006],[-0.015,0.015],[-0.008,0.021],[0.014,0.026],[0.023,0.012]],"v":[[-6.166,10.208],[-6.146,10.191],[-6.235,10.044],[-6.299,9.906],[-6.332,9.86],[-6.378,9.865],[-6.469,9.959],[-6.481,10.033],[-6.398,10.093]],"c":true}]},{"t":199}]},"nm":"Path 2","mn":"ADBE Vector Shape - Group"},{"ind":2,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":98,"s":[{"i":[[0.005,0.002],[0.004,0.039],[-0.007,0.02],[-0.027,-0.016],[-0.015,-0.009],[-0.01,-0.004],[0.018,-0.003],[0.009,-0.001],[0.009,-0.002]],"o":[[0,0],[-0.004,-0.039],[0.007,-0.02],[0.027,0.016],[0.015,0.009],[0.01,0.004],[-0.018,0.003],[-0.009,0.001],[-0.009,0.002]],"v":[[-6.303,10.146],[-6.335,10.101],[-6.323,9.994],[-6.274,9.957],[-6.161,10.017],[-6.043,10.08],[-6.038,10.099],[-6.17,10.121],[-6.274,10.141]],"c":true}],"e":[{"i":[[0.087,0.142],[-0.714,1.085],[-0.593,0.366],[-0.356,-0.98],[-0.206,-0.541],[-0.163,-0.31],[0.539,0.299],[0.258,0.171],[0.283,0.124]],"o":[[0,0],[0.714,-1.085],[0.594,-0.366],[0.356,0.98],[0.206,0.541],[0.163,0.31],[-0.539,-0.299],[-0.258,-0.171],[-0.283,-0.124]],"v":[[-18.061,-0.343],[-17.961,-2.206],[-15.399,-4.711],[-13.354,-4.638],[-11.667,-0.726],[-9.929,3.41],[-10.194,4.01],[-14.102,1.792],[-17.217,0.142]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"n":"0_1_0p167_0p167","t":100,"s":[{"i":[[0.087,0.142],[-0.714,1.085],[-0.593,0.366],[-0.356,-0.98],[-0.206,-0.541],[-0.163,-0.31],[0.539,0.299],[0.258,0.171],[0.283,0.124]],"o":[[0,0],[0.714,-1.085],[0.594,-0.366],[0.356,0.98],[0.206,0.541],[0.163,0.31],[-0.539,-0.299],[-0.258,-0.171],[-0.283,-0.124]],"v":[[-18.061,-0.343],[-17.961,-2.206],[-15.399,-4.711],[-13.354,-4.638],[-11.667,-0.726],[-9.929,3.41],[-10.194,4.01],[-14.102,1.792],[-17.217,0.142]],"c":true}],"e":[{"i":[[0.291,0.243],[-0.744,2.857],[-1.009,1.221],[-1.483,-1.847],[-0.838,-1.014],[-0.578,-0.548],[1.378,0.248],[0.682,0.181],[0.699,0.059]],"o":[[0,0],[0.743,-2.857],[1.01,-1.222],[1.483,1.848],[0.838,1.015],[0.577,0.547],[-1.379,-0.249],[-0.681,-0.18],[-0.7,-0.059]],"v":[[-28.418,9.938],[-29.564,5.856],[-25.881,-1.408],[-21.425,-2.745],[-14.937,4.441],[-8.175,12.073],[-8.306,13.558],[-18.338,11.64],[-26.248,10.364]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"n":"0_1_0p167_0","t":108,"s":[{"i":[[0.291,0.243],[-0.744,2.857],[-1.009,1.221],[-1.483,-1.847],[-0.838,-1.014],[-0.578,-0.548],[1.378,0.248],[0.682,0.181],[0.699,0.059]],"o":[[0,0],[0.743,-2.857],[1.01,-1.222],[1.483,1.848],[0.838,1.015],[0.577,0.547],[-1.379,-0.249],[-0.681,-0.18],[-0.7,-0.059]],"v":[[-28.418,9.938],[-29.564,5.856],[-25.881,-1.408],[-21.425,-2.745],[-14.937,4.441],[-8.175,12.073],[-8.306,13.558],[-18.338,11.64],[-26.248,10.364]],"c":true}],"e":[{"i":[[0.291,0.243],[-0.744,2.857],[-1.009,1.221],[-1.483,-1.847],[-0.838,-1.014],[-0.578,-0.548],[1.378,0.248],[0.682,0.181],[0.699,0.059]],"o":[[0,0],[0.743,-2.857],[1.01,-1.222],[1.483,1.848],[0.838,1.015],[0.577,0.547],[-1.379,-0.249],[-0.681,-0.18],[-0.7,-0.059]],"v":[[-28.418,9.938],[-29.564,5.856],[-25.881,-1.408],[-21.425,-2.745],[-14.937,4.441],[-8.175,12.073],[-8.306,13.558],[-18.338,11.64],[-26.248,10.364]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"n":"0p833_0p833_1_0","t":189,"s":[{"i":[[0.291,0.243],[-0.744,2.857],[-1.009,1.221],[-1.483,-1.847],[-0.838,-1.014],[-0.578,-0.548],[1.378,0.248],[0.682,0.181],[0.699,0.059]],"o":[[0,0],[0.743,-2.857],[1.01,-1.222],[1.483,1.848],[0.838,1.015],[0.577,0.547],[-1.379,-0.249],[-0.681,-0.18],[-0.7,-0.059]],"v":[[-28.418,9.938],[-29.564,5.856],[-25.881,-1.408],[-21.425,-2.745],[-14.937,4.441],[-8.175,12.073],[-8.306,13.558],[-18.338,11.64],[-26.248,10.364]],"c":true}],"e":[{"i":[[0.087,0.142],[-0.714,1.085],[-0.593,0.366],[-0.356,-0.98],[-0.206,-0.541],[-0.163,-0.31],[0.539,0.299],[0.258,0.171],[0.283,0.124]],"o":[[0,0],[0.714,-1.085],[0.594,-0.366],[0.356,0.98],[0.206,0.541],[0.163,0.31],[-0.539,-0.299],[-0.258,-0.171],[-0.283,-0.124]],"v":[[-18.061,-0.343],[-17.961,-2.206],[-15.399,-4.711],[-13.354,-4.638],[-11.667,-0.726],[-9.929,3.41],[-10.194,4.01],[-14.102,1.792],[-17.217,0.142]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":197,"s":[{"i":[[0.087,0.142],[-0.714,1.085],[-0.593,0.366],[-0.356,-0.98],[-0.206,-0.541],[-0.163,-0.31],[0.539,0.299],[0.258,0.171],[0.283,0.124]],"o":[[0,0],[0.714,-1.085],[0.594,-0.366],[0.356,0.98],[0.206,0.541],[0.163,0.31],[-0.539,-0.299],[-0.258,-0.171],[-0.283,-0.124]],"v":[[-18.061,-0.343],[-17.961,-2.206],[-15.399,-4.711],[-13.354,-4.638],[-11.667,-0.726],[-9.929,3.41],[-10.194,4.01],[-14.102,1.792],[-17.217,0.142]],"c":true}],"e":[{"i":[[0.005,0.002],[0.004,0.039],[-0.007,0.02],[-0.027,-0.016],[-0.015,-0.009],[-0.01,-0.004],[0.018,-0.003],[0.009,-0.001],[0.009,-0.002]],"o":[[0,0],[-0.004,-0.039],[0.007,-0.02],[0.027,0.016],[0.015,0.009],[0.01,0.004],[-0.018,0.003],[-0.009,0.001],[-0.009,0.002]],"v":[[-6.303,10.146],[-6.335,10.101],[-6.323,9.994],[-6.274,9.957],[-6.161,10.017],[-6.043,10.08],[-6.038,10.099],[-6.17,10.121],[-6.274,10.141]],"c":true}]},{"t":199}]},"nm":"Path 3","mn":"ADBE Vector Shape - Group"},{"ind":3,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":98,"s":[{"i":[[-0.004,-0.001],[0.025,-0.009],[0.006,0],[0.006,-0.006],[0.005,0.002],[0.002,0.021],[-0.002,0.004],[-0.026,-0.005],[-0.012,-0.002]],"o":[[0,0],[-0.025,0.009],[-0.006,0],[-0.006,0.006],[-0.005,-0.002],[-0.002,-0.021],[0.002,-0.004],[0.026,0.005],[0.012,0.001]],"v":[[-6.043,10.063],[-6.04,10.077],[-6.112,10.104],[-6.17,10.133],[-6.213,10.154],[-6.234,10.104],[-6.231,10.047],[-6.202,10.036],[-6.1,10.055]],"c":true}],"e":[{"i":[[-0.112,0.003],[0.583,-0.379],[0.149,-0.044],[0.113,-0.176],[0.136,0.032],[0.183,0.53],[-0.028,0.124],[-0.682,0.038],[-0.317,0.035]],"o":[[0,0],[-0.583,0.379],[-0.149,0.044],[-0.113,0.176],[-0.136,-0.032],[-0.183,-0.53],[0.028,-0.124],[0.682,-0.038],[0.317,-0.035]],"v":[[-9.294,7.317],[-9.135,7.64],[-10.788,8.77],[-12.095,9.869],[-13.053,10.644],[-13.9,9.502],[-14.16,8.049],[-13.496,7.589],[-10.784,7.447]],"c":true}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p29_1_0p167_0p167","t":100,"s":[{"i":[[-0.112,0.003],[0.583,-0.379],[0.149,-0.044],[0.113,-0.176],[0.136,0.032],[0.183,0.53],[-0.028,0.124],[-0.682,0.038],[-0.317,0.035]],"o":[[0,0],[-0.583,0.379],[-0.149,0.044],[-0.113,0.176],[-0.136,-0.032],[-0.183,-0.53],[0.028,-0.124],[0.682,-0.038],[0.317,-0.035]],"v":[[-9.294,7.317],[-9.135,7.64],[-10.788,8.77],[-12.095,9.869],[-13.053,10.644],[-13.9,9.502],[-14.16,8.049],[-13.496,7.589],[-10.784,7.447]],"c":true}],"e":[{"i":[[-0.448,-0.095],[2.685,-0.958],[0.634,-0.033],[0.617,-0.596],[0.512,0.259],[0.226,2.288],[-0.232,0.468],[-2.757,-0.497],[-1.296,-0.162]],"o":[[0,0],[-2.686,0.959],[-0.634,0.033],[-0.618,0.595],[-0.513,-0.259],[-0.225,-2.288],[0.231,-0.469],[2.757,0.496],[1.296,0.161]],"v":[[-9.622,13.894],[-9.294,15.332],[-16.959,18.269],[-23.218,21.411],[-27.773,23.593],[-30.066,18.233],[-29.722,12.19],[-26.64,10.989],[-15.688,12.999]],"c":true}]},{"i":{"x":0.29,"y":1},"o":{"x":0.167,"y":0},"n":"0p29_1_0p167_0","t":108,"s":[{"i":[[-0.448,-0.095],[2.685,-0.958],[0.634,-0.033],[0.617,-0.596],[0.512,0.259],[0.226,2.288],[-0.232,0.468],[-2.757,-0.497],[-1.296,-0.162]],"o":[[0,0],[-2.686,0.959],[-0.634,0.033],[-0.618,0.595],[-0.513,-0.259],[-0.225,-2.288],[0.231,-0.469],[2.757,0.496],[1.296,0.161]],"v":[[-9.622,13.894],[-9.294,15.332],[-16.959,18.269],[-23.218,21.411],[-27.773,23.593],[-30.066,18.233],[-29.722,12.19],[-26.64,10.989],[-15.688,12.999]],"c":true}],"e":[{"i":[[-0.448,-0.095],[2.685,-0.958],[0.634,-0.033],[0.617,-0.596],[0.512,0.259],[0.226,2.288],[-0.232,0.468],[-2.757,-0.497],[-1.296,-0.162]],"o":[[0,0],[-2.686,0.959],[-0.634,0.033],[-0.618,0.595],[-0.513,-0.259],[-0.225,-2.288],[0.231,-0.469],[2.757,0.496],[1.296,0.161]],"v":[[-9.622,13.894],[-9.294,15.332],[-16.959,18.269],[-23.218,21.411],[-27.773,23.593],[-30.066,18.233],[-29.722,12.19],[-26.64,10.989],[-15.688,12.999]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.71,"y":0},"n":"0p833_0p833_0p71_0","t":189,"s":[{"i":[[-0.448,-0.095],[2.685,-0.958],[0.634,-0.033],[0.617,-0.596],[0.512,0.259],[0.226,2.288],[-0.232,0.468],[-2.757,-0.497],[-1.296,-0.162]],"o":[[0,0],[-2.686,0.959],[-0.634,0.033],[-0.618,0.595],[-0.513,-0.259],[-0.225,-2.288],[0.231,-0.469],[2.757,0.496],[1.296,0.161]],"v":[[-9.622,13.894],[-9.294,15.332],[-16.959,18.269],[-23.218,21.411],[-27.773,23.593],[-30.066,18.233],[-29.722,12.19],[-26.64,10.989],[-15.688,12.999]],"c":true}],"e":[{"i":[[-0.112,0.003],[0.583,-0.379],[0.149,-0.044],[0.113,-0.176],[0.136,0.032],[0.183,0.53],[-0.028,0.124],[-0.682,0.038],[-0.317,0.035]],"o":[[0,0],[-0.583,0.379],[-0.149,0.044],[-0.113,0.176],[-0.136,-0.032],[-0.183,-0.53],[0.028,-0.124],[0.682,-0.038],[0.317,-0.035]],"v":[[-9.294,7.317],[-9.135,7.64],[-10.788,8.77],[-12.095,9.869],[-13.053,10.644],[-13.9,9.502],[-14.16,8.049],[-13.496,7.589],[-10.784,7.447]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":197,"s":[{"i":[[-0.112,0.003],[0.583,-0.379],[0.149,-0.044],[0.113,-0.176],[0.136,0.032],[0.183,0.53],[-0.028,0.124],[-0.682,0.038],[-0.317,0.035]],"o":[[0,0],[-0.583,0.379],[-0.149,0.044],[-0.113,0.176],[-0.136,-0.032],[-0.183,-0.53],[0.028,-0.124],[0.682,-0.038],[0.317,-0.035]],"v":[[-9.294,7.317],[-9.135,7.64],[-10.788,8.77],[-12.095,9.869],[-13.053,10.644],[-13.9,9.502],[-14.16,8.049],[-13.496,7.589],[-10.784,7.447]],"c":true}],"e":[{"i":[[-0.004,-0.001],[0.025,-0.009],[0.006,0],[0.006,-0.006],[0.005,0.002],[0.002,0.021],[-0.002,0.004],[-0.026,-0.005],[-0.012,-0.002]],"o":[[0,0],[-0.025,0.009],[-0.006,0],[-0.006,0.006],[-0.005,-0.002],[-0.002,-0.021],[0.002,-0.004],[0.026,0.005],[0.012,0.001]],"v":[[-6.043,10.063],[-6.04,10.077],[-6.112,10.104],[-6.17,10.133],[-6.213,10.154],[-6.234,10.104],[-6.231,10.047],[-6.202,10.036],[-6.1,10.055]],"c":true}]},{"t":199}]},"nm":"Path 4","mn":"ADBE Vector Shape - Group"},{"ind":4,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":98,"s":[{"i":[[-0.006,0.003],[-0.008,0.001],[-0.002,0],[-0.002,0],[0.003,-0.004],[0.004,-0.006],[0.006,-0.006],[0.011,0.01],[0,0.002]],"o":[[0,0],[0.008,-0.001],[0.002,0],[0.002,0],[-0.003,0.004],[-0.004,0.006],[-0.006,0.006],[-0.011,-0.01],[0,-0.002]],"v":[[-6.026,10.11],[-6.002,10.098],[-5.969,10.089],[-5.957,10.086],[-5.956,10.091],[-5.975,10.114],[-5.997,10.139],[-6.016,10.146],[-6.03,10.124]],"c":true}],"e":[{"i":[[-0.316,0.327],[-0.493,0.268],[-0.098,0.059],[-0.103,0.058],[0.101,-0.313],[0.098,-0.424],[0.222,-0.513],[0.879,0.341],[0.059,0.137]],"o":[[0,0],[0.493,-0.268],[0.098,-0.059],[0.103,-0.058],[-0.101,0.313],[-0.098,0.424],[-0.212,0.491],[-0.879,-0.341],[-0.059,-0.137]],"v":[[-11.371,11.939],[-10.193,10.617],[-8.393,9.305],[-7.737,8.881],[-7.523,9.153],[-8.182,11.005],[-8.932,13.054],[-9.955,13.943],[-11.312,12.872]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"n":"0_1_0p167_0p167","t":100,"s":[{"i":[[-0.316,0.327],[-0.493,0.268],[-0.098,0.059],[-0.103,0.058],[0.101,-0.313],[0.098,-0.424],[0.222,-0.513],[0.879,0.341],[0.059,0.137]],"o":[[0,0],[0.493,-0.268],[0.098,-0.059],[0.103,-0.058],[-0.101,0.313],[-0.098,0.424],[-0.212,0.491],[-0.879,-0.341],[-0.059,-0.137]],"v":[[-11.371,11.939],[-10.193,10.617],[-8.393,9.305],[-7.737,8.881],[-7.523,9.153],[-8.182,11.005],[-8.932,13.054],[-9.955,13.943],[-11.312,12.872]],"c":true}],"e":[{"i":[[-1.616,1.014],[-2.277,0.601],[-0.458,0.143],[-0.475,0.132],[0.726,-1.173],[0.828,-1.63],[1.418,-1.87],[3.242,2.272],[0.105,0.617]],"o":[[0,0],[2.277,-0.6],[0.457,-0.143],[0.476,-0.132],[-0.727,1.174],[-0.827,1.63],[-1.356,1.79],[-3.242,-2.273],[-0.104,-0.618]],"v":[[-26.185,24.586],[-20.058,20.38],[-11.4,16.837],[-8.303,15.768],[-7.702,17.092],[-12.248,23.98],[-17.359,31.578],[-22.421,34.175],[-26.881,28.446]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"n":"0_1_0p167_0","t":108,"s":[{"i":[[-1.616,1.014],[-2.277,0.601],[-0.458,0.143],[-0.475,0.132],[0.726,-1.173],[0.828,-1.63],[1.418,-1.87],[3.242,2.272],[0.105,0.617]],"o":[[0,0],[2.277,-0.6],[0.457,-0.143],[0.476,-0.132],[-0.727,1.174],[-0.827,1.63],[-1.356,1.79],[-3.242,-2.273],[-0.104,-0.618]],"v":[[-26.185,24.586],[-20.058,20.38],[-11.4,16.837],[-8.303,15.768],[-7.702,17.092],[-12.248,23.98],[-17.359,31.578],[-22.421,34.175],[-26.881,28.446]],"c":true}],"e":[{"i":[[-1.616,1.014],[-2.277,0.601],[-0.458,0.143],[-0.475,0.132],[0.726,-1.173],[0.828,-1.63],[1.418,-1.87],[3.242,2.272],[0.105,0.617]],"o":[[0,0],[2.277,-0.6],[0.457,-0.143],[0.476,-0.132],[-0.727,1.174],[-0.827,1.63],[-1.356,1.79],[-3.242,-2.273],[-0.104,-0.618]],"v":[[-26.185,24.586],[-20.058,20.38],[-11.4,16.837],[-8.303,15.768],[-7.702,17.092],[-12.248,23.98],[-17.359,31.578],[-22.421,34.175],[-26.881,28.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"n":"0p833_0p833_1_0","t":189,"s":[{"i":[[-1.616,1.014],[-2.277,0.601],[-0.458,0.143],[-0.475,0.132],[0.726,-1.173],[0.828,-1.63],[1.418,-1.87],[3.242,2.272],[0.105,0.617]],"o":[[0,0],[2.277,-0.6],[0.457,-0.143],[0.476,-0.132],[-0.727,1.174],[-0.827,1.63],[-1.356,1.79],[-3.242,-2.273],[-0.104,-0.618]],"v":[[-26.185,24.586],[-20.058,20.38],[-11.4,16.837],[-8.303,15.768],[-7.702,17.092],[-12.248,23.98],[-17.359,31.578],[-22.421,34.175],[-26.881,28.446]],"c":true}],"e":[{"i":[[-0.316,0.327],[-0.493,0.268],[-0.098,0.059],[-0.103,0.058],[0.101,-0.313],[0.098,-0.424],[0.222,-0.513],[0.879,0.341],[0.059,0.137]],"o":[[0,0],[0.493,-0.268],[0.098,-0.059],[0.103,-0.058],[-0.101,0.313],[-0.098,0.424],[-0.212,0.491],[-0.879,-0.341],[-0.059,-0.137]],"v":[[-11.371,11.939],[-10.193,10.617],[-8.393,9.305],[-7.737,8.881],[-7.523,9.153],[-8.182,11.005],[-8.932,13.054],[-9.955,13.943],[-11.312,12.872]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":197,"s":[{"i":[[-0.316,0.327],[-0.493,0.268],[-0.098,0.059],[-0.103,0.058],[0.101,-0.313],[0.098,-0.424],[0.222,-0.513],[0.879,0.341],[0.059,0.137]],"o":[[0,0],[0.493,-0.268],[0.098,-0.059],[0.103,-0.058],[-0.101,0.313],[-0.098,0.424],[-0.212,0.491],[-0.879,-0.341],[-0.059,-0.137]],"v":[[-11.371,11.939],[-10.193,10.617],[-8.393,9.305],[-7.737,8.881],[-7.523,9.153],[-8.182,11.005],[-8.932,13.054],[-9.955,13.943],[-11.312,12.872]],"c":true}],"e":[{"i":[[-0.006,0.003],[-0.008,0.001],[-0.002,0],[-0.002,0],[0.003,-0.004],[0.004,-0.006],[0.006,-0.006],[0.011,0.01],[0,0.002]],"o":[[0,0],[0.008,-0.001],[0.002,0],[0.002,0],[-0.003,0.004],[-0.004,0.006],[-0.006,0.006],[-0.011,-0.01],[0,-0.002]],"v":[[-6.026,10.11],[-6.002,10.098],[-5.969,10.089],[-5.957,10.086],[-5.956,10.091],[-5.975,10.114],[-5.997,10.139],[-6.016,10.146],[-6.03,10.124]],"c":true}]},{"t":199}]},"nm":"Path 5","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.667,0.788,0.22,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[37.597,18.475],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Pieces","np":6,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.192,"y":1},"o":{"x":0.333,"y":0},"n":"0p192_1_0p333_0","t":98,"s":[{"i":[[-0.64,0.5],[1.807,2.495],[1.699,2.011],[0.776,0.981],[-1.192,0.674],[-3.179,-1.411],[-0.818,-0.953],[-1.25,-0.617],[1.375,-2.198]],"o":[[0,0],[-4.89,-6.75],[-1.758,-2.081],[-2.441,-3.087],[1.045,-0.591],[1.225,0.544],[0.676,0.787],[0,0],[-1.375,2.199]],"v":[[7.706,-2.572],[4.68,-7.801],[-0.755,-14.537],[-4.447,-18.656],[-7.134,-23.105],[-3.175,-23.1],[0.249,-20.218],[2.665,-17.253],[10.318,-3.033]],"c":true}],"e":[{"i":[[-0.64,0.5],[3.095,7.74],[-0.457,4.786],[-0.721,1.022],[-4.169,2.874],[-3.44,-0.516],[-2.418,-1.104],[-1.25,-0.617],[1.375,-2.198]],"o":[[0,0],[-3.095,-7.739],[0.457,-4.786],[0.721,-1.022],[4.169,-2.873],[3.441,0.515],[2.419,1.103],[0,0],[-1.375,2.199]],"v":[[-9.356,28.428],[-20.57,16.012],[-22.693,-3.225],[-18.697,-13.406],[-8.697,-24.167],[5.575,-28.412],[17.749,-27.343],[23.665,-24.378],[10.318,-3.033]],"c":true}]},{"i":{"x":0.192,"y":1},"o":{"x":0.333,"y":0},"n":"0p192_1_0p333_0","t":106,"s":[{"i":[[-0.64,0.5],[3.095,7.74],[-0.457,4.786],[-0.721,1.022],[-4.169,2.874],[-3.44,-0.516],[-2.418,-1.104],[-1.25,-0.617],[1.375,-2.198]],"o":[[0,0],[-3.095,-7.739],[0.457,-4.786],[0.721,-1.022],[4.169,-2.873],[3.441,0.515],[2.419,1.103],[0,0],[-1.375,2.199]],"v":[[-9.356,28.428],[-20.57,16.012],[-22.693,-3.225],[-18.697,-13.406],[-8.697,-24.167],[5.575,-28.412],[17.749,-27.343],[23.665,-24.378],[10.318,-3.033]],"c":true}],"e":[{"i":[[-0.64,0.5],[3.095,7.74],[-0.457,4.786],[-0.721,1.022],[-4.169,2.874],[-3.44,-0.516],[-2.418,-1.104],[-1.25,-0.617],[1.375,-2.198]],"o":[[0,0],[-3.095,-7.739],[0.457,-4.786],[0.721,-1.022],[4.169,-2.873],[3.441,0.515],[2.419,1.103],[0,0],[-1.375,2.199]],"v":[[-9.356,28.428],[-20.57,16.012],[-22.693,-3.225],[-18.697,-13.406],[-8.697,-24.167],[5.575,-28.412],[17.749,-27.343],[23.665,-24.378],[10.318,-3.033]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.808,"y":0},"n":"0p667_1_0p808_0","t":191,"s":[{"i":[[-0.64,0.5],[3.095,7.74],[-0.457,4.786],[-0.721,1.022],[-4.169,2.874],[-3.44,-0.516],[-2.418,-1.104],[-1.25,-0.617],[1.375,-2.198]],"o":[[0,0],[-3.095,-7.739],[0.457,-4.786],[0.721,-1.022],[4.169,-2.873],[3.441,0.515],[2.419,1.103],[0,0],[-1.375,2.199]],"v":[[-9.356,28.428],[-20.57,16.012],[-22.693,-3.225],[-18.697,-13.406],[-8.697,-24.167],[5.575,-28.412],[17.749,-27.343],[23.665,-24.378],[10.318,-3.033]],"c":true}],"e":[{"i":[[-0.64,0.5],[1.807,2.495],[1.699,2.011],[0.776,0.981],[-1.192,0.674],[-3.179,-1.411],[-0.818,-0.953],[-1.25,-0.617],[1.375,-2.198]],"o":[[0,0],[-4.89,-6.75],[-1.758,-2.081],[-2.441,-3.087],[1.045,-0.591],[1.225,0.544],[0.676,0.787],[0,0],[-1.375,2.199]],"v":[[7.706,-2.572],[4.68,-7.801],[-0.755,-14.537],[-4.447,-18.656],[-7.134,-23.105],[-3.175,-23.1],[0.249,-20.218],[2.665,-17.253],[10.318,-3.033]],"c":true}]},{"t":199}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.937,0.949,0.745,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[25.24,30.375],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"White","np":2,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":103,"s":[{"i":[[-0.002,0.002],[0.01,0.025],[-0.001,0.016],[-0.002,0.003],[-0.014,0.009],[-0.011,-0.002],[-0.008,-0.004],[-0.004,-0.002],[0.004,-0.007]],"o":[[0,0],[-0.01,-0.025],[0.001,-0.016],[0.002,-0.003],[0.014,-0.009],[0.011,0.002],[0.008,0.004],[0,0],[-0.004,0.007]],"v":[[7.781,-5.531],[7.744,-5.572],[7.738,-5.635],[7.75,-5.67],[7.783,-5.705],[7.831,-5.719],[7.872,-5.716],[7.891,-5.706],[7.846,-5.635]],"c":true}],"e":[{"i":[[-0.613,0.479],[2.967,7.418],[-0.438,4.589],[-0.69,0.979],[-3.996,2.754],[-3.298,-0.494],[-2.318,-1.057],[-1.198,-0.591],[1.318,-2.108]],"o":[[0,0],[-2.967,-7.418],[0.438,-4.588],[0.691,-0.98],[3.997,-2.755],[3.297,0.494],[2.319,1.058],[0,0],[-1.318,2.108]],"v":[[-9.289,27.92],[-20.189,15.615],[-22.017,-3.079],[-18.607,-13.294],[-8.645,-23.607],[5.498,-27.905],[17.53,-26.873],[23.155,-24.011],[9.957,-3.018]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"n":"0_1_0p167_0p167","t":105,"s":[{"i":[[-0.613,0.479],[2.967,7.418],[-0.438,4.589],[-0.69,0.979],[-3.996,2.754],[-3.298,-0.494],[-2.318,-1.057],[-1.198,-0.591],[1.318,-2.108]],"o":[[0,0],[-2.967,-7.418],[0.438,-4.588],[0.691,-0.98],[3.997,-2.755],[3.297,0.494],[2.319,1.058],[0,0],[-1.318,2.108]],"v":[[-9.289,27.92],[-20.189,15.615],[-22.017,-3.079],[-18.607,-13.294],[-8.645,-23.607],[5.498,-27.905],[17.53,-26.873],[23.155,-24.011],[9.957,-3.018]],"c":true}],"e":[{"i":[[-0.654,0.511],[3.164,7.912],[-0.467,4.894],[-0.736,1.044],[-4.262,2.937],[-3.518,-0.527],[-2.472,-1.128],[-1.278,-0.63],[1.405,-2.248]],"o":[[0,0],[-3.164,-7.912],[0.467,-4.893],[0.737,-1.045],[4.263,-2.938],[3.517,0.527],[2.473,1.128],[0,0],[-1.406,2.248]],"v":[[-9.907,29.779],[-21.532,16.654],[-23.482,-3.284],[-19.846,-14.179],[-9.221,-25.179],[5.864,-29.763],[18.696,-28.662],[24.696,-25.61],[10.619,-3.219]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"n":"0_1_0p167_0","t":108,"s":[{"i":[[-0.654,0.511],[3.164,7.912],[-0.467,4.894],[-0.736,1.044],[-4.262,2.937],[-3.518,-0.527],[-2.472,-1.128],[-1.278,-0.63],[1.405,-2.248]],"o":[[0,0],[-3.164,-7.912],[0.467,-4.893],[0.737,-1.045],[4.263,-2.938],[3.517,0.527],[2.473,1.128],[0,0],[-1.406,2.248]],"v":[[-9.907,29.779],[-21.532,16.654],[-23.482,-3.284],[-19.846,-14.179],[-9.221,-25.179],[5.864,-29.763],[18.696,-28.662],[24.696,-25.61],[10.619,-3.219]],"c":true}],"e":[{"i":[[-0.654,0.511],[3.164,7.912],[-0.467,4.894],[-0.736,1.044],[-4.262,2.937],[-3.518,-0.527],[-2.472,-1.128],[-1.278,-0.63],[1.405,-2.248]],"o":[[0,0],[-3.164,-7.912],[0.467,-4.893],[0.737,-1.045],[4.263,-2.938],[3.517,0.527],[2.473,1.128],[0,0],[-1.406,2.248]],"v":[[-9.907,29.779],[-21.532,16.654],[-23.482,-3.284],[-19.846,-14.179],[-9.221,-25.179],[5.864,-29.763],[18.696,-28.662],[24.696,-25.61],[10.619,-3.219]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":1,"y":0},"n":"0p833_0p833_1_0","t":191,"s":[{"i":[[-0.654,0.511],[3.164,7.912],[-0.467,4.894],[-0.736,1.044],[-4.262,2.937],[-3.518,-0.527],[-2.472,-1.128],[-1.278,-0.63],[1.405,-2.248]],"o":[[0,0],[-3.164,-7.912],[0.467,-4.893],[0.737,-1.045],[4.263,-2.938],[3.517,0.527],[2.473,1.128],[0,0],[-1.406,2.248]],"v":[[-9.907,29.779],[-21.532,16.654],[-23.482,-3.284],[-19.846,-14.179],[-9.221,-25.179],[5.864,-29.763],[18.696,-28.662],[24.696,-25.61],[10.619,-3.219]],"c":true}],"e":[{"i":[[-0.613,0.479],[2.967,7.418],[-0.438,4.589],[-0.69,0.979],[-3.996,2.754],[-3.298,-0.494],[-2.318,-1.057],[-1.198,-0.591],[1.318,-2.108]],"o":[[0,0],[-2.967,-7.418],[0.438,-4.588],[0.691,-0.98],[3.997,-2.755],[3.297,0.494],[2.319,1.058],[0,0],[-1.318,2.108]],"v":[[-9.289,27.92],[-20.189,15.615],[-22.017,-3.079],[-18.607,-13.294],[-8.645,-23.607],[5.498,-27.905],[17.53,-26.873],[23.155,-24.011],[9.957,-3.018]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":194,"s":[{"i":[[-0.613,0.479],[2.967,7.418],[-0.438,4.589],[-0.69,0.979],[-3.996,2.754],[-3.298,-0.494],[-2.318,-1.057],[-1.198,-0.591],[1.318,-2.108]],"o":[[0,0],[-2.967,-7.418],[0.438,-4.588],[0.691,-0.98],[3.997,-2.755],[3.297,0.494],[2.319,1.058],[0,0],[-1.318,2.108]],"v":[[-9.289,27.92],[-20.189,15.615],[-22.017,-3.079],[-18.607,-13.294],[-8.645,-23.607],[5.498,-27.905],[17.53,-26.873],[23.155,-24.011],[9.957,-3.018]],"c":true}],"e":[{"i":[[-0.002,0.002],[0.01,0.025],[-0.001,0.016],[-0.002,0.003],[-0.014,0.009],[-0.011,-0.002],[-0.008,-0.004],[-0.004,-0.002],[0.004,-0.007]],"o":[[0,0],[-0.01,-0.025],[0.001,-0.016],[0.002,-0.003],[0.014,-0.009],[0.011,0.002],[0.008,0.004],[0,0],[-0.004,0.007]],"v":[[7.781,-5.531],[7.744,-5.572],[7.738,-5.635],[7.75,-5.67],[7.783,-5.705],[7.831,-5.719],[7.872,-5.716],[7.891,-5.706],[7.846,-5.635]],"c":true}]},{"t":196}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.615,0.796,0.081,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[24.946,30.54],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Schil","np":2,"mn":"ADBE Vector Group"}],"ip":98,"op":199,"st":-2,"bm":0,"sr":1},{"ddd":0,"ind":21,"ty":4,"nm":"olive2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[544.717,182.086,0]},"a":{"a":0,"k":[13.215,15.58,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":23,"s":[{"i":[[-0.102,-0.927],[0.441,-0.161],[0.101,0.927],[-0.441,0.161]],"o":[[0.102,0.927],[-0.441,0.161],[-0.101,-0.927],[0.441,-0.161]],"v":[[-316.194,-28.717],[-316.808,-26.747],[-317.789,-28.134],[-317.175,-30.104]],"c":true}],"e":[{"i":[[-1.133,-6.494],[4.946,-1.006],[1.131,6.494],[-4.947,1.005]],"o":[[1.133,6.494],[-4.946,1.006],[-1.131,-6.494],[4.947,-1.005]],"v":[[-310.89,-78.422],[-317.796,-64.842],[-328.804,-74.78],[-321.897,-88.36]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[{"i":[[-1.133,-6.494],[4.946,-1.006],[1.131,6.494],[-4.947,1.005]],"o":[[1.133,6.494],[-4.946,1.006],[-1.131,-6.494],[4.947,-1.005]],"v":[[-310.89,-78.422],[-317.796,-64.842],[-328.804,-74.78],[-321.897,-88.36]],"c":true}],"e":[{"i":[[-1.454,-7.813],[6.356,-1.183],[1.452,7.812],[-6.356,1.182]],"o":[[1.454,7.812],[-6.356,1.183],[-1.452,-7.812],[6.356,-1.182]],"v":[[-283.741,-2.893],[-292.616,13.394],[-306.759,1.392],[-297.883,-14.896]],"c":true}]},{"i":{"x":0.176,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p176_1_0p167_0p167","t":38,"s":[{"i":[[-1.454,-7.813],[6.356,-1.183],[1.452,7.812],[-6.356,1.182]],"o":[[1.454,7.812],[-6.356,1.183],[-1.452,-7.812],[6.356,-1.182]],"v":[[-283.741,-2.893],[-292.616,13.394],[-306.759,1.392],[-297.883,-14.896]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"n":"0p833_1_0p333_0","t":71,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":87,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.742,2.399],[-262.891,14.394],[-271.757,-1.899],[-257.607,-13.894]],"c":true}],"e":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.242,4.899],[-262.391,16.894],[-271.257,0.601],[-257.107,-11.394]],"c":true}]},{"i":{"x":0.164,"y":1},"o":{"x":0.167,"y":0},"n":"0p164_1_0p167_0","t":92,"s":[{"i":[[1.459,-7.812],[6.355,1.187],[-1.461,7.81],[-6.355,-1.188]],"o":[[-1.459,7.811],[-6.355,-1.187],[1.461,-7.81],[6.355,1.188]],"v":[[-248.242,4.899],[-262.391,16.894],[-271.257,0.601],[-257.107,-11.394]],"c":true}],"e":[{"i":[[1.27,-0.048],[0.274,1.074],[-0.838,0.025],[-0.173,-0.881]],"o":[[-1.27,0.048],[-0.274,-1.074],[0.838,-0.025],[0.173,0.881]],"v":[[-281.142,-49.339],[-299.611,-61.999],[-285.683,-82.317],[-267.214,-69.658]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"n":"0_1_0p333_0","t":101,"s":[{"i":[[1.27,-0.048],[0.274,1.074],[-0.838,0.025],[-0.173,-0.881]],"o":[[-1.27,0.048],[-0.274,-1.074],[0.838,-0.025],[0.173,0.881]],"v":[[-281.142,-49.339],[-299.611,-61.999],[-285.683,-82.317],[-267.214,-69.658]],"c":true}],"e":[{"i":[[0.694,-1.065],[1.035,0.396],[-0.463,0.698],[-0.819,-0.367]],"o":[[-0.694,1.065],[-1.035,-0.396],[0.463,-0.698],[0.819,0.367]],"v":[[-265.902,96.38],[-286.899,104.157],[-295.456,81.057],[-274.459,73.28]],"c":true}]},{"t":132}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1_0p333_0"],"t":94,"s":[0.997,0.921,0.777,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0.333]},"n":["0p833_0p833_0p333_0p333"],"t":99,"s":[0.848,0.966,1,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":107,"s":[0.848,0.966,1,1],"e":[0.576,0.341,0.31,1]},{"t":108}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[13.215,15.581],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":0,"mn":"ADBE Vector Group"}],"ip":23,"op":98,"st":36,"bm":0,"sr":1},{"ddd":0,"ind":22,"ty":4,"nm":"olive1","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[538.463,199.399,0]},"a":{"a":0,"k":[11.099,12.419,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":25,"s":[{"i":[[-0.161,-0.807],[0.701,-0.14],[0.161,0.807],[-0.701,0.14]],"o":[[0.161,0.807],[-0.701,0.14],[-0.161,-0.807],[0.701,-0.14]],"v":[[-305.699,-41.255],[-306.676,-39.539],[-308.237,-40.747],[-307.26,-42.463]],"c":true}],"e":[{"i":[[-1.356,-6.776],[5.884,-1.177],[1.354,6.777],[-5.883,1.176]],"o":[[1.356,6.776],[-5.883,1.177],[-1.354,-6.777],[5.884,-1.177]],"v":[[-297.461,-69.978],[-305.66,-55.576],[-318.768,-65.715],[-310.569,-80.116]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":31,"s":[{"i":[[-1.356,-6.776],[5.884,-1.177],[1.354,6.777],[-5.883,1.176]],"o":[[1.356,6.776],[-5.883,1.177],[-1.354,-6.777],[5.884,-1.177]],"v":[[-297.461,-69.978],[-305.66,-55.576],[-318.768,-65.715],[-310.569,-80.116]],"c":true}],"e":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-293.92,-46.936],[-301.365,-33.86],[-313.267,-43.066],[-305.822,-56.142]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":34,"s":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-293.92,-46.936],[-301.365,-33.86],[-313.267,-43.066],[-305.822,-56.142]],"c":true}],"e":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-280.42,-1.936],[-287.865,11.14],[-299.767,1.934],[-292.322,-11.142]],"c":true}]},{"i":{"x":0.176,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p176_1_0p167_0p167","t":38,"s":[{"i":[[-1.231,-6.153],[5.343,-1.069],[1.229,6.153],[-5.342,1.068]],"o":[[1.231,6.153],[-5.342,1.069],[-1.229,-6.153],[5.343,-1.068]],"v":[[-280.42,-1.936],[-287.865,11.14],[-299.767,1.934],[-292.322,-11.142]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"n":"0p833_1_0p333_0","t":73,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":88,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-250.396,1.811],[-262.18,11.168],[-269.791,-1.812],[-258.007,-11.169]],"c":true}],"e":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-251.146,5.811],[-262.93,15.168],[-270.541,2.188],[-258.757,-7.169]],"c":true}]},{"i":{"x":0.164,"y":1},"o":{"x":0.167,"y":0},"n":"0p164_1_0p167_0","t":92,"s":[{"i":[[1.152,-6.168],[5.356,1],[-1.154,6.168],[-5.355,-1.001]],"o":[[-1.152,6.168],[-5.355,-1],[1.154,-6.168],[5.356,1.001]],"v":[[-251.146,5.811],[-262.93,15.168],[-270.541,2.188],[-258.757,-7.169]],"c":true}],"e":[{"i":[[0.967,-0.741],[0.81,0.688],[-0.641,0.484],[-0.623,-0.593]],"o":[[-0.967,0.741],[-0.81,-0.688],[0.641,-0.484],[0.623,0.593]],"v":[[-278.642,-38.816],[-300.097,-38.472],[-300.475,-62.077],[-279.02,-62.42]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.333,"y":0},"n":"0_1_0p333_0","t":101,"s":[{"i":[[0.967,-0.741],[0.81,0.688],[-0.641,0.484],[-0.623,-0.593]],"o":[[-0.967,0.741],[-0.81,-0.688],[0.641,-0.484],[0.623,0.593]],"v":[[-278.642,-38.816],[-300.097,-38.472],[-300.475,-62.077],[-279.02,-62.42]],"c":true}],"e":[{"i":[[1.207,-0.399],[0.562,0.955],[-0.798,0.257],[-0.411,-0.798]],"o":[[-1.207,0.399],[-0.562,-0.955],[0.798,-0.257],[0.411,0.798]],"v":[[-288.256,111.016],[-309.519,103.999],[-301.799,80.606],[-280.536,87.623]],"c":true}]},{"t":132}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[1.821]},"o":{"x":[0.333],"y":[0]},"n":["0p833_1p821_0p333_0"],"t":94,"s":[0.995,0.751,0.324,1],"e":[0.848,0.966,1,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":106,"s":[0.848,0.966,1,1],"e":[0.576,0.341,0.31,1]},{"i":{"x":[0.667],"y":[0.667]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_0p667_0p167_0p167"],"t":107,"s":[0.576,0.341,0.31,1],"e":[0.576,0.341,0.31,1]},{"t":115}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[13.215,15.581],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":25,"op":98,"st":38,"bm":0,"sr":1},{"ddd":0,"ind":23,"ty":4,"nm":"Stick","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[536.96,205.096,0]},"a":{"a":0,"k":[18.577,47.1,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":25,"s":[{"i":[[0,0],[-0.119,-0.255],[0,0],[0,0],[0,0],[0,0],[0.493,-0.059],[-0.06,-0.492]],"o":[[0.017,0.043],[0.119,0.255],[0,0],[0,0],[0,0],[-0.06,-0.492],[-0.492,0.059],[0,0]],"v":[[-329.184,-140.584],[-328.925,-140.019],[-328.692,-139.519],[-328.576,-140.052],[-328.46,-140.585],[-329.159,-147.174],[-330.159,-147.958],[-330.942,-146.959]],"c":true}],"e":[{"i":[[0,0],[-0.119,-0.255],[0,0],[0,0],[0,0],[0,0],[0.493,-0.059],[-0.06,-0.492]],"o":[[0.017,0.043],[0.119,0.255],[0,0],[0,0],[0,0],[-0.06,-0.492],[-0.492,0.059],[0,0]],"v":[[-309.934,-76.584],[-309.675,-76.019],[-309.442,-75.519],[-309.326,-76.052],[-309.21,-76.585],[-314.159,-122.174],[-315.159,-122.958],[-315.942,-121.959]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":30,"s":[{"i":[[0,0],[-0.119,-0.255],[0,0],[0,0],[0,0],[0,0],[0.493,-0.059],[-0.06,-0.492]],"o":[[0.017,0.043],[0.119,0.255],[0,0],[0,0],[0,0],[-0.06,-0.492],[-0.492,0.059],[0,0]],"v":[[-309.934,-76.584],[-309.675,-76.019],[-309.442,-75.519],[-309.326,-76.052],[-309.21,-76.585],[-314.159,-122.174],[-315.159,-122.958],[-315.942,-121.959]],"c":true}],"e":[{"i":[[0,0],[-0.177,-0.561],[0,0],[0,0],[0,0],[0,0],[1.036,0.009],[0.009,-1.035]],"o":[[0.024,0.094],[0.177,0.56],[0,0],[0,0],[0,0],[0.009,-1.035],[-1.034,-0.009],[0,0]],"v":[[-288.968,39.991],[-288.584,41.23],[-288.236,42.327],[-287.853,41.255],[-287.47,40.182],[-285.48,-49.777],[-287.339,-51.668],[-289.23,-49.81]],"c":true}]},{"i":{"x":0.176,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p176_1_0p167_0p167","t":38,"s":[{"i":[[0,0],[-0.177,-0.561],[0,0],[0,0],[0,0],[0,0],[1.036,0.009],[0.009,-1.035]],"o":[[0.024,0.094],[0.177,0.56],[0,0],[0,0],[0,0],[0.009,-1.035],[-1.034,-0.009],[0,0]],"v":[[-288.968,39.991],[-288.584,41.23],[-288.236,42.327],[-287.853,41.255],[-287.47,40.182],[-285.48,-49.777],[-287.339,-51.668],[-289.23,-49.81]],"c":true}],"e":[{"i":[[0,0],[0.027,-0.588],[0,0],[0,0],[0,0],[0,0],[0.969,0.365],[0.365,-0.969]],"o":[[-0.011,0.096],[-0.027,0.588],[0,0],[0,0],[0,0],[0.365,-0.969],[-0.968,-0.365],[0,0]],"v":[[-277.96,44.403],[-278.026,45.699],[-278.077,46.85],[-277.348,45.975],[-276.619,45.1],[-241.788,-44.068],[-242.882,-46.485],[-245.297,-45.391]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"n":"0p833_1_0p333_0","t":71,"s":[{"i":[[0,0],[0.027,-0.588],[0,0],[0,0],[0,0],[0,0],[0.969,0.365],[0.365,-0.969]],"o":[[-0.011,0.096],[-0.027,0.588],[0,0],[0,0],[0,0],[0.365,-0.969],[-0.968,-0.365],[0,0]],"v":[[-277.96,44.403],[-278.026,45.699],[-278.077,46.85],[-277.348,45.975],[-276.619,45.1],[-241.788,-44.068],[-242.882,-46.485],[-245.297,-45.391]],"c":true}],"e":[{"i":[[0,0],[0.027,-0.588],[0,0],[0,0],[0,0],[0,0],[0.969,0.365],[0.365,-0.969]],"o":[[-0.011,0.096],[-0.027,0.588],[0,0],[0,0],[0,0],[0.365,-0.969],[-0.968,-0.365],[0,0]],"v":[[-277.96,44.403],[-278.026,45.699],[-278.077,46.85],[-277.348,45.975],[-276.619,45.1],[-241.788,-44.068],[-242.882,-46.485],[-245.297,-45.391]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":87,"s":[{"i":[[0,0],[0.027,-0.588],[0,0],[0,0],[0,0],[0,0],[0.969,0.365],[0.365,-0.969]],"o":[[-0.011,0.096],[-0.027,0.588],[0,0],[0,0],[0,0],[0.365,-0.969],[-0.968,-0.365],[0,0]],"v":[[-277.96,44.403],[-278.026,45.699],[-278.077,46.85],[-277.348,45.975],[-276.619,45.1],[-241.788,-44.068],[-242.882,-46.485],[-245.297,-45.391]],"c":true}],"e":[{"i":[[0,0],[0.073,-0.583],[0,0],[0,0],[0,0],[0,0],[0.937,0.442],[0.441,-0.937]],"o":[[-0.018,0.096],[-0.074,0.583],[0,0],[0,0],[0,0],[0.441,-0.937],[-0.936,-0.441],[0,0]],"v":[[-282.193,46.06],[-282.362,47.346],[-282.505,48.489],[-281.708,47.675],[-280.912,46.861],[-239.081,-39.246],[-239.979,-41.741],[-242.473,-40.844]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0},"n":"0_1_0p167_0","t":92,"s":[{"i":[[0,0],[0.073,-0.583],[0,0],[0,0],[0,0],[0,0],[0.937,0.442],[0.441,-0.937]],"o":[[-0.018,0.096],[-0.074,0.583],[0,0],[0,0],[0,0],[0.441,-0.937],[-0.936,-0.441],[0,0]],"v":[[-282.193,46.06],[-282.362,47.346],[-282.505,48.489],[-281.708,47.675],[-280.912,46.861],[-239.081,-39.246],[-239.979,-41.741],[-242.473,-40.844]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-252.246,-125.864],[-258.077,-67.316],[-254.605,-67.316],[-248.489,-127.538],[-245.167,-163.366],[-246.188,-163.62],[-248.797,-163.85],[-249.227,-159.208]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.808,"y":0},"n":"0_1_0p808_0","t":94,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-252.246,-125.864],[-258.077,-67.316],[-254.605,-67.316],[-248.489,-127.538],[-245.167,-163.366],[-246.188,-163.62],[-248.797,-163.85],[-249.227,-159.208]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-248.246,-146.364],[-254.077,-87.816],[-248.73,-87.816],[-242.614,-148.038],[-239.292,-183.866],[-242.188,-184.12],[-244.797,-184.35],[-245.227,-179.708]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.808,"y":0},"n":"0p833_0p833_0p808_0","t":100,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-248.246,-146.364],[-254.077,-87.816],[-248.73,-87.816],[-242.614,-148.038],[-239.292,-183.866],[-242.188,-184.12],[-244.797,-184.35],[-245.227,-179.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-257.332,-67.413],[-260.942,-30.672],[-256.064,-28.141],[-251.7,-69.087],[-247.874,-105.319],[-250.77,-105.573],[-253.379,-105.803],[-254.919,-92.48]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":108,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-257.332,-67.413],[-260.942,-30.672],[-256.064,-28.141],[-251.7,-69.087],[-247.874,-105.319],[-250.77,-105.573],[-253.379,-105.803],[-254.919,-92.48]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-259.827,-40.441],[-255.605,-35.066],[-253.864,-50.288],[-249.917,-86.616],[-252.813,-86.87],[-255.422,-87.1],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":110,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-259.827,-40.441],[-255.605,-35.066],[-253.864,-50.288],[-249.917,-86.616],[-252.813,-86.87],[-255.422,-87.1],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.264],[-262.233,-17.393],[-256.89,-17.599],[-253.864,-50.288],[-250.184,-84.532],[-253.08,-84.786],[-255.689,-85.016],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":114,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.264],[-262.233,-17.393],[-256.89,-17.599],[-253.864,-50.288],[-250.184,-84.532],[-253.08,-84.786],[-255.689,-85.016],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-47.907],[-262.655,-12.323],[-257.31,-12.363],[-253.864,-50.288],[-250.455,-82.41],[-253.351,-82.664],[-255.96,-82.894],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":117,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-47.907],[-262.655,-12.323],[-257.31,-12.363],[-253.864,-50.288],[-250.455,-82.41],[-253.351,-82.664],[-255.96,-82.894],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-47.67],[-262.665,-14.151],[-257.257,-14.102],[-253.864,-50.288],[-250.636,-80.995],[-253.532,-81.249],[-256.141,-81.479],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":119,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-47.67],[-262.665,-14.151],[-257.257,-14.102],[-253.864,-50.288],[-250.636,-80.995],[-253.532,-81.249],[-256.141,-81.479],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-47.551],[-262.577,-16.003],[-257.23,-16.378],[-253.864,-50.288],[-250.726,-80.288],[-253.622,-80.542],[-256.231,-80.772],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.338,"y":1},"o":{"x":0.714,"y":0.714},"n":"0p338_1_0p714_0p714","t":120,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-47.551],[-262.577,-16.003],[-257.23,-16.378],[-253.864,-50.288],[-250.726,-80.288],[-253.622,-80.542],[-256.231,-80.772],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-47.972],[-261.765,-26.424],[-256.418,-26.65],[-253.864,-50.288],[-250.951,-78.536],[-253.847,-78.79],[-256.456,-79.02],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":124,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-47.972],[-261.765,-26.424],[-256.418,-26.65],[-253.864,-50.288],[-250.951,-78.536],[-253.847,-78.79],[-256.456,-79.02],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.311],[-261.694,-24.295],[-256.659,-23.277],[-253.864,-50.288],[-251.131,-77.126],[-254.027,-77.38],[-256.636,-77.61],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":129,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.311],[-261.694,-24.295],[-256.659,-23.277],[-253.864,-50.288],[-251.131,-77.126],[-254.027,-77.38],[-256.636,-77.61],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.503],[-262.505,-15.074],[-257.335,-14.953],[-253.864,-50.288],[-251.233,-76.325],[-254.129,-76.579],[-256.738,-76.809],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":133,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.503],[-262.505,-15.074],[-257.335,-14.953],[-253.864,-50.288],[-251.233,-76.325],[-254.129,-76.579],[-256.738,-76.809],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.577],[-262.929,-13.726],[-257.639,-13.124],[-253.864,-50.288],[-251.273,-76.016],[-254.169,-76.27],[-256.778,-76.5],[-257.227,-71.708]],"c":true}]},{"i":{"x":0.201,"y":1},"o":{"x":0.709,"y":0.709},"n":"0p201_1_0p709_0p709","t":136,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.577],[-262.929,-13.726],[-257.639,-13.124],[-253.864,-50.288],[-251.273,-76.016],[-254.169,-76.27],[-256.778,-76.5],[-257.227,-71.708]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-262.577,-15.066],[-257.418,-14.628],[-253.864,-50.288],[-251.292,-75.866],[-254.188,-76.12],[-256.797,-76.35],[-257.477,-70.271]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":142,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-262.577,-15.066],[-257.418,-14.628],[-253.864,-50.288],[-251.292,-75.866],[-254.188,-76.12],[-256.797,-76.35],[-257.477,-70.271]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-262.452,-18.253],[-257.105,-18.628],[-253.864,-50.288],[-251.292,-75.866],[-254.188,-76.12],[-256.797,-76.35],[-257.477,-69.021]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":155,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.093,-1.04]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-262.452,-18.253],[-257.105,-18.628],[-253.864,-50.288],[-251.292,-75.866],[-254.188,-76.12],[-256.797,-76.35],[-257.477,-69.021]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.392,-3.138]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-262.327,-17.128],[-257.105,-17.191],[-253.864,-50.288],[-251.292,-75.866],[-254.188,-76.12],[-256.797,-76.35],[-257.977,-65.458]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":177,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.392,-3.138]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-262.327,-17.128],[-257.105,-17.191],[-253.864,-50.288],[-251.292,-75.866],[-254.188,-76.12],[-256.797,-76.35],[-257.977,-65.458]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.392,-3.138]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-262.327,-17.128],[-257.105,-17.191],[-253.864,-50.288],[-251.292,-75.866],[-254.188,-76.12],[-256.797,-76.35],[-257.977,-65.458]],"c":true}]},{"i":{"x":0.833,"y":0.836},"o":{"x":0.898,"y":0},"n":"0p833_0p836_0p898_0","t":187,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.392,-3.138]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-259.496,-48.614],[-262.327,-17.128],[-257.105,-17.191],[-253.864,-50.288],[-251.292,-75.866],[-254.188,-76.12],[-256.797,-76.35],[-257.977,-65.458]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.394,0.124],[0,0],[0.017,-0.326]],"o":[[0.049,0.195],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-253.309,44.449],[-253.202,45.934],[-247.98,45.934],[-247.927,44.9],[-247.792,44.884],[-250.688,44.63],[-253.297,44.4],[-253.29,44.667]],"c":true}]},{"t":195}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[-0.199]},"n":["0p667_1_0p167_-0p199"],"t":91,"s":[0.998,0.651,0.128,1],"e":[0.116,0.073,0.086,1]},{"t":94}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[18.577,47.1],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":25,"op":196,"st":36,"bm":0,"sr":1},{"ddd":0,"ind":24,"ty":4,"nm":"Straw","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[470.915,162.13,0]},"a":{"a":0,"k":[3.334,23.37,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":111,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.397,0.065],[0,0],[0.048,-1.042]],"o":[[0.057,0.193],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-193.354,2.148],[-193.527,4.716],[-188.274,10.459],[-187.798,0.236],[-186.319,-25.428],[-189.223,-25.56],[-191.839,-25.678],[-192.071,-21.023]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.397,0.029],[0,0],[0.021,-1.043]],"o":[[0.062,0.191],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-196.615,3.562],[-197.168,31.263],[-191.155,30.859],[-191.112,1.512],[-190.301,-23.523],[-193.205,-23.581],[-195.822,-23.634],[-195.937,-18.977]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":117,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.397,0.029],[0,0],[0.021,-1.043]],"o":[[0.062,0.191],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-196.615,3.562],[-197.168,31.263],[-191.155,30.859],[-191.112,1.512],[-190.301,-23.523],[-193.205,-23.581],[-195.822,-23.634],[-195.937,-18.977]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.003],[0,0],[-0.003,-1.043]],"o":[[0.066,0.19],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-199.607,4.859],[-199.723,19.447],[-194.061,17.925],[-194.153,2.683],[-193.955,-21.775],[-196.859,-21.766],[-199.477,-21.758],[-199.484,-17.101]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":123,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.003],[0,0],[-0.003,-1.043]],"o":[[0.066,0.19],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-199.607,4.859],[-199.723,19.447],[-194.061,17.925],[-194.153,2.683],[-193.955,-21.775],[-196.859,-21.766],[-199.477,-21.758],[-199.484,-17.101]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.012],[0,0],[-0.009,-1.043]],"o":[[0.067,0.189],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-200.416,5.21],[-200.477,18.734],[-195.16,15.586],[-194.975,3],[-194.943,-21.302],[-197.847,-21.275],[-200.465,-21.251],[-200.443,-16.593]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":126,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.012],[0,0],[-0.009,-1.043]],"o":[[0.067,0.189],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-200.416,5.21],[-200.477,18.734],[-195.16,15.586],[-194.975,3],[-194.943,-21.302],[-197.847,-21.275],[-200.465,-21.251],[-200.443,-16.593]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.019],[0,0],[-0.015,-1.043]],"o":[[0.068,0.189],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-201.121,5.516],[-201.185,18.093],[-195.754,19.013],[-195.691,3.275],[-195.803,-20.891],[-198.708,-20.848],[-201.326,-20.809],[-201.278,-16.151]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":129,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.019],[0,0],[-0.015,-1.043]],"o":[[0.068,0.189],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-201.121,5.516],[-201.185,18.093],[-195.754,19.013],[-195.691,3.275],[-195.803,-20.891],[-198.708,-20.848],[-201.326,-20.809],[-201.278,-16.151]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.028],[0,0],[-0.021,-1.043]],"o":[[0.07,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-201.928,5.865],[-202.046,27.954],[-196.435,28.334],[-196.512,3.591],[-196.789,-20.419],[-199.693,-20.358],[-202.311,-20.303],[-202.235,-15.645]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":133,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.028],[0,0],[-0.021,-1.043]],"o":[[0.07,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-201.928,5.865],[-202.046,27.954],[-196.435,28.334],[-196.512,3.591],[-196.789,-20.419],[-199.693,-20.358],[-202.311,-20.303],[-202.235,-15.645]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.033],[0,0],[-0.025,-1.043]],"o":[[0.07,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-202.427,6.082],[-202.167,28.1],[-196.794,28.877],[-197.019,3.787],[-197.398,-20.128],[-200.303,-20.055],[-202.921,-19.99],[-202.827,-15.331]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":137,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.033],[0,0],[-0.025,-1.043]],"o":[[0.07,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-202.427,6.082],[-202.167,28.1],[-196.794,28.877],[-197.019,3.787],[-197.398,-20.128],[-200.303,-20.055],[-202.921,-19.99],[-202.827,-15.331]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.037],[0,0],[-0.028,-1.043]],"o":[[0.071,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-202.762,6.227],[-202.426,26.981],[-197.124,27.336],[-197.359,3.918],[-197.807,-19.932],[-200.712,-19.852],[-203.33,-19.78],[-203.224,-15.121]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"n":"0_1_0p167_0p167","t":143,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.037],[0,0],[-0.028,-1.043]],"o":[[0.071,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-202.762,6.227],[-202.426,26.981],[-197.124,27.336],[-197.359,3.918],[-197.807,-19.932],[-200.712,-19.852],[-203.33,-19.78],[-203.224,-15.121]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.038],[0,0],[-0.029,-1.043]],"o":[[0.071,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-202.868,6.273],[-202.508,25.639],[-197.228,25.12],[-197.467,3.959],[-197.936,-19.87],[-200.841,-19.788],[-203.46,-19.714],[-203.349,-15.055]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"n":"0p833_1_0p167_0","t":156,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.038],[0,0],[-0.029,-1.043]],"o":[[0.071,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-202.868,6.273],[-202.508,25.639],[-197.228,25.12],[-197.467,3.959],[-197.936,-19.87],[-200.841,-19.788],[-203.46,-19.714],[-203.349,-15.055]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.038],[0,0],[-0.029,-1.043]],"o":[[0.071,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-202.868,6.273],[-202.508,25.639],[-197.228,25.12],[-197.467,3.959],[-197.936,-19.87],[-200.841,-19.788],[-203.46,-19.714],[-203.349,-15.055]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"n":"0p833_0p833_0p167_0","t":187,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.038],[0,0],[-0.029,-1.043]],"o":[[0.071,0.188],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-202.868,6.273],[-202.508,25.639],[-197.228,25.12],[-197.467,3.959],[-197.936,-19.87],[-200.841,-19.788],[-203.46,-19.714],[-203.349,-15.055]],"c":true}],"e":[{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.398,-0.003],[0,0],[-0.029,-0.074]],"o":[[0.071,0.013],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-198.242,88.992],[-198.007,89.496],[-192.727,89.459],[-192.779,88.859],[-192.935,87.131],[-195.84,87.137],[-198.458,87.142],[-198.348,87.474]],"c":true}]},{"t":194}]},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.116,0.073,0.086,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[3.334,23.37],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":111,"op":195,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":25,"ty":4,"nm":"BG","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[250,250,0]},"a":{"a":0,"k":[250.25,250.25,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-250,250],[250,250],[250,-250],[-250,-250]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.275,0.196,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[250.25,250.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"mn":"ADBE Vector Group"}],"ip":0,"op":517,"st":0,"bm":0,"sr":1}]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/ripple_loading_animation.json b/platform_tools/android/apps/skottie/src/main/res/raw/ripple_loading_animation.json new file mode 100644 index 0000000000000..1935a0345592a --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/ripple_loading_animation.json @@ -0,0 +1 @@ +{"v":"4.10.1","fr":60,"ip":0,"op":120,"w":800,"h":800,"nm":"loading_animation","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":23,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":34,"s":[100],"e":[20]},{"t":69}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0_1_0p333_0","0_1_0p333_0"],"t":23,"s":[400,400],"e":[440,440]},{"i":{"x":[0.009,0.009],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p009_1_0p333_0","0p009_1_0p333_0"],"t":34,"s":[440,440],"e":[400,400]},{"t":59}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":4,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":23,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":34,"s":[10],"e":[5]},{"t":59}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":16,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":27,"s":[100],"e":[20]},{"t":62}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":16,"s":[320,320],"e":[360,360]},{"i":{"x":[0.025,0.025],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p025_1_0p333_0","0p025_1_0p333_0"],"t":27,"s":[360,360],"e":[320,320]},{"t":52}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":27,"s":[10],"e":[5]},{"t":52}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":9,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":20,"s":[100],"e":[20]},{"t":55}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":9,"s":[240,240],"e":[280,280]},{"i":{"x":[0.051,0.051],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p051_1_0p333_0","0p051_1_0p333_0"],"t":20,"s":[280,280],"e":[240,240]},{"t":45}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":9,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20,"s":[10],"e":[5]},{"t":45}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":2,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":13,"s":[100],"e":[20]},{"t":48}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":2,"s":[160,160],"e":[200,200]},{"i":{"x":[0.034,0.034],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p034_1_0p333_0","0p034_1_0p333_0"],"t":13,"s":[200,200],"e":[160,160]},{"t":38}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":2,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":13,"s":[10],"e":[5]},{"t":38}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[20],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":11,"s":[100],"e":[20]},{"t":46}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":0,"s":[80,80],"e":[120,120]},{"i":{"x":[0,0],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0_1_0p333_0","0_1_0p333_0"],"t":11,"s":[120,120],"e":[80,80]},{"t":36}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gs","o":{"a":0,"k":100,"ix":9},"w":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[5],"e":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":11,"s":[10],"e":[5]},{"t":35}],"ix":10},"g":{"p":3,"k":{"a":0,"k":[0,0,0.627,1,0.5,0.496,0.314,1,1,0.992,0,1],"ix":8}},"s":{"a":0,"k":[0,0],"ix":4},"e":{"a":0,"k":[100,0],"ix":5},"t":1,"lc":1,"lj":1,"ml":4,"nm":"Gradient Stroke 1","mn":"ADBE Vector Graphic - G-Stroke","hd":false}],"ip":0,"op":120,"st":0,"bm":0}]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/signature.json b/platform_tools/android/apps/skottie/src/main/res/raw/signature.json new file mode 100644 index 0000000000000..322fa1cd8fefb --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/signature.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":100,"w":700,"h":700,"nm":"3 Signature","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"pen flow","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.21],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[44]},{"t":28.75,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.21,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[459.819,529.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.32,"y":0.32},"o":{"x":0.167,"y":0.167},"t":28.75,"s":[170.819,529.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.33,"y":1},"o":{"x":0.622,"y":0},"t":51.25,"s":[170.819,529.724,0],"to":[0,0,0],"ti":[0,0,0]},{"t":100,"s":[235.819,529.724,0]}],"ix":2},"a":{"a":0,"k":[60,60,0],"ix":1},"s":{"a":0,"k":[50,50,100],"ix":6}},"ao":0,"ip":0,"op":100,"st":-100,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"pen","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.67],"y":[0]},"t":12.5,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[-27]},{"t":72.5,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.784,"y":0.39},"o":{"x":0.475,"y":0},"t":12.5,"s":[60,60,0],"to":[-0.178,14.879,0],"ti":[-4.407,-14.192,0]},{"i":{"x":0.685,"y":0.653},"o":{"x":0.353,"y":0.319},"t":32.175,"s":[65.092,118.144,0],"to":[0.826,3.197,0],"ti":[-2.907,-1.537,0]},{"i":{"x":0.673,"y":0.663},"o":{"x":0.339,"y":0.329},"t":33.763,"s":[71.773,131.025,0],"to":[0.012,0.003,0],"ti":[-3.635,-0.42,0]},{"i":{"x":0.681,"y":0.658},"o":{"x":0.348,"y":0.324},"t":34.235,"s":[76.639,132.104,0],"to":[1.714,-0.433,0],"ti":[-4.961,2.996,0]},{"i":{"x":0.705,"y":0.649},"o":{"x":0.376,"y":0.313},"t":35.306,"s":[88.016,126.971,0],"to":[10.095,-5.755,0],"ti":[-11.694,7.814,0]},{"i":{"x":0.706,"y":0.655},"o":{"x":0.403,"y":0.312},"t":37.936,"s":[121.198,105.365,0],"to":[45.907,-31.157,0],"ti":[-20.497,-10.677,0]},{"i":{"x":0.652,"y":0.671},"o":{"x":0.329,"y":0.335},"t":42.141,"s":[206.74,68.347,0],"to":[20.002,9.824,0],"ti":[0.362,-14.641,0]},{"i":{"x":0.646,"y":0.673},"o":{"x":0.316,"y":0.338},"t":44.181,"s":[217.524,117.758,0],"to":[-0.512,16.815,0],"ti":[-18.785,5.593,0]},{"i":{"x":0.621,"y":0.684},"o":{"x":0.295,"y":0.348},"t":45.559,"s":[238.93,126.117,0],"to":[13.789,-4.207,0],"ti":[-16.675,-2.709,0]},{"i":{"x":0.654,"y":0.673},"o":{"x":0.321,"y":0.339},"t":48.136,"s":[285.852,120.106,0],"to":[4.121,0.47,0],"ti":[-3.8,-1.384,0]},{"i":{"x":0.628,"y":0.69},"o":{"x":0.298,"y":0.355},"t":48.974,"s":[297.71,123.101,0],"to":[8.288,2.288,0],"ti":[-11.211,-6.489,0]},{"i":{"x":0.51,"y":1},"o":{"x":0.206,"y":0.603},"t":51.713,"s":[324.584,139.737,0],"to":[13.591,7.867,0],"ti":[-15.461,2.828,0]},{"t":72.5,"s":[392.161,137.098,0]}],"ix":2},"a":{"a":0,"k":[4.384,415.148,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[145.597,232.901],[90.456,210.059],[35.54,187.31],[284.218,-411.76],[394.278,-366.178]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-22.235,-9.223],[-1.483,-4.422],[0,0]],"o":[[0,0],[4.178,-2.089],[22.253,9.214],[0,0],[0,0]],"v":[[301.939,-406.707],[321.477,-453.863],[364.057,-446.756],[399.194,-421.673],[379.662,-374.512]],"c":false},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[22.491,-29.369],[0,0],[-16.324,49.04]],"o":[[-23.133,46.21],[0,0],[4.861,-36.668],[0,0]],"v":[[145.597,232.901],[39.566,388.974],[1.074,373.032],[35.54,187.31]],"c":false},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.066666666667,0.254901960784,0.549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9.259,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 2","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.227450995352,0.552941176471,0.870588295133,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":5,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-2.957,7.125],[0,0]],"o":[[0,0],[0,0]],"v":[[4.863,415.296],[18.915,381.376]],"c":false},"ix":2},"nm":"Path 5","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-2.956,7.125],[0,0],[-15.046,6.23],[-11.221,-1.93]],"o":[[0,0],[6.23,-15.046],[10.762,-4.466],[0,0]],"v":[[115.963,-126.708],[201.311,-332.76],[234.306,-365.755],[267.83,-369.497]],"c":false},"ix":2},"nm":"Path 4","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.541176470588,0.717647058824,0.913725550034,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9.259,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":100,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"signature","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[279.627,343.231,0],"ix":2},"a":{"a":0,"k":[417.952,600.055,0],"ix":1},"s":{"a":0,"k":[50,50,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.903,8.092],[13.591,7.867],[8.288,2.288],[4.121,0.47],[13.789,-4.206],[-0.512,16.815],[20.002,9.824],[45.907,-31.157],[10.095,-5.755],[1.714,-0.433],[0.012,0.003],[0.826,3.197],[-0.178,14.879]],"o":[[-15.461,2.828],[-11.211,-6.489],[-3.8,-1.384],[-16.675,-2.709],[-18.785,5.593],[0.362,-14.641],[-20.497,-10.677],[-11.694,7.814],[-4.961,2.996],[-3.635,-0.42],[-2.907,-1.537],[-4.407,-14.192],[-4.202,9.26]],"v":[[-68.807,447.731],[-136.383,450.37],[-163.257,433.734],[-175.115,430.739],[-222.038,436.75],[-243.444,428.391],[-254.228,378.98],[-339.769,415.998],[-372.951,437.605],[-384.329,442.737],[-389.195,441.658],[-395.876,428.777],[-400.967,370.633]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.066666666667,0.254901960784,0.549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9.259,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[365.102,1012.224],"ix":2},"a":{"a":0,"k":[-234.898,412.224],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Layer 7","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.25],"y":[1]},"o":{"x":[0.75],"y":[0]},"t":162.784,"s":[100]},{"t":177.5,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.249],"y":[1]},"o":{"x":[0.355],"y":[0]},"t":27.5,"s":[100]},{"t":67.5,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":2,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":100,"st":-116.25,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"lines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[279.627,343.231,0],"ix":2},"a":{"a":0,"k":[417.952,600.055,0],"ix":1},"s":{"a":0,"k":[50,50,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-158.529,188.257],[-396.527,188.257]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.066666666667,0.254901960784,0.549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9.259,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[322.472,788.257],"ix":2},"a":{"a":0,"k":[-277.528,188.257],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Layer 5","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[26.346,-407.41],[-255.569,-407.41]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.066666666667,0.254901960784,0.549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9.259,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[485.388,192.59],"ix":2},"a":{"a":0,"k":[-114.612,-407.41],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Layer 4","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-158.529,-21.566],[-396.527,-21.566]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.066666666667,0.254901960784,0.549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9.259,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[322.472,578.434],"ix":2},"a":{"a":0,"k":[-277.528,-21.566],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Layer 3","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.52,13.483],[0,0]],"o":[[0,0],[0,0]],"v":[[-8.303,-144.014],[-396.527,-144.014]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.066666666667,0.254901960784,0.549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9.259,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[397.585,455.986],"ix":2},"a":{"a":0,"k":[-202.415,-144.014],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Layer 2","np":1,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[32.431,-266.453],[-396.527,-266.453]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.066666666667,0.254901960784,0.549019607843,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":9.259,"ix":5},"lc":1,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[417.952,333.547],"ix":2},"a":{"a":0,"k":[-182.048,-266.453],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Layer 1","np":1,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.25],"y":[1]},"o":{"x":[0.75],"y":[0]},"t":159.034,"s":[100]},{"t":173.75,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.28],"y":[1]},"o":{"x":[0.72],"y":[0]},"t":0,"s":[100]},{"t":35.318359375,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":2,"ix":6,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":100,"st":-116.25,"bm":0},{"ddd":0,"ind":5,"ty":1,"nm":"bg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[350,350,0],"ix":2},"a":{"a":0,"k":[350,350,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":700,"sh":700,"sc":"#ffffff","ip":0,"op":100,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/true_will.json b/platform_tools/android/apps/skottie/src/main/res/raw/true_will.json new file mode 100644 index 0000000000000..04f3936903c1b --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/true_will.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":80,"w":1500,"h":1500,"nm":"Comp 1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"THARSHIS Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[533.924,549.635,0],"ix":2},"a":{"a":0,"k":[636.226,-85.745,0],"ix":1},"s":{"a":0,"k":[88,88,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-27.817,-224],[-215.817,-224],[-215.817,64],[-27.817,64]],"c":true}]},{"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1430.822,-228],[-186.029,-224],[-186.029,64],[1419.843,65.021]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[155.612,-189.109],[9.364,-189.109],[9.364,-168.718],[70.02,-168.718],[70.02,0],[94.827,0],[94.827,-168.718],[155.612,-168.718]],"c":true},"ix":2},"nm":"T","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[82.979,-93.617],"ix":2},"a":{"a":0,"k":[82.979,-93.617],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"T","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[329.006,-189.109],[303.938,-189.109],[303.938,-107.803],[208.604,-107.803],[208.604,-189.109],[183.667,-189.109],[183.667,0],[208.604,0],[208.604,-87.411],[303.938,-87.411],[303.938,0],[329.006,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[255.319,-100],"ix":2},"a":{"a":0,"k":[255.319,-100],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[498.113,0],[523.7,0],[451.355,-189.109],[429.535,-189.109],[357.32,0],[383.037,0],[400.831,-49.485],[480.06,-49.485]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[440.445,-158.327],[472.656,-69.877],[408.364,-69.877]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[438.298,-91.489],"ix":2},"a":{"a":0,"k":[438.298,-91.489],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-6.364,8.747],[0,11.777],[11.472,9.699],[21.301,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[11.342,-4.329],[6.364,-8.745],[0,-18.529],[-11.474,-9.697],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[659.558,0],[686.313,0],[686.313,-1.559],[641.894,-81.826],[668.455,-101.438],[678.001,-132.221],[660.792,-174.563],[611.631,-189.109],[549.027,-189.109],[549.027,0],[574.095,0],[574.095,-76.501],[618.515,-76.501]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-6.971,-6.247],[0,-11.71],[7.316,-6.419],[12.381,0],[0,0]],"o":[[0,0],[13.161,0.087],[6.969,6.247],[0,10.758],[-7.318,6.419],[0,0],[0,0]],"v":[[574.095,-168.718],[612.28,-168.718],[642.478,-159.218],[652.934,-132.286],[641.958,-106.52],[612.41,-96.893],[574.095,-96.893]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[612.766,-97.872],"ix":2},"a":{"a":0,"k":[612.766,-97.872],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.494,-5.065],[0,-9.264],[7.014,-5.368],[13.161,0],[8.442,6.624],[0,11.43],[0,0],[-6.104,-8.658],[-11.257,-4.978],[-12.988,0],[-11.949,9.222],[0,15.326],[4.286,7.101],[8.875,5.325],[15.716,4.424],[6.537,5.335],[0,7.722],[-6.884,5.423],[-12.296,0],[-7.273,-6.559],[0,-11.47],[0,0],[5.585,8.832],[10.173,5.023],[12.988,0],[11.905,-9.741],[0,-14.892],[-9.741,-8.962],[-21.388,-6.147]],"o":[[6.494,5.065],[0,9.266],[-7.014,5.37],[-14.115,0],[-8.442,-6.624],[0,0],[0,10.997],[6.104,8.66],[11.255,4.978],[20.002,0],[11.949,-9.222],[0,-9.611],[-4.286,-7.099],[-8.877,-5.325],[-15.716,-4.424],[-6.539,-5.333],[0,-9.628],[6.884,-5.423],[13.248,0],[7.273,6.561],[0,0],[0,-10.476],[-5.585,-8.832],[-10.176,-5.021],[-19.05,0],[-11.907,9.741],[0,13.163],[9.741,8.962],[17.057,4.936]],"v":[[803.987,-69.292],[813.729,-47.797],[803.208,-25.847],[772.945,-17.794],[739.111,-27.73],[726.447,-54.811],[701.38,-54.811],[710.537,-25.327],[736.578,-4.871],[772.945,2.598],[820.872,-11.235],[838.796,-48.057],[832.367,-73.124],[812.625,-91.762],[775.738,-106.386],[742.358,-121.024],[732.552,-140.608],[742.877,-163.182],[771.646,-171.315],[802.429,-161.475],[813.339,-134.429],[838.406,-134.429],[830.029,-163.393],[806.39,-184.174],[771.646,-191.707],[725.213,-177.095],[707.354,-140.144],[721.966,-106.958],[768.659,-84.294]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[774.468,-91.489],"ix":2},"a":{"a":0,"k":[774.468,-91.489],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"S","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1016.086,-189.109],[991.019,-189.109],[991.019,-107.803],[895.685,-107.803],[895.685,-189.109],[870.747,-189.109],[870.747,0],[895.685,0],[895.685,-87.411],[991.019,-87.411],[991.019,0],[1016.086,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[942.553,-95.745],"ix":2},"a":{"a":0,"k":[942.553,-95.745],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1087.132,-189.109],[1062.194,-189.109],[1062.194,0],[1087.132,0]],"c":true},"ix":2},"nm":"I","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1072.34,-93.617],"ix":2},"a":{"a":0,"k":[1072.34,-93.617],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"I","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.494,-5.065],[0,-9.264],[7.014,-5.368],[13.161,0],[8.442,6.624],[0,11.43],[0,0],[-6.104,-8.658],[-11.257,-4.978],[-12.988,0],[-11.949,9.222],[0,15.326],[4.286,7.101],[8.875,5.325],[15.716,4.424],[6.537,5.335],[0,7.722],[-6.884,5.423],[-12.296,0],[-7.273,-6.559],[0,-11.47],[0,0],[5.585,8.832],[10.173,5.023],[12.988,0],[11.905,-9.741],[0,-14.892],[-9.741,-8.962],[-21.388,-6.147]],"o":[[6.494,5.065],[0,9.266],[-7.014,5.37],[-14.115,0],[-8.442,-6.624],[0,0],[0,10.997],[6.104,8.66],[11.255,4.978],[20.002,0],[11.949,-9.222],[0,-9.611],[-4.286,-7.099],[-8.877,-5.325],[-15.716,-4.424],[-6.539,-5.333],[0,-9.628],[6.884,-5.423],[13.248,0],[7.273,6.561],[0,0],[0,-10.476],[-5.585,-8.832],[-10.176,-5.021],[-19.05,0],[-11.907,9.741],[0,13.163],[9.741,8.962],[17.057,4.936]],"v":[[1223.769,-69.292],[1233.51,-47.797],[1222.989,-25.847],[1192.727,-17.794],[1158.892,-27.73],[1146.229,-54.811],[1121.161,-54.811],[1130.318,-25.327],[1156.359,-4.871],[1192.727,2.598],[1240.653,-11.235],[1258.577,-48.057],[1252.148,-73.124],[1232.406,-91.762],[1195.519,-106.386],[1162.139,-121.024],[1152.333,-140.608],[1162.659,-163.182],[1191.428,-171.315],[1222.21,-161.475],[1233.12,-134.429],[1258.188,-134.429],[1249.81,-163.393],[1226.171,-184.174],[1191.428,-191.707],[1144.995,-177.095],[1127.136,-140.144],[1141.748,-106.958],[1188.44,-84.294]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1187.234,-97.872],"ix":2},"a":{"a":0,"k":[1187.234,-97.872],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"S","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"PHORLAKH Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540,540,0],"ix":2},"a":{"a":0,"k":[575.542,-78.914,0],"ix":1},"s":{"a":0,"k":[90,90,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-8.458,-194.914],[-88.458,-190.914],[-92.458,29.086],[-8.458,25.086]],"c":true}]},{"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1443.542,-200.914],[-284.458,-200.914],[-288.458,35.086],[1447.542,41.086]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-9.576,8.276],[0,15.321],[9.791,8.818],[17.271,0],[0,0],[0,0],[0,0],[0,0]],"o":[[17.848,0],[9.575,-8.274],[0,-14.525],[-9.793,-8.816],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[76.313,-61.787],[117.45,-74.199],[131.813,-109.591],[117.125,-144.604],[76.529,-157.828],[18.319,-157.828],[18.319,0],[39.132,0],[39.132,-61.787]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-5.926,-5.647],[0,-9.41],[5.925,-5.247],[11.128,0],[0,0]],"o":[[0,0],[10.333,0.217],[5.925,5.647],[0,9.918],[-5.926,5.249],[0,0],[0,0]],"v":[[39.132,-140.81],[77.722,-140.81],[102.111,-132.014],[111,-109.428],[102.111,-86.678],[76.529,-78.806],[39.132,-78.806]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[72,-78],"ix":2},"a":{"a":0,"k":[72,-78],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"P","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[279.668,-157.828],[258.747,-157.828],[258.747,-89.971],[179.183,-89.971],[179.183,-157.828],[158.37,-157.828],[158.37,0],[179.183,0],[179.183,-72.952],[258.747,-72.952],[258.747,0],[279.668,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.203,11.599],[9.647,6.108],[12.645,0],[9.647,-6.179],[5.274,-11.634],[0,-15.176],[0,0],[-5.312,-11.309],[-9.612,-6.106],[-12.43,0],[-9.539,6.07],[-5.203,11.527],[0,15.465]],"o":[[0,-15.393],[-5.203,-11.599],[-9.647,-6.106],[-12.43,0],[-9.647,6.179],[-5.276,11.636],[0,0],[0.144,14.888],[5.312,11.311],[9.61,6.108],[12.718,0],[9.539,-6.07],[5.203,-11.526],[0,0]],"v":[[438.038,-83.792],[430.233,-124.279],[407.958,-150.836],[374.517,-159.996],[341.401,-150.728],[319.017,-124.008],[311.104,-83.792],[311.104,-72.41],[319.288,-33.116],[341.672,-6.992],[374.733,2.168],[408.12,-6.938],[430.233,-33.333],[438.038,-73.819]],"c":true},"ix":2},"nm":"O","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[7.371,-9.791],[13.441,0],[7.623,10.371],[0,18.14],[0,0],[-7.552,10.01],[-13.153,0],[-7.517,-10.008],[0,-18.716]],"o":[[-0.217,18.284],[-7.371,9.793],[-13.37,0],[-7.625,-10.369],[0,0],[0.217,-17.777],[7.551,-10.008],[13.513,0],[7.515,10.01],[0,0]],"v":[[417.334,-72.302],[405.952,-30.189],[374.733,-15.501],[343.244,-31.056],[331.808,-73.819],[331.808,-85.418],[343.46,-127.097],[374.517,-142.11],[406.061,-127.097],[417.334,-84.009]],"c":true},"ix":2},"nm":"O","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"O","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-5.312,7.3],[0,9.829],[9.575,8.094],[17.777,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[9.466,-3.613],[5.312,-7.298],[0,-15.464],[-9.576,-8.093],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[561.396,0],[583.726,0],[583.726,-1.301],[546.653,-68.291],[568.821,-84.659],[576.788,-110.35],[562.425,-145.688],[521.396,-157.828],[469.148,-157.828],[469.148,0],[490.069,0],[490.069,-63.847],[527.142,-63.847]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-5.818,-5.213],[0,-9.773],[6.106,-5.357],[10.333,0],[0,0]],"o":[[0,0],[10.984,0.073],[5.816,5.213],[0,8.978],[-6.108,5.357],[0,0],[0,0]],"v":[[490.069,-140.81],[521.938,-140.81],[547.141,-132.881],[555.867,-110.404],[546.708,-88.9],[522.047,-80.865],[490.069,-80.865]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[626.868,-157.828],[605.947,-157.828],[605.947,0],[701.663,0],[701.663,-17.019],[626.868,-17.019]],"c":true},"ix":2},"nm":"L","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"L","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[829.682,0],[851.036,0],[790.658,-157.828],[772.447,-157.828],[712.178,0],[733.641,0],[748.491,-41.3],[814.614,-41.3]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[781.553,-132.138],[808.436,-58.318],[754.778,-58.318]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[968.323,0],[993.255,0],[926.265,-88.128],[988.377,-157.828],[963.229,-157.828],[893.095,-79.781],[893.095,-157.828],[872.282,-157.828],[872.282,0],[893.095,0],[893.095,-53.332],[912.39,-73.386]],"c":true},"ix":2},"nm":"K","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[912,-82],"ix":2},"a":{"a":0,"k":[912,-82],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"K","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1132.764,-157.828],[1111.843,-157.828],[1111.843,-89.971],[1032.278,-89.971],[1032.278,-157.828],[1011.466,-157.828],[1011.466,0],[1032.278,0],[1032.278,-72.952],[1111.843,-72.952],[1111.843,0],[1132.764,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1068,-84],"ix":2},"a":{"a":0,"k":[1068,-84],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"AREL Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[540.524,959.074,0],"ix":2},"a":{"a":0,"k":[506,-152,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-42.699,-339.074],[-202.699,-339.074],[-202.699,60.926],[-42.699,60.926]],"c":true}]},{"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1101.301,-347.074],[-202.699,-339.074],[-202.699,60.926],[1105.301,64.926]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[233.762,0],[274.643,0],[159.055,-302.148],[124.191,-302.148],[8.811,0],[49.899,0],[78.33,-79.065],[204.917,-79.065]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[141.623,-252.966],[193.088,-111.646],[90.366,-111.646]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-10.168,13.975],[0,18.816],[18.33,15.496],[34.033,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[18.122,-6.916],[10.168,-13.972],[0,-29.604],[-18.333,-15.493],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[491.708,0],[534.458,0],[534.458,-2.49],[463.486,-130.737],[505.924,-162.073],[521.176,-211.255],[493.68,-278.906],[415.134,-302.148],[315.109,-302.148],[315.109,0],[355.161,0],[355.161,-122.229],[426.132,-122.229]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-11.138,-9.98],[0,-18.709],[11.689,-10.256],[19.782,0],[0,0]],"o":[[0,0],[21.028,0.139],[11.135,9.98],[0,17.188],[-11.692,10.256],[0,0],[0,0]],"v":[[355.161,-269.568],[416.171,-269.568],[464.42,-254.39],[481.125,-211.359],[463.59,-170.192],[416.379,-154.81],[355.161,-154.81]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[747.788,-172.241],[616.843,-172.241],[616.843,-269.568],[766.879,-269.568],[766.879,-302.148],[576.999,-302.148],[576.999,0],[768.955,0],[768.955,-32.581],[616.843,-32.581],[616.843,-139.661],[747.788,-139.661]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"E","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[858.603,-302.148],[818.552,-302.148],[818.552,0],[1001.792,0],[1001.792,-32.581],[858.603,-32.581]],"c":true},"ix":2},"nm":"L","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"L","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"ARIEL Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[543.679,971.074,0],"ix":2},"a":{"a":0,"k":[568,-140,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-56.905,-339.074],[-144.905,-339.074],[-144.905,48.926],[-56.905,48.926]],"c":true}]},{"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1243.095,-343.074],[-120.905,-327.074],[-120.905,60.926],[1227.095,52.926]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[233.762,0],[274.643,0],[159.055,-302.148],[124.191,-302.148],[8.811,0],[49.899,0],[78.33,-79.065],[204.917,-79.065]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[141.623,-252.966],[193.088,-111.646],[90.366,-111.646]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-10.168,13.975],[0,18.816],[18.33,15.496],[34.033,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[18.122,-6.916],[10.168,-13.972],[0,-29.604],[-18.333,-15.493],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[491.708,0],[534.458,0],[534.458,-2.49],[463.486,-130.737],[505.924,-162.073],[521.176,-211.255],[493.68,-278.906],[415.134,-302.148],[315.109,-302.148],[315.109,0],[355.161,0],[355.161,-122.229],[426.132,-122.229]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-11.138,-9.98],[0,-18.709],[11.689,-10.256],[19.782,0],[0,0]],"o":[[0,0],[21.028,0.139],[11.135,9.98],[0,17.188],[-11.692,10.256],[0,0],[0,0]],"v":[[355.161,-269.568],[416.171,-269.568],[464.42,-254.39],[481.125,-211.359],[463.59,-170.192],[416.379,-154.81],[355.161,-154.81]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[619.748,-302.148],[579.904,-302.148],[579.904,0],[619.748,0]],"c":true},"ix":2},"nm":"I","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"I","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[863.376,-172.241],[732.431,-172.241],[732.431,-269.568],[882.468,-269.568],[882.468,-302.148],[692.587,-302.148],[692.587,0],[884.543,0],[884.543,-32.581],[732.431,-32.581],[732.431,-139.661],[863.376,-139.661]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"E","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[974.191,-302.148],[934.14,-302.148],[934.14,0],[1117.38,0],[1117.38,-32.581],[974.191,-32.581]],"c":true},"ix":2},"nm":"L","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"L","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}]},{"id":"comp_4","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"TALIAHAD Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[522,808,0],"ix":2},"a":{"a":0,"k":[623.209,-88,0],"ix":1},"s":{"a":0,"k":[91,91,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-20,-228],[-72,-228],[-72,80],[-20,80]],"c":true}]},{"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1516.264,-244],[-200.703,-231.209],[-161.934,84.396],[1524.659,76]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[155.612,-189.109],[9.364,-189.109],[9.364,-168.718],[70.02,-168.718],[70.02,0],[94.827,0],[94.827,-168.718],[155.612,-168.718]],"c":true},"ix":2},"nm":"T","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[9.67,-92],"ix":2},"a":{"a":0,"k":[9.67,-92],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"T","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[295.886,0],[321.473,0],[249.128,-189.109],[227.308,-189.109],[155.093,0],[180.81,0],[198.604,-49.485],[277.832,-49.485]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[238.218,-158.327],[270.429,-69.877],[206.137,-69.877]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[240,-86],"ix":2},"a":{"a":0,"k":[240,-86],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[371.997,-189.109],[346.93,-189.109],[346.93,0],[461.616,0],[461.616,-20.392],[371.997,-20.392]],"c":true},"ix":2},"nm":"L","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"L","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[516.816,-189.109],[491.879,-189.109],[491.879,0],[516.816,0]],"c":true},"ix":2},"nm":"I","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"I","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[687.223,0],[712.81,0],[640.465,-189.109],[618.645,-189.109],[546.43,0],[572.146,0],[589.94,-49.485],[669.169,-49.485]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[629.555,-158.327],[661.766,-69.877],[597.474,-69.877]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[883.605,-189.109],[858.538,-189.109],[858.538,-107.803],[763.204,-107.803],[763.204,-189.109],[738.267,-189.109],[738.267,0],[763.204,0],[763.204,-87.411],[858.538,-87.411],[858.538,0],[883.605,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1052.713,0],[1078.3,0],[1005.955,-189.109],[984.135,-189.109],[911.92,0],[937.637,0],[955.431,-49.485],[1034.659,-49.485]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[995.045,-158.327],[1027.256,-69.877],[962.964,-69.877]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-12.773,7.188],[-6.884,13.423],[0,17.839],[0,0],[6.884,13.423],[12.641,7.273],[16.45,0],[0,0],[0,0]],"o":[[16.97,-0.173],[12.771,-7.186],[6.884,-13.421],[0,0],[-0.087,-17.404],[-6.884,-13.421],[-12.643,-7.273],[0,0],[0,0],[0,0]],"v":[[1156.1,0],[1200.714,-11.04],[1230.198,-41.952],[1240.523,-88.84],[1240.523,-100.919],[1230.068,-147.157],[1200.779,-178.199],[1157.139,-189.109],[1103.757,-189.109],[1103.757,0]],"c":true},"ix":2},"nm":"D","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[-10.088,-11.917],[0,-21.492],[0,0],[10.693,-11.959],[19.223,0],[0,0],[0,0]],"o":[[18.529,0.175],[10.086,11.917],[0,0],[0,22.1],[-10.695,11.959],[0,0],[0,0],[0,0]],"v":[[1157.788,-168.718],[1200.714,-150.583],[1215.846,-100.47],[1215.846,-89.42],[1199.805,-38.33],[1154.931,-20.392],[1128.694,-20.392],[1128.694,-168.718]],"c":true},"ix":2},"nm":"D","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980392157,0.450980392157,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[1166,-90],"ix":2},"a":{"a":0,"k":[1166,-90],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"D","np":4,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}]},{"id":"comp_5","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"CHASAN Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[544.987,958.555,0],"ix":2},"a":{"a":0,"k":[536,-96,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-10.65,-238.555],[-170.65,-238.555],[-170.65,57.445],[-10.65,57.445]],"c":true}]},{"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1305.35,-250.555],[-198.65,-242.555],[-198.65,53.445],[1297.35,49.445]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[7.403,-6.277],[13.853,0],[8.572,12.132],[0,20.54],[0,0],[-9.049,11.787],[-15.933,0],[-7.231,-6.774],[-2.165,-15.111],[0,0],[12.122,11.215],[20.087,0],[11.515,-7.144],[6.277,-13.333],[0,-17.577],[0,0],[-13.465,-16.018],[-22.34,0],[-12.426,10.868],[-2.338,20.002]],"o":[[-2.425,15.586],[-7.403,6.279],[-15.413,0],[-8.572,-12.132],[0,0],[0,-21.751],[9.047,-11.787],[12.988,0],[7.229,6.774],[0,0],[-1.993,-19.827],[-12.124,-11.213],[-15.154,0],[-11.517,7.144],[-6.279,13.335],[0,0],[0,26.843],[13.463,16.02],[20.607,0],[12.424,-10.866],[0,0]],"v":[[138.987,-60.006],[124.246,-27.21],[92.359,-17.794],[56.382,-35.992],[43.523,-85],[43.523,-103.33],[57.096,-153.635],[94.567,-171.315],[124.895,-161.154],[138.987,-128.324],[164.055,-128.324],[142.884,-174.887],[94.567,-191.707],[54.563,-180.992],[27.873,-150.274],[18.456,-103.906],[18.456,-85.723],[38.653,-21.431],[92.359,2.598],[141.91,-13.703],[164.055,-60.006]],"c":true},"ix":2},"nm":"C","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980362238,0.450980362238,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"C","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[343.423,-189.109],[318.355,-189.109],[318.355,-107.803],[223.021,-107.803],[223.021,-189.109],[198.084,-189.109],[198.084,0],[223.021,0],[223.021,-87.411],[318.355,-87.411],[318.355,0],[343.423,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980362238,0.450980362238,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[512.53,0],[538.117,0],[465.772,-189.109],[443.952,-189.109],[371.737,0],[397.454,0],[415.248,-49.485],[494.477,-49.485]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[454.862,-158.327],[487.073,-69.877],[422.781,-69.877]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980362238,0.450980362238,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.494,-5.065],[0,-9.264],[7.014,-5.368],[13.161,0],[8.442,6.624],[0,11.43],[0,0],[-6.104,-8.658],[-11.257,-4.978],[-12.988,0],[-11.949,9.222],[0,15.326],[4.286,7.101],[8.875,5.325],[15.716,4.424],[6.537,5.335],[0,7.722],[-6.884,5.423],[-12.296,0],[-7.273,-6.559],[0,-11.47],[0,0],[5.585,8.832],[10.173,5.023],[12.988,0],[11.905,-9.741],[0,-14.892],[-9.741,-8.962],[-21.388,-6.147]],"o":[[6.494,5.065],[0,9.266],[-7.014,5.37],[-14.115,0],[-8.442,-6.624],[0,0],[0,10.997],[6.104,8.66],[11.255,4.978],[20.002,0],[11.949,-9.222],[0,-9.611],[-4.286,-7.099],[-8.877,-5.325],[-15.716,-4.424],[-6.539,-5.333],[0,-9.628],[6.884,-5.423],[13.248,0],[7.273,6.561],[0,0],[0,-10.476],[-5.585,-8.832],[-10.176,-5.021],[-19.05,0],[-11.907,9.741],[0,13.163],[9.741,8.962],[17.057,4.936]],"v":[[654.622,-69.292],[664.363,-47.797],[653.843,-25.847],[623.58,-17.794],[589.746,-27.73],[577.082,-54.811],[552.015,-54.811],[561.171,-25.327],[587.213,-4.871],[623.58,2.598],[671.507,-11.235],[689.431,-48.057],[683.001,-73.124],[663.259,-91.762],[626.373,-106.386],[592.993,-121.024],[583.187,-140.608],[593.512,-163.182],[622.281,-171.315],[653.063,-161.475],[663.974,-134.429],[689.041,-134.429],[680.664,-163.393],[657.025,-184.174],[622.281,-191.707],[575.848,-177.095],[557.989,-140.144],[572.601,-106.958],[619.294,-84.294]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980362238,0.450980362238,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"S","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[843.861,0],[869.448,0],[797.104,-189.109],[775.283,-189.109],[703.068,0],[728.785,0],[746.579,-49.485],[825.808,-49.485]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[786.193,-158.327],[818.404,-69.877],[754.112,-69.877]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980362238,0.450980362238,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1040.244,-189.109],[1015.437,-189.109],[1015.437,-42.731],[919.973,-189.109],[894.905,-189.109],[894.905,0],[919.973,0],[919.973,-145.729],[1015.177,0],[1040.244,0]],"c":true},"ix":2},"nm":"N","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.450980362238,0.450980362238,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"N","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}]},{"id":"comp_6","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"CHERUB Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[538.354,970.375,0],"ix":2},"a":{"a":0,"k":[548,-92,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[6.195,-222.375],[-165.805,-222.375],[-165.805,21.625],[6.195,21.625]],"c":true}]},{"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1162.195,-226.375],[-165.805,-222.375],[-165.805,21.625],[1166.195,17.625]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[8.016,-6.796],[14.999,0],[9.281,13.135],[0,22.239],[0,0],[-9.798,12.762],[-17.251,0],[-7.829,-7.334],[-2.344,-16.361],[0,0],[13.124,12.142],[21.749,0],[12.467,-7.734],[6.796,-14.436],[0,-19.031],[0,0],[-14.579,-17.343],[-24.188,0],[-13.454,11.766],[-2.531,21.656]],"o":[[-2.626,16.875],[-8.016,6.798],[-16.688,0],[-9.281,-13.135],[0,0],[0,-23.55],[9.795,-12.762],[14.063,0],[7.827,7.334],[0,0],[-2.158,-21.467],[-13.126,-12.14],[-16.407,0],[-12.469,7.734],[-6.798,14.438],[0,0],[0,29.063],[14.577,17.345],[22.311,0],[13.452,-11.764],[0,0]],"v":[[147.234,-64.969],[131.273,-29.461],[96.75,-19.266],[57.797,-38.969],[43.875,-92.03],[43.875,-111.876],[58.57,-166.342],[99.141,-185.484],[131.977,-174.483],[147.234,-138.938],[174.375,-138.938],[151.453,-189.352],[99.141,-207.563],[55.828,-195.961],[26.93,-162.703],[16.734,-112.5],[16.734,-92.813],[38.602,-23.203],[96.75,2.813],[150.398,-14.836],[174.375,-64.969]],"c":true},"ix":2},"nm":"C","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"C","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[368.578,-204.75],[341.438,-204.75],[341.438,-116.719],[238.219,-116.719],[238.219,-204.75],[211.219,-204.75],[211.219,0],[238.219,0],[238.219,-94.641],[341.438,-94.641],[341.438,0],[368.578,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[532.266,-116.719],[443.531,-116.719],[443.531,-182.672],[545.203,-182.672],[545.203,-204.75],[416.531,-204.75],[416.531,0],[546.609,0],[546.609,-22.078],[443.531,-22.078],[443.531,-94.641],[532.266,-94.641]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"E","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-6.891,9.47],[0,12.751],[12.421,10.501],[23.063,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[12.281,-4.687],[6.891,-9.468],[0,-20.061],[-12.423,-10.499],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[699.75,0],[728.719,0],[728.719,-1.688],[680.625,-88.594],[709.383,-109.828],[719.719,-143.156],[701.086,-189],[647.859,-204.75],[580.078,-204.75],[580.078,0],[607.219,0],[607.219,-82.828],[655.313,-82.828]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-7.548,-6.763],[0,-12.678],[7.921,-6.95],[13.406,0],[0,0]],"o":[[0,0],[14.249,0.094],[7.545,6.763],[0,11.648],[-7.923,6.95],[0,0],[0,0]],"v":[[607.219,-182.672],[648.563,-182.672],[681.258,-172.386],[692.578,-143.227],[680.695,-115.33],[648.703,-104.906],[607.219,-104.906]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[8.108,-8.156],[15.28,0],[8.156,8.205],[0,14.814],[0,0],[0,0],[0,0],[-13.313,-12.094],[-22.408,0],[0,0],[-12.048,12.283],[-0.094,19.314],[0,0]],"o":[[0,0],[0,14.814],[-8.11,8.156],[-15.095,0],[-8.156,-8.202],[0,0],[0,0],[0,0],[0.187,21.188],[13.311,12.094],[0,0],[20.624,-1.501],[12.045,-12.281],[0,0],[0,0]],"v":[[874.547,-204.75],[874.547,-65.953],[862.383,-31.5],[827.297,-19.266],[792.422,-31.57],[780.188,-66.094],[780.188,-204.75],[753.469,-204.75],[753.469,-65.25],[773.719,-15.328],[827.297,2.813],[834.469,2.531],[883.477,-18.141],[901.688,-65.531],[901.688,-204.75]],"c":true},"ix":2},"nm":"U","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"U","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-11.907,10.501],[0,18.376],[6.42,8.673],[11.061,3.094],[-5.438,7.361],[0,9.563],[11.202,9.189],[22.219,0],[0,0],[0,0]],"o":[[21.749,0],[11.905,-10.499],[0,-11.999],[-6.423,-8.67],[9.374,-4.03],[5.436,-7.359],[0,-18],[-11.204,-9.187],[0,0],[0,0],[0,0]],"v":[[1015.313,0],[1065.797,-15.75],[1083.656,-59.063],[1074.023,-90.07],[1047.797,-107.719],[1070.016,-124.805],[1078.172,-150.188],[1061.367,-190.969],[1011.234,-204.75],[944.297,-204.75],[944.297,0]],"c":true},"ix":2},"nm":"B","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,-24.656],[7.264,-6.515],[12.562,0],[0,0],[0,0]],"o":[[26.811,0],[0,11.439],[-7.266,6.517],[0,0],[0,0],[0,0]],"v":[[1016.297,-95.766],[1056.516,-58.781],[1045.617,-31.852],[1015.875,-22.078],[971.297,-22.078],[971.297,-95.766]],"c":true},"ix":2},"nm":"B","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-6.563,-5.12],[0,-11.274],[7.077,-5.919],[11.813,0],[0,0]],"o":[[0,0],[13.406,0],[6.561,5.12],[0,10.147],[-7.08,5.919],[0,0],[0,0]],"v":[[971.297,-182.672],[1011.234,-182.672],[1041.188,-174.99],[1051.031,-150.398],[1040.414,-126.299],[1012.078,-117.422],[971.297,-117.422]],"c":true},"ix":2},"nm":"B","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":5,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}]},{"id":"comp_7","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"SERAPH Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[539.32,974.375,0],"ix":2},"a":{"a":0,"k":[536,-88,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"a","pt":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[-11.094,-250.375],[-183.094,-250.375],[-183.094,57.625],[-11.094,57.625]],"c":true}]},{"t":60,"s":[{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[1168.906,-270.375],[-183.094,-250.375],[-183.094,57.625],[1168.906,45.625]],"c":true}]}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-7.031,-5.484],[0,-10.031],[7.594,-5.812],[14.249,0],[9.141,7.172],[0,12.375],[0,0],[-6.609,-9.374],[-12.188,-5.39],[-14.063,0],[-12.938,9.984],[0,16.594],[4.641,7.688],[9.609,5.766],[17.016,4.79],[7.077,5.777],[0,8.361],[-7.453,5.871],[-13.313,0],[-7.875,-7.102],[0,-12.419],[0,0],[6.047,9.563],[11.015,5.438],[14.063,0],[12.889,-10.547],[0,-16.124],[-10.547,-9.703],[-23.157,-6.656]],"o":[[7.031,5.484],[0,10.033],[-7.594,5.814],[-15.282,0],[-9.141,-7.172],[0,0],[0,11.907],[6.609,9.376],[12.186,5.39],[21.656,0],[12.938,-9.984],[0,-10.406],[-4.641,-7.686],[-9.611,-5.766],[-17.016,-4.79],[-7.08,-5.774],[0,-10.424],[7.453,-5.871],[14.344,0],[7.875,7.104],[0,0],[0,-11.342],[-6.047,-9.563],[-11.017,-5.436],[-20.626,0],[-12.891,10.547],[0,14.251],[10.547,9.703],[18.468,5.344]],"v":[[122.344,-75.023],[132.891,-51.75],[121.5,-27.984],[88.734,-19.266],[52.102,-30.023],[38.391,-59.344],[11.25,-59.344],[21.164,-27.422],[49.359,-5.273],[88.734,2.813],[140.625,-12.164],[160.031,-52.031],[153.07,-79.172],[131.695,-99.352],[91.758,-115.185],[55.617,-131.034],[45,-152.238],[56.18,-176.678],[87.328,-185.484],[120.656,-174.83],[132.469,-145.547],[159.609,-145.547],[150.539,-176.906],[124.945,-199.406],[87.328,-207.563],[37.055,-191.742],[17.719,-151.734],[33.539,-115.805],[84.094,-91.266]],"c":true},"ix":2},"nm":"S","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"S","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[310.359,-116.719],[221.625,-116.719],[221.625,-182.672],[323.297,-182.672],[323.297,-204.75],[194.625,-204.75],[194.625,0],[324.703,0],[324.703,-22.078],[221.625,-22.078],[221.625,-94.641],[310.359,-94.641]],"c":true},"ix":2},"nm":"E","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"E","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[-6.891,9.47],[0,12.751],[12.421,10.501],[23.063,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[12.281,-4.687],[6.891,-9.468],[0,-20.061],[-12.423,-10.499],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[477.844,0],[506.813,0],[506.813,-1.688],[458.719,-88.594],[487.477,-109.828],[497.813,-143.156],[479.18,-189],[425.953,-204.75],[358.172,-204.75],[358.172,0],[385.313,0],[385.313,-82.828],[433.406,-82.828]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-7.548,-6.763],[0,-12.678],[7.921,-6.95],[13.406,0],[0,0]],"o":[[0,0],[14.249,0.094],[7.545,6.763],[0,11.648],[-7.923,6.95],[0,0],[0,0]],"v":[[385.313,-182.672],[426.656,-182.672],[459.352,-172.386],[470.672,-143.227],[458.789,-115.33],[426.797,-104.906],[385.313,-104.906]],"c":true},"ix":2},"nm":"R","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"R","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[668.25,0],[695.953,0],[617.625,-204.75],[594,-204.75],[515.813,0],[543.656,0],[562.922,-53.578],[648.703,-53.578]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[605.813,-171.422],[640.688,-75.656],[571.078,-75.656]],"c":true},"ix":2},"nm":"A","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-12.423,10.736],[0,19.876],[12.702,11.439],[22.406,0],[0,0],[0,0],[0,0],[0,0]],"o":[[23.155,0],[12.421,-10.734],[0,-18.844],[-12.705,-11.437],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[798.75,-80.156],[852.117,-96.258],[870.75,-142.172],[851.695,-187.594],[799.031,-204.75],[723.516,-204.75],[723.516,0],[750.516,0],[750.516,-80.156]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[-7.688,-7.326],[0,-12.208],[7.686,-6.807],[14.436,0],[0,0]],"o":[[0,0],[13.406,0.281],[7.686,7.326],[0,12.867],[-7.688,6.809],[0,0],[0,0]],"v":[[750.516,-182.672],[800.578,-182.672],[832.219,-171.261],[843.75,-141.961],[832.219,-112.447],[799.031,-102.234],[750.516,-102.234]],"c":true},"ix":2},"nm":"P","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"P","np":4,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1062.563,-204.75],[1035.422,-204.75],[1035.422,-116.719],[932.203,-116.719],[932.203,-204.75],[905.203,-204.75],[905.203,0],[932.203,0],[932.203,-94.641],[1035.422,-94.641],[1035.422,0],[1062.563,0]],"c":true},"ix":2},"nm":"H","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"H","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[762,710,0],"ix":2},"a":{"a":0,"k":[12,-40,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[276.142,0],[0,-276.142],[-276.142,0],[0,276.142]],"o":[[-276.142,0],[0,276.142],[276.142,0],[0,-276.142]],"v":[[0,-500],[-500,0],[0,500],[500,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.862745098039,0.495331588446,0.470280665977,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":28,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[12,-40],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[107.456,107.456],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Tharshis","parent":17,"refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-47,"ix":10},"p":{"a":0,"k":[237.598,-347,0],"ix":2},"a":{"a":0,"k":[540,540,0],"ix":1},"s":{"a":0,"k":[12,12,100],"ix":6}},"ao":0,"w":1080,"h":1080,"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Word1","parent":14,"refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0.082,-556,0],"ix":2},"a":{"a":0,"k":[540,540,0],"ix":1},"s":{"a":0,"k":[26,33.306,100],"ix":6}},"ao":0,"w":1080,"h":1080,"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"AREL","parent":6,"refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[1.433,-433.333,0],"ix":2},"a":{"a":0,"k":[540,960,0],"ix":1},"s":{"a":0,"k":[19.738,23,100],"ix":6}},"ao":0,"w":1080,"h":1920,"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[762,710,0],"ix":2},"a":{"a":0,"k":[12,-40,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":18,"s":[130,130,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":35,"s":[100,100,100]},{"t":60,"s":[123,123,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[276.142,0],[0,-276.142],[-276.142,0],[0,276.142]],"o":[[-276.142,0],[0,276.142],[276.142,0],[0,-276.142]],"v":[[0,-500],[-500,0],[0,500],[500,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.513648597867,0.74371397729,0.78431372549,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":28,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[12,-40],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[107.456,107.456],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 8","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[54,-486,0],"ix":2},"a":{"a":0,"k":[-2,-498,0],"ix":1},"s":{"a":0,"k":[119.008,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-244,-492],[240,-504]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.803921568627,0.811764705882,0.803921568627,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":25,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":60,"s":[270]}],"ix":10},"p":{"a":0,"k":[760,710,0],"ix":2},"a":{"a":0,"k":[64,-40,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-188.043],[0,0]],"o":[[0,0],[0,184],[0,0]],"v":[[-244,-488],[-60,-36],[-240,408]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.909803921569,0.533333333333,0.450980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":52,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":0,"nm":"ARIEL","parent":9,"refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":125,"ix":10},"p":{"a":0,"k":[244.265,-350.333,0],"ix":2},"a":{"a":0,"k":[540,960,0],"ix":1},"s":{"a":0,"k":[14,14,100],"ix":6}},"ao":0,"w":1080,"h":1920,"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Shape Layer 9","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[286.941,-54,0],"ix":2},"a":{"a":0,"k":[177.206,-54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-20.489,-204.891],[0,0]],"o":[[0,0],[24,240],[0,0]],"v":[[240,-500],[76,-28],[280,392]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.909803921569,0.533333333333,0.450980392157,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":52,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Shape Layer 7","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[69.333,402,0],"ix":2},"a":{"a":0,"k":[-2,-498,0],"ix":1},"s":{"a":0,"k":[128.099,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-244,-492],[240,-504]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.803921568627,0.811764705882,0.803921568627,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":25,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"Taliahad","parent":10,"refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":180.174,"ix":10},"p":{"a":0,"k":[-4.055,-605.32,0],"ix":2},"a":{"a":0,"k":[540,960,0],"ix":1},"s":{"a":0,"k":[24.981,32,100],"ix":6}},"ao":0,"w":1080,"h":1920,"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":0,"nm":"CHASAN","parent":18,"refId":"comp_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[51.953,-420,0],"ix":2},"a":{"a":0,"k":[540,960,0],"ix":1},"s":{"a":0,"k":[34.17,33,100],"ix":6}},"ao":0,"w":1080,"h":1920,"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":0,"nm":"CHERUB","parent":7,"refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":128,"ix":10},"p":{"a":0,"k":[-227,268.667,0],"ix":2},"a":{"a":0,"k":[540,960,0],"ix":1},"s":{"a":0,"k":[16,16,100],"ix":6}},"ao":0,"w":1080,"h":1920,"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Shape Layer 6","parent":18,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[69.333,402,0],"ix":2},"a":{"a":0,"k":[-2,-498,0],"ix":1},"s":{"a":0,"k":[128.099,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-244,-492],[240,-504]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.805397901348,0.811764705882,0.802214558919,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":25,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":0,"nm":"SERAPH","parent":18,"refId":"comp_7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":-42,"ix":10},"p":{"a":0,"k":[-234.667,260,0],"ix":2},"a":{"a":0,"k":[540,960,0],"ix":1},"s":{"a":0,"k":[14,14,100],"ix":6}},"ao":0,"w":1080,"h":1920,"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Shape Layer 5","parent":18,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[58.667,-486,0],"ix":2},"a":{"a":0,"k":[-2,-498,0],"ix":1},"s":{"a":0,"k":[120.661,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-244,-492],[240,-504]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.805397901348,0.811764705882,0.802214558919,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":25,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Shape Layer 4","parent":18,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[286.941,-54,0],"ix":2},"a":{"a":0,"k":[177.206,-54,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-20.489,-204.891],[0,0]],"o":[[0,0],[24,240],[0,0]],"v":[[240,-500],[76,-28],[280,392]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.878431372549,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":52,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":60,"s":[-360]}],"ix":10},"p":{"a":0,"k":[760,710,0],"ix":2},"a":{"a":0,"k":[64,-40,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,-188.043],[0,0]],"o":[[0,0],[0,184],[0,0]],"v":[[-244,-488],[-60,-36],[-240,408]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.878431372549,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":52,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"Shape Layer 12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[750,750,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[2000,1500],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.192183490828,0.004521337677,0.38431372549,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":95,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/platform_tools/android/apps/skottie/src/main/res/raw/workout_monkey_stay_healthy.json b/platform_tools/android/apps/skottie/src/main/res/raw/workout_monkey_stay_healthy.json new file mode 100644 index 0000000000000..a086a98329836 --- /dev/null +++ b/platform_tools/android/apps/skottie/src/main/res/raw/workout_monkey_stay_healthy.json @@ -0,0 +1 @@ +{"v":"5.6.5","fr":60,"ip":0,"op":121,"w":650,"h":650,"nm":"Comp 1","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[293,342.5,0],"to":[0,-6.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[293,302.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[293,342.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[293,302.5,0],"to":[0,0,0],"ti":[0,-6.667,0]},{"t":120,"s":[293,342.5,0]}],"ix":2},"a":{"a":0,"k":[-18,-4,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[81.5,3.25],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":281,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-18.75,-44.936],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[115.432,420.773],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[7,7],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.137254901961,0.137254901961,0.137254901961,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-18,14.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":0,"s":[100,100]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":30,"s":[300,300]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":60,"s":[100,100]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"t":90,"s":[300,300]},{"t":120,"s":[100,100]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 8","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[8,8],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.5,-29.162],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 7","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[8,8],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-35.5,-29.162],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 6","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.5,25.75],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.628235222312,0.186217289345,0.024144075431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[35.25,-20.375],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[166.667,125.225],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.5,25.75],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.628235222312,0.186217289345,0.024144075431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-74.75,-20.375],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[166.667,125.225],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 4","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[87.5,58],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.917647118662,0.729411764706,0.290196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-19.25,11.055],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[104.624,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 3","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[71.5,42],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.917647118662,0.729411764706,0.290196078431,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-17.75,-22.445],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,119.048],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[116,116],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":45,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-19,-3],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[300,300],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":0,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Hose 4::End","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\ntry {\n var parentRot = hasParent ? parentTotal() : 0;\n var rotCalc = $bm_sub(thisLayer('ADBE Root Vectors Group')('Admin')('Transform')('Rotation'), parentRot);\n $bm_rt = $bm_sum(rotCalc, value);\n} catch (err) {\n $bm_rt = value;\n}\n;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[353,606,0],"to":[0,6.333,0],"ti":[0,-0.333,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[353,644,0],"to":[0,0.13,0],"ti":[0,6.689,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[353,631.25,0],"to":[0,-10.471,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[353,608,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[353,644,0],"to":[0,0,0],"ti":[0,6,0]},{"t":120,"s":[353,608,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"RubberHose 2","np":18,"mn":"Pseudo/3bf5uID/RubberHose_2","ix":1,"en":1,"ef":[{"ty":0,"nm":"Hose Length","mn":"Pseudo/3bf5uID/RubberHose_2-0001","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":0,"nm":"Bend Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Realism","mn":"Pseudo/3bf5uID/RubberHose_2-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Bend Direction","mn":"Pseudo/3bf5uID/RubberHose_2-0004","ix":4,"v":{"a":0,"k":-100,"ix":4}},{"ty":7,"nm":"Auto Rotate Start","mn":"Pseudo/3bf5uID/RubberHose_2-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":7,"nm":"Auto Rotate End","mn":"Pseudo/3bf5uID/RubberHose_2-0006","ix":6,"v":{"a":0,"k":1,"ix":6}},{"ty":6,"nm":"Math Stuff","mn":"Pseudo/3bf5uID/RubberHose_2-0007","ix":7,"v":0},{"ty":3,"nm":"A","mn":"Pseudo/3bf5uID/RubberHose_2-0008","ix":8,"v":{"a":0,"k":[64,-122.166],"ix":8,"x":"var $bm_rt;\n$bm_rt = thisLayer.toComp([\n 0,\n 0,\n 0\n]);"}},{"ty":3,"nm":"B","mn":"Pseudo/3bf5uID/RubberHose_2-0009","ix":9,"v":{"a":0,"k":[0,0],"ix":9,"x":"var $bm_rt;\ntry {\n var b = thisLayer(2)('Admin')(2)('B')(2)(1)._name;\n $bm_rt = thisComp.layer(b).toComp([\n 0,\n 0,\n 0\n ]);\n} catch (err) {\n $bm_rt = value;\n}"}},{"ty":0,"nm":"Outer Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0010","ix":10,"v":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\nvar a = thisLayer(4)('RubberHose 2')('A');\nvar b = thisLayer(4)('RubberHose 2')('B');\nvar s = length(a, b);\n$bm_rt = $bm_mul(Math.sin(0.78539816339), s);"}},{"ty":0,"nm":"Inner Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0011","ix":11,"v":{"a":0,"k":0,"ix":11,"x":"var $bm_rt;\nvar eff = thisLayer(4)('RubberHose 2');\nvar bendRad = eff('Bend Radius');\nvar hoseLength = $bm_div(eff('Hose Length'), 2);\nvar realism = eff('Realism');\nvar bendDir = $bm_div(eff('Bend Direction'), 100);\nvar sFac = eff('Parent Scale');\nvar straight = eff('Straight');\nvar autoFlop = eff('AutoFlop');\nvar roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\nvar innerRad;\nif (hoseLength > straight) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n} else {\n innerRad = straight;\n}\ninnerRad *= Math.abs(sFac);\ninnerRad = linear(Math.abs(autoFlop), $bm_mul(straight, Math.max(Math.abs(sFac), 0.001)), innerRad);\n$bm_rt = innerRad;"}},{"ty":0,"nm":"Straight","mn":"Pseudo/3bf5uID/RubberHose_2-0012","ix":12,"v":{"a":0,"k":0,"ix":12,"x":"var $bm_rt;\nvar sFac = thisLayer(4)('RubberHose 2')('Parent Scale');\nvar outerRad = $bm_div(thisLayer(4)('RubberHose 2')('Outer Radius'), Math.max(Math.abs(sFac), 0.001));\n;\n$bm_rt = $bm_div($bm_mul(1.4142135623731, outerRad), 2);"}},{"ty":0,"nm":"Base Rotation","mn":"Pseudo/3bf5uID/RubberHose_2-0013","ix":13,"v":{"a":0,"k":0,"ix":13,"x":"var $bm_rt;\nvar a = thisLayer(4)('RubberHose 2')('A');\nvar b = thisLayer(4)('RubberHose 2')('B');\n$bm_rt = radiansToDegrees(Math.atan2($bm_sub(a[1], b[1]), $bm_sub(a[0], b[0])));"}},{"ty":0,"nm":"AutoFlop","mn":"Pseudo/3bf5uID/RubberHose_2-0014","ix":14,"v":{"a":0,"k":0,"ix":14,"x":"var $bm_rt;\nvar hasAF = false, isEnabled = false, output;\ntry {\n var lyrAF = thisComp.layer($bm_sum(thisLayer._name.split('::')[0], '::AutoFlop'));\n isEnabled = lyrAF(4)('Enable')(1);\n var falloffAngle = lyrAF(4)('Falloff')(1);\n hasAF = true;\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = thisLayer(4)('RubberHose 2')('B');\n} catch (e) {\n}\nif (hasAF && isEnabled == 1) {\n var threshRot = lyrAF('ADBE Transform Group')('ADBE Rotate Z');\n threshRot %= 360;\n var ctrlAngle = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var offsetAngle = $bm_sub(threshRot, ctrlAngle);\n offsetAngle %= 360;\n var sign = offsetAngle > 0 && offsetAngle < 180 || offsetAngle < -180 ? -1 : 1;\n var absAngle = Math.abs(offsetAngle);\n if (absAngle > 90) {\n absAngle = Math.abs($bm_sub(absAngle, 180));\n }\n if (absAngle > 90) {\n absAngle = Math.abs($bm_sub(absAngle, 180));\n }\n output = linear(absAngle, 0, falloffAngle, 0, 1);\n output *= sign;\n} else {\n output = 1;\n}\n$bm_rt = output;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"}},{"ty":0,"nm":"Parent Scale","mn":"Pseudo/3bf5uID/RubberHose_2-0015","ix":15,"v":{"a":0,"k":0,"ix":15,"x":"var $bm_rt;\nvar sFactor = 1;\nvar scaleNorm = 0;\nvar layerChain = 'thisLayer';\nwhile (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = $bm_div(eval(layerChain)('ADBE Transform Group')('ADBE Scale')[0], 100);\n sFactor = $bm_mul(sFactor, scaleNorm);\n}\n$bm_rt = sFactor;"}},{"ty":6,"nm":"","mn":"Pseudo/3bf5uID/RubberHose_2-0016","ix":16,"v":0}]}],"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 4::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[20,20],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 4::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6,"x":"var $bm_rt;\nvar eff = thisLayer(4)('RubberHose 2');\nvar autoRotate = eff('Auto Rotate End');\nif (autoRotate == 1) {\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = eff('B');\n var s = length(a, b);\n var sFac = eff('Parent Scale');\n var autoFlop = 1;\n var realism = eff('Realism');\n var bendDir = $bm_div(eff('Bend Direction'), 100);\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n var bendRad = eff('Bend Radius');\n var autoFlop = eff('AutoFlop');\n var baseRot = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var outerRad = $bm_mul(Math.sin(0.78539816339), s);\n var straight = $bm_div($bm_mul(1.4142135623731, outerRad), 2);\n straight /= Math.max(Math.abs(sFac), 0.001);\n var roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\n var innerRad;\n if (hoseLength > straight) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n } else {\n innerRad = straight;\n }\n innerRad = linear(Math.abs(autoFlop), straight, innerRad);\n var flopDir = 1;\n if (bendDir < 0) {\n flopDir = -1;\n }\n flopDir *= autoFlop;\n var opp = $bm_mul($bm_sub(innerRad, straight), flopDir);\n var theta = Math.atan($bm_div(opp, Math.max(straight, 0.001)));\n var bendAngle = radiansToDegrees(theta);\n if (sFac < 0) {\n baseRot *= -1;\n }\n bendRad *= $bm_div($bm_div(theta, $bm_neg(Math.PI)), linear(s, hoseLength, 0, 2, 0.9));\n var rotCalc = $bm_sub($bm_sum(baseRot, bendAngle), bendRad);\n $bm_rt = rotCalc;\n} else {\n $bm_rt = value;\n}\n;"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Circle","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-75,0],[75,0]],"c":false},"ix":2},"nm":"01","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-30],[0,30]],"c":false},"ix":2},"nm":"02","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[30,30],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ControlShape","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.560000002384,0,1],"ix":3,"x":"var $bm_rt;\nif (thisLayer.active) {\n try {\n var eff = thisLayer(4)('RubberHose 2');\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = eff('B');\n var straight = eff('Straight');\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n if (straight > hoseLength) {\n $bm_rt = [\n 0.51,\n 0.83,\n 0.98,\n 1\n ];\n } else {\n $bm_rt = value;\n }\n } catch (err) {\n $bm_rt = value;\n }\n} else {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Control Point","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Hose 4::Start","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\ntry {\n var parentRot = hasParent ? parentTotal() : 0;\n var rotCalc = $bm_sub(thisLayer('ADBE Root Vectors Group')('Admin')('Transform')('Rotation'), parentRot);\n $bm_rt = $bm_sum(rotCalc, value);\n} catch (err) {\n $bm_rt = value;\n}\n;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":0,"k":[352,494.25,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 4::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[20,20],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 4::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6,"x":"var $bm_rt;\ntry {\n var eff = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var autoRotate = eff('Auto Rotate Start');\n if (autoRotate == 1) {\n var a = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name).toComp([\n 0,\n 0,\n 0\n ]);\n var b = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var s = length(a, b);\n var sFac = eff('Parent Scale');\n var autoFlop = 1;\n var realism = eff('Realism');\n var bendDir = $bm_div(eff('Bend Direction'), 100);\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n var bendRad = eff('Bend Radius');\n var autoFlop = eff('AutoFlop');\n var baseRot = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var outerRad = $bm_mul(Math.sin(0.78539816339), s);\n var straight = $bm_div($bm_mul(1.4142135623731, outerRad), 2);\n straight /= Math.max(Math.abs(sFac), 0.001);\n var roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\n var innerRad;\n if (straight <= hoseLength) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n } else {\n innerRad = straight;\n }\n innerRad = linear(Math.abs(autoFlop), straight, innerRad);\n var flopDir = 1;\n if (bendDir < 0) {\n flopDir = -1;\n }\n flopDir *= autoFlop;\n var opp = $bm_mul($bm_sub(innerRad, straight), flopDir);\n var theta = Math.atan($bm_div(opp, Math.max(straight, 0.001)));\n var bendAngle = radiansToDegrees(theta);\n if (sFac < 0) {\n baseRot *= -1;\n }\n bendRad *= $bm_div($bm_div(theta, $bm_neg(Math.PI)), linear(s, hoseLength, 0, 2, 0.9));\n var rotCalc = $bm_sum($bm_sub(baseRot, bendAngle), bendRad);\n $bm_rt = rotCalc;\n } else {\n $bm_rt = 0;\n }\n ;\n} catch (err) {\n $bm_rt = value;\n}\n;"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Circle","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-75,0],[75,0]],"c":false},"ix":2},"nm":"01","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-30],[0,30]],"c":false},"ix":2},"nm":"02","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[30,30],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ControlShape","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.560000002384,0,1],"ix":3,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name);\n $bm_rt = ctrl(2)('Control Point')(2)('Stroke 1')('Color');\n} catch (e) {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Control Point","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Hose 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\nvar r = 0;\nif (thisLayer.hasParent) {\n r = $bm_neg(parentTotal());\n}\n$bm_rt = r;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":0,"k":[389,499.75,0],"ix":2,"x":"var $bm_rt;\nvar p = [\n 0,\n 0\n ];\ntry {\n if (thisLayer.hasParent) {\n p = parent.fromComp([\n 0,\n 0,\n 0\n ]);\n }\n $bm_rt = p;\n} catch (err) {\n $bm_rt = p;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6,"x":"var $bm_rt;\nvar s = [\n 100,\n 100\n ];\nif (hasParent) {\n var sFactor = parentTotal();\n s = [\n $bm_mul(s[0], sFactor[0]),\n $bm_mul(s[1], sFactor[1])\n ];\n}\n$bm_rt = s;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = eval([layerChain][0]).scale;\n if (scaleNorm[0] != 0 && scaleNorm[1] != 0) {\n scaleNorm = [\n $bm_div(100, scaleNorm[0]),\n $bm_div(100, scaleNorm[1])\n ];\n }\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":1,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254901961,0.137254901961,0.137254901961,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":137,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-8],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Round","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254901961,0.137254901961,0.137254901961,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":137,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-8],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Flat","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":90,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":2,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[690,540],"ix":2},"a":{"a":0,"k":[690,540],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"RoundBottom-FlatBottom 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":1,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.913725490196,0.913725490196,0.913725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":120,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-8],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Round","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.913725490196,0.913725490196,0.913725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":120,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-8],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Flat","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[50]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[50]},{"t":120,"s":[20]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":2,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[690,540],"ix":2},"a":{"a":0,"k":[690,540],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"RoundBottom-FlatBottom 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":1,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":95,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Round","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":95,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Flat","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":2,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[690,540],"ix":2},"a":{"a":0,"k":[690,540],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"RoundBottom-FlatBottom","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Style","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 4::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[200,200],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 4::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":200,"ix":6,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Inner Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"is":{"a":0,"k":100,"ix":8,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Bend Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"or":{"a":0,"k":200,"ix":7,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Outer Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0.01,"ix":1},"e":{"a":0,"k":24.99,"ix":2},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\n$bm_rt = -90;"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar s = thisProperty.propertyGroup(2)(2)(1)(7);\n$bm_rt = [\n -s,\n 0\n];"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar flop;\ntry {\n var eff = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var bendDir = eff('Bend Direction');\n var autoFlop = eff('AutoFlop');\n flop = bendDir > 0 ? 1 : -1;\n autoFlop > 0 ? 0 : flop *= -1;\n var s = flop == 1 ? [\n -100,\n 100\n ] : [\n 100,\n 100\n ];\n if (eff('Parent Scale') < 0) {\n s = [\n $bm_neg(s[0]),\n s[1]\n ];\n }\n $bm_rt = s;\n} catch (err) {\n $bm_rt = value;\n}\n;"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var baseRot = ctrl('Base Rotation');\n var flop = content('Admin').content('ArcMath').transform.scale[0];\n var rotOffset = flop < 0 ? -45 : 225;\n $bm_rt = $bm_sum(baseRot, rotOffset);\n} catch (err) {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ArcMath","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Hose 3::End","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\ntry {\n var parentRot = hasParent ? parentTotal() : 0;\n var rotCalc = $bm_sub(thisLayer('ADBE Root Vectors Group')('Admin')('Transform')('Rotation'), parentRot);\n $bm_rt = $bm_sum(rotCalc, value);\n} catch (err) {\n $bm_rt = value;\n}\n;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[233,606,0],"to":[0,6.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[233,646,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[233,608,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[233,646,0],"to":[0,0,0],"ti":[0,6.333,0]},{"t":120,"s":[233,608,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"RubberHose 2","np":18,"mn":"Pseudo/3bf5uID/RubberHose_2","ix":1,"en":1,"ef":[{"ty":0,"nm":"Hose Length","mn":"Pseudo/3bf5uID/RubberHose_2-0001","ix":1,"v":{"a":0,"k":10,"ix":1}},{"ty":0,"nm":"Bend Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Realism","mn":"Pseudo/3bf5uID/RubberHose_2-0003","ix":3,"v":{"a":0,"k":0,"ix":3}},{"ty":0,"nm":"Bend Direction","mn":"Pseudo/3bf5uID/RubberHose_2-0004","ix":4,"v":{"a":0,"k":-100,"ix":4}},{"ty":7,"nm":"Auto Rotate Start","mn":"Pseudo/3bf5uID/RubberHose_2-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":7,"nm":"Auto Rotate End","mn":"Pseudo/3bf5uID/RubberHose_2-0006","ix":6,"v":{"a":0,"k":1,"ix":6}},{"ty":6,"nm":"Math Stuff","mn":"Pseudo/3bf5uID/RubberHose_2-0007","ix":7,"v":0},{"ty":3,"nm":"A","mn":"Pseudo/3bf5uID/RubberHose_2-0008","ix":8,"v":{"a":0,"k":[-98,-50.166],"ix":8,"x":"var $bm_rt;\n$bm_rt = thisLayer.toComp([\n 0,\n 0,\n 0\n]);"}},{"ty":3,"nm":"B","mn":"Pseudo/3bf5uID/RubberHose_2-0009","ix":9,"v":{"a":0,"k":[0,0],"ix":9,"x":"var $bm_rt;\ntry {\n var b = thisLayer(2)('Admin')(2)('B')(2)(1)._name;\n $bm_rt = thisComp.layer(b).toComp([\n 0,\n 0,\n 0\n ]);\n} catch (err) {\n $bm_rt = value;\n}"}},{"ty":0,"nm":"Outer Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0010","ix":10,"v":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\nvar a = thisLayer(4)('RubberHose 2')('A');\nvar b = thisLayer(4)('RubberHose 2')('B');\nvar s = length(a, b);\n$bm_rt = $bm_mul(Math.sin(0.78539816339), s);"}},{"ty":0,"nm":"Inner Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0011","ix":11,"v":{"a":0,"k":0,"ix":11,"x":"var $bm_rt;\nvar eff = thisLayer(4)('RubberHose 2');\nvar bendRad = eff('Bend Radius');\nvar hoseLength = $bm_div(eff('Hose Length'), 2);\nvar realism = eff('Realism');\nvar bendDir = $bm_div(eff('Bend Direction'), 100);\nvar sFac = eff('Parent Scale');\nvar straight = eff('Straight');\nvar autoFlop = eff('AutoFlop');\nvar roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\nvar innerRad;\nif (hoseLength > straight) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n} else {\n innerRad = straight;\n}\ninnerRad *= Math.abs(sFac);\ninnerRad = linear(Math.abs(autoFlop), $bm_mul(straight, Math.max(Math.abs(sFac), 0.001)), innerRad);\n$bm_rt = innerRad;"}},{"ty":0,"nm":"Straight","mn":"Pseudo/3bf5uID/RubberHose_2-0012","ix":12,"v":{"a":0,"k":0,"ix":12,"x":"var $bm_rt;\nvar sFac = thisLayer(4)('RubberHose 2')('Parent Scale');\nvar outerRad = $bm_div(thisLayer(4)('RubberHose 2')('Outer Radius'), Math.max(Math.abs(sFac), 0.001));\n;\n$bm_rt = $bm_div($bm_mul(1.4142135623731, outerRad), 2);"}},{"ty":0,"nm":"Base Rotation","mn":"Pseudo/3bf5uID/RubberHose_2-0013","ix":13,"v":{"a":0,"k":0,"ix":13,"x":"var $bm_rt;\nvar a = thisLayer(4)('RubberHose 2')('A');\nvar b = thisLayer(4)('RubberHose 2')('B');\n$bm_rt = radiansToDegrees(Math.atan2($bm_sub(a[1], b[1]), $bm_sub(a[0], b[0])));"}},{"ty":0,"nm":"AutoFlop","mn":"Pseudo/3bf5uID/RubberHose_2-0014","ix":14,"v":{"a":0,"k":0,"ix":14,"x":"var $bm_rt;\nvar hasAF = false, isEnabled = false, output;\ntry {\n var lyrAF = thisComp.layer($bm_sum(thisLayer._name.split('::')[0], '::AutoFlop'));\n isEnabled = lyrAF(4)('Enable')(1);\n var falloffAngle = lyrAF(4)('Falloff')(1);\n hasAF = true;\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = thisLayer(4)('RubberHose 2')('B');\n} catch (e) {\n}\nif (hasAF && isEnabled == 1) {\n var threshRot = lyrAF('ADBE Transform Group')('ADBE Rotate Z');\n threshRot %= 360;\n var ctrlAngle = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var offsetAngle = $bm_sub(threshRot, ctrlAngle);\n offsetAngle %= 360;\n var sign = offsetAngle > 0 && offsetAngle < 180 || offsetAngle < -180 ? -1 : 1;\n var absAngle = Math.abs(offsetAngle);\n if (absAngle > 90) {\n absAngle = Math.abs($bm_sub(absAngle, 180));\n }\n if (absAngle > 90) {\n absAngle = Math.abs($bm_sub(absAngle, 180));\n }\n output = linear(absAngle, 0, falloffAngle, 0, 1);\n output *= sign;\n} else {\n output = 1;\n}\n$bm_rt = output;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"}},{"ty":0,"nm":"Parent Scale","mn":"Pseudo/3bf5uID/RubberHose_2-0015","ix":15,"v":{"a":0,"k":0,"ix":15,"x":"var $bm_rt;\nvar sFactor = 1;\nvar scaleNorm = 0;\nvar layerChain = 'thisLayer';\nwhile (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = $bm_div(eval(layerChain)('ADBE Transform Group')('ADBE Scale')[0], 100);\n sFactor = $bm_mul(sFactor, scaleNorm);\n}\n$bm_rt = sFactor;"}},{"ty":6,"nm":"","mn":"Pseudo/3bf5uID/RubberHose_2-0016","ix":16,"v":0}]}],"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 3::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[20,20],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 3::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6,"x":"var $bm_rt;\nvar eff = thisLayer(4)('RubberHose 2');\nvar autoRotate = eff('Auto Rotate End');\nif (autoRotate == 1) {\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = eff('B');\n var s = length(a, b);\n var sFac = eff('Parent Scale');\n var autoFlop = 1;\n var realism = eff('Realism');\n var bendDir = $bm_div(eff('Bend Direction'), 100);\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n var bendRad = eff('Bend Radius');\n var autoFlop = eff('AutoFlop');\n var baseRot = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var outerRad = $bm_mul(Math.sin(0.78539816339), s);\n var straight = $bm_div($bm_mul(1.4142135623731, outerRad), 2);\n straight /= Math.max(Math.abs(sFac), 0.001);\n var roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\n var innerRad;\n if (hoseLength > straight) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n } else {\n innerRad = straight;\n }\n innerRad = linear(Math.abs(autoFlop), straight, innerRad);\n var flopDir = 1;\n if (bendDir < 0) {\n flopDir = -1;\n }\n flopDir *= autoFlop;\n var opp = $bm_mul($bm_sub(innerRad, straight), flopDir);\n var theta = Math.atan($bm_div(opp, Math.max(straight, 0.001)));\n var bendAngle = radiansToDegrees(theta);\n if (sFac < 0) {\n baseRot *= -1;\n }\n bendRad *= $bm_div($bm_div(theta, $bm_neg(Math.PI)), linear(s, hoseLength, 0, 2, 0.9));\n var rotCalc = $bm_sub($bm_sum(baseRot, bendAngle), bendRad);\n $bm_rt = rotCalc;\n} else {\n $bm_rt = value;\n}\n;"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Circle","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-75,0],[75,0]],"c":false},"ix":2},"nm":"01","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-30],[0,30]],"c":false},"ix":2},"nm":"02","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[30,30],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ControlShape","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.560000002384,0,1],"ix":3,"x":"var $bm_rt;\nif (thisLayer.active) {\n try {\n var eff = thisLayer(4)('RubberHose 2');\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = eff('B');\n var straight = eff('Straight');\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n if (straight > hoseLength) {\n $bm_rt = [\n 0.51,\n 0.83,\n 0.98,\n 1\n ];\n } else {\n $bm_rt = value;\n }\n } catch (err) {\n $bm_rt = value;\n }\n} else {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Control Point","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Hose 3::Start","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\ntry {\n var parentRot = hasParent ? parentTotal() : 0;\n var rotCalc = $bm_sub(thisLayer('ADBE Root Vectors Group')('Admin')('Transform')('Rotation'), parentRot);\n $bm_rt = $bm_sum(rotCalc, value);\n} catch (err) {\n $bm_rt = value;\n}\n;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":0,"k":[232,495,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 3::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[20,20],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 3::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6,"x":"var $bm_rt;\ntry {\n var eff = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var autoRotate = eff('Auto Rotate Start');\n if (autoRotate == 1) {\n var a = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name).toComp([\n 0,\n 0,\n 0\n ]);\n var b = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var s = length(a, b);\n var sFac = eff('Parent Scale');\n var autoFlop = 1;\n var realism = eff('Realism');\n var bendDir = $bm_div(eff('Bend Direction'), 100);\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n var bendRad = eff('Bend Radius');\n var autoFlop = eff('AutoFlop');\n var baseRot = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var outerRad = $bm_mul(Math.sin(0.78539816339), s);\n var straight = $bm_div($bm_mul(1.4142135623731, outerRad), 2);\n straight /= Math.max(Math.abs(sFac), 0.001);\n var roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\n var innerRad;\n if (straight <= hoseLength) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n } else {\n innerRad = straight;\n }\n innerRad = linear(Math.abs(autoFlop), straight, innerRad);\n var flopDir = 1;\n if (bendDir < 0) {\n flopDir = -1;\n }\n flopDir *= autoFlop;\n var opp = $bm_mul($bm_sub(innerRad, straight), flopDir);\n var theta = Math.atan($bm_div(opp, Math.max(straight, 0.001)));\n var bendAngle = radiansToDegrees(theta);\n if (sFac < 0) {\n baseRot *= -1;\n }\n bendRad *= $bm_div($bm_div(theta, $bm_neg(Math.PI)), linear(s, hoseLength, 0, 2, 0.9));\n var rotCalc = $bm_sum($bm_sub(baseRot, bendAngle), bendRad);\n $bm_rt = rotCalc;\n } else {\n $bm_rt = 0;\n }\n ;\n} catch (err) {\n $bm_rt = value;\n}\n;"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Circle","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-75,0],[75,0]],"c":false},"ix":2},"nm":"01","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-30],[0,30]],"c":false},"ix":2},"nm":"02","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[30,30],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ControlShape","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.560000002384,0,1],"ix":3,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name);\n $bm_rt = ctrl(2)('Control Point')(2)('Stroke 1')('Color');\n} catch (e) {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Control Point","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Hose 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\nvar r = 0;\nif (thisLayer.hasParent) {\n r = $bm_neg(parentTotal());\n}\n$bm_rt = r;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":0,"k":[269,500.5,0],"ix":2,"x":"var $bm_rt;\nvar p = [\n 0,\n 0\n ];\ntry {\n if (thisLayer.hasParent) {\n p = parent.fromComp([\n 0,\n 0,\n 0\n ]);\n }\n $bm_rt = p;\n} catch (err) {\n $bm_rt = p;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6,"x":"var $bm_rt;\nvar s = [\n 100,\n 100\n ];\nif (hasParent) {\n var sFactor = parentTotal();\n s = [\n $bm_mul(s[0], sFactor[0]),\n $bm_mul(s[1], sFactor[1])\n ];\n}\n$bm_rt = s;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = eval([layerChain][0]).scale;\n if (scaleNorm[0] != 0 && scaleNorm[1] != 0) {\n scaleNorm = [\n $bm_div(100, scaleNorm[0]),\n $bm_div(100, scaleNorm[1])\n ];\n }\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":1,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254901961,0.137254901961,0.137254901961,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":139,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-8],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Round","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254901961,0.137254901961,0.137254901961,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":139,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-8],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Flat","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":90,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":2,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[690,540],"ix":2},"a":{"a":0,"k":[690,540],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"RoundBottom-FlatBottom 3","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":1,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":120,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-8],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Round","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":120,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[28,-8],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Flat","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[50]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[20]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[50]},{"t":120,"s":[20]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":2,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[690,540],"ix":2},"a":{"a":0,"k":[690,540],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"RoundBottom-FlatBottom 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":1,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":95,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Round","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":95,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Flat","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":2,"ix":3,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[690,540],"ix":2},"a":{"a":0,"k":[690,540],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"RoundBottom-FlatBottom","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Style","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 3::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[200,200],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 3::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":200,"ix":6,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Inner Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"is":{"a":0,"k":100,"ix":8,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Bend Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"or":{"a":0,"k":200,"ix":7,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Outer Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0.01,"ix":1},"e":{"a":0,"k":24.99,"ix":2},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\n$bm_rt = -90;"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar s = thisProperty.propertyGroup(2)(2)(1)(7);\n$bm_rt = [\n -s,\n 0\n];"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar flop;\ntry {\n var eff = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var bendDir = eff('Bend Direction');\n var autoFlop = eff('AutoFlop');\n flop = bendDir > 0 ? 1 : -1;\n autoFlop > 0 ? 0 : flop *= -1;\n var s = flop == 1 ? [\n -100,\n 100\n ] : [\n 100,\n 100\n ];\n if (eff('Parent Scale') < 0) {\n s = [\n $bm_neg(s[0]),\n s[1]\n ];\n }\n $bm_rt = s;\n} catch (err) {\n $bm_rt = value;\n}\n;"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var baseRot = ctrl('Base Rotation');\n var flop = content('Admin').content('ArcMath').transform.scale[0];\n var rotOffset = flop < 0 ? -45 : 225;\n $bm_rt = $bm_sum(baseRot, rotOffset);\n} catch (err) {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ArcMath","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Hose 2::End","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\ntry {\n var parentRot = hasParent ? parentTotal() : 0;\n var rotCalc = $bm_sub(thisLayer('ADBE Root Vectors Group')('Admin')('Transform')('Rotation'), parentRot);\n $bm_rt = $bm_sum(rotCalc, value);\n} catch (err) {\n $bm_rt = value;\n}\n;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[489.5,311.5,0],"to":[2.167,-19.167,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[502.5,196.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[489.5,311.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[502.5,196.5,0],"to":[0,0,0],"ti":[2.167,-19.167,0]},{"t":120,"s":[489.5,311.5,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"RubberHose 2","np":18,"mn":"Pseudo/3bf5uID/RubberHose_2","ix":1,"en":1,"ef":[{"ty":0,"nm":"Hose Length","mn":"Pseudo/3bf5uID/RubberHose_2-0001","ix":1,"v":{"a":0,"k":200,"ix":1}},{"ty":0,"nm":"Bend Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Realism","mn":"Pseudo/3bf5uID/RubberHose_2-0003","ix":3,"v":{"a":0,"k":36,"ix":3}},{"ty":0,"nm":"Bend Direction","mn":"Pseudo/3bf5uID/RubberHose_2-0004","ix":4,"v":{"a":0,"k":-100,"ix":4}},{"ty":7,"nm":"Auto Rotate Start","mn":"Pseudo/3bf5uID/RubberHose_2-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":7,"nm":"Auto Rotate End","mn":"Pseudo/3bf5uID/RubberHose_2-0006","ix":6,"v":{"a":0,"k":1,"ix":6}},{"ty":6,"nm":"Math Stuff","mn":"Pseudo/3bf5uID/RubberHose_2-0007","ix":7,"v":0},{"ty":3,"nm":"A","mn":"Pseudo/3bf5uID/RubberHose_2-0008","ix":8,"v":{"a":0,"k":[202,-82.898],"ix":8,"x":"var $bm_rt;\n$bm_rt = thisLayer.toComp([\n 0,\n 0,\n 0\n]);"}},{"ty":3,"nm":"B","mn":"Pseudo/3bf5uID/RubberHose_2-0009","ix":9,"v":{"a":0,"k":[0,0],"ix":9,"x":"var $bm_rt;\ntry {\n var b = thisLayer(2)('Admin')(2)('B')(2)(1)._name;\n $bm_rt = thisComp.layer(b).toComp([\n 0,\n 0,\n 0\n ]);\n} catch (err) {\n $bm_rt = value;\n}"}},{"ty":0,"nm":"Outer Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0010","ix":10,"v":{"a":0,"k":77.519,"ix":10,"x":"var $bm_rt;\nvar a = thisLayer(4)('RubberHose 2')('A');\nvar b = thisLayer(4)('RubberHose 2')('B');\nvar s = length(a, b);\n$bm_rt = $bm_mul(Math.sin(0.78539816339), s);"}},{"ty":0,"nm":"Inner Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0011","ix":11,"v":{"a":0,"k":109.929,"ix":11,"x":"var $bm_rt;\nvar eff = thisLayer(4)('RubberHose 2');\nvar bendRad = eff('Bend Radius');\nvar hoseLength = $bm_div(eff('Hose Length'), 2);\nvar realism = eff('Realism');\nvar bendDir = $bm_div(eff('Bend Direction'), 100);\nvar sFac = eff('Parent Scale');\nvar straight = eff('Straight');\nvar autoFlop = eff('AutoFlop');\nvar roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\nvar innerRad;\nif (hoseLength > straight) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n} else {\n innerRad = straight;\n}\ninnerRad *= Math.abs(sFac);\ninnerRad = linear(Math.abs(autoFlop), $bm_mul(straight, Math.max(Math.abs(sFac), 0.001)), innerRad);\n$bm_rt = innerRad;"}},{"ty":0,"nm":"Straight","mn":"Pseudo/3bf5uID/RubberHose_2-0012","ix":12,"v":{"a":0,"k":54.814,"ix":12,"x":"var $bm_rt;\nvar sFac = thisLayer(4)('RubberHose 2')('Parent Scale');\nvar outerRad = $bm_div(thisLayer(4)('RubberHose 2')('Outer Radius'), Math.max(Math.abs(sFac), 0.001));\n;\n$bm_rt = $bm_div($bm_mul(1.4142135623731, outerRad), 2);"}},{"ty":0,"nm":"Base Rotation","mn":"Pseudo/3bf5uID/RubberHose_2-0013","ix":13,"v":{"a":0,"k":-13.719,"ix":13,"x":"var $bm_rt;\nvar a = thisLayer(4)('RubberHose 2')('A');\nvar b = thisLayer(4)('RubberHose 2')('B');\n$bm_rt = radiansToDegrees(Math.atan2($bm_sub(a[1], b[1]), $bm_sub(a[0], b[0])));"}},{"ty":0,"nm":"AutoFlop","mn":"Pseudo/3bf5uID/RubberHose_2-0014","ix":14,"v":{"a":0,"k":1,"ix":14,"x":"var $bm_rt;\nvar hasAF = false, isEnabled = false, output;\ntry {\n var lyrAF = thisComp.layer($bm_sum(thisLayer._name.split('::')[0], '::AutoFlop'));\n isEnabled = lyrAF(4)('Enable')(1);\n var falloffAngle = lyrAF(4)('Falloff')(1);\n hasAF = true;\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = thisLayer(4)('RubberHose 2')('B');\n} catch (e) {\n}\nif (hasAF && isEnabled == 1) {\n var threshRot = lyrAF('ADBE Transform Group')('ADBE Rotate Z');\n threshRot %= 360;\n var ctrlAngle = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var offsetAngle = $bm_sub(threshRot, ctrlAngle);\n offsetAngle %= 360;\n var sign = offsetAngle > 0 && offsetAngle < 180 || offsetAngle < -180 ? -1 : 1;\n var absAngle = Math.abs(offsetAngle);\n if (absAngle > 90) {\n absAngle = Math.abs($bm_sub(absAngle, 180));\n }\n if (absAngle > 90) {\n absAngle = Math.abs($bm_sub(absAngle, 180));\n }\n output = linear(absAngle, 0, falloffAngle, 0, 1);\n output *= sign;\n} else {\n output = 1;\n}\n$bm_rt = output;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"}},{"ty":0,"nm":"Parent Scale","mn":"Pseudo/3bf5uID/RubberHose_2-0015","ix":15,"v":{"a":0,"k":1,"ix":15,"x":"var $bm_rt;\nvar sFactor = 1;\nvar scaleNorm = 0;\nvar layerChain = 'thisLayer';\nwhile (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = $bm_div(eval(layerChain)('ADBE Transform Group')('ADBE Scale')[0], 100);\n sFactor = $bm_mul(sFactor, scaleNorm);\n}\n$bm_rt = sFactor;"}},{"ty":6,"nm":"","mn":"Pseudo/3bf5uID/RubberHose_2-0016","ix":16,"v":0}]}],"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 2::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[20,20],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 2::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":3.249,"ix":6,"x":"var $bm_rt;\nvar eff = thisLayer(4)('RubberHose 2');\nvar autoRotate = eff('Auto Rotate End');\nif (autoRotate == 1) {\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = eff('B');\n var s = length(a, b);\n var sFac = eff('Parent Scale');\n var autoFlop = 1;\n var realism = eff('Realism');\n var bendDir = $bm_div(eff('Bend Direction'), 100);\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n var bendRad = eff('Bend Radius');\n var autoFlop = eff('AutoFlop');\n var baseRot = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var outerRad = $bm_mul(Math.sin(0.78539816339), s);\n var straight = $bm_div($bm_mul(1.4142135623731, outerRad), 2);\n straight /= Math.max(Math.abs(sFac), 0.001);\n var roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\n var innerRad;\n if (hoseLength > straight) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n } else {\n innerRad = straight;\n }\n innerRad = linear(Math.abs(autoFlop), straight, innerRad);\n var flopDir = 1;\n if (bendDir < 0) {\n flopDir = -1;\n }\n flopDir *= autoFlop;\n var opp = $bm_mul($bm_sub(innerRad, straight), flopDir);\n var theta = Math.atan($bm_div(opp, Math.max(straight, 0.001)));\n var bendAngle = radiansToDegrees(theta);\n if (sFac < 0) {\n baseRot *= -1;\n }\n bendRad *= $bm_div($bm_div(theta, $bm_neg(Math.PI)), linear(s, hoseLength, 0, 2, 0.9));\n var rotCalc = $bm_sub($bm_sum(baseRot, bendAngle), bendRad);\n $bm_rt = rotCalc;\n} else {\n $bm_rt = value;\n}\n;"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Circle","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-75,0],[75,0]],"c":false},"ix":2},"nm":"01","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-30],[0,30]],"c":false},"ix":2},"nm":"02","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[30,30],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ControlShape","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.560000002384,0,1],"ix":3,"x":"var $bm_rt;\nif (thisLayer.active) {\n try {\n var eff = thisLayer(4)('RubberHose 2');\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = eff('B');\n var straight = eff('Straight');\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n if (straight > hoseLength) {\n $bm_rt = [\n 0.51,\n 0.83,\n 0.98,\n 1\n ];\n } else {\n $bm_rt = value;\n }\n } catch (err) {\n $bm_rt = value;\n }\n} else {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Control Point","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Hose 2::Start","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\ntry {\n var parentRot = hasParent ? parentTotal() : 0;\n var rotCalc = $bm_sub(thisLayer('ADBE Root Vectors Group')('Admin')('Transform')('Rotation'), parentRot);\n $bm_rt = $bm_sum(rotCalc, value);\n} catch (err) {\n $bm_rt = value;\n}\n;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":0,"k":[383,337.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 2::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[20,20],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 2::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6,"x":"var $bm_rt;\ntry {\n var eff = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var autoRotate = eff('Auto Rotate Start');\n if (autoRotate == 1) {\n var a = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name).toComp([\n 0,\n 0,\n 0\n ]);\n var b = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var s = length(a, b);\n var sFac = eff('Parent Scale');\n var autoFlop = 1;\n var realism = eff('Realism');\n var bendDir = $bm_div(eff('Bend Direction'), 100);\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n var bendRad = eff('Bend Radius');\n var autoFlop = eff('AutoFlop');\n var baseRot = $bm_neg(radiansToDegrees(Math.atan2($bm_sub(b[0], a[0]), $bm_sub(b[1], a[1]))));\n var outerRad = $bm_mul(Math.sin(0.78539816339), s);\n var straight = $bm_div($bm_mul(1.4142135623731, outerRad), 2);\n straight /= Math.max(Math.abs(sFac), 0.001);\n var roundShrink = linear(Math.abs(bendRad), 0, 100, 1, 0.87);\n var innerRad;\n if (straight <= hoseLength) {\n innerRad = $bm_sum(straight, $bm_mul(Math.sqrt($bm_sub(Math.pow(hoseLength, 2), Math.pow(straight, 2))), roundShrink));\n innerRad = linear(realism, 0, 100, hoseLength, innerRad);\n innerRad = linear(Math.abs(bendDir), straight, innerRad);\n } else {\n innerRad = straight;\n }\n innerRad = linear(Math.abs(autoFlop), straight, innerRad);\n var flopDir = 1;\n if (bendDir < 0) {\n flopDir = -1;\n }\n flopDir *= autoFlop;\n var opp = $bm_mul($bm_sub(innerRad, straight), flopDir);\n var theta = Math.atan($bm_div(opp, Math.max(straight, 0.001)));\n var bendAngle = radiansToDegrees(theta);\n if (sFac < 0) {\n baseRot *= -1;\n }\n bendRad *= $bm_div($bm_div(theta, $bm_neg(Math.PI)), linear(s, hoseLength, 0, 2, 0.9));\n var rotCalc = $bm_sum($bm_sub(baseRot, bendAngle), bendRad);\n $bm_rt = rotCalc;\n } else {\n $bm_rt = 0;\n }\n ;\n} catch (err) {\n $bm_rt = value;\n}\n;"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Circle","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-75,0],[75,0]],"c":false},"ix":2},"nm":"01","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-30],[0,30]],"c":false},"ix":2},"nm":"02","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[30,30],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ControlShape","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.560000002384,0,1],"ix":3,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name);\n $bm_rt = ctrl(2)('Control Point')(2)('Stroke 1')('Color');\n} catch (e) {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Control Point","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Hose 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\nvar r = 0;\nif (thisLayer.hasParent) {\n r = $bm_neg(parentTotal());\n}\n$bm_rt = r;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":0,"k":[295,2120.5,0],"ix":2,"x":"var $bm_rt;\nvar p = [\n 0,\n 0\n ];\ntry {\n if (thisLayer.hasParent) {\n p = parent.fromComp([\n 0,\n 0,\n 0\n ]);\n }\n $bm_rt = p;\n} catch (err) {\n $bm_rt = p;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6,"x":"var $bm_rt;\nvar s = [\n 100,\n 100\n ];\nif (hasParent) {\n var sFactor = parentTotal();\n s = [\n $bm_mul(s[0], sFactor[0]),\n $bm_mul(s[1], sFactor[1])\n ];\n}\n$bm_rt = s;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = eval([layerChain][0]).scale;\n if (scaleNorm[0] != 0 && scaleNorm[1] != 0) {\n scaleNorm = [\n $bm_div(100, scaleNorm[0]),\n $bm_div(100, scaleNorm[1])\n ];\n }\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":12,"ix":1},"e":{"a":0,"k":38,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[0.822625852099,0.963921640434,0.040069026573,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":55,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"BaseHose 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":55,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"BaseHose","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Style","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 2::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[200,200],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 2::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":200,"ix":6,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Inner Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"is":{"a":0,"k":100,"ix":8,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Bend Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"or":{"a":0,"k":200,"ix":7,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Outer Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0.01,"ix":1},"e":{"a":0,"k":24.99,"ix":2},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\n$bm_rt = -90;"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar s = thisProperty.propertyGroup(2)(2)(1)(7);\n$bm_rt = [\n -s,\n 0\n];"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar flop;\ntry {\n var eff = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var bendDir = eff('Bend Direction');\n var autoFlop = eff('AutoFlop');\n flop = bendDir > 0 ? 1 : -1;\n autoFlop > 0 ? 0 : flop *= -1;\n var s = flop == 1 ? [\n -100,\n 100\n ] : [\n 100,\n 100\n ];\n if (eff('Parent Scale') < 0) {\n s = [\n $bm_neg(s[0]),\n s[1]\n ];\n }\n $bm_rt = s;\n} catch (err) {\n $bm_rt = value;\n}\n;"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var baseRot = ctrl('Base Rotation');\n var flop = content('Admin').content('ArcMath').transform.scale[0];\n var rotOffset = flop < 0 ? -45 : 225;\n $bm_rt = $bm_sum(baseRot, rotOffset);\n} catch (err) {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ArcMath","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Hose 1::End","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\ntry {\n var parentRot = hasParent ? parentTotal() : 0;\n var rotCalc = $bm_sub(thisLayer('ADBE Root Vectors Group')('Admin')('Transform')('Rotation'), parentRot);\n $bm_rt = $bm_sum(rotCalc, value);\n} catch (err) {\n $bm_rt = value;\n}\n;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[89,311,0],"to":[-1,-19,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[83,197,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[89,311,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[83,197,0],"to":[0,0,0],"ti":[-1,-19,0]},{"t":120,"s":[89,311,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"RubberHose 2","np":18,"mn":"Pseudo/3bf5uID/RubberHose_2","ix":1,"en":1,"ef":[{"ty":0,"nm":"Hose Length","mn":"Pseudo/3bf5uID/RubberHose_2-0001","ix":1,"v":{"a":0,"k":200,"ix":1}},{"ty":0,"nm":"Bend Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0002","ix":2,"v":{"a":0,"k":100,"ix":2}},{"ty":0,"nm":"Realism","mn":"Pseudo/3bf5uID/RubberHose_2-0003","ix":3,"v":{"a":0,"k":36,"ix":3}},{"ty":0,"nm":"Bend Direction","mn":"Pseudo/3bf5uID/RubberHose_2-0004","ix":4,"v":{"a":0,"k":100,"ix":4}},{"ty":7,"nm":"Auto Rotate Start","mn":"Pseudo/3bf5uID/RubberHose_2-0005","ix":5,"v":{"a":0,"k":0,"ix":5}},{"ty":7,"nm":"Auto Rotate End","mn":"Pseudo/3bf5uID/RubberHose_2-0006","ix":6,"v":{"a":0,"k":1,"ix":6}},{"ty":6,"nm":"Math Stuff","mn":"Pseudo/3bf5uID/RubberHose_2-0007","ix":7,"v":0},{"ty":3,"nm":"A","mn":"Pseudo/3bf5uID/RubberHose_2-0008","ix":8,"v":{"a":0,"k":[216,-54.538],"ix":8,"x":"var $bm_rt;\n$bm_rt = thisLayer.toComp([\n 0,\n 0,\n 0\n]);"}},{"ty":3,"nm":"B","mn":"Pseudo/3bf5uID/RubberHose_2-0009","ix":9,"v":{"a":0,"k":[0,0],"ix":9,"x":"var $bm_rt;\ntry {\n var b = thisLayer(2)('Admin')(2)('B')(2)(1)._name;\n $bm_rt = thisComp.layer(b).toComp([\n 0,\n 0,\n 0\n ]);\n} catch (err) {\n $bm_rt = value;\n}"}},{"ty":0,"nm":"Outer Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0010","ix":10,"v":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[78.718]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1,"s":[78.794]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[79.025]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[79.41]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[79.958]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[80.675]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[81.575]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[82.672]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[83.971]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[85.473]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[87.181]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11,"s":[89.091]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[91.19]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[93.46]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[95.882]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[98.43]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[101.074]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[103.783]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[106.521]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[109.254]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[111.946]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[114.553]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[117.043]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[119.378]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[121.513]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[123.421]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[125.057]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[126.387]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[127.38]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[128]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[128.213]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[128]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[127.381]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[126.39]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[125.056]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[123.417]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[121.516]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[119.378]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38,"s":[117.045]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[114.552]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[111.939]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41,"s":[109.251]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[106.522]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[103.783]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[101.074]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[98.43]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46,"s":[95.882]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[93.46]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[91.19]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[89.094]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[87.184]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[85.471]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[83.968]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[82.67]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[81.575]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[80.675]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[79.957]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[79.41]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[79.025]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[78.795]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[78.718]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[78.795]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":62,"s":[79.026]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[79.41]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[79.957]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[80.676]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[81.575]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":67,"s":[82.67]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[83.968]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":69,"s":[85.473]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[87.185]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[89.094]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[91.189]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[93.46]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":74,"s":[95.883]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[98.431]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[101.075]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[103.783]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[106.521]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[109.25]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[111.941]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[114.554]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":82,"s":[117.045]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":83,"s":[119.378]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[121.516]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":85,"s":[123.42]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":86,"s":[125.055]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":87,"s":[126.39]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":88,"s":[127.382]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[128]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[128.213]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":91,"s":[128]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":92,"s":[127.38]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[126.387]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[125.057]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[123.421]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[121.513]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97,"s":[119.378]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[117.043]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":99,"s":[114.553]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[111.946]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":101,"s":[109.254]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[106.521]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[103.783]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[101.074]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":105,"s":[98.43]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":106,"s":[95.882]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":107,"s":[93.46]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[91.19]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[89.091]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[87.181]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[85.473]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":112,"s":[83.971]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[82.672]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[81.575]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":115,"s":[80.675]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[79.958]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":117,"s":[79.41]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":118,"s":[79.025]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":119,"s":[78.794]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[78.718]},{"t":121,"s":[78.718]}],"ix":10}},{"ty":0,"nm":"Inner Radius","mn":"Pseudo/3bf5uID/RubberHose_2-0011","ix":11,"v":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[110.058]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1,"s":[110.066]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[110.09]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[110.131]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[110.187]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[110.26]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[110.35]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[110.456]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[110.577]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[110.71]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[110.854]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11,"s":[111.003]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[111.152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[111.297]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[111.43]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[111.545]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[111.635]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[111.695]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[111.717]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[111.699]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[111.635]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[111.527]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[111.374]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[111.181]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[110.955]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[110.709]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[110.459]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[110.226]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[110.032]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[109.901]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[109.854]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[109.901]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[110.031]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[110.225]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[110.459]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[110.71]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[110.955]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[111.181]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38,"s":[111.374]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[111.527]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[111.636]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41,"s":[111.699]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[111.717]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[111.695]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[111.635]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[111.545]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46,"s":[111.43]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[111.297]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[111.152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[111.003]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[110.854]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[110.71]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[110.577]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[110.456]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[110.35]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[110.26]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[110.187]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[110.131]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[110.09]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[110.066]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[110.058]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[110.066]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":62,"s":[110.09]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[110.131]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[110.187]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[110.261]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[110.35]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":67,"s":[110.456]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[110.576]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":69,"s":[110.71]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[110.854]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[111.003]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[111.152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[111.297]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":74,"s":[111.43]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[111.545]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[111.635]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[111.695]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[111.717]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[111.699]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[111.636]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[111.527]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":82,"s":[111.374]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":83,"s":[111.181]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[110.955]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":85,"s":[110.709]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":86,"s":[110.459]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":87,"s":[110.225]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":88,"s":[110.031]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[109.901]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[109.854]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":91,"s":[109.901]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":92,"s":[110.032]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[110.226]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[110.459]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[110.709]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[110.955]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97,"s":[111.181]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[111.374]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":99,"s":[111.527]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[111.635]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":101,"s":[111.699]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[111.717]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[111.695]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[111.635]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":105,"s":[111.545]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":106,"s":[111.43]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":107,"s":[111.297]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[111.152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[111.003]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[110.854]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[110.71]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":112,"s":[110.577]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[110.456]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[110.35]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":115,"s":[110.26]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[110.187]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":117,"s":[110.131]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":118,"s":[110.09]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":119,"s":[110.066]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[110.058]},{"t":121,"s":[110.058]}],"ix":11}},{"ty":0,"nm":"Straight","mn":"Pseudo/3bf5uID/RubberHose_2-0012","ix":12,"v":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[55.662]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1,"s":[55.716]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[55.879]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[56.152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[56.539]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[57.046]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[57.682]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[58.458]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[59.377]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[60.439]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[61.646]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11,"s":[62.997]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[64.481]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[66.086]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[67.799]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[69.601]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[71.47]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[73.386]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[75.322]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[77.254]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[79.157]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[81.001]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[82.762]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[84.413]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[85.923]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[87.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[88.429]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[89.369]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[90.071]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[90.51]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[90.66]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[90.51]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[90.072]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[89.371]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[88.428]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[87.269]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[85.925]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[84.413]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38,"s":[82.763]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[81.001]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[79.153]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41,"s":[77.252]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[75.323]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[73.386]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[71.47]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[69.6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46,"s":[67.799]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[66.086]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[64.481]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[62.999]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[61.648]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[60.437]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[59.374]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[58.457]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[57.682]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[57.046]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[56.538]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[56.151]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[55.879]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[55.717]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[55.662]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[55.717]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":62,"s":[55.88]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[56.151]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[56.538]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[57.046]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[57.682]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":67,"s":[58.457]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[59.374]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":69,"s":[60.438]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[61.649]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[62.999]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[64.48]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[66.086]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":74,"s":[67.8]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[69.601]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[71.47]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[73.386]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[75.321]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[77.252]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[79.154]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[81.002]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":82,"s":[82.763]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":83,"s":[84.413]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[85.925]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":85,"s":[87.271]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":86,"s":[88.428]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":87,"s":[89.371]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":88,"s":[90.072]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[90.51]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[90.66]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":91,"s":[90.51]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":92,"s":[90.071]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[89.369]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[88.429]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[87.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[85.923]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97,"s":[84.413]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[82.762]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":99,"s":[81.001]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[79.157]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":101,"s":[77.254]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[75.322]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[73.386]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[71.47]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":105,"s":[69.601]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":106,"s":[67.799]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":107,"s":[66.086]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[64.481]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[62.997]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[61.646]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[60.439]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":112,"s":[59.377]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[58.458]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[57.682]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":115,"s":[57.046]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[56.539]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":117,"s":[56.152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":118,"s":[55.879]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":119,"s":[55.716]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[55.662]},{"t":121,"s":[55.662]}],"ix":12}},{"ty":0,"nm":"Base Rotation","mn":"Pseudo/3bf5uID/RubberHose_2-0013","ix":13,"v":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-165.964]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1,"s":[-165.784]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[-165.252]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[-164.403]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[-163.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[-161.897]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[-160.317]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[-158.563]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[-156.681]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[-154.714]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[-152.696]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11,"s":[-150.657]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[-148.632]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[-146.647]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[-144.725]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[-142.883]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-141.136]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[-139.494]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[-137.965]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[-136.551]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[-135.256]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[-134.082]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[-133.029]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[-132.094]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[-131.281]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[-130.586]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[-130.011]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[-129.558]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[-129.228]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[-129.025]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[-128.956]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[-129.025]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[-129.228]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-129.557]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[-130.012]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[-130.587]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[-131.28]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[-132.094]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38,"s":[-133.028]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[-134.083]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[-135.259]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41,"s":[-136.553]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[-137.964]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[-139.494]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[-141.137]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[-142.883]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46,"s":[-144.725]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[-146.647]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[-148.631]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[-150.653]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[-152.693]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[-154.717]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[-156.686]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[-158.566]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[-160.317]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[-161.899]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[-163.273]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[-164.404]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[-165.251]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[-165.781]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[-165.964]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[-165.781]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":62,"s":[-165.251]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[-164.404]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-163.273]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[-161.897]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[-160.317]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":67,"s":[-158.566]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[-156.686]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":69,"s":[-154.715]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[-152.691]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[-150.654]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[-148.632]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[-146.647]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":74,"s":[-144.724]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[-142.883]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[-141.136]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[-139.494]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[-137.965]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[-136.553]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[-135.258]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[-134.082]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":82,"s":[-133.028]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":83,"s":[-132.094]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[-131.28]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":85,"s":[-130.586]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":86,"s":[-130.012]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":87,"s":[-129.557]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":88,"s":[-129.227]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[-129.025]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[-128.956]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":91,"s":[-129.025]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":92,"s":[-129.228]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[-129.558]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[-130.011]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[-130.586]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[-131.281]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97,"s":[-132.094]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[-133.029]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":99,"s":[-134.082]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[-135.256]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":101,"s":[-136.551]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[-137.965]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[-139.494]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[-141.136]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":105,"s":[-142.883]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":106,"s":[-144.725]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":107,"s":[-146.647]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[-148.632]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[-150.657]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[-152.696]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[-154.714]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":112,"s":[-156.681]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[-158.563]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[-160.317]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":115,"s":[-161.897]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[-163.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":117,"s":[-164.403]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":118,"s":[-165.252]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":119,"s":[-165.784]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[-165.964]},{"t":121,"s":[-165.964]}],"ix":13}},{"ty":0,"nm":"AutoFlop","mn":"Pseudo/3bf5uID/RubberHose_2-0014","ix":14,"v":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":62,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":67,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":69,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":74,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":82,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":83,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":85,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":86,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":87,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":88,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":91,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":92,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":99,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":101,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":105,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":106,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":107,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":112,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":115,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":117,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":118,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":119,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[1]},{"t":121,"s":[1]}],"ix":14}},{"ty":0,"nm":"Parent Scale","mn":"Pseudo/3bf5uID/RubberHose_2-0015","ix":15,"v":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":62,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":67,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":69,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":74,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":82,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":83,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":85,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":86,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":87,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":88,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":91,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":92,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":99,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":101,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":105,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":106,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":107,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":112,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":115,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":117,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":118,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":119,"s":[1]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[1]},{"t":121,"s":[1]}],"ix":15}},{"ty":6,"nm":"","mn":"Pseudo/3bf5uID/RubberHose_2-0016","ix":16,"v":0}]}],"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 1::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[20,20],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 1::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-4.252]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1,"s":[-4.156]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[-3.878]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[-3.453]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[-2.924]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[-2.338]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[-1.747]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[-1.199]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[-0.743]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[-0.423]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[-0.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11,"s":[-0.318]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[-0.575]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[-1.05]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[-1.738]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[-2.626]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-3.693]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[-4.913]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[-6.255]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[-7.688]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[-9.177]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[-10.687]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[-12.185]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[-13.64]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[-15.012]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[-16.274]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[-17.387]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[-18.313]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[-19.02]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[-19.468]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[-19.623]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[-19.468]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[-19.021]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[-18.315]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[-17.386]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[-16.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[-15.014]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[-13.64]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38,"s":[-12.186]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[-10.686]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[-9.174]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41,"s":[-7.686]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[-6.256]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[-4.913]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[-3.693]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[-2.626]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46,"s":[-1.738]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[-1.05]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[-0.576]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[-0.318]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[-0.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[-0.423]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[-0.744]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[-1.199]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[-1.747]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[-2.339]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[-2.924]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[-3.454]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[-3.877]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[-4.154]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[-4.252]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[-4.154]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":62,"s":[-3.877]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[-3.454]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-2.924]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[-2.338]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[-1.747]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":67,"s":[-1.2]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[-0.744]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":69,"s":[-0.423]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[-0.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[-0.318]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[-0.575]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[-1.05]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":74,"s":[-1.738]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[-2.626]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[-3.693]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[-4.913]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[-6.255]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[-7.686]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[-9.175]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[-10.688]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":82,"s":[-12.186]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":83,"s":[-13.64]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[-15.014]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":85,"s":[-16.273]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":86,"s":[-17.385]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":87,"s":[-18.315]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":88,"s":[-19.021]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[-19.468]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[-19.623]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":91,"s":[-19.468]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":92,"s":[-19.02]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[-18.313]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[-17.387]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[-16.274]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[-15.012]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97,"s":[-13.64]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[-12.185]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":99,"s":[-10.687]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[-9.177]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":101,"s":[-7.688]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[-6.255]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[-4.913]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[-3.693]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":105,"s":[-2.626]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":106,"s":[-1.738]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":107,"s":[-1.05]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[-0.575]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[-0.318]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[-0.272]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[-0.423]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":112,"s":[-0.743]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[-1.199]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[-1.747]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":115,"s":[-2.338]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[-2.924]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":117,"s":[-3.453]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":118,"s":[-3.878]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":119,"s":[-4.156]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[-4.252]},{"t":121,"s":[-4.252]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Circle","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-75,0],[75,0]],"c":false},"ix":2},"nm":"01","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-30],[0,30]],"c":false},"ix":2},"nm":"02","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[30,30],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ControlShape","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.560000002384,0,1],"ix":3,"x":"var $bm_rt;\nif (thisLayer.active) {\n try {\n var eff = thisLayer(4)('RubberHose 2');\n var a = thisLayer.toComp([\n 0,\n 0,\n 0\n ]);\n var b = eff('B');\n var straight = eff('Straight');\n var hoseLength = $bm_div(eff('Hose Length'), 2);\n if (straight > hoseLength) {\n $bm_rt = [\n 0.51,\n 0.83,\n 0.98,\n 1\n ];\n } else {\n $bm_rt = value;\n }\n } catch (err) {\n $bm_rt = value;\n }\n} else {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Control Point","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Hose 1::Start","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\ntry {\n var parentRot = hasParent ? parentTotal() : 0;\n var rotCalc = $bm_sub(thisLayer('ADBE Root Vectors Group')('Admin')('Transform')('Rotation'), parentRot);\n $bm_rt = $bm_sum(rotCalc, value);\n} catch (err) {\n $bm_rt = value;\n}\n;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":0,"k":[197,338,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 1::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[20,20],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 1::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":1,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":2,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":3,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":6,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":10,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":11,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":15,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":17,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":19,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":22,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":23,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":29,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":31,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":33,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":34,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":35,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":38,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":39,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":41,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":42,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":43,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":45,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":46,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":49,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":51,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":54,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":55,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":57,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":58,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":59,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":61,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":62,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":63,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":65,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":66,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":67,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":69,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":70,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":71,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":73,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":74,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":75,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":77,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":79,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":80,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":81,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":82,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":83,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":85,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":86,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":87,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":88,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":89,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":90,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":91,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":92,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":93,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":94,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":95,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":97,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":99,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":100,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":101,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":102,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":103,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":105,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":106,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":107,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":109,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":111,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":112,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":113,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":114,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":115,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":117,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":118,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":119,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"t":121,"s":[0]}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Circle","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-75,0],[75,0]],"c":false},"ix":2},"nm":"01","mn":"ADBE Vector Shape - Group","hd":false},{"ind":2,"ty":"sh","ix":3,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[0,-30],[0,30]],"c":false},"ix":2},"nm":"02","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[30,30],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ControlShape","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.560000002384,0,1],"ix":3,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name);\n $bm_rt = ctrl(2)('Control Point')(2)('Stroke 1')('Color');\n} catch (e) {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Control Point","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Hose 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10,"x":"var $bm_rt;\nvar r = 0;\nif (thisLayer.hasParent) {\n r = $bm_neg(parentTotal());\n}\n$bm_rt = r;\nfunction parentTotal() {\n var parentVal = 0;\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n parentVal = $bm_sum(parentVal, eval([layerChain][0]).rotation);\n }\n return parentVal;\n}"},"p":{"a":0,"k":[-53,2110.5,0],"ix":2,"x":"var $bm_rt;\nvar p = [\n 0,\n 0\n ];\ntry {\n if (thisLayer.hasParent) {\n p = parent.fromComp([\n 0,\n 0,\n 0\n ]);\n }\n $bm_rt = p;\n} catch (err) {\n $bm_rt = p;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6,"x":"var $bm_rt;\nvar s = [\n 100,\n 100\n ];\nif (hasParent) {\n var sFactor = parentTotal();\n s = [\n $bm_mul(s[0], sFactor[0]),\n $bm_mul(s[1], sFactor[1])\n ];\n}\n$bm_rt = s;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = eval([layerChain][0]).scale;\n if (scaleNorm[0] != 0 && scaleNorm[1] != 0) {\n scaleNorm = [\n $bm_div(100, scaleNorm[0]),\n $bm_div(100, scaleNorm[1])\n ];\n }\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":20,"ix":1},"e":{"a":0,"k":35,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":65,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":1,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"BaseHose 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":500,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"is":{"a":0,"k":0,"ix":8,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"or":{"a":0,"k":113,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"os":{"a":0,"k":0,"ix":9,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"e":{"a":0,"k":0,"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(1).propertyIndex;\n$bm_rt = thisLayer(2)('Admin')(2)('ArcMath')(2)(grp)(p);"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"o":{"a":0,"k":100,"ix":7,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sk":{"a":0,"k":0,"ix":4,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"sa":{"a":0,"k":0,"ix":5,"x":"var $bm_rt;\nvar p = thisProperty.propertyIndex;\nvar grp = thisProperty.propertyGroup(2).propertyIndex;\n$bm_rt = content('Admin').content('ArcMath')('ADBE Vector Transform Group')(p);"},"nm":"Transform"}],"nm":"Arc","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":55,"ix":5,"x":"var $bm_rt;\nvar w = value;\nif (thisLayer.hasParent) {\n var sFac = Math.abs(parentTotal()[0]);\n w *= sFac;\n}\n$bm_rt = w;\nfunction parentTotal() {\n var sFactor = [\n 1,\n 1\n ];\n var scaleNorm = [\n 0,\n 0\n ];\n var layerChain = 'thisLayer';\n while (eval([layerChain][0]).hasParent) {\n layerChain = $bm_sum(layerChain, '.parent');\n scaleNorm = div(eval([layerChain][0]).scale, 100);\n sFactor = [\n $bm_mul(sFactor[0], scaleNorm[0]),\n $bm_mul(sFactor[1], scaleNorm[1])\n ];\n }\n return sFactor;\n}"},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"BaseHose","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Style","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 1::End","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[135,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"A","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[200,200],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Hose 1::Start","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"B","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"2.01","np":0,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"cl":"01"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Version","np":1,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":4,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":200,"ix":6,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Inner Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"is":{"a":0,"k":100,"ix":8,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Bend Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"or":{"a":0,"k":200,"ix":7,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('Outer Radius');\n} catch (err) {\n $bm_rt = value;\n}"},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"LineForCurve","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"tm","s":{"a":0,"k":0.01,"ix":1},"e":{"a":0,"k":24.99,"ix":2},"o":{"a":0,"k":-90,"ix":3,"x":"var $bm_rt;\n$bm_rt = -90;"},"m":1,"ix":2,"nm":"Line Halfer","mn":"ADBE Vector Filter - Trim","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1,"x":"var $bm_rt;\nvar s = thisProperty.propertyGroup(2)(2)(1)(7);\n$bm_rt = [\n -s,\n 0\n];"},"s":{"a":0,"k":[100,100],"ix":3,"x":"var $bm_rt;\nvar flop;\ntry {\n var eff = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var bendDir = eff('Bend Direction');\n var autoFlop = eff('AutoFlop');\n flop = bendDir > 0 ? 1 : -1;\n autoFlop > 0 ? 0 : flop *= -1;\n var s = flop == 1 ? [\n -100,\n 100\n ] : [\n 100,\n 100\n ];\n if (eff('Parent Scale') < 0) {\n s = [\n $bm_neg(s[0]),\n s[1]\n ];\n }\n $bm_rt = s;\n} catch (err) {\n $bm_rt = value;\n}\n;"},"r":{"a":0,"k":45,"ix":6,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n var baseRot = ctrl('Base Rotation');\n var flop = content('Admin').content('ArcMath').transform.scale[0];\n var rotOffset = flop < 0 ? -45 : 225;\n $bm_rt = $bm_sum(baseRot, rotOffset);\n} catch (err) {\n $bm_rt = value;\n}"},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ArcMath","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2,"x":"var $bm_rt;\ntry {\n var ctrl = thisComp.layer(thisLayer(2)('Admin')(2)('A')(2)(1)._name)(4)('RubberHose 2');\n $bm_rt = ctrl('A');\n} catch (err) {\n $bm_rt = value;\n}"},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Admin","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[319,354.5,0],"to":[0.167,-17.5,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[320,249.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[319,354.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[320,249.5,0],"to":[0,0,0],"ti":[0.167,-17.5,0]},{"t":120,"s":[319,354.5,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-278,-52],[231,-52]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.137254901961,0.137254901961,0.137254901961,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.138823505476,0.138664170807,0.13860576854,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[40,108],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.138823505476,0.138664170807,0.13860576854,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-295.832,-49.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[61.111,65.86],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 7","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[40,108],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.138823505476,0.138664170807,0.13860576854,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[246.168,-49.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[61.111,65.86],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 4","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[40,108],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.138823505476,0.138664170807,0.13860576854,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-285.832,-49.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[61.111,116.667],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 6","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[40,108],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.138823505476,0.138664170807,0.13860576854,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[236.168,-49.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[61.111,116.667],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 3","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[40,108],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.138823505476,0.138664170807,0.13860576854,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-277.832,-49.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[61.111,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 5","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[40,108],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":3,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.138823505476,0.138664170807,0.13860576854,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[222.168,-49.6],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[61.111,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 2","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[325,354.5,0],"to":[0,-5,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[325,324.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[325,354.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[325,324.5,0],"to":[0,0,0],"ti":[0,-5,0]},{"t":120,"s":[325,354.5,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14,14],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.913725490196,0.913725490196,0.913725490196,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":139,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.389803897633,0.112858484306,0.011311996684,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-33,148.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[291,500.5,0],"ix":2},"a":{"a":0,"k":[-36,139.939,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[88.286,7,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[88.3,99,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[88.3,7,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":90,"s":[88.3,99,100]},{"t":120,"s":[88.3,7,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[7.079,92.857],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":139,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-35.858,132.796],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[296,144],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.850980451995,0.262745098039,0.047058827269,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-35,139],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[93.913,103.125],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Shape Layer 4","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[325,362.5,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,90.85,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[358,272],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.628234982958,0.186216990153,0.024143998763,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-28,17],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[119.89,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":18,"ty":0,"nm":"Body","tt":1,"refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[325,354.5,0],"ix":2},"a":{"a":0,"k":[325,325,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":650,"h":650,"ip":0,"op":480,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256,344,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[-100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-34.5,112.5],[2.124,0.114],[67,-41],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.4,-1.305],[2.874,44.114],[-2,111],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-171.5,58.5],[-72,202],[-33,207],[-35,26.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[-14.5,62.25],[2.124,0.114],[86,-26],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.31,-1.329],[-4.126,53.864],[-11,124],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-173,27],[-71,199],[-33,207],[-40,-17]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[-34.5,112.5],[2.124,0.114],[67,-41],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.4,-1.305],[2.874,44.114],[-2,111],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-171.5,58.5],[-72,202],[-33,207],[-35,26.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":89,"s":[{"i":[[-14.5,62.25],[2.124,0.114],[86,-26],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.31,-1.329],[-4.126,53.864],[-11,124],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-173,27],[-71,199],[-33,207],[-40,-17]],"c":true}]},{"t":120,"s":[{"i":[[-34.5,112.5],[2.124,0.114],[67,-41],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.4,-1.305],[2.874,44.114],[-2,111],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-171.5,58.5],[-72,202],[-33,207],[-35,26.5]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.964705942191,0.039215686275,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[327,344,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-34.5,112.5],[2.124,0.114],[67,-41],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.4,-1.305],[2.874,44.114],[-2,111],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-170,61],[-72.5,200],[-33,207],[-33,25.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[{"i":[[-14.5,62.25],[2.124,0.114],[86,-26],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.31,-1.329],[-4.126,53.864],[-11,124],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-173,27],[-71,199],[-33,207],[-31,-15]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[-34.5,112.5],[2.124,0.114],[67,-41],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.4,-1.305],[2.874,44.114],[-2,111],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-170,61],[-72.5,200],[-33,207],[-33,25.5]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":89,"s":[{"i":[[-14.5,62.25],[2.124,0.114],[86,-26],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.31,-1.329],[-4.126,53.864],[-11,124],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-173,27],[-71,199],[-33,207],[-31,-15]],"c":true}]},{"t":120,"s":[{"i":[[-34.5,112.5],[2.124,0.114],[67,-41],[-7.589,-2.53],[0,0],[0,0]],"o":[[0.4,-1.305],[2.874,44.114],[-2,111],[15,5],[0,0],[0,0]],"v":[[-77.5,-98.25],[-93.874,-89.864],[-170,61],[-72.5,200],[-33,207],[-33,25.5]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.823529471603,0.964705942191,0.039215686275,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[325,345,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[272,316],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":45,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.850980392157,0.261962980383,0.046053239411,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-33,49],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,98.701],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"MOnkey-all","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[351,293,0],"to":[0,-7,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":30,"s":[351,251,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[351,293,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[351,251,0],"to":[0,0,0],"ti":[0,-7,0]},{"t":120,"s":[351,293,0]}],"ix":2},"a":{"a":0,"k":[325,354.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":650,"h":709,"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":1,"nm":"Auto-traced Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[325,325,0],"ix":2},"a":{"a":0,"k":[325,325,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"hasMask":true,"masksProperties":[{"inv":false,"mode":"f","pt":{"a":1,"k":[{"t":0,"s":[{"i":[[44.466,-5.639],[4.53,-1.293],[4.165,-2.103],[10.86,-9.02],[13.217,-0.694],[10.718,5.717],[11.863,1.672],[15.518,-33.875],[-15.314,-89.535],[-29.385,-11.722],[-12.682,-6.472],[-6.573,-10.235],[-8.279,-9.962],[-42.174,4.683],[-8.502,3.745],[-26.501,8.047],[-37.108,18.685],[-11.419,28.033],[8.731,76.087],[23.638,12.818],[11.606,5.888],[12.208,23.532]],"o":[[-5.715,0.725],[-4.53,1.293],[-10.345,5.225],[-10.86,9.02],[-10.267,0.539],[-10.718,-5.717],[-46.245,-6.517],[-27.078,59.11],[6.234,36.447],[11.392,4.544],[11.126,5.678],[8.071,12.568],[17.44,20.984],[7.92,-0.879],[23.399,-10.308],[30.474,-9.254],[22.423,-11.29],[21.649,-53.149],[-3.776,-32.907],[-9.556,-5.182],[-18.973,-9.625],[-18.049,-34.79]],"v":[[357,70],[341.837,72.966],[329,78],[297.654,102.398],[262,120],[230.697,109.658],[197,96],[111,178],[64,395],[112,483],[157,491],[184,523],[208,559],[289,598],[315,591],[378,551],[475,554],[524,485],[564,291],[527,210],[491,199],[448,140]],"c":true}],"h":1},{"t":1,"s":[{"i":[[50.602,-6.66],[3.96,-0.989],[3.062,-1.503],[10.157,-8.77],[13.625,-1.154],[15.726,7.332],[19.887,-9.04],[5.69,-6.395],[3.435,-5.327],[6.847,-15.134],[-14.754,-90.099],[-30.706,-13.21],[-14.448,-7.628],[-10.402,-15.928],[-59.983,17.541],[-34.263,4.048],[-33.146,17.221],[-10.003,24.125],[-7.706,28.491],[45.171,30.8],[13.929,8.333],[12.106,21.936]],"o":[[-4.098,0.54],[-3.96,0.989],[-11.745,5.764],[-10.157,8.77],[-15.21,1.288],[-15.726,-7.332],[-6.805,3.093],[-5.69,6.395],[-8.547,13.254],[-26.671,58.952],[5.308,32.417],[18.556,7.983],[12.614,6.659],[23.112,35.391],[31.572,-9.233],[24.639,-2.911],[21.414,-11.125],[11.683,-28.176],[14.823,-54.803],[-9.403,-6.411],[-17.33,-10.368],[-19.156,-34.71]],"v":[[355,71],[342.723,73.277],[332,77],[300.41,101.458],[266,119],[220.508,103.686],[168,100],[148.973,115.325],[135,134],[112,179],[64,394],[110,484],[159,492],[191,533],[307,595],[389,548],[477,553],[525,486],[554,399],[530,214],[490,199],[449,141]],"c":true}],"h":1},{"t":2,"s":[{"i":[[47.675,-5.491],[4.216,-1.162],[3.534,-1.709],[10.583,-8.725],[13.053,-0.971],[11.265,6.321],[15.34,0.654],[13.041,-17.704],[8.974,-20.115],[10.299,-35.877],[-8.554,-44.544],[-31.159,-9.262],[-11.436,-5.469],[-6.995,-10.345],[-64.636,23.309],[-29.73,6.323],[-31.128,4.379],[-11.861,31.469],[-7.63,29.92],[37.497,34.054],[21.622,12.936],[12.708,23.47]],"o":[[-5.602,0.645],[-4.216,1.162],[-10.614,5.131],[-10.583,8.724],[-12.6,0.938],[-11.265,-6.321],[-21.862,-0.931],[-13.041,17.704],[-13.359,29.945],[-10.299,35.878],[6.728,35.038],[9.845,2.926],[10.951,5.237],[25.445,37.629],[29.797,-10.746],[20.129,-4.281],[36.903,-5.191],[9.927,-26.338],[14.026,-54.999],[-14.63,-13.286],[-18.608,-11.133],[-17.136,-31.647]],"v":[[359,71],[344.449,73.702],[333,78],[301.829,101.62],[267,119],[232.555,107.693],[194,94],[142.834,123.215],[111,184],[71.565,282.051],[65,402],[116,488],[160,493],[189,528],[313,593],[386,548],[460,558],[527,480],[554,398],[536,220],[491,200],[449,138]],"c":true}],"h":1},{"t":3,"s":[{"i":[[42.001,-4.706],[4.541,-1.335],[3.811,-1.983],[9.779,-8.134],[13.005,-0.804],[11.095,5.763],[13.466,1.701],[15.164,-32.95],[-15.864,-90.084],[-29.349,-12.091],[-17.028,-6.593],[-4.8,-6.517],[-4.383,-6.339],[-59.24,27.476],[-10.607,8.756],[-13.543,1.778],[-23.753,2.216],[-12.146,29.915],[-7.342,27.748],[40.412,31.56],[15.294,9.521],[12.438,23.275]],"o":[[-6.026,0.675],[-4.541,1.335],[-10.878,5.66],[-9.779,8.134],[-12.154,0.751],[-11.095,-5.763],[-46.736,-5.901],[-26.667,57.944],[6.459,36.677],[17.442,7.186],[7.124,2.758],[5.661,7.686],[25.55,36.957],[11.887,-5.513],[10.786,-8.904],[22.527,-2.958],[33.382,-3.114],[11.057,-27.232],[14.914,-56.368],[-9.37,-7.317],[-19.326,-12.032],[-17.536,-32.817]],"v":[[361,71],[345.338,74.019],[333,79],[303.095,102.142],[270,118],[235.985,107.839],[200,94],[114,176],[64,396],[112,488],[160,493],[179,512],[194,535],[319,591],[353,568],[390,547],[459,557],[526,487],[554,402],[533,219],[492,201],[448,135]],"c":true}],"h":1},{"t":4,"s":[{"i":[[42.199,-2.797],[12.9,-10.347],[17.488,-3.095],[11.922,6.314],[14.424,0.849],[9.91,-7.688],[5.887,-9.219],[6.605,-15.089],[9.178,-29.882],[-7.226,-40.715],[-30.138,-12.019],[-20.27,-5.781],[-8.107,-11.99],[-62.151,18.699],[-11.382,9.047],[-16.9,2.937],[-22.789,-0.465],[-13.287,32.409],[-7.354,27.851],[38.531,34.112],[14.21,10.683],[12.421,22.672]],"o":[[-22.91,1.519],[-12.9,10.347],[-11.887,2.103],[-11.922,-6.314],[-16.476,-0.969],[-9.909,7.688],[-8.575,13.429],[-12.842,29.334],[-10.14,33.017],[5.959,33.572],[19.161,7.641],[15.028,4.286],[24.085,35.619],[14.118,-4.248],[11.342,-9.015],[19.377,-3.367],[40.737,0.832],[10.818,-26.387],[14.9,-56.429],[-12.288,-10.879],[-16.851,-12.668],[-17.68,-32.271]],"v":[[366,71],[315.934,92.818],[274,117],[238.903,107.214],[200,93],[161.058,104.859],[138,132],[114,178],[72,276],[65,399],[113,491],[159,494],[195,534],[312,595],[352,571],[391,546],[451,556],[526,488],[553,404],[536,223],[490,200],[450,137]],"c":true}],"h":1},{"t":5,"s":[{"i":[[6.73,-0.929],[0.336,0.018],[0.328,-0.029],[12.386,-10.453],[16.87,-1.573],[34.475,-1.412],[15.305,-33.881],[11.54,-36.019],[-7.877,-39.446],[-31.769,-10.558],[-13.981,-6.114],[-7.454,-10.518],[-60.375,23.178],[-5.579,3.444],[-24.142,2.94],[-23.974,1.768],[-11.365,25.716],[-7.708,28.214],[36.29,39.533],[14.484,12.333],[19.129,27.14],[14.28,6.778]],"o":[[-0.327,0.045],[-0.336,-0.018],[-18.588,1.616],[-12.385,10.453],[-25.951,2.421],[-47.284,1.936],[-13.664,30.249],[-10.695,33.383],[7.027,35.191],[14.244,4.734],[13.117,5.737],[23.765,33.531],[5.844,-2.244],[21.08,-13.013],[24.179,-2.944],[33.019,-2.434],[11.081,-25.075],[13.899,-50.876],[-11.824,-12.881],[-25.193,-21.452],[-9.134,-12.958],[-12.521,-5.943]],"v":[[361,72],[360.001,72.012],[359,72],[315.212,94.532],[274,117],[195,92],[114,182],[71,280],[66,404],[117,494],[163,496],[195,534],[316,594],[334,585],[395,545],[461,555],[525,491],[552,409],[540,229],[490,199],[437,113],[399,77]],"c":true}],"h":1},{"t":6,"s":[{"i":[[74.734,-9.051],[4.611,-1.266],[4.178,-2.164],[9.314,-7.597],[12.425,-1.267],[11.428,6.415],[15.71,1.621],[13.739,-17.79],[7.845,-17.233],[-16.981,-94.927],[-34.891,-6.194],[-15.264,-3.925],[-4.19,-4.676],[-13.951,-15.342],[-43.408,13.756],[-6.167,3.684],[-27.908,4.05],[-27.73,11.058],[-9.377,19.94],[-7.797,28.148],[43.846,35.71],[12.218,9.541]],"o":[[-6.377,0.773],[-4.611,1.266],[-10.321,5.346],[-9.314,7.597],[-12.577,1.282],[-11.428,-6.415],[-23.198,-2.394],[-13.739,17.79],[-27.783,61.028],[6.395,35.752],[13.339,2.368],[5.578,1.434],[15.594,17.402],[17.204,18.919],[7.307,-2.316],[22.692,-13.557],[22.47,-3.261],[20.675,-8.245],[11.548,-24.555],[17.083,-61.674],[-12.662,-10.313],[-39.293,-30.686]],"v":[[366,72],[349.85,74.956],[337,80],[308.578,101.56],[277,117],[242.35,106.178],[203,91],[148.485,119.28],[117,177],[64,398],[122,497],[162,496],[179,511],[221,566],[313,595],[334,586],[398,544],[479,550],[524,494],[550,418],[533,224],[493,202]],"c":true}],"h":1},{"t":7,"s":[{"i":[[52.516,0.774],[4.787,-1.009],[4.759,-2.07],[10.675,-8.342],[11.979,-1.143],[36.279,-5.645],[16.697,-36.111],[8.501,-27.678],[-7.663,-38.283],[-31.258,-8.407],[-12.997,-3.257],[-5.12,-5.989],[-16.67,-14.581],[-33.341,20.378],[-23.627,5.248],[-10.061,-2.271],[-12.482,2.822],[-10.043,21.653],[-8.348,30.498],[30.52,41.895],[15.344,13.548],[6.531,11.595]],"o":[[-7.092,-0.105],[-4.787,1.009],[-10.322,4.49],[-10.675,8.342],[-27.344,2.609],[-38.885,6.051],[-14.191,30.692],[-11.565,37.657],[6.882,34.383],[14.812,3.984],[7.56,1.894],[17.165,20.078],[26.324,23.025],[21.237,-12.98],[13.263,-2.946],[11.818,2.667],[27.394,-6.193],[10.837,-23.367],[14.557,-53.179],[-11.632,-15.968],[-9.299,-8.21],[-21.98,-39.025]],"v":[[375,72],[357.75,73.369],[344,78],[312.742,100.011],[279,117],[191,91],[114,183],[71,282],[66,407],[120,498],[162,497],[182,514],[232,577],[336,586],[396,544],[436,549],[472,552],[525,492],[552,414],[544,237],[492,201],[469,167]],"c":true}],"h":1},{"t":8,"s":[{"i":[[45.88,-6.454],[4.608,-1.503],[4.101,-2.221],[9.173,-7.072],[12.506,-0.406],[15.665,7.752],[21.253,-8.517],[9.7,-15.248],[7.267,-15.621],[-18.925,-100.283],[-34.047,-7.383],[-11.847,-2.841],[-5.607,-6.471],[-20.071,-15.568],[-30.419,17.458],[-24.647,4.916],[-29.404,13.138],[-9.764,21.649],[-7.058,26.516],[28.694,41.792],[15.035,15.526],[11.307,20.974]],"o":[[-5.466,0.769],[-4.608,1.503],[-9.8,5.307],[-9.173,7.072],[-15.087,0.49],[-15.665,-7.752],[-15.935,6.386],[-9.7,15.248],[-29.335,63.055],[6.202,32.865],[14.672,3.181],[7.841,1.88],[18.647,21.519],[28.111,21.805],[21.836,-12.532],[24.496,-4.886],[19.016,-8.497],[11.032,-24.46],[12.961,-48.69],[-11.469,-16.704],[-14.83,-15.314],[-16.24,-30.125]],"v":[[366,73],[350.977,76.411],[338,82],[310.529,102.675],[279,116],[234.124,98.98],[180,94],[142.5,128.573],[118,177],[65,404],[122,500],[163,498],[184,516],[238,581],[336,586],[399,543],[483,547],[527,490],[552,413],[546,241],[490,199],[453,135]],"c":true}],"h":1},{"t":9,"s":[{"i":[[5.486,-0.632],[3.594,-0.802],[3.001,-1.258],[10.891,-8.361],[13.497,0.032],[12.916,7.032],[17.046,-1.162],[16.242,-33.245],[12.407,-36.565],[-8.144,-40.883],[-33.636,-9.301],[-13.058,-3.153],[-9.017,-12.159],[-56.739,8.569],[-14.457,12.376],[-18.844,3.127],[-30.873,11.833],[-9.588,19.926],[-7.552,26.946],[23.122,47.472],[15.393,18.2],[46.175,19.271]],"o":[[-4.625,0.533],[-3.594,0.802],[-10.94,4.588],[-10.891,8.361],[-13.29,-0.032],[-12.916,-7.032],[-45.335,3.09],[-15.769,32.276],[-11.264,33.197],[7.318,36.737],[12.924,3.574],[15.326,3.701],[22.939,30.933],[22.052,-3.33],[13.392,-11.465],[22.603,-3.75],[21.843,-8.372],[10.413,-21.64],[13.165,-46.974],[-12.701,-26.077],[-31.385,-37.107],[-10.417,-4.347]],"v":[[370,73],[357.782,74.956],[348,78],[315.918,100.465],[280,116],[241.817,101.605],[198,89],[119,177],[72,278],[66,408],[121,501],[164,500],[200,536],[306,599],[360,569],[403,542],[481,547],[525,494],[551,422],[552,253],[489,197],[402,77]],"c":true}],"h":1},{"t":10,"s":[{"i":[[71.923,-3.333],[4.057,-1.012],[3.884,-1.679],[10.469,-7.96],[14.207,-0.006],[11.056,6.242],[13.3,2.037],[14.286,-18.725],[9.897,-20.227],[10.793,-32.611],[-8.687,-42.68],[-34.446,-8.466],[-14.455,-2.173],[-7.782,-10.088],[-19.942,-12.86],[-26.197,16.917],[-27.363,2.806],[-27.136,10.113],[-9.894,22.389],[-6.151,24.523],[28.9,40.219],[11.642,12.581]],"o":[[-5.889,0.273],[-4.057,1.012],[-11.918,5.152],[-10.469,7.96],[-10.477,0.005],[-11.056,-6.242],[-26.958,-4.128],[-14.286,18.725],[-14.178,28.977],[-10.831,32.725],[7.732,37.988],[12.979,3.19],[14.13,2.124],[15.54,20.143],[28.398,18.313],[21.56,-13.923],[22.71,-2.328],[20.569,-7.665],[11.234,-25.421],[13.651,-54.421],[-13.48,-18.759],[-36.212,-39.133]],"v":[[375,73],[360.497,74.945],[349,79],[316.717,101.359],[281,116],[249.118,104.031],[213,89],[153.204,116.234],[119,180],[71,279],[66,409],[124,503],[164,501],[198,531],[247,586],[341,585],[408,540],[482,546],[529,489],[553,412],[545,243],[492,199]],"c":true}],"h":1},{"t":11,"s":[{"i":[[8.8,-0.865],[0.337,0.007],[0.327,0.004],[12.508,-10.096],[16.326,-0.809],[11.645,6.521],[13.996,1.533],[14.2,-18.348],[9.13,-18.574],[-12.902,-94.028],[-37.38,-9.774],[-14.521,-2.949],[-9.175,-12.423],[-11.647,-10.174],[-32.674,20.864],[-24.994,3.164],[-28.807,10.496],[-9.274,19.782],[-7.029,27.055],[23.735,43.261],[13.145,16.053],[43.922,21.917]],"o":[[-0.325,0.032],[-0.337,-0.007],[-18.642,-0.192],[-12.508,10.096],[-12.424,0.616],[-11.645,-6.521],[-27.07,-2.965],[-14.2,18.348],[-29.65,60.321],[6.124,44.636],[18.095,4.731],[15.213,3.09],[10.383,14.06],[28.969,25.304],[21.862,-13.96],[18.926,-2.396],[23.159,-8.438],[10.107,-21.559],[12.331,-47.466],[-12.919,-23.547],[-29.473,-35.994],[-10.698,-5.338]],"v":[[373,74],[372.002,74.027],[371,74],[326.763,93.749],[286,115],[250.679,103.112],[213,88],[153.045,116.346],[120,177],[63,390],[123,505],[166,503],[203,537],[237,577],[343,585],[408,539],[483,545],[527,492],[552,419],[550,252],[490,196],[409,80]],"c":true}],"h":1},{"t":12,"s":[{"i":[[71.752,-4.402],[0.335,0.005],[0.331,-0.001],[12.803,-9.989],[16.741,-0.994],[13.352,7.47],[18.665,-1.054],[10.824,-10.858],[6.781,-12.727],[8.369,-16.645],[7.2,-26.94],[-9.455,-37.538],[-34.745,-6.031],[-11.825,-1.979],[-5.65,-6.001],[-24.07,-14.278],[-24.568,15.317],[-26.369,6.154],[-23.29,5.568],[-9.697,21.669],[42.295,61.858],[14.899,16.037]],"o":[[-0.331,0.02],[-0.335,-0.005],[-20.046,0.052],[-12.803,9.989],[-13.928,0.827],[-13.352,-7.47],[-14.922,0.843],[-10.824,10.858],[-7.967,14.954],[-14.166,28.176],[-10.127,37.893],[8.929,35.45],[13.166,2.285],[10.548,1.765],[21.123,22.433],[30.317,17.983],[22.307,-13.907],[18.743,-4.374],[25.913,-6.195],[24.967,-55.79],[-11.89,-17.39],[-37.624,-40.495]],"v":[[378,74],[377,74.015],[376,74],[329.522,93.793],[288,115],[248.552,100.83],[202,87],[163.394,106.586],[137,144],[113,193],[67,292],[69,421],[128,508],[166,504],[191,521],[253,588],[345,585],[407,539],[478,546],[529,489],[546,247],[497,204]],"c":true}],"h":1},{"t":13,"s":[{"i":[[70.413,-9.906],[4.633,-1.685],[4.356,-2.4],[8.715,-6.249],[11.385,-0.18],[10.038,5.731],[11.241,3.243],[16.544,-19.894],[9.322,-19.225],[12.723,-37.564],[-9.409,-41.134],[-36.568,-7.138],[-12.173,-2.565],[-10.619,-13.859],[-50.878,8.263],[-11.505,7.704],[-26.475,5.314],[-23.25,6.504],[-9.938,22.207],[-6.56,26.317],[28.184,37.388],[11.451,16.982]],"o":[[-6.113,0.86],[-4.633,1.685],[-8.754,4.824],[-8.716,6.249],[-10.606,0.168],[-10.038,-5.731],[-30.504,-8.802],[-16.544,19.894],[-15.958,32.912],[-12.614,37.242],[8.5,37.158],[13.959,2.725],[19.864,4.186],[22.045,28.771],[14.631,-2.376],[21.3,-14.263],[19.421,-3.898],[22.033,-6.163],[11.023,-24.631],[12.591,-50.513],[-12.368,-16.407],[-28.837,-42.765]],"v":[[373,75],[357.183,78.845],[344,85],[318.473,103.483],[289,115],[258.476,104.559],[227,89],[158.113,112.981],[121,179],[71,282],[68,416],[128,509],[169,506],[211,545],[310,599],[349,583],[410,538],[482,544],[529,491],[554,415],[544,245],[488,192]],"c":true}],"h":1},{"t":14,"s":[{"i":[[68.655,-7.143],[4.459,-1.165],[3.884,-1.79],[9.376,-7.046],[12.322,-0.124],[11.723,6.828],[13.48,1.807],[15.174,-21.73],[10.847,-21.161],[10.51,-34.996],[-9.536,-38.097],[-48.664,8.616],[-8.597,-1.624],[-10.19,-13.013],[-14.958,-9.155],[-26.675,13.371],[-31.381,4.148],[-25.724,9.008],[-8.14,18.219],[-6.673,26.882],[26.14,41.575],[12.859,17.199]],"o":[[-5.28,0.549],[-4.459,1.165],[-10.175,4.69],[-9.376,7.046],[-11.628,0.118],[-11.723,-6.828],[-30.459,-4.082],[-15.173,21.73],[-15.449,30.135],[-10.799,35.961],[10.519,42.023],[6.844,-1.212],[18.531,3.5],[12.224,15.61],[21.452,13.13],[28.005,-14.037],[22.966,-3.036],[21.87,-7.659],[10.41,-23.299],[12.077,-48.654],[-12.364,-19.665],[-31.161,-41.677]],"v":[[378,75],[363.452,77.57],[351,82],[322.611,101.924],[291,115],[256.389,101.943],[219,86],[153.292,119.068],[117,190],[68,289],[69,420],[148,511],[170,507],[214,546],[255,588],[339,590],[415,536],[486,542],[530,489],[554,416],[547,251],[493,197]],"c":true}],"h":1},{"t":15,"s":[{"i":[[21.819,-3.203],[0.337,0.022],[0.327,-0.041],[27.259,-2.355],[32.297,4.711],[11.14,-9.744],[14.335,-28.513],[12.828,-31.905],[-5.273,-40.061],[-17.069,-24.486],[-13.868,-2.917],[-12.214,-3.234],[-20.661,-20.496],[-38.465,7.848],[-17.756,16.519],[-14.855,2.155],[-24.427,7.454],[-9.306,19.881],[-6.751,26.527],[23.562,39.601],[15.527,24.487],[29.432,27.418]],"o":[[-0.327,0.048],[-0.337,-0.022],[-31.825,3.947],[-28.411,2.454],[-18.697,-2.727],[-22.805,19.947],[-13.669,27.187],[-13.423,33.386],[5.023,38.164],[6.149,8.82],[18.871,3.97],[26.734,7.08],[17.216,17.078],[26.872,-5.483],[10.064,-9.363],[15.85,-2.299],[21.069,-6.43],[10.299,-22.002],[12.409,-48.758],[-14.541,-24.44],[-21.497,-33.902],[-13.979,-13.023]],"v":[[375,76],[374.001,76.006],[373,76],[297,114],[221,85],[170,101],[120,184],[74,272],[63,388],[96,489],[128,512],[173,509],[234,570],[316,599],[377,560],[415,535],[484,541],[530,491],[554,419],[548,254],[489,191],[432,94]],"c":true}],"h":1},{"t":16,"s":[{"i":[[63.266,-7.161],[4.23,-1.17],[3.644,-1.706],[9.022,-6.428],[11.673,-0.496],[12.022,6.964],[15.036,1.736],[21.835,-41.103],[11.473,-37.081],[-10.301,-41.239],[-37.291,-4.09],[-14.563,-2.64],[-9.286,-11.008],[-10.426,-9.791],[-38.503,20.726],[-10.758,10.266],[-14.971,3.468],[-25.508,8.727],[-8.714,18.083],[-6.658,26.108],[21.572,40.141],[17.06,28.191]],"o":[[-5.435,0.615],[-4.23,1.17],[-10.239,4.793],[-9.022,6.428],[-13.877,0.59],[-12.022,-6.964],[-57.696,-6.661],[-16.963,31.932],[-11.37,36.747],[8.888,35.58],[14.018,1.537],[14.753,2.674],[10.452,12.391],[23.23,21.815],[12.077,-6.501],[10.874,-10.377],[25.1,-5.815],[19.924,-6.816],[10.428,-21.638],[11.969,-46.93],[-15.036,-27.979],[-26.918,-44.481]],"v":[[381,76],[366.656,78.682],[355,83],[327.076,101.722],[297,114],[259.37,101.245],[220,85],[120,186],[69,288],[70,422],[133,515],[173,510],[209,538],[240,573],[342,590],[377,562],[414,535],[487,540],[530,491],[553,421],[551,261],[488,188]],"c":true}],"h":1},{"t":17,"s":[{"i":[[68.196,-10.463],[4.663,-1.609],[3.288,-1.788],[7.824,-5.655],[10.924,-0.605],[29.467,5.535],[20.249,-40.215],[15.217,-34.432],[-5.691,-42.822],[-18.06,-26.487],[-14.752,-3.399],[-20.063,-4.059],[-10.968,-13.144],[-50.941,10.393],[-10.312,7.349],[-26.647,3.714],[-26.937,7.777],[-9.152,19.253],[-6.344,25.556],[21.918,41.818],[12.467,12.467],[8.306,14.409]],"o":[[-5.06,0.776],[-4.663,1.609],[-8.779,4.775],[-7.824,5.655],[-24.77,1.37],[-58.013,-10.896],[-15.193,30.173],[-14.178,32.082],[5.111,38.46],[5.527,8.107],[17.409,4.012],[20.731,4.194],[21.916,26.264],[13.318,-2.717],[19.88,-14.167],[24.838,-3.462],[19.7,-5.688],[10.256,-21.576],[12.314,-49.61],[-8.04,-15.339],[-11.153,-11.153],[-24.071,-41.76]],"v":[[377,77],[362.171,80.741],[350,86],[326.109,103.128],[299,114],[226,85],[126,177],[77,266],[63,384],[96,490],[130,516],[176,512],[218,549],[319,599],[356,582],[419,533],[486,539],[531,491],[554,420],[549,259],[516,222],[488,185]],"c":true}],"h":1},{"t":18,"s":[{"i":[[65.421,-8.148],[0.337,0.012],[0.327,-0.008],[11.954,-9.003],[15.016,-0.562],[32.256,1.981],[11.86,-11.687],[15.579,-28.519],[11.118,-27.562],[-31.149,-46.13],[-15.786,-3.099],[-17.637,-3.96],[-10.854,-13.166],[-19.325,-7.456],[-18.971,11.694],[-27.635,10.69],[-29.368,7.49],[-9.925,20.848],[-5.775,23.662],[20.483,37.885],[13.654,13.654],[7.955,13.353]],"o":[[-0.324,0.041],[-0.337,-0.012],[-16.167,0.427],[-11.954,9.003],[-29.993,1.123],[-18.651,-1.145],[-19.16,18.88],[-14.172,25.944],[-26.848,66.559],[7.773,11.512],[20.827,4.089],[19.015,4.269],[14.026,17.014],[25.96,10.016],[25.247,-15.563],[23.128,-8.947],[19.745,-5.036],[10.816,-22.719],[11.983,-49.096],[-7.225,-13.362],[-9.256,-9.256],[-25.632,-43.026]],"v":[[382,77],[381.002,77.024],[380,77],[339.637,95.398],[301,114],[221,83],[170,103],[121,187],[73,273],[97,491],[132,517],[180,514],[226,555],[275,595],[350,587],[417,533],[487,538],[531,490],[554,420],[550,261],[519,225],[490,187]],"c":true}],"h":1},{"t":19,"s":[{"i":[[56.715,-3.274],[4.378,-1.006],[3.881,-1.651],[9.738,-6.686],[10.88,-0.356],[6.399,3.046],[5.262,3.051],[26.561,-10.978],[22.112,-39.776],[10.382,-27.408],[-33.292,-42.055],[-16.283,-2.152],[-14.421,-5.409],[-22.943,-19.093],[-35.981,18.5],[-11.022,10.717],[-17.143,4.889],[-20.056,5.796],[-7.697,15.104],[38.219,60.702],[10.258,11.839],[7.719,14.446]],"o":[[-5.606,0.323],[-4.378,1.006],[-9.166,3.9],[-9.738,6.686],[-7.139,0.233],[-6.4,-3.046],[-21.327,-12.364],[-38.275,15.82],[-14.547,26.168],[-25.812,68.142],[6.975,8.81],[18.148,2.399],[25.363,9.513],[22.983,19.126],[13.656,-7.022],[10.997,-10.692],[16.907,-4.821],[21.377,-6.178],[26.497,-51.998],[-7.83,-12.435],[-10.384,-11.984],[-22.749,-42.572]],"v":[[389,77],[374.207,79.004],[362,83],[333.786,101.158],[303,114],[282.592,108.963],[265,99],[194,87],[122,187],[72,275],[101,497],[136,520],[185,517],[247,578],[345,591],[381,561],[419,532],[488,537],[531,492],[546,256],[515,220],[487,180]],"c":true}],"h":1},{"t":20,"s":[{"i":[[62.62,-8.698],[3.817,-0.96],[3.298,-1.544],[9.361,-6.484],[10.309,-0.202],[10.805,6.751],[12.515,3.238],[18.29,-36.378],[19.04,-35.163],[-5.407,-46.615],[-17.278,-27.287],[-15.979,-4.055],[-15.755,-3.102],[-20.176,-18.446],[-37.411,17.485],[-29.732,6.961],[-27.118,5.543],[-8.104,15.3],[-5.917,22.825],[15.618,45.07],[18.666,22.249],[8.046,15.146]],"o":[[-4.435,0.616],[-3.817,0.96],[-8.246,3.862],[-9.361,6.484],[-12.264,0.24],[-10.805,-6.751],[-60.595,-15.678],[-16.965,33.743],[-18.839,34.792],[4.78,41.206],[6.686,10.56],[18.05,4.58],[26.99,5.314],[23.729,21.694],[30.09,-14.064],[22.937,-5.37],[19.248,-3.934],[10.257,-19.366],[11.78,-45.436],[-9.333,-26.931],[-8.918,-10.63],[-20.839,-39.229]],"v":[[384,78],[371.647,80.304],[361,84],[334.547,101.745],[305,114],[271.189,101.609],[237,84],[136,164],[81,255],[62,378],[96,491],[132,520],[182,517],[243,573],[343,592],[423,530],[487,536],[530,494],[552,430],[557,280],[516,221],[488,179]],"c":true}],"h":1},{"t":21,"s":[{"i":[[61.518,-5.677],[4.492,-1.186],[3.682,-1.763],[21.983,-0.089],[30.21,3.417],[14.773,-19.176],[18.04,-30.326],[8.59,-27.609],[-7.038,-38.15],[-18.481,-24.284],[-15.228,-2.738],[-20.652,-4.164],[-10.589,-11.88],[-13.403,-8.462],[-28.647,18.037],[-11.167,11.64],[-14.378,2.111],[-20.802,5.417],[-8.903,19.107],[32.386,62.52],[11.451,13.502],[7.937,13.437]],"o":[[-5.351,0.494],[-4.492,1.186],[-18.651,8.934],[-26.498,0.107],[-22.315,-2.524],[-15.332,19.901],[-14.74,24.777],[-10.514,33.792],[6.845,37.102],[6.782,8.912],[18.109,3.256],[15.362,3.098],[11.494,12.896],[24.455,15.441],[11.493,-7.237],[10.903,-11.365],[23.259,-3.415],[20.578,-5.359],[25.118,-53.907],[-6.529,-12.604],[-9.422,-11.11],[-26.271,-44.478]],"v":[[389,78],[374.248,80.548],[362,85],[306,114],[227,81],[164,113],[117,198],[69,283],[66,400],[101,498],[136,523],[186,519],[225,551],[262,587],[353,588],[389,556],[427,528],[488,534],[533,489],[550,265],[522,228],[495,190]],"c":true}],"h":1},{"t":22,"s":[{"i":[[64.097,-7.363],[7.541,-3.623],[6.813,-4.357],[12.724,-0.107],[22.558,7.201],[14.149,-7.494],[17.677,-31.706],[17.889,-37.405],[-6.428,-43.401],[-18.969,-26.146],[-17.327,-3.222],[-18.118,-4.153],[-8.781,-10.133],[-41.511,-0.509],[-12.738,9.615],[-26.337,5.932],[-26.097,5.83],[-6.716,7.984],[-7.336,50.127],[16.99,31.608],[9.52,11.945],[8.505,14.587]],"o":[[-10.024,1.151],[-7.541,3.623],[-9.994,6.391],[-23.154,0.195],[-17.248,-5.506],[-31.652,16.765],[-17.121,30.709],[-15.482,32.372],[6.271,42.334],[6.997,9.645],[20.643,3.838],[15.857,3.635],[21.383,24.677],[21.941,0.269],[20.867,-15.751],[20.794,-4.683],[12.136,-2.711],[25.178,-29.93],[5.946,-40.626],[-7.351,-13.676],[-9.482,-11.897],[-24.296,-41.669]],"v":[[388,79],[362.092,86.596],[341,99],[308,114],[244,84],[193,88],[133,173],[77,263],[64,387],[100,497],[137,524],[187,520],[223,547],[309,601],[363,582],[427,527],[490,533],[518,512],[562,383],[549,264],[521,228],[495,189]],"c":true}],"h":1},{"t":23,"s":[{"i":[[55.994,-5.536],[8.21,-3.664],[6.885,-4.329],[5.625,-3.034],[7.228,0.452],[9.658,6.134],[10.171,3.827],[17.399,-19.14],[10.9,-20.671],[15.739,-31.875],[-35.896,-47.945],[-15.548,-2.846],[-18.753,-6.05],[-8.623,-9.585],[-40.231,-0.534],[-12.399,9.17],[-27.382,7.938],[-22.994,3.531],[-8.734,17.662],[30.844,60.077],[10.417,13.8],[8.141,16.192]],"o":[[-10.275,1.016],[-8.21,3.664],[-5.272,3.315],[-5.625,3.034],[-10.196,-0.638],[-9.658,-6.134],[-32.504,-12.23],[-17.399,19.14],[-16.769,31.801],[-32.576,65.974],[6.039,8.066],[23.515,4.305],[12.238,3.948],[21.331,23.71],[21.639,0.287],[23.106,-17.088],[21.141,-6.129],[21.497,-3.301],[26.041,-52.662],[-6.471,-12.605],[-11.831,-15.674],[-21.2,-42.166]],"v":[[392,79],[364.457,86.515],[342,99],[325.967,109.325],[307,114],[277.482,101.892],[248,85],[175.297,102.824],[135,170],[77,261],[102,500],[137,526],[193,522],[225,549],[310,601],[364,582],[428,527],[488,532],[533,488],[550,267],[519,224],[490,179]],"c":true}],"h":1},{"t":24,"s":[{"i":[[5.242,-0.173],[4.891,-0.982],[3.874,-1.953],[14.988,-28.848],[17.496,-31.519],[-6.31,-46.721],[-18.684,-29.927],[-19.357,-3.624],[-17.82,-3.942],[-10.969,-12.03],[-39.272,-0.46],[-17.977,19.118],[-20.839,4.603],[-21.42,4.839],[-5.712,6.966],[-5.609,46.192],[18.301,30.721],[13.404,24.718],[16.998,20.674],[32.204,-9.891],[20.892,-2.087],[22.439,7.885]],"o":[[-3.564,0.118],[-4.891,0.982],[-29.466,14.859],[-17.105,32.922],[-19.102,34.412],[5.78,42.798],[8.605,13.783],[19.603,3.67],[14.671,3.245],[21.054,23.09],[35.67,0.418],[12.202,-12.976],[19.106,-4.22],[12.34,-2.788],[22.85,-27.868],[5.279,-43.469],[-15.43,-25.901],[-15.667,-28.891],[-16.966,-20.636],[-24.385,7.489],[-24.277,2.426],[-6.794,-2.387]],"v":[[224,80],[210.732,81.623],[197,86],[137,167],[82,253],[63,378],[98,494],[139,527],[191,523],[229,551],[311,601],[389,559],[433,525],[491,530],[521,509],[563,382],[546,261],[496,188],[452,108],[378,82],[315,114],[249,84]],"c":true}],"h":1},{"t":25,"s":[{"i":[[24.764,-3.792],[4.936,-1.665],[3.743,-2.648],[8.872,-16.518],[10.758,-17.778],[13.867,-25.164],[-31.639,-53.798],[-21.413,-3.212],[-18.205,-4.123],[-9.295,-10.126],[-39.5,0.983],[-20.12,21.714],[-17.05,3.948],[-22.107,3.042],[-8.541,17.643],[-4.99,21.815],[18.591,37.369],[15.938,29.22],[17.87,20.624],[27.991,-5.724],[25.176,-1.469],[9.364,5.988]],"o":[[-4.514,0.691],[-4.936,1.665],[-15.755,11.151],[-8.872,16.518],[-14.767,24.403],[-36.484,66.207],[9.104,15.481],[22.442,3.366],[14.617,3.311],[21.518,23.441],[38.238,-0.952],[9.898,-10.682],[16.755,-3.88],[20.439,-2.813],[9.683,-20.002],[10.758,-47.028],[-11.037,-22.184],[-17.509,-32.099],[-15.073,-17.396],[-25.179,5.149],[-11.22,0.655],[-17.857,-11.419]],"v":[[219,80],[204.421,83.532],[191,90],[156.253,132.53],[129,185],[80,256],[97,493],[142,529],[193,524],[228,550],[315,601],[397,552],[434,523],[490,529],[535,487],[556,421],[550,270],[499,191],[453,106],[385,81],[315,114],[281,101]],"c":true}],"h":1},{"t":26,"s":[{"i":[[19.88,-1.801],[12.578,-17.161],[9.636,-18.087],[4.945,-7.806],[4.789,-6.458],[5.529,-6.844],[4.385,-8.206],[-17.725,-55.124],[-36.742,-5.818],[-18.489,-4.68],[-10.172,-10.702],[-50.682,24.537],[-11.922,13.057],[-21.144,4.622],[-18.477,5.49],[-7.133,12.339],[37.858,61.94],[15.184,32.04],[31.137,13.803],[20.949,-12.516],[13.324,-0.526],[9.994,6.4]],"o":[[-25.053,2.27],[-12.578,17.161],[-4.431,8.318],[-4.945,7.806],[-5.5,7.417],[-5.529,6.844],[-27.955,52.316],[11.424,35.527],[15.161,2.401],[16.136,4.085],[26.988,28.395],[15.834,-7.666],[12.204,-13.367],[17.681,-3.865],[18.766,-5.575],[32.199,-55.702],[-17.458,-28.563],[-16.956,-35.781],[-27.419,-12.155],[-12.647,7.556],[-13.227,0.522],[-17.884,-11.452]],"v":[[224,79],[169.937,111.638],[139,168],[124.768,192.395],[110,214],[93.164,234.908],[78,257],[78,446],[143,531],[197,526],[233,555],[351,592],[394,557],[437,522],[495,526],[531,492],[543,259],[489,169],[427,86],[354,96],[317,114],[282,99]],"c":true}],"h":1},{"t":27,"s":[{"i":[[23.666,-2.285],[5.096,-1.627],[4.668,-3.015],[16.521,-29.08],[10.445,-12.929],[7.652,-14.837],[-30.091,-53.504],[-17.583,-5.33],[-21.016,-5.094],[-9.717,-10.306],[-39.256,0.481],[-17.531,19.408],[-18.83,5.062],[-14.631,2.568],[-6.632,11.724],[-5.206,35.678],[12.302,30.747],[15.202,30.237],[29.212,19.453],[23.392,-14.277],[14.087,0.434],[9.643,6.395]],"o":[[-4.949,0.478],[-5.096,1.627],[-27.46,17.733],[-8.738,15.38],[-11.044,13.67],[-32.978,63.948],[8.76,15.577],[25.143,7.622],[13.28,3.219],[20.425,21.663],[34.38,-0.422],[12.139,-13.439],[18.509,-4.976],[20.394,-3.58],[13.726,-24.266],[5.227,-35.823],[-11.462,-28.647],[-18.614,-37.024],[-27.928,-18.598],[-12.776,7.798],[-12.394,-0.382],[-16.295,-10.806]],"v":[[224,79],[208.79,82.097],[194,89],[136,174],[108,217],[77,258],[97,492],[137,530],[199,527],[232,553],[316,601],[393,559],[436,521],[492,526],[533,491],[562,393],[554,280],[497,185],[438,91],[356,97],[316,114],[282,98]],"c":true}],"h":1},{"t":28,"s":[{"i":[[21.013,-2.043],[12.787,-17.111],[10.209,-19.161],[10.754,-13.325],[8.463,-14.705],[-6.164,-47.718],[-18.094,-25.813],[-6.316,-5.441],[-9.446,-2.116],[-8.872,2.236],[-9.545,-1.712],[-20.028,-14.55],[-30.363,24.896],[-27.953,4.428],[-22.222,3.843],[-6.157,10.698],[29.591,61.121],[10.8,16.819],[8.196,17.058],[49.874,-2.156],[27.701,0.737],[9.447,5.973]],"o":[[-24.644,2.396],[-12.787,17.111],[-8.522,15.995],[-10.754,13.325],[-19.752,34.317],[6.164,47.718],[4.289,6.118],[6.316,5.441],[9.966,2.233],[8.872,-2.236],[27.408,4.917],[32.795,23.825],[20.903,-17.139],[13.51,-2.14],[17.238,-2.981],[28.145,-48.899],[-7.695,-15.895],[-10.787,-16.799],[-20.286,-42.222],[-31.123,1.345],[-11.869,-0.316],[-18.055,-11.416]],"v":[[227,78],[173.173,110.426],[141,168],[110.956,210.968],[81,252],[64.116,383.878],[104,503],[119.632,521.002],[143,533],[170.816,530.89],[198,528],[264,582],[373,580],[443,518],[495,524],[533,491],[549,270],[519,223],[492,172],[402,81],[318,114],[286,99]],"c":true}],"h":1},{"t":29,"s":[{"i":[[24.033,-3.739],[3.624,-1.033],[2.312,-1.218],[11.003,-20.043],[12.666,-18.654],[13.32,-35.821],[-7.168,-39.457],[-16.613,-29.972],[-23.425,-3.388],[-22.247,-4.021],[-8.253,-8.253],[-34.729,-4.88],[-20.893,24.242],[-14.661,4.783],[-24.15,6.926],[-9.206,30.428],[19.539,50.812],[15.061,28.52],[14.706,20.465],[32.008,-4.435],[26.284,1.431],[9.55,6.081]],"o":[[-4.19,0.652],[-3.624,1.033],[-19.322,10.174],[-11.003,20.043],[-18.569,27.347],[-13.078,35.171],[6.676,36.745],[8.536,15.4],[19.486,2.818],[14.683,2.654],[21.098,21.098],[44.632,6.272],[10.479,-12.159],[26.279,-8.573],[31.862,-9.138],[13.989,-46.236],[-9.652,-25.099],[-16.31,-30.885],[-15.323,-21.324],[-27.835,3.857],[-12.203,-0.665],[-20.614,-13.126]],"v":[[224,78],[212.091,80.576],[203,84],[160.008,132.14],[127,193],[71,272],[65,391],[98,493],[145,535],[201,529],[234,552],[307,600],[400,552],[438,519],[499,521],[550,445],[554,281],[508,201],[465,117],[396,83],[319,114],[286,98]],"c":true}],"h":1},{"t":30,"s":[{"i":[[10.908,-0.276],[7.457,-2.984],[19.93,-33.646],[11.372,-12.59],[7.264,-13.298],[-27.793,-52.942],[-20.606,-7.627],[-22.875,-4.422],[-11.235,-11.012],[-14.341,-7.286],[-24.643,19.481],[-26.46,7.232],[-24.145,5.35],[-7.287,12.391],[-5.283,36.096],[11.833,30.216],[13.824,25.013],[14.684,21.065],[12.242,5.242],[20.752,-12.03],[15.686,0.878],[19,8.758]],"o":[[-6.294,0.159],[-37.539,15.019],[-8.672,14.641],[-10.002,11.073],[-35.93,65.775],[9.116,17.365],[24.469,9.057],[15.398,2.977],[12.234,11.992],[31.972,16.244],[21.764,-17.206],[22.901,-6.259],[17.573,-3.894],[14.538,-24.72],[5.725,-39.114],[-9.913,-25.313],[-17.254,-31.22],[-7.121,-10.215],[-27.234,-11.661],[-11.826,6.856],[-20.202,-1.131],[-9.455,-4.358]],"v":[[233,77],[211,81],[140,173],[110,214],[78,254],[96,490],[139,534],[204,531],[243,560],[282,591],[375,580],[442,517],[497,520],[534,489],[562,393],[554,282],[509,202],[467,119],[432,87],[360,99],[321,114],[267,85]],"c":true}],"h":1},{"t":31,"s":[{"i":[[13.102,-1.304],[4.487,-1.326],[3.987,-2.291],[9.874,-18.224],[12.412,-17.707],[9.966,-10.805],[6.559,-11.545],[-28.565,-55.39],[-24.932,-3.338],[-24.763,-7.819],[-10.14,-9.952],[-26.207,-2.684],[-21.95,26.554],[-14.157,3.728],[-21.681,3.281],[-7.422,15.855],[22.965,60.422],[10.945,18.504],[8.015,16.456],[57.457,-5.29],[25.919,1.077],[18.473,8.607]],"o":[[-4.067,0.404],[-4.487,1.326],[-18.094,10.399],[-9.874,18.224],[-8.576,12.234],[-9.966,10.805],[-37.434,65.889],[9.824,19.049],[26.286,3.519],[15.502,4.895],[16.604,16.296],[50.751,5.198],[9.342,-11.301],[19.408,-5.111],[17.816,-2.696],[23.571,-50.354],[-5.964,-15.692],[-10.258,-17.342],[-20.322,-41.723],[-30.113,2.772],[-21.557,-0.896],[-11.026,-5.138]],"v":[[229,77],[215.94,79.585],[203,85],[163.739,130.019],[133,186],[103.988,220.017],[78,253],[98,491],[149,538],[210,533],[245,562],[311,600],[408,545],[444,515],[497,519],[538,481],[554,282],[526,231],[499,179],[402,83],[324,114],[267,84]],"c":true}],"h":1},{"t":32,"s":[{"i":[[26.607,-4.023],[3.885,-1.443],[2.626,-1.499],[21.28,-32.815],[15.06,-23.585],[-13.707,-53.415],[-11.155,-21.727],[-25.984,-4.583],[-16.314,-2.995],[-11.824,-11.729],[-46.915,25.816],[-13.71,16.497],[-18.422,2.764],[-20.15,5.464],[-6.138,9.478],[-4.892,38.929],[14.714,33.664],[13.948,29.297],[18.651,18.601],[31.51,-18.005],[16.802,1.392],[10.379,6.883]],"o":[[-4.834,0.731],[-3.885,1.443],[-32.692,18.654],[-15.688,24.191],[-25.132,39.358],[6.83,26.618],[9.71,18.912],[18.062,3.185],[17.347,3.185],[28.099,27.874],[14.031,-7.721],[11.697,-14.075],[17.485,-2.623],[13.872,-3.761],[15.736,-24.3],[4.803,-38.224],[-11.317,-25.893],[-16.656,-34.987],[-26.778,-26.706],[-10.564,6.036],[-13.389,-1.11],[-17.78,-11.79]],"v":[[227,77],[213.844,80.424],[204,85],[139,178],[81,247],[71,416],[97,491],[150,539],[205,532],[245,561],[364,589],[407,549],[450,513],[502,516],[532,491],[563,390],[550,275],[504,189],[457,104],[364,99],[324,114],[290,96]],"c":true}],"h":1},{"t":33,"s":[{"i":[[12.891,-1.714],[5.967,-2.46],[4.034,-3.215],[8.28,-14.851],[8.94,-14.079],[11.126,-11.795],[8.492,-13.641],[-32.611,-57.901],[-23.478,-2.546],[-23.578,-7.472],[-8.852,-8.436],[-29.694,-3.042],[-19.509,23.316],[-19.852,4.501],[-19.156,3.674],[-8.966,27.286],[19.492,51.456],[14.396,28.292],[14.831,18.913],[22.073,-0.169],[29.049,2.401],[17.858,9.209]],"o":[[-7.097,0.944],[-5.967,2.46],[-11.94,9.516],[-8.28,14.852],[-9.004,14.18],[-11.126,11.795],[-41.334,66.394],[10.097,17.928],[27.283,2.958],[11.352,3.598],[18.474,17.606],[46.254,4.738],[13.842,-16.543],[16.701,-3.787],[30.481,-5.847],[15.164,-46.148],[-9.574,-25.275],[-16.858,-33.131],[-13.111,-16.72],[-34.647,0.264],[-20.278,-1.676],[-14.648,-7.554]],"v":[[232,76],[212.203,81.296],[197,90],[167.75,128.078],[143,173],[111.616,210.905],[81,248],[101,496],[152,541],[214,535],[245,558],[314,600],[404,554],[450,511],[500,515],[549,449],[554,284],[510,200],[467,115],[412,84],[327,114],[275,85]],"c":true}],"h":1},{"t":34,"s":[{"i":[[17.834,-2.768],[12.105,-18.546],[11.368,-17.903],[5.078,-6.533],[5.791,-5.729],[8.028,-12.895],[-5.767,-43.39],[-15.736,-31.019],[-25.595,-5.869],[-21.484,-6.595],[-10.094,-9.454],[-29.164,-4.397],[-23.301,28.456],[-16.414,2.56],[-16.317,2.818],[-7.886,36.885],[13.902,38.157],[17.312,36.364],[35.471,16.35],[14.022,-2.943],[26.298,1.507],[19.211,9.343]],"o":[[-25.212,3.913],[-12.105,18.546],[-3.899,6.139],[-5.078,6.533],[-12.089,11.96],[-20.865,33.514],[5.92,44.545],[9.661,19.043],[21.497,4.93],[12.767,3.919],[17.822,16.692],[55.128,8.312],[9.063,-11.068],[17.932,-2.796],[37.585,-6.491],[9.078,-42.463],[-10.901,-29.919],[-19.402,-40.753],[-11.132,-5.131],[-26.347,5.529],[-21.138,-1.211],[-12.823,-6.236]],"v":[[230,76],[177.117,113.508],[145,172],[131.419,191.308],[115,210],[81,245],[63,374],[98,492],[149,541],[216,536],[250,562],[313,599],[417,539],[454,509],[500,513],[558,418],[553,284],[502,182],[439,91],[399,86],[329,114],[274,84]],"c":true}],"h":1},{"t":35,"s":[{"i":[[5.63,-0.585],[12.626,-16.847],[11.006,-19.067],[5.14,-7.079],[5.966,-5.935],[6.225,-5.931],[4.841,-7.052],[-14.511,-54.958],[-11.528,-22.929],[-25.459,-5.716],[-25.655,-9.269],[-13.886,-12.032],[-17.637,-3.607],[-15.468,13.842],[-28.736,7.255],[-19.142,4.587],[-7.431,36.947],[14.952,36.528],[16.612,35.929],[59.054,-11.781],[21.713,0.716],[27.209,7.957]],"o":[[-24.49,2.544],[-12.626,16.847],[-4.472,7.748],[-5.14,7.079],[-6.257,6.224],[-6.225,5.931],[-28.197,41.068],[7.271,27.538],[9.792,19.477],[26.456,5.94],[17.108,6.181],[13.521,11.716],[32.057,6.556],[21.173,-18.947],[18.216,-4.599],[35.13,-8.419],[8.537,-42.45],[-12.224,-29.864],[-20.394,-44.107],[-24.012,4.79],[-29.123,-0.96],[-7.825,-2.288]],"v":[[236,75],[182.887,107.108],[150,164],[135.621,186.36],[119,206],[99.938,223.879],[83,243],[72,414],[98,491],[150,543],[219,538],[261,572],[310,599],[386,576],[454,508],[504,511],[559,413],[551,279],[500,176],[401,87],[334,115],[262,77]],"c":true}],"h":1},{"t":36,"s":[{"i":[[27.214,-3.316],[5.817,-2.413],[4.69,-3.612],[8.305,-15.052],[9.403,-14.258],[12.328,-10.841],[7.646,-12.725],[-29.406,-55.849],[-26.646,-4.187],[-19.69,-4.351],[-9.464,-8.607],[-30.462,-4.272],[-20.964,26.197],[-20.774,6.269],[-18.134,4.608],[-8.471,36.229],[10.444,37.411],[16.589,35.384],[20.338,21.17],[29.695,-15.751],[14.733,0.334],[10.726,7.76]],"o":[[-6.043,0.737],[-5.817,2.413],[-12.375,9.534],[-8.305,15.052],[-9.462,14.349],[-12.417,10.92],[-41.932,69.787],[11.46,21.766],[25.759,4.048],[13.021,2.877],[19.642,17.862],[45.612,6.397],[12.157,-15.192],[16.11,-4.861],[34.81,-8.845],[9.017,-38.566],[-8.795,-31.502],[-16.487,-35.166],[-24.864,-25.882],[-13.163,6.982],[-15.045,-0.342],[-17.251,-12.481]],"v":[[235,75],[216.985,79.843],[201,89],[171.271,127.456],[146,173],[113,210],[79,246],[101,494],[154,544],[216,537],[248,559],[317,599],[410,551],[454,507],[504,509],[557,422],[557,297],[513,200],[464,108],[377,98],[336,115],[300,97]],"c":true}],"h":1},{"t":37,"s":[{"i":[[21.868,-1.031],[4.867,-0.933],[4.339,-2.117],[9.84,-16.011],[10.177,-16.44],[10.143,-9.373],[9.526,-11.69],[-15.214,-57.269],[-12.085,-24.291],[-22.732,-6.278],[-22.333,-4.141],[-21.152,-13.891],[-29.263,20.315],[-12.38,15.982],[-20.594,3.147],[-16.403,3.976],[-7.493,37.617],[12.498,32.34],[13.714,30.983],[36.042,11.859],[29.134,1.782],[10.58,7.697]],"o":[[-3.194,0.15],[-4.867,0.933],[-17.461,8.518],[-9.84,16.011],[-8.728,14.1],[-11.497,10.625],[-34.055,41.794],[7.029,26.458],[11.148,22.408],[23.122,6.386],[26.292,4.875],[27.31,17.934],[13.167,-9.141],[10.112,-13.054],[18.341,-2.802],[35.265,-8.548],[9.008,-45.221],[-11.897,-30.784],[-14.912,-33.691],[-40.467,-13.315],[-14.089,-0.862],[-16.646,-12.11]],"v":[[243,74],[230.359,75.525],[216,80],[177.037,118.559],[149,169],[121,204],[87,234],[72,415],[99,492],[150,545],[217,539],[279,584],[377,585],[417,543],[460,504],[505,507],[560,411],[551,278],[502,175],[436,89],[337,115],[300,97]],"c":true}],"h":1},{"t":38,"s":[{"i":[[13.842,-1.596],[4.965,-1.428],[3.117,-1.822],[21.27,-30.219],[18.49,-20.969],[-14.167,-57.073],[-24.68,-26.995],[-14.143,-3.07],[-22.364,-3.241],[-12.726,-10.591],[-17.483,-4.231],[-14.638,11.746],[-13.614,17.792],[-19.351,3.618],[-15.086,5.911],[-6.959,31.888],[9.384,34.079],[13.911,29.671],[16.869,21.747],[26.26,-4.52],[25.155,1.378],[21.471,10.618]],"o":[[-4.024,0.464],[-4.965,1.428],[-32.182,18.818],[-16.819,23.895],[-34.087,38.658],[11.899,47.937],[8.276,9.052],[16.335,3.546],[16.068,2.328],[13.068,10.875],[27.292,6.605],[11.931,-9.573],[9.881,-12.913],[12.843,-2.401],[28.377,-11.12],[7.65,-35.052],[-7.732,-28.078],[-15.962,-34.047],[-12.919,-16.656],[-26.623,4.583],[-24.6,-1.348],[-11.06,-5.469]],"v":[[239,74],[224.819,76.981],[212,82],[148,174],[90,231],[70,404],[122,526],[156,547],[219,539],[265,571],[311,598],[384,581],[420,539],[462,502],[512,504],[558,418],[558,299],[518,207],[474,118],[409,88],[339,115],[279,81]],"c":true}],"h":1},{"t":39,"s":[{"i":[[48.044,-6.262],[7.316,-3.677],[5.408,-5.336],[10.763,-19.894],[15.718,-13.383],[9.64,-10.459],[-17.12,-60.727],[-12.064,-23.116],[-26.064,-5.13],[-26.954,-2.294],[-20.43,-13.719],[-12.472,-2.003],[-11.755,8.424],[-11.461,15.142],[-23.681,4.599],[-15.52,2.399],[-7.365,14.916],[17.278,55.226],[16.645,36.167],[21.582,20.43],[18.929,-3.547],[23.057,4.168]],"o":[[-7.329,0.956],[-7.316,3.677],[-14.23,14.041],[-10.763,19.894],[-11.313,9.633],[-38.666,41.953],[7.474,26.512],[11.525,22.084],[23.867,4.698],[22.775,1.939],[9.073,6.093],[25.8,4.143],[12.228,-8.763],[10.637,-14.053],[13.887,-2.697],[17.285,-2.672],[22.573,-45.717],[-9.531,-30.463],[-16.081,-34.941],[-12.554,-11.884],[-26.43,4.953],[-34.329,-6.206]],"v":[[239,74],[216.559,81.215],[197,95],[161.616,148.993],[124,202],[90,228],[74,420],[103,496],[156,548],[219,540],[282,584],[317,599],[381,584],[421,541],[464,501],[506,504],[541,470],[556,293],[514,196],[464,106],[410,89],[337,115]],"c":true}],"h":1},{"t":40,"s":[{"i":[[25.238,-1.281],[4.749,-0.943],[4.015,-2.025],[12.532,-23.072],[19.703,-17.028],[7.803,-7.866],[-18.667,-61.694],[-12.592,-23.052],[-23.655,-3.025],[-22.774,-4.381],[-23.881,-13.568],[-24.652,13.388],[-15.777,21.131],[-18.239,4.186],[-17.226,3.521],[-7.132,14.271],[14.348,55.568],[15.306,32.548],[17.297,21.82],[13.029,3.92],[30.754,0.707],[10.263,7.436]],"o":[[-3.99,0.203],[-4.749,0.943],[-23.17,11.684],[-12.532,23.072],[-8.813,7.616],[-42.178,42.517],[7.848,25.939],[10.273,18.806],[31.534,4.032],[25.399,4.886],[21.884,12.433],[22.225,-12.07],[9.707,-13.001],[12.749,-2.926],[16.064,-3.284],[21.063,-42.148],[-7.67,-29.706],[-15.837,-33.677],[-8.478,-10.696],[-42.604,-12.818],[-13.496,-0.31],[-18.493,-13.398]],"v":[[246,73],[232.519,74.633],[219,79],[169.9,135.492],[126,200],[92,225],[76,427],[105,501],[159,550],[224,542],[290,588],[373,590],[426,534],[465,499],[508,502],[541,469],[558,301],[519,207],[475,118],[440,91],[344,116],[307,98]],"c":true}],"h":1},{"t":41,"s":[{"i":[[26.576,-3.589],[7.076,-3.286],[5.452,-5.012],[6.79,-13.335],[10.171,-14.938],[10.299,-8.087],[10.206,-10.426],[-16.127,-60.953],[-27.435,-26.181],[-7.87,-2.137],[-24.765,-4.712],[-11.645,-9.587],[-16.642,-4.941],[-22.293,29.858],[-20.02,3.902],[-17.206,4.289],[-6.201,14.209],[-3.378,20.629],[29.837,70.243],[34.81,12.417],[28.955,1.223],[11.082,8.24]],"o":[[-6.242,0.843],[-7.076,3.286],[-11.668,10.725],[-6.79,13.334],[-7.92,11.631],[-10.138,7.96],[-35.877,36.653],[13.856,52.369],[5.261,5.021],[27.847,7.561],[16.516,3.142],[12.478,10.273],[52.872,15.699],[12.212,-16.357],[13.1,-2.553],[17.164,-4.278],[7.561,-17.325],[16.626,-101.532],[-15.114,-35.582],[-38.977,-13.903],[-15.441,-0.652],[-19.262,-14.323]],"v":[[242,73],[221.408,79.373],[202,92],[176.378,128.34],[153,171],[125,200],[92,224],[70,405],[129,534],[154,550],[226,542],[267,570],[311,596],[422,542],[467,497],[511,499],[545,461],[561,404],[506,176],[443,93],[346,116],[309,97]],"c":true}],"h":1},{"t":42,"s":[{"i":[[27.815,-3.84],[6.181,-2.885],[4.095,-3.468],[20.497,-29.689],[10.314,-7.33],[9.436,-9.862],[-17.983,-61.261],[-12.168,-23.878],[-25.275,-6.193],[-32.508,-7.338],[-20.581,-12.314],[-28.857,14.248],[-13.206,18.054],[-21.739,5.451],[-16.707,3.906],[-6.931,14.187],[0,41.985],[13.808,31.641],[12.063,27.041],[39.814,-1.191],[25.537,2.194],[10.658,8.034]],"o":[[-7.181,0.992],[-6.181,2.885],[-25.165,21.312],[-7.477,10.83],[-10.859,7.717],[-40.355,42.175],[7.571,25.792],[11.074,21.731],[30.489,7.47],[23.616,5.331],[22.326,13.358],[19.704,-9.729],[11.703,-15.999],[13.061,-3.275],[15.524,-3.63],[15.139,-30.987],[0,-40.674],[-11.587,-26.551],[-14.948,-33.506],[-32.571,0.975],[-14.144,-1.215],[-19.156,-14.44]],"v":[[242,73],[221.685,79.143],[206,89],[154,171],[124,201],[91,224],[74,417],[103,496],[157,551],[230,544],[289,586],[373,591],[421,543],[469,495],[511,497],[543,465],[565,357],[540,251],[500,161],[425,90],[346,117],[307,95]],"c":true}],"h":1},{"t":43,"s":[{"i":[[24.021,-3.395],[6.006,-2.591],[4.65,-3.602],[18.092,-27.977],[12.239,-8.184],[8.405,-10.376],[-12.458,-56.823],[-24.378,-28.668],[-13.589,-2.923],[-20.317,-4.561],[-21.19,-12.933],[-28.229,18.799],[-12.408,17.629],[-23.19,5.312],[-16.072,4.148],[-6.067,28.84],[7.951,33.494],[14.031,31.65],[13.375,19.507],[28.676,-3.702],[26.724,3.184],[9.821,7.618]],"o":[[-7.326,1.035],[-6.006,2.591],[-26.463,20.499],[-8.822,13.642],[-14.503,9.698],[-29.553,36.484],[10.976,50.065],[8.604,10.118],[22.846,4.914],[21.712,4.875],[25.652,15.656],[17.006,-11.325],[11.559,-16.422],[13.195,-3.023],[27.364,-7.063],[7.068,-33.6],[-6.941,-29.241],[-14.635,-33.013],[-12.963,-18.906],[-25.472,3.288],[-12.853,-1.532],[-20.006,-15.518]],"v":[[246,72],[225.993,77.575],[210,87],[157,166],[125,200],[86,228],[68,394],[125,529],[161,553],[232,545],[291,586],[384,585],[426,538],[472,494],[513,495],[559,416],[559,303],[524,213],[484,127],[419,91],[347,117],[312,97]],"c":true}],"h":1},{"t":44,"s":[{"i":[[11.666,-1.535],[10.12,-9.257],[6.602,-10.879],[8.358,-13.085],[13.094,-8.696],[6.724,-3.95],[4.88,-5.065],[-16.432,-57.388],[-13.873,-27.021],[-28.811,-4.215],[-22.806,-3.73],[-21.61,-12.947],[-20.146,0.474],[-21.202,29.998],[-20.278,4.317],[-15.627,4.082],[-5.824,13.866],[19.45,53.752],[13.923,32.107],[35.275,11.161],[30.557,4.203],[25.652,10.246]],"o":[[-15.919,2.096],[-10.12,9.257],[-8.474,13.962],[-8.358,13.086],[-6.224,4.133],[-6.724,3.95],[-37.392,38.818],[8.425,29.426],[11.778,22.941],[25.926,3.793],[23.333,3.816],[12.554,7.522],[48.37,-1.137],[10.968,-15.518],[11.157,-2.375],[16.008,-4.181],[21.687,-51.632],[-9.774,-27.01],[-15.493,-35.728],[-37.192,-11.768],[-25.655,-3.529],[-9.04,-3.611]],"v":[[246,72],[207.512,90.413],[183,122],[158.966,163.45],[128,197],[107.992,208.801],[90,222],[73,412],[105,497],[164,555],[231,545],[293,586],[341,599],[429,534],[474,491],[514,493],[547,455],[550,274],[508,173],[444,94],[349,117],[280,76]],"c":true}],"h":1},{"t":45,"s":[{"i":[[24.389,-1.528],[5.888,-1.756],[4.093,-2.577],[11.04,-20.692],[17.249,-13.897],[8.996,-4.756],[6.177,-6.464],[2.817,-31.357],[-6.186,-26.866],[-26.597,-30.777],[-13.486,-3.147],[-23.174,-4.814],[-20.242,-11.973],[-7.284,-2.118],[-23.162,34.396],[-20.91,4.569],[-14.217,4.578],[-5.787,31.613],[25.562,60.179],[38.11,13.72],[29.394,3.341],[10.679,8.205]],"o":[[-6.354,0.398],[-5.888,1.756],[-19.593,12.336],[-11.04,20.692],[-6.841,5.512],[-8.995,4.756],[-16.918,17.704],[-2.817,31.357],[11.078,48.112],[8.748,10.123],[19.848,4.633],[22.787,4.733],[6.132,3.627],[63.286,18.402],[9.826,-14.592],[13.428,-2.934],[27.72,-8.927],[16.645,-90.922],[-19.074,-44.905],[-40.504,-14.581],[-13.921,-1.582],[-17.169,-13.191]],"v":[[254,71],[235.304,74.366],[220,81],[177.742,134.329],[139,190],[114.001,204.786],[90,221],[61.672,299.129],[68,391],[126,530],[162,555],[235,546],[294,586],[315,595],[434,530],[476,489],[516,490],[561,405],[518,196],[449,96],[352,118],[315,97]],"c":true}],"h":1},{"t":46,"s":[{"i":[[27.114,-2.872],[11.483,-10.587],[7.435,-12.678],[3.065,-6.671],[4.187,-6.262],[12.481,-7.216],[9.433,-8.215],[-11.066,-57.199],[-24.02,-34.22],[-17.709,-3.589],[-27.367,-6.3],[-20.371,-11.523],[-5.443,-1.853],[-24.484,35.859],[-19.447,4.819],[-12.754,3.746],[-6.082,29.879],[24.707,58.447],[14.254,20.589],[27.293,-4.162],[24.174,1.544],[10.333,7.907]],"o":[[-18.632,1.974],[-11.483,10.587],[-3.552,6.056],[-3.065,6.671],[-8.642,12.923],[-12.481,7.215],[-33.661,29.316],[9.709,50.186],[8.232,11.727],[30.14,6.108],[23.076,5.312],[5.161,2.919],[61.031,20.781],[10.954,-16.043],[11.773,-2.917],[27.888,-8.191],[16.679,-81.943],[-13.289,-31.435],[-13.39,-19.341],[-22.966,3.503],[-13.587,-0.868],[-19.459,-14.89]],"v":[[253,71],[208.603,91.471],[181,128],[171.477,147.346],[161,167],[127.593,195.531],[93,217],[66,380],[121,523],[163,556],[238,547],[298,587],[314,594],[436,529],[477,488],[515,489],[560,411],[525,210],[486,126],[421,94],[355,118],[319,99]],"c":true}],"h":1},{"t":47,"s":[{"i":[[31.09,-4.77],[7.091,-3.813],[5.472,-5.342],[8.655,-17.173],[14.091,-11.338],[8.57,-3.77],[7.344,-5.987],[2.129,-37.306],[-8.977,-30.466],[-13.37,-26.714],[-27.416,-5.767],[-23.916,-6.327],[-10.058,-7.973],[-13.289,-5.317],[-23.496,35.333],[-23.129,4.997],[-12.941,5.858],[-5.159,30.74],[25.009,60.606],[41.97,10.528],[24.832,2.357],[10.667,8.342]],"o":[[-9.165,1.406],[-7.091,3.813],[-13.287,12.971],[-8.655,17.173],[-7.375,5.934],[-8.57,3.77],[-22.463,18.311],[-2.129,37.306],[7.971,27.049],[11.145,22.267],[32.733,6.885],[13.511,3.574],[10.836,8.589],[56.164,22.471],[11.437,-17.198],[18.263,-3.946],[23.983,-10.856],[14.81,-88.243],[-18.416,-44.628],[-34.753,-8.717],[-14.11,-1.339],[-18.319,-14.326]],"v":[[250,71],[225.731,79.048],[207,93],[176.603,140.725],[145,186],[120.477,199.461],[96,213],[61.42,302.884],[74,411],[106,497],[164,557],[241,548],[276,570],[311,592],[431,538],[478,486],[521,485],[562,400],[519,195],[446,96],[357,119],[321,98]],"c":true}],"h":1},{"t":48,"s":[{"i":[[33.994,-5.216],[10.926,-11.208],[6.954,-12.509],[3.303,-6.761],[4.174,-5.456],[12.861,-6.215],[8.653,-8.504],[-17.165,-58.362],[-12.601,-26.713],[-26.953,-7.688],[-25.578,-4.612],[-25.721,-11.101],[-21.367,7.122],[-15.876,24.828],[-18.23,4.794],[-13.147,3.829],[-4.188,33.901],[10.106,30.103],[14.011,32.985],[33.597,9.087],[27.389,1.94],[10.723,8.329]],"o":[[-17.341,2.66],[-10.926,11.208],[-3.613,6.499],[-3.303,6.761],[-8.902,11.634],[-12.861,6.215],[-38.152,37.495],[9.045,30.754],[11.631,24.657],[31.195,8.898],[26.602,4.797],[16.849,7.271],[30.188,-10.063],[9.816,-15.351],[12.534,-3.296],[27.54,-8.021],[5.735,-46.419],[-9.641,-28.716],[-14.849,-34.958],[-38.345,-10.372],[-15.21,-1.077],[-19.291,-14.983]],"v":[[250,71],[208.209,93.614],[182,131],[171.921,151.283],[161,170],[126.313,194.847],[92,215],[73,408],[106,494],[162,557],[241,549],[311,592],[371,594],[438,529],[477,485],[518,484],[563,393],[550,272],[511,173],[449,97],[360,119],[324,99]],"c":true}],"h":1},{"t":49,"s":[{"i":[[26.463,-2.325],[6.382,-1.884],[5.764,-4.052],[10.909,-20.246],[18.834,-11.993],[7.434,-2.967],[6.516,-4.835],[-18.134,-62.008],[-13.481,-28.059],[-28.431,-8.309],[-27.171,-3.915],[-10.991,-8.376],[-25.24,-2.281],[-19.097,30.416],[-19.951,4.47],[-10.676,3.329],[-4.963,36.399],[10.049,31.081],[12.378,30.239],[38.506,4.635],[28.976,4.041],[10.652,8.151]],"o":[[-4.706,0.413],[-6.382,1.884],[-18.528,13.023],[-10.909,20.246],[-6.749,4.298],[-7.434,2.967],[-44.776,33.223],[9.184,31.406],[11.599,24.142],[28.218,8.247],[14.417,2.077],[18.192,13.863],[55.165,4.986],[10.014,-15.95],[11.361,-2.545],[28.278,-8.817],[5.762,-42.258],[-9.322,-28.832],[-14.439,-35.274],[-34.203,-4.117],[-13.683,-1.908],[-19.425,-14.864]],"v":[[258,70],[240.794,73.271],[222,82],[181.73,135.773],[141,188],[119.325,198.097],[98,209],[73,405],[106,493],[163,558],[241,549],[277,569],[338,598],[438,530],[480,483],[517,483],[563,394],[551,275],[514,177],[443,96],[359,119],[325,99]],"c":true}],"h":1},{"t":50,"s":[{"i":[[30.911,-2.736],[10.475,-8.839],[6.595,-10.184],[23.765,-14.546],[13.083,-8.7],[5.408,-10.076],[-17.626,-54.418],[-13.614,-25.515],[-26.983,-5.466],[-29.059,-4.096],[-11.478,-8.214],[-11.964,-4.857],[-22.598,18.934],[-11.845,18.734],[-19.469,5.968],[-12.904,4.622],[-5.666,12.821],[0,36.544],[20.103,49.353],[34.943,9.889],[23.152,-0.297],[11.465,9.225]],"o":[[-16.505,1.461],[-10.475,8.839],[-15.582,24.063],[-12.912,7.903],[-9.351,6.219],[-29.759,55.445],[9.45,29.176],[11.929,22.357],[30.463,6.171],[15.236,2.148],[10.794,7.724],[27.376,11.115],[14.503,-12.151],[9.803,-15.504],[12.972,-3.977],[14.883,-5.33],[10.614,-24.018],[0,-68.039],[-15.378,-37.753],[-37.218,-10.533],[-14.781,0.189],[-18.876,-15.188]],"v":[[258,70],[218.067,86.957],[193,117],[143,187],[101,205],[78,233],[79,422],[111,503],[168,560],[243,550],[279,570],[314,592],[401,578],[439,529],[480,482],[519,480],[549,446],[565,354],[518,185],[453,99],[367,120],[326,99]],"c":true}],"h":1},{"t":51,"s":[{"i":[[30.459,-5.01],[10.217,-9.491],[6.579,-10.479],[4.574,-9.034],[6.28,-7.228],[18.546,-18.72],[-13.631,-61.201],[-10.057,-24.731],[-13.721,-19.44],[-16.982,-5.742],[-23.963,-3.716],[-10.809,-7.799],[-36.395,7.076],[-20.64,32.505],[-16.349,4.22],[-15.473,6.06],[-4.64,29.474],[21.996,56.821],[16.286,16.794],[11.251,2.506],[22.236,1.148],[12.485,9.79]],"o":[[-15.553,2.558],[-10.217,9.491],[-5.423,8.637],[-4.574,9.034],[-16.628,19.138],[-31.708,32.006],[5.862,26.319],[10.879,26.751],[8.964,12.7],[32.017,10.827],[13.902,2.156],[21.502,15.514],[42.912,-8.343],[9.275,-14.607],[15.468,-3.992],[25.342,-9.924],[12.597,-80.009],[-13.371,-34.541],[-7.475,-7.708],[-35.763,-7.965],[-18.082,-0.933],[-19.016,-14.911]],"v":[[254,70],[215.77,89.559],[191,121],[176.643,148.056],[161,173],[93,211],[66,379],[92,457],[126,527],[163,559],[245,550],[281,570],[364,597],[447,518],[483,480],[521,477],[562,397],[524,199],[483,118],[452,99],[368,121],[325,96]],"c":true}],"h":1},{"t":52,"s":[{"i":[[25.146,-1.692],[11.368,-9.408],[7.13,-11.197],[4.662,-9.513],[6.923,-7.421],[11.628,-4.365],[8.108,-5.629],[-17.996,-61.422],[-13.63,-28.153],[-29.511,-8.482],[-24.396,-4.888],[-23.494,-9.57],[-17.15,3.059],[-16.994,26.802],[-20.937,5.384],[-9.885,5.105],[-3.988,36.325],[9.667,30.173],[12.414,29.745],[43.744,-9.27],[20.345,-0.554],[11.658,9.754]],"o":[[-17.397,1.171],[-11.369,9.408],[-5.43,8.527],[-4.662,9.513],[-7.379,7.911],[-11.628,4.365],[-47.422,32.922],[9.201,31.403],[12.291,25.388],[29.222,8.398],[25.541,5.117],[12.802,5.215],[38.858,-6.93],[10.627,-16.759],[13.999,-3.6],[26.354,-13.611],[4.492,-40.917],[-9.731,-30.371],[-16.411,-39.322],[-20.917,4.432],[-18.516,0.504],[-17.941,-15.011]],"v":[[263,69],[220.3,86.48],[193,119],[178.62,146.829],[162,173],[131.547,190.211],[100,204],[73,403],[108,494],[167,561],[250,552],[315,591],[364,597],[440,530],[484,479],[524,474],[564,383],[550,267],[514,171],[428,100],[371,121],[328,97]],"c":true}],"h":1},{"t":53,"s":[{"i":[[27.131,-2.524],[5.675,-2.075],[4.447,-3.062],[6.09,-7.85],[5.313,-8.867],[14.335,-11.518],[15.696,-9.967],[-18.346,-62.141],[-13.471,-28.733],[-28.04,-9.28],[-25.359,-2.936],[-24.552,-9.663],[-18.074,2.748],[-19.134,31.935],[-18.374,5.758],[-13.218,4.833],[-4.369,31.839],[23.566,59.386],[22.639,14.497],[14.28,-2.62],[21.539,2.141],[11.334,9.306]],"o":[[-6.853,0.638],[-5.675,2.075],[-8.327,5.733],[-6.09,7.85],[-10.693,17.847],[-15.519,12.47],[-47.522,30.175],[8.331,28.218],[12.881,27.476],[34.153,11.303],[23.502,2.721],[12.232,4.814],[43.4,-6.599],[8.822,-14.724],[11.802,-3.698],[26.298,-9.615],[11.565,-84.291],[-13.339,-33.614],[-12.135,-7.77],[-22.024,4.04],[-15.836,-1.574],[-19.593,-16.087]],"v":[[262,69],[243.196,73.182],[228,81],[206.739,101.65],[190,127],[157,178],[102,201],[72,401],[108,492],[166,561],[249,552],[317,591],[364,597],[449,518],[485,477],[521,474],[563,391],[520,187],[472,109],[431,100],[369,122],[330,97]],"c":true}],"h":1},{"t":54,"s":[{"i":[[30.277,-3.5],[9.632,-6.841],[6.161,-8.096],[6.416,-12.463],[9.573,-8.637],[15.924,-9.914],[6.008,-32.483],[-22.092,-52.428],[-14.946,-18.376],[-9.551,-3.89],[-23.358,-1.771],[-22.056,-9.19],[-21.35,11.869],[-12.932,20.337],[-19.741,6.767],[-12.737,6.928],[-3.73,35.297],[8.646,27.943],[12.446,30.955],[39.236,1.563],[28.613,2.085],[11.033,9.663]],"o":[[-13.311,1.538],[-9.632,6.842],[-8.762,11.513],[-6.416,12.463],[-14.661,13.226],[-21.401,13.323],[-13.551,73.27],[11.562,27.439],[6.813,8.376],[32.947,13.42],[26.729,2.026],[22.699,9.458],[19.849,-11.034],[11.531,-18.134],[10.186,-3.491],[24.006,-13.058],[4.36,-41.255],[-9.169,-29.633],[-13.989,-34.792],[-28.449,-1.134],[-16.858,-1.228],[-17.314,-15.165]],"v":[[262,69],[227.637,82.582],[204,106],[182.609,143.157],[160,176],[103,199],[65,274],[95,461],[134,536],[163,561],[249,552],[317,590],[392,587],[440,533],[486,476],[526,470],[564,381],[551,269],[517,176],[446,100],[371,122],[331,97]],"c":true}],"h":1},{"t":55,"s":[{"i":[[31.258,-3.968],[10.945,-10.306],[7.027,-11.595],[5.607,-10.052],[8.088,-5.739],[15.464,-8.522],[5.044,-9.087],[-19.881,-55.798],[-13.624,-27.345],[-25.465,-8.534],[-26.466,-2.927],[-19.247,-10.044],[-28.708,20.235],[-12.399,20.49],[-21.387,7.753],[-12,4.902],[-5.088,28.148],[20.352,53.726],[12.868,20.011],[14.178,4.364],[29.494,3.06],[11.443,9.678]],"o":[[-17.192,2.182],[-10.945,10.306],[-5.485,9.051],[-5.607,10.052],[-14.795,10.5],[-10.756,5.927],[-28.811,51.903],[11.089,31.124],[11.296,22.671],[31.57,10.58],[26.649,2.947],[23.947,12.497],[18.927,-13.34],[11.009,-18.193],[10.055,-3.645],[22.734,-9.287],[13.036,-72.123],[-12.454,-32.876],[-7.984,-12.416],[-35.496,-10.926],[-15.881,-1.648],[-18.898,-15.983]],"v":[[262,69],[220.377,89.44],[194,124],[177.952,153.984],[158,179],[106,196],[81,222],[78,417],[113,499],[167,563],[252,553],[312,587],[400,582],[444,529],[487,475],[522,470],[561,399],[532,214],[499,136],[461,103],[373,123],[332,97]],"c":true}],"h":1},{"t":56,"s":[{"i":[[29.847,-2.06],[11.392,-10.776],[7.762,-12.539],[6.735,-10.655],[9.952,-4.51],[8.63,-1.498],[6.033,-3.635],[4.271,-5.346],[2.699,-5.474],[-6.396,-42.871],[-14.27,-32.241],[-32.407,-12.818],[-32.473,-4.41],[-22.173,-9.047],[-23.934,40.234],[-17.742,6.642],[-9.489,4.327],[-4.03,31.122],[22.037,56.644],[42.321,-1.087],[23.365,2.128],[11.067,9.5]],"o":[[-19.669,1.358],[-11.392,10.776],[-6.11,9.87],[-6.735,10.655],[-7.446,3.374],[-8.63,1.498],[-5.217,3.144],[-4.271,5.346],[-19.856,40.274],[6.396,42.871],[15.24,34.43],[34.311,13.57],[23.434,3.182],[63.451,25.888],[12.355,-20.769],[9.552,-3.576],[23.805,-10.854],[10.888,-84.092],[-15.46,-39.737],[-27.836,0.715],[-15.775,-1.437],[-17.801,-15.28]],"v":[[268,68],[222.57,88.114],[195,125],[176.381,157.52],[152,182],[126.94,188.304],[104,195],[89.611,208.252],[79,225],[63.405,353.025],[99,469],[166,563],[257,554],[321,589],[446,527],[487,474],[524,467],[563,386],[523,188],[447,102],[376,124],[336,99]],"c":true}],"h":1},{"t":57,"s":[{"i":[[29.114,-3.381],[11.684,-10.468],[7.456,-12.061],[5.16,-9.631],[8.579,-5.123],[9.381,-1.602],[7.486,-3.418],[5.88,-37.136],[-26.397,-59.545],[-26.094,-11.297],[-27.493,-4.549],[-20.317,-9.657],[-21.648,3.252],[-17.711,29.772],[-19.26,8.025],[-11.84,6.659],[-2.867,35.09],[7.925,26.389],[12.436,30.48],[30.164,6.198],[28.948,0.724],[11.542,10.123]],"o":[[-17.808,2.068],[-11.684,10.468],[-5.782,9.353],[-5.16,9.631],[-6.991,4.175],[-9.381,1.602],[-25.727,11.749],[-13.655,86.237],[11.946,26.947],[34.281,14.842],[23.261,3.849],[14.962,7.112],[39.489,-5.932],[9.986,-16.787],[13.954,-5.814],[24.504,-13.781],[3.505,-42.9],[-9.107,-30.328],[-13.088,-32.078],[-32.961,-6.773],[-17.02,-0.426],[-18.395,-16.133]],"v":[[267,68],[223.236,88.505],[195,124],[179.597,153.673],[160,177],[134.371,184.567],[108,191],[64,278],[108,488],[165,563],[258,555],[316,586],[369,596],[446,528],[488,473],[528,463],[564,374],[550,264],[517,172],[459,104],[379,124],[337,98]],"c":true}],"h":1},{"t":58,"s":[{"i":[[30.519,-3.849],[11.212,-10.764],[7.892,-12.641],[6.303,-10.051],[9.85,-4.284],[8.153,-0.983],[6.492,-3.067],[6.264,-38.895],[-25.969,-58.211],[-26.757,-11.511],[-29.633,-4.094],[-19.608,-9.435],[-25.409,20.472],[-11.489,19.423],[-19.336,9.361],[-12.626,10.679],[-2.854,33.028],[20.699,55.758],[16.751,13.997],[12.335,0.019],[21.922,1.078],[12.093,10.792]],"o":[[-18.262,2.303],[-11.212,10.764],[-5.938,9.511],[-6.303,10.051],[-6.897,3],[-8.153,0.983],[-26.953,12.734],[-13.967,86.73],[13.866,31.083],[41.351,17.79],[22.652,3.129],[27.458,13.213],[17.055,-13.741],[10.073,-17.029],[15.127,-7.323],[18.781,-15.885],[6.504,-75.259],[-11.546,-31.104],[-8.657,-7.234],[-27.946,-0.043],[-13.824,-0.68],[-18.558,-16.562]],"v":[[267,68],[223.722,89.246],[196,126],[178.434,156.92],[155,180],[131.696,184.95],[109,190],[64,277],[109,488],[167,563],[260,555],[316,586],[408,579],[448,526],[488,473],[534,457],[564,375],[525,190],[485,117],[449,104],[380,125],[336,97]],"c":true}],"h":1},{"t":59,"s":[{"i":[[30.708,-4.121],[11.181,-10.49],[7.371,-11.773],[6.294,-10.457],[9.145,-4.105],[7.395,-0.16],[8.487,-3.351],[4.397,-4.35],[-22.335,-65.596],[-14.025,-29.459],[-25.881,-9.016],[-26.831,-3.086],[-13.695,-8.672],[-24.908,2.032],[-19.05,34.319],[-18.323,9.309],[-11.984,6.463],[-3.961,32.845],[21.149,55.55],[40.682,1.787],[22.67,3.376],[12.299,10.801]],"o":[[-16.906,2.269],[-11.181,10.49],[-5.678,9.069],[-6.294,10.457],[-8.933,4.01],[-7.395,0.16],[-5.549,2.191],[-39.154,38.738],[11.687,34.323],[12.947,27.196],[36.221,12.618],[19.646,2.26],[14.732,9.328],[47.976,-3.914],[8.945,-16.114],[11.063,-5.621],[23.647,-12.753],[9.269,-76.862],[-14.014,-36.809],[-30.732,-1.35],[-16.33,-2.432],[-18.057,-15.858]],"v":[[267,68],[225.349,88.872],[198,124],[180.601,155.223],[158,179],[134.166,183.494],[111,187],[95,198],[75,405],[113,495],[171,566],[261,555],[308,580],[365,596],[452,521],[489,472],[526,461],[563,381],[525,188],[454,105],[380,125],[337,96]],"c":true}],"h":1},{"t":60,"s":[{"i":[[39.721,-5.831],[10.963,-10.975],[7.672,-12.535],[6.581,-9.808],[8.934,-3.391],[8.151,-0.345],[6.436,-2.361],[5.991,-33.405],[-9.75,-32.589],[-14.606,-31.346],[-27.353,-13.794],[-27.805,-0.674],[-11.93,-7.956],[-34.707,15.556],[-15.488,27.379],[-16.195,8.99],[-12.166,7.956],[-2.713,34.867],[22.57,55.497],[29.489,8.509],[26.159,3.145],[9.578,8.733]],"o":[[-17.476,2.566],[-10.963,10.975],[-5.74,9.379],[-6.581,9.808],[-5.958,2.261],[-8.151,0.345],[-27.886,10.229],[-6.475,36.104],[8.679,29.009],[12.941,27.774],[33.533,16.91],[14.412,0.35],[24.834,16.56],[28.447,-12.75],[9.381,-16.585],[9.825,-5.454],[22.97,-15.021],[5.953,-76.505],[-10.168,-25.003],[-34.791,-10.039],[-12.508,-1.504],[-20.724,-18.896]],"v":[[267,68],[225.147,90.023],[198,127],[179.895,157.491],[157,179],[134.859,181.925],[112,185],[64,271],[71,390],[109,486],[166,564],[261,556],[302,575],[394,589],[453,521],[489,471],[530,457],[564,371],[521,175],[467,108],[383,127],[349,105]],"c":true}],"h":1},{"t":61,"s":[{"i":[[31.435,-2.676],[11.868,-10.807],[8.145,-13.12],[6.592,-10.136],[8.929,-3.27],[7.893,0.088],[7.944,-3.248],[7.379,-15.632],[3.337,-19.096],[-28.794,-60.483],[-36.287,-7.975],[-23.703,-1.584],[-19.899,-10.14],[-22.376,2.729],[-17.083,31.319],[-17.638,10.934],[-12.845,9.422],[15.951,58.386],[10.437,25.706],[39.552,-3.064],[24.155,3.327],[9.361,8.57]],"o":[[-19.385,1.65],[-11.867,10.807],[-5.702,9.185],[-6.592,10.136],[-8.483,3.106],[-7.893,-0.089],[-13.147,5.375],[-7.379,15.632],[-15.621,89.406],[15.553,32.67],[28.859,6.343],[24.506,1.638],[15.88,8.092],[41.081,-5.01],[9.068,-16.625],[14.017,-8.69],[44.428,-32.587],[-8.511,-31.152],[-13.174,-32.447],[-23.994,1.859],[-12.855,-1.771],[-21.874,-20.025]],"v":[[275,67],[229.071,87.398],[200,125],[181.92,155.936],[159,178],[134.596,180.894],[111,184],[80.642,217.209],[65,271],[110,487],[182,569],[262,557],[316,583],[373,595],[453,523],[489,471],[532,453],[552,265],[522,178],[451,107],[384,127],[352,106]],"c":true}],"h":1},{"t":62,"s":[{"i":[[32.303,-3.072],[7.517,-3.439],[4.819,-4.376],[6.024,-8.338],[4.758,-8.067],[17.66,-5.301],[10.86,-3.564],[7.285,-38.797],[-29.974,-63.154],[-28.879,-10.293],[-26.065,-1.606],[-9.958,-6.53],[-14,-4.252],[-18.843,16.66],[-9.934,17.612],[-15.695,12.108],[-13.884,8.212],[-3.319,33.194],[21.399,55.185],[35.685,3.638],[24.747,3.337],[10.796,10.193]],"o":[[-9.111,0.867],[-7.517,3.439],[-6.145,5.582],[-6.024,8.338],[-9.892,16.771],[-14.007,4.205],[-28.994,9.514],[-17.195,91.573],[13.598,28.651],[37.456,13.351],[16.544,1.019],[11.898,7.802],[29.768,9.041],[13.431,-11.875],[9.429,-16.717],[10.214,-7.88],[23.272,-13.765],[7.996,-79.966],[-12.486,-32.2],[-26.806,-2.733],[-15.637,-2.109],[-19.193,-18.12]],"v":[[275,67],[249.781,73.868],[231,86],[212.459,107.636],[196,133],[158,178],[116,181],[65,268],[113,490],[174,568],[265,557],[303,573],[340,591],[419,573],[454,524],[487,472],[528,455],[564,373],[523,179],[460,108],[387,128],[349,102]],"c":true}],"h":1},{"t":63,"s":[{"i":[[15.887,-1.65],[5.823,-2.134],[4.069,-2.775],[11.43,-18.153],[16.972,-4.878],[12.515,-3.713],[7.281,-36.287],[-10.256,-34.153],[-15.124,-32.159],[-56.075,7.05],[-17.193,1.188],[-11.393,-7.451],[-14.313,-3.643],[-21.156,39.072],[-15.908,11.431],[-12.739,9.498],[-3.316,5.964],[16.524,55.545],[9.709,23.567],[23.207,7.114],[27.373,3.062],[24.527,13.935]],"o":[[-6.639,0.69],[-5.823,2.134],[-14.938,10.185],[-10.711,17.012],[-15.569,4.475],[-27.881,8.272],[-7.542,37.589],[9.621,32.037],[18.64,39.637],[18.247,-2.294],[17.662,-1.22],[10.64,6.958],[60.177,15.316],[10.229,-18.892],[11.092,-7.97],[5.814,-4.335],[23.534,-42.335],[-8.74,-29.38],[-8.881,-21.557],[-32.865,-10.075],[-27.154,-3.037],[-11.233,-6.382]],"v":[[275,67],[256.073,71.436],[241,79],[201,128],[160,177],[116,179],[65,265],[70,388],[111,485],[210,572],[261,557],[307,575],[343,592],[457,521],[490,470],[533,450],[549,430],[549,249],[521,170],[473,111],[389,129],[320,77]],"c":true}],"h":1},{"t":64,"s":[{"i":[[34.239,-4.223],[11.321,-10.626],[7.945,-12.303],[6.919,-9.946],[10.111,-2.594],[6.793,0.799],[7.184,-1.49],[5.867,-6.464],[3.395,-6.458],[-16.152,-56.52],[-14.236,-31.076],[-24.793,-13.964],[-25.895,-3.327],[-29.622,-7.455],[-21.127,38.172],[-15.14,11.807],[-13.755,16.775],[-0.363,34.643],[19.561,49.132],[33.033,3.09],[26.005,5.636],[10.071,9.938]],"o":[[-17.773,2.192],[-11.321,10.626],[-6.214,9.622],[-6.919,9.946],[-6.645,1.706],[-6.793,-0.799],[-8.136,1.688],[-5.867,6.464],[-23.406,44.519],[8.405,29.41],[12.572,27.444],[38.372,21.612],[27.805,3.572],[58.898,14.823],[9.609,-17.362],[13.761,-10.732],[15.448,-18.84],[0.724,-69.107],[-10.506,-26.389],[-25.331,-2.37],[-13.605,-2.949],[-19.13,-18.876]],"v":[[275,67],[232.129,87.917],[204,124],[184.923,155.271],[160,176],[139.904,176.162],[119,176],[97.945,189.422],[84,210],[70,384],[110,483],[167,565],[272,558],[346,592],[458,520],[490,470],[542,439],[565,353],[524,176],[463,110],[387,129],[351,101]],"c":true}],"h":1},{"t":65,"s":[{"i":[[39.422,-5.718],[11.312,-10.959],[7.931,-12.578],[7.202,-9.821],[9.564,-1.792],[6.3,1.09],[7.885,-1.876],[6.417,-12.424],[-15.618,-53.405],[-15.697,-33.277],[-57.791,11.559],[-16.603,-1.21],[-19.258,-8.741],[-25.82,10.246],[-14.486,27.351],[-13.379,11.577],[-15.789,16.196],[16.666,60.525],[10.864,27.108],[40.069,-6.472],[23.616,6.465],[10.275,9.765]],"o":[[-17.822,2.585],[-11.312,10.959],[-5.628,8.926],[-7.202,9.82],[-7.914,1.483],[-6.3,-1.09],[-17.132,4.077],[-22.393,43.358],[8.512,29.107],[21.147,44.83],[17.907,-3.581],[22.622,1.648],[17.686,8.028],[29.255,-11.609],[9.244,-17.454],[14.595,-12.63],[32.337,-33.169],[-6.454,-23.439],[-12.513,-31.224],[-19.808,3.199],[-12.713,-3.48],[-19.711,-18.735]],"v":[[275,67],[232.081,89.005],[204,126],[184.952,156.351],[160,176],[139.478,175.205],[119,175],[84,209],[69,384],[110,481],[217,573],[272,558],[328,585],[396,589],[458,522],[489,470],[539,441],[553,260],[525,178],[452,112],[388,129],[354,104]],"c":true}],"h":1},{"t":66,"s":[{"i":[[36.638,-5.395],[11.079,-11.218],[8.073,-12.537],[7.177,-9.602],[9.226,-1.725],[6.642,1.416],[7.277,-1.952],[6.993,-13.62],[-2.085,-45.896],[-23.306,-49.181],[-27.24,-13.429],[-34.528,-3.793],[-20.675,-7.584],[-22.958,18.901],[-8.948,15.772],[-12.992,15.888],[-16.088,12.378],[3.717,50.266],[19.769,48.141],[34.547,-5.129],[21.956,2.99],[11.414,11.414]],"o":[[-17.609,2.593],[-11.079,11.218],[-5.067,7.868],[-7.177,9.602],[-9.154,1.712],[-6.642,-1.416],[-17.524,4.699],[-15.074,29.361],[3.001,66.076],[12.811,27.034],[41.431,20.426],[22.329,2.453],[27.943,10.25],[14.745,-12.139],[9.153,-16.135],[10.919,-13.353],[28.014,-21.553],[-4.447,-60.138],[-12.28,-29.904],[-19.117,2.838],[-16.849,-2.294],[-18.12,-18.12]],"v":[[275,67],[232.848,89.541],[205,127],[186.619,155.607],[162,175],[139.092,173.82],[119,173],[84,208],[60,326],[113,486],[173,568],[277,559],[339,588],[421,575],[455,529],[483,477],[531,446],[564,326],[523,170],[454,113],[394,131],[353,100]],"c":true}],"h":1},{"t":67,"s":[{"i":[[42.797,-7.438],[11.668,-12.279],[8.966,-13.691],[6.012,-7.897],[8.99,-1.834],[6.74,1.521],[7.913,-1.63],[6.475,-30.285],[-31.204,-65.544],[-61.299,11.143],[-20.652,-1.991],[-21.731,-7.386],[-20.708,37.198],[-12.741,13.732],[-14.754,15.495],[11.945,61.292],[6.979,20.937],[11.138,20.389],[19.197,5.708],[9.766,-4.311],[15.676,1.898],[9.9,9.743]],"o":[[-18.363,3.191],[-11.668,12.279],[-4.962,7.576],[-6.012,7.897],[-7.126,1.454],[-6.74,-1.521],[-33.827,6.969],[-21.002,98.236],[18.929,39.761],[19.881,-3.614],[24.176,2.331],[57.573,19.569],[9.541,-17.137],[15.048,-16.218],[26.858,-28.208],[-4.102,-21.048],[-7.032,-21.097],[-8.434,-15.439],[-14.365,-4.271],[-11.646,5.141],[-14.694,-1.779],[-20.903,-20.571]],"v":[[275,67],[230.952,92.125],[201,133],[185.022,157.806],[163,174],[142.59,172.368],[121,171],[67,260],[114,485],[220,574],[278,559],[342,589],[456,528],[487,473],[538,437],[560,288],[541,220],[517,156],[478,116],[437,120],[397,132],[359,106]],"c":true}],"h":1},{"t":68,"s":[{"i":[[34.348,-0.026],[5.144,-0.989],[4.203,-2.041],[9.193,-11.038],[7.55,-11.692],[6.231,-7.561],[8.339,-1.423],[7.019,1.646],[7.082,-1.416],[7.87,-14.902],[-0.997,-47.669],[-23.133,-50.499],[-61.83,11.61],[-20.282,-3.061],[-20.802,-6.86],[-19.814,35.956],[-10.86,14.001],[-13.716,21.238],[24.109,61.561],[22.638,7.983],[27.447,4.382],[9.226,9.438]],"o":[[-6.221,0.005],[-5.144,0.989],[-12.678,6.156],[-9.193,11.038],[-4.735,7.332],[-6.231,7.561],[-6.839,1.168],[-7.02,-1.646],[-19.437,3.887],[-17.149,32.474],[1.448,69.253],[18.728,40.884],[23.106,-4.339],[22.116,3.337],[59.915,19.759],[8.363,-15.177],[16.037,-20.675],[45.356,-70.23],[-8.67,-22.139],[-33.177,-11.699],[-13.356,-2.132],[-19.572,-20.022]],"v":[[290,66],[272.986,67.473],[259,72],[226.654,98.848],[202,134],[185.703,157.932],[164,173],[143.182,170.813],[122,169],[86,204],[60,321],[113,483],[222,575],[283,560],[344,589],[459,525],[484,477],[545,429],[526,176],[481,117],[398,133],[363,108]],"c":true}],"h":1},{"t":69,"s":[{"i":[[34.459,-0.713],[4.627,-0.772],[4.049,-1.801],[9.423,-11.84],[8.316,-12.418],[16.063,-2.28],[16.314,-5.198],[7.746,-35.491],[-10.951,-35.923],[-14.965,-31.58],[-51.101,-2.735],[-22.952,-3.22],[-9.473,-5.025],[-34.677,26.934],[-9.289,16.397],[-12.737,18.246],[-16.308,21.634],[-0.169,31.49],[20.353,49.481],[24.029,6.306],[29.874,6.961],[10.369,10.369]],"o":[[-5.443,0.112],[-4.627,0.772],[-13.993,6.223],[-9.423,11.84],[-9.199,13.737],[-15.978,2.268],[-30.879,9.839],[-8.277,37.927],[10.222,33.532],[18.785,39.639],[29.695,1.59],[10.723,1.504],[33.702,17.877],[15.468,-12.014],[9.055,-15.984],[14.663,-21.004],[14.803,-19.637],[0.363,-67.542],[-8.341,-20.28],[-35.343,-9.276],[-14.334,-3.34],[-19.106,-19.106]],"v":[[290,66],[274.955,67.234],[262,71],[227.742,99.353],[202,137],[164,172],[118,169],[67,259],[70,384],[114,482],[205,577],[285,560],[314,573],[421,577],[457,532],[484,478],[544,429],[565,346],[526,175],[479,117],[398,133],[362,106]],"c":true}],"h":1},{"t":70,"s":[{"i":[[20.908,-0.982],[11.897,-9.814],[8.256,-11.844],[8.045,-10.747],[11.675,-1.201],[5.964,1.897],[7.502,-0.802],[6.771,-12.505],[-17.667,-61.465],[-14.539,-30.679],[-65.608,14.8],[-17.765,0.952],[-12.938,-6.612],[-9.053,-2.927],[-21.818,40.294],[-11.92,16.075],[-17.47,24.114],[0.197,36.635],[18.656,45.8],[28.919,2.205],[26.285,6.208],[19.307,15.831]],"o":[[-19.156,0.9],[-11.897,9.814],[-6.143,8.813],[-8.045,10.747],[-7.642,0.786],[-5.964,-1.897],[-17.671,1.887],[-25.007,46.183],[9.247,32.172],[21.529,45.429],[18.714,-4.221],[13.714,-0.735],[10.391,5.311],[58.189,18.812],[7.809,-14.421],[16.203,-21.85],[14.742,-20.349],[-0.344,-63.975],[-9.435,-23.162],[-26.376,-2.011],[-23.588,-5.571],[-13.008,-10.666]],"v":[[290,66],[244.325,83.792],[215,118],[194.149,150.209],[165,171],[145.395,167.988],[126,165],[88,197],[68,380],[114,479],[227,576],[280,560],[317,574],[347,587],[461,525],[486,476],[545,426],[565,337],[526,174],[471,117],[400,134],[343,85]],"c":true}],"h":1},{"t":71,"s":[{"i":[[37.331,-2.029],[7.984,-3.577],[5.791,-5.134],[5.847,-7.914],[5.201,-7.66],[6.522,-7.575],[8.573,-0.836],[17.477,-1.732],[8.198,-14.812],[2.348,-43.861],[-22.786,-45.323],[-21.703,-20.354],[-23.837,1.774],[-20.317,0.871],[-24.534,-6.335],[-27.551,45.834],[-20.075,20.291],[2.331,45.441],[16.46,40.409],[20.225,6.242],[23.683,3.503],[10.145,10.817]],"o":[[-10.274,0.559],[-7.984,3.577],[-6.412,5.685],[-5.847,7.914],[-5.339,7.862],[-6.522,7.576],[-15.001,1.463],[-17.727,1.757],[-18.031,32.578],[-3.879,72.48],[14.759,29.356],[12.824,12.027],[23.089,-1.718],[22.338,-0.958],[82.579,21.321],[13.52,-22.493],[22.051,-22.288],[-2.956,-57.619],[-8.193,-20.114],[-31.599,-9.752],[-15.36,-2.272],[-19.864,-21.181]],"v":[[290,66],[262.639,72.568],[242,86],[223.591,107.019],[207,131],[189.426,155.769],[167,170],[127,163],[89,195],[60,307],[109,470],[162,559],[217,578],[282,561],[353,589],[484,481],[537,434],[565,324],[526,173],[483,120],[405,136],[367,108]],"c":true}],"h":1},{"t":72,"s":[{"i":[[38.949,-2.929],[3.634,-0.595],[3.161,-1.296],[9.826,-11.095],[7.538,-11.227],[18.188,-1.559],[15.985,-1.227],[7.371,-12.807],[-11.194,-59.463],[-15.751,-30.048],[-18.61,-24.553],[-26.723,1.261],[-20.471,0.16],[-21.117,-7.304],[-21.248,43.889],[-7.736,11.912],[-18.637,28.105],[8.933,49.17],[16.851,31.534],[17.847,3.487],[26.482,0.558],[10.458,11.197]],"o":[[-4.303,0.323],[-3.634,0.595],[-13.159,5.395],[-9.826,11.095],[-9.824,14.63],[-13.782,1.181],[-18.581,1.426],[-23.857,41.45],[6.516,34.617],[16.434,31.352],[13.786,18.189],[24.868,-1.173],[28.221,-0.221],[59.761,20.671],[5.191,-10.723],[17.512,-26.966],[20.603,-31.069],[-7.376,-40.602],[-8.095,-15.149],[-28.08,-5.486],[-13.911,-0.293],[-20.384,-21.823]],"v":[[290,66],[278.144,67.271],[268,70],[233.785,96.126],[208,131],[168,169],[128,161],[91,192],[64,362],[104,458],[152,547],[216,579],[283,561],[348,587],[468,516],[485,480],[546,420],[560,283],[521,160],[481,120],[409,137],[372,111]],"c":true}],"h":1},{"t":73,"s":[{"i":[[36.827,-3.487],[9.138,-5.51],[6.941,-7.777],[9.579,-13.852],[13.88,-2.488],[12.399,-3.015],[7.783,-15.137],[1.788,-44.743],[-24.454,-48.639],[-62.882,7.839],[-19.493,-0.332],[-11.619,-6.045],[-10.624,-2.726],[-17.387,33.566],[-15.974,16.407],[-11.484,17.414],[17.727,54.14],[8.972,17.115],[16.774,5.244],[9.275,-3.543],[13.924,1.344],[10.489,11.396]],"o":[[-12.506,1.184],[-9.138,5.51],[-10.805,12.106],[-9.579,13.852],[-12.791,2.292],[-18.597,4.522],[-16.215,31.536],[-2.983,74.629],[22.615,44.982],[23.21,-2.893],[17.622,0.3],[9.136,4.754],[59.239,15.201],[10.54,-20.348],[12.563,-12.904],[34.617,-52.493],[-5.818,-17.768],[-6.617,-12.622],[-12.367,-3.867],[-11.975,4.574],[-17.752,-1.714],[-20.501,-22.274]],"v":[[290,66],[257.826,76.555],[234,97],[204.807,139.214],[171,167],[125,160],[88,196],[60,314],[116,479],[223,579],[287,561],[327,576],[357,589],[465,523],[500,462],[546,420],[543,217],[522,160],[485,122],[448,126],[411,138],[369,107]],"c":true}],"h":1},{"t":74,"s":[{"i":[[38.254,-4.358],[12.016,-11.659],[9.192,-13.114],[6.5,-7.231],[7.751,-1.589],[15.109,-2.278],[9.301,-35.083],[-8.989,-36.675],[-16.27,-30.538],[-23.952,-19.402],[-22.052,1.01],[-22.467,0.128],[-22.734,-6.969],[-20.841,14.389],[-14.952,32.189],[-10.541,10.032],[-10.297,15.356],[18.294,54.883],[9.437,14.113],[17.4,4.072],[23.237,2.905],[11.709,12.688]],"o":[[-19.743,2.249],[-12.016,11.659],[-5.249,7.488],[-6.5,7.231],[-14.106,2.892],[-35.286,5.321],[-11.241,42.402],[8.731,35.62],[16.277,30.551],[12.081,9.786],[24.884,-1.14],[26.164,-0.149],[23.111,7.085],[26.107,-18.024],[8.416,-18.117],[10.933,-10.405],[36.045,-53.752],[-6.378,-19.134],[-7.028,-10.51],[-27.252,-6.377],[-16.466,-2.058],[-19.429,-21.052]],"v":[[290,66],[243.587,88.851],[213,128],[195.377,151.423],[174,166],[129,158],[70,244],[67,373],[113,472],[168,563],[219,580],[288,561],[354,587],[425,577],[480,493],[510,453],[546,419],[541,208],[517,152],[483,123],[411,139],[371,107]],"c":true}],"h":1},{"t":75,"s":[{"i":[[38.399,-4.76],[8.303,-5.012],[6.275,-6.523],[10.557,-14.931],[13.273,-1.4],[6,2.729],[7.255,0.007],[8.102,-16.837],[-17.202,-57.607],[-16.057,-31.228],[-24.84,-17.874],[-26.372,9.641],[-16.171,-1.327],[-18.073,-5.949],[-20.783,41.091],[-9.335,13.748],[-16.013,23.68],[9.54,49.436],[16.868,29.307],[17.622,3.895],[24.664,1.654],[12.196,13.322]],"o":[[-11.513,1.427],[-8.303,5.012],[-9.499,9.874],[-10.557,14.931],[-8.746,0.923],[-6,-2.729],[-21.938,-0.02],[-22.003,45.726],[10.01,33.523],[15.087,29.342],[26.851,19.32],[12.534,-4.582],[21.581,1.77],[59.053,19.439],[6.889,-13.62],[17.182,-25.305],[23.078,-34.128],[-7.456,-38.634],[-7.086,-12.312],[-25.603,-5.658],[-17.827,-1.195],[-18.521,-20.23]],"v":[[290,66],[260.572,76.178],[239,94],[209.33,135.856],[174,165],[152.881,160.697],[134,155],[87,196],[68,380],[116,478],[174,567],[256,572],[296,562],[354,586],[470,518],[491,475],[546,418],[559,276],[522,159],[484,124],[416,140],[368,104]],"c":true}],"h":1},{"t":76,"s":[{"i":[[37.923,-5.335],[10.968,-10.565],[8.851,-12.167],[7.566,-8.057],[9.896,-0.742],[5.648,2.611],[7.801,0.128],[8.382,-17.208],[1.756,-41.675],[-25.738,-49.246],[-65.661,11.654],[-22.605,-0.301],[-22.888,-7.373],[-19.768,12.784],[-19.482,35.251],[-8.648,8.648],[-8.456,12.68],[9.212,49.935],[15.545,28.963],[17.949,4.256],[24.481,1.649],[12.248,13.201]],"o":[[-18.278,2.572],[-10.968,10.565],[-5.84,8.028],[-7.566,8.058],[-7.606,0.57],[-5.648,-2.611],[-23.204,-0.38],[-15.714,32.261],[-3.229,76.605],[25.003,47.839],[20.425,-3.625],[24.247,0.323],[19.871,6.401],[33.04,-21.366],[8.357,-15.121],[9.874,-9.874],[22.449,-33.664],[-7.219,-39.132],[-7.253,-13.513],[-21.996,-5.215],[-17.29,-1.165],[-19.946,-21.497]],"v":[[290,66],[247.43,87.303],[219,123],[199.042,148.964],[173,164],[154.146,159.523],[135,154],[88,194],[60,314],[118,479],[232,580],[293,562],[355,586],[424,578],[486,485],[514,450],[545,418],[559,276],[524,162],[485,125],[416,141],[372,105]],"c":true}],"h":1},{"t":77,"s":[{"i":[[39.994,-5.871],[11.513,-11.031],[8.853,-12.22],[7.093,-7.448],[9.168,-0.67],[6.531,2.938],[9.551,-1.218],[7.008,-12.282],[-9.406,-58.081],[-18.522,-32.601],[-18.356,-23.633],[-25.225,-1.328],[-28.839,-1.395],[-0.648,-0.089],[-26.888,-0.779],[-27.194,44.746],[-13.631,22.207],[8.362,50.365],[17.074,29.664],[17.069,2.695],[28.277,3.491],[11.518,12.958]],"o":[[-18.093,2.656],[-11.513,11.031],[-5.462,7.539],[-7.093,7.448],[-7.325,0.535],[-6.531,-2.938],[-19.646,2.506],[-24.835,43.525],[6.298,38.888],[14.521,25.559],[12.987,16.72],[31.118,1.638],[0.654,0.032],[29.258,4.022],[68.798,1.993],[18.424,-30.316],[20.214,-32.933],[-7.058,-42.513],[-8.094,-14.063],[-26.295,-4.152],[-18.527,-2.287],[-18.969,-21.34]],"v":[[291,66],[247.57,88.327],[218,125],[199.28,149.152],[175,163],[155.17,157.488],[132,153],[93,184],[64,360],[107,459],[158,550],[216,582],[297,562],[299,562],[381,590],[490,481],[546,413],[560,280],[523,160],[482,126],[417,142],[374,106]],"c":true}],"h":1},{"t":78,"s":[{"i":[[43.457,-6.208],[5.655,-2.572],[4.598,-3.6],[12.177,-16.772],[14.709,-1.493],[7.707,3.042],[7.566,-1.294],[6.295,-6.925],[3.809,-7.419],[-16.993,-59.808],[-17.785,-32.893],[-70.847,13.962],[-23.451,-1.147],[-14.349,-6.543],[-22.718,11.066],[-21.49,40.276],[-18.118,31.479],[8.442,47.815],[17.69,28.657],[16.919,3.118],[28.173,3.415],[11.337,13.119]],"o":[[-7.782,1.112],[-5.655,2.572],[-14.582,11.419],[-12.177,16.772],[-8.607,0.874],[-7.707,-3.042],[-11.013,1.883],[-6.295,6.924],[-24.68,48.072],[10.813,38.059],[23.533,43.525],[21.855,-4.307],[18.873,0.923],[21.174,9.654],[37.717,-18.371],[19.121,-35.836],[18.846,-32.744],[-6.988,-39.578],[-5.614,-9.094],[-25.41,-4.683],[-12.767,-1.548],[-20.123,-23.286]],"v":[[292,66],[272.112,71.633],[257,81],[218.095,128.445],[179,161],[154.719,155.685],[132,151],[106.597,165.348],[92,188],[68,379],[120,481],[238,581],[300,562],[345,580],[419,582],[487,486],[548,409],[560,276],[522,158],[486,128],[418,143],[378,110]],"c":true}],"h":1},{"t":79,"s":[{"i":[[49.886,-7.944],[11.511,-11.147],[8.834,-11.687],[6.15,-6.387],[9.139,-1.491],[5.192,1.869],[5.157,1.517],[9.616,-7.445],[5.642,-11.307],[-16.837,-58.464],[-18.778,-34.376],[-60.686,3.197],[-26.493,-0.748],[-21.464,-5.041],[-19.378,15.486],[-16,32.113],[-17.489,28.614],[17.083,55.007],[10.043,15.795],[17.069,2.128],[22.916,1.263],[9.523,10.946]],"o":[[-17.121,2.727],[-11.511,11.147],[-5.26,6.959],[-6.15,6.388],[-6.076,0.992],[-5.192,-1.869],[-13.894,-4.088],[-9.616,7.445],[-23.458,47.01],[11.161,38.756],[24.104,44.126],[28.933,-1.524],[24.659,0.696],[22.396,5.26],[23.258,-18.587],[15.858,-31.827],[31.305,-51.219],[-6.23,-20.06],[-5.256,-8.266],[-22.314,-2.782],[-14.79,-0.815],[-22.22,-25.54]],"v":[[292,66],[249.784,88.78],[220,125],[203.41,146.101],[181,159],[164.311,156.881],[149,151],[113.811,157.954],[91,188],[68,379],[120,480],[226,583],[301,562],[368,586],[435,572],[487,488],[547,411],[545,214],[522,158],[486,129],[424,145],[387,119]],"c":true}],"h":1},{"t":80,"s":[{"i":[[36.142,1.567],[12.337,-9.23],[8.395,-10.957],[8.194,-9.333],[10.386,-1.048],[7.19,3.35],[11.13,-2.178],[6.132,-7.007],[3.526,-7.024],[5.084,-18.748],[1.993,-25.742],[-11.556,-26.013],[-13.934,-24.174],[-68.207,13.015],[-20.983,-0.033],[-22.875,-6.037],[-22.831,47.591],[-14.028,25.679],[22.893,54.59],[21.996,5.434],[25.298,4.018],[10.613,12.15]],"o":[[-20.255,-0.878],[-12.337,9.23],[-5.838,7.62],[-8.194,9.333],[-12.109,1.222],[-7.19,-3.35],[-9.947,1.947],[-6.132,7.007],[-9.672,19.267],[-5.084,18.748],[-3.157,40.774],[11.556,26.013],[28.12,48.786],[21.492,-4.101],[23.927,0.038],[72.238,19.066],[17.391,-36.252],[34.974,-64.026],[-7.498,-17.879],[-28.678,-7.086],[-14.108,-2.241],[-20.484,-23.45]],"v":[[310,65],[262.105,79.624],[232,112],[210.911,139.928],[183,158],[156.265,152.283],[131,148],[107.185,162.692],[93,185],[71.241,240.144],[61,305],[76.682,401.95],[118,474],[238,582],[302,562],[367,585],[487,490],[549,407],[533,180],[490,131],[423,146],[387,117]],"c":true}],"h":1},{"t":81,"s":[{"i":[[31.712,0.662],[9.315,-4.251],[6.738,-6.269],[10.316,-13.79],[14.202,-2.11],[8.366,3.362],[11.125,-2.049],[6.256,-6.926],[3.394,-6.533],[6.018,-32.217],[-7.24,-33.711],[-19.08,-31.755],[-80.775,21.214],[-16.564,-0.156],[-21.831,-6.336],[-29.592,49.462],[-12.824,22.67],[7.759,42.707],[19.455,25.494],[13.281,2.229],[24.849,3.325],[11.371,13.481]],"o":[[-13.002,-0.272],[-9.315,4.251],[-11.535,10.731],[-10.316,13.79],[-9.411,1.398],[-8.366,-3.362],[-9.58,1.764],[-6.256,6.926],[-12.169,23.423],[-6.018,32.217],[8.675,40.392],[30.871,51.378],[19.258,-5.058],[20.339,0.192],[81.673,23.702],[16.261,-27.179],[18.248,-32.259],[-7.16,-39.409],[-6.317,-8.278],[-23.355,-3.92],[-18.302,-2.449],[-17.274,-20.478]],"v":[[310,65],[276.802,71.595],[253,88],[221.501,128.466],[186,156],[160.286,150.512],[132,146],[108.361,160.424],[94,182],[64.942,267.284],[65,368],[115,467],[249,580],[303,562],[365,584],[497,476],[548,407],[560,272],[520,155],[489,132],[425,147],[380,108]],"c":true}],"h":1},{"t":82,"s":[{"i":[[18.503,-0.056],[11.828,-8.767],[8.774,-10.876],[7.602,-8.678],[9.626,-1.893],[8.638,3.834],[11.514,-2.99],[7.175,-13.975],[-12.922,-64.557],[-18.569,-30.124],[-21.766,-23.491],[-28.115,8.639],[-16.826,0.503],[-30.728,-2.77],[-10.257,4.735],[-28.914,38.937],[-8.974,15.02],[7.298,46.619],[16.895,26.682],[14.836,3.399],[18.643,2.307],[26.367,20.675]],"o":[[-18.913,0.058],[-11.828,8.767],[-5.968,7.397],[-7.602,8.678],[-11.932,2.346],[-8.638,-3.834],[-18.878,4.903],[-23.402,45.582],[7.762,38.781],[18.246,29.6],[22.532,24.318],[16.888,-5.189],[23.93,-0.716],[13.111,1.182],[45.022,-20.784],[10.461,-14.088],[19.93,-33.359],[-6.732,-42.999],[-5.651,-8.924],[-24.676,-5.653],[-28.768,-3.56],[-12.762,-10.007]],"v":[[310,65],[264.896,79.886],[235,111],[214.744,137.128],[189,155],[159.687,149.517],[131,145],[94,182],[64,367],[114,466],[170,559],[254,580],[304,562],[381,587],[423,581],[513,451],[546,410],[561,279],[524,161],[492,134],[428,148],[357,82]],"c":true}],"h":1},{"t":83,"s":[{"i":[[35.096,-0.615],[11.897,-8.613],[8.287,-10.231],[7.441,-8.595],[10.839,-1.725],[8.742,3.659],[10.246,-2.08],[6.872,-8.782],[3.365,-7.404],[-2.541,-54.621],[-26.707,-46.469],[-67.894,6.163],[-22.32,1.948],[-23.525,-5.441],[-17.925,10.878],[-27.066,37.72],[-8.491,14.314],[8.336,52.944],[18.044,26.027],[14.546,1.862],[19.275,4.394],[11.938,14.325]],"o":[[-18.126,0.317],[-11.897,8.613],[-6.397,7.896],[-7.441,8.595],[-9.786,1.557],[-8.742,-3.659],[-12.147,2.466],[-6.872,8.782],[-16.526,36.358],[3.315,71.251],[25.514,44.392],[24.397,-2.215],[28.87,-2.52],[20.488,4.738],[39.133,-23.749],[8.229,-11.468],[19.147,-32.278],[-6.204,-39.403],[-4.877,-7.035],[-23.758,-3.041],[-18.858,-4.299],[-17.861,-21.434]],"v":[[310,65],[265.62,80.065],[236,110],[215.832,136.629],[189,154],[161.845,148.108],[134,143],[105.914,161.796],[91,188],[60,335],[124,481],[237,585],[303,563],[373,584],[431,577],[515,449],[546,409],[561,277],[523,159],[490,135],[428,149],[383,109]],"c":true}],"h":1},{"t":84,"s":[{"i":[[42.144,-1.371],[11.457,-8.847],[8.852,-11.017],[8.043,-8.368],[10.139,-0.452],[7.821,3.636],[11.289,-2.034],[6.655,-7.032],[3.244,-6.226],[-11.958,-69.357],[-20.6,-30.891],[-66.675,1.619],[-24.586,2.677],[-16.62,-6.107],[-17.727,1.966],[-21.571,42.905],[-2.567,74.231],[4.681,21.062],[10.789,24.92],[25.277,3.395],[16.936,3.404],[9.838,12.129]],"o":[[-18.319,0.596],[-11.457,8.847],[-5.688,7.078],[-8.043,8.367],[-11.426,0.508],[-7.821,-3.635],[-9.138,1.646],[-6.655,7.032],[-23.876,45.819],[7.145,41.438],[31.015,46.509],[28.517,-0.692],[20.686,-2.252],[13.447,4.941],[49.879,-5.532],[25.851,-51.419],[1.133,-32.772],[-5.828,-26.226],[-8.203,-18.947],[-20.465,-2.748],[-13.345,-2.682],[-20.889,-25.753]],"v":[[310,65],[266.4,80.684],[237,112],[216.339,137.47],[189,153],[161.897,145.856],[135,141],[111.08,155.565],[96,177],[63,365],[115,464],[231,586],[305,563],[361,580],[405,586],[494,484],[565,335],[557,252],[535,184],[491,137],[430,151],[395,121]],"c":true}],"h":1},{"t":85,"s":[{"i":[[43.796,-2.286],[11.147,-8.66],[8.491,-10.425],[7.419,-7.814],[9.51,-1.607],[9.897,3.727],[10.867,-2.463],[6.475,-7.019],[3.518,-6.751],[-11.896,-65.818],[-20.696,-30.906],[-44.571,-16.912],[-15.459,4.573],[-16.467,2.416],[-25.718,-5.587],[-14.792,9.015],[-19.363,35.447],[-14.28,28.023],[10.603,46.045],[41.66,7.585],[25.137,4.402],[9.009,11.002]],"o":[[-17.923,0.935],[-11.147,8.66],[-5.814,7.138],[-7.419,7.814],[-8.544,1.444],[-9.897,-3.727],[-9.582,2.171],[-6.475,7.019],[-24.649,47.303],[7.463,41.293],[27.014,40.341],[20.589,7.812],[16.728,-4.948],[27.197,-3.99],[21.096,4.583],[32.302,-19.687],[14.366,-26.3],[19.827,-38.908],[-9.207,-39.982],[-20.905,-3.806],[-12.498,-2.189],[-21.694,-26.493]],"v":[[310,65],[267.426,80.882],[239,111],[219.272,135.149],[194,151],[166.242,144.736],[135,140],[110.952,155.065],[96,177],[64,367],[117,467],[204,581],[258,582],[305,563],[378,584],[435,575],[499,478],[549,400],[556,250],[492,139],[431,152],[396,122]],"c":true}],"h":1},{"t":86,"s":[{"i":[[37.422,-2.624],[10.5,-8.185],[8.509,-10.034],[7.243,-7.762],[9.174,-2.049],[10.175,3.964],[10.943,-2.543],[6.766,-9.096],[4.063,-8.856],[-32.649,-63.783],[-15.745,-30.485],[-23.77,-17.387],[-18.381,3.338],[-21.032,3.851],[-31.878,-2.78],[-24.72,45.386],[-0.384,71.479],[5.419,23.535],[9.336,21.126],[22.11,2.869],[24.583,2.404],[11.732,14.962]],"o":[[-17.493,1.227],[-10.5,8.185],[-5.853,6.901],[-7.243,7.762],[-10.356,2.314],[-10.175,-3.964],[-11.874,2.76],[-6.766,9.096],[-26.286,57.292],[15.086,29.472],[15.138,29.311],[17.983,13.154],[20.221,-3.672],[34.104,-6.244],[72.122,6.29],[25.209,-46.284],[0.186,-34.568],[-4.677,-20.312],[-7.581,-17.155],[-26.212,-3.401],[-18.139,-1.774],[-17.797,-22.696]],"v":[[310,65],[269.262,80.395],[242,109],[222.491,132.639],[198,149],[167.44,143.327],[136,138],[108.641,157.428],[93,186],[77,409],[132,490],[187,572],[247,586],[305,564],[388,585],[502,474],[565,326],[556,249],[536,184],[494,140],[435,153],[388,110]],"c":true}],"h":1},{"t":87,"s":[{"i":[[45.449,-3.779],[11.165,-8.854],[8.4,-10.177],[7.432,-7.286],[9.337,-0.668],[8.039,3.767],[12.362,-1.389],[7.504,-9.308],[3.815,-8.288],[4.812,-42.514],[-17.842,-31.404],[-16.421,-31.279],[-64.624,4.87],[-27.822,-2.846],[-29.321,-0.513],[-18.003,39.301],[-8.731,13.37],[-5.63,40.392],[9.638,33.987],[34.551,4.26],[18.678,2.366],[9.502,12.401]],"o":[[-16.938,1.408],[-11.165,8.854],[-5.935,7.189],[-7.432,7.286],[-9.481,0.679],[-8.039,-3.767],[-13.17,1.481],[-7.504,9.308],[-13.594,29.54],[-4.812,42.514],[15.626,27.504],[22.481,42.823],[28.821,-2.172],[26.247,2.685],[52.609,0.921],[7.85,-17.137],[19.664,-30.112],[6.006,-43.09],[-8.772,-30.936],[-19.959,-2.461],[-13.231,-1.676],[-21.182,-27.644]],"v":[[310,65],[268.596,81.924],[240,112],[220.051,135.39],[195,149],[170.161,141.967],[141,136],[110.483,154.394],[94,183],[62.923,297.102],[79,414],[135,493],[242,587],[324,563],[398,585],[493,495],[518,449],[563,352],[551,227],[494,142],[437,155],[399,123]],"c":true}],"h":1},{"t":88,"s":[{"i":[[46.68,-3.458],[10.986,-8.459],[8.209,-9.917],[7.228,-7.334],[9.502,-0.912],[6.336,2.892],[6.606,1.395],[8.62,-4.334],[5.219,-6.629],[7.999,-22.144],[-28.462,-58.523],[-17.573,-31.936],[-55.905,2.538],[-24.121,6.929],[-49.372,5.554],[-21.337,43.873],[-12.838,34.759],[0.166,30.889],[4.328,18.311],[36.936,8.062],[21.202,4.15],[9.604,12.247]],"o":[[-16.846,1.248],[-10.986,8.459],[-5.588,6.751],[-7.227,7.334],[-10.049,0.964],[-6.336,-2.892],[-9.302,-1.964],[-8.62,4.334],[-10.443,13.263],[-19.675,54.465],[13.338,27.425],[24.905,45.26],[26.852,-1.219],[38.286,-10.999],[46.454,-5.225],[14.798,-30.428],[7.383,-19.99],[-0.154,-28.732],[-7.948,-33.626],[-16.037,-3.501],[-12.414,-2.43],[-22.063,-28.137]],"v":[[312,65],[271.022,80.998],[243,110],[223.935,132.879],[199,147],[175.418,142.77],[157,135],[129.438,139.555],[108,157],[83,211],[76,409],[134,489],[238,588],[305,565],[411,584],[497,486],[555,385],[565,316],[556,245],[497,144],[437,156],[403,126]],"c":true}],"h":1},{"t":89,"s":[{"i":[[41.474,-2.967],[10.821,-8.412],[8.443,-10.118],[7.183,-7.042],[7.745,-1.213],[9.436,4.205],[13.51,-2.136],[7.687,-9.82],[3.912,-8.769],[4.422,-43.346],[-19.753,-32.09],[-16.925,-32.431],[-37.215,-11.092],[-38.191,-1.27],[-12.546,-4.922],[-13.488,0.473],[-24.344,45.357],[-12.418,28.366],[23.879,53.78],[23.139,1.076],[14.727,2.634],[11.273,14.934]],"o":[[-17.272,1.236],[-10.821,8.412],[-5.523,6.618],[-7.183,7.042],[-10.746,1.683],[-9.436,-4.205],[-12.34,1.951],[-7.687,9.82],[-14.064,31.525],[-4.422,43.346],[16.769,27.243],[18.542,35.53],[46.954,13.995],[14.526,0.483],[11.436,4.486],[64.074,-2.245],[15.489,-28.858],[27.338,-62.449],[-7.505,-16.903],[-19.552,-0.909],[-17.412,-3.114],[-19.62,-25.992]],"v":[[314,65],[272.879,80.838],[245,110],[225.667,132.054],[203,146],[174.073,139.16],[141,133],[111.179,152.886],[94,183],[62.638,301.076],[82,420],[140,500],[216,586],[325,562],[363,576],[403,584],[506,471],[551,393],[537,186],[494,145],[441,158],[398,118]],"c":true}],"h":1},{"t":90,"s":[{"i":[[49.531,-6.968],[9.858,-7.501],[7.767,-8.915],[6.685,-6.96],[9.209,-2.216],[10.431,4.663],[12.624,-3.608],[5.626,-5.415],[3.262,-4.988],[9.133,-31.351],[-28.935,-48.362],[-17.547,-33.524],[-53.442,3.005],[-29.412,-0.425],[-12.574,-4.896],[-17.812,1.831],[-16.231,36.727],[-9.6,57.665],[8.124,29.269],[31.79,4.376],[19.028,2.022],[10.921,14.646]],"o":[[-14.8,2.082],[-9.858,7.501],[-6.051,6.946],[-6.685,6.959],[-12.654,3.045],[-10.43,-4.663],[-8.232,2.353],[-5.627,5.415],[-11.295,17.272],[-17.216,59.094],[16.948,28.327],[21.444,40.969],[33.964,-1.91],[14.285,0.206],[13.541,5.273],[47.131,-4.846],[21.73,-49.172],[6.581,-39.532],[-7.598,-27.375],[-20.162,-2.775],[-16.025,-1.703],[-20.92,-28.056]],"v":[[310,66],[273.725,81.375],[248,107],[229.369,129.048],[206,144],[172.477,137.577],[139,132],[118.273,144.524],[105,161],[75,238],[80,418],[141,499],[241,589],[326,562],[365,575],[412,583],[495,494],[562,354],[553,231],[499,147],[444,159],[404,124]],"c":true}],"h":1},{"t":91,"s":[{"i":[[52.095,-8.296],[9.929,-8.203],[8.603,-9.692],[6.348,-6.114],[8.28,-1.54],[9.049,4.571],[15.681,-3.659],[7.064,-9.081],[4.264,-8.998],[6.097,-41.649],[-14.892,-32.911],[-19.829,-31.627],[-20.895,-20.839],[-28.877,3.47],[-26.884,0.703],[-24.611,-3.393],[-20.356,44.714],[-14.017,35.792],[8.483,36.598],[36.011,3.908],[18.04,1.6],[10.154,13.36]],"o":[[-15.679,2.496],[-9.929,8.203],[-5.329,6.003],[-6.348,6.114],[-14.121,2.627],[-9.049,-4.571],[-11.478,2.678],[-7.064,9.081],[-13.502,28.492],[-6.097,41.649],[13.256,29.294],[17.515,27.936],[14.809,14.77],[27.278,-3.278],[23.581,-0.617],[60.304,8.314],[16.508,-36.262],[14.061,-35.904],[-8.157,-35.19],[-18.838,-2.045],[-14.561,-1.292],[-21.939,-28.867]],"v":[[310,66],[272.693,83.103],[246,111],[228.713,130.347],[207,143],[175.17,136.226],[141,131],[113.59,150.26],[97,179],[64.204,289.686],[74,407],[134,485],[183,565],[250,589],[326,562],[393,582],[499,489],[554,386],[557,248],[498,149],[446,161],[408,128]],"c":true}],"h":1},{"t":92,"s":[{"i":[[44.283,-6.794],[10.41,-8.789],[9.072,-10.344],[5.911,-5.3],[6.452,-1.21],[10.257,4.58],[13.168,-2.92],[6.31,-6.646],[3.195,-5.293],[7.918,-48.74],[-20.681,-35.166],[-16.633,-28.161],[-22.065,-20.092],[-29.495,10.446],[-23.006,0.67],[-28.654,-0.665],[-23.39,45.968],[-11.004,33.973],[8.223,36.269],[32.866,4.436],[18.217,2.966],[12.441,16.347]],"o":[[-16.287,2.499],[-10.41,8.789],[-4.902,5.59],[-5.911,5.3],[-12.805,2.401],[-10.257,-4.58],[-9.566,2.121],[-6.31,6.646],[-15.009,24.873],[-7.918,48.74],[15.766,26.808],[17.097,28.946],[23.013,20.955],[19.606,-6.943],[27.13,-0.791],[61.815,1.435],[15.408,-30.282],[11.568,-35.716],[-6.963,-30.709],[-19.738,-2.664],[-21.375,-3.48],[-18.7,-24.571]],"v":[[312,66],[273.088,84.117],[245,114],[228.663,131.285],[210,142],[176.772,135.111],[143,129],[119.221,143.621],[105,163],[65.232,282.78],[79,418],[137,490],[189,568],[271,584],[329,562],[404,582],[504,479],[556,380],[557,246],[501,151],[447,162],[399,114]],"c":true}],"h":1},{"t":93,"s":[{"i":[[47.536,-8.514],[9.833,-8.045],[8.869,-9.991],[6.223,-5.811],[6.21,-1.238],[10.241,4.852],[14.841,-3.577],[6.405,-6.224],[3.276,-5.153],[8.234,-48.216],[-17.795,-35.769],[-11.272,-11.35],[-9.302,-16.302],[-76.554,27.183],[-19.163,0.935],[-21.5,-4.767],[-24.623,50.552],[-10.374,32.797],[8.02,35.611],[32.924,6.049],[11.895,3.121],[12.135,16.75]],"o":[[-15.798,2.829],[-9.833,8.045],[-4.897,5.517],[-6.223,5.811],[-14.194,2.831],[-10.241,-4.852],[-8.105,1.953],[-6.405,6.224],[-14.858,23.366],[-8.234,48.216],[7.611,15.298],[11.272,11.35],[28.523,49.987],[19.912,-7.07],[22.645,-1.105],[73.149,16.219],[14.004,-28.752],[11.296,-35.711],[-6.856,-30.441],[-14.876,-2.733],[-16.475,-4.323],[-20.344,-28.08]],"v":[[313,66],[275.803,83.129],[249,111],[231.985,129.208],[213,141],[178.486,133.94],[143,128],[120.879,141.6],[106,160],[66.51,276.697],[76,412],[105.732,449.747],[138,489],[272,584],[328,562],[388,579],[507,474],[557,377],[557,246],[502,153],[447,163],[407,123]],"c":true}],"h":1},{"t":94,"s":[{"i":[[44.669,-5.387],[4.169,-1.023],[2.866,-1.373],[6.608,-6.201],[6.132,-6.636],[7.125,-6.464],[8.916,-1.1],[9.925,4.593],[13.803,-2.832],[6.692,-6.509],[3.311,-5.341],[-39.386,-73.077],[-17.092,-26.655],[-72.533,9.314],[-23.031,2.286],[-23.931,-3.771],[-22.195,47.341],[-10.638,34.192],[7.861,35.297],[31.437,6.07],[22.497,5.106],[10.667,14.906]],"o":[[-4.456,0.537],[-4.169,1.022],[-7.434,3.561],[-6.609,6.201],[-5.584,6.043],[-7.125,6.464],[-12.496,1.541],[-9.925,-4.593],[-7.922,1.625],[-6.692,6.509],[-32.155,51.87],[14.326,26.582],[27.425,42.768],[22.476,-2.886],[26.354,-2.615],[66.85,10.533],[15.971,-34.065],[11.178,-35.928],[-6.867,-30.834],[-17.574,-3.393],[-17.795,-4.039],[-19.231,-26.874]],"v":[[318,66],[304.808,68.374],[294,72],[273.024,87.194],[254,107],[234.999,127.207],[211,140],[178.98,132.032],[145,126],[122.542,139.713],[107,159],[78,418],[137,486],[256,590],[328,562],[395,580],[508,476],[556,378],[558,248],[504,155],[448,164],[404,119]],"c":true}],"h":1},{"t":95,"s":[{"i":[[43.911,-5.003],[10.052,-7.426],[8.814,-9.474],[6.562,-6.175],[8.225,-1.358],[10.487,4.829],[12.399,-2.228],[6.881,-6.475],[3.598,-5.502],[4.337,-10.465],[3.233,-9.38],[-33.875,-56.138],[-18.336,-33.616],[-57.72,-0.271],[-28.584,3.674],[-28.455,-2.504],[-21.617,45.269],[-8.129,31.355],[6.888,29.588],[29.378,8.552],[23.943,5.525],[11.478,16.217]],"o":[[-15.978,1.821],[-10.052,7.426],[-5.527,5.941],[-6.562,6.175],[-12.653,2.089],[-10.487,-4.829],[-8.878,1.596],[-6.881,6.476],[-4.421,6.76],[-4.337,10.465],[-20.153,58.461],[17.19,28.486],[21.096,38.676],[32.139,0.151],[26.598,-3.419],[69.128,6.083],[14.482,-30.327],[10.556,-40.715],[-7.23,-31.058],[-13.934,-4.056],[-19.37,-4.47],[-18.792,-26.552]],"v":[[320,66],[282.127,80.76],[255,107],[237.024,126.438],[215,139],[181.31,131.395],[148,124],[124.04,137.57],[108,157],[94.609,184.035],[83,215],[80,422],[145,498],[246,591],[329,562],[403,580],[515,463],[559,369],[557,245],[507,157],[450,165],[406,119]],"c":true}],"h":1},{"t":96,"s":[{"i":[[50.929,-4.674],[10.782,-8.377],[9.327,-9.972],[6.137,-5.273],[6.801,-0.936],[5.863,2.001],[4.865,1.915],[10.32,-2.319],[8.469,-12.066],[10.264,-51.403],[-21.631,-36.001],[-16.959,-24.701],[-30.288,-20.423],[-23.153,8.023],[-19.224,3.638],[-25.379,-3.538],[-23.995,47.727],[-8.494,34.076],[7.391,30.736],[28.521,6.151],[21.236,6.7],[8.62,12.212]],"o":[[-16.544,1.519],[-10.782,8.377],[-4.651,4.973],[-6.137,5.273],[-6.683,0.919],[-5.863,-2.001],[-11.147,-4.387],[-15.257,3.428],[-19.009,27.081],[-9.644,48.295],[14.515,24.157],[22.109,32.202],[18.526,12.492],[18.249,-6.324],[28.105,-5.318],[69.927,9.747],[16.535,-32.887],[9.472,-38],[-7.07,-29.401],[-18.06,-3.895],[-12.546,-3.958],[-22.042,-31.23]],"v":[[322,66],[282.087,82.16],[253,111],[236.612,127.528],[217,138],[198.137,135.626],[182,129],[149,123],[112,152],[67,277],[79,422],[138,485],[203,578],[275,587],[328,562],[402,579],[518,459],[559,365],[557,244],[507,159],[449,166],[418,134]],"c":true}],"h":1},{"t":97,"s":[{"i":[[43.921,-4.899],[10.711,-7.771],[8.356,-9.152],[6.225,-5.577],[7.633,-0.704],[6.948,3.345],[6.78,1.582],[10.923,-7.144],[6.034,-9.984],[8.068,-52.878],[-25.504,-34.627],[-15.306,-20.925],[-30.343,-22.195],[-22.691,7.047],[-21.016,3.887],[-26.572,-3.727],[-22.012,46.663],[-8.964,31.187],[6.902,30.989],[29.318,4.773],[15.877,4.745],[11.216,15.913]],"o":[[-15.8,1.763],[-10.711,7.771],[-5.466,5.987],[-6.225,5.577],[-10.43,0.962],[-6.948,-3.345],[-15.273,-3.562],[-10.924,7.144],[-16.231,26.859],[-8.068,52.878],[13.674,18.566],[23.142,31.637],[20.812,15.223],[18.476,-5.738],[28.075,-5.193],[69.287,9.717],[14.03,-29.742],[10.438,-36.313],[-6.635,-29.792],[-15.361,-2.501],[-18.17,-5.43],[-18.614,-26.409]],"v":[[323,66],[283.917,81.458],[256,108],[238.626,126.462],[218,137],[192.763,131.908],[173,123],[133.571,130.34],[108,158],[65.199,288.674],[85,431],[138,483],[202,577],[274,588],[330,562],[402,578],[514,467],[558,372],[558,247],[506,161],[452,168],[408,119]],"c":true}],"h":1},{"t":98,"s":[{"i":[[48.15,-4.604],[10.392,-7.61],[8.459,-9.032],[6.533,-5.533],[8.421,-1.053],[7.119,3.386],[5.727,1.68],[11.39,-7.712],[6.278,-10.599],[-58.582,-66.975],[-12.277,-12.917],[-24.632,-26.055],[-30.848,9.367],[-19.949,4.511],[-43.154,20.956],[-20.015,42.236],[-7.752,33.888],[6.542,27.382],[7.958,15.478],[17.059,3.412],[19.764,4.621],[9.902,15.205]],"o":[[-15.971,1.527],[-10.392,7.61],[-5.445,5.814],[-6.533,5.533],[-9.796,1.225],[-7.119,-3.386],[-15.161,-4.447],[-11.39,7.712],[-32.078,54.154],[11.421,13.058],[24.728,26.017],[19.004,20.102],[20.674,-6.277],[36.169,-8.179],[42.167,-20.476],[14.543,-30.689],[9.948,-43.489],[-4.866,-20.366],[-6.864,-13.35],[-15.435,-3.087],[-16.989,-3.972],[-19.711,-30.268]],"v":[[325,66],[286.366,80.871],[259,107],[241.232,125.071],[219,136],[193.948,131.179],[175,122],[134.838,129.216],[108,159],[90,439],[130,473],[190,565],[274,589],[331,562],[445,572],[522,452],[560,360],[557,243],[540,195],[507,163],[456,169],[417,130]],"c":true}],"h":1},{"t":99,"s":[{"i":[[47.826,-4.432],[9.956,-7.341],[8.68,-9.108],[6.993,-5.665],[7.583,-0.629],[7.134,3.184],[7.269,2.027],[7.238,-1.217],[7.639,-11.796],[-34.076,-78.458],[-19.572,-26.213],[-10.739,-16.7],[-19.626,-10.752],[-23.777,11.829],[-19.049,1.496],[-21.108,-4.135],[-22.56,48.047],[-9.688,32.138],[7.369,34.466],[30.491,5.09],[21.139,5.74],[10.646,15.875]],"o":[[-16.495,1.529],[-9.956,7.341],[-5.445,5.713],[-6.993,5.665],[-9.195,0.762],[-7.134,-3.184],[-5.579,-1.556],[-21.612,3.634],[-31.408,48.5],[14.574,33.555],[13.326,17.848],[11.426,17.769],[24.683,13.523],[15.284,-7.604],[18.174,-1.428],[68.351,13.391],[14.707,-31.322],[9.949,-33.006],[-6.663,-31.164],[-18.726,-3.126],[-15.301,-4.155],[-19.965,-29.772]],"v":[[327,66],[288.638,80.315],[262,106],[243.104,124.313],[221,135],[197.055,130.092],[176,121],[155,119],[112,153],[73,413],[141,485],[172,540],[215,583],[293,582],[342,560],[400,576],[514,471],[556,375],[559,252],[508,165],[456,170],[418,130]],"c":true}],"h":1},{"t":100,"s":[{"i":[[43.214,-3.715],[10.469,-7.402],[9.005,-9.005],[5.975,-5.323],[7.783,-1.392],[10.983,5.259],[12.548,-1.797],[8.257,-8.555],[4.454,-8.13],[8.389,-52.049],[-24.679,-35.199],[-17.035,-22.752],[-10.53,-16.938],[-49.516,16.242],[-22.7,2.451],[-32.643,1.016],[-17.153,39.619],[-11.441,32.615],[7.431,39.279],[29.98,6.038],[13.79,1.681],[12.809,19.505]],"o":[[-16.118,1.386],[-10.469,7.402],[-5.317,5.316],[-5.975,5.323],[-12.521,2.239],[-10.983,-5.259],[-11.517,1.65],[-8.257,8.555],[-15.124,27.606],[-8.389,52.049],[15.824,22.57],[12.016,16.05],[21.955,35.316],[21.237,-6.966],[25.039,-2.703],[49.647,-1.546],[14.48,-33.444],[11.306,-32.231],[-6.293,-33.261],[-15.701,-3.162],[-25.896,-3.157],[-18.12,-27.593]],"v":[[329,66],[290.166,80.285],[262,106],[245.35,122.944],[225,134],[190.52,125.832],[156,117],[126.203,134.14],[107,161],[65.148,290.805],[83,432],[142,486],[172,539],[280,588],[342,560],[420,577],[510,483],[553,384],[560,259],[510,167],[466,173],[414,122]],"c":true}],"h":1},{"t":101,"s":[{"i":[[48.526,-3.666],[10.923,-7.349],[8.15,-8.461],[6.185,-5.29],[8.657,-1.02],[11.479,5.1],[12.169,-2.115],[6.783,-12.149],[8.052,-22.994],[-36.92,-54.676],[-15.741,-18.511],[-10.981,-17.392],[-16.342,-9.875],[-23.602,8.541],[-22.285,2.298],[-22.693,-3.245],[-23.969,50.813],[-7.063,31.786],[18.824,37.838],[15.354,2.524],[17.301,3.383],[11.316,17.45]],"o":[[-15.159,1.145],[-10.923,7.349],[-5.605,5.819],[-6.185,5.29],[-10.916,1.286],[-11.479,-5.1],[-23.637,4.109],[-8.01,14.347],[-20.93,59.768],[12.456,18.447],[13.686,16.094],[10.072,15.951],[19.736,11.926],[21.098,-7.634],[21.557,-2.223],[77.416,11.069],[13.557,-28.739],[13.323,-59.956],[-5.48,-11.015],[-16.135,-2.652],[-20.484,-4.005],[-20.147,-31.068]],"v":[[331,66],[292.244,80.013],[264,105],[246.789,122.599],[225,133],[191.44,123.878],[156,116],[108,160],[83,221],[83,433],[141,484],[174,540],[213,581],[283,587],[344,560],[406,575],[525,449],[560,359],[542,200],[510,169],[465,174],[423,134]],"c":true}],"h":1},{"t":102,"s":[{"i":[[25.135,-1.953],[10.243,-7.077],[8.385,-8.475],[6.794,-5.387],[8.276,-0.846],[11.171,5.221],[12.166,-2.54],[9.187,-14.777],[8.67,-46.059],[-26.496,-31.327],[-16.025,-16.198],[-11.732,-18.952],[-46.918,14.172],[-24.413,4.481],[-27.329,-2.718],[-19.358,45.07],[-9.133,30.935],[6.315,32.326],[28.281,5.736],[13.933,1.789],[5.577,4.344],[20.487,21.875]],"o":[[-15.644,1.216],[-10.243,7.077],[-5.546,5.606],[-6.794,5.387],[-13.149,1.343],[-11.171,-5.221],[-20.245,4.226],[-20.387,32.793],[-10.063,53.457],[13.027,15.402],[16.131,16.304],[19.495,31.493],[23.878,-7.213],[23.22,-4.262],[64.196,6.385],[13.837,-32.214],[10.002,-33.879],[-6.004,-30.734],[-13.536,-2.745],[-7.842,-1.007],[-21.724,-16.919],[-14.698,-15.693]],"v":[[333,66],[295.056,79.556],[268,104],[249.548,121.57],[227,132],[191.263,122.603],[157,115],[113,153],[65,289],[88,441],[138,480],[175,540],[278,590],[343,560],[411,575],[516,473],[556,378],[560,258],[512,171],[470,176],[448,166],[396,94]],"c":true}],"h":1},{"t":103,"s":[{"i":[[49.441,-7.171],[9.208,-6.146],[7.758,-7.473],[6.493,-5.732],[8.977,-1.246],[11.277,5.314],[11.435,-1.529],[9.324,-11.275],[4.664,-10.024],[-45.208,-75.201],[-16.352,-15.253],[-12.122,-20.464],[-14.745,-10.508],[-27.153,13.215],[-18.672,2.414],[-28.859,0.267],[-21.818,49.996],[-7.24,30.829],[5.982,27.983],[26.63,5.768],[14.286,2.454],[12.244,19.256]],"o":[[-13.41,1.945],[-9.208,6.145],[-6.049,5.827],[-6.493,5.732],[-12.457,1.729],[-11.277,-5.314],[-14.04,1.877],[-9.324,11.275],[-31.12,66.892],[12.378,20.59],[17.011,15.868],[8.272,13.964],[26.812,19.108],[15.387,-7.489],[23.76,-3.071],[60.785,-0.562],[13.134,-30.098],[9.815,-41.798],[-6.501,-30.406],[-11.651,-2.523],[-25.301,-4.347],[-18.716,-29.434]],"v":[[329,67],[295.761,79.854],[271,101],[252.696,119.436],[230,131],[194.733,122.15],[161,113],[125.968,135.389],[105,170],[82,434],[138,479],[174,538],[211,580],[300,582],[348,559],[423,575],[525,453],[559,363],[559,252],[513,174],[470,177],[422,129]],"c":true}],"h":1},{"t":104,"s":[{"i":[[50.145,-7.694],[9.707,-6.944],[8.163,-8.076],[5.697,-4.664],[7.18,-1.365],[12.087,5.54],[12.589,-1.865],[9.145,-19.122],[2.71,-61.645],[-11.885,-23.081],[-19.028,-24.07],[-10.336,-16.301],[-16.983,-10.074],[-24.065,12.266],[-17.69,2.599],[-33.23,2.903],[-19.069,44.395],[-8.205,31.648],[6.368,31.968],[25.838,6.113],[12.465,2.777],[13.092,20.303]],"o":[[-14.008,2.15],[-9.707,6.944],[-5.034,4.98],[-5.697,4.664],[-12.064,2.294],[-12.087,-5.54],[-26.807,3.972],[-20.998,43.904],[-1.68,38.21],[15.657,30.405],[13.781,17.432],[9.989,15.753],[29.211,17.328],[13.92,-7.095],[25.999,-3.819],[50.573,-4.418],[13.828,-32.193],[8.293,-31.988],[-6.429,-32.272],[-10.386,-2.457],[-25.857,-5.76],[-19.012,-29.483]],"v":[[330,67],[295.116,81.555],[269,105],[253.11,120.211],[234,130],[197.894,121.322],[161,112],[107,166],[60,335],[77,427],[147,487],[177,541],[218,584],[304,580],[349,559],[431,574],[521,465],[557,372],[560,257],[514,176],[471,178],[424,130]],"c":true}],"h":1},{"t":105,"s":[{"i":[[49.944,-7.663],[5.775,-2.422],[4.582,-3.19],[9.963,-9.813],[12.643,-2.132],[11.966,5.412],[14.661,-2.542],[8.419,-17.957],[8.829,-28.693],[-42.603,-40.601],[-15.397,-18.778],[-12.812,-18.327],[-47.142,13.316],[-25.783,2.01],[-26.023,-1.384],[-9.888,5.529],[-18.035,42.122],[-6.854,28.748],[5.715,27.231],[28.812,6.012],[12.648,2.984],[11.393,18.667]],"o":[[-7.319,1.123],[-5.775,2.422],[-9.504,6.616],[-9.963,9.813],[-12.476,2.104],[-11.966,-5.412],[-28.816,4.997],[-10.292,21.954],[-20.59,66.917],[15.718,14.979],[14.673,17.894],[20.385,29.162],[26.09,-7.37],[20.907,-1.63],[14.9,0.793],[36.351,-20.326],[12.764,-29.812],[8.408,-35.269],[-6.716,-32],[-10.829,-2.26],[-23.475,-5.538],[-18.409,-30.163]],"v":[[332,67],[312.447,72.45],[297,81],[268.355,108.363],[235,129],[199.139,120.171],[160,112],[107,168],[76,247],[93,450],[148,488],[182,547],[283,591],[355,558],[420,573],[458,565],[525,457],[559,367],[559,256],[513,178],[472,179],[427,133]],"c":true}],"h":1},{"t":106,"s":[{"i":[[46.674,-4.354],[0.336,0.008],[0.329,-0.004],[14.767,-15.065],[16.99,-1.484],[12.203,5.511],[12.783,-1.96],[8.126,-14.158],[9.203,-24.174],[-36.207,-56.94],[-18.6,-19.966],[-10.002,-16.552],[-15.657,-10.47],[-32.355,20.777],[-12.249,0.322],[-23.334,-2.346],[-11.039,4.925],[-17.35,41.108],[16.238,84.139],[27.274,6.253],[10.754,1.962],[12.787,20.921]],"o":[[-0.327,0.031],[-0.336,-0.008],[-23.942,0.257],[-14.767,15.065],[-12.404,1.084],[-12.203,-5.511],[-23.606,3.62],[-8.692,15.145],[-22.415,58.877],[15.732,24.742],[14.011,15.04],[9.603,15.891],[36.546,24.439],[10.739,-6.896],[21.176,-0.557],[8.66,0.871],[38.126,-17.009],[25.602,-60.661],[-6.826,-35.372],[-9.97,-2.286],[-26.001,-4.743],[-18.192,-29.764]],"v":[[338,67],[337.001,67.02],[336,67],[280.786,97.08],[236,129],[199.284,118.843],[162,110],[114,154],[87,216],[81,436],[147,486],[177,538],[216,581],[321,572],[359,557],[421,573],[454,567],[522,464],[560,260],[514,180],[477,182],[426,131]],"c":true}],"h":1},{"t":107,"s":[{"i":[[47.326,-4.512],[10.401,-6.591],[8.442,-8.209],[6.372,-4.834],[8.231,-0.527],[11.08,5.555],[15.349,-2.365],[8.994,-11.933],[4.213,-8.987],[10.115,-33.058],[-49.154,-35.857],[-11.601,-11.447],[-10.334,-17.101],[-18.029,-10.957],[-26.907,12.79],[-20.804,0.725],[-26.501,-1.086],[-17.029,41.469],[14.603,91.189],[24.831,6.957],[13.178,2.365],[12.758,20.464]],"o":[[-14.954,1.425],[-10.401,6.592],[-5.281,5.136],[-6.372,4.834],[-13.332,0.853],[-11.08,-5.555],[-14.809,2.282],[-8.994,11.933],[-12.24,26.107],[-19.757,64.57],[14.423,10.521],[15.104,14.903],[10.542,17.446],[24.063,14.624],[18.901,-8.985],[21.404,-0.746],[54.186,2.221],[26.215,-63.837],[-5.964,-37.241],[-9.99,-2.799],[-24.106,-4.327],[-20.035,-32.136]],"v":[[340,67],[302.616,79.913],[275,103],[257.712,118.956],[236,128],[201.013,117.366],[163,109],[127.553,133.471],[108,168],[76,250],[99,458],[146,484],[179,538],[221,584],[305,584],[361,557],[426,572],[517,478],[562,267],[516,182],[479,183],[430,136]],"c":true}],"h":1},{"t":108,"s":[{"i":[[34.119,-2.872],[10.455,-6.498],[8.413,-7.764],[6.08,-4.841],[8.218,-0.594],[7.021,3.579],[7.925,2.406],[10.516,-1.687],[9.204,-20.893],[9.897,-32.955],[-39.429,-36.048],[-14.745,-16.346],[-9.902,-15.838],[-50.969,6.211],[-28.072,6.012],[-26.533,0.246],[-14.89,31.957],[-10.674,43.003],[5.792,30.846],[26.336,6.77],[14.743,2.244],[15.844,23.66]],"o":[[-14.768,1.243],[-10.455,6.498],[-5.462,5.041],[-6.08,4.841],[-9.991,0.722],[-7.021,-3.579],[-5.639,-1.712],[-27.439,4.401],[-11.482,26.064],[-18.821,62.672],[17.927,16.39],[12.643,14.015],[18.918,30.258],[31.168,-3.798],[26.7,-5.718],[42.841,-0.397],[18.28,-39.232],[9.435,-38.009],[-6.268,-33.383],[-10.654,-2.739],[-32.468,-4.941],[-17.356,-25.918]],"v":[[342,67],[304.734,79.609],[277,102],[260.066,117.836],[239,127],[214.451,121.346],[193,111],[163,108],[106,172],[73,260],[94,455],[150,488],[179,537],[275,595],[355,558],[430,571],[507,503],[558,371],[560,262],[516,184],[481,185],[420,116]],"c":true}],"h":1},{"t":109,"s":[{"i":[[56.99,0.441],[10.764,-6.5],[8.942,-8.132],[15.638,-1.461],[11.668,4.824],[14.089,-2.358],[6.56,-8.066],[5.589,-12.182],[9.982,-32.745],[-37.439,-40.136],[-15.486,-14.837],[-9.837,-15.981],[-15.537,-11.012],[-29.615,19.887],[-13.138,1.903],[-27.934,1.741],[-9.44,9.34],[-12.096,29.743],[14.775,84.119],[23.554,6.453],[10.181,1.715],[5.916,7.383]],"o":[[-17,-0.132],[-10.764,6.5],[-10.912,9.923],[-13.028,1.217],[-9.768,-4.039],[-13.868,2.321],[-10.136,12.462],[-11.794,25.707],[-17.956,58.902],[15.818,16.957],[15.388,14.744],[9.662,15.697],[34.283,24.297],[11.119,-7.466],[23.168,-3.356],[14.222,-0.886],[19.137,-18.933],[24.621,-60.543],[-5.91,-33.646],[-11.569,-3.17],[-11.417,-1.923],[-27.249,-34.005]],"v":[[350,67],[309.457,77.802],[281,101],[241,127],[204,114],[164,107],[130,132],[108,170],[75,257],[90,452],[149,486],[180,537],[218,581],[324,574],[361,556],[437,570],[480,549],[523,468],[561,266],[518,186],[483,187],[451,165]],"c":true}],"h":1},{"t":110,"s":[{"i":[[46.393,-6.306],[9.309,-6.189],[8.126,-7.389],[5.99,-4.581],[6.911,-1.013],[12.851,6.251],[16.549,-3.092],[6.246,-5.177],[3.889,-5.145],[6.697,-15.036],[10.182,-35.423],[-47.521,-31.382],[-12.625,-8.776],[-11.551,-19.061],[-53.312,15.295],[-28.283,4.911],[-37.94,16.478],[-16.82,42.597],[13.322,75.058],[24.448,9.603],[13.514,2.958],[13.327,21.96]],"o":[[-13.637,1.853],[-9.309,6.189],[-5.127,4.662],[-5.99,4.581],[-13.048,1.911],[-12.851,-6.251],[-6.129,1.145],[-6.245,5.177],[-10.39,13.746],[-12.654,28.41],[-18.285,63.615],[15.138,9.997],[16.326,11.35],[21.702,35.811],[27.006,-7.748],[29.295,-5.087],[37.48,-16.279],[21.677,-54.895],[-5.294,-29.825],[-9.777,-3.84],[-27.417,-6.001],[-17.365,-28.613]],"v":[[340,68],[306.367,80.848],[281,102],[264.338,116.737],[245,126],[207.126,115.114],[164,106],[144.821,116.5],[129,133],[107,174],[73,266],[101,463],[144,482],[179,533],[289,593],[362,556],[459,564],[527,460],[561,266],[520,189],[483,188],[429,127]],"c":true}],"h":1},{"t":111,"s":[{"i":[[26.897,-3.9],[9.75,-6.382],[8.308,-7.485],[5.524,-4.197],[6.278,-1.044],[34.772,-8.813],[9.257,-20.589],[10.272,-32.415],[-52.598,-32.838],[-12.885,-9.581],[-10.462,-16.877],[-39.423,-3.626],[-12.912,6.204],[-23.964,2.707],[-33.352,7.629],[-14.36,34.687],[-8.434,28.841],[5.729,39.979],[23.191,8.873],[10.913,2.672],[6.693,7.935],[19.92,21.212]],"o":[[-13.693,1.986],[-9.75,6.382],[-4.626,4.168],[-5.524,4.197],[-26.477,4.403],[-24.914,6.315],[-12.061,26.825],[-21.844,68.931],[13.874,8.662],[15.691,11.668],[16.627,26.821],[19.585,1.801],[19.788,-9.507],[23.914,-2.701],[38.075,-8.71],[12.239,-29.563],[8.871,-30.336],[-4.83,-33.708],[-8.78,-3.36],[-9.848,-2.412],[-18.497,-21.929],[-15.276,-16.267]],"v":[[342,68],[307.462,81.375],[281,103],[265.739,116.343],[248,125],[163,106],[109,169],[76,254],[103,465],[148,484],[182,536],[260,596],[308,586],[367,555],[450,567],[520,480],[554,388],[563,275],[521,191],[484,189],[455,169],[408,95]],"c":true}],"h":1},{"t":112,"s":[{"i":[[24.179,-1.976],[10.421,-6.101],[8.145,-7.437],[5.94,-4.359],[8.096,-0.867],[12.78,6.297],[17.031,-4.597],[10.247,-23.782],[10.741,-36.45],[-47.414,-30.447],[-13.444,-9.192],[-9.882,-16.424],[-37.612,-4.753],[-12.233,5.621],[-26.052,3.761],[-21.452,-2.782],[-18.763,48.793],[-7.001,28.564],[46.231,18.733],[11.83,2.906],[7.666,9.425],[20.05,21.123]],"o":[[-14.172,1.159],[-10.421,6.101],[-5.144,4.696],[-5.94,4.359],[-14.847,1.59],[-12.78,-6.297],[-28.67,7.739],[-12.467,28.932],[-18.196,61.749],[14.694,9.436],[15.552,10.633],[17.359,28.849],[18.862,2.384],[21.028,-9.663],[18.993,-2.742],[58.797,7.626],[10.697,-27.817],[14.643,-59.74],[-7.049,-2.856],[-10.394,-2.553],[-17.869,-21.97],[-14.419,-15.191]],"v":[[348,68],[311.48,79.791],[284,101],[267.715,115.372],[247,124],[207.138,112.244],[164,105],[108,175],[73,267],[101,466],[148,484],[183,535],[258,596],[307,588],[367,555],[427,567],[528,462],[557,375],[521,194],[485,190],[455,168],[408,94]],"c":true}],"h":1},{"t":113,"s":[{"i":[[41.751,-2.909],[9.706,-5.907],[8.478,-7.347],[6.719,-4.7],[7.759,-0.552],[11.771,4.984],[16.823,-4.29],[6.881,-9.485],[6.626,-15.087],[10.06,-33.25],[-45.104,-32.32],[-11.233,-6.778],[-10.619,-17.105],[-18.355,-10.204],[-23.906,11.311],[-23.663,1.982],[-17.263,-2.975],[-17.784,44.89],[12.316,77.558],[27.638,10.114],[11.437,3.251],[13.906,22.464]],"o":[[-14.697,1.024],[-9.706,5.907],[-5.366,4.65],[-6.719,4.7],[-12.768,0.908],[-13.133,-5.561],[-14.139,3.606],[-9.651,13.302],[-10.421,23.729],[-19.411,64.153],[12.665,9.076],[18.766,11.324],[11.532,18.576],[25.55,14.203],[19.595,-9.272],[18.505,-1.55],[59.447,10.246],[22.651,-57.175],[-4.487,-28.26],[-10.164,-3.719],[-25.96,-7.379],[-18.103,-29.243]],"v":[[350,68],[314.336,79.258],[288,100],[269.794,115.074],[248,124],[210,111],[165,104],[131,133],[109,174],[73,265],[100,465],[148,484],[185,539],[231,586],[310,587],[371,554],[423,566],[525,472],[562,274],[520,195],[486,192],[433,129]],"c":true}],"h":1},{"t":114,"s":[{"i":[[42.6,-6.837],[4.959,-1.867],[4.189,-2.575],[9.88,-8.893],[12.534,-1.315],[13.368,6.549],[17.297,-4.704],[9.655,-13.502],[5.29,-12.159],[10.604,-34.592],[-47.736,-30.826],[-14.261,-10.121],[-9.785,-15.851],[-15.029,-11.114],[-28.108,14.11],[-25.062,2.378],[-23.451,-1.539],[-16.277,41.221],[10.375,80.92],[26.075,11.834],[10.758,3.357],[16.018,25.226]],"o":[[-5.976,0.959],[-4.959,1.867],[-9.948,6.115],[-9.88,8.893],[-14.231,1.493],[-13.368,-6.549],[-14.092,3.833],[-9.655,13.502],[-11.854,27.25],[-19.673,64.175],[15.015,9.696],[14.657,10.402],[10.063,16.302],[24.85,18.377],[19.928,-10.004],[21.013,-1.994],[47.932,3.145],[23.383,-59.216],[-3.757,-29.307],[-8.525,-3.869],[-29.44,-9.186],[-17.517,-27.587]],"v":[[344,69],[327.659,73.288],[314,80],[284.939,105.1],[252,123],[211.8,110.591],[167,103],[131.398,131.755],[109,173],[73,266],[102,469],[152,487],[185,536],[223,581],[312,587],[374,553],[435,566],[522,480],[563,281],[524,198],[487,193],[430,121]],"c":true}],"h":1},{"t":115,"s":[{"i":[[47.469,-6.025],[9.24,-5.439],[7.525,-6.653],[5.832,-4.417],[7.481,-0.741],[6.648,2.619],[5.144,2.341],[6.939,1.93],[8.529,-1.322],[11.257,-25.715],[-9.45,-78.628],[-22.93,-15.503],[-14.53,-8.03],[-8.602,-14.859],[-63.92,24.703],[-26.869,2.891],[-35.06,16.742],[-14.516,38.645],[11.554,71.344],[25.891,10.669],[12.384,3.975],[13.29,23.024]],"o":[[-12.517,1.589],[-9.239,5.44],[-5.191,4.59],[-5.832,4.417],[-8.265,0.819],[-6.648,-2.619],[-5.716,-2.602],[-6.939,-1.93],[-30.558,4.734],[-24.292,55.489],[4.392,36.547],[14.823,10.022],[13.459,7.438],[24.038,41.523],[25.639,-9.909],[23.605,-2.54],[30.681,-14.651],[20.563,-54.742],[-4.766,-29.429],[-8.069,-3.325],[-23.828,-7.648],[-17.709,-30.679]],"v":[[348,69],[315.756,80.202],[291,99],[274.717,113.386],[255,122],[232.659,118.37],[215,110],[196.11,102.558],[173,101],[109,174],[62,380],[101,470],[150,486],[177,522],[306,591],[375,553],[468,559],[527,469],[562,276],[522,199],[488,194],[437,132]],"c":true}],"h":1},{"t":116,"s":[{"i":[[44.564,-5.684],[9.528,-5.809],[8.454,-7.179],[5.973,-4.05],[7.337,-0.746],[7.206,3.238],[6.644,2.711],[13.688,-4.501],[11.09,-23.875],[2.055,-70.358],[-33.003,-15.857],[-12.853,-7.408],[-9.918,-15.124],[-61.238,25.229],[-30.09,7.829],[-36.007,15.466],[-11.427,27.691],[-8.401,29.227],[4.823,41.13],[24.829,11.73],[13.98,5.484],[11.226,20.223]],"o":[[-12.432,1.585],[-9.528,5.809],[-4.774,4.053],[-5.972,4.05],[-6.531,0.665],[-7.206,-3.238],[-14.383,-5.868],[-26.474,8.705],[-23.314,50.191],[-1.56,53.403],[13.444,6.459],[18.046,10.401],[22.581,34.434],[24.534,-10.108],[25.317,-6.587],[25.708,-11.042],[12.018,-29.123],[9.092,-31.631],[-3.815,-32.539],[-11.042,-5.217],[-22.769,-8.932],[-17.362,-31.277]],"v":[[350,69],[317.517,80.805],[291,101],[274.922,113.98],[255,122],[234.085,117.032],[213,107],[167,102],[114,166],[60,346],[107,475],[152,487],[188,538],[309,590],[372,553],[467,559],[520,489],[552,397],[564,287],[525,202],[487,195],[440,133]],"c":true}],"h":1},{"t":117,"s":[{"i":[[44.136,-3.263],[9.159,-5.481],[8.343,-7.037],[6.788,-4.559],[6.469,-0.224],[12.675,6.474],[16.613,-2.421],[10.829,-15.335],[5.914,-13.216],[10.116,-34.502],[-6.135,-42.681],[-25.017,-14.09],[-15.573,-8.383],[-6.833,-10.945],[-64.251,26.172],[-25.105,5.445],[-27.034,0.881],[-13.67,35.254],[-7.56,30.265],[48.125,24.683],[11.937,4.873],[12.889,22.918]],"o":[[-14.022,1.036],[-9.159,5.482],[-5.38,4.538],[-6.788,4.559],[-13.686,0.473],[-12.675,-6.473],[-16.77,2.444],[-10.829,15.335],[-12.67,28.313],[-10.116,34.502],[5.137,35.74],[16.104,9.07],[12.195,6.565],[26.078,41.771],[24.687,-10.056],[16.152,-3.503],[47.386,-1.544],[11.044,-28.483],[14.997,-60.038],[-9.127,-4.681],[-21.592,-8.814],[-18.74,-33.322]],"v":[[355,69],[321.241,79.499],[296,99],[277.316,113.736],[257,122],[218.695,109.039],[176,99],[134.858,129.421],[110,176],[72.397,269.724],[63,385],[104,475],[153,487],[181,524],[310,591],[376,552],[445,563],[526,477],[555,389],[525,205],[489,196],[442,136]],"c":true}],"h":1},{"t":118,"s":[{"i":[[29.413,-4.536],[9.095,-5.785],[8.529,-6.993],[5.898,-3.61],[7.278,-0.35],[6.112,2.448],[5.06,2.472],[16.985,-0.838],[14.999,-33.833],[-13.348,-87.253],[-27.106,-12.13],[-15.678,-7.823],[-8.286,-13.29],[-65.426,23.473],[-10.718,7.617],[-17.085,2.505],[-22.414,-1.304],[-14.914,37.832],[-7.723,29.249],[45.397,31.646],[16.411,7.553],[27.059,30.853]],"o":[[-12.091,1.864],[-9.095,5.785],[-5.132,4.208],[-5.898,3.61],[-5.493,0.264],[-6.112,-2.448],[-11.721,-5.725],[-35.41,1.748],[-24.939,56.255],[5.389,35.223],[17.503,7.832],[12.462,6.218],[25.039,40.162],[12.941,-4.643],[10.688,-7.596],[21.461,-3.147],[47.114,2.74],[11.047,-28.021],[15.486,-58.649],[-13.245,-9.233],[-32.722,-15.06],[-15.455,-17.622]],"v":[[350,70],[318.828,82.153],[293,102],[276.609,114.393],[257,121],[239.175,117.052],[222,109],[181,98],[110,178],[63,391],[109,478],[153,488],[182,525],[308,592],[343,571],[379,551],[440,562],[524,483],[553,396],[530,210],[489,197],[419,99]],"c":true}],"h":1},{"t":119,"s":[{"i":[[48.511,-4.684],[11.586,-8.792],[12.099,-7.136],[9.538,3.578],[11.888,4.328],[4.968,1.089],[4.805,0.069],[12.417,-16.121],[6.539,-14.797],[-13.075,-87.75],[-27.296,-13.295],[-13.609,-5.958],[-8.191,-12.703],[-51.71,0.432],[-18.445,13.716],[-14.401,2.297],[-36.061,16.062],[-11.18,26.661],[-8.096,28.828],[45.559,28.203],[13.931,6.632],[11.685,22.291]],"o":[[-17.555,1.695],[-11.586,8.792],[-12.958,7.642],[-9.538,-3.579],[-4.324,-1.575],[-4.968,-1.089],[-19.794,-0.282],[-12.417,16.121],[-26.181,59.242],[5.544,37.207],[11.969,5.83],[12.338,5.401],[21.568,33.446],[31.34,-0.262],[10.214,-7.595],[31.085,-4.958],[24.244,-10.799],[11.659,-27.802],[16.181,-57.619],[-10.953,-6.78],[-18.567,-8.839],[-17.886,-34.12]],"v":[[355,70],[312.908,87.919],[279,114],[246.697,117.478],[216,103],[201.86,98.87],[187,97],[139.058,125.19],[111,176],[63,390],[108,479],[154,488],[183,525],[279,598],[345,570],[381,550],[471,556],[522,488],[553,400],[529,210],[490,198],[447,141]],"c":true}],"h":1},{"t":120,"s":[{"i":[[15.302,-1.941],[9.018,-5.326],[8.871,-7.041],[14.735,-0.773],[24.739,3.223],[13.046,-19.187],[6.416,-14.657],[-13.24,-91.835],[-25.843,-13.091],[-16.835,-8.943],[-7.77,-12.254],[-8.72,-9.81],[-37.025,4.111],[-16.934,12.336],[-13.846,2.173],[-35.578,15.355],[-10.553,25.164],[-8.22,29.851],[4.129,37.186],[24.12,13.08],[13.422,6.809],[37.51,28.352]],"o":[[-13.057,1.656],[-9.018,5.326],[-10.449,8.294],[-19.8,1.039],[-30.558,-3.981],[-8.418,12.381],[-26.415,60.339],[5.043,34.98],[14.67,7.431],[11.983,6.365],[8.417,13.275],[16.357,18.401],[26.257,-2.915],[10.748,-7.83],[27.696,-4.346],[23.458,-10.124],[12.119,-28.899],[8.116,-29.474],[-3.54,-31.885],[-10.565,-5.729],[-35.893,-18.209],[-12.152,-9.185]],"v":[[357,70],[324.861,80.961],[299,100],[262,120],[196,97],[136,132],[112,175],[63,390],[107,481],[157,491],[185,527],[212,565],[289,598],[347,569],[384,549],[473,555],[523,487],[553,398],[564,292],[527,210],[491,199],[406,84]],"c":true}],"h":1}],"ix":1},"o":{"a":0,"k":100,"ix":3},"x":{"a":0,"k":0,"ix":4},"nm":"Mask 1"}],"sw":650,"sh":650,"sc":"#9ee6ef","ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","hd":true,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[367,365,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[106.434,106.434,100],"ix":6}},"ao":0,"ef":[{"ty":5,"nm":"Wave Warp","np":10,"mn":"ADBE Wave Warp","ix":1,"en":1,"ef":[{"ty":7,"nm":"Wave Type","mn":"ADBE Wave Warp-0001","ix":1,"v":{"a":0,"k":1,"ix":1}},{"ty":0,"nm":"Wave Height","mn":"ADBE Wave Warp-0002","ix":2,"v":{"a":0,"k":45,"ix":2}},{"ty":0,"nm":"Wave Width","mn":"ADBE Wave Warp-0003","ix":3,"v":{"a":0,"k":107.4,"ix":3}},{"ty":0,"nm":"Direction","mn":"ADBE Wave Warp-0004","ix":4,"v":{"a":0,"k":90,"ix":4}},{"ty":7,"nm":"Wave Speed","mn":"ADBE Wave Warp-0005","ix":5,"v":{"a":0,"k":0.5,"ix":5}},{"ty":7,"nm":"Pinning","mn":"ADBE Wave Warp-0006","ix":6,"v":{"a":0,"k":2,"ix":6}},{"ty":0,"nm":"Phase","mn":"ADBE Wave Warp-0007","ix":7,"v":{"a":0,"k":0,"ix":7}},{"ty":7,"nm":"Antialiasing (Best Quality)","mn":"ADBE Wave Warp-0008","ix":8,"v":{"a":0,"k":1,"ix":8}}]}],"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[364,364],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":17,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":true},{"ty":"fl","c":{"a":0,"k":[0.620121495864,0.900788430607,0.935686298445,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-51,-29],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[130.496,130.496],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":480,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":1,"nm":"White Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[325,325,0],"ix":2},"a":{"a":0,"k":[325,325,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":650,"sh":650,"sc":"#ffffff","ip":0,"op":480,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/public.bzl b/public.bzl index 0db04873a4170..84a8f8b10dac2 100644 --- a/public.bzl +++ b/public.bzl @@ -439,6 +439,14 @@ PORTS_SRCS_FUCHSIA = struct( ], ) +GL_SRCS_MACOS = struct( + include = [ + "src/gpu/gl/mac/GrGLMakeNativeInterface_mac.cpp", + ], + exclude = [], +) +PORTS_SRCS_MACOS = PORTS_SRCS_IOS + def base_srcs(): return skia_glob(BASE_SRCS_ALL) @@ -451,6 +459,7 @@ def ports_srcs(os_conditions): skia_glob(PORTS_SRCS_IOS), skia_glob(PORTS_SRCS_WASM), skia_glob(PORTS_SRCS_FUCHSIA), + skia_glob(PORTS_SRCS_MACOS), ], ) @@ -463,6 +472,7 @@ def gl_srcs(os_conditions): skia_glob(GL_SRCS_IOS), skia_glob(GL_SRCS_WASM), skia_glob(GL_SRCS_FUCHSIA), + skia_glob(GL_SRCS_MACOS), ], ) @@ -628,6 +638,7 @@ def dm_srcs(os_conditions): [], # iOS [], # WASM [], # Fuchsia + [], # macOS ], ) @@ -668,6 +679,7 @@ def base_copts(os_conditions): [], # iOS [], # wasm [], # Fuchsia + [], # macOS ], ) @@ -743,6 +755,11 @@ def base_defines(os_conditions): "SK_ENCODE_WEBP", "SK_R32_SHIFT=16", ], + # MACOS + [ + "SK_BUILD_FOR_MAC", + "SK_BUILD_NO_OPTS", + ], ], ) @@ -772,6 +789,14 @@ def base_linkopts(os_conditions): ], [], # wasm [], # Fuchsia + # MACOS + [ + "-framework CoreFoundation", + "-framework CoreGraphics", + "-framework CoreText", + "-framework ImageIO", + "-framework ApplicationServices", + ], ], ) @@ -847,6 +872,18 @@ def skottie_lib_srcs(): ], ) +################################################################################ +## skottie_utils +################################################################################ + +SKOTTIE_UTILS_HDRS = [ + "modules/skottie/utils/SkottieUtils.h", +] + +SKOTTIE_UTILS_SRCS = [ + "modules/skottie/utils/SkottieUtils.cpp", +] + ################################################################################ ## skottie_shaper ################################################################################ diff --git a/resources/skottie/skottie-offsetpaths-effect.json b/resources/skottie/skottie-offsetpaths-effect.json new file mode 100644 index 0000000000000..900062f68fb73 --- /dev/null +++ b/resources/skottie/skottie-offsetpaths-effect.json @@ -0,0 +1 @@ +{"v":"5.7.0","fr":60,"ip":0,"op":301,"w":500,"h":500,"nm":"offset paths","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"bevel","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[338,250,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[86,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.279090076685,0.751332700253,1,1],"ix":4},"o":{"a":0,"k":50,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":37,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":100,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"op","nm":"Offset Paths 1","a":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":210,"s":[-30]},{"t":300,"s":[0]}],"ix":1},"lj":3,"ml":{"a":0,"k":4,"ix":3},"ix":3,"mn":"ADBE Vector Filter - Offset","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.037944238633,0.091421566904,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"round","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[116,367,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[86,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.279090076685,0.751332700253,1,1],"ix":4},"o":{"a":0,"k":50,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":37,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":100,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"op","nm":"Offset Paths 1","a":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":210,"s":[-30]},{"t":300,"s":[0]}],"ix":1},"lj":2,"ml":{"a":0,"k":4,"ix":3},"ix":3,"mn":"ADBE Vector Filter - Offset","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.037944238633,0.091421566904,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"miter","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[116,129,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[100,100],"ix":2},"p":{"a":0,"k":[86,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.279090076685,0.751332700253,1,1],"ix":4},"o":{"a":0,"k":50,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"sr","sy":1,"d":1,"pt":{"a":0,"k":5,"ix":3},"p":{"a":0,"k":[0,0],"ix":4},"r":{"a":0,"k":0,"ix":5},"ir":{"a":0,"k":37,"ix":6},"is":{"a":0,"k":0,"ix":8},"or":{"a":0,"k":100,"ix":7},"os":{"a":0,"k":0,"ix":9},"ix":1,"nm":"Polystar Path 1","mn":"ADBE Vector Shape - Star","hd":false},{"ty":"fl","c":{"a":0,"k":[0,1,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"op","nm":"Offset Paths 1","a":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":90,"s":[50]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":210,"s":[-30]},{"t":300,"s":[0]}],"ix":1},"lj":1,"ml":{"a":0,"k":4,"ix":3},"ix":3,"mn":"ADBE Vector Filter - Offset","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.037944238633,0.091421566904,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false}],"ip":0,"op":301,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":1,"nm":"Light Gray Solid 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[250,250,0],"ix":2},"a":{"a":0,"k":[250,250,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"sw":500,"sh":500,"sc":"#c8c8c8","ip":0,"op":301,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/resources/skottie/skottie-text-animator-linespacing.json b/resources/skottie/skottie-text-animator-linespacing.json new file mode 100644 index 0000000000000..ec368675e85ed --- /dev/null +++ b/resources/skottie/skottie-text-animator-linespacing.json @@ -0,0 +1 @@ +{"assets":[],"chars":[{"ch":"T","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[35.4,0],[35.4,-63.135],[59.082,-63.135],[59.082,-71.582],[2.344,-71.582],[2.344,-63.135],[25.928,-63.135],[25.928,0]]}},"mn":"ADBE Vector Shape - Group","nm":"T","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"T","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":61.08},{"ch":"h","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[-0.977,2.312],[-2.295,1.351],[-2.605,0],[-1.904,-2.002],[0,-4.395],[0,0],[0,0],[0,0],[1.221,2.67],[2.832,1.514],[3.841,0],[4.102,-4.752],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-4.069],[0.977,-2.311],[2.295,-1.35],[3.483,0],[1.904,2.002],[0,0],[0,0],[0,0],[0,-5.078],[-1.221,-2.669],[-2.832,-1.514],[-6.25,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.381,0],[15.381,-28.369],[16.846,-37.939],[21.753,-43.433],[29.102,-45.459],[37.183,-42.456],[40.039,-32.861],[40.039,0],[48.828,0],[48.828,-32.861],[46.997,-44.482],[40.918,-50.757],[30.908,-53.027],[15.381,-45.898],[15.381,-71.582],[6.592,-71.582],[6.592,0]]}},"mn":"ADBE Vector Shape - Group","nm":"h","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"h","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"e","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[2.278,-1.692],[3.223,0],[2.897,3.027],[0.325,5.697],[0,0],[0,0.521],[4.395,4.72],[6.934,0],[4.492,-4.817],[0,-8.723],[-4.443,-4.671],[-7.585,0],[-3.874,2.93],[-1.433,5.306],[0,0]],"o":[[-2.279,1.693],[-4.33,0],[-2.898,-3.027],[0,0],[0.032,-1.041],[0,-8.561],[-4.395,-4.72],[-7.162,0],[-4.492,4.818],[0,8.431],[4.443,4.671],[6.022,0],[3.873,-2.93],[0,0],[-1.335,3.711]],"v":[[36.67,-8.594],[28.418,-6.055],[17.578,-10.596],[12.744,-23.682],[51.416,-23.682],[51.465,-26.025],[44.873,-45.947],[27.881,-53.027],[10.4,-45.801],[3.662,-25.488],[10.327,-5.835],[28.369,1.172],[43.213,-3.223],[51.172,-15.576],[42.09,-16.699]]}},"mn":"ADBE Vector Shape - Group","nm":"e","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-2.751,2.702],[-4.037,0],[-2.8,-3.385],[-0.391,-4.362],[0,0]],"o":[[2.75,-2.702],[4.459,0],[1.823,2.181],[0,0],[0.293,-4.524]],"v":[[17.798,-41.748],[27.979,-45.801],[38.867,-40.723],[42.188,-30.908],[13.232,-30.908]]}},"mn":"ADBE Vector Shape - Group","nm":"e","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"e","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":" ","data":{},"fFamily":"Arial","size":28,"style":"Regular","w":27.78},{"ch":"q","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[6.413,0],[3.434,-2.132],[1.807,-4.134],[0,-5.208],[-4.443,-4.915],[-6.152,0],[-2.458,1.27],[-1.367,1.921],[0,0]],"o":[[0,0],[0,0],[0,0],[-3.679,-5.403],[-4.102,0],[-3.435,2.132],[-1.807,4.134],[0,8.562],[4.443,4.916],[2.766,0],[2.457,-1.27],[0,0],[0,0]],"v":[[48.438,19.873],[48.438,-51.855],[40.527,-51.855],[40.527,-44.922],[25.391,-53.027],[14.087,-49.829],[6.226,-40.43],[3.516,-26.416],[10.181,-6.201],[26.074,1.172],[33.911,-0.732],[39.648,-5.518],[39.648,19.873]]}},"mn":"ADBE Vector Shape - Group","nm":"q","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-2.654,3.239],[-3.809,0],[-2.849,-3.483],[0,-6.901],[2.702,-3.174],[3.743,0],[2.799,3.337],[0,6.673]],"o":[[2.653,-3.239],[3.841,0],[2.848,3.484],[0,6.478],[-2.702,3.174],[-3.906,0],[-2.8,-3.336],[0,-6.868]],"v":[[16.528,-41.235],[26.221,-46.094],[36.255,-40.869],[40.527,-25.293],[36.475,-10.815],[26.807,-6.055],[16.748,-11.06],[12.549,-26.074]]}},"mn":"ADBE Vector Shape - Group","nm":"q","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"q","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"u","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0.96,-2.327],[2.311,-1.35],[2.637,0],[1.79,1.318],[0.553,2.312],[0,4.59],[0,0],[0,0],[0,0],[-0.359,-1.725],[-1.286,-1.774],[-2.654,-1.172],[-3.06,0],[-4.037,5.859],[0,0]],"o":[[0,0],[0,0],[0,0],[0,4.427],[-0.961,2.328],[-2.312,1.351],[-2.637,0],[-1.791,-1.318],[-0.359,-1.595],[0,0],[0,0],[0,0],[0,3.744],[0.52,2.572],[1.286,1.775],[2.653,1.172],[6.934,0],[0,0],[0,0]],"v":[[48.438,0],[48.438,-51.855],[39.648,-51.855],[39.648,-24.072],[38.208,-13.94],[33.301,-8.423],[25.879,-6.396],[19.238,-8.374],[15.723,-13.818],[15.186,-23.096],[15.186,-51.855],[6.396,-51.855],[6.396,-19.727],[6.934,-11.523],[9.644,-5.005],[15.552,-0.586],[24.121,1.172],[40.576,-7.617],[40.576,0]]}},"mn":"ADBE Vector Shape - Group","nm":"u","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"u","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"i","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.43,-61.475],[15.43,-71.582],[6.641,-71.582],[6.641,-61.475]]}},"mn":"ADBE Vector Shape - Group","nm":"i","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.43,0],[15.43,-51.855],[6.641,-51.855],[6.641,0]]}},"mn":"ADBE Vector Shape - Group","nm":"i","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"i","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":22.22},{"ch":"c","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[2.311,-2.116],[3.45,0],[2.669,3.158],[0,6.966],[-2.767,3.174],[-4.427,0],[-2.068,-1.758],[-0.814,-3.483],[0,0],[3.58,2.849],[5.631,0],[3.792,-2.1],[1.855,-4.199],[0,-5.598],[-4.314,-4.639],[-7.097,0],[-3.89,3.369],[-0.945,5.957],[0,0]],"o":[[-2.312,2.116],[-4.297,0],[-2.67,-3.157],[0,-6.868],[2.766,-3.174],[2.93,0],[2.067,1.758],[0,0],[-1.009,-5.241],[-3.581,-2.848],[-4.46,0],[-3.793,2.1],[-1.855,4.199],[0,8.659],[4.313,4.639],[5.664,0],[3.889,-3.369],[0,0],[-0.619,4.395]],"v":[[36.035,-9.229],[27.393,-6.055],[16.943,-10.791],[12.939,-25.977],[17.09,-41.04],[27.881,-45.801],[35.376,-43.164],[39.697,-35.303],[48.242,-36.621],[41.357,-48.755],[27.539,-53.027],[15.161,-49.878],[6.689,-40.43],[3.906,-25.732],[10.376,-5.786],[27.49,1.172],[41.821,-3.882],[49.072,-17.871],[40.43,-18.994]]}},"mn":"ADBE Vector Shape - Group","nm":"c","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"c","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":50},{"ch":"k","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.43,0],[15.43,-20.557],[21.631,-26.514],[38.77,0],[49.609,0],[27.783,-32.617],[47.607,-51.855],[36.23,-51.855],[15.43,-30.762],[15.43,-71.582],[6.641,-71.582],[6.641,0]]}},"mn":"ADBE Vector Shape - Group","nm":"k","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"k","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":50},{"ch":"b","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[-6.12,0],[-4.395,4.851],[0,8.887],[1.041,3.288],[1.839,2.328],[2.848,1.286],[3.19,0],[3.711,-4.655],[0,0],[0,0],[0,0],[0,0]],"o":[[3.483,5.111],[6.152,0],[4.395,-4.85],[0,-3.743],[-1.042,-3.288],[-1.839,-2.327],[-2.849,-1.286],[-5.762,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[14.697,-6.494],[29.102,1.172],[44.922,-6.104],[51.514,-26.709],[49.951,-37.256],[45.63,-45.679],[38.599,-51.099],[29.541,-53.027],[15.332,-46.045],[15.332,-71.582],[6.543,-71.582],[6.543,0],[14.697,0]]}},"mn":"ADBE Vector Shape - Group","nm":"b","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-2.8,3.337],[-3.841,0],[-2.686,-3.223],[0,-6.77],[2.799,-3.336],[3.841,0],[2.766,4.525],[0,6.218]],"o":[[2.799,-3.336],[3.809,0],[2.686,3.223],[0,6.609],[-2.8,3.337],[-4.72,0],[-1.693,-2.766],[0,-6.315]],"v":[[18.799,-40.796],[28.76,-45.801],[38.501,-40.967],[42.529,-25.977],[38.33,-11.06],[28.369,-6.055],[17.139,-12.842],[14.6,-26.318]]}},"mn":"ADBE Vector Shape - Group","nm":"b","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"b","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"r","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[-0.977,3.125],[-1.53,1.156],[-1.921,0],[-2.148,-1.27],[0,0],[2.962,0],[1.709,-1.172],[2.018,-3.678],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-3.711],[0.651,-2.051],[1.53,-1.155],[2.148,0],[0,0],[-3.06,-1.888],[-2.051,0],[-1.709,1.172],[0,0],[0,0],[0,0],[0,0]],"v":[[15.283,0],[15.283,-27.148],[16.748,-37.402],[20.02,-42.212],[25.195,-43.945],[31.641,-42.041],[34.668,-50.195],[25.635,-53.027],[19.995,-51.27],[14.404,-43.994],[14.404,-51.855],[6.494,-51.855],[6.494,0]]}},"mn":"ADBE Vector Shape - Group","nm":"r","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"r","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":33.3},{"ch":"o","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-4.476,-4.655],[-7.259,0],[-3.825,2.116],[-2.002,3.825],[0,6.673],[4.524,4.671],[7.129,0],[4.459,-3.841],[0,-9.602]],"o":[[4.475,4.655],[4.524,0],[3.825,-2.116],[2.002,-3.825],[0,-8.235],[-4.525,-4.671],[-6.413,0],[-5.339,4.623],[0,8.757]],"v":[[10.034,-5.811],[27.637,1.172],[40.161,-2.002],[48.901,-10.913],[51.904,-26.66],[45.117,-46.021],[27.637,-53.027],[11.328,-47.266],[3.32,-25.928]]}},"mn":"ADBE Vector Shape - Group","nm":"o","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-2.898,3.288],[-4.395,0],[-2.914,-3.304],[0,-6.413],[2.897,-3.32],[4.362,0],[2.897,3.304],[0,6.641]],"o":[[2.897,-3.288],[4.329,0],[2.913,3.304],[0,6.804],[-2.898,3.32],[-4.395,0],[-2.898,-3.304],[0,-6.641]],"v":[[16.699,-40.82],[27.637,-45.752],[38.501,-40.796],[42.871,-26.221],[38.525,-11.035],[27.637,-6.055],[16.699,-11.011],[12.354,-25.928]]}},"mn":"ADBE Vector Shape - Group","nm":"o","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"o","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"w","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.13,-0.553],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.66,6.576],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[25.342,0],[35.84,-39.893],[37.842,-31.055],[46.094,0],[55.225,0],[71.436,-51.855],[62.891,-51.855],[54.004,-21.875],[51.025,-11.865],[48.438,-21.777],[40.674,-51.855],[31.641,-51.855],[23.389,-21.484],[20.703,-10.791],[17.627,-21.924],[9.375,-51.855],[0.293,-51.855],[16.162,0]]}},"mn":"ADBE Vector Shape - Group","nm":"w","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"w","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":72.22},{"ch":"n","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[-2.718,2.377],[-3.744,0],[-1.742,-1.057],[-0.684,-1.774],[0,-3.58],[0,0],[0,0],[0,0],[0.325,1.628],[1.302,1.823],[2.62,1.123],[3.125,0],[3.809,-5.696],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-6.641],[2.718,-2.376],[2.344,0],[1.741,1.058],[0.684,1.775],[0,0],[0,0],[0,0],[0,-4.069],[-0.521,-2.506],[-1.302,-1.823],[-2.621,-1.123],[-7.195,0],[0,0],[0,0],[0,0],[0,0]],"v":[[15.381,0],[15.381,-28.32],[19.458,-41.846],[29.15,-45.41],[35.278,-43.823],[38.916,-39.575],[39.941,-31.543],[39.941,0],[48.73,0],[48.73,-31.885],[48.242,-40.43],[45.508,-46.924],[39.624,-51.343],[31.006,-53.027],[14.502,-44.482],[14.502,-51.855],[6.592,-51.855],[6.592,0]]}},"mn":"ADBE Vector Shape - Group","nm":"n","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"n","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"f","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.107,1.14],[-2.67,0],[-1.823,-0.325],[0,0],[2.473,0],[2.132,-1.416],[0.846,-2.278],[0,-3.483],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,-3.125],[1.106,-1.139],[1.627,0],[0,0],[-2.995,-0.586],[-3.841,0],[-2.132,1.416],[-0.619,1.693],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[17.432,0],[17.432,-45.02],[27.539,-45.02],[27.539,-51.855],[17.432,-51.855],[17.432,-56.641],[19.092,-63.037],[24.756,-64.746],[29.932,-64.258],[31.25,-71.924],[23.047,-72.803],[14.087,-70.679],[9.619,-65.137],[8.691,-57.373],[8.691,-51.855],[0.928,-51.855],[0.928,-45.02],[8.691,-45.02],[8.691,0]]}},"mn":"ADBE Vector Shape - Group","nm":"f","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"f","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":25.98},{"ch":"x","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[1.432,-2.148],[1.497,2.312],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.205,1.66],[-0.912,-1.562],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[11.377,0],[25,-20.459],[27.832,-16.113],[38.477,0],[49.268,0],[29.98,-27.441],[47.9,-51.855],[37.402,-51.855],[28.662,-39.6],[24.707,-33.887],[21.094,-39.697],[13.135,-51.855],[2.148,-51.855],[19.678,-26.953],[0.732,0]]}},"mn":"ADBE Vector Shape - Group","nm":"x","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"x","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":50},{"ch":"j","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.332,-61.377],[15.332,-71.582],[6.543,-71.582],[6.543,-61.377]]}},"mn":"ADBE Vector Shape - Group","nm":"j","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-2.376,0],[-2.116,3.255],[0,6.38],[0,0],[0,0],[0,0],[0.879,-1.189],[1.79,0],[1.758,0.455],[0,0]],"o":[[4.915,0],[1.66,-2.507],[0,0],[0,0],[0,0],[0,4.752],[-0.879,1.188],[-1.009,0],[0,0],[2.214,0.618]],"v":[[2.295,21.045],[12.842,16.162],[15.332,2.832],[15.332,-51.855],[6.543,-51.855],[6.543,2.637],[5.225,11.548],[1.221,13.33],[-2.93,12.646],[-4.59,20.117]]}},"mn":"ADBE Vector Shape - Group","nm":"j","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"j","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":22.22},{"ch":"m","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[-0.945,2.507],[-2.1,1.302],[-2.474,0],[-1.433,-1.953],[0,-3.906],[0,0],[0,0],[0,0],[-2.409,2.425],[-3.646,0],[-1.498,-0.944],[-0.57,-1.546],[0,-3.516],[0,0],[0,0],[0,0],[2.766,2.849],[5.143,0],[4.102,-6.055],[2.457,1.595],[3.841,0],[2.702,-1.546],[1.627,-2.539],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-4.72],[0.944,-2.506],[2.1,-1.302],[3.255,0],[1.432,1.953],[0,0],[0,0],[0,0],[0,-5.338],[2.409,-2.425],[2.018,0],[1.497,0.945],[0.569,1.546],[0,0],[0,0],[0,0],[0,-5.924],[-2.767,-2.848],[-6.576,0],[-1.009,-2.864],[-2.458,-1.595],[-3.451,0],[-2.702,1.546],[0,0],[0,0],[0,0],[0,0]],"v":[[15.381,0],[15.381,-26.904],[16.797,-37.744],[21.362,-43.457],[28.223,-45.41],[35.254,-42.48],[37.402,-33.691],[37.402,0],[46.191,0],[46.191,-30.127],[49.805,-41.772],[58.887,-45.41],[64.16,-43.994],[67.261,-40.259],[68.115,-32.666],[68.115,0],[76.855,0],[76.855,-35.596],[72.705,-48.755],[60.84,-53.027],[44.824,-43.945],[39.624,-50.635],[30.176,-53.027],[20.947,-50.708],[14.453,-44.58],[14.453,-51.855],[6.592,-51.855],[6.592,0]]}},"mn":"ADBE Vector Shape - Group","nm":"m","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"m","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":83.3},{"ch":"p","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[-2.328,-1.237],[-2.93,0],[-3.63,2.262],[-1.904,4.248],[0,5.306],[1.725,4.15],[3.385,2.279],[4.427,0],[2.376,-1.318],[1.888,-2.637],[0,0],[0,0],[0,0]],"o":[[0,0],[1.497,1.888],[2.327,1.237],[4.004,0],[3.629,-2.262],[1.904,-4.248],[0,-4.948],[-1.726,-4.15],[-3.386,-2.278],[-3.386,0],[-2.377,1.318],[0,0],[0,0],[0,0],[0,0]],"v":[[15.381,19.873],[15.381,-5.371],[21.118,-0.684],[29.004,1.172],[40.454,-2.222],[48.755,-11.987],[51.611,-26.318],[49.023,-39.966],[41.357,-49.609],[29.639,-53.027],[20.996,-51.05],[14.6,-45.117],[14.6,-51.855],[6.592,-51.855],[6.592,19.873]]}},"mn":"ADBE Vector Shape - Group","nm":"p","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-2.881,3.5],[-3.744,0],[-2.718,-3.288],[0,-6.608],[2.783,-3.304],[3.906,0],[2.702,3.191],[0,6.673]],"o":[[2.881,-3.499],[3.776,0],[2.718,3.288],[0,6.934],[-2.783,3.304],[-3.841,0],[-2.702,-3.19],[0,-6.673]],"v":[[18.872,-40.894],[28.809,-46.143],[38.55,-41.211],[42.627,-26.367],[38.452,-11.011],[28.418,-6.055],[18.604,-10.84],[14.551,-25.635]]}},"mn":"ADBE Vector Shape - Group","nm":"p","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"p","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"s","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-3.532,-2.799],[-6.738,0],[-3.223,1.416],[-1.709,2.588],[0,2.93],[1.399,2.019],[2.457,1.058],[6.217,1.66],[0.879,0.326],[0.716,0.945],[0,1.14],[-1.726,1.335],[-4.037,0],[-1.872,-1.497],[-0.391,-2.669],[0,0],[1.465,2.002],[3.076,1.172],[4.069,0],[2.36,-0.7],[1.367,-1.009],[1.057,-1.969],[0,-2.311],[-1.286,-2.1],[-2.49,-1.188],[-6.445,-1.627],[-1.205,-0.781],[0,-1.985],[1.953,-1.643],[4.036,0],[2.229,1.855],[0.488,3.484],[0,0]],"o":[[3.532,2.8],[4.069,0],[3.223,-1.416],[1.709,-2.588],[0,-2.995],[-1.4,-2.018],[-2.458,-1.057],[-4.297,-1.172],[-1.53,-0.618],[-0.716,-0.911],[0,-1.79],[1.725,-1.334],[3.418,0],[1.871,1.498],[0,0],[-0.554,-3.352],[-1.465,-2.002],[-3.076,-1.172],[-2.702,0],[-2.361,0.7],[-1.823,1.302],[-1.058,1.97],[0,2.539],[1.286,2.1],[2.49,1.189],[4.785,1.205],[1.725,1.14],[0,2.214],[-1.953,1.644],[-4.004,0],[-2.23,-1.855],[0,0],[0.977,5.502]],"v":[[9.839,-3.027],[25.244,1.172],[36.182,-0.952],[43.579,-6.958],[46.143,-15.234],[44.043,-22.754],[38.257,-27.368],[25.244,-31.445],[17.48,-33.691],[14.111,-36.035],[13.037,-39.111],[15.625,-43.799],[24.268,-45.801],[32.202,-43.555],[35.596,-37.305],[44.189,-38.477],[41.162,-46.509],[34.351,-51.27],[23.633,-53.027],[16.04,-51.978],[10.449,-49.414],[6.128,-44.507],[4.541,-38.086],[6.47,-31.128],[12.134,-26.196],[25.537,-21.973],[34.521,-18.994],[37.109,-14.307],[34.18,-8.521],[25.195,-6.055],[15.845,-8.838],[11.768,-16.846],[3.076,-15.479]]}},"mn":"ADBE Vector Shape - Group","nm":"s","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"s","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":50},{"ch":"v","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0.781,-2.734],[1.204,3.353],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[-1.4,3.841],[-1.009,-3.613],[0,0],[0,0],[0,0],[0,0]],"v":[[29.199,0],[48.828,-51.855],[39.795,-51.855],[28.271,-20.215],[25,-10.352],[21.68,-20.801],[10.547,-51.855],[1.27,-51.855],[20.996,0]]}},"mn":"ADBE Vector Shape - Group","nm":"v","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"v","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":50},{"ch":"t","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0.977,0],[0.7,0.423],[0.309,0.716],[0,2.507],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.716,-1.643],[-1.758,-1.009],[-3.191,0],[-2.474,0.52],[0,0]],"o":[[-1.302,0],[-0.7,-0.423],[-0.31,-0.716],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,5.273],[0.716,1.644],[1.758,1.009],[1.953,0],[0,0],[-1.595,0.228]],"v":[[21.924,-7.52],[18.921,-8.154],[17.407,-9.863],[16.943,-14.697],[16.943,-45.02],[25.781,-45.02],[25.781,-51.855],[16.943,-51.855],[16.943,-69.971],[8.203,-64.697],[8.203,-51.855],[1.758,-51.855],[1.758,-45.02],[8.203,-45.02],[8.203,-15.186],[9.277,-4.81],[12.988,-0.83],[20.41,0.684],[27.051,-0.098],[25.781,-7.861]]}},"mn":"ADBE Vector Shape - Group","nm":"t","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"t","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":27.78},{"ch":"l","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[15.186,0],[15.186,-71.582],[6.396,-71.582],[6.396,0]]}},"mn":"ADBE Vector Shape - Group","nm":"l","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"l","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":22.22},{"ch":"a","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-0.912,-1.823],[0,0],[0.374,2.165],[0,8.171],[0,0],[0.293,1.498],[1.302,1.579],[2.766,1.042],[4.427,0],[3.385,-1.221],[1.79,-2.262],[0.781,-3.678],[0,0],[-1.97,1.449],[-4.134,0],[-2.246,-1.985],[0,-3.58],[0.032,-1.204],[7.096,-0.846],[1.725,-0.455],[1.871,-1.27],[1.155,-2.1],[0,-2.539],[-3.06,-2.783],[-5.697,0],[-3.011,1.139],[-3.255,2.767]],"o":[[0,0],[-1.107,-1.985],[-0.375,-2.164],[0,0],[0,-3.906],[-0.521,-2.409],[-1.302,-1.579],[-2.767,-1.041],[-4.46,0],[-3.386,1.221],[-1.791,2.263],[0,0],[0.944,-3.678],[1.969,-1.448],[4.427,0],[1.66,1.465],[0,0.326],[-3.353,1.172],[-3.484,0.423],[-2.344,0.652],[-1.872,1.27],[-1.156,2.1],[0,4.33],[3.059,2.783],[3.45,0],[3.011,-1.139],[0.26,2.441]],"v":[[42.188,0],[51.367,0],[49.146,-6.226],[48.584,-21.729],[48.584,-33.447],[48.145,-41.553],[45.41,-47.534],[39.307,-51.465],[28.516,-53.027],[16.748,-51.196],[8.984,-45.972],[5.127,-37.061],[13.721,-35.889],[18.091,-43.579],[27.246,-45.752],[37.256,-42.773],[39.746,-35.205],[39.697,-32.91],[24.023,-29.883],[16.211,-28.564],[9.888,-25.684],[5.347,-20.63],[3.613,-13.672],[8.203,-3.003],[21.338,1.172],[31.03,-0.537],[40.43,-6.396]]}},"mn":"ADBE Vector Shape - Group","nm":"a","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0.944,-1.985],[2.637,-1.481],[3.385,0],[1.774,1.562],[0,2.344],[-0.814,1.254],[-1.498,0.652],[-3.613,0.521],[-3.191,1.302]],"o":[[0,3.874],[-1.237,2.572],[-2.637,1.482],[-3.418,0],[-1.775,-1.562],[0,-1.53],[0.813,-1.253],[1.497,-0.651],[6.38,-0.911],[0,0]],"v":[[39.697,-22.803],[38.281,-14.014],[32.471,-7.935],[23.438,-5.713],[15.649,-8.057],[12.988,-13.916],[14.209,-18.091],[17.676,-20.947],[25.342,-22.705],[39.697,-26.025]]}},"mn":"ADBE Vector Shape - Group","nm":"a","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"a","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"z","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[3.938,-0.293],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-3.744,0.195],[0,0],[0,0]],"o":[[0,0],[0,0],[-3.451,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[2.864,0],[0,0],[0,0],[0,0]],"v":[[47.852,0],[47.852,-7.568],[23.877,-7.568],[12.793,-7.129],[18.213,-13.135],[46.289,-46.045],[46.289,-51.855],[3.906,-51.855],[3.906,-44.727],[25.049,-44.727],[34.961,-45.02],[1.953,-7.129],[1.953,0]]}},"mn":"ADBE Vector Shape - Group","nm":"z","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"z","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":50},{"ch":"y","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-1.693,0],[-2.019,1.35],[-1.562,2.897],[-2.116,5.696],[0,0],[0,0],[0,0],[1.009,-4.036],[1.399,3.809],[0,0],[0,0],[0,0],[0.163,-0.488],[0.553,-0.879],[1.172,-0.652],[1.953,0],[1.92,0.52],[0,0]],"o":[[2.799,0],[2.018,-1.351],[1.172,-2.148],[0,0],[0,0],[0,0],[-1.4,3.841],[-1.107,-4.199],[0,0],[0,0],[0,0],[-0.359,0.944],[-1.237,3.483],[-0.749,1.172],[-1.172,0.651],[-1.433,0],[0,0],[2.083,0.716]],"v":[[11.865,21.045],[19.092,19.019],[24.463,12.646],[29.395,0.879],[49.121,-51.855],[40.332,-51.855],[29.248,-21.631],[25.635,-9.814],[21.875,-21.826],[11.084,-51.855],[1.611,-51.855],[21.289,0.098],[20.508,2.246],[17.822,8.789],[14.941,11.523],[10.254,12.5],[5.225,11.719],[6.201,19.971]]}},"mn":"ADBE Vector Shape - Group","nm":"y","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"y","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":50},{"ch":"d","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[2.441,1.318],[3.125,0],[3.45,-2.246],[1.725,-4.215],[0,-5.176],[-1.904,-4.085],[-3.467,-2.278],[-4.134,0],[-3.288,5.144],[0,0]],"o":[[0,0],[0,0],[0,0],[-1.53,-2.116],[-2.441,-1.318],[-4.265,0],[-3.451,2.246],[-1.726,4.216],[0,5.306],[1.904,4.086],[3.467,2.278],[6.38,0],[0,0],[0,0]],"v":[[48.389,0],[48.389,-71.582],[39.648,-71.582],[39.648,-45.898],[33.691,-51.05],[25.342,-53.027],[13.77,-49.658],[6.006,-39.966],[3.418,-25.879],[6.274,-11.792],[14.331,-2.246],[25.732,1.172],[40.234,-6.543],[40.234,0]]}},"mn":"ADBE Vector Shape - Group","nm":"d","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-2.621,3.191],[-3.906,0],[-2.734,-3.32],[0,-7.096],[2.686,-3.141],[3.841,0],[2.799,3.288],[0,6.641]],"o":[[2.62,-3.19],[4.004,0],[2.734,3.32],[0,6.445],[-2.686,3.142],[-3.809,0],[-2.8,-3.288],[0,-6.868]],"v":[[16.382,-40.967],[26.172,-45.752],[36.279,-40.771],[40.381,-25.146],[36.353,-10.767],[26.562,-6.055],[16.65,-10.986],[12.451,-25.879]]}},"mn":"ADBE Vector Shape - Group","nm":"d","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"d","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":"g","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-3.809,-2.783],[-6.185,0],[-3.564,1.953],[-1.644,3.369],[0,8.073],[0,0],[0,0],[0,0],[6.12,0],[3.401,-2.278],[1.79,-4.182],[0,-4.948],[-3.906,-5.143],[-7.129,0],[-3.841,4.525],[0.455,-1.791],[2.213,-1.628],[4.069,0],[2.18,1.627],[0.358,2.637],[0,0]],"o":[[3.809,2.783],[5.208,0],[3.564,-1.953],[1.643,-3.369],[0,0],[0,0],[0,0],[-3.972,-4.948],[-4.59,0],[-3.402,2.279],[-1.791,4.183],[0,7.195],[3.906,5.144],[5.729,0],[0.032,5.73],[-0.781,2.93],[-2.214,1.627],[-3.777,0],[-1.628,-1.205],[0,0],[-0.13,5.598]],"v":[[10.498,16.87],[25.488,21.045],[38.647,18.115],[46.46,10.132],[48.926,-7.031],[48.926,-51.855],[40.82,-51.855],[40.82,-45.605],[25.684,-53.027],[13.696,-49.609],[5.908,-39.917],[3.223,-26.221],[9.082,-7.715],[25.635,0],[39.99,-6.787],[39.355,4.492],[34.863,11.328],[25.439,13.77],[16.504,11.328],[13.525,5.566],[4.98,4.297]]}},"mn":"ADBE Vector Shape - Group","nm":"g","ty":"sh"},{"hd":false,"ind":1,"ix":2,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[-2.734,3.174],[-3.906,0],[-2.816,-3.223],[0,-6.348],[2.734,-3.108],[4.036,0],[2.702,3.125],[0,6.804]],"o":[[2.734,-3.174],[3.971,0],[2.815,3.223],[0,6.641],[-2.734,3.109],[-4.07,0],[-2.702,-3.125],[0,-6.25]],"v":[[16.357,-40.991],[26.318,-45.752],[36.499,-40.918],[40.723,-26.562],[36.621,-11.938],[26.465,-7.275],[16.309,-11.963],[12.256,-26.855]]}},"mn":"ADBE Vector Shape - Group","nm":"g","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":"g","np":5,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":55.62},{"ch":".","data":{"shapes":[{"bm":0,"cix":2,"hd":false,"it":[{"hd":false,"ind":0,"ix":1,"ks":{"a":0,"ix":2,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[19.092,0],[19.092,-10.01],[9.082,-10.01],[9.082,0]]}},"mn":"ADBE Vector Shape - Group","nm":".","ty":"sh"}],"ix":1,"mn":"ADBE Vector Group","nm":".","np":3,"ty":"gr"}]},"fFamily":"Arial","size":28,"style":"Regular","w":27.78}],"ddd":0,"fonts":{"list":[{"ascent":75.6476929411292,"fFamily":"Arial","fName":"ArialMT","fStyle":"Regular"}]},"fr":60,"h":500,"ip":0,"layers":[{"ao":0,"bm":0,"ddd":0,"ind":1,"ip":0,"ks":{"a":{"a":0,"ix":1,"k":[0,0,0]},"o":{"a":0,"ix":11,"k":100},"p":{"a":0,"ix":2,"k":[120,160,0]},"r":{"a":0,"ix":10,"k":0},"s":{"a":0,"ix":6,"k":[100,100,100]}},"nm":"characters","op":300,"sr":1,"st":0,"t":{"a":[{"a":{"fc":{"a":0,"ix":12,"k":[0.893673419952,0.37487745285,0.052818626165,1]},"ls":{"a":0,"k":[50,50]}},"nm":"Animator 1","s":{"a":{"a":0,"ix":4,"k":100},"b":1,"e":{"a":0,"ix":5,"k":1},"ne":{"a":0,"ix":8,"k":0},"o":{"a":1,"ix":6,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[-1],"t":0},{"s":[52],"t":299}]},"r":2,"rn":0,"sh":1,"t":0,"xe":{"a":0,"ix":7,"k":0}}}],"d":{"k":[{"s":{"f":"ArialMT","fc":[0,0.971,0.039],"j":2,"lh":33.6000022888184,"ls":0,"ps":[-118,-111],"s":22,"sz":[246,132],"t":"The quick brown fox jumps over the lazy dog.","tr":-100},"t":0}]},"m":{"a":{"a":0,"ix":2,"k":[0,0]},"g":1},"p":{}},"ty":5},{"ao":0,"bm":0,"ddd":0,"ind":2,"ip":0,"ks":{"a":{"a":0,"ix":1,"k":[0,0,0]},"o":{"a":0,"ix":11,"k":100},"p":{"a":0,"ix":2,"k":[120,400,0]},"r":{"a":0,"ix":10,"k":0},"s":{"a":0,"ix":6,"k":[100,100,100]}},"nm":"excluding spaces","op":300,"sr":1,"st":0,"t":{"a":[{"a":{"fc":{"a":0,"ix":12,"k":[0.89411765337,0.376470595598,0.050980392843,1]},"ls":{"a":0,"k":[50,50]}},"nm":"Animator 1","s":{"a":{"a":0,"ix":4,"k":100},"b":2,"e":{"a":0,"ix":5,"k":1},"ne":{"a":0,"ix":8,"k":0},"o":{"a":1,"ix":6,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[-1],"t":0},{"s":[52],"t":299}]},"r":2,"rn":0,"sh":1,"t":0,"xe":{"a":0,"ix":7,"k":0}}}],"d":{"k":[{"s":{"f":"ArialMT","fc":[0,0.971,0.039],"j":2,"lh":33.6000022888184,"ls":0,"ps":[-118,-111],"s":22,"sz":[246,132],"t":"The quick brown fox jumps over the lazy dog.","tr":-100},"t":0}]},"m":{"a":{"a":0,"ix":2,"k":[0,0]},"g":1},"p":{}},"ty":5},{"ao":0,"bm":0,"ddd":0,"ind":3,"ip":0,"ks":{"a":{"a":0,"ix":1,"k":[0,0,0]},"o":{"a":0,"ix":11,"k":100},"p":{"a":0,"ix":2,"k":[370,160,0]},"r":{"a":0,"ix":10,"k":0},"s":{"a":0,"ix":6,"k":[100,100,100]}},"nm":"words","op":300,"sr":1,"st":0,"t":{"a":[{"a":{"fc":{"a":0,"ix":12,"k":[0.89411765337,0.376470595598,0.050980392843,1]},"ls":{"a":0,"k":[50,50]}},"nm":"Animator 1","s":{"a":{"a":0,"ix":4,"k":100},"b":3,"e":{"a":0,"ix":5,"k":1},"ne":{"a":0,"ix":8,"k":0},"o":{"a":1,"ix":6,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[-1],"t":0},{"s":[9],"t":299}]},"r":2,"rn":0,"sh":1,"t":0,"xe":{"a":0,"ix":7,"k":0}}}],"d":{"k":[{"s":{"f":"ArialMT","fc":[0,0.971,0.039],"j":2,"lh":33.6000022888184,"ls":0,"ps":[-118,-111],"s":22,"sz":[246,132],"t":"The quick brown fox jumps over the lazy dog.","tr":-100},"t":0}]},"m":{"a":{"a":0,"ix":2,"k":[0,0]},"g":1},"p":{}},"ty":5},{"ao":0,"bm":0,"ddd":0,"ind":4,"ip":0,"ks":{"a":{"a":0,"ix":1,"k":[0,0,0]},"o":{"a":0,"ix":11,"k":100},"p":{"a":0,"ix":2,"k":[370,400,0]},"r":{"a":0,"ix":10,"k":0},"s":{"a":0,"ix":6,"k":[100,100,100]}},"nm":"lines","op":300,"sr":1,"st":0,"t":{"a":[{"a":{"fc":{"a":0,"ix":12,"k":[0.89411765337,0.376470595598,0.050980392843,1]},"ls":{"a":0,"k":[50,50]}},"nm":"Animator 1","s":{"a":{"a":0,"ix":4,"k":100},"b":4,"e":{"a":0,"ix":5,"k":1},"ne":{"a":0,"ix":8,"k":0},"o":{"a":1,"ix":6,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"s":[-1],"t":0},{"s":[3],"t":299}]},"r":2,"rn":0,"sh":1,"t":0,"xe":{"a":0,"ix":7,"k":0}}}],"d":{"k":[{"s":{"f":"ArialMT","fc":[0,0.971,0.039],"j":2,"lh":33.6000022888184,"ls":0,"ps":[-118,-111],"s":22,"sz":[246,132],"t":"The quick brown fox jumps over the lazy dog.","tr":-100},"t":0}]},"m":{"a":{"a":0,"ix":2,"k":[0,0]},"g":1},"p":{}},"ty":5}],"markers":[],"nm":"line spacing","op":300,"v":"5.6.10","w":500} diff --git a/samplecode/Sample3D.cpp b/samplecode/Sample3D.cpp index e54fc9fb54039..0ee2c4cb5bdac 100644 --- a/samplecode/Sample3D.cpp +++ b/samplecode/Sample3D.cpp @@ -356,7 +356,7 @@ class SampleBump3D : public SampleCubeBase { SkRRect fRR; public: - SampleBump3D() : SampleCubeBase(kShowLightDome) {} + SampleBump3D() : SampleCubeBase(Flags(kCanRunOnCPU | kShowLightDome)) {} SkString name() override { return SkString("bump3d"); } diff --git a/samplecode/SampleAAGeometry.cpp b/samplecode/SampleAAGeometry.cpp index bc708ea8be044..07e7285d4687a 100644 --- a/samplecode/SampleAAGeometry.cpp +++ b/samplecode/SampleAAGeometry.cpp @@ -278,6 +278,7 @@ static void set_path_verb(int index, SkPath::Verb v, SkPath* path, SkScalar w) { switch (v) { case SkPath::kConic_Verb: weight = w; + [[fallthrough]]; case SkPath::kQuad_Verb: pts[2] = pts[1]; pts[1].fX = (pts[0].fX + pts[2].fX) / 2; @@ -303,6 +304,7 @@ static void set_path_verb(int index, SkPath::Verb v, SkPath* path, SkScalar w) { break; case SkPath::kConic_Verb: weight = w; + [[fallthrough]]; case SkPath::kQuad_Verb: break; case SkPath::kCubic_Verb: { @@ -325,6 +327,7 @@ static void set_path_verb(int index, SkPath::Verb v, SkPath* path, SkScalar w) { break; case SkPath::kConic_Verb: weight = w; + [[fallthrough]]; case SkPath::kQuad_Verb: { SkDCubic dCubic; dCubic.set(pts); diff --git a/samplecode/SampleAnimatedImage.cpp b/samplecode/SampleAnimatedImage.cpp index da6ac28caa978..1ca7ac1ef3e2a 100644 --- a/samplecode/SampleAnimatedImage.cpp +++ b/samplecode/SampleAnimatedImage.cpp @@ -104,11 +104,10 @@ class SampleAnimatedImage : public Sample { switch (uni) { case kPauseKey: fRunning = !fRunning; - if (fImage->isFinished()) { - // fall through - } else { + if (!fImage->isFinished()) { return true; } + [[fallthrough]]; case kResetKey: fImage->reset(); fCurrentTime = fLastWallTime; diff --git a/samplecode/SampleComplexClip.cpp b/samplecode/SampleComplexClip.cpp index d903148f8082a..4a73fc84a6c1d 100644 --- a/samplecode/SampleComplexClip.cpp +++ b/samplecode/SampleComplexClip.cpp @@ -80,9 +80,6 @@ class ComplexClipView : public Sample { } gOps[] = { //extra spaces in names for measureText {kIntersect_SkClipOp, "Isect "}, {kDifference_SkClipOp, "Diff " }, - {kUnion_SkClipOp, "Union "}, - {kXOR_SkClipOp, "Xor " }, - {kReverseDifference_SkClipOp, "RDiff "} }; canvas->translate(0, SkIntToScalar(40)); diff --git a/samplecode/SampleFitCubicToCircle.cpp b/samplecode/SampleFitCubicToCircle.cpp new file mode 100644 index 0000000000000..84042e5689944 --- /dev/null +++ b/samplecode/SampleFitCubicToCircle.cpp @@ -0,0 +1,257 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "samplecode/Sample.h" + +#include "include/core/SkCanvas.h" +#include "include/core/SkFont.h" +#include "include/core/SkPaint.h" +#include "include/core/SkPath.h" +#include + +// Math constants are not always defined. +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288 +#endif + +#ifndef M_SQRT2 +#define M_SQRT2 1.41421356237309504880168872420969808 +#endif + +constexpr static int kCenterX = 300; +constexpr static int kCenterY = 325; +constexpr static int kRadius = 250; + +// This sample fits a cubic to the arc between two interactive points on a circle. It also finds the +// T-coordinate of max error, and outputs it and its value in pixels. (It turns out that max error +// always occurs at T=0.21132486540519.) +// +// Press 'E' to iteratively cut the arc in half and report the improvement in max error after each +// halving. (It turns out that max error improves by exactly 64x on every halving.) +class SampleFitCubicToCircle : public Sample { + SkString name() override { return SkString("FitCubicToCircle"); } + void onOnceBeforeDraw() override { this->fitCubic(); } + void fitCubic(); + void onDrawContent(SkCanvas*) override; + Sample::Click* onFindClickHandler(SkScalar x, SkScalar y, skui::ModifierKey) override; + bool onClick(Sample::Click*) override; + bool onChar(SkUnichar) override; + + // Coordinates of two points on the unit circle. These are the two endpoints of the arc we fit. + double fEndptsX[2] = {0, 1}; + double fEndptsY[2] = {-1, 0}; + + // Fitted cubic and info, set by fitCubic(). + double fControlLength; // Length of (p1 - p0) and/or (p3 - p2) in unit circle space. + double fMaxErrorT; // T value where the cubic diverges most from the true arc. + std::array fCubicX; // Screen space cubic control points. + std::array fCubicY; + double fMaxError; // Max error (in pixels) between the cubic and the screen-space arc. + double fTheta; // Angle of the arc. This is only used for informational purposes. + SkTArray fInfoStrings; + + class Click; +}; + +// Fits a cubic to an arc on the unit circle with endpoints (x0, y0) and (x1, y1). Using the +// following 3 constraints, we arrive at the formula used in the method: +// +// 1) The endpoints and tangent directions at the endpoints must match the arc. +// 2) The cubic must be symmetric (i.e., length(p1 - p0) == length(p3 - p2)). +// 3) The height of the cubic must match the height of the arc. +// +// Returns the "control length", or length of (p1 - p0) and/or (p3 - p2). +static float fit_cubic_to_unit_circle(double x0, double y0, double x1, double y1, + std::array* X, std::array* Y) { + constexpr static double kM = -4.0/3; + constexpr static double kA = 4*M_SQRT2/3; + double d = x0*x1 + y0*y1; + double c = (std::sqrt(1 + d) * kM + kA) / std::sqrt(1 - d); + *X = {x0, x0 - y0*c, x1 + y1*c, x1}; + *Y = {y0, y0 + x0*c, y1 - x1*c, y1}; + return c; +} + +static double lerp(double x, double y, double T) { + return x + T*(y - x); +} + +// Evaluates the cubic and 1st and 2nd derivatives at T. +static std::tuple eval_cubic(double x[], double T) { + // Use De Casteljau's algorithm for better accuracy and stability. + double ab = lerp(x[0], x[1], T); + double bc = lerp(x[1], x[2], T); + double cd = lerp(x[2], x[3], T); + double abc = lerp(ab, bc, T); + double bcd = lerp(bc, cd, T); + double abcd = lerp(abc, bcd, T); + return {abcd, 3 * (bcd - abc) /*1st derivative.*/, 6 * (cd - 2*bc + ab) /*2nd derivative.*/}; +} + +// Uses newton-raphson convergence to find the point where the provided cubic diverges most from the +// unit circle. i.e., the point where the derivative of error == 0. For error we use: +// +// error = x^2 + y^2 - 1 +// error' = 2xx' + 2yy' +// error'' = 2xx'' + 2yy'' + 2x'^2 + 2y'^2 +// +double find_max_error_T(double cubicX[4], double cubicY[4]) { + constexpr static double kInitialT = .25; + double T = kInitialT; + for (int i = 0; i < 64; ++i) { + auto [x, dx, ddx] = eval_cubic(cubicX, T); + auto [y, dy, ddy] = eval_cubic(cubicY, T); + double dError = 2*(x*dx + y*dy); + double ddError = 2*(x*ddx + y*ddy + dx*dx + dy*dy); + T -= dError / ddError; + } + return T; +} + +void SampleFitCubicToCircle::fitCubic() { + fInfoStrings.reset(); + + std::array X, Y; + // "Control length" is the length of (p1 - p0) and/or (p3 - p2) in unit circle space. + fControlLength = fit_cubic_to_unit_circle(fEndptsX[0], fEndptsY[0], fEndptsX[1], fEndptsY[1], + &X, &Y); + fInfoStrings.push_back().printf("control length=%0.14f", fControlLength); + + fMaxErrorT = find_max_error_T(X.data(), Y.data()); + fInfoStrings.push_back().printf("max error T=%0.14f", fMaxErrorT); + + for (int i = 0; i < 4; ++i) { + fCubicX[i] = X[i] * kRadius + kCenterX; + fCubicY[i] = Y[i] * kRadius + kCenterY; + } + double errX = std::get<0>(eval_cubic(fCubicX.data(), fMaxErrorT)) - kCenterX; + double errY = std::get<0>(eval_cubic(fCubicY.data(), fMaxErrorT)) - kCenterY; + fMaxError = std::sqrt(errX*errX + errY*errY) - kRadius; + fInfoStrings.push_back().printf("max error=%.5gpx", fMaxError); + + fTheta = std::atan2(fEndptsY[1], fEndptsX[1]) - std::atan2(fEndptsY[0], fEndptsX[0]); + fTheta = std::abs(fTheta * 180/M_PI); + if (fTheta > 180) { + fTheta = 360 - fTheta; + } + fInfoStrings.push_back().printf("(theta=%.2f)", fTheta); + + SkDebugf("\n"); + for (const SkString& infoString : fInfoStrings) { + SkDebugf("%s\n", infoString.c_str()); + } +} + +void SampleFitCubicToCircle::onDrawContent(SkCanvas* canvas) { + canvas->clear(SK_ColorBLACK); + + SkPaint circlePaint; + circlePaint.setColor(0x80ffffff); + circlePaint.setStyle(SkPaint::kStroke_Style); + circlePaint.setStrokeWidth(0); + circlePaint.setAntiAlias(true); + canvas->drawArc(SkRect::MakeXYWH(kCenterX - kRadius, kCenterY - kRadius, kRadius * 2, + kRadius * 2), 0, 360, false, circlePaint); + + SkPaint cubicPaint; + cubicPaint.setColor(SK_ColorGREEN); + cubicPaint.setStyle(SkPaint::kStroke_Style); + cubicPaint.setStrokeWidth(10); + cubicPaint.setAntiAlias(true); + SkPath cubicPath; + cubicPath.moveTo(fCubicX[0], fCubicY[0]); + cubicPath.cubicTo(fCubicX[1], fCubicY[1], fCubicX[2], fCubicY[2], fCubicX[3], fCubicY[3]); + canvas->drawPath(cubicPath, cubicPaint); + + SkPaint endpointsPaint; + endpointsPaint.setColor(SK_ColorBLUE); + endpointsPaint.setStrokeWidth(8); + endpointsPaint.setAntiAlias(true); + SkPoint points[2] = {{(float)fCubicX[0], (float)fCubicY[0]}, + {(float)fCubicX[3], (float)fCubicY[3]}}; + canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, points, endpointsPaint); + + SkPaint textPaint; + textPaint.setColor(SK_ColorWHITE); + constexpr static float kInfoTextSize = 16; + SkFont font(nullptr, kInfoTextSize); + int infoY = 10 + kInfoTextSize; + for (const SkString& infoString : fInfoStrings) { + canvas->drawString(infoString.c_str(), 10, infoY, font, textPaint); + infoY += kInfoTextSize * 3/2; + } +} + +class SampleFitCubicToCircle::Click : public Sample::Click { +public: + Click(int ptIdx) : fPtIdx(ptIdx) {} + + void doClick(SampleFitCubicToCircle* that) { + double dx = fCurr.fX - kCenterX; + double dy = fCurr.fY - kCenterY; + double l = std::sqrt(dx*dx + dy*dy); + that->fEndptsX[fPtIdx] = dx/l; + that->fEndptsY[fPtIdx] = dy/l; + if (that->fEndptsX[0] * that->fEndptsY[1] - that->fEndptsY[0] * that->fEndptsX[1] < 0) { + std::swap(that->fEndptsX[0], that->fEndptsX[1]); + std::swap(that->fEndptsY[0], that->fEndptsY[1]); + fPtIdx = 1 - fPtIdx; + } + that->fitCubic(); + } + +private: + int fPtIdx; +}; + +Sample::Click* SampleFitCubicToCircle::onFindClickHandler(SkScalar x, SkScalar y, + skui::ModifierKey) { + double dx0 = x - fCubicX[0]; + double dy0 = y - fCubicY[0]; + double dx3 = x - fCubicX[3]; + double dy3 = y - fCubicY[3]; + if (dx0*dx0 + dy0*dy0 < dx3*dx3 + dy3*dy3) { + return new Click(0); + } else { + return new Click(1); + } +} + +bool SampleFitCubicToCircle::onClick(Sample::Click* click) { + Click* myClick = (Click*)click; + myClick->doClick(this); + return true; +} + +bool SampleFitCubicToCircle::onChar(SkUnichar unichar) { + if (unichar == 'E') { + constexpr static double kMaxErrorT = 0.21132486540519; // Always the same. + // Split the arc in half until error =~0, and report the improvement after each halving. + double lastError = -1; + for (double theta = fTheta; lastError != 0; theta /= 2) { + double rads = theta * M_PI/180; + std::array X, Y; + fit_cubic_to_unit_circle(1, 0, std::cos(rads), std::sin(rads), &X, &Y); + auto [x, dx, ddx] = eval_cubic(X.data(), kMaxErrorT); + auto [y, dy, ddy] = eval_cubic(Y.data(), kMaxErrorT); + double error = std::sqrt(x*x + y*y) * kRadius - kRadius; + if ((float)error <= 0) { + error = 0; + } + SkDebugf("%6.2f degrees: error= %10.5gpx", theta, error); + if (lastError > 0) { + SkDebugf(" (%17.14fx improvement)", lastError / error); + } + SkDebugf("\n"); + lastError = error; + } + return true; + } + return false; +} + +DEF_SAMPLE(return new SampleFitCubicToCircle;) diff --git a/samplecode/SamplePath.cpp b/samplecode/SamplePath.cpp index 74daa1ba3a81b..888590ef733cc 100644 --- a/samplecode/SamplePath.cpp +++ b/samplecode/SamplePath.cpp @@ -301,7 +301,7 @@ DEF_SAMPLE( return new ArcToView; ) ///////////// class FatStroke : public Sample { - bool fClosed, fShowStroke, fShowHidden, fShowSkeleton; + bool fClosed, fShowStroke, fShowHidden, fShowSkeleton, fAsCurves = false; int fJoinType, fCapType; float fWidth = 30; SkPaint fPtsPaint, fHiddenPaint, fSkeletonPaint, fStrokePaint; @@ -357,6 +357,7 @@ class FatStroke : public Sample { case '4': this->toggle3(fJoinType); return true; case '5': this->toggle3(fCapType); return true; case '6': this->toggle(fClosed); return true; + case 'c': this->toggle(fAsCurves); return true; case '-': fWidth -= 5; return true; case '=': fWidth += 5; return true; default: break; @@ -366,8 +367,15 @@ class FatStroke : public Sample { void makePath(SkPath* path) { path->moveTo(fPts[0]); - for (int i = 1; i < N; ++i) { - path->lineTo(fPts[i]); + if (fAsCurves) { + for (int i = 1; i < N-2; ++i) { + path->quadTo(fPts[i], (fPts[i+1] + fPts[i]) * 0.5f); + } + path->quadTo(fPts[N-2], fPts[N-1]); + } else { + for (int i = 1; i < N; ++i) { + path->lineTo(fPts[i]); + } } if (fClosed) { path->close(); diff --git a/samplecode/SampleTessellatedWedge.cpp b/samplecode/SampleTessellatedWedge.cpp index 89731cb0b69e4..0598b1f026c64 100644 --- a/samplecode/SampleTessellatedWedge.cpp +++ b/samplecode/SampleTessellatedWedge.cpp @@ -51,7 +51,7 @@ class TessellatedWedge : public Sample { SkMatrix fLastViewMatrix = SkMatrix::I(); SkPath fPath; - GrTessellatePathOp::Flags fFlags = GrTessellatePathOp::Flags::kWireframe; + GrTessellationPathRenderer::OpFlags fOpFlags = GrTessellationPathRenderer::OpFlags::kWireframe; class Click; }; @@ -92,7 +92,7 @@ void TessellatedWedge::onDrawContent(SkCanvas* canvas) { GrOpMemoryPool* pool = ctx->priv().opMemoryPool(); rtc->priv().testingOnly_addDrawOp(pool->allocate( - canvas->getTotalMatrix(), fPath, std::move(paint), aa, fFlags)); + canvas->getTotalMatrix(), fPath, std::move(paint), aa, fOpFlags)); // Draw the path points. SkPaint pointsPaint; @@ -149,8 +149,8 @@ bool TessellatedWedge::onClick(Sample::Click* click) { bool TessellatedWedge::onChar(SkUnichar unichar) { switch (unichar) { case 'w': - fFlags = (GrTessellatePathOp::Flags)( - (int)fFlags ^ (int)GrTessellatePathOp::Flags::kWireframe); + fOpFlags = (GrTessellationPathRenderer::OpFlags)( + (int)fOpFlags ^ (int)GrTessellationPathRenderer::OpFlags::kWireframe); return true; case 'D': { fPath.dump(); diff --git a/samplecode/SampleTextBox.cpp b/samplecode/SampleTextBox.cpp index c13b98118f686..72bc2726c5d58 100644 --- a/samplecode/SampleTextBox.cpp +++ b/samplecode/SampleTextBox.cpp @@ -114,7 +114,7 @@ class TextBoxView : public Sample { }; DEF_SAMPLE( return new TextBoxView([](){ return SkShaper::Make(); }, "default"); ); -#ifdef SK_BUILD_FOR_MAC +#ifdef SK_SHAPER_CORETEXT_AVAILABLE DEF_SAMPLE( return new TextBoxView(SkShaper::MakeCoreText, "coretext"); ); #endif @@ -176,7 +176,9 @@ class SampleShaper : public Sample { for (SkScalar size = 30; size <= 30; size += 10) { this->drawTest(canvas, text, size, SkShaper::Make()); canvas->translate(0, size + 5); + #ifdef SK_SHAPER_CORETEXT_AVAILABLE this->drawTest(canvas, text, size, SkShaper::MakeCoreText()); + #endif canvas->translate(0, size*2); } } diff --git a/site/dev/testing/fuzz.md b/site/dev/testing/fuzz.md index 8bb37441647be..6b4d338cef029 100644 --- a/site/dev/testing/fuzz.md +++ b/site/dev/testing/fuzz.md @@ -12,7 +12,8 @@ less machine- and platform- dependent: skia_use_system_freetype2=false skia_use_wuffs=true skia_enable_skottie=true - skia_enable_fontmgr_custom=false + skia_enable_fontmgr_custom_directory=false + skia_enable_fontmgr_custom_embedded=false skia_enable_fontmgr_custom_empty=true All that is needed to reproduce a fuzz downloaded from ClusterFuzz, oss-fuzz or diff --git a/site/user/release/release_notes.md b/site/user/release/release_notes.md index 89d12bd2a5971..dac65b7873ff2 100644 --- a/site/user/release/release_notes.md +++ b/site/user/release/release_notes.md @@ -5,6 +5,69 @@ This page includes a list of high level updates for each milestone release. * * * +Milestone 85 +------------ + + * Added GrContext::oomed() which reports whether Skia has seen a GL_OUT_OF_MEMORY + error from Open GL [ES] or VK_ERROR_OUT_OF_*_MEMORY from Vulkan. + https://review.skia.org/298216 + + * Add option on SkSurface::flush to pass in a GrBackendSurfaceMutableState which + we will set the gpu backend surface to be at the end of the flush. + https://review.skia.org/295567 + + * Add GrContext function to set mutable state on a backend surface. Currently this + is only used for setting vulkan VkImage layout and queue family. + https://review.skia.org/293844 + + * SkSurface factores that take GrBackendTexture or GrBackendRenderTarget now always + call the release proc (if provided) on failure. SkSurface::replaceBackendTexture + also calls the release proc on failure. + https://review.skia.org/293762 + + * SkSurface::asyncRescaleAndReadPixels and SkSurfaceasyncRescaleAndReadPixelsYUV420 + now require explicit GrContext submit to guarantee finite time before callback + is invoked. + https://review.skia.org/292840 + + * Add VkSharingMode field to GrVkImageInfo. + https://review.skia.org/293559 + + * Move SkBitmapRegionDecoder into client_utils/android. + + * SkCanvas.clear and SkCanvas.drawColor now accept SkColor4f in addition to SkColor. + + * Remove SkSurface::MakeFromBackendTextureAsRenderTarget. + This factory existed to work around issues with GL_TEXTURE_RECTANGLE that existed + in Chrome's command buffer. Those issues have since been resolved. Use + SkSurface::MakeFromBackendTexutre or SkSurface::MakeFromBackendRenderTarget instead. + https://review.skia.org/292719 + + * Adds submittedProc callback to GrFlushInfo which will be called when the work + from the flush call is submitted to the GPU. This is specifically useful for knowing + when semahpores sent with the flush have been submitted and can be waiting on. + https://review.skia.org/291078 + + * GrContext submit is now required to be called in order to send GPU work to the + actual GPU. The flush calls simply produces 3D API specific objects that are ready + to be submitted (e.g. command buffers). For the GL backend, the flush will still + send commands to the driver. However, clients should still assume the must call + submit which is where any glFlush that is need for sync objects will be called. There, + are flushAndSubmit() functions of GrContext, SkSurface, and SkImage that will act + like the previous flush() functions. This will flush the work and immediately call + submit. + https://review.skia.org/289033 + + * Remove deprecated version of flush calls on GrContext and SkSurface. + https://review.skia.org/2290540 + + * SkCanvas::drawVertices and drawPatch now support mapping an SkShader without explicit + texture coordinates. If they're not supplied, the local positions (vertex position or + patch cubic positions) will be directly used to sample the SkShader. + https://review.skia.org/290130 + +* * * + Milestone 84 ------------ diff --git a/src/android/SkAndroidFrameworkUtils.cpp b/src/android/SkAndroidFrameworkUtils.cpp index a7ea2ea4122eb..2b2787a236068 100644 --- a/src/android/SkAndroidFrameworkUtils.cpp +++ b/src/android/SkAndroidFrameworkUtils.cpp @@ -35,6 +35,20 @@ int SkAndroidFrameworkUtils::SaveBehind(SkCanvas* canvas, const SkRect* subset) return canvas->only_axis_aligned_saveBehind(subset); } +void SkAndroidFrameworkUtils::ReplaceClip(SkCanvas* canvas, const SkIRect* rect) { + SkIRect deviceRestriction; + if (!rect) { + if (canvas->fClipRestrictionRect.isEmpty()) { + deviceRestriction = canvas->imageInfo().bounds(); + } else { + deviceRestriction = canvas->fClipRestrictionRect; + } + } else { + deviceRestriction = *rect; + } + canvas->androidFramework_replaceClip(deviceRestriction); +} + SkCanvas* SkAndroidFrameworkUtils::getBaseWrappedCanvas(SkCanvas* canvas) { auto pfc = canvas->internal_private_asPaintFilterCanvas(); auto result = canvas; @@ -45,4 +59,3 @@ SkCanvas* SkAndroidFrameworkUtils::getBaseWrappedCanvas(SkCanvas* canvas) { return result; } #endif // SK_BUILD_FOR_ANDROID_FRAMEWORK - diff --git a/src/codec/SkBmpCodec.cpp b/src/codec/SkBmpCodec.cpp index 615c8a4212590..c113f6da1538a 100644 --- a/src/codec/SkBmpCodec.cpp +++ b/src/codec/SkBmpCodec.cpp @@ -394,7 +394,7 @@ SkCodec::Result SkBmpCodec::ReadHeader(SkStream* stream, bool inIco, inputFormat = kRLE_BmpInputFormat; break; } - // Fall through + [[fallthrough]]; case kPng_BmpCompressionMethod: // TODO: Decide if we intend to support this. // It is unsupported in the previous version and diff --git a/src/codec/SkPngCodec.cpp b/src/codec/SkPngCodec.cpp index c17070c07c033..df77b3aac0915 100644 --- a/src/codec/SkPngCodec.cpp +++ b/src/codec/SkPngCodec.cpp @@ -1018,8 +1018,7 @@ SkCodec::Result SkPngCodec::initializeXforms(const SkImageInfo& dstInfo, const O if (this->getEncodedInfo().bitsPerComponent() != 16) { break; } - - // Fall through + [[fallthrough]]; case SkEncodedInfo::kRGBA_Color: case SkEncodedInfo::kGray_Color: skipFormatConversion = this->colorXform(); diff --git a/src/codec/SkWebpCodec.cpp b/src/codec/SkWebpCodec.cpp index 6cea0c621c531..e9019572cdf01 100644 --- a/src/codec/SkWebpCodec.cpp +++ b/src/codec/SkWebpCodec.cpp @@ -143,7 +143,7 @@ std::unique_ptr SkWebpCodec::MakeFromStream(std::unique_ptr s // sense to guess kBGRA which is likely closer to the final // output. Otherwise, we might end up converting // BGRA->YUVA->BGRA. - // Fallthrough: + [[fallthrough]]; case 2: // This is the lossless format (BGRA). if (hasAlpha) { @@ -224,9 +224,7 @@ int SkWebpCodec::onGetRepetitionCount() { return kRepetitionCountInfinite; } -#ifndef SK_LEGACY_WEBP_LOOP_COUNT loopCount--; -#endif return loopCount; } diff --git a/src/codec/SkWuffsCodec.cpp b/src/codec/SkWuffsCodec.cpp index 4da7162c8cffe..d7e11eba24245 100644 --- a/src/codec/SkWuffsCodec.cpp +++ b/src/codec/SkWuffsCodec.cpp @@ -35,7 +35,11 @@ #if defined(WUFFS_IMPLEMENTATION) #error "SkWuffsCodec should not #define WUFFS_IMPLEMENTATION" #endif +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 +#include "wuffs-v0.3.c" +#else #include "wuffs-v0.2.c" +#endif #if WUFFS_VERSION_BUILD_METADATA_COMMIT_COUNT < 1942 #error "Wuffs version is too old. Upgrade to the latest version." #endif @@ -84,6 +88,8 @@ static bool seek_buffer(wuffs_base__io_buffer* b, SkStream* s, uint64_t pos) { return true; } +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 +#else static SkEncodedInfo::Alpha wuffs_blend_to_skia_alpha(wuffs_base__animation_blend w) { return (w == WUFFS_BASE__ANIMATION_BLEND__OPAQUE) ? SkEncodedInfo::kOpaque_Alpha : SkEncodedInfo::kUnpremul_Alpha; @@ -93,6 +99,7 @@ static SkCodecAnimation::Blend wuffs_blend_to_skia_blend(wuffs_base__animation_b return (w == WUFFS_BASE__ANIMATION_BLEND__SRC) ? SkCodecAnimation::Blend::kBG : SkCodecAnimation::Blend::kPriorFrame; } +#endif static SkCodecAnimation::DisposalMethod wuffs_disposal_to_skia_disposal( wuffs_base__animation_disposal w) { @@ -116,8 +123,25 @@ static SkCodec::Result reset_and_decode_image_config(wuffs_gif__decoder* d SkStream* s) { // Calling decoder->initialize will memset most or all of it to zero, // depending on SK_WUFFS_INITIALIZE_FLAGS. - const char* status = + wuffs_base__status status = decoder->initialize(sizeof__wuffs_gif__decoder(), WUFFS_VERSION, SK_WUFFS_INITIALIZE_FLAGS); +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + if (status.repr != nullptr) { + SkCodecPrintf("initialize: %s", status.message()); + return SkCodec::kInternalError; + } + while (true) { + status = decoder->decode_image_config(imgcfg, b); + if (status.repr == nullptr) { + break; + } else if (status.repr != wuffs_base__suspension__short_read) { + SkCodecPrintf("decode_image_config: %s", status.message()); + return SkCodec::kErrorInInput; + } else if (!fill_buffer(b, s)) { + return SkCodec::kIncompleteInput; + } + } +#else if (status != nullptr) { SkCodecPrintf("initialize: %s", status); return SkCodec::kInternalError; @@ -133,12 +157,13 @@ static SkCodec::Result reset_and_decode_image_config(wuffs_gif__decoder* d return SkCodec::kIncompleteInput; } } +#endif // A GIF image's natural color model is indexed color: 1 byte per pixel, // indexing a 256-element palette. // // For Skia, we override that to decode to 4 bytes per pixel, BGRA or RGBA. - wuffs_base__pixel_format pixfmt = 0; + uint32_t pixfmt = WUFFS_BASE__PIXEL_FORMAT__INVALID; switch (kN32_SkColorType) { case kBGRA_8888_SkColorType: pixfmt = WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL; @@ -266,12 +291,12 @@ class SkWuffsCodec final : public SkScalingCodec { // RGB565). But as an optimization, we use one pass decoding (it's faster // and uses less memory) if applicable (see the assignment to // fIncrDecOnePass that calculates when we can do so). - Result onStartIncrementalDecodeOnePass(const SkImageInfo& dstInfo, - uint8_t* dst, - size_t rowBytes, - const SkCodec::Options& options, - wuffs_base__pixel_format pixelFormat, - size_t bytesPerPixel); + Result onStartIncrementalDecodeOnePass(const SkImageInfo& dstInfo, + uint8_t* dst, + size_t rowBytes, + const SkCodec::Options& options, + uint32_t pixelFormat, + size_t bytesPerPixel); Result onStartIncrementalDecodeTwoPass(); Result onIncrementalDecodeOnePass(); Result onIncrementalDecodeTwoPass(); @@ -334,12 +359,23 @@ class SkWuffsCodec final : public SkScalingCodec { SkWuffsFrame::SkWuffsFrame(wuffs_base__frame_config* fc) : INHERITED(fc->index()), fIOPosition(fc->io_position()), - fReportedAlpha(wuffs_blend_to_skia_alpha(fc->blend())) { +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + fReportedAlpha(fc->opaque_within_bounds() ? SkEncodedInfo::kOpaque_Alpha + : SkEncodedInfo::kUnpremul_Alpha) +#else + fReportedAlpha(wuffs_blend_to_skia_alpha(fc->blend())) +#endif +{ wuffs_base__rect_ie_u32 r = fc->bounds(); this->setXYWH(r.min_incl_x, r.min_incl_y, r.width(), r.height()); this->setDisposalMethod(wuffs_disposal_to_skia_disposal(fc->disposal())); this->setDuration(fc->duration() / WUFFS_BASE__FLICKS_PER_MILLISECOND); +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + this->setBlend(fc->overwrite_instead_of_blend() ? SkCodecAnimation::Blend::kBG + : SkCodecAnimation::Blend::kPriorFrame); +#else this->setBlend(wuffs_blend_to_skia_blend(fc->blend())); +#endif } SkCodec::FrameInfo SkWuffsFrame::frameInfo(bool fullyReceived) const { @@ -482,8 +518,8 @@ SkCodec::Result SkWuffsCodec::onStartIncrementalDecode(const SkImageInfo& d return SkCodec::kErrorInInput; } - wuffs_base__pixel_format pixelFormat = WUFFS_BASE__PIXEL_FORMAT__INVALID; - size_t bytesPerPixel = 0; + uint32_t pixelFormat = WUFFS_BASE__PIXEL_FORMAT__INVALID; + size_t bytesPerPixel = 0; switch (dstInfo.colorType()) { case kBGRA_8888_SkColorType: @@ -527,11 +563,11 @@ SkCodec::Result SkWuffsCodec::onStartIncrementalDecode(const SkImageInfo& d return SkCodec::kSuccess; } -SkCodec::Result SkWuffsCodec::onStartIncrementalDecodeOnePass(const SkImageInfo& dstInfo, - uint8_t* dst, - size_t rowBytes, - const SkCodec::Options& options, - wuffs_base__pixel_format pixelFormat, +SkCodec::Result SkWuffsCodec::onStartIncrementalDecodeOnePass(const SkImageInfo& dstInfo, + uint8_t* dst, + size_t rowBytes, + const SkCodec::Options& options, + uint32_t pixelFormat, size_t bytesPerPixel) { wuffs_base__pixel_config pixelConfig; pixelConfig.set(pixelFormat, WUFFS_BASE__PIXEL_SUBSAMPLING__NONE, dstInfo.width(), @@ -543,11 +579,18 @@ SkCodec::Result SkWuffsCodec::onStartIncrementalDecodeOnePass(const SkImageInfo& table.height = dstInfo.height(); table.stride = rowBytes; - const char* status = fPixelBuffer.set_from_table(&pixelConfig, table); + wuffs_base__status status = fPixelBuffer.set_from_table(&pixelConfig, table); +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + if (status.repr != nullptr) { + SkCodecPrintf("set_from_table: %s", status.message()); + return SkCodec::kInternalError; + } +#else if (status != nullptr) { SkCodecPrintf("set_from_table: %s", status); return SkCodec::kInternalError; } +#endif SkSampler::Fill(dstInfo, dst, rowBytes, options.fZeroInitialized); return SkCodec::kSuccess; @@ -571,16 +614,27 @@ SkCodec::Result SkWuffsCodec::onStartIncrementalDecodeTwoPass() { already_zeroed = true; } - const char* status = fPixelBuffer.set_from_slice( + wuffs_base__status status = fPixelBuffer.set_from_slice( &fPixelConfig, wuffs_base__make_slice_u8(fTwoPassPixbufPtr.get(), fTwoPassPixbufLen)); +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + if (status.repr != nullptr) { + SkCodecPrintf("set_from_slice: %s", status.message()); + return SkCodec::kInternalError; + } +#else if (status != nullptr) { SkCodecPrintf("set_from_slice: %s", status); return SkCodec::kInternalError; } +#endif if (!already_zeroed) { +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + uint32_t src_bits_per_pixel = fPixelConfig.pixel_format().bits_per_pixel(); +#else uint32_t src_bits_per_pixel = wuffs_base__pixel_format__bits_per_pixel(fPixelConfig.pixel_format()); +#endif if ((src_bits_per_pixel == 0) || (src_bits_per_pixel % 8 != 0)) { return SkCodec::kInternalError; } @@ -683,8 +737,12 @@ SkCodec::Result SkWuffsCodec::onIncrementalDecodeTwoPass() { } } +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + uint32_t src_bits_per_pixel = fPixelBuffer.pixcfg.pixel_format().bits_per_pixel(); +#else uint32_t src_bits_per_pixel = wuffs_base__pixel_format__bits_per_pixel(fPixelBuffer.pixcfg.pixel_format()); +#endif if ((src_bits_per_pixel == 0) || (src_bits_per_pixel % 8 != 0)) { return SkCodec::kInternalError; } @@ -821,7 +879,11 @@ void SkWuffsCodec::onGetFrameCountInternal() { const char* status = this->decodeFrameConfig(WhichDecoder::kFrameCount); if (status == nullptr) { // No-op. +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + } else if (status == wuffs_base__note__end_of_data) { +#else } else if (status == wuffs_base__warning__end_of_data) { +#endif break; } else { return; @@ -893,11 +955,17 @@ SkCodec::Result SkWuffsCodec::seekFrame(WhichDecoder which, int frameIndex) { if (!seek_buffer(&fIOBuffer, fStream.get(), pos)) { return SkCodec::kInternalError; } - const char* status = + wuffs_base__status status = fDecoders[which]->restart_frame(frameIndex, fIOBuffer.reader_io_position()); +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + if (status.repr != nullptr) { + return SkCodec::kInternalError; + } +#else if (status != nullptr) { return SkCodec::kInternalError; } +#endif return SkCodec::kSuccess; } @@ -921,8 +989,17 @@ SkCodec::Result SkWuffsCodec::resetDecoder(WhichDecoder which) { const char* SkWuffsCodec::decodeFrameConfig(WhichDecoder which) { while (true) { - const char* status = + wuffs_base__status status = fDecoders[which]->decode_frame_config(&fFrameConfigs[which], &fIOBuffer); +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + if ((status.repr == wuffs_base__suspension__short_read) && + fill_buffer(&fIOBuffer, fStream.get())) { + continue; + } + fDecoderIsSuspended[which] = !status.is_complete(); + this->updateNumFullyReceivedFrames(which); + return status.repr; +#else if ((status == wuffs_base__suspension__short_read) && fill_buffer(&fIOBuffer, fStream.get())) { continue; @@ -930,11 +1007,24 @@ const char* SkWuffsCodec::decodeFrameConfig(WhichDecoder which) { fDecoderIsSuspended[which] = !wuffs_base__status__is_complete(status); this->updateNumFullyReceivedFrames(which); return status; +#endif } } const char* SkWuffsCodec::decodeFrame(WhichDecoder which) { while (true) { +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + wuffs_base__status status = fDecoders[which]->decode_frame( + &fPixelBuffer, &fIOBuffer, WUFFS_BASE__PIXEL_BLEND__SRC, + wuffs_base__make_slice_u8(fWorkbufPtr.get(), fWorkbufLen), NULL); + if ((status.repr == wuffs_base__suspension__short_read) && + fill_buffer(&fIOBuffer, fStream.get())) { + continue; + } + fDecoderIsSuspended[which] = !status.is_complete(); + this->updateNumFullyReceivedFrames(which); + return status.repr; +#else const char* status = fDecoders[which]->decode_frame( &fPixelBuffer, &fIOBuffer, wuffs_base__make_slice_u8(fWorkbufPtr.get(), fWorkbufLen), NULL); @@ -945,6 +1035,7 @@ const char* SkWuffsCodec::decodeFrame(WhichDecoder which) { fDecoderIsSuspended[which] = !wuffs_base__status__is_complete(status); this->updateNumFullyReceivedFrames(which); return status; +#endif } } @@ -1028,7 +1119,11 @@ std::unique_ptr SkWuffsCodec_MakeFromStream(std::unique_ptr s reinterpret_cast(workbuf_ptr_raw), &sk_free); SkEncodedInfo::Color color = +#ifdef SK_FAVOR_WUFFS_V_0_3_OVER_V_0_2 + (imgcfg.pixcfg.pixel_format().repr == WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL) +#else (imgcfg.pixcfg.pixel_format() == WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL) +#endif ? SkEncodedInfo::kBGRA_Color : SkEncodedInfo::kRGBA_Color; diff --git a/src/core/SkBitmapDevice.cpp b/src/core/SkBitmapDevice.cpp index aeb56aa3b78fa..0c388e4570d68 100644 --- a/src/core/SkBitmapDevice.cpp +++ b/src/core/SkBitmapDevice.cpp @@ -593,32 +593,7 @@ void SkBitmapDevice::drawAtlas(const SkImage* atlas, const SkRSXform xform[], /////////////////////////////////////////////////////////////////////////////// -namespace { - -class SkAutoDeviceClipRestore { -public: - SkAutoDeviceClipRestore(SkBaseDevice* device, const SkIRect& clip) - : fDevice(device) - , fPrevLocalToDevice(device->localToDevice44()) { - fDevice->save(); - fDevice->setLocalToDevice(SkM44()); - fDevice->clipRect(SkRect::Make(clip), SkClipOp::kIntersect, false); - fDevice->setLocalToDevice(fPrevLocalToDevice); - } - - ~SkAutoDeviceClipRestore() { - fDevice->restoreLocal(fPrevLocalToDevice); - } - -private: - SkBaseDevice* fDevice; - const SkM44 fPrevLocalToDevice; -}; - -} // anonymous ns - -void SkBitmapDevice::drawSpecial(SkSpecialImage* src, int x, int y, const SkPaint& origPaint, - SkImage* clipImage, const SkMatrix& clipMatrix) { +void SkBitmapDevice::drawSpecial(SkSpecialImage* src, int x, int y, const SkPaint& origPaint) { SkASSERT(!src->isTextureBacked()); SkASSERT(!origPaint.getMaskFilter()); @@ -645,68 +620,10 @@ void SkBitmapDevice::drawSpecial(SkSpecialImage* src, int x, int y, const SkPain y += offset.y(); } - if (!clipImage) { - SkBitmap resultBM; - if (src->getROPixels(&resultBM)) { - BDDraw(this).drawSprite(resultBM, x, y, *paint); - } - return; - } - - // Clip image case. - sk_sp srcImage(src->asImage()); - if (!srcImage) { - return; - } - - const SkMatrix totalMatrix = SkMatrix::Concat(this->localToDevice(), clipMatrix); - SkRect clipBounds; - totalMatrix.mapRect(&clipBounds, SkRect::Make(clipImage->bounds())); - const SkIRect srcBounds = srcImage->bounds().makeOffset(x, y); - - SkIRect maskBounds = fRCStack.rc().getBounds(); - if (!maskBounds.intersect(clipBounds.roundOut()) || !maskBounds.intersect(srcBounds)) { - return; + SkBitmap resultBM; + if (src->getROPixels(&resultBM)) { + BDDraw(this).drawSprite(resultBM, x, y, *paint); } - - sk_sp mask; - SkMatrix maskMatrix, shaderMatrix; - SkTLazy autoClipRestore; - - SkMatrix totalInverse; - if (clipImage->isAlphaOnly() && totalMatrix.invert(&totalInverse)) { - // If the mask is already in A8 format, we can draw it directly - // (while compensating in the shader matrix). - mask = sk_ref_sp(clipImage); - maskMatrix = totalMatrix; - shaderMatrix = totalInverse * SkMatrix::Translate(x, y); - - // If the mask is not fully contained within the src layer, we must clip. - if (!srcBounds.contains(clipBounds)) { - autoClipRestore.init(this, srcBounds); - } - - maskBounds.offsetTo(0, 0); - } else { - // Otherwise, we convert the mask to A8 explicitly. - sk_sp surf = SkSurface::MakeRaster(SkImageInfo::MakeA8(maskBounds.width(), - maskBounds.height())); - SkCanvas* canvas = surf->getCanvas(); - canvas->translate(-maskBounds.x(), -maskBounds.y()); - canvas->concat(totalMatrix); - canvas->drawImage(clipImage, 0, 0); - - mask = surf->makeImageSnapshot(); - maskMatrix = SkMatrix::I(); - shaderMatrix = SkMatrix::Translate(x - maskBounds.x(), y - maskBounds.y()); - } - - SkAutoDeviceTransformRestore adr(this, maskMatrix); - paint.writable()->setShader(srcImage->makeShader(&shaderMatrix)); - this->drawImageRect(mask.get(), nullptr, - SkRect::MakeXYWH(maskBounds.x(), maskBounds.y(), - mask->width(), mask->height()), - *paint, SkCanvas::kFast_SrcRectConstraint); } sk_sp SkBitmapDevice::makeSpecial(const SkBitmap& bitmap) { @@ -776,6 +693,12 @@ void SkBitmapDevice::onClipRegion(const SkRegion& rgn, SkClipOp op) { fRCStack.clipRegion(*ptr, op); } +void SkBitmapDevice::onReplaceClip(const SkIRect& rect) { + // Transform from "global/canvas" coordinates to relative to this device + SkIRect deviceRect = this->globalToDevice().mapRect(SkRect::Make(rect)).round(); + fRCStack.replaceClip(deviceRect); +} + void SkBitmapDevice::onSetDeviceClipRestriction(SkIRect* mutableClipRestriction) { fRCStack.setDeviceClipRestriction(mutableClipRestriction); if (!mutableClipRestriction->isEmpty()) { diff --git a/src/core/SkBitmapDevice.h b/src/core/SkBitmapDevice.h index f6e14216ee370..86a59affe6d89 100644 --- a/src/core/SkBitmapDevice.h +++ b/src/core/SkBitmapDevice.h @@ -101,8 +101,7 @@ class SkBitmapDevice : public SkBaseDevice { /////////////////////////////////////////////////////////////////////////// - void drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&, - SkImage*, const SkMatrix&) override; + void drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&) override; sk_sp makeSpecial(const SkBitmap&) override; sk_sp makeSpecial(const SkImage*) override; sk_sp snapSpecial(const SkIRect&, bool = false) override; @@ -122,6 +121,7 @@ class SkBitmapDevice : public SkBaseDevice { void onClipPath(const SkPath& path, SkClipOp, bool aa) override; void onClipShader(sk_sp) override; void onClipRegion(const SkRegion& deviceRgn, SkClipOp) override; + void onReplaceClip(const SkIRect& rect) override; void onSetDeviceClipRestriction(SkIRect* mutableClipRestriction) override; bool onClipIsAA() const override; bool onClipIsWideOpen() const override; diff --git a/src/core/SkBitmapProcState_matrixProcs.cpp b/src/core/SkBitmapProcState_matrixProcs.cpp index d444b56c91318..8fa1a0ba871f1 100755 --- a/src/core/SkBitmapProcState_matrixProcs.cpp +++ b/src/core/SkBitmapProcState_matrixProcs.cpp @@ -64,7 +64,7 @@ static void decal_nofilter_scale(uint32_t dst[], SkFixed fx, SkFixed dx, int cou SkASSERT(count <= 2); switch (count) { - case 2: ((uint16_t*)dst)[1] = SkToU16((fx + dx) >> 16); + case 2: ((uint16_t*)dst)[1] = SkToU16((fx + dx) >> 16); [[fallthrough]]; case 1: ((uint16_t*)dst)[0] = SkToU16((fx + 0) >> 16); } } @@ -475,7 +475,7 @@ SkBitmapProcState::MatrixProc SkBitmapProcState::chooseMatrixProc(bool translate // Check for our special case translate methods when there is no scale/affine/perspective. if (translate_only_matrix && kNone_SkFilterQuality == fFilterQuality) { switch (fTileModeX) { - default: SkASSERT(false); + default: SkASSERT(false); [[fallthrough]]; case SkTileMode::kClamp: return clampx_nofilter_trans; case SkTileMode::kRepeat: return repeatx_nofilter_trans; case SkTileMode::kMirror: return mirrorx_nofilter_trans; diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp index 23373abe7696e..55fb32602d584 100644 --- a/src/core/SkBlitter.cpp +++ b/src/core/SkBlitter.cpp @@ -655,10 +655,7 @@ bool SkBlitter::UseRasterPipelineBlitter(const SkPixmap& device, const SkPaint& // The legacy blitters cannot handle any of these complex features (anymore). if (device.alphaType() == kUnpremul_SkAlphaType || - matrix.hasPerspective() || - paint.getColorFilter() || paint.getBlendMode() > SkBlendMode::kLastCoeffMode || - paint.getFilterQuality() == kHigh_SkFilterQuality || (mf && mf->getFormat() == SkMask::k3D_Format)) { return true; } @@ -739,19 +736,31 @@ SkBlitter* SkBlitter::Choose(const SkPixmap& device, paint.writable()->setDither(false); } - SkMatrix ctm = matrixProvider.localToDevice(); if (gUseSkVMBlitter) { - if (auto blitter = SkCreateSkVMBlitter(device, *paint, ctm, alloc, clipShader)) { + if (auto blitter = SkCreateSkVMBlitter(device, *paint, matrixProvider, + alloc, clipShader)) { return blitter; } } + // Same basic idea used a few times: try SkRP, then try SkVM, then give up with a null-blitter. + // (Setting gUseSkVMBlitter is the only way we prefer SkVM over SkRP at the moment.) + auto create_SkRP_or_SkVMBlitter = [&]() -> SkBlitter* { + if (auto blitter = SkCreateRasterPipelineBlitter(device, *paint, matrixProvider, + alloc, clipShader)) { + return blitter; + } + if (auto blitter = SkCreateSkVMBlitter(device, *paint, matrixProvider, + alloc, clipShader)) { + return blitter; + } + return alloc->make(); + }; + + SkMatrix ctm = matrixProvider.localToDevice(); // We'll end here for many interesting cases: color spaces, color filters, most color types. if (UseRasterPipelineBlitter(device, *paint, ctm) || clipShader) { - auto blitter = - SkCreateRasterPipelineBlitter(device, *paint, matrixProvider, alloc, clipShader); - SkASSERT(blitter); - return blitter; + return create_SkRP_or_SkVMBlitter(); } // Everything but legacy kN32_SkColorType and kRGB_565_SkColorType should already be handled. @@ -768,12 +777,9 @@ SkBlitter* SkBlitter::Choose(const SkPixmap& device, {*paint, ctm, nullptr, device.colorType(), device.colorSpace()}, alloc); - // Creating the context isn't always possible... we'll just fall back to raster pipeline. + // Creating the context isn't always possible... try fallbacks before giving up. if (!shaderContext) { - auto blitter = SkCreateRasterPipelineBlitter(device, *paint, matrixProvider, alloc, - clipShader); - SkASSERT(blitter); - return blitter; + return create_SkRP_or_SkVMBlitter(); } } @@ -793,8 +799,7 @@ SkBlitter* SkBlitter::Choose(const SkPixmap& device, if (shaderContext && SkRGB565_Shader_Blitter::Supports(device, *paint)) { return alloc->make(device, *paint, shaderContext); } else { - return SkCreateRasterPipelineBlitter(device, *paint, matrixProvider, alloc, - clipShader); + return create_SkRP_or_SkVMBlitter(); } default: diff --git a/src/core/SkBlitter_Sprite.cpp b/src/core/SkBlitter_Sprite.cpp index af6222b7ad08d..05f25bec16c49 100644 --- a/src/core/SkBlitter_Sprite.cpp +++ b/src/core/SkBlitter_Sprite.cpp @@ -142,6 +142,9 @@ class SkRasterPipelineSpriteBlitter : public SkSpriteBlitter { bool is_opaque = fSource.isOpaque() && fPaintColor.fA == 1.0f; fBlitter = SkCreateRasterPipelineBlitter(fDst, paint, p, is_opaque, fAlloc, fClipShader); + if (!fBlitter) { + fBlitter = fAlloc->make(); + } } void blitRect(int x, int y, int width, int height) override { diff --git a/src/core/SkBlurMF.cpp b/src/core/SkBlurMF.cpp index 2fb4c9fe5a108..cd25ab0e0d304 100644 --- a/src/core/SkBlurMF.cpp +++ b/src/core/SkBlurMF.cpp @@ -20,7 +20,7 @@ #include "src/core/SkWriteBuffer.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrFragmentProcessor.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" @@ -436,7 +436,7 @@ SkBlurMaskFilterImpl::filterRRectToNine(const SkRRect& rrect, const SkMatrix& ma case SkRRect::kRect_Type: // We should have caught this earlier. SkASSERT(false); - // Fall through. + [[fallthrough]]; case SkRRect::kOval_Type: // The nine patch special case does not handle ovals, and we // already have code for rectangles. @@ -763,10 +763,12 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrRecordingContext* context, if (devRRect.isRect() || SkRRectPriv::IsCircle(devRRect)) { if (devRRect.isRect()) { - fp = GrRectBlurEffect::Make(context, *context->priv().caps()->shaderCaps(), - devRRect.rect(), xformedSigma); + fp = GrRectBlurEffect::Make( + /*inputFP=*/nullptr, context, *context->priv().caps()->shaderCaps(), + devRRect.rect(), xformedSigma); } else { - fp = GrCircleBlurFragmentProcessor::Make(context, devRRect.rect(), xformedSigma); + fp = GrCircleBlurFragmentProcessor::Make(/*inputFP=*/nullptr, context, devRRect.rect(), + xformedSigma); } if (!fp) { @@ -790,7 +792,8 @@ bool SkBlurMaskFilterImpl::directFilterMaskGPU(GrRecordingContext* context, return true; } - fp = GrRRectBlurEffect::Make(context, fSigma, xformedSigma, srcRRect, devRRect); + fp = GrRRectBlurEffect::Make(/*inputFP=*/nullptr, context, fSigma, xformedSigma, + srcRRect, devRRect); if (!fp) { return false; } @@ -853,15 +856,13 @@ bool SkBlurMaskFilterImpl::canFilterMaskGPU(const GrStyledShape& shape, } // We prefer to blur paths with small blur radii on the CPU. - if (ctm.rectStaysRect()) { - static const SkScalar kMIN_GPU_BLUR_SIZE = SkIntToScalar(64); - static const SkScalar kMIN_GPU_BLUR_SIGMA = SkIntToScalar(32); + static const SkScalar kMIN_GPU_BLUR_SIZE = SkIntToScalar(64); + static const SkScalar kMIN_GPU_BLUR_SIGMA = SkIntToScalar(32); - if (devSpaceShapeBounds.width() <= kMIN_GPU_BLUR_SIZE && - devSpaceShapeBounds.height() <= kMIN_GPU_BLUR_SIZE && - xformedSigma <= kMIN_GPU_BLUR_SIGMA) { - return false; - } + if (devSpaceShapeBounds.width() <= kMIN_GPU_BLUR_SIZE && + devSpaceShapeBounds.height() <= kMIN_GPU_BLUR_SIZE && + xformedSigma <= kMIN_GPU_BLUR_SIGMA) { + return false; } return true; diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 3ab2e7aec3100..e4d04472bb9c5 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -191,17 +191,12 @@ struct DeviceCM { SkRasterClip fClip; std::unique_ptr fPaint; // may be null (in the future) SkMatrix fStashedMatrix; // original CTM; used by imagefilter in saveLayer - sk_sp fClipImage; - SkMatrix fClipMatrix; - DeviceCM(sk_sp device, const SkPaint* paint, const SkMatrix& stashed, - const SkImage* clipImage, const SkMatrix* clipMatrix) + DeviceCM(sk_sp device, const SkPaint* paint, const SkMatrix& stashed) : fNext(nullptr) , fDevice(std::move(device)) , fPaint(paint ? std::make_unique(*paint) : nullptr) , fStashedMatrix(stashed) - , fClipImage(sk_ref_sp(const_cast(clipImage))) - , fClipMatrix(clipMatrix ? *clipMatrix : SkMatrix::I()) {} void reset(const SkIRect& bounds) { @@ -506,7 +501,7 @@ void SkCanvas::init(sk_sp device) { SkASSERT(sizeof(DeviceCM) <= sizeof(fDeviceCMStorage)); fMCRec->fLayer = (DeviceCM*)fDeviceCMStorage; - new (fDeviceCMStorage) DeviceCM(device, nullptr, fMCRec->fMatrix.asM33(), nullptr, nullptr); + new (fDeviceCMStorage) DeviceCM(device, nullptr, fMCRec->fMatrix.asM33()); fMCRec->fTopLayer = fMCRec->fLayer; @@ -918,7 +913,7 @@ void SkCanvas::DrawDeviceWithFilter(SkBaseDevice* src, const SkImageFilter* filt if (special) { // The image is drawn at 1-1 scale with integer translation, so no filtering is needed. SkPaint p; - dst->drawSpecial(special.get(), 0, 0, p, nullptr, SkMatrix::I()); + dst->drawSpecial(special.get(), 0, 0, p); } return; } @@ -1177,13 +1172,7 @@ void SkCanvas::internalSaveLayer(const SaveLayerRec& rec, SaveLayerStrategy stra } newDevice->setMarkerStack(fMarkerStack.get()); } - DeviceCM* layer = new DeviceCM(newDevice, paint, stashedMatrix, -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - rec.fClipMask, rec.fClipMatrix -#else - nullptr, nullptr -#endif - ); + DeviceCM* layer = new DeviceCM(newDevice, paint, stashedMatrix); // only have a "next" if this new layer doesn't affect the clip (rare) layer->fNext = BoundsAffectsClip(saveLayerFlags) ? nullptr : fMCRec->fTopLayer; @@ -1287,8 +1276,7 @@ void SkCanvas::internalRestore() { paint.setBlendMode(SkBlendMode::kDstOver); const int x = backImage->fLoc.x(); const int y = backImage->fLoc.y(); - this->getTopDevice()->drawSpecial(backImage->fImage.get(), x, y, paint, - nullptr, SkMatrix::I()); + this->getTopDevice()->drawSpecial(backImage->fImage.get(), x, y, paint); } /* Time to draw the layer's offscreen. We can't call the public drawSprite, @@ -1300,8 +1288,7 @@ void SkCanvas::internalRestore() { layer->fDevice->setImmutable(); // At this point, 'layer' has been removed from the device stack, so the devices that // internalDrawDevice sees are the destinations that 'layer' is drawn into. - this->internalDrawDevice(layer->fDevice.get(), layer->fPaint.get(), - layer->fClipImage.get(), layer->fClipMatrix); + this->internalDrawDevice(layer->fDevice.get(), layer->fPaint.get()); // restore what we smashed in internalSaveLayer this->internalSetMatrix(layer->fStashedMatrix); delete layer; @@ -1411,8 +1398,7 @@ static void check_drawdevice_colorspaces(SkColorSpace* src, SkColorSpace* dst) { SkASSERT(src == dst); } -void SkCanvas::internalDrawDevice(SkBaseDevice* srcDev, const SkPaint* paint, - SkImage* clipImage, const SkMatrix& clipMatrix) { +void SkCanvas::internalDrawDevice(SkBaseDevice* srcDev, const SkPaint* paint) { SkPaint tmp; if (nullptr == paint) { paint = &tmp; @@ -1430,13 +1416,12 @@ void SkCanvas::internalDrawDevice(SkBaseDevice* srcDev, const SkPaint* paint, // so it should always be possible to use the relative origin. Once drawDevice() and // drawSpecial() take an SkMatrix, this can switch to getRelativeTransform() instead. SkIPoint pos = srcDev->getOrigin() - dstDev->getOrigin(); - if (filter || clipImage) { + if (filter) { sk_sp specialImage = srcDev->snapSpecial(); if (specialImage) { check_drawdevice_colorspaces(dstDev->imageInfo().colorSpace(), specialImage->getColorSpace()); - dstDev->drawSpecial(specialImage.get(), pos.x(), pos.y(), *paint, - clipImage, clipMatrix); + dstDev->drawSpecial(specialImage.get(), pos.x(), pos.y(), *paint); } } else { dstDev->drawDevice(srcDev, pos.x(), pos.y(), *paint); @@ -1595,6 +1580,14 @@ void SkCanvas::androidFramework_setDeviceClipRestriction(const SkIRect& rect) { } } +void SkCanvas::androidFramework_replaceClip(const SkIRect& rect) { + this->checkForDeferredSave(); + FOR_EACH_TOP_DEVICE(device->replaceClip(rect)); + AutoValidateClip avc(this); + fMCRec->fRasterClip.setRect(rect); + fDeviceClipBounds = qr_clip_bounds(fMCRec->fRasterClip.getBounds()); +} + void SkCanvas::clipRRect(const SkRRect& rrect, SkClipOp op, bool doAA) { this->checkForDeferredSave(); ClipEdgeStyle edgeStyle = doAA ? kSoft_ClipEdgeStyle : kHard_ClipEdgeStyle; @@ -1872,6 +1865,11 @@ GrContext* SkCanvas::getGrContext() { return device ? device->context() : nullptr; } +GrRecordingContext* SkCanvas::recordingContext() { + SkBaseDevice* device = this->getTopDevice(); + return device ? device->recordingContext() : nullptr; +} + void SkCanvas::drawDRRect(const SkRRect& outer, const SkRRect& inner, const SkPaint& paint) { TRACE_EVENT0("skia", TRACE_FUNC); @@ -2516,8 +2514,7 @@ void SkCanvas::onDrawImage(const SkImage* image, SkScalar x, SkScalar y, const S iter.fDevice->localToDevice().mapXY(x, y, &pt); iter.fDevice->drawSpecial(special.get(), SkScalarRoundToInt(pt.fX), - SkScalarRoundToInt(pt.fY), pnt, - nullptr, SkMatrix::I()); + SkScalarRoundToInt(pt.fY), pnt); } else { iter.fDevice->drawImageRect( image, nullptr, SkRect::MakeXYWH(x, y, image->width(), image->height()), pnt, diff --git a/src/core/SkCanvasPriv.h b/src/core/SkCanvasPriv.h index a245d875e3b2e..ff20fa1365b5e 100644 --- a/src/core/SkCanvasPriv.h +++ b/src/core/SkCanvasPriv.h @@ -48,6 +48,11 @@ class SkCanvasPriv { canvas->drawClippedToSaveBehind(paint); } + // Exposed for testing on non-Android framework builds + static void ReplaceClip(SkCanvas* canvas, const SkIRect& rect) { + canvas->androidFramework_replaceClip(rect); + } + // The experimental_DrawEdgeAAImageSet API accepts separate dstClips and preViewMatrices arrays, // where entries refer into them, but no explicit size is provided. Given a set of entries, // computes the minimum length for these arrays that would provide index access errors. diff --git a/src/core/SkClipStack.cpp b/src/core/SkClipStack.cpp index 349fdc6758f50..0556b28313a3c 100644 --- a/src/core/SkClipStack.cpp +++ b/src/core/SkClipStack.cpp @@ -9,6 +9,9 @@ #include "include/core/SkPath.h" #include "src/core/SkClipOpPriv.h" #include "src/core/SkClipStack.h" +#include "src/core/SkRectPriv.h" +#include "src/shaders/SkShaderBase.h" + #include #include @@ -21,15 +24,22 @@ SkClipStack::Element::Element(const Element& that) { case DeviceSpaceType::kEmpty: fDeviceSpaceRRect.setEmpty(); fDeviceSpacePath.reset(); + fShader.reset(); break; case DeviceSpaceType::kRect: // Rect uses rrect case DeviceSpaceType::kRRect: fDeviceSpacePath.reset(); + fShader.reset(); fDeviceSpaceRRect = that.fDeviceSpaceRRect; break; case DeviceSpaceType::kPath: + fShader.reset(); fDeviceSpacePath.set(that.getDeviceSpacePath()); break; + case DeviceSpaceType::kShader: + fDeviceSpacePath.reset(); + fShader = that.fShader; + break; } fSaveCount = that.fSaveCount; @@ -60,6 +70,8 @@ bool SkClipStack::Element::operator== (const Element& element) const { return false; } switch (fDeviceSpaceType) { + case DeviceSpaceType::kShader: + return this->getShader() == element.getShader(); case DeviceSpaceType::kPath: return this->getDeviceSpacePath() == element.getDeviceSpacePath(); case DeviceSpaceType::kRRect: @@ -76,12 +88,18 @@ bool SkClipStack::Element::operator== (const Element& element) const { const SkRect& SkClipStack::Element::getBounds() const { static const SkRect kEmpty = {0, 0, 0, 0}; + static const SkRect kInfinite = SkRectPriv::MakeLargeS32(); switch (fDeviceSpaceType) { case DeviceSpaceType::kRect: // fallthrough case DeviceSpaceType::kRRect: return fDeviceSpaceRRect.getBounds(); case DeviceSpaceType::kPath: return fDeviceSpacePath.get()->getBounds(); + case DeviceSpaceType::kShader: + // Shaders have infinite bounds since any pixel could have clipped or full coverage + // (which is different from wide-open, where every pixel has 1.0 coverage, or empty + // where every pixel has 0.0 coverage). + return kInfinite; case DeviceSpaceType::kEmpty: return kEmpty; default: @@ -99,6 +117,7 @@ bool SkClipStack::Element::contains(const SkRect& rect) const { case DeviceSpaceType::kPath: return fDeviceSpacePath.get()->conservativelyContainsRect(rect); case DeviceSpaceType::kEmpty: + case DeviceSpaceType::kShader: return false; default: SkDEBUGFAIL("Unexpected type."); @@ -116,6 +135,7 @@ bool SkClipStack::Element::contains(const SkRRect& rrect) const { case DeviceSpaceType::kPath: return fDeviceSpacePath.get()->conservativelyContainsRect(rrect.getBounds()); case DeviceSpaceType::kEmpty: + case DeviceSpaceType::kShader: return false; default: SkDEBUGFAIL("Unexpected type."); @@ -140,6 +160,9 @@ void SkClipStack::Element::invertShapeFillType() { case DeviceSpaceType::kPath: fDeviceSpacePath.get()->toggleInverseFillType(); break; + case DeviceSpaceType::kShader: + fShader = as_SB(fShader)->makeInvertAlpha(); + break; case DeviceSpaceType::kEmpty: // Should this set to an empty, inverse filled path? break; @@ -219,6 +242,13 @@ void SkClipStack::Element::initAsPath(int saveCount, const SkPath& path, const S this->initCommon(saveCount, op, doAA); } +void SkClipStack::Element::initShader(int saveCount, sk_sp shader) { + SkASSERT(shader); + fDeviceSpaceType = DeviceSpaceType::kShader; + fShader = std::move(shader); + this->initCommon(saveCount, SkClipOp::kIntersect, false); +} + void SkClipStack::Element::asDeviceSpacePath(SkPath* path) const { switch (fDeviceSpaceType) { case DeviceSpaceType::kEmpty: @@ -235,6 +265,10 @@ void SkClipStack::Element::asDeviceSpacePath(SkPath* path) const { case DeviceSpaceType::kPath: *path = *fDeviceSpacePath.get(); break; + case DeviceSpaceType::kShader: + path->reset(); + path->addRect(SkRectPriv::MakeLargeS32()); + break; } path->setIsVolatile(true); } @@ -246,6 +280,7 @@ void SkClipStack::Element::setEmpty() { fIsIntersectionOfRects = false; fDeviceSpaceRRect.setEmpty(); fDeviceSpacePath.reset(); + fShader.reset(); fGenID = kEmptyGenID; SkDEBUGCODE(this->checkEmpty();) } @@ -257,6 +292,7 @@ void SkClipStack::Element::checkEmpty() const { SkASSERT(kEmptyGenID == fGenID); SkASSERT(fDeviceSpaceRRect.isEmpty()); SkASSERT(!fDeviceSpacePath.isValid()); + SkASSERT(!fShader); } bool SkClipStack::Element::canBeIntersectedInPlace(int saveCount, SkClipOp op) const { @@ -356,7 +392,7 @@ void SkClipStack::Element::combineBoundsXOR(int combination, const SkRect& prevF // The only pixels that can survive are within the // union of the two bounding boxes since the extensions // to infinity of both clips cancel out - // fall through! + [[fallthrough]]; case kPrev_Cur_FillCombo: // The most conservative bound for xor is the // union of the two bounds. If the two clips exactly overlapped @@ -501,6 +537,14 @@ void SkClipStack::Element::updateBoundAndGenID(const Element* prior) { fFiniteBoundType = kNormal_BoundsType; } break; + case DeviceSpaceType::kShader: + // A shader is infinite. We don't act as wide-open here (which is an empty bounds with + // the inside out type). This is because when the bounds is empty and inside-out, we + // know there's full coverage everywhere. With a shader, there's *unknown* coverage + // everywhere. + fFiniteBound = SkRectPriv::MakeLargeS32(); + fFiniteBoundType = kNormal_BoundsType; + break; case DeviceSpaceType::kEmpty: SkDEBUGFAIL("We shouldn't get here with an empty element."); break; @@ -758,6 +802,15 @@ void SkClipStack::pushElement(const Element& element) { case Element::DeviceSpaceType::kEmpty: SkDEBUGCODE(prior->checkEmpty();) return; + case Element::DeviceSpaceType::kShader: + if (Element::DeviceSpaceType::kShader == element.getDeviceSpaceType()) { + prior->fShader = SkShaders::Blend(SkBlendMode::kSrcIn, + element.fShader, prior->fShader); + Element* priorPrior = (Element*) iter.prev(); + prior->updateBoundAndGenID(priorPrior); + return; + } + break; case Element::DeviceSpaceType::kRect: if (Element::DeviceSpaceType::kRect == element.getDeviceSpaceType()) { if (prior->rectRectIntersectAllowed(element.getDeviceSpaceRect(), @@ -777,7 +830,7 @@ void SkClipStack::pushElement(const Element& element) { } break; } - // fallthrough + [[fallthrough]]; default: if (!SkRect::Intersects(prior->getBounds(), element.getBounds())) { prior->setEmpty(); @@ -827,6 +880,14 @@ void SkClipStack::clipPath(const SkPath& path, const SkMatrix& matrix, SkClipOp } } +void SkClipStack::clipShader(sk_sp shader) { + Element element(fSaveCount, std::move(shader)); + this->pushElement(element); + // clipShader should not be used with expanding clip ops, so we shouldn't need to worry about + // the clip restriction rect either. + SkASSERT(fClipRestrictionRect.isEmpty()); +} + void SkClipStack::clipEmpty() { Element* element = (Element*) fDeque.back(); @@ -1002,7 +1063,8 @@ uint32_t SkClipStack::getTopmostGenID() const { } const Element* back = static_cast(fDeque.back()); - if (kInsideOut_BoundsType == back->fFiniteBoundType && back->fFiniteBound.isEmpty()) { + if (kInsideOut_BoundsType == back->fFiniteBoundType && back->fFiniteBound.isEmpty() && + Element::DeviceSpaceType::kShader != back->fDeviceSpaceType) { return kWideOpenGenID; } @@ -1015,12 +1077,14 @@ void SkClipStack::Element::dump() const { "empty", "rect", "rrect", - "path" + "path", + "shader" }; static_assert(0 == static_cast(DeviceSpaceType::kEmpty), "enum mismatch"); static_assert(1 == static_cast(DeviceSpaceType::kRect), "enum mismatch"); static_assert(2 == static_cast(DeviceSpaceType::kRRect), "enum mismatch"); static_assert(3 == static_cast(DeviceSpaceType::kPath), "enum mismatch"); + static_assert(4 == static_cast(DeviceSpaceType::kShader), "enum mismatch"); static_assert(SK_ARRAY_COUNT(kTypeStrings) == kTypeCnt, "enum mismatch"); static const char* kOpStrings[] = { @@ -1056,6 +1120,9 @@ void SkClipStack::Element::dump() const { case DeviceSpaceType::kPath: this->getDeviceSpacePath().dump(nullptr, true, false); break; + case DeviceSpaceType::kShader: + // SkShaders don't provide much introspection that's worth while. + break; } } diff --git a/src/core/SkClipStack.h b/src/core/SkClipStack.h index 6a12c2fdb9304..fdbc59b72c9ca 100644 --- a/src/core/SkClipStack.h +++ b/src/core/SkClipStack.h @@ -13,6 +13,7 @@ #include "include/core/SkRRect.h" #include "include/core/SkRect.h" #include "include/core/SkRegion.h" +#include "include/core/SkShader.h" #include "include/private/SkDeque.h" #include "src/core/SkClipOpPriv.h" #include "src/core/SkMessageBus.h" @@ -59,8 +60,10 @@ class SkClipStack { kRRect, //!< This element combines a device space path with the current clip. kPath, + //!< This element does not have geometry, but applies a shader to the clip + kShader, - kLastType = kPath + kLastType = kShader }; static const int kTypeCnt = (int)DeviceSpaceType::kLastType + 1; @@ -83,6 +86,10 @@ class SkClipStack { this->initPath(0, path, m, op, doAA); } + Element(sk_sp shader) { + this->initShader(0, std::move(shader)); + } + ~Element(); bool operator== (const Element& element) const; @@ -113,6 +120,14 @@ class SkClipStack { return fDeviceSpaceRRect.getBounds(); } + //! refShader() const { + return fShader; + } + const SkShader* getShader() const { + return fShader.get(); + } + //!< Call if getDeviceSpaceType() is not kEmpty to get the set operation used to combine //!< this element. SkClipOp getOp() const { return fOp; } @@ -195,6 +210,7 @@ class SkClipStack { SkTLazy fDeviceSpacePath; SkRRect fDeviceSpaceRRect; + sk_sp fShader; int fSaveCount; // save count of stack when this element was added. SkClipOp fOp; DeviceSpaceType fDeviceSpaceType; @@ -239,11 +255,16 @@ class SkClipStack { this->initPath(saveCount, path, m, op, doAA); } + Element(int saveCount, sk_sp shader) { + this->initShader(saveCount, std::move(shader)); + } + void initCommon(int saveCount, SkClipOp op, bool doAA); void initRect(int saveCount, const SkRect&, const SkMatrix&, SkClipOp, bool doAA); void initRRect(int saveCount, const SkRRect&, const SkMatrix&, SkClipOp, bool doAA); void initPath(int saveCount, const SkPath&, const SkMatrix&, SkClipOp, bool doAA); void initAsPath(int saveCount, const SkPath&, const SkMatrix&, SkClipOp, bool doAA); + void initShader(int saveCount, sk_sp); void setEmpty(); @@ -345,6 +366,7 @@ class SkClipStack { void clipRect(const SkRect&, const SkMatrix& matrix, SkClipOp, bool doAA); void clipRRect(const SkRRect&, const SkMatrix& matrix, SkClipOp, bool doAA); void clipPath(const SkPath&, const SkMatrix& matrix, SkClipOp, bool doAA); + void clipShader(sk_sp); // An optimized version of clipDevRect(emptyRect, kIntersect, ...) void clipEmpty(); void setDeviceClipRestriction(const SkIRect& rect) { @@ -513,4 +535,3 @@ class SkClipStack { }; #endif - diff --git a/src/core/SkClipStackDevice.cpp b/src/core/SkClipStackDevice.cpp index bbcec4fe115c7..bcaf8944ca0d6 100644 --- a/src/core/SkClipStackDevice.cpp +++ b/src/core/SkClipStackDevice.cpp @@ -39,6 +39,10 @@ void SkClipStackDevice::onClipPath(const SkPath& path, SkClipOp op, bool aa) { fClipStack.clipPath(path, this->localToDevice(), op, aa); } +void SkClipStackDevice::onClipShader(sk_sp shader) { + fClipStack.clipShader(std::move(shader)); +} + void SkClipStackDevice::onClipRegion(const SkRegion& rgn, SkClipOp op) { SkIPoint origin = this->getOrigin(); SkRegion tmp; @@ -48,6 +52,12 @@ void SkClipStackDevice::onClipRegion(const SkRegion& rgn, SkClipOp op) { fClipStack.clipPath(path, SkMatrix::I(), op, false); } +void SkClipStackDevice::onReplaceClip(const SkIRect& rect) { + // FIXME When the deprecated clip ops are completely removed, SkClipStack will need to be + // updated to have a better way of tracking replacement. + fClipStack.clipRect(SkRect::Make(rect), this->globalToDevice(), kReplace_SkClipOp, false); +} + void SkClipStackDevice::onSetDeviceClipRestriction(SkIRect* clipRestriction) { if (clipRestriction->isEmpty()) { fClipStack.setDeviceClipRestriction(*clipRestriction); diff --git a/src/core/SkClipStackDevice.h b/src/core/SkClipStackDevice.h index e7fb96a405517..928b410ee57a1 100644 --- a/src/core/SkClipStackDevice.h +++ b/src/core/SkClipStackDevice.h @@ -27,7 +27,9 @@ class SkClipStackDevice : public SkBaseDevice { void onClipRect(const SkRect& rect, SkClipOp, bool aa) override; void onClipRRect(const SkRRect& rrect, SkClipOp, bool aa) override; void onClipPath(const SkPath& path, SkClipOp, bool aa) override; + void onClipShader(sk_sp) override; void onClipRegion(const SkRegion& deviceRgn, SkClipOp) override; + void onReplaceClip(const SkIRect& rect) override; void onSetDeviceClipRestriction(SkIRect* mutableClipRestriction) override; bool onClipIsAA() const override; bool onClipIsWideOpen() const override; diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp index 3731cc5d35c14..5e08491c40e48 100644 --- a/src/core/SkColorFilter.cpp +++ b/src/core/SkColorFilter.cpp @@ -5,13 +5,13 @@ * found in the LICENSE file. */ -#include "include/core/SkColorFilter.h" #include "include/core/SkRefCnt.h" #include "include/core/SkString.h" #include "include/core/SkUnPreMultiply.h" #include "include/private/SkNx.h" #include "include/private/SkTDArray.h" #include "src/core/SkArenaAlloc.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkColorSpaceXformSteps.h" #include "src/core/SkMatrixProvider.h" @@ -26,31 +26,84 @@ #include "src/gpu/effects/generated/GrMixerEffect.h" #endif -bool SkColorFilter::onAsAColorMode(SkColor*, SkBlendMode*) const { +bool SkColorFilter::asColorMode(SkColor* color, SkBlendMode* mode) const { + return as_CFB(this)->onAsAColorMode(color, mode); +} + +bool SkColorFilter::asAColorMode(SkColor* color, SkBlendMode* mode) const { + return as_CFB(this)->onAsAColorMode(color, mode); +} + +bool SkColorFilter::asAColorMatrix(float matrix[20]) const { + return as_CFB(this)->onAsAColorMatrix(matrix); +} + +uint32_t SkColorFilter::getFlags() const { return as_CFB(this)->onGetFlags(); } + +bool SkColorFilter::isAlphaUnchanged() const { + return SkToBool(this->getFlags() & kAlphaUnchanged_Flag); +} + +////////////////////////////////////////////////////////////////////////////////////////////////// + +bool SkColorFilterBase::onAsAColorMode(SkColor*, SkBlendMode*) const { return false; } -bool SkColorFilter::onAsAColorMatrix(float matrix[20]) const { +bool SkColorFilterBase::onAsAColorMatrix(float matrix[20]) const { return false; } #if SK_SUPPORT_GPU -std::unique_ptr SkColorFilter::asFragmentProcessor(GrRecordingContext*, - const GrColorInfo&) const { - return nullptr; +std::unique_ptr SkColorFilterBase::asFragmentProcessor( + GrRecordingContext* context, const GrColorInfo& dstColorInfo) const { + // TODO(skbug.com/10217): remove this method once all SkColorFilters support the new API. + if (!this->colorFilterAcceptsInputFP()) { + // This color filter doesn't implement `asFragmentProcessor` at all. + return nullptr; + } + + // This color filter has been updated to absorb an input FP. Redirect to the new API. + auto [success, fp] = this->asFragmentProcessor(/*inputFP=*/nullptr, context, dstColorInfo); + return success ? std::move(fp) : nullptr; +} + +GrFPResult SkColorFilterBase::asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext* context, + const GrColorInfo& dstColorInfo) const { + // A filter that overrides `colorFilterAcceptsInputFP` should also have overridden this method. + SkASSERT(!this->colorFilterAcceptsInputFP()); + + // This color filter doesn't support taking an inputFP yet. Call the deprecated version instead. + std::unique_ptr filter = this->asFragmentProcessor(context, dstColorInfo); + if (filter == nullptr) { + return GrFPFailure(std::move(inputFP)); + } + + if (inputFP == nullptr) { + // An input FP wasn't actually provided, so we can just return the color filter FP as-is. + return GrFPSuccess(std::move(filter)); + } else { + // Use RunInSeries as a crutch to make this color filter work with an input FP. + std::unique_ptr series[] = { + std::move(inputFP), + std::move(filter), + }; + return GrFPSuccess(GrFragmentProcessor::RunInSeries(series, SK_ARRAY_COUNT(series))); + } } #endif -bool SkColorFilter::appendStages(const SkStageRec& rec, bool shaderIsOpaque) const { +bool SkColorFilterBase::appendStages(const SkStageRec& rec, bool shaderIsOpaque) const { return this->onAppendStages(rec, shaderIsOpaque); } -skvm::Color SkColorFilter::program(skvm::Builder* p, skvm::Color c, - SkColorSpace* dstCS, - skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { +skvm::Color SkColorFilterBase::program(skvm::Builder* p, skvm::Color c, + SkColorSpace* dstCS, + skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { skvm::F32 original = c.a; if ((c = this->onProgram(p,c, dstCS, uniforms,alloc))) { - if (this->getFlags() & kAlphaUnchanged_Flag) { + if (this->isAlphaUnchanged()) { c.a = original; } return c; @@ -80,7 +133,7 @@ SkColor4f SkColorFilter::filterColor4f(const SkColor4f& origSrcColor, SkColorSpa SkStageRec rec = { &pipeline, &alloc, kRGBA_F32_SkColorType, dstCS, dummyPaint, nullptr, matrixProvider }; - this->onAppendStages(rec, color.fA == 1); + as_CFB(this)->onAppendStages(rec, color.fA == 1); SkPMColor4f dst; SkRasterPipeline_MemoryCtx dstPtr = { &dst, 0 }; @@ -91,16 +144,16 @@ SkColor4f SkColorFilter::filterColor4f(const SkColor4f& origSrcColor, SkColorSpa /////////////////////////////////////////////////////////////////////////////////////////////////// -class SkComposeColorFilter : public SkColorFilter { +class SkComposeColorFilter : public SkColorFilterBase { public: - uint32_t getFlags() const override { + uint32_t onGetFlags() const override { // Can only claim alphaunchanged support if both our proxys do. - return fOuter->getFlags() & fInner->getFlags(); + return fOuter->onGetFlags() & fInner->onGetFlags(); } bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override { bool innerIsOpaque = shaderIsOpaque; - if (!(fInner->getFlags() & kAlphaUnchanged_Flag)) { + if (!fInner->isAlphaUnchanged()) { innerIsOpaque = false; } return fInner->appendStages(rec, shaderIsOpaque) && @@ -115,18 +168,33 @@ class SkComposeColorFilter : public SkColorFilter { } #if SK_SUPPORT_GPU - std::unique_ptr asFragmentProcessor( - GrRecordingContext* context, const GrColorInfo& dstColorInfo) const override { - auto innerFP = fInner->asFragmentProcessor(context, dstColorInfo); - auto outerFP = fOuter->asFragmentProcessor(context, dstColorInfo); - if (!innerFP || !outerFP) { - return nullptr; + bool colorFilterAcceptsInputFP() const override { return true; } + GrFPResult asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext* context, + const GrColorInfo& dstColorInfo) const override { + GrFragmentProcessor* originalInputFP = inputFP.get(); + + auto [innerSuccess, innerFP] = + fInner->asFragmentProcessor(std::move(inputFP), context, dstColorInfo); + if (!innerSuccess) { + return GrFPFailure(std::move(innerFP)); } - std::unique_ptr series[] = { std::move(innerFP), std::move(outerFP) }; - return GrFragmentProcessor::RunInSeries(series, 2); + + auto [outerSuccess, outerFP] = + fOuter->asFragmentProcessor(std::move(innerFP), context, dstColorInfo); + if (!outerSuccess) { + // In the rare event that the outer FP cannot be built, we have no good way of + // separating the inputFP from the innerFP, so we need to return a cloned inputFP. + // This could hypothetically be expensive, but failure here should be extremely rare. + return GrFPFailure(originalInputFP->clone()); + } + + return GrFPSuccess(std::move(outerFP)); } #endif + SK_FLATTENABLE_HOOKS(SkComposeColorFilter) + protected: void flatten(SkWriteBuffer& buffer) const override { buffer.writeFlattenable(fOuter.get()); @@ -134,14 +202,13 @@ class SkComposeColorFilter : public SkColorFilter { } private: - SK_FLATTENABLE_HOOKS(SkComposeColorFilter) - SkComposeColorFilter(sk_sp outer, sk_sp inner) - : fOuter(std::move(outer)) - , fInner(std::move(inner)) {} + : fOuter(as_CFB_sp(std::move(outer))) + , fInner(as_CFB_sp(std::move(inner))) + {} - sk_sp fOuter; - sk_sp fInner; + sk_sp fOuter; + sk_sp fInner; friend class SkColorFilter; @@ -164,7 +231,7 @@ sk_sp SkColorFilter::makeComposed(sk_sp inner) con /////////////////////////////////////////////////////////////////////////////////////////////////// -class SkSRGBGammaColorFilter : public SkColorFilter { +class SkSRGBGammaColorFilter : public SkColorFilterBase { public: enum class Direction { kLinearToSRGB, @@ -182,19 +249,25 @@ class SkSRGBGammaColorFilter : public SkColorFilter { }()) {} #if SK_SUPPORT_GPU - std::unique_ptr asFragmentProcessor(GrRecordingContext*, - const GrColorInfo&) const override { + bool colorFilterAcceptsInputFP() const override { return true; } + GrFPResult asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext* context, + const GrColorInfo& dstColorInfo) const override { // wish our caller would let us know if our input was opaque... - SkAlphaType at = kPremul_SkAlphaType; + constexpr SkAlphaType alphaType = kPremul_SkAlphaType; switch (fDir) { case Direction::kLinearToSRGB: - return GrColorSpaceXformEffect::Make(sk_srgb_linear_singleton(), at, - sk_srgb_singleton(), at); + return GrFPSuccess(GrColorSpaceXformEffect::Make( + std::move(inputFP), + sk_srgb_linear_singleton(), alphaType, + sk_srgb_singleton(), alphaType)); case Direction::kSRGBToLinear: - return GrColorSpaceXformEffect::Make(sk_srgb_singleton(), at, - sk_srgb_linear_singleton(), at); + return GrFPSuccess(GrColorSpaceXformEffect::Make( + std::move(inputFP), + sk_srgb_singleton(), alphaType, + sk_srgb_linear_singleton(), alphaType)); } - return nullptr; + SkUNREACHABLE; } #endif @@ -216,19 +289,19 @@ class SkSRGBGammaColorFilter : public SkColorFilter { return premul(fSteps.program(p, uniforms, unpremul(c))); } + SK_FLATTENABLE_HOOKS(SkSRGBGammaColorFilter) + protected: void flatten(SkWriteBuffer& buffer) const override { buffer.write32(static_cast(fDir)); } private: - SK_FLATTENABLE_HOOKS(SkSRGBGammaColorFilter) - const Direction fDir; SkColorSpaceXformSteps fSteps; friend class SkColorFilter; - typedef SkColorFilter INHERITED; + typedef SkColorFilterBase INHERITED; }; sk_sp SkSRGBGammaColorFilter::CreateProc(SkReadBuffer& buffer) { @@ -255,18 +328,20 @@ sk_sp SkColorFilters::SRGBToLinearGamma() { /////////////////////////////////////////////////////////////////////////////////////////////////// -class SkMixerColorFilter : public SkColorFilter { +class SkMixerColorFilter : public SkColorFilterBase { public: SkMixerColorFilter(sk_sp cf0, sk_sp cf1, float weight) - : fCF0(std::move(cf0)), fCF1(std::move(cf1)), fWeight(weight) + : fCF0(as_CFB_sp(std::move(cf0))) + , fCF1(as_CFB_sp(std::move(cf1))) + , fWeight(weight) { SkASSERT(fCF0); SkASSERT(fWeight >= 0 && fWeight <= 1); } - uint32_t getFlags() const override { - uint32_t f0 = fCF0->getFlags(); - uint32_t f1 = fCF1 ? fCF1->getFlags() : ~0U; + uint32_t onGetFlags() const override { + uint32_t f0 = fCF0->onGetFlags(); + uint32_t f1 = fCF1 ? fCF1->onGetFlags() : ~0U; return f0 & f1; } @@ -319,6 +394,8 @@ class SkMixerColorFilter : public SkColorFilter { } #endif + SK_FLATTENABLE_HOOKS(SkMixerColorFilter) + protected: void flatten(SkWriteBuffer& buffer) const override { buffer.writeFlattenable(fCF0.get()); @@ -327,15 +404,13 @@ class SkMixerColorFilter : public SkColorFilter { } private: - SK_FLATTENABLE_HOOKS(SkMixerColorFilter) - - sk_sp fCF0; - sk_sp fCF1; - const float fWeight; + sk_sp fCF0; + sk_sp fCF1; + const float fWeight; friend class SkColorFilter; - typedef SkColorFilter INHERITED; + typedef SkColorFilterBase INHERITED; }; sk_sp SkMixerColorFilter::CreateProc(SkReadBuffer& buffer) { @@ -374,7 +449,7 @@ sk_sp SkColorFilters::Lerp(float weight, sk_sp cf0 #include "src/core/SkModeColorFilter.h" -void SkColorFilter::RegisterFlattenables() { +void SkColorFilterBase::RegisterFlattenables() { SK_REGISTER_FLATTENABLE(SkComposeColorFilter); SK_REGISTER_FLATTENABLE(SkModeColorFilter); SK_REGISTER_FLATTENABLE(SkSRGBGammaColorFilter); diff --git a/src/core/SkColorFilterBase.h b/src/core/SkColorFilterBase.h new file mode 100644 index 0000000000000..5de6d5f0c503a --- /dev/null +++ b/src/core/SkColorFilterBase.h @@ -0,0 +1,122 @@ +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkColorFilterBase_DEFINED +#define SkColorFilterBase_DEFINED + +#include "include/core/SkColorFilter.h" + +class GrColorInfo; +class GrFragmentProcessor; +class GrRecordingContext; +class SkArenaAlloc; +class SkBitmap; +class SkColorSpace; +struct SkStageRec; +using GrFPResult = std::tuple>; + +namespace skvm { + class Builder; + struct F32; + struct Uniforms; + struct Color; +} + +class SkColorFilterBase : public SkColorFilter { +public: + bool appendStages(const SkStageRec& rec, bool shaderIsOpaque) const; + + skvm::Color program(skvm::Builder*, skvm::Color, + SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const; + + /** Returns the flags for this filter. Override in subclasses to return custom flags. + */ + virtual uint32_t onGetFlags() const { return 0; } + +#if SK_SUPPORT_GPU + /** + * TEMPORARY: SkColorFilters that support asFragmentProcessor(inputFP) should override this + * method to return true. TODO(skbug.com/10217): This will be removed once + * asFragmentProcessor(inputFP, ...) is implemented across all SkColorFilters. + */ + virtual bool colorFilterAcceptsInputFP() const { return false; } + + /** + * Deprecated: SkColorFilters should use the newer form of asFragmentProcessor; see below. + */ + virtual std::unique_ptr asFragmentProcessor( + GrRecordingContext* context, const GrColorInfo& dstColorInfo) const; + + /** + * A subclass may implement this factory function to work with the GPU backend. It returns + * a GrFragmentProcessor that implements the color filter in GPU shader code. + * + * The fragment processor receives a input FP that generates a premultiplied input color, and + * produces a premultiplied output color. + * + * A GrFPFailure indicates that the color filter isn't implemented for the GPU backend. + */ + virtual GrFPResult asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext* context, + const GrColorInfo& dstColorInfo) const; +#endif + + bool affectsTransparentBlack() const { + return this->filterColor(SK_ColorTRANSPARENT) != SK_ColorTRANSPARENT; + } + + static void RegisterFlattenables(); + + static SkFlattenable::Type GetFlattenableType() { + return kSkColorFilter_Type; + } + + SkFlattenable::Type getFlattenableType() const override { + return kSkColorFilter_Type; + } + + static sk_sp Deserialize(const void* data, size_t size, + const SkDeserialProcs* procs = nullptr) { + return sk_sp(static_cast( + SkFlattenable::Deserialize( + kSkColorFilter_Type, data, size, procs).release())); + } + +protected: + SkColorFilterBase() {} + + virtual bool onAsAColorMatrix(float[20]) const; + virtual bool onAsAColorMode(SkColor* color, SkBlendMode* bmode) const; + +private: + virtual bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const = 0; + + virtual skvm::Color onProgram(skvm::Builder*, skvm::Color, + SkColorSpace* dstCS, skvm::Uniforms*, SkArenaAlloc*) const = 0; + + friend class SkColorFilter; + + typedef SkFlattenable INHERITED; +}; + +static inline SkColorFilterBase* as_CFB(SkColorFilter* filter) { + return static_cast(filter); +} + +static inline const SkColorFilterBase* as_CFB(const SkColorFilter* filter) { + return static_cast(filter); +} + +static inline const SkColorFilterBase* as_CFB(const sk_sp& filter) { + return static_cast(filter.get()); +} + +static inline sk_sp as_CFB_sp(sk_sp filter) { + return sk_sp(static_cast(filter.release())); +} + +#endif diff --git a/src/core/SkColorFilter_Matrix.cpp b/src/core/SkColorFilter_Matrix.cpp index 89544188c1bd0..0f2f6d8fef195 100644 --- a/src/core/SkColorFilter_Matrix.cpp +++ b/src/core/SkColorFilter_Matrix.cpp @@ -35,8 +35,8 @@ SkColorFilter_Matrix::SkColorFilter_Matrix(const float array[20], Domain domain) memcpy(fMatrix, array, 20 * sizeof(float)); } -uint32_t SkColorFilter_Matrix::getFlags() const { - return this->INHERITED::getFlags() | fFlags; +uint32_t SkColorFilter_Matrix::onGetFlags() const { + return this->INHERITED::onGetFlags() | fFlags; } void SkColorFilter_Matrix::flatten(SkWriteBuffer& buffer) const { @@ -127,28 +127,28 @@ skvm::Color SkColorFilter_Matrix::onProgram(skvm::Builder* p, skvm::Color c, #include "src/gpu/effects/generated/GrColorMatrixFragmentProcessor.h" #include "src/gpu/effects/generated/GrHSLToRGBFilterEffect.h" #include "src/gpu/effects/generated/GrRGBToHSLFilterEffect.h" -std::unique_ptr SkColorFilter_Matrix::asFragmentProcessor( - GrRecordingContext*, const GrColorInfo&) const { +GrFPResult SkColorFilter_Matrix::asFragmentProcessor(std::unique_ptr fp, + GrRecordingContext*, + const GrColorInfo&) const { switch (fDomain) { case Domain::kRGBA: - return GrColorMatrixFragmentProcessor::Make(fMatrix, - /* premulInput = */ true, - /* clampRGBOutput = */ true, - /* premulOutput = */ true); - case Domain::kHSLA: { - std::unique_ptr series[] = { - GrRGBToHSLFilterEffect::Make(), - GrColorMatrixFragmentProcessor::Make(fMatrix, - /* premulInput = */ false, - /* clampRGBOutput = */ false, - /* premulOutput = */ false), - GrHSLToRGBFilterEffect::Make(), - }; - return GrFragmentProcessor::RunInSeries(series, SK_ARRAY_COUNT(series)); - } + fp = GrColorMatrixFragmentProcessor::Make(std::move(fp), fMatrix, + /* premulInput = */ true, + /* clampRGBOutput = */ true, + /* premulOutput = */ true); + break; + + case Domain::kHSLA: + fp = GrRGBToHSLFilterEffect::Make(std::move(fp)); + fp = GrColorMatrixFragmentProcessor::Make(std::move(fp), fMatrix, + /* premulInput = */ false, + /* clampRGBOutput = */ false, + /* premulOutput = */ false); + fp = GrHSLToRGBFilterEffect::Make(std::move(fp)); + break; } - SkUNREACHABLE; + return GrFPSuccess(std::move(fp)); } #endif diff --git a/src/core/SkColorFilter_Matrix.h b/src/core/SkColorFilter_Matrix.h index a2a3e664e7180..5d8047b2fcf0f 100644 --- a/src/core/SkColorFilter_Matrix.h +++ b/src/core/SkColorFilter_Matrix.h @@ -8,20 +8,20 @@ #ifndef SkColorFilter_Matrix_DEFINED #define SkColorFilter_Matrix_DEFINED -#include "include/core/SkColorFilter.h" -#include "include/core/SkFlattenable.h" +#include "src/core/SkColorFilterBase.h" -class SkColorFilter_Matrix : public SkColorFilter { +class SkColorFilter_Matrix : public SkColorFilterBase { public: enum class Domain : uint8_t { kRGBA, kHSLA }; explicit SkColorFilter_Matrix(const float array[20], Domain); - uint32_t getFlags() const override; + uint32_t onGetFlags() const override; #if SK_SUPPORT_GPU - std::unique_ptr asFragmentProcessor(GrRecordingContext*, - const GrColorInfo&) const override; + bool colorFilterAcceptsInputFP() const override { return true; } + GrFPResult asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext*, const GrColorInfo&) const override; #endif static void RegisterFlattenables(); @@ -41,7 +41,7 @@ class SkColorFilter_Matrix : public SkColorFilter { uint16_t fFlags; Domain fDomain; - typedef SkColorFilter INHERITED; + typedef SkColorFilterBase INHERITED; }; #endif diff --git a/src/core/SkCoreBlitters.h b/src/core/SkCoreBlitters.h index 700ca64ab7ec2..18d468be63914 100644 --- a/src/core/SkCoreBlitters.h +++ b/src/core/SkCoreBlitters.h @@ -164,12 +164,10 @@ class SkRGB565_Shader_Blitter : public SkShaderBlitter { /////////////////////////////////////////////////////////////////////////////// -// Neither of these ever returns nullptr, but this first factory may return a SkNullBlitter. SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap&, const SkPaint&, const SkMatrixProvider& matrixProvider, SkArenaAlloc*, sk_sp clipShader); // Use this if you've pre-baked a shader pipeline, including modulating with paint alpha. -// This factory never returns an SkNullBlitter. SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap&, const SkPaint&, const SkRasterPipeline& shaderPipeline, bool shader_is_opaque, @@ -177,7 +175,7 @@ SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap&, const SkPaint&, SkBlitter* SkCreateSkVMBlitter(const SkPixmap&, const SkPaint&, - const SkMatrix& ctm, + const SkMatrixProvider&, SkArenaAlloc*, sk_sp clipShader); diff --git a/src/core/SkDeferredDisplayList.cpp b/src/core/SkDeferredDisplayList.cpp index 5f892241acd42..961bc00c68216 100644 --- a/src/core/SkDeferredDisplayList.cpp +++ b/src/core/SkDeferredDisplayList.cpp @@ -20,10 +20,12 @@ class SkSurfaceCharacterization; #endif SkDeferredDisplayList::SkDeferredDisplayList(const SkSurfaceCharacterization& characterization, + sk_sp targetProxy, sk_sp lazyProxyData) : fCharacterization(characterization) #if SK_SUPPORT_GPU - , fLazyProxyData(std::move(lazyProxyData)) + , fTargetProxy(std::move(targetProxy)) + , fLazyProxyData(std::move(lazyProxyData)) #endif { } diff --git a/src/core/SkDeferredDisplayListPriv.h b/src/core/SkDeferredDisplayListPriv.h index 271a69bea69d6..5c8ceb11cb5fe 100644 --- a/src/core/SkDeferredDisplayListPriv.h +++ b/src/core/SkDeferredDisplayListPriv.h @@ -22,6 +22,10 @@ class SkDeferredDisplayListPriv { return fDDL->fRenderTasks.count(); } + GrRenderTargetProxy* targetProxy() const { + return fDDL->fTargetProxy.get(); + } + const SkDeferredDisplayList::LazyProxyData* lazyProxyData() const { return fDDL->fLazyProxyData.get(); } diff --git a/src/core/SkDeferredDisplayListRecorder.cpp b/src/core/SkDeferredDisplayListRecorder.cpp index 1b28452780302..227bc15d95d8e 100644 --- a/src/core/SkDeferredDisplayListRecorder.cpp +++ b/src/core/SkDeferredDisplayListRecorder.cpp @@ -21,7 +21,7 @@ bool SkDeferredDisplayListRecorder::init() { return false; } SkCanvas* SkDeferredDisplayListRecorder::getCanvas() { return nullptr; } -std::unique_ptr SkDeferredDisplayListRecorder::detach() { return nullptr; } +sk_sp SkDeferredDisplayListRecorder::detach() { return nullptr; } sk_sp SkDeferredDisplayListRecorder::makePromiseTexture( const GrBackendFormat& backendFormat, @@ -97,6 +97,7 @@ SkDeferredDisplayListRecorder::~SkDeferredDisplayListRecorder() { bool SkDeferredDisplayListRecorder::init() { SkASSERT(fContext); + SkASSERT(!fTargetProxy); SkASSERT(!fLazyProxyData); SkASSERT(!fSurface); @@ -141,6 +142,9 @@ bool SkDeferredDisplayListRecorder::init() { GrInternalSurfaceFlags surfaceFlags = GrInternalSurfaceFlags::kNone; if (usesGLFBO0) { surfaceFlags |= GrInternalSurfaceFlags::kGLRTFBOIDIs0; + } else if (fCharacterization.sampleCount() > 1 && !caps->msaaResolvesAutomatically() && + fCharacterization.isTextureable()) { + surfaceFlags |= GrInternalSurfaceFlags::kRequiresManualMSAAResolve; } // FIXME: Why do we use GrMipMapped::kNo instead of SkSurfaceCharacterization::fIsMipMapped? static constexpr GrProxyProvider::TextureInfo kTextureInfo{GrMipMapped::kNo, @@ -152,7 +156,7 @@ bool SkDeferredDisplayListRecorder::init() { GrSwizzle readSwizzle = caps->getReadSwizzle(fCharacterization.backendFormat(), grColorType); - sk_sp proxy = proxyProvider->createLazyRenderTargetProxy( + fTargetProxy = proxyProvider->createLazyRenderTargetProxy( [lazyProxyData](GrResourceProvider* resourceProvider, const GrSurfaceProxy::LazySurfaceDesc&) { // The proxy backing the destination surface had better have been instantiated @@ -174,14 +178,14 @@ bool SkDeferredDisplayListRecorder::init() { fCharacterization.vulkanSecondaryCBCompatible(), GrSurfaceProxy::UseAllocator::kYes); - if (!proxy) { + if (!fTargetProxy) { return false; } GrSwizzle writeSwizzle = caps->getWriteSwizzle(fCharacterization.backendFormat(), grColorType); - GrSurfaceProxyView readView(proxy, fCharacterization.origin(), readSwizzle); - GrSurfaceProxyView writeView(std::move(proxy), fCharacterization.origin(), writeSwizzle); + GrSurfaceProxyView readView(fTargetProxy, fCharacterization.origin(), readSwizzle); + GrSurfaceProxyView writeView(fTargetProxy, fCharacterization.origin(), writeSwizzle); auto rtc = std::make_unique(fContext.get(), std::move(readView), std::move(writeView), grColorType, @@ -203,7 +207,7 @@ SkCanvas* SkDeferredDisplayListRecorder::getCanvas() { return fSurface->getCanvas(); } -std::unique_ptr SkDeferredDisplayListRecorder::detach() { +sk_sp SkDeferredDisplayListRecorder::detach() { if (!fContext) { return nullptr; } @@ -214,8 +218,9 @@ std::unique_ptr SkDeferredDisplayListRecorder::detach() { canvas->restoreToCount(0); } - auto ddl = std::unique_ptr( - new SkDeferredDisplayList(fCharacterization, std::move(fLazyProxyData))); + auto ddl = sk_sp(new SkDeferredDisplayList(fCharacterization, + std::move(fTargetProxy), + std::move(fLazyProxyData))); fContext->priv().moveRenderTasksToDDL(ddl.get()); diff --git a/src/core/SkDevice.cpp b/src/core/SkDevice.cpp index a4db0b965a151..148ab89599a7c 100644 --- a/src/core/SkDevice.cpp +++ b/src/core/SkDevice.cpp @@ -315,8 +315,7 @@ void SkBaseDevice::drawDrawable(SkDrawable* drawable, const SkMatrix* matrix, Sk /////////////////////////////////////////////////////////////////////////////////////////////////// -void SkBaseDevice::drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&, - SkImage*, const SkMatrix&) {} +void SkBaseDevice::drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&) {} sk_sp SkBaseDevice::makeSpecial(const SkBitmap&) { return nullptr; } sk_sp SkBaseDevice::makeSpecial(const SkImage*) { return nullptr; } sk_sp SkBaseDevice::snapSpecial(const SkIRect&, bool) { return nullptr; } diff --git a/src/core/SkDevice.h b/src/core/SkDevice.h index 58be51f985e30..430ab6620fcef 100644 --- a/src/core/SkDevice.h +++ b/src/core/SkDevice.h @@ -171,6 +171,9 @@ class SkBaseDevice : public SkRefCnt, public SkMatrixProvider { void clipRegion(const SkRegion& region, SkClipOp op) { this->onClipRegion(region, op); } + void replaceClip(const SkIRect& rect) { + this->onReplaceClip(rect); + } void androidFramework_setDeviceClipRestriction(SkIRect* mutableClipRestriction) { this->onSetDeviceClipRestriction(mutableClipRestriction); } @@ -204,6 +207,7 @@ class SkBaseDevice : public SkRefCnt, public SkMatrixProvider { virtual void onClipPath(const SkPath& path, SkClipOp, bool aa) {} virtual void onClipShader(sk_sp) {} virtual void onClipRegion(const SkRegion& deviceRgn, SkClipOp) {} + virtual void onReplaceClip(const SkIRect& rect) {} virtual void onSetDeviceClipRestriction(SkIRect* mutableClipRestriction) {} virtual bool onClipIsAA() const = 0; virtual bool onClipIsWideOpen() const = 0; @@ -295,8 +299,7 @@ class SkBaseDevice : public SkRefCnt, public SkMatrixProvider { virtual void drawDrawable(SkDrawable*, const SkMatrix*, SkCanvas*); - virtual void drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&, - SkImage* clipImage, const SkMatrix& clipMatrix); + virtual void drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&); virtual sk_sp makeSpecial(const SkBitmap&); virtual sk_sp makeSpecial(const SkImage*); // Get a view of the entire device's current contents as an image. @@ -314,6 +317,7 @@ class SkBaseDevice : public SkRefCnt, public SkMatrixProvider { /////////////////////////////////////////////////////////////////////////// virtual GrContext* context() const { return nullptr; } + virtual GrRecordingContext* recordingContext() const { return nullptr; } virtual sk_sp makeSurface(const SkImageInfo&, const SkSurfaceProps&); virtual bool onPeekPixels(SkPixmap*) { return false; } diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp index 99c8bd8284007..48858d1c9b243 100644 --- a/src/core/SkDraw.cpp +++ b/src/core/SkDraw.cpp @@ -511,7 +511,7 @@ void SkDraw::drawPoints(SkCanvas::PointMode mode, size_t count, break; } } - // couldn't take fast path so fall through! + [[fallthrough]]; // couldn't take fast path case SkCanvas::kPolygon_PointMode: { count -= 1; SkPath path; diff --git a/src/core/SkDraw_atlas.cpp b/src/core/SkDraw_atlas.cpp index fbc934690aa93..077486f926b46 100644 --- a/src/core/SkDraw_atlas.cpp +++ b/src/core/SkDraw_atlas.cpp @@ -101,24 +101,25 @@ void SkDraw::drawAtlas(const SkImage* atlas, const SkRSXform xform[], const SkRe isOpaque = false; } - auto blitter = SkCreateRasterPipelineBlitter(fDst, p, pipeline, isOpaque, &alloc, - fRC->clipShader()); - SkPath scratchPath; - - for (int i = 0; i < count; ++i) { - if (colors) { - SkColor4f c4 = SkColor4f::FromColor(colors[i]); - steps.apply(c4.vec()); - load_color(uniformCtx, c4.premul().vec()); - } + if (auto blitter = SkCreateRasterPipelineBlitter(fDst, p, pipeline, isOpaque, &alloc, + fRC->clipShader())) { + SkPath scratchPath; - SkMatrix mx; - mx.setRSXform(xform[i]); - mx.preTranslate(-textures[i].fLeft, -textures[i].fTop); - mx.postConcat(fMatrixProvider->localToDevice()); + for (int i = 0; i < count; ++i) { + if (colors) { + SkColor4f c4 = SkColor4f::FromColor(colors[i]); + steps.apply(c4.vec()); + load_color(uniformCtx, c4.premul().vec()); + } - if (updator->update(mx, nullptr)) { - fill_rect(mx, *fRC, textures[i], blitter, &scratchPath); + SkMatrix mx; + mx.setRSXform(xform[i]); + mx.preTranslate(-textures[i].fLeft, -textures[i].fTop); + mx.postConcat(fMatrixProvider->localToDevice()); + + if (updator->update(mx, nullptr)) { + fill_rect(mx, *fRC, textures[i], blitter, &scratchPath); + } } } } diff --git a/src/core/SkDraw_vertices.cpp b/src/core/SkDraw_vertices.cpp index fd36f3924955c..fe8d496f48eaa 100644 --- a/src/core/SkDraw_vertices.cpp +++ b/src/core/SkDraw_vertices.cpp @@ -330,14 +330,16 @@ void SkDraw::draw_fixed_vertices(const SkVertices* vertices, SkBlendMode bmode, p.setShader(sk_ref_sp(shader)); if (!textures) { // only tricolor shader - auto blitter = SkCreateRasterPipelineBlitter(fDst, p, *fMatrixProvider, outerAlloc, - this->fRC->clipShader()); - while (vertProc(&state)) { - if (triShader && - !triShader->update(ctmInv, positions, dstColors, state.f0, state.f1, state.f2)) { - continue; + if (auto blitter = SkCreateRasterPipelineBlitter(fDst, p, *fMatrixProvider, outerAlloc, + this->fRC->clipShader())) { + while (vertProc(&state)) { + if (triShader && + !triShader->update(ctmInv, positions, dstColors, + state.f0, state.f1, state.f2)) { + continue; + } + fill_triangle(state, blitter, *fRC, dev2, dev3); } - fill_triangle(state, blitter, *fRC, dev2, dev3); } return; } @@ -361,19 +363,20 @@ void SkDraw::draw_fixed_vertices(const SkVertices* vertices, SkBlendMode bmode, } } - auto blitter = SkCreateRasterPipelineBlitter(fDst, p, pipeline, isOpaque, outerAlloc, - fRC->clipShader()); - while (vertProc(&state)) { - if (triShader && !triShader->update(ctmInv, positions, dstColors, - state.f0, state.f1, state.f2)) { - continue; - } + if (auto blitter = SkCreateRasterPipelineBlitter(fDst, p, pipeline, isOpaque, outerAlloc, + fRC->clipShader())) { + while (vertProc(&state)) { + if (triShader && !triShader->update(ctmInv, positions, dstColors, + state.f0, state.f1, state.f2)) { + continue; + } - SkMatrix localM; - if ((textures == positions) || - (texture_to_matrix(state, positions, textures, &localM) && - updater->update(ctm, &localM))) { - fill_triangle(state, blitter, *fRC, dev2, dev3); + SkMatrix localM; + if ((textures == positions) || + (texture_to_matrix(state, positions, textures, &localM) && + updater->update(ctm, &localM))) { + fill_triangle(state, blitter, *fRC, dev2, dev3); + } } } } else { @@ -396,9 +399,10 @@ void SkDraw::draw_fixed_vertices(const SkVertices* vertices, SkBlendMode bmode, matrixProvider = preConcatMatrixProvider.init(*matrixProvider, localM); } - auto blitter = SkCreateRasterPipelineBlitter(fDst, p, *matrixProvider, &innerAlloc, - this->fRC->clipShader()); - fill_triangle(state, blitter, *fRC, dev2, dev3); + if (auto blitter = SkCreateRasterPipelineBlitter(fDst, p, *matrixProvider, &innerAlloc, + this->fRC->clipShader())) { + fill_triangle(state, blitter, *fRC, dev2, dev3); + } } } } diff --git a/src/core/SkFontMgr.cpp b/src/core/SkFontMgr.cpp index d42b07d38484e..c8282abd68d0f 100644 --- a/src/core/SkFontMgr.cpp +++ b/src/core/SkFontMgr.cpp @@ -118,11 +118,6 @@ SkTypeface* SkFontMgr::matchFamilyStyleCharacter(const char familyName[], const return this->onMatchFamilyStyleCharacter(familyName, style, bcp47, bcp47Count, character); } -SkTypeface* SkFontMgr::matchFaceStyle(const SkTypeface* face, - const SkFontStyle& fs) const { - return this->onMatchFaceStyle(face, fs); -} - sk_sp SkFontMgr::makeFromData(sk_sp data, int ttcIndex) const { if (nullptr == data) { return nullptr; @@ -164,10 +159,6 @@ sk_sp SkFontMgr::legacyMakeTypeface(const char familyName[], SkFontS return this->onLegacyMakeTypeface(familyName, style); } -sk_sp SkFontMgr::onMakeFromStreamArgs(std::unique_ptr stream, - const SkFontArguments& args) const { - return this->makeFromStream(std::move(stream), args.getCollectionIndex()); -} sk_sp SkFontMgr::onMakeFromFontData(std::unique_ptr data) const { return this->makeFromStream(data->detachStream(), data->getIndex()); } diff --git a/src/core/SkGlyphRunPainter.cpp b/src/core/SkGlyphRunPainter.cpp index 2fb75c56b6edf..c991238d40821 100644 --- a/src/core/SkGlyphRunPainter.cpp +++ b/src/core/SkGlyphRunPainter.cpp @@ -8,7 +8,7 @@ #include "src/core/SkGlyphRunPainter.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColorInfo.h" #include "src/gpu/GrContextPriv.h" @@ -16,8 +16,8 @@ #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/SkGr.h" #include "src/gpu/ops/GrAtlasTextOp.h" +#include "src/gpu/text/GrSDFTOptions.h" #include "src/gpu/text/GrTextBlobCache.h" -#include "src/gpu/text/GrTextContext.h" #endif #include "include/core/SkColorFilter.h" @@ -48,7 +48,7 @@ SkGlyphRunListPainter::SkGlyphRunListPainter(const SkSurfaceProps& props, , fColorType{colorType}, fScalerContextFlags{flags} , fStrikeCache{strikeCache} {} -// TODO: unify with code in GrTextContext.cpp +// TODO: unify with code in GrSDFTOptions.cpp static SkScalerContextFlags compute_scaler_context_flags(const SkColorSpace* cs) { // If we're doing linear blending, then we can disable the gamma hacks. // Otherwise, leave them on. In either case, we still want the contrast boost: @@ -141,7 +141,7 @@ void SkGlyphRunListPainter::processGlyphRunList(const SkGlyphRunList& glyphRunLi const SkMatrix& drawMatrix, const SkSurfaceProps& props, bool contextSupportsDistanceFieldText, - const GrTextContext::Options& options, + const GrSDFTOptions& options, SkGlyphRunPainterInterface* process) { SkPoint origin = glyphRunList.origin(); @@ -153,8 +153,8 @@ void SkGlyphRunListPainter::processGlyphRunList(const SkGlyphRunList& glyphRunLi const SkFont& runFont = glyphRun.font(); - bool useSDFT = GrTextContext::CanDrawAsDistanceFields( - runPaint, runFont, drawMatrix, props, contextSupportsDistanceFieldText, options); + bool useSDFT = options.canDrawAsDistanceFields( + runPaint, runFont, drawMatrix, props, contextSupportsDistanceFieldText); bool usePaths = useSDFT ? false : SkStrikeSpec::ShouldDrawAsPath(runPaint, runFont, drawMatrix); @@ -259,163 +259,6 @@ auto SkGlyphRunListPainter::ensureBuffers(const SkGlyphRunList& glyphRunList) -> return ScopedBuffers(this, size); } -#if SK_SUPPORT_GPU -// -- GrTextContext -------------------------------------------------------------------------------- -SkPMColor4f generate_filtered_color(const SkPaint& paint, const GrColorInfo& colorInfo) { - SkColor4f filteredColor = paint.getColor4f(); - if (auto* xform = colorInfo.colorSpaceXformFromSRGB()) { - filteredColor = xform->apply(filteredColor); - } - if (paint.getColorFilter() != nullptr) { - filteredColor = paint.getColorFilter()->filterColor4f(filteredColor, colorInfo.colorSpace(), - colorInfo.colorSpace()); - } - return filteredColor.premul(); -} - -void GrTextContext::drawGlyphRunList(GrRecordingContext* context, - GrTextTarget* target, - const GrClip* clip, - const SkMatrixProvider& matrixProvider, - const SkSurfaceProps& props, - const SkGlyphRunList& glyphRunList) const { - auto contextPriv = context->priv(); - // If we have been abandoned, then don't draw - if (contextPriv.abandoned()) { - return; - } - GrTextBlobCache* textBlobCache = contextPriv.getTextBlobCache(); - - // Get the first paint to use as the key paint. - const SkPaint& blobPaint = glyphRunList.paint(); - - const GrColorInfo& colorInfo = target->colorInfo(); - // This is the color the op will use to draw. - SkPMColor4f drawingColor = generate_filtered_color(blobPaint, colorInfo); - // When creating the a new blob, use the GrColor calculated from the drawingColor. - GrColor initialVertexColor = drawingColor.toBytes_RGBA(); - - SkPoint drawOrigin = glyphRunList.origin(); - - SkMaskFilterBase::BlurRec blurRec; - // It might be worth caching these things, but its not clear at this time - // TODO for animated mask filters, this will fill up our cache. We need a safeguard here - const SkMaskFilter* mf = blobPaint.getMaskFilter(); - bool canCache = glyphRunList.canCache() && !(blobPaint.getPathEffect() || - (mf && !as_MFB(mf)->asABlur(&blurRec))); - SkScalerContextFlags scalerContextFlags = ComputeScalerContextFlags(colorInfo); - - sk_sp cachedBlob; - GrTextBlob::Key key; - if (canCache) { - bool hasLCD = glyphRunList.anyRunsLCD(); - - // We canonicalize all non-lcd draws to use kUnknown_SkPixelGeometry - SkPixelGeometry pixelGeometry = hasLCD ? props.pixelGeometry() : kUnknown_SkPixelGeometry; - - // TODO we want to figure out a way to be able to use the canonical color on LCD text, - // see the note on ComputeCanonicalColor above. We pick a dummy value for LCD text to - // ensure we always match the same key - GrColor canonicalColor = hasLCD ? SK_ColorTRANSPARENT : - ComputeCanonicalColor(blobPaint, hasLCD); - - key.fPixelGeometry = pixelGeometry; - key.fUniqueID = glyphRunList.uniqueID(); - key.fStyle = blobPaint.getStyle(); - key.fHasBlur = SkToBool(mf); - key.fCanonicalColor = canonicalColor; - key.fScalerContextFlags = scalerContextFlags; - cachedBlob = textBlobCache->find(key); - } - - bool forceW = fOptions.fDistanceFieldVerticesAlwaysHaveW; - bool supportsSDFT = context->priv().caps()->shaderCaps()->supportsDistanceFieldText(); - SkGlyphRunListPainter* painter = target->glyphPainter(); - const SkMatrix& drawMatrix(matrixProvider.localToDevice()); - if (cachedBlob) { - if (cachedBlob->mustRegenerate(blobPaint, glyphRunList.anyRunsSubpixelPositioned(), - blurRec, drawMatrix, drawOrigin)) { - // We have to remake the blob because changes may invalidate our masks. - // TODO we could probably get away reuse most of the time if the pointer is unique, - // but we'd have to clear the subrun information - textBlobCache->remove(cachedBlob.get()); - cachedBlob = textBlobCache->makeCachedBlob(glyphRunList, key, blurRec, drawMatrix, - initialVertexColor, forceW); - - painter->processGlyphRunList( - glyphRunList, drawMatrix, props, supportsSDFT, fOptions, cachedBlob.get()); - } else { - textBlobCache->makeMRU(cachedBlob.get()); - } - } else { - if (canCache) { - cachedBlob = textBlobCache->makeCachedBlob(glyphRunList, key, blurRec, drawMatrix, - initialVertexColor, forceW); - } else { - cachedBlob = GrTextBlob::Make(glyphRunList, drawMatrix, initialVertexColor, forceW); - } - painter->processGlyphRunList( - glyphRunList, drawMatrix, props, supportsSDFT, fOptions, cachedBlob.get()); - } - - cachedBlob->insertOpsIntoTarget(target, props, blobPaint, drawingColor, clip, matrixProvider, - drawOrigin); -} - -#if GR_TEST_UTILS - -#include "src/gpu/GrRecordingContextPriv.h" -#include "src/gpu/GrRenderTargetContext.h" - -std::unique_ptr GrTextContext::createOp_TestingOnly(GrRecordingContext* context, - GrTextContext* textContext, - GrRenderTargetContext* rtc, - const SkPaint& skPaint, - const SkFont& font, - const SkMatrixProvider& mtxProvider, - const char* text, - int x, - int y) { - auto direct = context->priv().asDirectContext(); - if (!direct) { - return nullptr; - } - - static SkSurfaceProps surfaceProps(SkSurfaceProps::kLegacyFontHost_InitType); - - size_t textLen = (int)strlen(text); - - SkPMColor4f filteredColor = generate_filtered_color(skPaint, rtc->colorInfo()); - GrColor color = filteredColor.toBytes_RGBA(); - const SkMatrix& drawMatrix(mtxProvider.localToDevice()); - - auto drawOrigin = SkPoint::Make(x, y); - SkGlyphRunBuilder builder; - builder.drawTextUTF8(skPaint, font, text, textLen, drawOrigin); - - auto glyphRunList = builder.useGlyphRunList(); - sk_sp blob; - if (!glyphRunList.empty()) { - blob = GrTextBlob::Make(glyphRunList, drawMatrix, color, false); - SkGlyphRunListPainter* painter = rtc->textTarget()->glyphPainter(); - painter->processGlyphRunList( - glyphRunList, drawMatrix, surfaceProps, - context->priv().caps()->shaderCaps()->supportsDistanceFieldText(), - textContext->fOptions, blob.get()); - } - - return blob->firstSubRun()->makeOp(mtxProvider, - drawOrigin, - SkIRect::MakeEmpty(), - skPaint, - filteredColor, - surfaceProps, - rtc->textTarget()); -} - -#endif // GR_TEST_UTILS -#endif // SK_SUPPORT_GPU - SkGlyphRunListPainter::ScopedBuffers::ScopedBuffers(SkGlyphRunListPainter* painter, size_t size) : fPainter{painter} { fPainter->fDrawable.ensureSize(size); diff --git a/src/core/SkGlyphRunPainter.h b/src/core/SkGlyphRunPainter.h index 20fc2b06c4536..3394239533b0a 100644 --- a/src/core/SkGlyphRunPainter.h +++ b/src/core/SkGlyphRunPainter.h @@ -16,7 +16,7 @@ #include "src/core/SkTextBlobPriv.h" #if SK_SUPPORT_GPU -#include "src/gpu/text/GrTextContext.h" +#include "src/gpu/text/GrSDFTOptions.h" class GrColorInfo; class GrRenderTargetContext; #endif @@ -87,7 +87,7 @@ class SkGlyphRunListPainter { const SkMatrix& drawMatrix, const SkSurfaceProps& props, bool contextSupportsDistanceFieldText, - const GrTextContext::Options& options, + const GrSDFTOptions& options, SkGlyphRunPainterInterface* process); #endif // SK_SUPPORT_GPU diff --git a/src/core/SkGpuBlurUtils.cpp b/src/core/SkGpuBlurUtils.cpp index 2dadacc68e00e..4e45e624be47f 100644 --- a/src/core/SkGpuBlurUtils.cpp +++ b/src/core/SkGpuBlurUtils.cpp @@ -10,7 +10,7 @@ #include "include/core/SkRect.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp index 4694a8945503d..dbdfe30b525ad 100644 --- a/src/core/SkImageFilter.cpp +++ b/src/core/SkImageFilter.cpp @@ -23,7 +23,7 @@ #include "src/core/SkWriteBuffer.h" #if SK_SUPPORT_GPU #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrColorSpaceXform.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -113,7 +113,7 @@ bool SkImageFilter::asAColorFilter(SkColorFilter** filterPtr) const { if (!this->isColorFilterNode(filterPtr)) { return false; } - if (nullptr != this->getInput(0) || (*filterPtr)->affectsTransparentBlack()) { + if (nullptr != this->getInput(0) || as_CFB(*filterPtr)->affectsTransparentBlack()) { (*filterPtr)->unref(); return false; } @@ -230,14 +230,9 @@ skif::FilterResult SkImageFilter_Base::filterImage(const skif::Con result = this->onFilterImage(context); -#if SK_SUPPORT_GPU - if (context.gpuBacked() && result.image() && !result.image()->isTextureBacked()) { - // Keep the result on the GPU - this is still required for some - // image filters that don't support GPU in all cases - auto asTexture = result.image()->makeTextureImage(context.getContext()); - result = skif::FilterResult(std::move(asTexture), result.layerOrigin()); + if (context.gpuBacked()) { + SkASSERT(!result.image() || result.image()->isTextureBacked()); } -#endif if (context.cache()) { context.cache()->set(key, this, result); diff --git a/src/core/SkImageInfo.cpp b/src/core/SkImageInfo.cpp index 11789d10be3a1..81994fb6ef4db 100644 --- a/src/core/SkImageInfo.cpp +++ b/src/core/SkImageInfo.cpp @@ -90,7 +90,7 @@ bool SkColorTypeValidateAlphaType(SkColorType colorType, SkAlphaType alphaType, if (kUnpremul_SkAlphaType == alphaType) { alphaType = kPremul_SkAlphaType; } - // fall-through + [[fallthrough]]; case kARGB_4444_SkColorType: case kRGBA_8888_SkColorType: case kBGRA_8888_SkColorType: diff --git a/src/core/SkLegacyGpuBlurUtils.cpp b/src/core/SkLegacyGpuBlurUtils.cpp index 461da44cf2867..9c9a8655f0df8 100644 --- a/src/core/SkLegacyGpuBlurUtils.cpp +++ b/src/core/SkLegacyGpuBlurUtils.cpp @@ -10,7 +10,7 @@ #include "include/core/SkRect.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" diff --git a/src/core/SkLocalMatrixImageFilter.cpp b/src/core/SkLocalMatrixImageFilter.cpp index bb6dc3f13fa86..19ea376deb39c 100644 --- a/src/core/SkLocalMatrixImageFilter.cpp +++ b/src/core/SkLocalMatrixImageFilter.cpp @@ -53,3 +53,15 @@ SkIRect SkLocalMatrixImageFilter::onFilterBounds(const SkIRect& src, const SkMat MapDirection dir, const SkIRect* inputRect) const { return this->getInput(0)->filterBounds(src, SkMatrix::Concat(ctm, fLocalM), dir, inputRect); } + +SkRect SkLocalMatrixImageFilter::computeFastBounds(const SkRect& bounds) const { + // In order to match the behavior of onFilterBounds, we map 'bounds' by the inverse of our + // local matrix, pass that to our child, and then map the result by our local matrix. + SkMatrix localInv; + if (!fLocalM.invert(&localInv)) { + return this->getInput(0)->computeFastBounds(bounds); + } + + SkRect localBounds = localInv.mapRect(bounds); + return fLocalM.mapRect(this->getInput(0)->computeFastBounds(localBounds)); +} diff --git a/src/core/SkLocalMatrixImageFilter.h b/src/core/SkLocalMatrixImageFilter.h index f20773ca0a547..2a8db26155a8f 100644 --- a/src/core/SkLocalMatrixImageFilter.h +++ b/src/core/SkLocalMatrixImageFilter.h @@ -19,6 +19,8 @@ class SkLocalMatrixImageFilter : public SkImageFilter_Base { public: static sk_sp Make(const SkMatrix& localM, sk_sp input); + SkRect computeFastBounds(const SkRect&) const override; + protected: void flatten(SkWriteBuffer&) const override; sk_sp onFilterImage(const Context&, SkIPoint* offset) const override; diff --git a/src/core/SkMaskFilter.cpp b/src/core/SkMaskFilter.cpp index f408c01d90dd3..222a5943e1cb7 100644 --- a/src/core/SkMaskFilter.cpp +++ b/src/core/SkMaskFilter.cpp @@ -255,7 +255,7 @@ bool SkMaskFilterBase::filterPath(const SkPath& devPath, const SkMatrix& matrix, case kUnimplemented_FilterReturn: SkASSERT(nullptr == patch.fMask.fImage); - // fall through + // fall out break; } } diff --git a/src/core/SkModeColorFilter.cpp b/src/core/SkModeColorFilter.cpp index 1927c0f9dca7b..445d9c38726ed 100644 --- a/src/core/SkModeColorFilter.cpp +++ b/src/core/SkModeColorFilter.cpp @@ -38,12 +38,13 @@ bool SkModeColorFilter::onAsAColorMode(SkColor* color, SkBlendMode* mode) const return true; } -uint32_t SkModeColorFilter::getFlags() const { +uint32_t SkModeColorFilter::onGetFlags() const { uint32_t flags = 0; switch (fMode) { case SkBlendMode::kDst: //!< [Da, Dc] case SkBlendMode::kSrcATop: //!< [Da, Sc * Da + (1 - Sa) * Dc] flags |= kAlphaUnchanged_Flag; + break; default: break; } @@ -87,26 +88,39 @@ skvm::Color SkModeColorFilter::onProgram(skvm::Builder* p, skvm::Color c, #include "src/gpu/effects/GrXfermodeFragmentProcessor.h" #include "src/gpu/effects/generated/GrConstColorProcessor.h" -std::unique_ptr SkModeColorFilter::asFragmentProcessor( - GrRecordingContext*, const GrColorInfo& dstColorInfo) const { - if (SkBlendMode::kDst == fMode) { - return nullptr; +GrFPResult SkModeColorFilter::asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext*, + const GrColorInfo& dstColorInfo) const { + if (fMode == SkBlendMode::kDst) { + // If the blend mode is "dest," the blend color won't factor into it at all. + // We can return the input FP as-is. + return GrFPSuccess(std::move(inputFP)); } - auto constFP = GrConstColorProcessor::Make(SkColorToPMColor4f(fColor, dstColorInfo), - GrConstColorProcessor::InputMode::kIgnore); - auto fp = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(constFP), fMode); - if (!fp) { - return nullptr; + SkDEBUGCODE(const bool fpHasConstIO = !inputFP || inputFP->hasConstantOutputForConstantInput();) + + auto colorFP = GrConstColorProcessor::Make( + /*inputFP=*/nullptr, SkColorToPMColor4f(fColor, dstColorInfo), + GrConstColorProcessor::InputMode::kIgnore); + auto xferFP = GrXfermodeFragmentProcessor::Make( + std::move(colorFP), std::move(inputFP), fMode, + GrXfermodeFragmentProcessor::ComposeBehavior::kSkModeBehavior); + + if (xferFP == nullptr) { + // This is only expected to happen if the blend mode is "dest" and the input FP is null. + // Since we already did an early-out in the "dest" blend mode case, we shouldn't get here. + SkDEBUGFAIL("GrXfermodeFragmentProcessor::Make returned null unexpectedly"); + return GrFPFailure(nullptr); } -#ifdef SK_DEBUG + // With a solid color input this should always be able to compute the blended color - // (at least for coeff modes) - if ((unsigned)fMode <= (unsigned)SkBlendMode::kLastCoeffMode) { - SkASSERT(fp->hasConstantOutputForConstantInput()); - } -#endif - return fp; + // (at least for coeff modes). + // Occasionally, we even do better than we started; specifically, in "src" blend mode, we end up + // ditching the input FP entirely, which turns a non-constant operation into a constant one. + SkASSERT(fMode > SkBlendMode::kLastCoeffMode || + xferFP->hasConstantOutputForConstantInput() >= fpHasConstIO); + + return GrFPSuccess(std::move(xferFP)); } #endif diff --git a/src/core/SkModeColorFilter.h b/src/core/SkModeColorFilter.h index b1a48f6d2ca66..dc3ce4450a5d6 100644 --- a/src/core/SkModeColorFilter.h +++ b/src/core/SkModeColorFilter.h @@ -8,22 +8,24 @@ #ifndef SkModeColorFilter_DEFINED #define SkModeColorFilter_DEFINED -#include "include/core/SkColorFilter.h" -#include "include/core/SkFlattenable.h" +#include "src/core/SkColorFilterBase.h" -class SkModeColorFilter : public SkColorFilter { +class SkModeColorFilter : public SkColorFilterBase { public: static sk_sp Make(SkColor color, SkBlendMode mode) { return sk_sp(new SkModeColorFilter(color, mode)); } - uint32_t getFlags() const override; + uint32_t onGetFlags() const override; #if SK_SUPPORT_GPU - std::unique_ptr asFragmentProcessor(GrRecordingContext*, - const GrColorInfo&) const override; + bool colorFilterAcceptsInputFP() const override { return true; } + GrFPResult asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext*, const GrColorInfo&) const override; #endif + SK_FLATTENABLE_HOOKS(SkModeColorFilter) + protected: SkModeColorFilter(SkColor color, SkBlendMode mode); @@ -35,14 +37,12 @@ class SkModeColorFilter : public SkColorFilter { SkColorSpace*, skvm::Uniforms*, SkArenaAlloc*) const override; private: - SK_FLATTENABLE_HOOKS(SkModeColorFilter) - SkColor fColor; SkBlendMode fMode; friend class SkColorFilter; - typedef SkColorFilter INHERITED; + typedef SkColorFilterBase INHERITED; }; #endif diff --git a/src/core/SkOpts.cpp b/src/core/SkOpts.cpp index 08f758e552b9e..b847c3022a549 100644 --- a/src/core/SkOpts.cpp +++ b/src/core/SkOpts.cpp @@ -107,7 +107,6 @@ namespace SkOpts { // Each Init_foo() is defined in src/opts/SkOpts_foo.cpp. void Init_ssse3(); - void Init_sse41(); void Init_sse42(); void Init_avx(); void Init_hsw(); @@ -121,10 +120,6 @@ namespace SkOpts { if (SkCpu::Supports(SkCpu::SSSE3)) { Init_ssse3(); } #endif - #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSE41 - if (SkCpu::Supports(SkCpu::SSE41)) { Init_sse41(); } - #endif - #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSE42 if (SkCpu::Supports(SkCpu::SSE42)) { Init_sse42(); } #endif diff --git a/src/core/SkOpts_avx.cpp b/src/core/SkOpts_avx.cpp deleted file mode 100644 index 14283cbc10962..0000000000000 --- a/src/core/SkOpts_avx.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/core/SkOpts.h" - -#if defined(SK_CPU_X86) - - // Turn on AVX feature set. - #if defined(__clang__) - #pragma clang attribute push(__attribute__((target("avx"))), apply_to=function) - #elif defined(__GNUC__) - #pragma GCC push_options - #pragma GCC target("avx") - #endif - - // Let our code in *_opts.h know we want AVX features. - #undef SK_CPU_SSE_LEVEL - #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX - - #if defined(__clang__) && defined(_MSC_VER) - // clang-cl's immintrin.h is bizarrely annoying, not including the - // various foointrin.h unless the __FOO__ flag is also defined (i.e. - // you used command-line flags to set the features instead of attributes). - // MSVC itself doesn't work this way, nor does non-_MSC_VER clang. :/ - #define __SSE__ 1 - #define __SSE2__ 1 - #define __SSE3__ 1 - #define __SSSE3__ 1 - #define __SSE4_1__ 1 - #define __SSE4_2__ 1 - #define __AVX__ 1 - #endif - - #define SK_OPTS_NS avx - #include "src/opts/SkRasterPipeline_opts.h" - #include "src/opts/SkUtils_opts.h" - - namespace SkOpts { - void Init_avx() { - memset16 = SK_OPTS_NS::memset16; - memset32 = SK_OPTS_NS::memset32; - memset64 = SK_OPTS_NS::memset64; - - rect_memset16 = SK_OPTS_NS::rect_memset16; - rect_memset32 = SK_OPTS_NS::rect_memset32; - rect_memset64 = SK_OPTS_NS::rect_memset64; - - // TODO: maybe cut these stages to save code size? Almost everything is HSW these days. - #define M(st) stages_highp[SkRasterPipeline::st] = (StageFn)SK_OPTS_NS::st; - SK_RASTER_PIPELINE_STAGES(M) - just_return_highp = (StageFn)SK_OPTS_NS::just_return; - start_pipeline_highp = SK_OPTS_NS::start_pipeline; - #undef M - - #define M(st) stages_lowp[SkRasterPipeline::st] = (StageFn)SK_OPTS_NS::lowp::st; - SK_RASTER_PIPELINE_STAGES(M) - just_return_lowp = (StageFn)SK_OPTS_NS::lowp::just_return; - start_pipeline_lowp = SK_OPTS_NS::lowp::start_pipeline; - #undef M - } - } - - #if defined(__clang__) - #pragma clang attribute pop - #elif defined(__GNUC__) - #pragma GCC pop_options - #endif - -#endif//defined(SK_CPU_X86) diff --git a/src/core/SkOpts_crc32.cpp b/src/core/SkOpts_crc32.cpp deleted file mode 100644 index e8b0d5adcd727..0000000000000 --- a/src/core/SkOpts_crc32.cpp +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/core/SkOpts.h" - -#if defined(SK_CPU_ARM64) - - // Turn on CRC32 feature set. - #if defined(__clang__) - #pragma clang attribute push(__attribute__((target("crc"))), apply_to=function) - #elif defined(__GNUC__) - #pragma GCC push_options - #pragma GCC target("crc") - #endif - - // Let our code in *_opts.h know we want CRC32 features. - #define SK_ARM_HAS_CRC32 - - // Let the arm_acle.h headers know we will be using the CRC32 intrinsics. - #define __ARM_FEATURE_CRC32 1 - - #define SK_OPTS_NS crc32 - #include "src/opts/SkChecksum_opts.h" - - namespace SkOpts { - void Init_crc32() { - hash_fn = SK_OPTS_NS::hash_fn; - } - } - - #if defined(__clang__) - #pragma clang attribute pop - #elif defined(__GNUC__) - #pragma GCC pop_options - #endif - -#endif//defined(SK_CPU_ARM64) diff --git a/src/core/SkOpts_hsw.cpp b/src/core/SkOpts_hsw.cpp deleted file mode 100644 index c0356e065e34f..0000000000000 --- a/src/core/SkOpts_hsw.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/core/SkOpts.h" - -#if defined(SK_CPU_X86) - - // Turn on HSW feature set. - #if defined(__clang__) - #pragma clang attribute push(__attribute__((target("avx2,f16c,fma"))), apply_to=function) - #elif defined(__GNUC__) - #pragma GCC push_options - #pragma GCC target("avx2,f16c,fma") - #endif - - // Let our code in *_opts.h know we want HSW features. - #undef SK_CPU_SSE_LEVEL - #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_AVX2 - - #if defined(__clang__) && defined(_MSC_VER) - // clang-cl's immintrin.h is bizarrely annoying, not including the - // various foointrin.h unless the __FOO__ flag is also defined (i.e. - // you used command-line flags to set the features instead of attributes). - // MSVC itself doesn't work this way, nor does non-_MSC_VER clang. :/ - #define __SSE__ 1 - #define __SSE2__ 1 - #define __SSE3__ 1 - #define __SSSE3__ 1 - #define __SSE4_1__ 1 - #define __SSE4_2__ 1 - #define __AVX__ 1 - #define __F16C__ 1 - #define __AVX2__ 1 - #define __FMA__ 1 - #endif - - #define SK_OPTS_NS hsw - #include "src/core/SkCubicSolver.h" - #include "src/opts/SkBitmapProcState_opts.h" - #include "src/opts/SkBlitRow_opts.h" - #include "src/opts/SkRasterPipeline_opts.h" - #include "src/opts/SkSwizzler_opts.h" - #include "src/opts/SkUtils_opts.h" - #include "src/opts/SkVM_opts.h" - - namespace SkOpts { - void Init_hsw() { - blit_row_color32 = SK_OPTS_NS::blit_row_color32; - blit_row_s32a_opaque = SK_OPTS_NS::blit_row_s32a_opaque; - - S32_alpha_D32_filter_DX = SK_OPTS_NS::S32_alpha_D32_filter_DX; - - cubic_solver = SK_OPTS_NS::cubic_solver; - - RGBA_to_BGRA = SK_OPTS_NS::RGBA_to_BGRA; - RGBA_to_rgbA = SK_OPTS_NS::RGBA_to_rgbA; - RGBA_to_bgrA = SK_OPTS_NS::RGBA_to_bgrA; - RGB_to_RGB1 = SK_OPTS_NS::RGB_to_RGB1; - RGB_to_BGR1 = SK_OPTS_NS::RGB_to_BGR1; - gray_to_RGB1 = SK_OPTS_NS::gray_to_RGB1; - grayA_to_RGBA = SK_OPTS_NS::grayA_to_RGBA; - grayA_to_rgbA = SK_OPTS_NS::grayA_to_rgbA; - inverted_CMYK_to_RGB1 = SK_OPTS_NS::inverted_CMYK_to_RGB1; - inverted_CMYK_to_BGR1 = SK_OPTS_NS::inverted_CMYK_to_BGR1; - - #define M(st) stages_highp[SkRasterPipeline::st] = (StageFn)SK_OPTS_NS::st; - SK_RASTER_PIPELINE_STAGES(M) - just_return_highp = (StageFn)SK_OPTS_NS::just_return; - start_pipeline_highp = SK_OPTS_NS::start_pipeline; - #undef M - - #define M(st) stages_lowp[SkRasterPipeline::st] = (StageFn)SK_OPTS_NS::lowp::st; - SK_RASTER_PIPELINE_STAGES(M) - just_return_lowp = (StageFn)SK_OPTS_NS::lowp::just_return; - start_pipeline_lowp = SK_OPTS_NS::lowp::start_pipeline; - #undef M - - interpret_skvm = SK_OPTS_NS::interpret_skvm; - } - } - - #if defined(__clang__) - #pragma clang attribute pop - #elif defined(__GNUC__) - #pragma GCC pop_options - #endif - -#endif//defined(SK_CPU_X86) diff --git a/src/core/SkOpts_skx.cpp b/src/core/SkOpts_skx.cpp deleted file mode 100644 index 9341406bc2cdc..0000000000000 --- a/src/core/SkOpts_skx.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/core/SkOpts.h" - -#if defined(SK_CPU_X86) - - // Turn on SKX feature set. - #if defined(__clang__) - #pragma clang attribute push(__attribute__((target("avx512f,avx512dq,avx512cd,avx512bw,avx512vl"))), apply_to=function) - #elif defined(__GNUC__) - #pragma GCC push_options - #pragma GCC target("avx512f,avx512dq,avx512cd,avx512bw,avx512vl") - #endif - - // Let our code in *_opts.h know we want SKX features. - #undef SK_CPU_SSE_LEVEL - #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SKX - - #if defined(__clang__) && defined(_MSC_VER) - // clang-cl's immintrin.h is bizarrely annoying, not including the - // various foointrin.h unless the __FOO__ flag is also defined (i.e. - // you used command-line flags to set the features instead of attributes). - // MSVC itself doesn't work this way, nor does non-_MSC_VER clang. :/ - #define __SSE__ 1 - #define __SSE2__ 1 - #define __SSE3__ 1 - #define __SSSE3__ 1 - #define __SSE4_1__ 1 - #define __SSE4_2__ 1 - #define __AVX__ 1 - #define __F16C__ 1 - #define __AVX2__ 1 - #define __FMA__ 1 - #define __AVX512F__ 1 - #define __AVX512DQ__ 1 - #define __AVX512CD__ 1 - #define __AVX512BW__ 1 - #define __AVX512VL__ 1 - #endif - - #define SK_OPTS_NS skx - #include "src/opts/SkBlitRow_opts.h" - #include "src/opts/SkVM_opts.h" - - namespace SkOpts { - void Init_skx() { - blit_row_s32a_opaque = SK_OPTS_NS::blit_row_s32a_opaque; - interpret_skvm = SK_OPTS_NS::interpret_skvm; - } - } - - #if defined(__clang__) - #pragma clang attribute pop - #elif defined(__GNUC__) - #pragma GCC pop_options - #endif - -#endif//defined(SK_CPU_X86) diff --git a/src/core/SkOpts_sse41.cpp b/src/core/SkOpts_sse41.cpp deleted file mode 100644 index a6ff3ae140afd..0000000000000 --- a/src/core/SkOpts_sse41.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/core/SkOpts.h" - -#if defined(SK_CPU_X86) - - // Turn on SSE4.1 feature set. - #if defined(__clang__) - #pragma clang attribute push(__attribute__((target("sse4.1"))), apply_to=function) - #elif defined(__GNUC__) - #pragma GCC push_options - #pragma GCC target("sse4.1") - #endif - - // Let our code in *_opts.h know we want SSE 4.1 features. - #undef SK_CPU_SSE_LEVEL - #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE41 - - #if defined(__clang__) && defined(_MSC_VER) - // clang-cl's immintrin.h is bizarrely annoying, not including the - // various foointrin.h unless the __FOO__ flag is also defined (i.e. - // you used command-line flags to set the features instead of attributes). - // MSVC itself doesn't work this way, nor does non-_MSC_VER clang. :/ - #define __SSE__ 1 - #define __SSE2__ 1 - #define __SSE3__ 1 - #define __SSSE3__ 1 - #define __SSE4_1__ 1 - #endif - - #define SK_OPTS_NS sse41 - #include "src/opts/SkBlitRow_opts.h" - #include "src/opts/SkRasterPipeline_opts.h" - - // TODO: maybe cut this whole file to save code size? Almost everything is HSW these days. - namespace SkOpts { - void Init_sse41() { - blit_row_color32 = SK_OPTS_NS::blit_row_color32; - blit_row_s32a_opaque = SK_OPTS_NS::blit_row_s32a_opaque; - - #define M(st) stages_highp[SkRasterPipeline::st] = (StageFn)SK_OPTS_NS::st; - SK_RASTER_PIPELINE_STAGES(M) - just_return_highp = (StageFn)SK_OPTS_NS::just_return; - start_pipeline_highp = SK_OPTS_NS::start_pipeline; - #undef M - - #define M(st) stages_lowp[SkRasterPipeline::st] = (StageFn)SK_OPTS_NS::lowp::st; - SK_RASTER_PIPELINE_STAGES(M) - just_return_lowp = (StageFn)SK_OPTS_NS::lowp::just_return; - start_pipeline_lowp = SK_OPTS_NS::lowp::start_pipeline; - #undef M - } - } - - #if defined(__clang__) - #pragma clang attribute pop - #elif defined(__GNUC__) - #pragma GCC pop_options - #endif - -#endif//defined(SK_CPU_X86) - diff --git a/src/core/SkOpts_sse42.cpp b/src/core/SkOpts_sse42.cpp deleted file mode 100644 index 46f085198103b..0000000000000 --- a/src/core/SkOpts_sse42.cpp +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/core/SkOpts.h" - -#if defined(SK_CPU_X86) - - // Turn on SSE4.2 feature set. - #if defined(__clang__) - #pragma clang attribute push(__attribute__((target("sse4.2"))), apply_to=function) - #elif defined(__GNUC__) - #pragma GCC push_options - #pragma GCC target("sse4.2") - #endif - - // Let our code in *_opts.h know we want SSE 4.2 features. - #undef SK_CPU_SSE_LEVEL - #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSE42 - - #if defined(__clang__) && defined(_MSC_VER) - // clang-cl's immintrin.h is bizarrely annoying, not including the - // various foointrin.h unless the __FOO__ flag is also defined (i.e. - // you used command-line flags to set the features instead of attributes). - // MSVC itself doesn't work this way, nor does non-_MSC_VER clang. :/ - #define __SSE__ 1 - #define __SSE2__ 1 - #define __SSE3__ 1 - #define __SSSE3__ 1 - #define __SSE4_1__ 1 - #define __SSE4_2__ 1 - #endif - - #define SK_OPTS_NS sse42 - #include "src/opts/SkChecksum_opts.h" - - namespace SkOpts { - void Init_sse42() { - hash_fn = SK_OPTS_NS::hash_fn; - } - } - - #if defined(__clang__) - #pragma clang attribute pop - #elif defined(__GNUC__) - #pragma GCC pop_options - #endif - -#endif//defined(SK_CPU_X86) diff --git a/src/core/SkOpts_ssse3.cpp b/src/core/SkOpts_ssse3.cpp deleted file mode 100644 index 70095460f3fe3..0000000000000 --- a/src/core/SkOpts_ssse3.cpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2020 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/core/SkOpts.h" - -#if defined(SK_CPU_X86) - - // Turn on SSSE3 feature set. - #if defined(__clang__) - #pragma clang attribute push(__attribute__((target("ssse3"))), apply_to=function) - #elif defined(__GNUC__) - #pragma GCC push_options - #pragma GCC target("ssse3") - #endif - - // Let our code in *_opts.h know we want SSSE3 features. - #undef SK_CPU_SSE_LEVEL - #define SK_CPU_SSE_LEVEL SK_CPU_SSE_LEVEL_SSSE3 - - #if defined(__clang__) && defined(_MSC_VER) - // clang-cl's immintrin.h is bizarrely annoying, not including the - // various foointrin.h unless the __FOO__ flag is also defined (i.e. - // you used command-line flags to set the features instead of attributes). - // MSVC itself doesn't work this way, nor does non-_MSC_VER clang. :/ - #define __SSE__ 1 - #define __SSE2__ 1 - #define __SSE3__ 1 - #define __SSSE3__ 1 - #endif - - #define SK_OPTS_NS ssse3 - #include "src/opts/SkBitmapProcState_opts.h" - #include "src/opts/SkBlitMask_opts.h" - #include "src/opts/SkSwizzler_opts.h" - #include "src/opts/SkXfermode_opts.h" - - namespace SkOpts { - void Init_ssse3() { - RGBA_to_BGRA = SK_OPTS_NS::RGBA_to_BGRA; - RGBA_to_rgbA = SK_OPTS_NS::RGBA_to_rgbA; - RGBA_to_bgrA = SK_OPTS_NS::RGBA_to_bgrA; - RGB_to_RGB1 = SK_OPTS_NS::RGB_to_RGB1; - RGB_to_BGR1 = SK_OPTS_NS::RGB_to_BGR1; - gray_to_RGB1 = SK_OPTS_NS::gray_to_RGB1; - grayA_to_RGBA = SK_OPTS_NS::grayA_to_RGBA; - grayA_to_rgbA = SK_OPTS_NS::grayA_to_rgbA; - inverted_CMYK_to_RGB1 = SK_OPTS_NS::inverted_CMYK_to_RGB1; - inverted_CMYK_to_BGR1 = SK_OPTS_NS::inverted_CMYK_to_BGR1; - - // TODO: maybe cut these three to save code size? Almost everything is HSW these days. - create_xfermode = SK_OPTS_NS::create_xfermode; - blit_mask_d32_a8 = SK_OPTS_NS::blit_mask_d32_a8; - S32_alpha_D32_filter_DX = SK_OPTS_NS::S32_alpha_D32_filter_DX; - } - } - - #if defined(__clang__) - #pragma clang attribute pop - #elif defined(__GNUC__) - #pragma GCC pop_options - #endif - -#endif//defined(SK_CPU_X86) diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp index 11661b71b56f3..2451fcefe6ba9 100644 --- a/src/core/SkPaint.cpp +++ b/src/core/SkPaint.cpp @@ -7,7 +7,6 @@ #include "include/core/SkPaint.h" -#include "include/core/SkColorFilter.h" #include "include/core/SkData.h" #include "include/core/SkGraphics.h" #include "include/core/SkImageFilter.h" @@ -19,6 +18,7 @@ #include "include/core/SkTypeface.h" #include "include/private/SkMutex.h" #include "include/private/SkTo.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkColorSpaceXformSteps.h" #include "src/core/SkDraw.h" @@ -517,7 +517,7 @@ const SkRect& SkPaint::doComputeFastBounds(const SkRect& origSrc, // return true if the filter exists, and may affect alpha static bool affects_alpha(const SkColorFilter* cf) { - return cf && !(cf->getFlags() & SkColorFilter::kAlphaUnchanged_Flag); + return cf && !as_CFB(cf)->isAlphaUnchanged(); } // return true if the filter exists, and may affect alpha diff --git a/src/core/SkPaintPriv.cpp b/src/core/SkPaintPriv.cpp index 4bf0002358630..ee54f0cc41ad3 100644 --- a/src/core/SkPaintPriv.cpp +++ b/src/core/SkPaintPriv.cpp @@ -5,8 +5,8 @@ * found in the LICENSE file. */ -#include "include/core/SkColorFilter.h" #include "include/core/SkPaint.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkPaintPriv.h" #include "src/core/SkXfermodePriv.h" @@ -15,7 +15,7 @@ static bool changes_alpha(const SkPaint& paint) { SkColorFilter* cf = paint.getColorFilter(); - return cf && !(cf->getFlags() & SkColorFilter::kAlphaUnchanged_Flag); + return cf && !as_CFB(cf)->isAlphaUnchanged(); } bool SkPaintPriv::Overwrites(const SkPaint* paint, ShaderOverrideOpacity overrideOpacity) { diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp index 09c061de51a7f..0122601937862 100644 --- a/src/core/SkPath.cpp +++ b/src/core/SkPath.cpp @@ -148,6 +148,15 @@ SkPath::SkPath() fIsVolatile = false; } +SkPath::SkPath(sk_sp pr, SkPathFillType ft, bool isVolatile) + : fPathRef(std::move(pr)) + , fLastMoveToIndex(INITIAL_LASTMOVETOINDEX_VALUE) + , fConvexity((uint8_t)SkPathConvexityType::kUnknown) + , fFirstDirection(SkPathPriv::kUnknown_FirstDirection) + , fFillType((unsigned)ft) + , fIsVolatile(isVolatile) +{} + void SkPath::resetFields() { //fPathRef is assumed to have been emptied by the caller. fLastMoveToIndex = INITIAL_LASTMOVETOINDEX_VALUE; @@ -1815,7 +1824,7 @@ SkPath::Verb SkPath::Iter::next(SkPoint ptsParam[4]) { break; case kConic_Verb: fConicWeights += 1; - // fall-through + [[fallthrough]]; case kQuad_Verb: pts[0] = this->cons_moveTo(); memcpy(&pts[1], srcPts, 2 * sizeof(SkPoint)); @@ -2351,7 +2360,7 @@ void ContourIter::next() { break; case SkPath::kConic_Verb: fCurrConicWeight += 1; - // fall-through + [[fallthrough]]; case SkPath::kQuad_Verb: ptCount += 2; break; @@ -3323,6 +3332,80 @@ bool SkPath::IsCubicDegenerate(const SkPoint& p1, const SkPoint& p2, ////////////////////////////////////////////////////////////////////////////////////////////////// +struct PathInfo { + bool valid; + int points, weights; + unsigned segmentMask; +}; + +static PathInfo validate_verbs(const uint8_t vbs[], int verbCount) { + PathInfo info = {false, 0, 0, 0}; + + bool needMove = true; + bool invalid = false; + for (int i = 0; i < verbCount; ++i) { + switch ((SkPathVerb)vbs[i]) { + case SkPathVerb::kMove: + needMove = false; + info.points += 1; + break; + case SkPathVerb::kLine: + invalid |= needMove; + info.segmentMask |= kLine_SkPathSegmentMask; + info.points += 1; + break; + case SkPathVerb::kQuad: + invalid |= needMove; + info.segmentMask |= kQuad_SkPathSegmentMask; + info.points += 2; + break; + case SkPathVerb::kConic: + invalid |= needMove; + info.segmentMask |= kConic_SkPathSegmentMask; + info.points += 2; + info.weights += 1; + break; + case SkPathVerb::kCubic: + invalid |= needMove; + info.segmentMask |= kCubic_SkPathSegmentMask; + info.points += 3; + break; + case SkPathVerb::kClose: + invalid |= needMove; + needMove = true; + break; + default: + invalid = true; + break; + } + } + info.valid = !invalid; + return info; +} + +SkPath SkPath::Make(const SkPoint pts[], int pointCount, + const uint8_t vbs[], int verbCount, + const SkScalar ws[], int wCount, + SkPathFillType ft, bool isVolatile) { + if (verbCount <= 0) { + return SkPath(); + } + + const auto info = validate_verbs(vbs, verbCount); + if (!info.valid || info.points > pointCount || info.weights > wCount) { + SkDEBUGFAIL("invalid verbs and number of points/weights"); + return SkPath(); + } + + return SkPath(sk_sp(new SkPathRef(SkTDArray(pts, info.points), + SkTDArray(vbs, verbCount), + SkTDArray(ws, info.weights), + info.segmentMask)), + ft, isVolatile); +} + +////////////////////////////////////////////////////////////////////////////////////////////////// + bool SkPathPriv::IsRectContour(const SkPath& path, bool allowPartial, int* currVerb, const SkPoint** ptsPtr, bool* isClosed, SkPathDirection* direction, SkRect* rect) { @@ -3348,6 +3431,7 @@ bool SkPathPriv::IsRectContour(const SkPath& path, bool allowPartial, int* currV savePts = pts; autoClose = true; insertClose = false; + [[fallthrough]]; case SkPath::kLine_Verb: { if (SkPath::kClose_Verb != verb) { lastPt = pts; diff --git a/src/core/SkPathBuilder.cpp b/src/core/SkPathBuilder.cpp new file mode 100644 index 0000000000000..c13af425bd79d --- /dev/null +++ b/src/core/SkPathBuilder.cpp @@ -0,0 +1,283 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkPathBuilder.h" +#include "include/core/SkRRect.h" +#include "include/private/SkPathRef.h" +#include "include/private/SkSafe32.h" + +SkPathBuilder::SkPathBuilder() { + this->reset(); +} + +SkPathBuilder::~SkPathBuilder() { +} + +SkPathBuilder& SkPathBuilder::reset() { + fPts.reset(); + fVerbs.reset(); + fConicWeights.reset(); + fFillType = SkPathFillType::kWinding; + fIsVolatile = false; + + // these are internal state + + fSegmentMask = 0; + fLastMovePoint = {0, 0}; + fNeedsMoveVerb = true; + + return *this; +} + +void SkPathBuilder::incReserve(int extraPtCount, int extraVbCount) { + fPts.setReserve( Sk32_sat_add(fPts.count(), extraPtCount)); + fVerbs.setReserve(Sk32_sat_add(fVerbs.count(), extraVbCount)); +} + +/* + * Some old behavior in SkPath -- should we keep it? + * + * After each edit (i.e. adding a verb) + this->setConvexityType(SkPathConvexityType::kUnknown); + this->setFirstDirection(SkPathPriv::kUnknown_FirstDirection); + */ + +SkPathBuilder& SkPathBuilder::moveTo(SkPoint pt) { + fPts.push_back(pt); + fVerbs.push_back((uint8_t)SkPathVerb::kMove); + + fLastMovePoint = pt; + fNeedsMoveVerb = false; + return *this; +} + +SkPathBuilder& SkPathBuilder::lineTo(SkPoint pt) { + this->ensureMove(); + + fPts.push_back(pt); + fVerbs.push_back((uint8_t)SkPathVerb::kLine); + + fSegmentMask |= kLine_SkPathSegmentMask; + return *this; +} + +SkPathBuilder& SkPathBuilder::quadTo(SkPoint pt1, SkPoint pt2) { + this->ensureMove(); + + SkPoint* p = fPts.append(2); + p[0] = pt1; + p[1] = pt2; + fVerbs.push_back((uint8_t)SkPathVerb::kQuad); + + fSegmentMask |= kQuad_SkPathSegmentMask; + return *this; +} + +SkPathBuilder& SkPathBuilder::conicTo(SkPoint pt1, SkPoint pt2, SkScalar w) { + this->ensureMove(); + + SkPoint* p = fPts.append(2); + p[0] = pt1; + p[1] = pt2; + fVerbs.push_back((uint8_t)SkPathVerb::kConic); + fConicWeights.push_back(w); + + fSegmentMask |= kConic_SkPathSegmentMask; + return *this; +} + +SkPathBuilder& SkPathBuilder::cubicTo(SkPoint pt1, SkPoint pt2, SkPoint pt3) { + this->ensureMove(); + + SkPoint* p = fPts.append(3); + p[0] = pt1; + p[1] = pt2; + p[2] = pt3; + fVerbs.push_back((uint8_t)SkPathVerb::kCubic); + + fSegmentMask |= kCubic_SkPathSegmentMask; + return *this; +} + +SkPathBuilder& SkPathBuilder::close() { + this->ensureMove(); + + fVerbs.push_back((uint8_t)SkPathVerb::kClose); + + // fLastMovePoint stays where it is -- the previous moveTo + fNeedsMoveVerb = true; + return *this; +} + +SkPath SkPathBuilder::snapshot() { + return SkPath(sk_sp(new SkPathRef(fPts, fVerbs, fConicWeights, fSegmentMask)), + fFillType, fIsVolatile); +} + +SkPath SkPathBuilder::detach() { + auto path = SkPath(sk_sp(new SkPathRef(std::move(fPts), + std::move(fVerbs), + std::move(fConicWeights), + fSegmentMask)), + fFillType, fIsVolatile); + this->reset(); + return path; +} + +/////////////////////////////////////////////////////////////////////////////////////////// + +namespace { + template class PointIterator { + public: + PointIterator(SkPathDirection dir, unsigned startIndex) + : fCurrent(startIndex % N) + , fAdvance(dir == SkPathDirection::kCW ? 1 : N - 1) + {} + + const SkPoint& current() const { + SkASSERT(fCurrent < N); + return fPts[fCurrent]; + } + + const SkPoint& next() { + fCurrent = (fCurrent + fAdvance) % N; + return this->current(); + } + + protected: + SkPoint fPts[N]; + + private: + unsigned fCurrent; + unsigned fAdvance; + }; + + class RectPointIterator : public PointIterator<4> { + public: + RectPointIterator(const SkRect& rect, SkPathDirection dir, unsigned startIndex) + : PointIterator(dir, startIndex) { + + fPts[0] = SkPoint::Make(rect.fLeft, rect.fTop); + fPts[1] = SkPoint::Make(rect.fRight, rect.fTop); + fPts[2] = SkPoint::Make(rect.fRight, rect.fBottom); + fPts[3] = SkPoint::Make(rect.fLeft, rect.fBottom); + } + }; + + class OvalPointIterator : public PointIterator<4> { + public: + OvalPointIterator(const SkRect& oval, SkPathDirection dir, unsigned startIndex) + : PointIterator(dir, startIndex) { + + const SkScalar cx = oval.centerX(); + const SkScalar cy = oval.centerY(); + + fPts[0] = SkPoint::Make(cx, oval.fTop); + fPts[1] = SkPoint::Make(oval.fRight, cy); + fPts[2] = SkPoint::Make(cx, oval.fBottom); + fPts[3] = SkPoint::Make(oval.fLeft, cy); + } + }; + + class RRectPointIterator : public PointIterator<8> { + public: + RRectPointIterator(const SkRRect& rrect, SkPathDirection dir, unsigned startIndex) + : PointIterator(dir, startIndex) + { + const SkRect& bounds = rrect.getBounds(); + const SkScalar L = bounds.fLeft; + const SkScalar T = bounds.fTop; + const SkScalar R = bounds.fRight; + const SkScalar B = bounds.fBottom; + + fPts[0] = SkPoint::Make(L + rrect.radii(SkRRect::kUpperLeft_Corner).fX, T); + fPts[1] = SkPoint::Make(R - rrect.radii(SkRRect::kUpperRight_Corner).fX, T); + fPts[2] = SkPoint::Make(R, T + rrect.radii(SkRRect::kUpperRight_Corner).fY); + fPts[3] = SkPoint::Make(R, B - rrect.radii(SkRRect::kLowerRight_Corner).fY); + fPts[4] = SkPoint::Make(R - rrect.radii(SkRRect::kLowerRight_Corner).fX, B); + fPts[5] = SkPoint::Make(L + rrect.radii(SkRRect::kLowerLeft_Corner).fX, B); + fPts[6] = SkPoint::Make(L, B - rrect.radii(SkRRect::kLowerLeft_Corner).fY); + fPts[7] = SkPoint::Make(L, T + rrect.radii(SkRRect::kUpperLeft_Corner).fY); + } + }; +} // anonymous namespace + + +SkPathBuilder& SkPathBuilder::addRect(const SkRect& rect, SkPathDirection dir, unsigned index) { + const int kPts = 4; // moveTo + 3 lines + const int kVerbs = 5; // moveTo + 3 lines + close + this->incReserve(kPts, kVerbs); + + RectPointIterator iter(rect, dir, index); + + this->moveTo(iter.current()); + this->lineTo(iter.next()); + this->lineTo(iter.next()); + this->lineTo(iter.next()); + return this->close(); +} + +SkPathBuilder& SkPathBuilder::addOval(const SkRect& oval, SkPathDirection dir, unsigned index) { + const int kPts = 9; // moveTo + 4 conics(2 pts each) + const int kVerbs = 6; // moveTo + 4 conics + close + this->incReserve(kPts, kVerbs); + + OvalPointIterator ovalIter(oval, dir, index); + RectPointIterator rectIter(oval, dir, index + (dir == SkPathDirection::kCW ? 0 : 1)); + + // The corner iterator pts are tracking "behind" the oval/radii pts. + + this->moveTo(ovalIter.current()); + for (unsigned i = 0; i < 4; ++i) { + this->conicTo(rectIter.next(), ovalIter.next(), SK_ScalarRoot2Over2); + } + return this->close(); +} + +SkPathBuilder& SkPathBuilder::addRRect(const SkRRect& rrect, SkPathDirection dir, unsigned index) { + const SkRect& bounds = rrect.getBounds(); + + if (rrect.isRect() || rrect.isEmpty()) { + // degenerate(rect) => radii points are collapsing + this->addRect(bounds, dir, (index + 1) / 2); + } else if (rrect.isOval()) { + // degenerate(oval) => line points are collapsing + this->addOval(bounds, dir, index / 2); + } else { + // we start with a conic on odd indices when moving CW vs. even indices when moving CCW + const bool startsWithConic = ((index & 1) == (dir == SkPathDirection::kCW)); + const SkScalar weight = SK_ScalarRoot2Over2; + + const int kVerbs = startsWithConic + ? 9 // moveTo + 4x conicTo + 3x lineTo + close + : 10; // moveTo + 4x lineTo + 4x conicTo + close + this->incReserve(kVerbs); + + RRectPointIterator rrectIter(rrect, dir, index); + // Corner iterator indices follow the collapsed radii model, + // adjusted such that the start pt is "behind" the radii start pt. + const unsigned rectStartIndex = index / 2 + (dir == SkPathDirection::kCW ? 0 : 1); + RectPointIterator rectIter(bounds, dir, rectStartIndex); + + this->moveTo(rrectIter.current()); + if (startsWithConic) { + for (unsigned i = 0; i < 3; ++i) { + this->conicTo(rectIter.next(), rrectIter.next(), weight); + this->lineTo(rrectIter.next()); + } + this->conicTo(rectIter.next(), rrectIter.next(), weight); + // final lineTo handled by close(). + } else { + for (unsigned i = 0; i < 4; ++i) { + this->lineTo(rrectIter.next()); + this->conicTo(rectIter.next(), rrectIter.next(), weight); + } + } + this->close(); + } + return *this; +} diff --git a/src/core/SkPathRef.cpp b/src/core/SkPathRef.cpp index 68c8970b07abb..dca2b329d8976 100644 --- a/src/core/SkPathRef.cpp +++ b/src/core/SkPathRef.cpp @@ -394,10 +394,12 @@ SkPoint* SkPathRef::growForRepeatedVerb(int /*SkPath::Verb*/ verb, break; case SkPath::kDone_Verb: SkDEBUGFAIL("growForRepeatedVerb called for kDone"); - // fall through + pCnt = 0; + break; default: SkDEBUGFAIL("default should not be reached"); pCnt = 0; + break; } fBoundsIsDirty = true; // this also invalidates fIsFinite @@ -444,10 +446,12 @@ SkPoint* SkPathRef::growForVerb(int /* SkPath::Verb*/ verb, SkScalar weight) { break; case SkPath::kDone_Verb: SkDEBUGFAIL("growForVerb called for kDone"); - // fall through + pCnt = 0; + break; default: SkDEBUGFAIL("default is not reached"); pCnt = 0; + break; } fSegmentMask |= mask; @@ -596,7 +600,7 @@ uint8_t SkPathRef::Iter::next(SkPoint pts[4]) { break; case SkPath::kConic_Verb: fConicWeights += 1; - // fall-through + [[fallthrough]]; case SkPath::kQuad_Verb: pts[0] = srcPts[-1]; pts[1] = srcPts[0]; diff --git a/src/core/SkPath_serial.cpp b/src/core/SkPath_serial.cpp index b1d85f451cd2c..694ce77315cd5 100644 --- a/src/core/SkPath_serial.cpp +++ b/src/core/SkPath_serial.cpp @@ -211,7 +211,7 @@ size_t SkPath::readFromMemory_EQ4Or5(const void* storage, size_t length) { case SerializationType::kRRect: return this->readAsRRect(storage, length); case SerializationType::kGeneral: - break; // fall through + break; // fall out default: return 0; } diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp index e041ba64f0c9e..dbfb7aa69cb04 100644 --- a/src/core/SkPicture.cpp +++ b/src/core/SkPicture.cpp @@ -185,7 +185,7 @@ sk_sp SkPicture::MakeFromStream(SkStream* stream, const SkDeserialPro } return procs.fPictureProc(data->data(), size, procs.fPictureCtx); } - default: // fall through to error return + default: // fall out to error return break; } return nullptr; diff --git a/src/core/SkPictureData.cpp b/src/core/SkPictureData.cpp index c4ae9a002ee64..611c5f2b9f086 100644 --- a/src/core/SkPictureData.cpp +++ b/src/core/SkPictureData.cpp @@ -315,7 +315,12 @@ bool SkPictureData::parseStreamTag(SkStream* stream, case SK_PICT_TYPEFACE_TAG: { fTFPlayback.setCount(size); for (uint32_t i = 0; i < size; ++i) { - sk_sp tf(SkTypeface::MakeDeserialize(stream)); + sk_sp tf; + if (procs.fTypefaceProc) { + tf = procs.fTypefaceProc(&stream, sizeof(stream), procs.fTypefaceCtx); + } else { + tf = SkTypeface::MakeDeserialize(stream); + } if (!tf.get()) { // failed to deserialize // fTFPlayback asserts it never has a null, so we plop in // the default here. diff --git a/src/core/SkPictureData.h b/src/core/SkPictureData.h index 25c9a7acc4bb5..f820ca7a15868 100644 --- a/src/core/SkPictureData.h +++ b/src/core/SkPictureData.h @@ -18,7 +18,6 @@ class SkData; class SkPictureRecord; -class SkReader32; struct SkSerialProcs; class SkStream; class SkWStream; diff --git a/src/core/SkPictureFlat.h b/src/core/SkPictureFlat.h index 2f551f2066538..4bb87e7f0bfaf 100644 --- a/src/core/SkPictureFlat.h +++ b/src/core/SkPictureFlat.h @@ -132,8 +132,8 @@ enum SaveLayerRecFlatFlags { SAVELAYERREC_HAS_PAINT = 1 << 1, SAVELAYERREC_HAS_BACKDROP = 1 << 2, SAVELAYERREC_HAS_FLAGS = 1 << 3, - SAVELAYERREC_HAS_CLIPMASK = 1 << 4, - SAVELAYERREC_HAS_CLIPMATRIX = 1 << 5, + SAVELAYERREC_HAS_CLIPMASK_OBSOLETE = 1 << 4, // 6/13/2020 + SAVELAYERREC_HAS_CLIPMATRIX_OBSOLETE = 1 << 5, // 6/13/2020 }; enum SaveBehindFlatFlags { diff --git a/src/core/SkPictureImageGenerator.cpp b/src/core/SkPictureImageGenerator.cpp index fac6c89ca29f7..d262bb27bae87 100644 --- a/src/core/SkPictureImageGenerator.cpp +++ b/src/core/SkPictureImageGenerator.cpp @@ -91,7 +91,7 @@ bool SkPictureImageGenerator::onGetPixels(const SkImageInfo& info, void* pixels, /////////////////////////////////////////////////////////////////////////////////////////////////// #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrRecordingContextPriv.h" GrSurfaceProxyView SkPictureImageGenerator::onGenerateTexture(GrRecordingContext* ctx, diff --git a/src/core/SkPicturePlayback.cpp b/src/core/SkPicturePlayback.cpp index d2a6fafa1053d..9d7209297aedc 100644 --- a/src/core/SkPicturePlayback.cpp +++ b/src/core/SkPicturePlayback.cpp @@ -602,7 +602,6 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader, } break; case SAVE_LAYER_SAVELAYERREC: { SkCanvas::SaveLayerRec rec(nullptr, nullptr, nullptr, 0); - SkMatrix clipMatrix; const uint32_t flatFlags = reader->readInt(); SkRect bounds; if (flatFlags & SAVELAYERREC_HAS_BOUNDS) { @@ -620,17 +619,12 @@ void SkPicturePlayback::handleOp(SkReadBuffer* reader, if (flatFlags & SAVELAYERREC_HAS_FLAGS) { rec.fSaveLayerFlags = reader->readInt(); } - if (flatFlags & SAVELAYERREC_HAS_CLIPMASK) { -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - rec.fClipMask = -#endif - fPictureData->getImage(reader); - } - if (flatFlags & SAVELAYERREC_HAS_CLIPMATRIX) { - reader->readMatrix(&clipMatrix); -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - rec.fClipMatrix = &clipMatrix; -#endif + if (flatFlags & SAVELAYERREC_HAS_CLIPMASK_OBSOLETE) { + (void)fPictureData->getImage(reader); + } + if (flatFlags & SAVELAYERREC_HAS_CLIPMATRIX_OBSOLETE) { + SkMatrix clipMatrix_ignored; + reader->readMatrix(&clipMatrix_ignored); } BREAK_ON_READ_ERROR(reader); diff --git a/src/core/SkPicturePriv.h b/src/core/SkPicturePriv.h index 16f0e42e1c248..67cb931ba3e82 100644 --- a/src/core/SkPicturePriv.h +++ b/src/core/SkPicturePriv.h @@ -76,6 +76,7 @@ class SkPicturePriv { // V73: Use SkColor4f in per-edge AA quad API // V74: MorphologyImageFilter internal radius is SkScaler // V75: SkVertices switched from unsafe use of SkReader32 to SkReadBuffer (like everything else) + // V76: Add filtering enum to ImageShader enum Version { kTileModeInBlurImageFilter_Version = 56, @@ -98,10 +99,11 @@ class SkPicturePriv { kEdgeAAQuadColor4f_Version = 73, kMorphologyTakesScalar_Version = 74, kVerticesUseReadBuffer_Version = 75, + kFilteringInImageShader_Version = 76, // Only SKPs within the min/current picture version range (inclusive) can be read. kMin_Version = kTileModeInBlurImageFilter_Version, - kCurrent_Version = kVerticesUseReadBuffer_Version + kCurrent_Version = kFilteringInImageShader_Version }; static_assert(kMin_Version <= 62, "Remove kFontAxes_bad from SkFontDescriptor.cpp"); diff --git a/src/core/SkPictureRecord.cpp b/src/core/SkPictureRecord.cpp index 574c051d67115..50ffb99079b92 100644 --- a/src/core/SkPictureRecord.cpp +++ b/src/core/SkPictureRecord.cpp @@ -129,16 +129,6 @@ void SkPictureRecord::recordSaveLayer(const SaveLayerRec& rec) { flatFlags |= SAVELAYERREC_HAS_FLAGS; size += sizeof(uint32_t); } -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - if (rec.fClipMask) { - flatFlags |= SAVELAYERREC_HAS_CLIPMASK; - size += sizeof(uint32_t); // clip image index - } - if (rec.fClipMatrix) { - flatFlags |= SAVELAYERREC_HAS_CLIPMATRIX; - size += SkMatrixPriv::WriteToMemory(*rec.fClipMatrix, nullptr); - } -#endif const size_t initialOffset = this->addDraw(SAVE_LAYER_SAVELAYERREC, &size); this->addInt(flatFlags); @@ -157,14 +147,6 @@ void SkPictureRecord::recordSaveLayer(const SaveLayerRec& rec) { if (flatFlags & SAVELAYERREC_HAS_FLAGS) { this->addInt(rec.fSaveLayerFlags); } -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - if (flatFlags & SAVELAYERREC_HAS_CLIPMASK) { - this->addImage(rec.fClipMask); - } - if (flatFlags & SAVELAYERREC_HAS_CLIPMATRIX) { - this->addMatrix(*rec.fClipMatrix); - } -#endif this->validate(initialOffset, size); } diff --git a/src/core/SkPixmap.cpp b/src/core/SkPixmap.cpp index 49ba422871888..0364a32fb867b 100644 --- a/src/core/SkPixmap.cpp +++ b/src/core/SkPixmap.cpp @@ -243,6 +243,7 @@ bool SkPixmap::scalePixels(const SkPixmap& actualDst, SkFilterQuality quality) c SkTileMode::kClamp, SkTileMode::kClamp, &scale, + (SkImageShader::FilterEnum)quality, clampAsIfUnpremul); sk_sp surface = SkSurface::MakeRasterDirect(dst.info(), diff --git a/src/core/SkRasterClipStack.h b/src/core/SkRasterClipStack.h index bdcd7b50a19a5..26148c9d1b145 100644 --- a/src/core/SkRasterClipStack.h +++ b/src/core/SkRasterClipStack.h @@ -128,6 +128,10 @@ class SkRasterClipStack : SkNoncopyable { this->validate(); } + void replaceClip(const SkIRect& rect) { + this->writable_rc().setRect(rect); + } + void setDeviceClipRestriction(SkIRect* mutableClipRestriction) { this->writable_rc().setDeviceClipRestriction(mutableClipRestriction); } diff --git a/src/core/SkRasterPipelineBlitter.cpp b/src/core/SkRasterPipelineBlitter.cpp index b7df7c867487f..5c664644f337d 100644 --- a/src/core/SkRasterPipelineBlitter.cpp +++ b/src/core/SkRasterPipelineBlitter.cpp @@ -6,13 +6,13 @@ */ #include "include/core/SkColor.h" -#include "include/core/SkColorFilter.h" #include "include/core/SkPaint.h" #include "include/core/SkShader.h" #include "include/private/SkTo.h" #include "src/core/SkArenaAlloc.h" #include "src/core/SkBlendModePriv.h" #include "src/core/SkBlitter.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkColorSpaceXformSteps.h" #include "src/core/SkMatrixProvider.h" @@ -90,13 +90,7 @@ SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap& dst, const SkMatrixProvider& matrixProvider, SkArenaAlloc* alloc, sk_sp clipShader) { - // For legacy to keep working, we need to sometimes still distinguish null dstCS from sRGB. -#if 0 - SkColorSpace* dstCS = dst.colorSpace() ? dst.colorSpace() - : sk_srgb_singleton(); -#else SkColorSpace* dstCS = dst.colorSpace(); -#endif SkColorType dstCT = dst.colorType(); SkColor4f paintColor = paint.getColor4f(); SkColorSpaceXformSteps(sk_srgb_singleton(), kUnpremul_SkAlphaType, @@ -129,8 +123,8 @@ SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap& dst, std::move(clipShader)); } - // The shader has opted out of drawing anything. - return alloc->make(); + // The shader can't draw with SkRasterPipeline. + return nullptr; } SkBlitter* SkCreateRasterPipelineBlitter(const SkPixmap& dst, @@ -190,8 +184,8 @@ SkBlitter* SkRasterPipelineBlitter::Create(const SkPixmap& dst, SkStageRec rec = { colorPipeline, alloc, dst.colorType(), dst.colorSpace(), paint, nullptr, matrixProvider }; - colorFilter->appendStages(rec, is_opaque); - is_opaque = is_opaque && (colorFilter->getFlags() & SkColorFilter::kAlphaUnchanged_Flag); + as_CFB(colorFilter)->appendStages(rec, is_opaque); + is_opaque = is_opaque && as_CFB(colorFilter)->isAlphaUnchanged(); } #if defined(SK_LATE_DITHER) diff --git a/src/core/SkReadBuffer.cpp b/src/core/SkReadBuffer.cpp index c7e26df8d4d92..61867776ca51e 100644 --- a/src/core/SkReadBuffer.cpp +++ b/src/core/SkReadBuffer.cpp @@ -17,8 +17,6 @@ #include "src/core/SkReadBuffer.h" #include "src/core/SkSafeMath.h" -#ifndef SK_DISABLE_READBUFFER - namespace { // This generator intentionally should always fail on all attempts to get its pixels, // simulating a bad or empty codec stream. @@ -37,38 +35,18 @@ namespace { } // anonymous namespace - -SkReadBuffer::SkReadBuffer() { - fVersion = 0; - - fTFArray = nullptr; - fTFCount = 0; - - fFactoryArray = nullptr; - fFactoryCount = 0; -} - -SkReadBuffer::SkReadBuffer(const void* data, size_t size) { - fVersion = 0; - this->setMemory(data, size); - - fTFArray = nullptr; - fTFCount = 0; - - fFactoryArray = nullptr; - fFactoryCount = 0; -} - void SkReadBuffer::setMemory(const void* data, size_t size) { this->validate(IsPtrAlign4(data) && (SkAlign4(size) == size)); if (!fError) { - fReader.setMemory(data, size); + fBase = fCurr = (const char*)data; + fStop = fBase + size; } } + void SkReadBuffer::setInvalid() { if (!fError) { // When an error is found, send the read cursor to the end of the stream - fReader.skip(fReader.available()); + fCurr = fStop; fError = true; } } @@ -76,13 +54,13 @@ void SkReadBuffer::setInvalid() { const void* SkReadBuffer::skip(size_t size) { size_t inc = SkAlign4(size); this->validate(inc >= size); - const void* addr = fReader.peek(); - this->validate(IsPtrAlign4(addr) && fReader.isAvailable(inc)); + const void* addr = fCurr; + this->validate(IsPtrAlign4(addr) && this->isAvailable(inc)); if (fError) { return nullptr; } - fReader.skip(size); + fCurr += inc; return addr; } @@ -107,14 +85,22 @@ SkColor SkReadBuffer::readColor() { int32_t SkReadBuffer::readInt() { const size_t inc = sizeof(int32_t); - this->validate(IsPtrAlign4(fReader.peek()) && fReader.isAvailable(inc)); - return fError ? 0 : fReader.readInt(); + if (!this->validate(IsPtrAlign4(fCurr) && this->isAvailable(inc))) { + return 0; + } + int32_t value = *((const int32_t*)fCurr); + fCurr += inc; + return value; } SkScalar SkReadBuffer::readScalar() { const size_t inc = sizeof(SkScalar); - this->validate(IsPtrAlign4(fReader.peek()) && fReader.isAvailable(inc)); - return fError ? 0 : fReader.readScalar(); + if (!this->validate(IsPtrAlign4(fCurr) && this->isAvailable(inc))) { + return 0; + } + SkScalar value = *((const SkScalar*)fCurr); + fCurr += inc; + return value; } uint32_t SkReadBuffer::readUInt() { @@ -126,11 +112,11 @@ int32_t SkReadBuffer::read32() { } uint8_t SkReadBuffer::peekByte() { - if (fReader.available() <= 0) { + if (this->available() <= 0) { fError = true; return 0; } - return *((uint8_t*) fReader.peek()); + return *((uint8_t*)fCurr); } bool SkReadBuffer::readPad32(void* buffer, size_t bytes) { @@ -182,7 +168,7 @@ void SkReadBuffer::readPoint3(SkPoint3* point) { void SkReadBuffer::readMatrix(SkMatrix* matrix) { size_t size = 0; if (this->isValid()) { - size = SkMatrixPriv::ReadFromMemory(matrix, fReader.peek(), fReader.available()); + size = SkMatrixPriv::ReadFromMemory(matrix, fCurr, this->available()); (void)this->validate((SkAlign4(size) == size) && (0 != size)); } if (!this->isValid()) { @@ -204,15 +190,20 @@ void SkReadBuffer::readRect(SkRect* rect) { } void SkReadBuffer::readRRect(SkRRect* rrect) { - if (!this->validate(fReader.readRRect(rrect))) { - rrect->setEmpty(); + size_t size = 0; + if (!fError) { + size = rrect->readFromMemory(fCurr, this->available()); + if (!this->validate((SkAlign4(size) == size) && (0 != size))) { + rrect->setEmpty(); + } } + (void)this->skip(size); } void SkReadBuffer::readRegion(SkRegion* region) { size_t size = 0; if (!fError) { - size = region->readFromMemory(fReader.peek(), fReader.available()); + size = region->readFromMemory(fCurr, this->available()); if (!this->validate((SkAlign4(size) == size) && (0 != size))) { region->setEmpty(); } @@ -223,7 +214,7 @@ void SkReadBuffer::readRegion(SkRegion* region) { void SkReadBuffer::readPath(SkPath* path) { size_t size = 0; if (!fError) { - size = path->readFromMemory(fReader.peek(), fReader.available()); + size = path->readFromMemory(fCurr, this->available()); if (!this->validate((SkAlign4(size) == size) && (0 != size))) { path->reset(); } @@ -261,9 +252,18 @@ bool SkReadBuffer::readScalarArray(SkScalar* values, size_t size) { return this->readArray(values, size, sizeof(SkScalar)); } +const void* SkReadBuffer::skipByteArray(size_t* size) { + const uint32_t count = this->readUInt(); + const void* buf = this->skip(count); + if (size) { + *size = this->isValid() ? count : 0; + } + return buf; +} + sk_sp SkReadBuffer::readByteArrayAsData() { size_t numBytes = this->getArrayCount(); - if (!this->validate(fReader.isAvailable(numBytes))) { + if (!this->validate(this->isAvailable(numBytes))) { return nullptr; } @@ -276,8 +276,10 @@ sk_sp SkReadBuffer::readByteArrayAsData() { uint32_t SkReadBuffer::getArrayCount() { const size_t inc = sizeof(uint32_t); - fError = fError || !IsPtrAlign4(fReader.peek()) || !fReader.isAvailable(inc); - return fError ? 0 : *(uint32_t*)fReader.peek(); + if (!this->validate(IsPtrAlign4(fCurr) && this->isAvailable(inc))) { + return 0; + } + return *((uint32_t*)fCurr); } /* Format: @@ -424,10 +426,10 @@ SkFlattenable* SkReadBuffer::readFlattenable(SkFlattenable::Type ft) { sk_sp obj; uint32_t sizeRecorded = this->read32(); if (factory) { - size_t offset = fReader.offset(); + size_t offset = this->offset(); obj = (*factory)(*this); // check that we read the amount we expected - size_t sizeRead = fReader.offset() - offset; + size_t sizeRead = this->offset() - offset; if (sizeRecorded != sizeRead) { this->validate(false); return nullptr; @@ -438,7 +440,7 @@ SkFlattenable* SkReadBuffer::readFlattenable(SkFlattenable::Type ft) { } } else { // we must skip the remaining data - fReader.skip(sizeRecorded); + this->skip(sizeRecorded); } if (!this->isValid()) { return nullptr; @@ -461,5 +463,3 @@ int32_t SkReadBuffer::checkInt(int32_t min, int32_t max) { SkFilterQuality SkReadBuffer::checkFilterQuality() { return this->checkRange(kNone_SkFilterQuality, kLast_SkFilterQuality); } - -#endif // #ifndef SK_DISABLE_READBUFFER diff --git a/src/core/SkReadBuffer.h b/src/core/SkReadBuffer.h index 0bc91a09e0abc..59be7fc70dca5 100644 --- a/src/core/SkReadBuffer.h +++ b/src/core/SkReadBuffer.h @@ -8,7 +8,6 @@ #ifndef SkReadBuffer_DEFINED #define SkReadBuffer_DEFINED -#include "include/core/SkColorFilter.h" #include "include/core/SkDrawLooper.h" #include "include/core/SkFont.h" #include "include/core/SkImageFilter.h" @@ -16,23 +15,26 @@ #include "include/core/SkPathEffect.h" #include "include/core/SkPicture.h" #include "include/core/SkRefCnt.h" +#include "include/core/SkScalar.h" #include "include/core/SkSerialProcs.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkMaskFilterBase.h" #include "src/core/SkPaintPriv.h" #include "src/core/SkPicturePriv.h" -#include "src/core/SkReader32.h" #include "src/core/SkWriteBuffer.h" #include "src/shaders/SkShaderBase.h" class SkData; class SkImage; -#ifndef SK_DISABLE_READBUFFER - class SkReadBuffer { public: - SkReadBuffer(); - SkReadBuffer(const void* data, size_t size); + SkReadBuffer() = default; + SkReadBuffer(const void* data, size_t size) { + this->setMemory(data, size); + } + + void setMemory(const void*, size_t); /** * Returns true IFF the version is older than the specified version. @@ -50,12 +52,12 @@ class SkReadBuffer { fVersion = version; } - size_t size() const { return fReader.size(); } - size_t offset() const { return fReader.offset(); } - bool eof() { return fReader.eof(); } + size_t size() const { return fStop - fBase; } + size_t offset() const { return fCurr - fBase; } + bool eof() { return fCurr >= fStop; } const void* skip(size_t size); const void* skip(size_t count, size_t size); // does safe multiply - size_t available() const { return fReader.available(); } + size_t available() const { return fStop - fCurr; } template const T* skipT() { return static_cast(this->skip(sizeof(T))); @@ -106,7 +108,7 @@ class SkReadBuffer { template sk_sp readFlattenable() { return sk_sp((T*)this->readFlattenable(T::GetFlattenableType())); } - sk_sp readColorFilter() { return this->readFlattenable(); } + sk_sp readColorFilter() { return this->readFlattenable(); } sk_sp readDrawLooper() { return this->readFlattenable(); } sk_sp readImageFilter() { return this->readFlattenable(); } sk_sp readMaskFilter() { return this->readFlattenable(); } @@ -124,6 +126,8 @@ class SkReadBuffer { bool readPointArray(SkPoint* points, size_t size); bool readScalarArray(SkScalar* values, size_t size); + const void* skipByteArray(size_t* size); + sk_sp readByteArrayAsData(); // helpers to get info about arrays and binary data @@ -170,7 +174,7 @@ class SkReadBuffer { */ template bool validateCanReadN(size_t n) { - return this->validate(n <= (fReader.available() / sizeof(T))); + return this->validate(n <= (this->available() / sizeof(T))); } bool isValid() const { return !fError; } @@ -196,20 +200,23 @@ class SkReadBuffer { void setInvalid(); bool readArray(void* value, size_t size, size_t elementSize); - void setMemory(const void*, size_t); + bool isAvailable(size_t size) const { return size <= this->available(); } - SkReader32 fReader; + // These are always 4-byte aligned + const char* fCurr = nullptr; // current position within buffer + const char* fStop = nullptr; // end of buffer + const char* fBase = nullptr; // beginning of buffer // Only used if we do not have an fFactoryArray. SkTHashMap fFlattenableDict; - int fVersion; + int fVersion = 0; - sk_sp* fTFArray; - int fTFCount; + sk_sp* fTFArray = nullptr; + int fTFCount = 0; - SkFlattenable::Factory* fFactoryArray; - int fFactoryCount; + SkFlattenable::Factory* fFactoryArray = nullptr; + int fFactoryCount = 0; SkDeserialProcs fProcs; @@ -220,102 +227,4 @@ class SkReadBuffer { bool fError = false; }; -#else // #ifndef SK_DISABLE_READBUFFER - -class SkReadBuffer { -public: - SkReadBuffer() {} - SkReadBuffer(const void*, size_t) {} - - bool isVersionLT(SkPicturePriv::Version) const { return false; } - uint32_t getVersion() const { return 0xffffffff; } - void setVersion(int) {} - - size_t size() const { return 0; } - size_t offset() const { return 0; } - bool eof() { return true; } - size_t available() const { return 0; } - - const void* skip(size_t) { return nullptr; } - const void* skip(size_t, size_t) { return nullptr; } - template const T* skipT() { return nullptr; } - template const T* skipT(size_t) { return nullptr; } - - bool readBool() { return 0; } - SkColor readColor() { return 0; } - int32_t readInt() { return 0; } - SkScalar readScalar() { return 0; } - uint32_t readUInt() { return 0; } - int32_t read32() { return 0; } - - template T read32LE(T max) { return max; } - - uint8_t peekByte() { return 0; } - - void readColor4f(SkColor4f* out) { *out = SkColor4f{0,0,0,0}; } - void readPoint (SkPoint* out) { *out = SkPoint{0,0}; } - void readPoint3 (SkPoint3* out) { *out = SkPoint3{0,0,0}; } - void readMatrix (SkMatrix* out) { *out = SkMatrix::I(); } - void readIRect (SkIRect* out) { *out = SkIRect{0,0,0,0}; } - void readRect (SkRect* out) { *out = SkRect{0,0,0,0}; } - void readRRect (SkRRect* out) { *out = SkRRect(); } - void readRegion (SkRegion* out) { *out = SkRegion(); } - void readString (SkString* out) { *out = SkString(); } - void readPath (SkPath* out) { *out = SkPath(); } - SkReadPaintResult readPaint (SkPaint* out, SkFont* font) { - *out = SkPaint(); - if (font) { - *font = SkFont(); - } - return kFailed_ReadPaint; - } - - SkPoint readPoint() { return {0,0}; } - - SkFlattenable* readFlattenable(SkFlattenable::Type) { return nullptr; } - - template sk_sp readFlattenable() { return nullptr; } - sk_sp readColorFilter() { return nullptr; } - sk_sp readDrawLooper() { return nullptr; } - sk_sp readImageFilter() { return nullptr; } - sk_sp readMaskFilter() { return nullptr; } - sk_sp readPathEffect() { return nullptr; } - sk_sp readShader() { return nullptr; } - - bool readPad32 (void*, size_t) { return false; } - bool readByteArray (void*, size_t) { return false; } - bool readColorArray (SkColor*, size_t) { return false; } - bool readColor4fArray(SkColor4f*, size_t) { return false; } - bool readIntArray (int32_t*, size_t) { return false; } - bool readPointArray (SkPoint*, size_t) { return false; } - bool readScalarArray (SkScalar*, size_t) { return false; } - - sk_sp readByteArrayAsData() { return nullptr; } - uint32_t getArrayCount() { return 0; } - - sk_sp readImage() { return nullptr; } - sk_sp readTypeface() { return nullptr; } - - bool validate(bool) { return false; } - template bool validateCanReadN(size_t) { return false; } - bool isValid() const { return false; } - bool validateIndex(int, int) { return false; } - - int32_t checkInt(int min, int) { return min; } - template T checkRange(T min, T) { return min; } - - SkFilterQuality checkFilterQuality() { return SkFilterQuality::kNone_SkFilterQuality; } - - void setTypefaceArray(sk_sp[], int) {} - void setFactoryPlayback(SkFlattenable::Factory[], int) {} - void setDeserialProcs(const SkDeserialProcs&) {} - - const SkDeserialProcs& getDeserialProcs() const { - static const SkDeserialProcs procs; - return procs; - } -}; - -#endif // #ifndef SK_DISABLE_READBUFFER - #endif // SkReadBuffer_DEFINED diff --git a/src/core/SkReader32.h b/src/core/SkReader32.h deleted file mode 100644 index ff2b820de6d7b..0000000000000 --- a/src/core/SkReader32.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2008 The Android Open Source Project - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - - -#ifndef SkReader32_DEFINED -#define SkReader32_DEFINED - -#include "include/core/SkData.h" -#include "include/core/SkMatrix.h" -#include "include/core/SkPath.h" -#include "include/core/SkRRect.h" -#include "include/core/SkRegion.h" -#include "include/core/SkScalar.h" -#include "include/private/SkNoncopyable.h" - -class SkString; - -class SkReader32 : SkNoncopyable { -public: - SkReader32() : fCurr(nullptr), fStop(nullptr), fBase(nullptr) {} - SkReader32(const void* data, size_t size) { - this->setMemory(data, size); - } - - void setMemory(const void* data, size_t size) { - SkASSERT(ptr_align_4(data)); - SkASSERT(SkAlign4(size) == size); - - fBase = fCurr = (const char*)data; - fStop = (const char*)data + size; - } - - size_t size() const { return fStop - fBase; } - size_t offset() const { return fCurr - fBase; } - bool eof() const { return fCurr >= fStop; } - const void* base() const { return fBase; } - const void* peek() const { return fCurr; } - - size_t available() const { return fStop - fCurr; } - bool isAvailable(size_t size) const { return size <= this->available(); } - - void rewind() { fCurr = fBase; } - - void setOffset(size_t offset) { - SkASSERT(SkAlign4(offset) == offset); - SkASSERT(offset <= this->size()); - fCurr = fBase + offset; - } - - bool readBool() { return this->readInt() != 0; } - - int32_t readInt() { - SkASSERT(ptr_align_4(fCurr)); - int32_t value = *(const int32_t*)fCurr; - fCurr += sizeof(value); - SkASSERT(fCurr <= fStop); - return value; - } - - void* readPtr() { - void* ptr; - // we presume this "if" is resolved at compile-time - if (4 == sizeof(void*)) { - ptr = *(void**)fCurr; - } else { - memcpy(&ptr, fCurr, sizeof(void*)); - } - fCurr += sizeof(void*); - return ptr; - } - - SkScalar readScalar() { - SkASSERT(ptr_align_4(fCurr)); - SkScalar value = *(const SkScalar*)fCurr; - fCurr += sizeof(value); - SkASSERT(fCurr <= fStop); - return value; - } - - const void* skip(size_t size) { - SkASSERT(ptr_align_4(fCurr)); - const void* addr = fCurr; - fCurr += SkAlign4(size); - SkASSERT(fCurr <= fStop); - return addr; - } - - template const T& skipT() { - SkASSERT(SkAlign4(sizeof(T)) == sizeof(T)); - return *(const T*)this->skip(sizeof(T)); - } - - void read(void* dst, size_t size) { - SkASSERT(0 == size || dst != nullptr); - SkASSERT(ptr_align_4(fCurr)); - sk_careful_memcpy(dst, fCurr, size); - fCurr += SkAlign4(size); - SkASSERT(fCurr <= fStop); - } - - uint8_t readU8() { return (uint8_t)this->readInt(); } - uint16_t readU16() { return (uint16_t)this->readInt(); } - int32_t readS32() { return this->readInt(); } - uint32_t readU32() { return this->readInt(); } - - bool readPath(SkPath* path) { - return this->readObjectFromMemory(path); - } - - bool readMatrix(SkMatrix* matrix) { - return this->readObjectFromMemory(matrix); - } - - bool readRRect(SkRRect* rrect) { - return this->readObjectFromMemory(rrect); - } - - bool readRegion(SkRegion* rgn) { - return this->readObjectFromMemory(rgn); - } - - /** - * Read the length of a string (written by SkWriter32::writeString) into - * len (if len is not nullptr) and return the null-ternimated address of the - * string within the reader's buffer. - */ - const char* readString(size_t* len = nullptr); - - /** - * Read the string (written by SkWriter32::writeString) and return it in - * copy (if copy is not null). Return the length of the string. - */ - size_t readIntoString(SkString* copy); - - sk_sp readData() { - uint32_t byteLength = this->readU32(); - if (0 == byteLength) { - return SkData::MakeEmpty(); - } - return SkData::MakeWithCopy(this->skip(byteLength), byteLength); - } - -private: - template bool readObjectFromMemory(T* obj) { - size_t size = obj->readFromMemory(this->peek(), this->available()); - // If readFromMemory() fails (which means that available() was too small), it returns 0 - bool success = (size > 0) && (size <= this->available()) && (SkAlign4(size) == size); - // In case of failure, we want to skip to the end - (void)this->skip(success ? size : this->available()); - return success; - } - - // these are always 4-byte aligned - const char* fCurr; // current position within buffer - const char* fStop; // end of buffer - const char* fBase; // beginning of buffer - -#ifdef SK_DEBUG - static bool ptr_align_4(const void* ptr) { - return (((const char*)ptr - (const char*)nullptr) & 3) == 0; - } -#endif -}; - -#endif diff --git a/src/core/SkRecord.h b/src/core/SkRecord.h index 37cc0583b3149..10a385fdf1ebf 100644 --- a/src/core/SkRecord.h +++ b/src/core/SkRecord.h @@ -85,19 +85,6 @@ class SkRecord : public SkRefCnt { return fRecords[i].set(this->allocCommand()); } - // Replace the i-th command with a new command of type T. - // You are expected to placement new an object of type T onto this pointer. - // You must show proof that you've already adopted the existing command. - template - T* replace(int i, const SkRecords::Adopted& proofOfAdoption) { - SkASSERT(i < this->count()); - - SkASSERT(Existing::kType == fRecords[i].type()); - SkASSERT(proofOfAdoption == fRecords[i].ptr()); - - return fRecords[i].set(this->allocCommand()); - } - // Does not return the bytes in any pointers embedded in the Records; callers // need to iterate with a visitor to measure those they care for. size_t bytesUsed() const; diff --git a/src/core/SkRecordDraw.cpp b/src/core/SkRecordDraw.cpp index 82ab535793545..9a638471c8cb0 100644 --- a/src/core/SkRecordDraw.cpp +++ b/src/core/SkRecordDraw.cpp @@ -78,19 +78,10 @@ template <> void Draw::draw(const NoOp&) {} DRAW(Flush, flush()); DRAW(Restore, restore()); DRAW(Save, save()); -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK DRAW(SaveLayer, saveLayer(SkCanvas::SaveLayerRec(r.bounds, r.paint, r.backdrop.get(), - r.clipMask.get(), - r.clipMatrix, r.saveLayerFlags))); -#else -DRAW(SaveLayer, saveLayer(SkCanvas::SaveLayerRec(r.bounds, - r.paint, - r.backdrop.get(), - r.saveLayerFlags))); -#endif template <> void Draw::draw(const SaveBehind& r) { SkCanvasPriv::SaveBehind(fCanvas, r.subset); diff --git a/src/core/SkRecordOpts.cpp b/src/core/SkRecordOpts.cpp index 127a9a861ee40..45d5de3b58fd7 100644 --- a/src/core/SkRecordOpts.cpp +++ b/src/core/SkRecordOpts.cpp @@ -185,8 +185,8 @@ struct SaveLayerDrawRestoreNooper { typedef Pattern, IsDraw, Is> Match; bool onMatch(SkRecord* record, Match* match, int begin, int end) { - if (match->first()->backdrop || match->first()->clipMask) { - // can't throw away the layer if we have a backdrop or clip mask + if (match->first()->backdrop) { + // can't throw away the layer if we have a backdrop return false; } diff --git a/src/core/SkRecorder.cpp b/src/core/SkRecorder.cpp index 86ffe69bba00c..4ff6c1a3201ca 100644 --- a/src/core/SkRecorder.cpp +++ b/src/core/SkRecorder.cpp @@ -316,12 +316,6 @@ SkCanvas::SaveLayerStrategy SkRecorder::getSaveLayerStrategy(const SaveLayerRec& this->append(this->copy(rec.fBounds) , this->copy(rec.fPaint) , sk_ref_sp(rec.fBackdrop) -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - , sk_ref_sp(rec.fClipMask) - , this->copy(rec.fClipMatrix) -#else - , nullptr, nullptr -#endif , rec.fSaveLayerFlags); return SkCanvas::kNoLayer_SaveLayerStrategy; } diff --git a/src/core/SkRecords.h b/src/core/SkRecords.h index 8d89252e4b84e..f44de620a7de4 100644 --- a/src/core/SkRecords.h +++ b/src/core/SkRecords.h @@ -109,25 +109,6 @@ class Optional { Optional& operator=(const Optional&) = delete; }; -// Like Optional, but ptr must not be NULL. -template -class Adopted { -public: - Adopted(T* ptr) : fPtr(ptr) { SkASSERT(fPtr); } - Adopted(Adopted* source) { - // Transfer ownership from source to this. - fPtr = source->fPtr; - source->fPtr = NULL; - } - ~Adopted() { if (fPtr) fPtr->~T(); } - - ACT_AS_PTR(fPtr) -private: - T* fPtr; - Adopted(const Adopted&) = delete; - Adopted& operator=(const Adopted&) = delete; -}; - // PODArray doesn't own the pointer's memory, and we assume the data is POD. template class PODArray { @@ -185,8 +166,6 @@ RECORD(SaveLayer, kHasPaint_Tag, Optional bounds; Optional paint; sk_sp backdrop; - sk_sp clipMask; - Optional clipMatrix; SkCanvas::SaveLayerFlags saveLayerFlags); RECORD(SaveBehind, 0, @@ -299,7 +278,7 @@ RECORD(DrawPoints, kDraw_Tag|kHasPaint_Tag, SkPaint paint; SkCanvas::PointMode mode; unsigned count; - SkPoint* pts); + PODArray pts); RECORD(DrawRRect, kDraw_Tag|kHasPaint_Tag, SkPaint paint; SkRRect rrect); diff --git a/src/core/SkRemoteGlyphCache.cpp b/src/core/SkRemoteGlyphCache.cpp index d25a6c3daa724..ae4a83a3ccf65 100644 --- a/src/core/SkRemoteGlyphCache.cpp +++ b/src/core/SkRemoteGlyphCache.cpp @@ -28,8 +28,9 @@ #include "src/core/SkZip.h" #if SK_SUPPORT_GPU +#include "include/gpu/GrContextOptions.h" #include "src/gpu/GrDrawOpAtlas.h" -#include "src/gpu/text/GrTextContext.h" +#include "src/gpu/text/GrSDFTOptions.h" #endif static SkDescriptor* auto_descriptor_from_desc(const SkDescriptor* source_desc, @@ -392,8 +393,9 @@ class SkTextBlobCacheDiffCanvas::TrackLayerDevice final : public SkNoPixelsDevic protected: void drawGlyphRunList(const SkGlyphRunList& glyphRunList) override { #if SK_SUPPORT_GPU - GrTextContext::Options options; - GrTextContext::SanitizeOptions(&options); + GrContextOptions ctxOptions; + GrSDFTOptions options = + {ctxOptions.fMinDistanceFieldFontSize, ctxOptions.fGlyphsAsPathsFontSize}; #ifdef SK_CAPTURE_DRAW_TEXT_BLOB if (SkTextBlobTrace::Capture* capture = fStrikeServer->fCapture.get()) { diff --git a/src/core/SkRuntimeEffect.cpp b/src/core/SkRuntimeEffect.cpp index 858baed26a2c5..df85e5873033f 100644 --- a/src/core/SkRuntimeEffect.cpp +++ b/src/core/SkRuntimeEffect.cpp @@ -11,6 +11,7 @@ #include "include/private/SkChecksum.h" #include "include/private/SkMutex.h" #include "src/core/SkCanvasPriv.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkColorSpaceXformSteps.h" #include "src/core/SkMatrixProvider.h" @@ -19,13 +20,14 @@ #include "src/core/SkUtils.h" #include "src/core/SkVM.h" #include "src/core/SkWriteBuffer.h" +#include "src/sksl/SkSLAnalysis.h" #include "src/sksl/SkSLByteCode.h" #include "src/sksl/SkSLCompiler.h" #include "src/sksl/ir/SkSLFunctionDefinition.h" #include "src/sksl/ir/SkSLVarDeclarations.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrColorInfo.h" #include "src/gpu/GrFPArgs.h" #include "src/gpu/effects/GrMatrixEffect.h" @@ -79,16 +81,19 @@ SkRuntimeEffect::EffectResult SkRuntimeEffect::Make(SkString sksl) { SkSL::Program::Settings()); // TODO: Many errors aren't caught until we process the generated Program here. Catching those // in the IR generator would provide better errors messages (with locations). - #define RETURN_FAILURE(...) return std::make_pair(nullptr, SkStringPrintf(__VA_ARGS__)) + #define RETURN_FAILURE(...) return std::make_tuple(nullptr, SkStringPrintf(__VA_ARGS__)) if (!program) { RETURN_FAILURE("%s", compiler->errorText().c_str()); } SkASSERT(!compiler->errorCount()); + bool mainHasSampleCoords = SkSL::Analysis::ReferencesSampleCoords(*program); + size_t offset = 0, uniformSize = 0; std::vector inAndUniformVars; std::vector children; + std::vector sampleUsages; std::vector varyings; const SkSL::Context& ctx(compiler->context()); @@ -133,6 +138,7 @@ SkRuntimeEffect::EffectResult SkRuntimeEffect::Make(SkString sksl) { if (var.fModifiers.fFlags & flag) { if (&var.fType == ctx.fFragmentProcessor_Type.get()) { children.push_back(var.fName); + sampleUsages.push_back(SkSL::Analysis::GetSampleUsage(*program, var)); continue; } @@ -257,9 +263,11 @@ SkRuntimeEffect::EffectResult SkRuntimeEffect::Make(SkString sksl) { std::move(program), std::move(inAndUniformVars), std::move(children), + std::move(sampleUsages), std::move(varyings), - uniformSize)); - return std::make_pair(std::move(effect), SkString()); + uniformSize, + mainHasSampleCoords)); + return std::make_tuple(std::move(effect), SkString()); } size_t SkRuntimeEffect::Variable::sizeInBytes() const { @@ -285,18 +293,23 @@ SkRuntimeEffect::SkRuntimeEffect(SkString sksl, std::unique_ptr baseProgram, std::vector&& inAndUniformVars, std::vector&& children, + std::vector&& sampleUsages, std::vector&& varyings, - size_t uniformSize) + size_t uniformSize, + bool mainHasSampleCoords) : fHash(SkGoodHash()(sksl)) , fSkSL(std::move(sksl)) , fBaseProgram(std::move(baseProgram)) , fInAndUniformVars(std::move(inAndUniformVars)) , fChildren(std::move(children)) + , fSampleUsages(std::move(sampleUsages)) , fVaryings(std::move(varyings)) - , fUniformSize(uniformSize) { + , fUniformSize(uniformSize) + , fMainFunctionHasSampleCoords(mainHasSampleCoords) { SkASSERT(fBaseProgram); SkASSERT(SkIsAlign4(fUniformSize)); SkASSERT(fUniformSize <= this->inputSize()); + SkASSERT(fChildren.size() == fSampleUsages.size()); } SkRuntimeEffect::~SkRuntimeEffect() = default; @@ -411,7 +424,13 @@ SkRuntimeEffect::ByteCodeResult SkRuntimeEffect::toByteCode(const void* inputs) static std::vector program_fn(skvm::Builder* p, const SkSL::ByteCodeFunction& fn, const std::vector& uniform, - std::vector stack) { + const SkMatrixProvider& matrices, + std::vector stack, + /*these parameters are used to call program() on children*/ + const std::vector>& children, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + SkFilterQuality quality, const SkColorInfo& dst, + skvm::Uniforms* uniforms, SkArenaAlloc* alloc) { auto push = [&](skvm::F32 x) { stack.push_back(x); }; auto pop = [&]{ skvm::F32 x = stack.back(); stack.pop_back(); return x; }; @@ -429,31 +448,36 @@ static std::vector program_fn(skvm::Builder* p, //auto u16 = [&]{ auto x = sk_unaligned_load(ip); ip += sizeof(x); return x; }; auto u32 = [&]{ auto x = sk_unaligned_load(ip); ip += sizeof(x); return x; }; - auto unary = [&](Inst base, auto&& fn) { - const int N = (int)base - (int)inst + 1; - SkASSERT(0 < N && N <= 4); - skvm::F32 args[4]; - for (int i = 0; i < N; ++i) { - args[i] = pop(); - } - for (int i = N; i --> 0;) { - push(fn(args[i])); + auto unary = [&](auto&& fn) { + int N = u8(); + std::vector a(N); + for (int i = N; i --> 0; ) { a[i] = pop(); } + + for (int i = 0; i < N; i++) { + push(fn(a[i])); } }; - auto binary = [&](Inst base, auto&& fn) { - const int N = (int)base - (int)inst + 1; - SkASSERT(0 < N && N <= 4); - skvm::F32 right[4]; - for (int i = 0; i < N; ++i) { - right[i] = pop(); - } - skvm::F32 left[4]; - for (int i = 0; i < N; ++i) { - left[i] = pop(); + auto binary = [&](auto&& fn) { + int N = u8(); + std::vector a(N), b(N); + for (int i = N; i --> 0; ) { b[i] = pop(); } + for (int i = N; i --> 0; ) { a[i] = pop(); } + + for (int i = 0; i < N; i++) { + push(fn(a[i], b[i])); } - for (int i = N; i --> 0;) { - push(fn(left[i], right[i])); + }; + + auto ternary = [&](auto&& fn) { + int N = u8(); + std::vector a(N), b(N), c(N); + for (int i = N; i --> 0; ) { c[i] = pop(); } + for (int i = N; i --> 0; ) { b[i] = pop(); } + for (int i = N; i --> 0; ) { a[i] = pop(); } + + for (int i = 0; i < N; i++) { + push(fn(a[i], b[i], c[i])); } }; @@ -466,167 +490,185 @@ static std::vector program_fn(skvm::Builder* p, #endif return {}; - case Inst::kLoad: { - int ix = u8(); - push(stack[ix + 0]); - } break; - - case Inst::kLoad2: { - int ix = u8(); - push(stack[ix + 0]); - push(stack[ix + 1]); - } break; - - case Inst::kLoad3: { + case Inst::kSample: { + // Child shader to run. int ix = u8(); - push(stack[ix + 0]); - push(stack[ix + 1]); - push(stack[ix + 2]); - } break; - case Inst::kLoad4: { - int ix = u8(); - push(stack[ix + 0]); - push(stack[ix + 1]); - push(stack[ix + 2]); - push(stack[ix + 3]); + SkOverrideDeviceMatrixProvider mats{matrices, SkMatrix::I()}; + skvm::Color c = as_SB(children[ix])->program(p, device,local,paint, + mats, nullptr, + quality, dst, + uniforms, alloc); + if (!c) { + return {}; + } + push(c.r); + push(c.g); + push(c.b); + push(c.a); } break; - case Inst::kLoadUniform: { + case Inst::kSampleMatrix: { + // Child shader to run. int ix = u8(); - push(uniform[ix]); - } break; - case Inst::kLoadUniform2: { - int ix = u8(); - push(uniform[ix + 0]); - push(uniform[ix + 1]); + // Stack contains matrix to apply to sample coordinates. + skvm::F32 m[9]; + for (int i = 9; i --> 0; ) { m[i] = pop(); } + + // TODO: Optimize this for simpler matrices + skvm::F32 x = m[0]*local.x + m[3]*local.y + m[6], + y = m[1]*local.x + m[4]*local.y + m[7], + w = m[2]*local.x + m[5]*local.y + m[8]; + x = x * (1.0f / w); + y = y * (1.0f / w); + + SkOverrideDeviceMatrixProvider mats{matrices, SkMatrix::I()}; + skvm::Color c = as_SB(children[ix])->program(p, device,{x,y},paint, + mats, nullptr, + quality, dst, + uniforms, alloc); + if (!c) { + return {}; + } + push(c.r); + push(c.g); + push(c.b); + push(c.a); } break; - case Inst::kLoadUniform3: { + case Inst::kSampleExplicit: { + // Child shader to run. int ix = u8(); - push(uniform[ix + 0]); - push(uniform[ix + 1]); - push(uniform[ix + 2]); - } break; - case Inst::kLoadUniform4: { - int ix = u8(); - push(uniform[ix + 0]); - push(uniform[ix + 1]); - push(uniform[ix + 2]); - push(uniform[ix + 3]); + // Stack contains x,y to sample at. + skvm::F32 y = pop(), + x = pop(); + + SkOverrideDeviceMatrixProvider mats{matrices, SkMatrix::I()}; + skvm::Color c = as_SB(children[ix])->program(p, device,{x,y},paint, + mats, nullptr, + quality, dst, + uniforms, alloc); + if (!c) { + return {}; + } + push(c.r); + push(c.g); + push(c.b); + push(c.a); } break; - case Inst::kStore: { - int ix = u8(); - stack[ix + 0] = pop(); + case Inst::kLoad: { + int N = u8(), + ix = u8(); + for (int i = 0; i < N; ++i) { + push(stack[ix + i]); + } } break; - case Inst::kStore2: { - int ix = u8(); - stack[ix + 1] = pop(); - stack[ix + 0] = pop(); + case Inst::kLoadUniform: { + int N = u8(), + ix = u8(); + for (int i = 0; i < N; ++i) { + push(uniform[ix + i]); + } } break; - case Inst::kStore3: { - int ix = u8(); - stack[ix + 2] = pop(); - stack[ix + 1] = pop(); - stack[ix + 0] = pop(); + case Inst::kLoadFragCoord: { + // TODO: Actually supply Z and 1/W from the rasterizer? + push(device.x); + push(device.y); + push(p->splat(0.0f)); // Z + push(p->splat(1.0f)); // 1/W } break; - case Inst::kStore4: { - int ix = u8(); - stack[ix + 3] = pop(); - stack[ix + 2] = pop(); - stack[ix + 1] = pop(); - stack[ix + 0] = pop(); + case Inst::kStore: { + int N = u8(), + ix = u8(); + for (int i = N; i --> 0; ) { + stack[ix + i] = pop(); + } } break; - case Inst::kPushImmediate: { push(bit_cast(p->splat(u32()))); } break; case Inst::kDup: { - push(stack[stack.size() - 1]); - } break; - - case Inst::kDup2: { - push(stack[stack.size() - 2]); - push(stack[stack.size() - 2]); - } break; - - case Inst::kDup3: { - push(stack[stack.size() - 3]); - push(stack[stack.size() - 3]); - push(stack[stack.size() - 3]); + int N = u8(); + for (int i = 0; i < N; ++i) { + push(stack[stack.size() - N]); + } } break; - case Inst::kDup4: { - push(stack[stack.size() - 4]); - push(stack[stack.size() - 4]); - push(stack[stack.size() - 4]); - push(stack[stack.size() - 4]); + case Inst::kSwizzle: { + skvm::F32 tmp[4]; + for (int i = u8(); i --> 0;) { + tmp[i] = pop(); + } + for (int i = u8(); i --> 0;) { + push(tmp[u8()]); + } } break; - case Inst::kAddF: - case Inst::kAddF2: - case Inst::kAddF3: - case Inst::kAddF4: binary(Inst::kAddF, std::plus<>{}); break; + case Inst::kAddF: binary(std::plus<>{}); break; + case Inst::kSubtractF: binary(std::minus<>{}); break; + case Inst::kMultiplyF: binary(std::multiplies<>{}); break; + case Inst::kDivideF: binary(std::divides<>{}); break; + case Inst::kNegateF: unary(std::negate<>{}); break; - case Inst::kSubtractF: - case Inst::kSubtractF2: - case Inst::kSubtractF3: - case Inst::kSubtractF4: binary(Inst::kSubtractF, std::minus<>{}); break; - - case Inst::kMultiplyF: - case Inst::kMultiplyF2: - case Inst::kMultiplyF3: - case Inst::kMultiplyF4: binary(Inst::kMultiplyF, std::multiplies<>{}); break; + case Inst::kMinF: + binary([](skvm::F32 x, skvm::F32 y) { return skvm::min(x,y); }); + break; - case Inst::kDivideF: - case Inst::kDivideF2: - case Inst::kDivideF3: - case Inst::kDivideF4: binary(Inst::kDivideF, std::divides<>{}); break; + case Inst::kMaxF: + binary([](skvm::F32 x, skvm::F32 y) { return skvm::max(x,y); }); + break; case Inst::kPow: - case Inst::kPow2: - case Inst::kPow3: - case Inst::kPow4: - binary(Inst::kPow, [](skvm::F32 x, skvm::F32 y) { return skvm::approx_powf(x,y); }); + binary([](skvm::F32 x, skvm::F32 y) { return skvm::approx_powf(x,y); }); break; - case Inst::kATan: - case Inst::kATan2: - case Inst::kATan3: - case Inst::kATan4: unary(Inst::kATan, skvm::approx_atan); break; - - case Inst::kFract: - case Inst::kFract2: - case Inst::kFract3: - case Inst::kFract4: unary(Inst::kFract, skvm::fract); break; - - case Inst::kSqrt: - case Inst::kSqrt2: - case Inst::kSqrt3: - case Inst::kSqrt4: unary(Inst::kSqrt, skvm::sqrt); break; + case Inst::kLerp: + ternary([](skvm::F32 x, skvm::F32 y, skvm::F32 t) { return skvm::lerp(x, y, t); }); + break; - case Inst::kSin: - case Inst::kSin2: - case Inst::kSin3: - case Inst::kSin4: unary(Inst::kSin, skvm::approx_sin); break; + case Inst::kATan: unary(skvm::approx_atan); break; + case Inst::kCeil: unary(skvm::ceil); break; + case Inst::kFloor: unary(skvm::floor); break; + case Inst::kFract: unary(skvm::fract); break; + case Inst::kSqrt: unary(skvm::sqrt); break; + case Inst::kSin: unary(skvm::approx_sin); break; + + case Inst::kMatrixMultiply: { + // Computes M = A*B (all stored column major) + int aCols = u8(), + aRows = u8(), + bCols = u8(), + bRows = aCols; + std::vector A(aCols*aRows), + B(bCols*bRows); + for (auto i = B.size(); i --> 0;) { B[i] = pop(); } + for (auto i = A.size(); i --> 0;) { A[i] = pop(); } + + for (int c = 0; c < bCols; ++c) + for (int r = 0; r < aRows; ++r) { + skvm::F32 sum = p->splat(0.0f); + for (int j = 0; j < aCols; ++j) { + sum += A[j*aRows + r] * B[c*bRows + j]; + } + push(sum); + } + } break; // Baby steps... just leaving test conditions on the stack for now. case Inst::kMaskPush: break; case Inst::kMaskNegate: break; - case Inst::kCompareFLT: { - skvm::F32 x = pop(), - a = pop(); - push(bit_cast(a if_true, @@ -654,7 +696,7 @@ static std::vector program_fn(skvm::Builder* p, } -class SkRuntimeColorFilter : public SkColorFilter { +class SkRuntimeColorFilter : public SkColorFilterBase { public: SkRuntimeColorFilter(sk_sp effect, sk_sp inputs) : fEffect(std::move(effect)) @@ -688,7 +730,7 @@ class SkRuntimeColorFilter : public SkColorFilter { ctx->shaderConvention = false; ctx->byteCode = this->byteCode(); - if (!ctx->byteCode) { + if (!ctx->byteCode || !ctx->byteCode->canRun()) { return false; } @@ -718,7 +760,9 @@ class SkRuntimeColorFilter : public SkColorFilter { } std::vector stack = - program_fn(p, *fn, uniform, {c.r, c.g, c.b, c.a}); + program_fn(p, *fn, uniform, SkSimpleMatrixProvider{SkMatrix::I()}, {c.r, c.g, c.b, c.a}, + /* the remaining parameters are for shaders only and won't be used here */ + {},{},{},{},{},{},{},{}); if (stack.size() == 4) { return {stack[0], stack[1], stack[2], stack[3]}; @@ -897,7 +941,7 @@ class SkRTShader : public SkShaderBase { ctx->shaderConvention = true; ctx->byteCode = this->byteCode(); - if (!ctx->byteCode) { + if (!ctx->byteCode || !ctx->byteCode->canRun()) { return false; } ctx->fn = ctx->byteCode->getFunction("main"); @@ -907,10 +951,11 @@ class SkRTShader : public SkShaderBase { return true; } - skvm::Color onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, - SkFilterQuality, const SkColorInfo& dst, - skvm::Uniforms* uniforms, SkArenaAlloc*) const override { + skvm::Color onProgram(skvm::Builder* p, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& matrices, const SkMatrix* localM, + SkFilterQuality quality, const SkColorInfo& dst, + skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override { const SkSL::ByteCode* bc = this->byteCode(); if (!bc) { return {}; @@ -921,11 +966,7 @@ class SkRTShader : public SkShaderBase { return {}; } - // TODO: Eventually, plumb SkMatrixProvider here (instead of just ctm). For now, we will - // simply fail if our effect requires any marked matrices (SkSimpleMatrixProvider always - // returns false in getLocalToMarker). - SkSimpleMatrixProvider matrixProvider(SkMatrix::I()); - sk_sp inputs = this->getUniforms(matrixProvider, dst.colorSpace()); + sk_sp inputs = this->getUniforms(matrices, dst.colorSpace()); if (!inputs) { return {}; } @@ -938,13 +979,16 @@ class SkRTShader : public SkShaderBase { } SkMatrix inv; - if (!this->computeTotalInverse(ctm, localM, &inv)) { + if (!this->computeTotalInverse(matrices.localToDevice(), localM, &inv)) { return {}; } - SkShaderBase::ApplyMatrix(p,inv, &x,&y,uniforms); + local = SkShaderBase::ApplyMatrix(p,inv,local,uniforms); std::vector stack = - program_fn(p, *fn, uniform, {x,y, paint.r, paint.g, paint.b, paint.a}); + program_fn(p, *fn, uniform, matrices, + {local.x,local.y, paint.r, paint.g, paint.b, paint.a}, + /*parameters for calling program() on children*/ + fChildren, device,local,paint, quality,dst, uniforms,alloc); if (stack.size() == 6) { return {stack[2], stack[3], stack[4], stack[5]}; diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp index 065d4fe542f80..df1fefd6a081e 100644 --- a/src/core/SkSpecialImage.cpp +++ b/src/core/SkSpecialImage.cpp @@ -10,20 +10,17 @@ #include "include/core/SkBitmap.h" #include "include/core/SkCanvas.h" #include "include/core/SkImage.h" -#include "src/core/SkBitmapCache.h" #include "src/core/SkSpecialSurface.h" #include "src/core/SkSurfacePriv.h" #include "src/image/SkImage_Base.h" -#include #if SK_SUPPORT_GPU #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" -#include "src/gpu/GrSurfaceContext.h" #include "src/gpu/GrTextureProxy.h" #include "src/image/SkImage_Gpu.h" #endif @@ -88,52 +85,6 @@ SkSpecialImage::SkSpecialImage(const SkIRect& subset, , fUniqueID(kNeedNewImageUniqueID_SpecialImage == uniqueID ? SkNextID::ImageID() : uniqueID) { } -sk_sp SkSpecialImage::makeTextureImage(GrRecordingContext* context) const { -#if SK_SUPPORT_GPU - if (!context) { - return nullptr; - } - if (GrRecordingContext* curContext = as_SIB(this)->onGetContext()) { - return curContext->priv().matches(context) ? sk_ref_sp(this) : nullptr; - } - - SkBitmap bmp; - // At this point, we are definitely not texture-backed, so we must be raster or generator - // backed. If we remove the special-wrapping-an-image subclass, we may be able to assert that - // we are strictly raster-backed (i.e. generator images become raster when they are specialized) - // in which case getROPixels could turn into peekPixels... - if (!this->getROPixels(&bmp)) { - return nullptr; - } - - if (bmp.empty()) { - return SkSpecialImage::MakeFromRaster(SkIRect::MakeEmpty(), bmp, &this->props()); - } - - // TODO: this is a tight copy of 'bmp' but it doesn't have to be (given SkSpecialImage's - // semantics). Since this is cached though we would have to bake the fit into the cache key. - auto view = GrMakeCachedBitmapProxyView(context, bmp); - if (!view.proxy()) { - return nullptr; - } - - const SkIRect rect = SkIRect::MakeSize(view.proxy()->dimensions()); - - // GrMakeCachedBitmapProxyView has uploaded only the specified subset of 'bmp' so we need not - // bother with SkBitmap::getSubset - return SkSpecialImage::MakeDeferredFromGpu(context, - rect, - this->uniqueID(), - std::move(view), - SkColorTypeToGrColorType(bmp.colorType()), - sk_ref_sp(this->getColorSpace()), - &this->props(), - this->alphaType()); -#else - return nullptr; -#endif -} - void SkSpecialImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) const { return as_SIB(this)->onDraw(canvas, x, y, paint); } @@ -207,21 +158,17 @@ sk_sp SkSpecialImage::MakeFromImage(GrRecordingContext* context, SkASSERT(rect_fits(subset, image->width(), image->height())); #if SK_SUPPORT_GPU - if (const GrSurfaceProxyView* view = as_IB(image)->view(context)) { - if (!as_IB(image)->context()->priv().matches(context)) { - return nullptr; - } - - return MakeDeferredFromGpu(context, subset, image->uniqueID(), *view, + if (context) { + GrSurfaceProxyView view = as_IB(image)->refView(context, GrMipMapped::kNo); + return MakeDeferredFromGpu(context, subset, image->uniqueID(), view, SkColorTypeToGrColorType(image->colorType()), image->refColorSpace(), props); - } else + } #endif - { - SkBitmap bm; - if (as_IB(image)->getROPixels(&bm)) { - return MakeFromRaster(subset, bm, props); - } + + SkBitmap bm; + if (as_IB(image)->getROPixels(&bm)) { + return MakeFromRaster(subset, bm, props); } return nullptr; } @@ -385,14 +332,7 @@ class SkSpecialImage_Gpu : public SkSpecialImage_Base { , fView(std::move(view)) , fColorType(ct) , fAlphaType(at) - , fColorSpace(std::move(colorSpace)) - , fAddedRasterVersionToCache(false) { - } - - ~SkSpecialImage_Gpu() override { - if (fAddedRasterVersionToCache.load()) { - SkNotifyBitmapGenIDIsStale(this->uniqueID()); - } + , fColorSpace(std::move(colorSpace)) { } SkAlphaType alphaType() const override { return fAlphaType; } @@ -426,35 +366,10 @@ class SkSpecialImage_Gpu : public SkSpecialImage_Base { GrSurfaceProxyView onView(GrRecordingContext* context) const override { return fView; } bool onGetROPixels(SkBitmap* dst) const override { - const auto desc = SkBitmapCacheDesc::Make(this->uniqueID(), this->subset()); - if (SkBitmapCache::Find(desc, dst)) { - SkASSERT(dst->getGenerationID() == this->uniqueID()); - SkASSERT(dst->isImmutable()); - SkASSERT(dst->getPixels()); - return true; - } - - SkPixmap pmap; - SkImageInfo info = SkImageInfo::MakeN32(this->width(), this->height(), - this->alphaType(), fColorSpace); - auto rec = SkBitmapCache::Alloc(desc, info, &pmap); - if (!rec) { - return false; - } - auto sContext = GrSurfaceContext::Make(fContext, fView, fColorType, this->alphaType(), - fColorSpace); - if (!sContext) { - return false; - } - - if (!sContext->readPixels(info, pmap.writable_addr(), pmap.rowBytes(), - {this->subset().left(), this->subset().top()})) { - return false; - } - - SkBitmapCache::Add(std::move(rec), dst); - fAddedRasterVersionToCache.store(true); - return true; + // This should never be called: All GPU image filters are implemented entirely on the GPU, + // so we never perform read-back. + SkASSERT(false); + return false; } SkColorSpace* onGetColorSpace() const override { @@ -531,7 +446,6 @@ class SkSpecialImage_Gpu : public SkSpecialImage_Base { const GrColorType fColorType; const SkAlphaType fAlphaType; sk_sp fColorSpace; - mutable std::atomic fAddedRasterVersionToCache; typedef SkSpecialImage_Base INHERITED; }; @@ -544,7 +458,7 @@ sk_sp SkSpecialImage::MakeDeferredFromGpu(GrRecordingContext* co sk_sp colorSpace, const SkSurfaceProps* props, SkAlphaType at) { - if (!context || context->priv().abandoned() || !view.asTextureProxy()) { + if (!context || context->abandoned() || !view.asTextureProxy()) { return nullptr; } SkASSERT_RELEASE(rect_fits(subset, view.proxy()->width(), view.proxy()->height())); diff --git a/src/core/SkSpecialImage.h b/src/core/SkSpecialImage.h index 9df11ab04c569..0dfed77712384 100644 --- a/src/core/SkSpecialImage.h +++ b/src/core/SkSpecialImage.h @@ -61,13 +61,6 @@ class SkSpecialImage : public SkRefCnt { virtual SkColorType colorType() const = 0; virtual size_t getSize() const = 0; - /** - * Ensures that a special image is backed by a texture (when GrRecordingContext is non-null). - * If no transformation is required, the returned image may be the same as this special image. - * If this special image is from a different GrRecordingContext, this will fail. - */ - sk_sp makeTextureImage(GrRecordingContext*) const; - /** * Draw this SpecialImage into the canvas, automatically taking into account the image's subset */ diff --git a/src/core/SkSpecialSurface.cpp b/src/core/SkSpecialSurface.cpp index 0f9b8d7600b87..869d2e73ee533 100644 --- a/src/core/SkSpecialSurface.cpp +++ b/src/core/SkSpecialSurface.cpp @@ -117,7 +117,7 @@ sk_sp SkSpecialSurface::MakeRaster(const SkImageInfo& info, #if SK_SUPPORT_GPU /////////////////////////////////////////////////////////////////////////////// -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/SkGpuDevice.h" diff --git a/src/core/SkStrikeSpec.cpp b/src/core/SkStrikeSpec.cpp index c5c46bf46c89f..51b92e087b6cb 100644 --- a/src/core/SkStrikeSpec.cpp +++ b/src/core/SkStrikeSpec.cpp @@ -14,8 +14,9 @@ #include "src/core/SkTLazy.h" #if SK_SUPPORT_GPU +#include "src/gpu/text/GrSDFMaskFilter.h" +#include "src/gpu/text/GrSDFTOptions.h" #include "src/gpu/text/GrStrikeCache.h" -#include "src/gpu/text/GrTextContext.h" #endif SkStrikeSpec SkStrikeSpec::MakeMask(const SkFont& font, const SkPaint& paint, @@ -186,20 +187,19 @@ SkStrikeSpec SkStrikeSpec::MakePDFVector(const SkTypeface& typeface, int* size) std::tuple SkStrikeSpec::MakeSDFT(const SkFont& font, const SkPaint& paint, const SkSurfaceProps& surfaceProps, const SkMatrix& deviceMatrix, - const GrTextContext::Options& options) { + const GrSDFTOptions& options) { SkStrikeSpec storage; - SkPaint dfPaint = GrTextContext::InitDistanceFieldPaint(paint); - SkFont dfFont = GrTextContext::InitDistanceFieldFont( - font, deviceMatrix, options, &storage.fStrikeToSourceRatio); + SkPaint dfPaint{paint}; + dfPaint.setMaskFilter(GrSDFMaskFilter::Make()); + SkFont dfFont = options.getSDFFont(font, deviceMatrix, &storage.fStrikeToSourceRatio); // Fake-gamma and subpixel antialiasing are applied in the shader, so we ignore the // passed-in scaler context flags. (It's only used when we fall-back to bitmap text). SkScalerContextFlags flags = SkScalerContextFlags::kNone; SkScalar minScale, maxScale; - std::tie(minScale, maxScale) = GrTextContext::InitDistanceFieldMinMaxScale( - font.getSize(), deviceMatrix, options); + std::tie(minScale, maxScale) = options.computeSDFMinMaxScale(font.getSize(), deviceMatrix); storage.commonSetup(dfFont, dfPaint, surfaceProps, flags, SkMatrix::I()); diff --git a/src/core/SkStrikeSpec.h b/src/core/SkStrikeSpec.h index de8731750b9c2..5b854118ea601 100644 --- a/src/core/SkStrikeSpec.h +++ b/src/core/SkStrikeSpec.h @@ -13,7 +13,7 @@ #include "src/core/SkStrikeForGPU.h" #if SK_SUPPORT_GPU -#include "src/gpu/text/GrTextContext.h" +#include "src/gpu/text/GrSDFTOptions.h" class GrStrikeCache; class GrTextStrike; #endif @@ -67,7 +67,7 @@ class SkStrikeSpec { const SkPaint& paint, const SkSurfaceProps& surfaceProps, const SkMatrix& deviceMatrix, - const GrTextContext::Options& options); + const GrSDFTOptions& options); sk_sp findOrCreateGrStrike(GrStrikeCache* cache) const; #endif diff --git a/src/core/SkString.cpp b/src/core/SkString.cpp index d42ee6f07e95b..2ea81a1220677 100644 --- a/src/core/SkString.cpp +++ b/src/core/SkString.cpp @@ -19,50 +19,38 @@ // number of bytes (on the stack) to receive the printf result static const size_t kBufferSize = 1024; -static const char* apply_format_string(const char* format, va_list args, char* stackBuffer, - size_t stackBufferSize, int* length, SkString* heapBuffer) { +struct StringBuffer { + char* fText; + int fLength; +}; + +template +static StringBuffer apply_format_string(const char* format, va_list args, char (&stackBuffer)[SIZE], + SkString* heapBuffer) { + // First, attempt to print directly to the stack buffer. va_list argsCopy; va_copy(argsCopy, args); - *length = std::vsnprintf(stackBuffer, stackBufferSize, format, args); - if (*length < 0) { + int outLength = std::vsnprintf(stackBuffer, SIZE, format, args); + if (outLength < 0) { SkDebugf("SkString: vsnprintf reported error."); va_end(argsCopy); - *length = 0; - return stackBuffer; + return {stackBuffer, 0}; } - if (*length < SkToInt(stackBufferSize)) { + if (outLength < SIZE) { va_end(argsCopy); - return stackBuffer; + return {stackBuffer, outLength}; } - heapBuffer->resize(*length); - SkDEBUGCODE(int check =) - std::vsnprintf(heapBuffer->writable_str(), *length + 1, format, argsCopy); - SkASSERT(check == *length); + + // Our text was too long to fit on the stack! However, we now know how much space we need to + // format it. Format the string into our heap buffer. `set` automatically reserves an extra + // byte at the end of the buffer for a null terminator, so we don't need to add one here. + heapBuffer->set(nullptr, outLength); + char* heapBufferDest = heapBuffer->writable_str(); + SkDEBUGCODE(int checkLength =) std::vsnprintf(heapBufferDest, outLength + 1, format, argsCopy); + SkASSERT(checkLength == outLength); va_end(argsCopy); - return heapBuffer->c_str(); -} - -#define ARGS_TO_BUFFER(format, buffer, size, written, result) \ - SkString overflow; \ - do { \ - va_list args; \ - va_start(args, format); \ - result = apply_format_string(format, args, buffer, size, &written, &overflow); \ - va_end(args); \ - } while (0) - -#define V_SKSTRING_PRINTF(output, format) \ - do { \ - char buffer[kBufferSize]; \ - va_list args; \ - va_start(args, format); \ - int length; \ - auto result = apply_format_string(format, args, buffer, kBufferSize, &length, &output); \ - SkASSERT(result == output.c_str() || result == buffer); \ - if (result == buffer) { \ - output.set(buffer, length); \ - } \ - } while (0) + return {heapBufferDest, outLength}; +} /////////////////////////////////////////////////////////////////////////////// @@ -285,6 +273,10 @@ SkString::SkString(SkString&& src) : fRec(std::move(src.validate().fRec)) { src.fRec.reset(const_cast(&gEmptyRec)); } +SkString::SkString(const std::string& src) { + fRec = Rec::Make(src.c_str(), src.size()); +} + SkString::~SkString() { this->validate(); } @@ -339,31 +331,40 @@ char* SkString::writable_str() { return fRec->data(); } +void SkString::resize(size_t len) { + len = trim_size_t_to_u32(len); + if (0 == len) { + this->reset(); + } else if (fRec->unique() && ((len >> 2) <= (fRec->fLength >> 2))) { + // Use less of the buffer we have without allocating a smaller one. + char* p = this->writable_str(); + p[len] = '\0'; + fRec->fLength = SkToU32(len); + } else { + SkString newString(len); + char* dest = newString.writable_str(); + int copyLen = std::min(len, this->size()); + memcpy(dest, this->c_str(), copyLen); + dest[copyLen] = '\0'; + this->swap(newString); + } +} + void SkString::set(const char text[]) { this->set(text, text ? strlen(text) : 0); } void SkString::set(const char text[], size_t len) { len = trim_size_t_to_u32(len); - bool unique = fRec->unique(); if (0 == len) { this->reset(); - } else if (unique && len <= fRec->fLength) { - // should we resize if len <<<< fLength, to save RAM? (e.g. len < (fLength>>1))? - // just use less of the buffer without allocating a smaller one + } else if (fRec->unique() && ((len >> 2) <= (fRec->fLength >> 2))) { + // Use less of the buffer we have without allocating a smaller one. char* p = this->writable_str(); if (text) { memcpy(p, text, len); } - p[len] = 0; - fRec->fLength = SkToU32(len); - } else if (unique && (fRec->fLength >> 2) == (len >> 2)) { - // we have spare room in the current allocation, so don't alloc a larger one - char* p = this->writable_str(); - if (text) { - memcpy(p, text, len); - } - p[len] = 0; + p[len] = '\0'; fRec->fLength = SkToU32(len); } else { SkString tmp(text, len); @@ -488,44 +489,63 @@ void SkString::insertScalar(size_t offset, SkScalar value) { this->insert(offset, buffer, stop - buffer); } +/////////////////////////////////////////////////////////////////////////////// + void SkString::printf(const char format[], ...) { - V_SKSTRING_PRINTF((*this), format); + va_list args; + va_start(args, format); + this->printVAList(format, args); + va_end(args); } -void SkString::appendf(const char format[], ...) { - char buffer[kBufferSize]; - int length; - const char* result; - ARGS_TO_BUFFER(format, buffer, kBufferSize, length, result); +void SkString::printVAList(const char format[], va_list args) { + char stackBuffer[kBufferSize]; + StringBuffer result = apply_format_string(format, args, stackBuffer, this); - this->append(result, length); + if (result.fText == stackBuffer) { + this->set(result.fText, result.fLength); + } +} + +void SkString::appendf(const char format[], ...) { + va_list args; + va_start(args, format); + this->appendVAList(format, args); + va_end(args); } void SkString::appendVAList(const char format[], va_list args) { - char buffer[kBufferSize]; - int length = vsnprintf(buffer, kBufferSize, format, args); - SkASSERT(length >= 0 && length < SkToInt(kBufferSize)); + if (this->isEmpty()) { + this->printVAList(format, args); + return; + } - this->append(buffer, length); + SkString overflow; + char stackBuffer[kBufferSize]; + StringBuffer result = apply_format_string(format, args, stackBuffer, &overflow); + + this->append(result.fText, result.fLength); } void SkString::prependf(const char format[], ...) { - char buffer[kBufferSize]; - int length; - const char* result; - ARGS_TO_BUFFER(format, buffer, kBufferSize, length, result); - - this->prepend(result, length); + va_list args; + va_start(args, format); + this->prependVAList(format, args); + va_end(args); } void SkString::prependVAList(const char format[], va_list args) { - char buffer[kBufferSize]; - int length = vsnprintf(buffer, kBufferSize, format, args); - SkASSERT(length >= 0 && length < SkToInt(kBufferSize)); + if (this->isEmpty()) { + this->printVAList(format, args); + return; + } - this->prepend(buffer, length); -} + SkString overflow; + char stackBuffer[kBufferSize]; + StringBuffer result = apply_format_string(format, args, stackBuffer, &overflow); + this->prepend(result.fText, result.fLength); +} /////////////////////////////////////////////////////////////////////////////// @@ -568,7 +588,10 @@ void SkString::swap(SkString& other) { SkString SkStringPrintf(const char* format, ...) { SkString formattedOutput; - V_SKSTRING_PRINTF(formattedOutput, format); + va_list args; + va_start(args, format); + formattedOutput.printVAList(format, args); + va_end(args); return formattedOutput; } diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp index 57bf5eef57430..91d9d5059cca9 100644 --- a/src/core/SkTypeface.cpp +++ b/src/core/SkTypeface.cpp @@ -25,16 +25,6 @@ SkTypeface::SkTypeface(const SkFontStyle& style, bool isFixedPitch) SkTypeface::~SkTypeface() { } -#ifdef SK_WHITELIST_SERIALIZED_TYPEFACES -extern void WhitelistSerializeTypeface(const SkTypeface*, SkWStream* ); -#define SK_TYPEFACE_DELEGATE WhitelistSerializeTypeface -#else -#define SK_TYPEFACE_DELEGATE nullptr -#endif - -void (*gSerializeTypefaceDelegate)(const SkTypeface*, SkWStream* ) = SK_TYPEFACE_DELEGATE; -sk_sp (*gDeserializeTypefaceDelegate)(SkStream* ) = nullptr; - /////////////////////////////////////////////////////////////////////////////// namespace { @@ -182,11 +172,6 @@ sk_sp SkTypeface::makeClone(const SkFontArguments& args) const { /////////////////////////////////////////////////////////////////////////////// void SkTypeface::serialize(SkWStream* wstream, SerializeBehavior behavior) const { - if (gSerializeTypefaceDelegate) { - (*gSerializeTypefaceDelegate)(this, wstream); - return; - } - bool isLocalData = false; SkFontDescriptor desc; this->onGetFontDescriptor(&desc, &isLocalData); @@ -214,10 +199,6 @@ sk_sp SkTypeface::serialize(SerializeBehavior behavior) const { } sk_sp SkTypeface::MakeDeserialize(SkStream* stream) { - if (gDeserializeTypefaceDelegate) { - return (*gDeserializeTypefaceDelegate)(stream); - } - SkFontDescriptor desc; if (!SkFontDescriptor::Deserialize(stream, &desc)) { return nullptr; diff --git a/src/core/SkVM.cpp b/src/core/SkVM.cpp index f17d18c16cd07..523f2a52ddccc 100644 --- a/src/core/SkVM.cpp +++ b/src/core/SkVM.cpp @@ -38,10 +38,63 @@ bool gSkVMJITViaDylib{false}; #if defined(SKVM_JIT) - #include // dlopen, dlsym - #include // mmap, mprotect + #if defined(SK_BUILD_FOR_WIN) + #include "src/core/SkLeanWindows.h" + #include + + static void* alloc_jit_buffer(size_t* len) { + return VirtualAlloc(NULL, *len, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); + } + static void unmap_jit_buffer(void* ptr, size_t len) { + VirtualFree(ptr, 0, MEM_RELEASE); + } + static void remap_as_executable(void* ptr, size_t len) { + DWORD old; + VirtualProtect(ptr, len, PAGE_EXECUTE_READ, &old); + SkASSERT(old == PAGE_READWRITE); + } + static void close_dylib(void* dylib) { + SkASSERT(false); // TODO? For now just assert we never make one. + } + #else + #include + #include + + static void* alloc_jit_buffer(size_t* len) { + // While mprotect and VirtualAlloc both work at page granularity, + // mprotect doesn't round up for you, and instead requires *len is at page granularity. + const size_t page = sysconf(_SC_PAGESIZE); + *len = ((*len + page - 1) / page) * page; + return mmap(nullptr,*len, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1,0); + } + static void unmap_jit_buffer(void* ptr, size_t len) { + munmap(ptr, len); + } + static void remap_as_executable(void* ptr, size_t len) { + mprotect(ptr, len, PROT_READ|PROT_EXEC); + __builtin___clear_cache((char*)ptr, + (char*)ptr + len); + } + static void close_dylib(void* dylib) { + dlclose(dylib); + } + #endif #endif +// JIT code isn't MSAN-instrumented, so we won't see when it uses +// uninitialized memory, and we'll not see the writes it makes as properly +// initializing memory. Instead force the interpreter, which should let +// MSAN see everything our programs do properly. +// +// Similarly, we can't get ASAN's checks unless we let it instrument our interpreter. +#if defined(__has_feature) + #if __has_feature(memory_sanitizer) || __has_feature(address_sanitizer) + #define SKVM_JIT_BUT_IGNORE_IT + #endif +#endif + + + namespace skvm { struct Program::Impl { @@ -250,6 +303,7 @@ namespace skvm { case Op::select: write(o, V{id}, "=", op, V{x}, V{y}, V{z}, fs(id)...); break; case Op::pack: write(o, V{id}, "=", op, V{x}, V{y}, Shift{immz}, fs(id)...); break; + case Op::ceil: write(o, V{id}, "=", op, V{x}, fs(id)...); break; case Op::floor: write(o, V{id}, "=", op, V{x}, fs(id)...); break; case Op::to_f32: write(o, V{id}, "=", op, V{x}, fs(id)...); break; case Op::trunc: write(o, V{id}, "=", op, V{x}, fs(id)...); break; @@ -369,6 +423,7 @@ namespace skvm { case Op::select: write(o, R{d}, "=", op, R{x}, R{y}, R{z}); break; case Op::pack: write(o, R{d}, "=", op, R{x}, R{y}, Shift{immz}); break; + case Op::ceil: write(o, R{d}, "=", op, R{x}); break; case Op::floor: write(o, R{d}, "=", op, R{x}); break; case Op::to_f32: write(o, R{d}, "=", op, R{x}); break; case Op::trunc: write(o, R{d}, "=", op, R{x}); break; @@ -1013,6 +1068,10 @@ namespace skvm { return {this, this->push(Op::pack, x.id,y.id,NA, 0,bits)}; } + F32 Builder::ceil(F32 x) { + if (float X; this->allImm(x.id,&X)) { return splat(ceilf(X)); } + return {this, this->push(Op::ceil, x.id)}; + } F32 Builder::floor(F32 x) { if (float X; this->allImm(x.id,&X)) { return splat(floorf(X)); } return {this, this->push(Op::floor, x.id)}; @@ -1234,32 +1293,35 @@ namespace skvm { }; switch (mode) { - default: SkASSERT(false); /*but also, for safety, fallthrough*/ + default: + SkASSERT(false); + [[fallthrough]]; /*but also, for safety, fallthrough*/ case SkBlendMode::kClear: return { splat(0.0f), splat(0.0f), splat(0.0f), splat(0.0f) }; case SkBlendMode::kSrc: return src; case SkBlendMode::kDst: return dst; - case SkBlendMode::kDstOver: std::swap(src, dst); // fall-through + case SkBlendMode::kDstOver: std::swap(src, dst); [[fallthrough]]; case SkBlendMode::kSrcOver: return apply_rgba([&](auto s, auto d) { return mad(d,1-src.a, s); }); - case SkBlendMode::kDstIn: std::swap(src, dst); // fall-through + case SkBlendMode::kDstIn: std::swap(src, dst); [[fallthrough]]; case SkBlendMode::kSrcIn: return apply_rgba([&](auto s, auto d) { return s * dst.a; }); - case SkBlendMode::kDstOut: std::swap(src, dst); // fall-through + case SkBlendMode::kDstOut: std::swap(src, dst); [[fallthrough]]; + case SkBlendMode::kSrcOut: return apply_rgba([&](auto s, auto d) { return s * (1-dst.a); }); - case SkBlendMode::kDstATop: std::swap(src, dst); // fall-through + case SkBlendMode::kDstATop: std::swap(src, dst); [[fallthrough]]; case SkBlendMode::kSrcATop: return apply_rgba([&](auto s, auto d) { return mma(s, dst.a, d, 1-src.a); @@ -1792,6 +1854,7 @@ namespace skvm { void Assembler::vmovdqa(Ymm dst, Operand src) { this->op(0x66,0x0f,0x6f, dst,src); } void Assembler::vmovups(Ymm dst, Operand src) { this->op( 0,0x0f,0x10, dst,src); } + void Assembler::vmovups(Xmm dst, Operand src) { this->op( 0,0x0f,0x10, dst,src); } void Assembler::vmovups(Operand dst, Ymm src) { this->op( 0,0x0f,0x11, src,dst); } void Assembler::vmovups(Operand dst, Xmm src) { this->op( 0,0x0f,0x11, src,dst); } @@ -2140,13 +2203,15 @@ namespace skvm { }); } #endif + + #if !defined(SKVM_JIT_BUT_IGNORE_IT) // This may fail either simply because we can't JIT, or when using LLVM, // because the work represented by fImpl->llvm_compiling hasn't finished yet. if (const void* b = fImpl->jit_entry.load()) { - #if SKVM_JIT_STATS + #if SKVM_JIT_STATS jits++; fast += n; - #endif + #endif void** a = args; switch (fImpl->strides.size()) { case 0: return ((void(*)(int ))b)(n ); @@ -2159,6 +2224,7 @@ namespace skvm { default: SkUNREACHABLE; // TODO } } + #endif // So we'll sometimes use the interpreter here even if later calls will use the JIT. SkOpts::interpret_skvm(fImpl->instructions.data(), (int)fImpl->instructions.size(), @@ -2349,6 +2415,9 @@ namespace skvm { F(vals[z])})); break; + case Op::ceil: + vals[i] = I(b->CreateUnaryIntrinsic(llvm::Intrinsic::ceil, F(vals[x]))); + break; case Op::floor: vals[i] = I(b->CreateUnaryIntrinsic(llvm::Intrinsic::floor, F(vals[x]))); break; @@ -2584,9 +2653,9 @@ namespace skvm { fImpl->llvm_ctx.reset(nullptr); #elif defined(SKVM_JIT) if (fImpl->dylib) { - dlclose(fImpl->dylib); + close_dylib(fImpl->dylib); } else if (auto jit_entry = fImpl->jit_entry.load()) { - munmap(jit_entry, fImpl->jit_size); + unmap_jit_buffer(jit_entry, fImpl->jit_size); } #else SkASSERT(!this->hasJIT()); @@ -2755,15 +2824,67 @@ namespace skvm { : stack_slot.size(); - #if defined(__x86_64__) + #if defined(__x86_64__) || defined(_M_X64) if (!SkCpu::Supports(SkCpu::HSW)) { return false; } const int K = 8; - const A::GP64 N = A::rdi, - GP0 = A::rax, - GP1 = A::r11, - arg[] = { A::rsi, A::rdx, A::rcx, A::r8, A::r9 }; + #if defined(_M_X64) // Important to check this first; clang-cl defines both. + const A::GP64 N = A::rcx, + GP0 = A::rax, + GP1 = A::r11, + arg[] = { A::rdx, A::r8, A::r9, A::r10, A::rdi }; + auto enter = [&]{ + // Fun extra setup to work within the MS ABI: + // 0) rcx,rdx,r8,r9 are all already holding their correct values, + // and rax,r10,r11 can be used freely. + // 1) Load r10 from rsp+40 if there's a fourth arg. + if (fImpl->strides.size() >= 4) { + a->mov(A::r10, A::Mem{A::rsp, 40}); + } + // 2) Load rdi from rsp+48 if there's a fifth arg, + // first preserving its original callee-saved value at rsp+8, + // which is an ABI reserved shadow area usually for spilling rcx. + if (fImpl->strides.size() >= 5) { + a->mov(A::Mem{A::rsp, 8}, A::rdi); + a->mov(A::rdi, A::Mem{A::rsp, 48}); + } + // 3) Save xmm6-xmm15. + a->sub(A::rsp, 10*16); + for (int i = 0; i < 10; i++) { + a->vmovups(A::Mem{A::rsp, i*16}, (A::Xmm)(i+6)); + } + + // Now our normal "make space for values". + if (nstack_slots) { a->sub(A::rsp, nstack_slots*K*4); } + }; + auto exit = [&]{ + if (nstack_slots) { a->add(A::rsp, nstack_slots*K*4); } + // Undo MS ABI setup in reverse. + // 3) restore xmm6-xmm15 + for (int i = 0; i < 10; i++) { + a->vmovups((A::Xmm)(i+6), A::Mem{A::rsp, i*16}); + } + a->add(A::rsp, 10*16); + // 2) restore rdi if we used it + if (fImpl->strides.size() >= 5) { + a->mov(A::rdi, A::Mem{A::rsp, 8}); + } + // 1) no need to restore caller-saved r10 + a->vzeroupper(); + a->ret(); + }; + #elif defined(__x86_64__) + const A::GP64 N = A::rdi, + GP0 = A::rax, + GP1 = A::r11, + arg[] = { A::rsi, A::rdx, A::rcx, A::r8, A::r9 }; + + auto enter = [&]{ if (nstack_slots) { a->sub(A::rsp, nstack_slots*K*4); } }; + auto exit = [&]{ if (nstack_slots) { a->add(A::rsp, nstack_slots*K*4); } + a->vzeroupper(); + a->ret(); }; + #endif // All 16 ymm registers are available to use. using Reg = A::Ymm; @@ -2777,7 +2898,7 @@ namespace skvm { if (instructions[v].immy == 0) { a->vpxor(r,r,r); } else { - a->vmovups(r, &constants[instructions[v].immy]); + a->vmovups(r, constants.find(instructions[v].immy)); } } else { SkASSERT(stack_slot[v] != NA); @@ -2795,7 +2916,11 @@ namespace skvm { GP0 = A::x8, arg[] = { A::x1, A::x2, A::x3, A::x4, A::x5, A::x6, A::x7 }; - // We can use v0-v7 and v16-v31 freely; we'd need to preserve v8-v15. + auto enter = [&]{ if (nstack_slots) { a->sub(A::sp, A::sp, nstack_slots*K*4); } }; + auto exit = [&]{ if (nstack_slots) { a->add(A::sp, A::sp, nstack_slots*K*4); } + a->ret(A::x30); }; + + // We can use v0-v7 and v16-v31 freely; we'd need to preserve v8-v15 in enter/exit. using Reg = A::V; std::array regs = { NA, NA, NA, NA, NA, NA, NA, NA, @@ -2809,7 +2934,7 @@ namespace skvm { if (instructions[v].immy == 0) { a->eor16b(r,r,r); } else { - a->ldrq(r, &constants[instructions[v].immy]); + a->ldrq(r, constants.find(instructions[v].immy)); } } else { SkASSERT(stack_slot[v] != NA); @@ -2876,7 +3001,7 @@ namespace skvm { return r; }; - #if defined(__x86_64__) // Nothing special... just happens to not be used on ARM right now. + #if defined(__x86_64__) || defined(_M_X64) // Nothing special... just unused on ARM. auto free_tmp = [&](Reg r) { SkASSERT(regs[r] == TMP); regs[r] = NA; @@ -2960,7 +3085,7 @@ namespace skvm { return r(id); }; - #if defined(__x86_64__) + #if defined(__x86_64__) || defined(_M_X64) // On x86 we can work with many values directly from the stack or program constant pool. auto any = [&](Val v) -> A::Operand { SkASSERT(v >= 0); @@ -2970,7 +3095,7 @@ namespace skvm { return (Reg)found; } if (instructions[v].op == Op::splat) { - return &constants[instructions[v].immy]; + return constants.find(instructions[v].immy); } return A::Mem{A::rsp, stack_slot[v]*K*4}; }; @@ -2983,10 +3108,12 @@ namespace skvm { #endif switch (op) { - // Splats are handled above. - case Op::splat: break; + case Op::splat: + // Make sure splat constants can be found by load_from_memory() or any(). + (void)constants[immy]; + break; - #if defined(__x86_64__) + #if defined(__x86_64__) || defined(_M_X64) case Op::assert_true: { a->vptest (r(x), &constants[0xffffffff]); A::Label all_true; @@ -3220,6 +3347,11 @@ namespace skvm { a->vpor (dst(), dst(), any(x)); break; + case Op::ceil: + if (in_reg(x)) { a->vroundps(dst(x), r(x), Assembler::CEIL); } + else { a->vroundps(dst(), any(x), Assembler::CEIL); } + break; + case Op::floor: if (in_reg(x)) { a->vroundps(dst(x), r(x), Assembler::FLOOR); } else { a->vroundps(dst(), any(x), Assembler::FLOOR); } @@ -3363,27 +3495,18 @@ namespace skvm { return true; }; - #if defined(__x86_64__) + #if defined(__x86_64__) || defined(_M_X64) auto jump_if_less = [&](A::Label* l) { a->jl (l); }; auto jump = [&](A::Label* l) { a->jmp(l); }; auto add = [&](A::GP64 gp, int imm) { a->add(gp, imm); }; auto sub = [&](A::GP64 gp, int imm) { a->sub(gp, imm); }; - - auto enter = [&]{ if (nstack_slots) { a->sub(A::rsp, nstack_slots*K*4); } }; - auto exit = [&]{ if (nstack_slots) { a->add(A::rsp, nstack_slots*K*4); } - a->vzeroupper(); - a->ret(); }; #elif defined(__aarch64__) auto jump_if_less = [&](A::Label* l) { a->blt(l); }; auto jump = [&](A::Label* l) { a->b (l); }; auto add = [&](A::X gp, int imm) { a->add(gp, gp, imm); }; auto sub = [&](A::X gp, int imm) { a->sub(gp, gp, imm); }; - - auto enter = [&]{ if (nstack_slots) { a->sub(A::sp, A::sp, nstack_slots*K*4); } }; - auto exit = [&]{ if (nstack_slots) { a->add(A::sp, A::sp, nstack_slots*K*4); } - a->ret(A::x30); }; #endif A::Label body, @@ -3491,14 +3614,8 @@ namespace skvm { return; } - // Allocate space that we can remap as executable. - const size_t page = sysconf(_SC_PAGESIZE); - - // mprotect works at page granularity. - fImpl->jit_size = ((a.size() + page - 1) / page) * page; - - void* jit_entry - = mmap(nullptr,fImpl->jit_size, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1,0); + fImpl->jit_size = a.size(); + void* jit_entry = alloc_jit_buffer(&fImpl->jit_size); fImpl->jit_entry.store(jit_entry); // Assemble the program for real. @@ -3507,10 +3624,9 @@ namespace skvm { SkASSERT(a.size() <= fImpl->jit_size); // Remap as executable, and flush caches on platforms that need that. - mprotect(jit_entry, fImpl->jit_size, PROT_READ|PROT_EXEC); - __builtin___clear_cache((char*)jit_entry, - (char*)jit_entry + fImpl->jit_size); + remap_as_executable(jit_entry, fImpl->jit_size); + #if !defined(SK_BUILD_FOR_WIN) // For profiling and debugging, it's helpful to have this code loaded // dynamically rather than just jumping info fImpl->jit_entry. if (gSkVMJITViaDylib) { @@ -3537,6 +3653,7 @@ namespace skvm { } fImpl->jit_entry.store(sym); } + #endif } #endif diff --git a/src/core/SkVM.h b/src/core/SkVM.h index 9ae8f2e3d5079..a21304fca25d2 100644 --- a/src/core/SkVM.h +++ b/src/core/SkVM.h @@ -23,18 +23,6 @@ class SkWStream; #define SKVM_LLVM #endif -// JIT code isn't MSAN-instrumented, so we won't see when it uses -// uninitialized memory, and we'll not see the writes it makes as properly -// initializing memory. Instead force the interpreter, which should let -// MSAN see everything our programs do properly. -// -// Similarly, we can't get ASAN's checks unless we let it instrument our interpreter. -#if defined(__has_feature) - #if __has_feature(memory_sanitizer) || __has_feature(address_sanitizer) - #undef SKVM_JIT - #endif -#endif - namespace skvm { bool fma_supported(); @@ -47,9 +35,10 @@ namespace skvm { // Order matters... GP64, Xmm, Ymm values match 4-bit register encoding for each. enum GP64 { - rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, - r8 , r9 , r10, r11, r12, r13, r14, r15, + rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, + r8 , r9 , r10, r11, r12BROKENDONOTUSE, r13, r14, r15, }; + // TODO: need to fix up assembler before r12 is safe to use enum Xmm { xmm0, xmm1, xmm2 , xmm3 , xmm4 , xmm5 , xmm6 , xmm7 , xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15, @@ -174,6 +163,7 @@ namespace skvm { void vmovdqa(Ymm dst, Operand x); void vmovups(Ymm dst, Operand x); + void vmovups(Xmm dst, Operand x); void vmovups(Operand dst, Ymm x); void vmovups(Operand dst, Xmm x); @@ -387,7 +377,8 @@ namespace skvm { M(fma_f32) M(fms_f32) M(fnma_f32) \ M(sqrt_f32) \ M(shl_i32) M(shr_i32) M(sra_i32) \ - M(floor) M(trunc) M(round) M(to_f32) \ + M(ceil) M(floor) M(trunc) M(round) \ + M(to_f32) \ M( eq_f32) M( eq_i32) \ M(neq_f32) \ M( gt_f32) M( gt_i32) \ @@ -475,6 +466,12 @@ namespace skvm { Builder* operator->() const { return a.operator->(); } }; + struct Coord { + F32 x,y; + explicit operator bool() const { return x && y; } + Builder* operator->() const { return x.operator->(); } + }; + struct Uniform { Arg ptr; int offset; @@ -642,6 +639,7 @@ namespace skvm { F32 abs(F32 x) { return bit_cast(bit_and(bit_cast(x), 0x7fff'ffff)); } F32 fract(F32 x) { return sub(x, floor(x)); } + F32 ceil(F32); F32 floor(F32); I32 is_NaN(F32 x) { return neq(x,x); } @@ -978,6 +976,7 @@ namespace skvm { static inline F32 clamp01(F32 x) { return x->clamp01(x); } static inline F32 abs(F32 x) { return x-> abs(x); } + static inline F32 ceil(F32 x) { return x-> ceil(x); } static inline F32 fract(F32 x) { return x-> fract(x); } static inline F32 floor(F32 x) { return x-> floor(x); } static inline I32 is_NaN(F32 x) { return x-> is_NaN(x); } diff --git a/src/core/SkVMBlitter.cpp b/src/core/SkVMBlitter.cpp index 37172c8b7f9b0..196fae8a5cc35 100644 --- a/src/core/SkVMBlitter.cpp +++ b/src/core/SkVMBlitter.cpp @@ -9,6 +9,7 @@ #include "include/private/SkMacros.h" #include "src/core/SkArenaAlloc.h" #include "src/core/SkBlendModePriv.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkColorSpaceXformSteps.h" #include "src/core/SkCoreBlitters.h" @@ -34,13 +35,13 @@ namespace { enum class Coverage { Full, UniformA8, MaskA8, MaskLCD16, Mask3D }; struct Params { - sk_sp shader; - sk_sp clip; - SkColorInfo dst; - SkBlendMode blendMode; - Coverage coverage; - SkFilterQuality quality; - SkMatrix ctm; + sk_sp shader; + sk_sp clip; + SkColorInfo dst; + SkBlendMode blendMode; + Coverage coverage; + SkFilterQuality quality; + const SkMatrixProvider& matrices; Params withCoverage(Coverage c) const { Params p = *this; @@ -59,7 +60,7 @@ namespace { blendMode, coverage; uint32_t padding{0}; - // Params::quality and Params::ctm are only passed to {shader,clip}->program(), + // Params::quality and Params::matrices are only passed to {shader,clip}->program(), // not used here by the blitter itself. No need to include them in the key; // they'll be folded into the shader key if used. @@ -117,8 +118,9 @@ namespace { skvm::I32 dx = p.uniform32(uniforms->base, offsetof(BlitterUniforms, right)) - p.index(), dy = p.uniform32(uniforms->base, offsetof(BlitterUniforms, y)); - skvm::F32 x = to_f32(dx) + 0.5f, - y = to_f32(dy) + 0.5f; + skvm::Coord device = {to_f32(dx) + 0.5f, + to_f32(dy) + 0.5f}, + local = device; skvm::Color paint = { p.uniformF(uniforms->base, offsetof(BlitterUniforms, paint.fR)), @@ -129,8 +131,8 @@ namespace { uint64_t hash = 0; if (auto c = sb->program(&p, - x,y, paint, - params.ctm, /*localM=*/nullptr, + device,local, paint, + params.matrices, /*localM=*/nullptr, params.quality, params.dst, uniforms,alloc)) { hash = p.hash(); @@ -197,8 +199,9 @@ namespace { skvm::I32 dx = p->uniform32(uniforms->base, offsetof(BlitterUniforms, right)) - p->index(), dy = p->uniform32(uniforms->base, offsetof(BlitterUniforms, y)); - skvm::F32 x = to_f32(dx) + 0.5f, - y = to_f32(dy) + 0.5f; + skvm::Coord device = {to_f32(dx) + 0.5f, + to_f32(dy) + 0.5f}, + local = device; skvm::Color paint = { p->uniformF(uniforms->base, offsetof(BlitterUniforms, paint.fR)), @@ -207,8 +210,8 @@ namespace { p->uniformF(uniforms->base, offsetof(BlitterUniforms, paint.fA)), }; - skvm::Color src = as_SB(params.shader)->program(p, x,y, paint, - params.ctm, /*localM=*/nullptr, + skvm::Color src = as_SB(params.shader)->program(p, device,local, paint, + params.matrices, /*localM=*/nullptr, params.quality, params.dst, uniforms, alloc); SkASSERT(src); @@ -274,8 +277,8 @@ namespace { } if (params.clip) { - skvm::Color clip = as_SB(params.clip)->program(p, x,y, paint, - params.ctm, /*localM=*/nullptr, + skvm::Color clip = as_SB(params.clip)->program(p, device,local, paint, + params.matrices, /*localM=*/nullptr, params.quality, params.dst, uniforms, alloc); SkAssertResult(clip); @@ -404,7 +407,7 @@ namespace { } - struct NoopColorFilter : public SkColorFilter { + struct NoopColorFilter : public SkColorFilterBase { skvm::Color onProgram(skvm::Builder*, skvm::Color c, SkColorSpace*, skvm::Uniforms*, SkArenaAlloc*) const override { return c; @@ -428,13 +431,14 @@ namespace { bool isOpaque() const override { return fShader->isOpaque(); } - skvm::Color onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder* p, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& matrices, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override { // Run our wrapped shader. - skvm::Color c = as_SB(fShader)->program(p, x,y, paint, - ctm,localM, quality,dst, uniforms,alloc); + skvm::Color c = as_SB(fShader)->program(p, device,local, paint, + matrices,localM, quality,dst, uniforms,alloc); if (!c) { return {}; } @@ -467,8 +471,10 @@ namespace { // See SkRasterPipeline dither stage. // This is 8x8 ordered dithering. From here we'll only need dx and dx^dy. - skvm::I32 X = trunc(x - 0.5f), - Y = X ^ trunc(y - 0.5f); + SkASSERT(local.x.id == device.x.id); + SkASSERT(local.y.id == device.y.id); + skvm::I32 X = trunc(device.x - 0.5f), + Y = X ^ trunc(device.y - 0.5f); // If X's low bits are abc and Y's def, M is fcebda, // 6 bits producing all values [0,63] shuffled over an 8x8 grid. @@ -501,7 +507,7 @@ namespace { static Params effective_params(const SkPixmap& device, const SkPaint& paint, - const SkMatrix& ctm, + const SkMatrixProvider& matrices, sk_sp clip) { // Color filters have been handled for us by SkBlitter::Choose(). SkASSERT(!paint.getColorFilter()); @@ -547,7 +553,7 @@ namespace { blendMode, Coverage::Full, // Placeholder... withCoverage() will change as needed. paint.getFilterQuality(), - ctm, + matrices, }; } @@ -555,12 +561,12 @@ namespace { public: Blitter(const SkPixmap& device, const SkPaint& paint, - const SkMatrix& ctm, + const SkMatrixProvider& matrices, sk_sp clip, bool* ok) : fDevice(device) , fUniforms(kBlitterUniformsCount) - , fParams(effective_params(device, paint, ctm, std::move(clip))) + , fParams(effective_params(device, paint, matrices, std::move(clip))) , fKey(cache_key(fParams, &fUniforms, &fAlloc, ok)) , fPaint([&]{ SkColor4f color = paint.getColor4f(); @@ -737,10 +743,10 @@ namespace { SkBlitter* SkCreateSkVMBlitter(const SkPixmap& device, const SkPaint& paint, - const SkMatrix& ctm, + const SkMatrixProvider& matrices, SkArenaAlloc* alloc, sk_sp clip) { bool ok = true; - auto blitter = alloc->make(device, paint, ctm, std::move(clip), &ok); + auto blitter = alloc->make(device, paint, matrices, std::move(clip), &ok); return ok ? blitter : nullptr; } diff --git a/src/core/SkVM_fwd.h b/src/core/SkVM_fwd.h index 1442a9fa9d9d8..e8dc43f6e3fb6 100644 --- a/src/core/SkVM_fwd.h +++ b/src/core/SkVM_fwd.h @@ -16,6 +16,7 @@ namespace skvm { struct I32; struct F32; struct Color; + struct Coord; struct Uniforms; } diff --git a/src/core/SkValidatingReadBuffer.h b/src/core/SkValidatingReadBuffer.h deleted file mode 100644 index 887c621f84d3b..0000000000000 --- a/src/core/SkValidatingReadBuffer.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkValidatingReadBuffer_DEFINED -#define SkValidatingReadBuffer_DEFINED - -#include "include/core/SkPath.h" -#include "include/core/SkPicture.h" -#include "include/core/SkRefCnt.h" -#include "src/core/SkReadBuffer.h" -#include "src/core/SkReader32.h" -#include "src/core/SkWriteBuffer.h" - -class SkBitmap; - -// DEPRECATED -- just use SkReadBuffer (so we can delete this header) -typedef SkReadBuffer SkValidatingReadBuffer; - -#endif diff --git a/src/core/SkVertices.cpp b/src/core/SkVertices.cpp index 0f1a834027661..e2bb1a8b07986 100644 --- a/src/core/SkVertices.cpp +++ b/src/core/SkVertices.cpp @@ -174,7 +174,7 @@ struct SkVertices::Sizes { bool isValid() const { return fTotal != 0; } - size_t fTotal; // size of entire SkVertices allocation (obj + arrays) + size_t fTotal = 0; // size of entire SkVertices allocation (obj + arrays) size_t fAttrSize; // size of attributes size_t fNameSize; // size of attribute marker names size_t fArrays; // size of all the data arrays (V + D + T + C + I) diff --git a/src/core/SkWriteBuffer.cpp b/src/core/SkWriteBuffer.cpp index f12099ab16467..4e0424fac5394 100644 --- a/src/core/SkWriteBuffer.cpp +++ b/src/core/SkWriteBuffer.cpp @@ -219,32 +219,29 @@ void SkBinaryWriteBuffer::writeFlattenable(const SkFlattenable* flattenable) { * already written the string, we write its index instead. */ - SkFlattenable::Factory factory = flattenable->getFactory(); - SkASSERT(factory); if (fFactorySet) { + SkFlattenable::Factory factory = flattenable->getFactory(); + SkASSERT(factory); + this->write32(fFactorySet->add(factory)); } else { + const char* name = flattenable->getTypeName(); + SkASSERT(name); + SkASSERT(0 != strcmp("", name)); - if (uint32_t* indexPtr = fFlattenableDict.find(factory)) { + if (uint32_t* indexPtr = fFlattenableDict.find(name)) { // We will write the index as a 32-bit int. We want the first byte // that we send to be zero - this will act as a sentinel that we // have an index (not a string). This means that we will send the // the index shifted left by 8. The remaining 24-bits should be // plenty to store the index. Note that this strategy depends on - // being little endian. + // being little endian, and type names being non-empty. SkASSERT(0 == *indexPtr >> 24); this->write32(*indexPtr << 8); } else { - const char* name = flattenable->getTypeName(); - SkASSERT(name); - // Otherwise write the string. Clients should not use the empty - // string as a name, or we will have a problem. - SkASSERT(0 != strcmp("", name)); this->writeString(name); - - // Add key to dictionary. - fFlattenableDict.set(factory, fFlattenableDict.count() + 1); + fFlattenableDict.set(name, fFlattenableDict.count() + 1); } } diff --git a/src/core/SkWriteBuffer.h b/src/core/SkWriteBuffer.h index 5bd58e9156d65..f962786d2a2fa 100644 --- a/src/core/SkWriteBuffer.h +++ b/src/core/SkWriteBuffer.h @@ -122,6 +122,7 @@ class SkBinaryWriteBuffer : public SkWriteBuffer { bool writeToStream(SkWStream*) const; void writeToMemory(void* dst) const { fWriter.flatten(dst); } + sk_sp snapshotAsData() const { return fWriter.snapshotAsData(); } void setFactoryRecorder(sk_sp); void setTypefaceRecorder(sk_sp); @@ -133,7 +134,7 @@ class SkBinaryWriteBuffer : public SkWriteBuffer { SkWriter32 fWriter; // Only used if we do not have an fFactorySet - SkTHashMap fFlattenableDict; + SkTHashMap fFlattenableDict; }; #endif // SkWriteBuffer_DEFINED diff --git a/src/core/SkWriter32.cpp b/src/core/SkWriter32.cpp index 589382b381cb4..aa96531dfcdb9 100644 --- a/src/core/SkWriter32.cpp +++ b/src/core/SkWriter32.cpp @@ -5,11 +5,8 @@ * found in the LICENSE file. */ -#include "include/core/SkString.h" #include "include/private/SkTo.h" #include "src/core/SkMatrixPriv.h" -#include "src/core/SkReader32.h" - #include "src/core/SkWriter32.h" void SkWriter32::writeMatrix(const SkMatrix& matrix) { @@ -18,33 +15,6 @@ void SkWriter32::writeMatrix(const SkMatrix& matrix) { SkMatrixPriv::WriteToMemory(matrix, this->reserve(size)); } -/* - * Strings are stored as: length[4-bytes] + string_data + '\0' + pad_to_mul_4 - */ - -const char* SkReader32::readString(size_t* outLen) { - size_t len = this->readU32(); - const void* ptr = this->peek(); - - // skip over the string + '\0' and then pad to a multiple of 4 - size_t alignedSize = SkAlign4(len + 1); - this->skip(alignedSize); - - if (outLen) { - *outLen = len; - } - return (const char*)ptr; -} - -size_t SkReader32::readIntoString(SkString* copy) { - size_t len; - const char* ptr = this->readString(&len); - if (copy) { - copy->set(ptr, len); - } - return len; -} - void SkWriter32::writeString(const char str[], size_t len) { if (nullptr == str) { str = ""; diff --git a/src/core/SkWriter32.h b/src/core/SkWriter32.h index ca0664e401215..8e2595873bf68 100644 --- a/src/core/SkWriter32.h +++ b/src/core/SkWriter32.h @@ -110,12 +110,6 @@ class SkWriter32 : SkNoncopyable { *(int32_t*)this->reserve(sizeof(value)) = value; } - void writePtr(void* value) { - // this->reserve() only returns 4-byte aligned pointers, - // so this may be an under-aligned write if we were to do this like the others. - memcpy(this->reserve(sizeof(value)), &value, sizeof(value)); - } - void writeScalar(SkScalar value) { *(SkScalar*)this->reserve(sizeof(value)) = value; } @@ -190,10 +184,9 @@ class SkWriter32 : SkNoncopyable { } /** - * Writes a string to the writer, which can be retrieved with - * SkReader32::readString(). - * The length can be specified, or if -1 is passed, it will be computed by - * calling strlen(). The length must be < max size_t. + * Writes a string to the writer, which can be retrieved with SkReadBuffer::readString(). + * The length can be specified, or if -1 is passed, it will be computed by calling strlen(). + * The length must be < max size_t. * * If you write NULL, it will be read as "". */ diff --git a/src/effects/Sk1DPathEffect.cpp b/src/effects/Sk1DPathEffect.cpp index 360179d6631fc..16dee4a90b641 100644 --- a/src/effects/Sk1DPathEffect.cpp +++ b/src/effects/Sk1DPathEffect.cpp @@ -127,7 +127,7 @@ static void morphpath(SkPath* dst, const SkPath& src, SkPathMeasure& meas, srcP[2] = srcP[1]; srcP[1].set(SkScalarAve(srcP[0].fX, srcP[2].fX), SkScalarAve(srcP[0].fY, srcP[2].fY)); - // fall through to quad + [[fallthrough]]; case SkPath::kQuad_Verb: if (morphpoints(dstP, &srcP[1], 2, meas, dist)) { dst->quadTo(dstP[0], dstP[1]); diff --git a/src/effects/SkHighContrastFilter.cpp b/src/effects/SkHighContrastFilter.cpp index 4e78f8dc8480a..b670462166e22 100644 --- a/src/effects/SkHighContrastFilter.cpp +++ b/src/effects/SkHighContrastFilter.cpp @@ -9,6 +9,7 @@ #include "include/effects/SkHighContrastFilter.h" #include "include/private/SkColorData.h" #include "src/core/SkArenaAlloc.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkEffectPriv.h" #include "src/core/SkRasterPipeline.h" @@ -25,7 +26,7 @@ using InvertStyle = SkHighContrastConfig::InvertStyle; -class SkHighContrast_Filter : public SkColorFilter { +class SkHighContrast_Filter : public SkColorFilterBase { public: SkHighContrast_Filter(const SkHighContrastConfig& config) { fConfig = config; diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp index 13efc7514b31d..43c0596651577 100644 --- a/src/effects/SkLumaColorFilter.cpp +++ b/src/effects/SkLumaColorFilter.cpp @@ -8,6 +8,7 @@ #include "include/core/SkString.h" #include "include/effects/SkLumaColorFilter.h" #include "include/private/SkColorData.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkEffectPriv.h" #include "src/core/SkRasterPipeline.h" #include "src/core/SkVM.h" @@ -19,39 +20,51 @@ #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #endif -bool SkLumaColorFilter::onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const { - rec.fPipeline->append(SkRasterPipeline::bt709_luminance_or_luma_to_alpha); - rec.fPipeline->append(SkRasterPipeline::clamp_0); - rec.fPipeline->append(SkRasterPipeline::clamp_1); - return true; -} +class SkLumaColorFilterImpl : public SkColorFilterBase { +public: +#if SK_SUPPORT_GPU + bool colorFilterAcceptsInputFP() const override { return true; } + GrFPResult asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext*, const GrColorInfo&) const override { + return GrFPSuccess(GrLumaColorFilterEffect::Make(std::move(inputFP))); + } +#endif -skvm::Color SkLumaColorFilter::onProgram(skvm::Builder* p, skvm::Color c, - SkColorSpace* dstCS, - skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { - return { - p->splat(0.0f), - p->splat(0.0f), - p->splat(0.0f), - clamp01(c.r * 0.2126f + c.g * 0.7152f + c.b * 0.0722f), - }; -} + static sk_sp CreateProc(SkReadBuffer&) { + return SkLumaColorFilter::Make(); + } -sk_sp SkLumaColorFilter::Make() { - return sk_sp(new SkLumaColorFilter); -} +protected: + void flatten(SkWriteBuffer&) const override {} -SkLumaColorFilter::SkLumaColorFilter() : INHERITED() {} +private: + Factory getFactory() const override { return CreateProc; } + const char* getTypeName() const override { return "SkLumaColorFilter"; } -sk_sp SkLumaColorFilter::CreateProc(SkReadBuffer&) { - return Make(); -} + bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override { + rec.fPipeline->append(SkRasterPipeline::bt709_luminance_or_luma_to_alpha); + rec.fPipeline->append(SkRasterPipeline::clamp_0); + rec.fPipeline->append(SkRasterPipeline::clamp_1); + return true; + } -void SkLumaColorFilter::flatten(SkWriteBuffer&) const {} + skvm::Color onProgram(skvm::Builder* p, skvm::Color c, SkColorSpace*, skvm::Uniforms*, + SkArenaAlloc*) const override { + return { + p->splat(0.0f), + p->splat(0.0f), + p->splat(0.0f), + clamp01(c.r * 0.2126f + c.g * 0.7152f + c.b * 0.0722f), + }; + } -#if SK_SUPPORT_GPU -std::unique_ptr SkLumaColorFilter::asFragmentProcessor( - GrRecordingContext*, const GrColorInfo&) const { - return GrLumaColorFilterEffect::Make(); + typedef SkColorFilterBase INHERITED; +}; + +sk_sp SkLumaColorFilter::Make() { + return sk_sp(new SkLumaColorFilterImpl); +} + +void SkLumaColorFilter::RegisterFlattenable() { + SkFlattenable::Register("SkLumaColorFilter", SkLumaColorFilterImpl::CreateProc); } -#endif diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp index 4c5839246d3db..5fce479feb288 100644 --- a/src/effects/SkTableColorFilter.cpp +++ b/src/effects/SkTableColorFilter.cpp @@ -13,54 +13,36 @@ #include "include/private/SkColorData.h" #include "include/private/SkTo.h" #include "src/core/SkArenaAlloc.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkEffectPriv.h" #include "src/core/SkRasterPipeline.h" #include "src/core/SkReadBuffer.h" #include "src/core/SkVM.h" #include "src/core/SkWriteBuffer.h" -static const uint8_t gIdentityTable[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, - 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, - 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, - 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, - 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, - 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, - 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, - 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, - 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, - 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, - 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, - 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, - 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, - 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, - 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, - 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, - 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, - 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, - 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, - 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, - 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, - 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF +static const uint8_t kIdentityTable[] = { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, + 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, + 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, + 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF }; -class SkTable_ColorFilter : public SkColorFilter { +class SkTable_ColorFilter : public SkColorFilterBase { public: SkTable_ColorFilter(const uint8_t tableA[], const uint8_t tableR[], const uint8_t tableG[], const uint8_t tableB[]) { - fBitmap = nullptr; - fFlags = 0; - uint8_t* dst = fStorage; if (tableA) { memcpy(dst, tableA, 256); @@ -86,8 +68,9 @@ class SkTable_ColorFilter : public SkColorFilter { ~SkTable_ColorFilter() override { delete fBitmap; } #if SK_SUPPORT_GPU - std::unique_ptr asFragmentProcessor(GrRecordingContext*, - const GrColorInfo&) const override; + bool colorFilterAcceptsInputFP() const override { return true; } + GrFPResult asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext*, const GrColorInfo&) const override; #endif enum { @@ -98,10 +81,10 @@ class SkTable_ColorFilter : public SkColorFilter { }; bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override { - const uint8_t *r = gIdentityTable, - *g = gIdentityTable, - *b = gIdentityTable, - *a = gIdentityTable; + const uint8_t *r = kIdentityTable, + *g = kIdentityTable, + *b = kIdentityTable, + *a = kIdentityTable; const uint8_t* ptr = fStorage; if (fFlags & kA_Flag) { a = ptr; ptr += 256; } if (fFlags & kR_Flag) { r = ptr; ptr += 256; } @@ -162,17 +145,17 @@ class SkTable_ColorFilter : public SkColorFilter { void getTableAsBitmap(SkBitmap* table) const; - mutable const SkBitmap* fBitmap; // lazily allocated + mutable const SkBitmap* fBitmap = nullptr; // lazily allocated uint8_t fStorage[256 * 4]; - unsigned fFlags; + unsigned int fFlags = 0; friend class SkTableColorFilter; typedef SkColorFilter INHERITED; }; -static const uint8_t gCountNibBits[] = { +static const uint8_t kCountNibBits[] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, @@ -183,9 +166,8 @@ static const uint8_t gCountNibBits[] = { void SkTable_ColorFilter::flatten(SkWriteBuffer& buffer) const { uint8_t storage[5*256]; - int count = gCountNibBits[fFlags & 0xF]; - size_t size = SkPackBits::Pack8(fStorage, count * 256, storage, - sizeof(storage)); + int count = kCountNibBits[fFlags & 0xF]; + size_t size = SkPackBits::Pack8(fStorage, count * 256, storage, sizeof(storage)); buffer.write32(fFlags); buffer.writeByteArray(storage, size); @@ -193,7 +175,7 @@ void SkTable_ColorFilter::flatten(SkWriteBuffer& buffer) const { sk_sp SkTable_ColorFilter::CreateProc(SkReadBuffer& buffer) { const int flags = buffer.read32(); - const size_t count = gCountNibBits[flags & 0xF]; + const size_t count = kCountNibBits[flags & 0xF]; SkASSERT(count <= 4); uint8_t packedStorage[5*256]; @@ -249,7 +231,7 @@ void SkTable_ColorFilter::getTableAsBitmap(SkBitmap* table) const { for (int x = 0; x < 4; ++x) { if (!(fFlags & kFlags[x])) { - memcpy(bitmapPixels, gIdentityTable, sizeof(gIdentityTable)); + memcpy(bitmapPixels, kIdentityTable, sizeof(kIdentityTable)); } else { memcpy(bitmapPixels, fStorage + offset, 256); offset += 256; @@ -265,19 +247,19 @@ void SkTable_ColorFilter::getTableAsBitmap(SkBitmap* table) const { #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrColorInfo.h" #include "src/gpu/GrFragmentProcessor.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/SkGr.h" +#include "src/gpu/effects/GrTextureEffect.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" -#include "src/gpu/glsl/GrGLSLProgramDataManager.h" -#include "src/gpu/glsl/GrGLSLUniformHandler.h" class ColorTableEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(GrRecordingContext* context, + static std::unique_ptr Make(std::unique_ptr inputFP, + GrRecordingContext* context, const SkBitmap& bitmap); ~ColorTableEffect() override {} @@ -285,85 +267,77 @@ class ColorTableEffect : public GrFragmentProcessor { const char* name() const override { return "ColorTableEffect"; } std::unique_ptr clone() const override { - return std::unique_ptr(new ColorTableEffect(fTextureSampler.view())); + return std::unique_ptr(new ColorTableEffect(*this)); + } + + bool hasInputFP() const { + // We always have a texture-effect child processor at index 0. + // If we have an input FP, it will be at child index 1. + return this->numChildProcessors() > 1; } + static constexpr int kTexEffectFPIndex = 0; + static constexpr int kInputFPIndex = 1; + private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; - void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; + void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} bool onIsEqual(const GrFragmentProcessor&) const override { return true; } - ColorTableEffect(GrSurfaceProxyView view) - : INHERITED( - kColorTableEffect_ClassID, - kNone_OptimizationFlags) // Not bothering with table-specific optimizations. - , fTextureSampler(std::move(view)) { - this->setTextureSamplerCnt(1); - } + ColorTableEffect(std::unique_ptr inputFP, GrSurfaceProxyView view); - const TextureSampler& onTextureSampler(int) const override { return fTextureSampler; } + explicit ColorTableEffect(const ColorTableEffect& that); GR_DECLARE_FRAGMENT_PROCESSOR_TEST - TextureSampler fTextureSampler; - typedef GrFragmentProcessor INHERITED; }; -class GLColorTableEffect : public GrGLSLFragmentProcessor { -public: - void emitCode(EmitArgs&) override; - - static void GenKey(const GrProcessor&, const GrShaderCaps&, GrProcessorKeyBuilder*) {} - -private: - typedef GrGLSLFragmentProcessor INHERITED; -}; - -void GLColorTableEffect::emitCode(EmitArgs& args) { - static const float kColorScaleFactor = 255.0f / 256.0f; - static const float kColorOffsetFactor = 1.0f / 512.0f; - GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - if (nullptr == args.fInputColor) { - // the input color is solid white (all ones). - static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor; - fragBuilder->codeAppendf("\t\thalf4 coord = half4(%f);\n", kMaxValue); - } else { - fragBuilder->codeAppendf("\t\thalf4 coord = unpremul(%s);\n", args.fInputColor); - fragBuilder->codeAppendf("\t\tcoord = coord * %f + %f;\n", - kColorScaleFactor, kColorOffsetFactor); +ColorTableEffect::ColorTableEffect(std::unique_ptr inputFP, + GrSurfaceProxyView view) + // Not bothering with table-specific optimizations. + : INHERITED(kColorTableEffect_ClassID, kNone_OptimizationFlags) { + this->registerChild(GrTextureEffect::Make(std::move(view), kUnknown_SkAlphaType), + SkSL::SampleUsage::Explicit()); + if (inputFP) { + this->registerChild(std::move(inputFP)); } +} - SkString coord; - - fragBuilder->codeAppendf("\t\t%s.a = ", args.fOutputColor); - coord.printf("half2(coord.a, 0.125)"); - fragBuilder->appendTextureLookup(args.fTexSamplers[0], coord.c_str()); - fragBuilder->codeAppend(".a;\n"); - - fragBuilder->codeAppendf("\t\t%s.r = ", args.fOutputColor); - coord.printf("half2(coord.r, 0.375)"); - fragBuilder->appendTextureLookup(args.fTexSamplers[0], coord.c_str()); - fragBuilder->codeAppend(".a;\n"); - - fragBuilder->codeAppendf("\t\t%s.g = ", args.fOutputColor); - coord.printf("half2(coord.g, 0.625)"); - fragBuilder->appendTextureLookup(args.fTexSamplers[0], coord.c_str()); - fragBuilder->codeAppend(".a;\n"); - - fragBuilder->codeAppendf("\t\t%s.b = ", args.fOutputColor); - coord.printf("half2(coord.b, 0.875)"); - fragBuilder->appendTextureLookup(args.fTexSamplers[0], coord.c_str()); - fragBuilder->codeAppend(".a;\n"); +ColorTableEffect::ColorTableEffect(const ColorTableEffect& that) + : INHERITED(kColorTableEffect_ClassID, that.optimizationFlags()) { + this->cloneAndRegisterAllChildProcessors(that); +} - fragBuilder->codeAppendf("\t\t%s.rgb *= %s.a;\n", args.fOutputColor, args.fOutputColor); +GrGLSLFragmentProcessor* ColorTableEffect::onCreateGLSLInstance() const { + class Impl : public GrGLSLFragmentProcessor { + public: + void emitCode(EmitArgs& args) override { + const ColorTableEffect& proc = args.fFp.cast(); + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; + SkString inputColor = proc.hasInputFP() + ? this->invokeChild(kInputFPIndex, args.fInputColor, args) + : SkString(args.fInputColor); + SkString a = this->invokeChild(kTexEffectFPIndex, args, "half2(coord.a, 0.5)"); + SkString r = this->invokeChild(kTexEffectFPIndex, args, "half2(coord.r, 1.5)"); + SkString g = this->invokeChild(kTexEffectFPIndex, args, "half2(coord.g, 2.5)"); + SkString b = this->invokeChild(kTexEffectFPIndex, args, "half2(coord.b, 3.5)"); + fragBuilder->codeAppendf("half4 coord = 255 * unpremul(%s) + 0.5;\n" + "%s = half4(%s.a, %s.a, %s.a, 1);\n" + "%s *= %s.a;\n", + inputColor.c_str(), + args.fOutputColor, r.c_str(), g.c_str(), b.c_str(), + args.fOutputColor, a.c_str()); + } + }; + return new Impl; } -/////////////////////////////////////////////////////////////////////////////// -std::unique_ptr ColorTableEffect::Make(GrRecordingContext* context, - const SkBitmap& bitmap) { +std::unique_ptr ColorTableEffect::Make( + std::unique_ptr inputFP, + GrRecordingContext* context, const SkBitmap& bitmap) { SkASSERT(kPremul_SkAlphaType == bitmap.alphaType()); SkASSERT(bitmap.isImmutable()); @@ -372,16 +346,8 @@ std::unique_ptr ColorTableEffect::Make(GrRecordingContext* return nullptr; } - return std::unique_ptr(new ColorTableEffect(std::move(view))); -} - -void ColorTableEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, - GrProcessorKeyBuilder* b) const { - GLColorTableEffect::GenKey(*this, caps, b); -} - -GrGLSLFragmentProcessor* ColorTableEffect::onCreateGLSLInstance() const { - return new GLColorTableEffect; + return std::unique_ptr( + new ColorTableEffect(std::move(inputFP), std::move(view))); } /////////////////////////////////////////////////////////////////////////////// @@ -414,20 +380,21 @@ std::unique_ptr ColorTableEffect::TestCreate(GrProcessorTes (flags & (1 << 3)) ? luts[3] : nullptr )); sk_sp colorSpace = GrTest::TestColorSpace(d->fRandom); - auto fp = filter->asFragmentProcessor( - d->context(), + auto [success, fp] = as_CFB(filter)->asFragmentProcessor( + /*inputFP=*/nullptr, d->context(), GrColorInfo(GrColorType::kRGBA_8888, kUnknown_SkAlphaType, std::move(colorSpace))); - SkASSERT(fp); - return fp; + SkASSERT(success); + return std::move(fp); } #endif -std::unique_ptr SkTable_ColorFilter::asFragmentProcessor( - GrRecordingContext* context, const GrColorInfo&) const { +GrFPResult SkTable_ColorFilter::asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext* context, + const GrColorInfo&) const { SkBitmap bitmap; this->getTableAsBitmap(&bitmap); - return ColorTableEffect::Make(context, bitmap); + return GrFPSuccess(ColorTableEffect::Make(std::move(inputFP), context, bitmap)); } #endif // SK_SUPPORT_GPU diff --git a/src/effects/imagefilters/SkAlphaThresholdFilter.cpp b/src/effects/imagefilters/SkAlphaThresholdFilter.cpp index 5923d8ad25b30..245d7f4c7a2a9 100644 --- a/src/effects/imagefilters/SkAlphaThresholdFilter.cpp +++ b/src/effects/imagefilters/SkAlphaThresholdFilter.cpp @@ -16,7 +16,7 @@ #if SK_SUPPORT_GPU #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColorSpaceXform.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -162,28 +162,27 @@ sk_sp SkAlphaThresholdFilterImpl::onFilterImage(const Context& c if (!maskView) { return nullptr; } + auto maskFP = GrTextureEffect::Make(std::move(maskView), kPremul_SkAlphaType, + SkMatrix::Translate(-bounds.x(), -bounds.y())); auto textureFP = GrTextureEffect::Make( std::move(inputView), input->alphaType(), SkMatrix::Translate(input->subset().x(), input->subset().y())); - textureFP = GrColorSpaceXformEffect::Make(std::move(textureFP), input->getColorSpace(), - input->alphaType(), ctx.colorSpace()); + textureFP = GrColorSpaceXformEffect::Make(std::move(textureFP), + input->getColorSpace(), input->alphaType(), + ctx.colorSpace(), kPremul_SkAlphaType); if (!textureFP) { return nullptr; } auto thresholdFP = GrAlphaThresholdFragmentProcessor::Make( - std::move(maskView), fInnerThreshold, fOuterThreshold, bounds); + std::move(textureFP), std::move(maskFP), fInnerThreshold, fOuterThreshold); if (!thresholdFP) { return nullptr; } - std::unique_ptr fpSeries[] = { std::move(textureFP), - std::move(thresholdFP) }; - auto fp = GrFragmentProcessor::RunInSeries(fpSeries, 2); - - return DrawWithFP(context, std::move(fp), bounds, ctx.colorType(), ctx.colorSpace(), - isProtected); + return DrawWithFP(context, std::move(thresholdFP), bounds, ctx.colorType(), + ctx.colorSpace(), isProtected); } #endif diff --git a/src/effects/imagefilters/SkArithmeticImageFilter.cpp b/src/effects/imagefilters/SkArithmeticImageFilter.cpp index 783a970d87e0f..5b108236c910f 100644 --- a/src/effects/imagefilters/SkArithmeticImageFilter.cpp +++ b/src/effects/imagefilters/SkArithmeticImageFilter.cpp @@ -17,7 +17,7 @@ #include "src/core/SkWriteBuffer.h" #if SK_SUPPORT_GPU #include "include/effects/SkRuntimeEffect.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrColorSpaceXform.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" @@ -36,7 +36,7 @@ in bool enforcePMColor; in fragmentProcessor child; void main(float2 p, inout half4 color) { - half4 dst = sample(child, p); + half4 dst = sample(child); color = saturate(half(k.x) * color * dst + half(k.y) * color + half(k.z) * dst + half(k.w)); @if (enforcePMColor) { color.rgb = min(color.rgb, color.a); @@ -358,11 +358,11 @@ sk_sp ArithmeticImageFilterImpl::filterImageGPU( SkIntToScalar(bgSubset.top() - backgroundOffset.fY)); bgFP = GrTextureEffect::MakeSubset(std::move(backgroundView), background->alphaType(), backgroundMatrix, sampler, bgSubset, caps); - bgFP = GrColorSpaceXformEffect::Make(std::move(bgFP), background->getColorSpace(), - background->alphaType(), - ctx.colorSpace()); + bgFP = GrColorSpaceXformEffect::Make(std::move(bgFP), + background->getColorSpace(), background->alphaType(), + ctx.colorSpace(), kPremul_SkAlphaType); } else { - bgFP = GrConstColorProcessor::Make(SK_PMColor4fTRANSPARENT, + bgFP = GrConstColorProcessor::Make(/*inputFP=*/nullptr, SK_PMColor4fTRANSPARENT, GrConstColorProcessor::InputMode::kIgnore); } @@ -374,9 +374,8 @@ sk_sp ArithmeticImageFilterImpl::filterImageGPU( auto fgFP = GrTextureEffect::MakeSubset(std::move(foregroundView), foreground->alphaType(), foregroundMatrix, sampler, fgSubset, caps); fgFP = GrColorSpaceXformEffect::Make(std::move(fgFP), - foreground->getColorSpace(), - foreground->alphaType(), - ctx.colorSpace()); + foreground->getColorSpace(), foreground->alphaType(), + ctx.colorSpace(), kPremul_SkAlphaType); paint.addColorFragmentProcessor(std::move(fgFP)); static auto effect = std::get<0>(SkRuntimeEffect::Make(SkString(SKSL_ARITHMETIC_SRC))); diff --git a/src/effects/imagefilters/SkColorFilterImageFilter.cpp b/src/effects/imagefilters/SkColorFilterImageFilter.cpp index b9154431c6890..32e7dc8cde9b9 100644 --- a/src/effects/imagefilters/SkColorFilterImageFilter.cpp +++ b/src/effects/imagefilters/SkColorFilterImageFilter.cpp @@ -9,6 +9,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkColorFilter.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkImageFilter_Base.h" #include "src/core/SkReadBuffer.h" #include "src/core/SkSpecialImage.h" @@ -89,7 +90,7 @@ sk_sp SkColorFilterImageFilterImpl::onFilterImage(const Context& sk_sp input(this->filterInput(0, ctx, &inputOffset)); SkIRect inputBounds; - if (fColorFilter->affectsTransparentBlack()) { + if (as_CFB(fColorFilter)->affectsTransparentBlack()) { // If the color filter affects transparent black, the bounds are the entire clip. inputBounds = ctx.clipBounds(); } else if (!input) { @@ -119,7 +120,7 @@ sk_sp SkColorFilterImageFilterImpl::onFilterImage(const Context& // TODO: it may not be necessary to clear or drawPaint inside the input bounds // (see skbug.com/5075) - if (fColorFilter->affectsTransparentBlack()) { + if (as_CFB(fColorFilter)->affectsTransparentBlack()) { // The subsequent input->draw() call may not fill the entire canvas. For filters which // affect transparent black, ensure that the filter is applied everywhere. paint.setColor(SK_ColorTRANSPARENT); @@ -153,5 +154,5 @@ bool SkColorFilterImageFilterImpl::onIsColorFilterNode(SkColorFilter** filter) c } bool SkColorFilterImageFilterImpl::affectsTransparentBlack() const { - return fColorFilter->affectsTransparentBlack(); + return as_CFB(fColorFilter)->affectsTransparentBlack(); } diff --git a/src/effects/imagefilters/SkDisplacementMapEffect.cpp b/src/effects/imagefilters/SkDisplacementMapEffect.cpp index b448289ac5a5e..2757f97c84f4e 100644 --- a/src/effects/imagefilters/SkDisplacementMapEffect.cpp +++ b/src/effects/imagefilters/SkDisplacementMapEffect.cpp @@ -15,10 +15,9 @@ #include "src/core/SkSpecialImage.h" #include "src/core/SkWriteBuffer.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColorSpaceXform.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrTexture.h" @@ -230,9 +229,6 @@ class GrDisplacementMapEffect : public GrFragmentProcessor { GR_DECLARE_FRAGMENT_PROCESSOR_TEST - // We really just want the unaltered local coords, but the only way to get that right now is - // an identity coord transform. - GrCoordTransform fCoordTransform = {}; SkColorChannel fXChannelSelector; SkColorChannel fYChannelSelector; SkVector fScale; @@ -350,8 +346,9 @@ sk_sp SkDisplacementMapEffectImpl::onFilterImage(const Context& std::move(colorView), color->subset(), *context->priv().caps()); - fp = GrColorSpaceXformEffect::Make(std::move(fp), color->getColorSpace(), - color->alphaType(), ctx.colorSpace()); + fp = GrColorSpaceXformEffect::Make(std::move(fp), + color->getColorSpace(), color->alphaType(), + ctx.colorSpace(), kPremul_SkAlphaType); GrPaint paint; paint.addColorFragmentProcessor(std::move(fp)); @@ -508,10 +505,9 @@ GrDisplacementMapEffect::GrDisplacementMapEffect(SkColorChannel xChannelSelector , fXChannelSelector(xChannelSelector) , fYChannelSelector(yChannelSelector) , fScale(scale) { - this->registerChildProcessor(std::move(displacement)); - color->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(color)); - this->addCoordTransform(&fCoordTransform); + this->registerChild(std::move(displacement)); + this->registerChild(std::move(color), SkSL::SampleUsage::Explicit()); + this->setUsesSampleCoordsDirectly(); } GrDisplacementMapEffect::GrDisplacementMapEffect(const GrDisplacementMapEffect& that) @@ -519,16 +515,8 @@ GrDisplacementMapEffect::GrDisplacementMapEffect(const GrDisplacementMapEffect& , fXChannelSelector(that.fXChannelSelector) , fYChannelSelector(that.fYChannelSelector) , fScale(that.fScale) { - auto displacement = that.childProcessor(0).clone(); - if (that.childProcessor(0).isSampledWithExplicitCoords()) { - displacement->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(displacement)); - - auto color = that.childProcessor(1).clone(); - color->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(color)); - this->addCoordTransform(&fCoordTransform); + this->cloneAndRegisterAllChildProcessors(that); + this->setUsesSampleCoordsDirectly(); } GrDisplacementMapEffect::~GrDisplacementMapEffect() {} @@ -599,8 +587,6 @@ void GrDisplacementMapEffect::Impl::emitCode(EmitArgs& args) { // Unpremultiply the displacement fragBuilder->codeAppendf("%s.rgb = (%s.a < %s) ? half3(0.0) : saturate(%s.rgb / %s.a);", dColor, dColor, nearZero, dColor, dColor); - SkString coords2D = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - args.fFp.sampleMatrix()); auto chanChar = [](SkColorChannel c) { switch(c) { case SkColorChannel::kR: return 'r'; @@ -611,7 +597,7 @@ void GrDisplacementMapEffect::Impl::emitCode(EmitArgs& args) { } }; fragBuilder->codeAppendf("float2 %s = %s + %s*(%s.%c%c - half2(0.5));", - cCoords, coords2D.c_str(), scaleUni, dColor, + cCoords, args.fSampleCoord, scaleUni, dColor, chanChar(displacementMap.xChannelSelector()), chanChar(displacementMap.yChannelSelector())); diff --git a/src/effects/imagefilters/SkLightingImageFilter.cpp b/src/effects/imagefilters/SkLightingImageFilter.cpp index 933171cf772c0..831c72c043249 100644 --- a/src/effects/imagefilters/SkLightingImageFilter.cpp +++ b/src/effects/imagefilters/SkLightingImageFilter.cpp @@ -17,7 +17,7 @@ #include "src/core/SkWriteBuffer.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrFragmentProcessor.h" #include "src/gpu/GrPaint.h" @@ -631,9 +631,6 @@ class GrLightingEffect : public GrFragmentProcessor { bool onIsEqual(const GrFragmentProcessor&) const override; private: - // We really just want the unaltered local coords, but the only way to get that right now is - // an identity coord transform. - GrCoordTransform fCoordTransform = {}; sk_sp fLight; SkScalar fSurfaceScale; SkMatrix fFilterMatrix; @@ -1632,9 +1629,8 @@ GrLightingEffect::GrLightingEffect(ClassID classID, child = GrTextureEffect::Make(std::move(view), kPremul_SkAlphaType, SkMatrix::I(), kSampler, caps); } - child->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); - this->addCoordTransform(&fCoordTransform); + this->registerChild(std::move(child), SkSL::SampleUsage::Explicit()); + this->setUsesSampleCoordsDirectly(); } GrLightingEffect::GrLightingEffect(const GrLightingEffect& that) @@ -1643,10 +1639,8 @@ GrLightingEffect::GrLightingEffect(const GrLightingEffect& that) , fSurfaceScale(that.fSurfaceScale) , fFilterMatrix(that.fFilterMatrix) , fBoundaryMode(that.fBoundaryMode) { - auto child = that.childProcessor(0).clone(); - child->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); - this->addCoordTransform(&fCoordTransform); + this->cloneAndRegisterAllChildProcessors(that); + this->setUsesSampleCoordsDirectly(); } bool GrLightingEffect::onIsEqual(const GrFragmentProcessor& sBase) const { @@ -1770,8 +1764,6 @@ void GrGLLightingEffect::emitCode(EmitArgs& args) { GrShaderVar("scale", kHalf_GrSLType), }; SkString sobelFuncName; - SkString coords2D = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - args.fFp.sampleMatrix()); fragBuilder->emitFunction(kHalf_GrSLType, "sobel", @@ -1807,7 +1799,7 @@ void GrGLLightingEffect::emitCode(EmitArgs& args) { normalBody.c_str(), &normalName); - fragBuilder->codeAppendf("\t\tfloat2 coord = %s;\n", coords2D.c_str()); + fragBuilder->codeAppendf("\t\tfloat2 coord = %s;\n", args.fSampleCoord); fragBuilder->codeAppend("\t\thalf m[9];\n"); const char* surfScale = uniformHandler->getUniformCStr(fSurfaceScaleUni); diff --git a/src/effects/imagefilters/SkMagnifierImageFilter.cpp b/src/effects/imagefilters/SkMagnifierImageFilter.cpp index 835dd1a2dcd08..aaabc3ba2a03b 100644 --- a/src/effects/imagefilters/SkMagnifierImageFilter.cpp +++ b/src/effects/imagefilters/SkMagnifierImageFilter.cpp @@ -19,8 +19,7 @@ #if SK_SUPPORT_GPU #include "include/gpu/GrContext.h" #include "src/gpu/GrColorSpaceXform.h" -#include "src/gpu/GrCoordTransform.h" -#include "src/gpu/GrTexture.h" +#include "src/gpu/effects/GrTextureEffect.h" #include "src/gpu/effects/generated/GrMagnifierEffect.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" @@ -136,17 +135,18 @@ sk_sp SkMagnifierImageFilterImpl::onFilterImage(const Context& c bounds.offset(input->subset().x(), input->subset().y()); SkRect srcRect = fSrcRect.makeOffset((1.f - invXZoom) * input->subset().x(), (1.f - invYZoom) * input->subset().y()); + auto inputFP = GrTextureEffect::Make(std::move(inputView), kPremul_SkAlphaType); - // TODO: Update generated fp file Make functions to take views instead of proxies - auto fp = GrMagnifierEffect::Make(std::move(inputView), + auto fp = GrMagnifierEffect::Make(std::move(inputFP), bounds, srcRect, invXZoom, invYZoom, bounds.width() * invInset, bounds.height() * invInset); - fp = GrColorSpaceXformEffect::Make(std::move(fp), input->getColorSpace(), - input->alphaType(), ctx.colorSpace()); + fp = GrColorSpaceXformEffect::Make(std::move(fp), + input->getColorSpace(), input->alphaType(), + ctx.colorSpace(), kPremul_SkAlphaType); if (!fp) { return nullptr; } diff --git a/src/effects/imagefilters/SkMorphologyImageFilter.cpp b/src/effects/imagefilters/SkMorphologyImageFilter.cpp index 3a6da5e52971e..b37df89d4ab0a 100644 --- a/src/effects/imagefilters/SkMorphologyImageFilter.cpp +++ b/src/effects/imagefilters/SkMorphologyImageFilter.cpp @@ -17,9 +17,8 @@ #if SK_SUPPORT_GPU #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrTexture.h" @@ -228,13 +227,6 @@ class GrMorphologyEffect : public GrFragmentProcessor { new GrMorphologyEffect(std::move(view), srcAlphaType, dir, radius, type, bounds)); } - MorphType type() const { return fType; } - bool useRange() const { return fUseRange; } - const float* range() const { return fRange; } - MorphDirection direction() const { return fDirection; } - int radius() const { return fRadius; } - int width() const { return 2 * fRadius + 1; } - const char* name() const override { return "Morphology"; } std::unique_ptr clone() const override { @@ -242,8 +234,6 @@ class GrMorphologyEffect : public GrFragmentProcessor { } private: - GrCoordTransform fCoordTransform; - TextureSampler fTextureSampler; MorphDirection fDirection; int fRadius; MorphType fType; @@ -255,9 +245,6 @@ class GrMorphologyEffect : public GrFragmentProcessor { void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; - - const TextureSampler& onTextureSampler(int i) const override { return fTextureSampler; } - GrMorphologyEffect(GrSurfaceProxyView, SkAlphaType srcAlphaType, MorphDirection, int radius, MorphType, const float range[2]); explicit GrMorphologyEffect(const GrMorphologyEffect&); @@ -267,138 +254,79 @@ class GrMorphologyEffect : public GrFragmentProcessor { typedef GrFragmentProcessor INHERITED; }; -/////////////////////////////////////////////////////////////////////////////// +GrGLSLFragmentProcessor* GrMorphologyEffect::onCreateGLSLInstance() const { + class Impl : public GrGLSLFragmentProcessor { + public: + void emitCode(EmitArgs& args) override { + const GrMorphologyEffect& me = args.fFp.cast(); -class GrGLMorphologyEffect : public GrGLSLFragmentProcessor { -public: - void emitCode(EmitArgs&) override; + GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; + fRangeUni = uniformHandler->addUniform(&me, kFragment_GrShaderFlag, kFloat2_GrSLType, + "Range"); + const char* range = uniformHandler->getUniformCStr(fRangeUni); - static inline void GenKey(const GrProcessor&, const GrShaderCaps&, GrProcessorKeyBuilder*); + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; -protected: - void onSetData(const GrGLSLProgramDataManager&, const GrFragmentProcessor&) override; + const char* func = me.fType == MorphType::kErode ? "min" : "max"; -private: - GrGLSLProgramDataManager::UniformHandle fPixelSizeUni; - GrGLSLProgramDataManager::UniformHandle fRangeUni; + char initialValue = me.fType == MorphType::kErode ? '1' : '0'; + fragBuilder->codeAppendf("%s = half4(%c);", args.fOutputColor, initialValue); - typedef GrGLSLFragmentProcessor INHERITED; -}; + char dir = me.fDirection == MorphDirection::kX ? 'x' : 'y'; -void GrGLMorphologyEffect::emitCode(EmitArgs& args) { - const GrMorphologyEffect& me = args.fFp.cast(); - - GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; - fPixelSizeUni = uniformHandler->addUniform(&me, kFragment_GrShaderFlag, kHalf_GrSLType, - "PixelSize"); - const char* pixelSizeInc = uniformHandler->getUniformCStr(fPixelSizeUni); - fRangeUni = uniformHandler->addUniform(&me, kFragment_GrShaderFlag, kFloat2_GrSLType, "Range"); - const char* range = uniformHandler->getUniformCStr(fRangeUni); - - GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - SkString coords2D = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - args.fFp.sampleMatrix()); - const char* func; - switch (me.type()) { - case MorphType::kErode: - fragBuilder->codeAppendf("\t\t%s = half4(1, 1, 1, 1);\n", args.fOutputColor); - func = "min"; - break; - case MorphType::kDilate: - fragBuilder->codeAppendf("\t\t%s = half4(0, 0, 0, 0);\n", args.fOutputColor); - func = "max"; - break; - default: - SK_ABORT("Unexpected type"); - func = ""; // suppress warning - break; - } + int width = 2 * me.fRadius + 1; - const char* dir; - switch (me.direction()) { - case MorphDirection::kX: - dir = "x"; - break; - case MorphDirection::kY: - dir = "y"; - break; - default: - SK_ABORT("Unknown filter direction."); - dir = ""; // suppress warning - } + // float2 coord = coord2D; + fragBuilder->codeAppendf("float2 coord = %s;", args.fSampleCoord); + // coord.x -= radius; + fragBuilder->codeAppendf("coord.%c -= %d;", dir, me.fRadius); + if (me.fUseRange) { + // highBound = min(highBound, coord.x + (width-1)); + fragBuilder->codeAppendf("float highBound = min(%s.y, coord.%c + %f);", range, dir, + float(width - 1)); + // coord.x = max(lowBound, coord.x); + fragBuilder->codeAppendf("coord.%c = max(%s.x, coord.%c);", dir, range, dir); + } + fragBuilder->codeAppendf("for (int i = 0; i < %d; i++) {", width); + SkString sample = this->invokeChild(0, args, "coord"); + fragBuilder->codeAppendf(" %s = %s(%s, %s);", args.fOutputColor, func, + args.fOutputColor, sample.c_str()); + // coord.x += 1; + fragBuilder->codeAppendf(" coord.%c += 1;", dir); + if (me.fUseRange) { + // coord.x = min(highBound, coord.x); + fragBuilder->codeAppendf(" coord.%c = min(highBound, coord.%c);", dir, dir); + } + fragBuilder->codeAppend("}"); + fragBuilder->codeAppendf("%s *= %s;", args.fOutputColor, args.fInputColor); + } - int width = me.width(); - - // float2 coord = coord2D; - fragBuilder->codeAppendf("\t\tfloat2 coord = %s;\n", coords2D.c_str()); - // coord.x -= radius * pixelSize; - fragBuilder->codeAppendf("\t\tcoord.%s -= %d.0 * %s; \n", dir, me.radius(), pixelSizeInc); - if (me.useRange()) { - // highBound = min(highBound, coord.x + (width-1) * pixelSize); - fragBuilder->codeAppendf("\t\tfloat highBound = min(%s.y, coord.%s + %f * %s);", - range, dir, float(width - 1), pixelSizeInc); - // coord.x = max(lowBound, coord.x); - fragBuilder->codeAppendf("\t\tcoord.%s = max(%s.x, coord.%s);", dir, range, dir); - } - fragBuilder->codeAppendf("\t\tfor (int i = 0; i < %d; i++) {\n", width); - fragBuilder->codeAppendf("\t\t\t%s = %s(%s, ", args.fOutputColor, func, args.fOutputColor); - fragBuilder->appendTextureLookup(args.fTexSamplers[0], "coord"); - fragBuilder->codeAppend(");\n"); - // coord.x += pixelSize; - fragBuilder->codeAppendf("\t\t\tcoord.%s += %s;\n", dir, pixelSizeInc); - if (me.useRange()) { - // coord.x = min(highBound, coord.x); - fragBuilder->codeAppendf("\t\t\tcoord.%s = min(highBound, coord.%s);", dir, dir); - } - fragBuilder->codeAppend("\t\t}\n"); - fragBuilder->codeAppendf("%s *= %s;\n", args.fOutputColor, args.fInputColor); + protected: + void onSetData(const GrGLSLProgramDataManager& pdman, + const GrFragmentProcessor& proc) override { + const GrMorphologyEffect& m = proc.cast(); + if (m.fUseRange) { + pdman.set2f(fRangeUni, m.fRange[0], m.fRange[1]); + } + } + + private: + GrGLSLProgramDataManager::UniformHandle fRangeUni; + }; + return new Impl; } -void GrGLMorphologyEffect::GenKey(const GrProcessor& proc, - const GrShaderCaps&, GrProcessorKeyBuilder* b) { - const GrMorphologyEffect& m = proc.cast(); - uint32_t key = static_cast(m.radius()); - key |= (static_cast(m.type()) << 8); - key |= (static_cast(m.direction()) << 9); - if (m.useRange()) { +void GrMorphologyEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, + GrProcessorKeyBuilder* b) const { + uint32_t key = static_cast(fRadius); + key |= (static_cast(fType) << 8); + key |= (static_cast(fDirection) << 9); + if (fUseRange) { key |= 1 << 10; } b->add32(key); } -void GrGLMorphologyEffect::onSetData(const GrGLSLProgramDataManager& pdman, - const GrFragmentProcessor& proc) { - const GrMorphologyEffect& m = proc.cast(); - const auto& view = m.textureSampler(0).view(); - GrSurfaceProxy* proxy = view.proxy(); - GrTexture& texture = *proxy->peekTexture(); - - float pixelSize = 0.0f; - switch (m.direction()) { - case MorphDirection::kX: - pixelSize = 1.0f / texture.width(); - break; - case MorphDirection::kY: - pixelSize = 1.0f / texture.height(); - break; - default: - SK_ABORT("Unknown filter direction."); - } - pdman.set1f(fPixelSizeUni, pixelSize); - - if (m.useRange()) { - const float* range = m.range(); - if (MorphDirection::kY == m.direction() && - view.origin() == kBottomLeft_GrSurfaceOrigin) { - pdman.set2f(fRangeUni, 1.0f - (range[1]*pixelSize), 1.0f - (range[0]*pixelSize)); - } else { - pdman.set2f(fRangeUni, range[0] * pixelSize, range[1] * pixelSize); - } - } -} - -/////////////////////////////////////////////////////////////////////////////// - GrMorphologyEffect::GrMorphologyEffect(GrSurfaceProxyView view, SkAlphaType srcAlphaType, MorphDirection direction, @@ -406,17 +334,13 @@ GrMorphologyEffect::GrMorphologyEffect(GrSurfaceProxyView view, MorphType type, const float range[2]) : INHERITED(kGrMorphologyEffect_ClassID, ModulateForClampedSamplerOptFlags(srcAlphaType)) - , fCoordTransform(view.proxy(), view.origin()) - , fTextureSampler(std::move(view)) , fDirection(direction) , fRadius(radius) , fType(type) , fUseRange(SkToBool(range)) { - // Make sure the sampler's ctor uses the clamp wrap mode - SkASSERT(fTextureSampler.samplerState().wrapModeX() == GrSamplerState::WrapMode::kClamp && - fTextureSampler.samplerState().wrapModeY() == GrSamplerState::WrapMode::kClamp); - this->addCoordTransform(&fCoordTransform); - this->setTextureSamplerCnt(1); + this->setUsesSampleCoordsDirectly(); + auto te = GrTextureEffect::Make(std::move(view), srcAlphaType); + this->registerChild(std::move(te), SkSL::SampleUsage::Explicit()); if (fUseRange) { fRange[0] = range[0]; fRange[1] = range[1]; @@ -425,34 +349,24 @@ GrMorphologyEffect::GrMorphologyEffect(GrSurfaceProxyView view, GrMorphologyEffect::GrMorphologyEffect(const GrMorphologyEffect& that) : INHERITED(kGrMorphologyEffect_ClassID, that.optimizationFlags()) - , fCoordTransform(that.fCoordTransform) - , fTextureSampler(that.fTextureSampler) , fDirection(that.fDirection) , fRadius(that.fRadius) , fType(that.fType) , fUseRange(that.fUseRange) { - this->addCoordTransform(&fCoordTransform); - this->setTextureSamplerCnt(1); + this->setUsesSampleCoordsDirectly(); + this->cloneAndRegisterAllChildProcessors(that); if (that.fUseRange) { fRange[0] = that.fRange[0]; fRange[1] = that.fRange[1]; } } -void GrMorphologyEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, - GrProcessorKeyBuilder* b) const { - GrGLMorphologyEffect::GenKey(*this, caps, b); -} - -GrGLSLFragmentProcessor* GrMorphologyEffect::onCreateGLSLInstance() const { - return new GrGLMorphologyEffect; -} bool GrMorphologyEffect::onIsEqual(const GrFragmentProcessor& sBase) const { const GrMorphologyEffect& s = sBase.cast(); - return (this->radius() == s.radius() && - this->direction() == s.direction() && - this->useRange() == s.useRange() && - this->type() == s.type()); + return this->fRadius == s.fRadius && + this->fDirection == s.fDirection && + this->fUseRange == s.fUseRange && + this->fType == s.fType; } /////////////////////////////////////////////////////////////////////////////// diff --git a/src/effects/imagefilters/SkXfermodeImageFilter.cpp b/src/effects/imagefilters/SkXfermodeImageFilter.cpp index 211fc64e60647..98c3800097fcf 100644 --- a/src/effects/imagefilters/SkXfermodeImageFilter.cpp +++ b/src/effects/imagefilters/SkXfermodeImageFilter.cpp @@ -15,7 +15,7 @@ #include "src/core/SkSpecialSurface.h" #include "src/core/SkWriteBuffer.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColorSpaceXform.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -268,11 +268,11 @@ sk_sp SkXfermodeImageFilterImpl::filterImageGPU( SkIntToScalar(bgSubset.top() - backgroundOffset.fY)); bgFP = GrTextureEffect::MakeSubset(std::move(backgroundView), background->alphaType(), bgMatrix, sampler, bgSubset, caps); - bgFP = GrColorSpaceXformEffect::Make(std::move(bgFP), background->getColorSpace(), - background->alphaType(), - ctx.colorSpace()); + bgFP = GrColorSpaceXformEffect::Make(std::move(bgFP), + background->getColorSpace(), background->alphaType(), + ctx.colorSpace(), kPremul_SkAlphaType); } else { - bgFP = GrConstColorProcessor::Make(SK_PMColor4fTRANSPARENT, + bgFP = GrConstColorProcessor::Make(/*inputFP=*/nullptr, SK_PMColor4fTRANSPARENT, GrConstColorProcessor::InputMode::kIgnore); } @@ -284,9 +284,8 @@ sk_sp SkXfermodeImageFilterImpl::filterImageGPU( auto fgFP = GrTextureEffect::MakeSubset(std::move(foregroundView), foreground->alphaType(), fgMatrix, sampler, fgSubset, caps); fgFP = GrColorSpaceXformEffect::Make(std::move(fgFP), - foreground->getColorSpace(), - foreground->alphaType(), - ctx.colorSpace()); + foreground->getColorSpace(), foreground->alphaType(), + ctx.colorSpace(), kPremul_SkAlphaType); paint.addColorFragmentProcessor(std::move(fgFP)); std::unique_ptr xferFP = this->makeFGFrag(std::move(bgFP)); @@ -322,7 +321,7 @@ sk_sp SkXfermodeImageFilterImpl::filterImageGPU( std::unique_ptr SkXfermodeImageFilterImpl::makeFGFrag( std::unique_ptr bgFP) const { - return GrXfermodeFragmentProcessor::MakeFromDstProcessor(std::move(bgFP), fMode); + return GrXfermodeFragmentProcessor::Make(/*src=*/nullptr, std::move(bgFP), fMode); } #endif diff --git a/src/fonts/SkFontMgr_indirect.cpp b/src/fonts/SkFontMgr_indirect.cpp index da7678a725e7c..9a425e1bc26aa 100644 --- a/src/fonts/SkFontMgr_indirect.cpp +++ b/src/fonts/SkFontMgr_indirect.cpp @@ -162,6 +162,11 @@ sk_sp SkFontMgr_Indirect::onMakeFromStreamIndex(std::unique_ptrmakeFromStream(std::move(stream), ttcIndex); } +sk_sp SkFontMgr_Indirect::onMakeFromStreamArgs(std::unique_ptr stream, + const SkFontArguments& args) const { + return fImpl->makeFromStream(std::move(stream), args); +} + sk_sp SkFontMgr_Indirect::onMakeFromFile(const char path[], int ttcIndex) const { return fImpl->makeFromFile(path, ttcIndex); } diff --git a/src/gpu/GrAHardwareBufferImageGenerator.cpp b/src/gpu/GrAHardwareBufferImageGenerator.cpp index c5fd6461f04f0..943c89655bbb7 100644 --- a/src/gpu/GrAHardwareBufferImageGenerator.cpp +++ b/src/gpu/GrAHardwareBufferImageGenerator.cpp @@ -17,9 +17,9 @@ #include #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/gpu/gl/GrGLTypes.h" -#include "include/private/GrRecordingContext.h" #include "src/core/SkMessageBus.h" #include "src/gpu/GrAHardwareBufferUtils.h" #include "src/gpu/GrContextPriv.h" @@ -81,11 +81,11 @@ GrAHardwareBufferImageGenerator::~GrAHardwareBufferImageGenerator() { /////////////////////////////////////////////////////////////////////////////////////////////////// GrSurfaceProxyView GrAHardwareBufferImageGenerator::makeView(GrRecordingContext* context) { - if (context->priv().abandoned()) { + if (context->abandoned()) { return {}; } - auto direct = context->priv().asDirectContext(); + auto direct = context->asDirectContext(); if (!direct) { return {}; } diff --git a/src/gpu/GrAppliedClip.h b/src/gpu/GrAppliedClip.h index 594a627987d1e..75e614a659a05 100644 --- a/src/gpu/GrAppliedClip.h +++ b/src/gpu/GrAppliedClip.h @@ -22,11 +22,19 @@ class GrAppliedHardClip { public: static const GrAppliedHardClip& Disabled() { - static GrAppliedHardClip kDisabled; + // The size doesn't really matter here since it's returned as const& so an actual scissor + // will never be set on it, and applied clips are not used to query or bounds test like + // the GrClip is. + static const GrAppliedHardClip kDisabled({1 << 29, 1 << 29}); return kDisabled; } - GrAppliedHardClip() = default; + GrAppliedHardClip(const SkISize& rtDims) : fScissorState(rtDims) {} + GrAppliedHardClip(const SkISize& logicalRTDims, const SkISize& backingStoreDims) + : fScissorState(backingStoreDims) { + fScissorState.set(SkIRect::MakeSize(logicalRTDims)); + } + GrAppliedHardClip(GrAppliedHardClip&& that) = default; GrAppliedHardClip(const GrAppliedHardClip&) = delete; @@ -81,7 +89,14 @@ class GrAppliedHardClip { */ class GrAppliedClip { public: - GrAppliedClip() = default; + static GrAppliedClip Disabled() { + return GrAppliedClip({1 << 29, 1 << 29}); + } + + GrAppliedClip(const SkISize& rtDims) : fHardClip(rtDims) {} + GrAppliedClip(const SkISize& logicalRTDims, const SkISize& backingStoreDims) + : fHardClip(logicalRTDims, backingStoreDims) {} + GrAppliedClip(GrAppliedClip&& that) = default; GrAppliedClip(const GrAppliedClip&) = delete; diff --git a/src/gpu/GrBackendSemaphore.cpp b/src/gpu/GrBackendSemaphore.cpp new file mode 100644 index 0000000000000..ccbff368bfb95 --- /dev/null +++ b/src/gpu/GrBackendSemaphore.cpp @@ -0,0 +1,73 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/gpu/GrBackendSemaphore.h" + +#ifdef SK_DIRECT3D +#include "include/gpu/d3d/GrD3DTypes.h" + +GrBackendSemaphore::~GrBackendSemaphore() { + if (fIsInitialized && GrBackendApi::kDirect3D == fBackend) { + delete fD3DFenceInfo; + fD3DFenceInfo = nullptr; + fIsInitialized = false; + } +} + +void GrBackendSemaphore::assignD3DFenceInfo(const GrD3DFenceInfo& info) { + SkASSERT(GrBackendApi::kDirect3D == fBackend); + if (fIsInitialized) { + *fD3DFenceInfo = info; + } else { + fD3DFenceInfo = new GrD3DFenceInfo(info); + } +} + +bool GrBackendSemaphore::getD3DFenceInfo(GrD3DFenceInfo* outInfo) const { + if (fIsInitialized && GrBackendApi::kDirect3D == fBackend) { + *outInfo = *fD3DFenceInfo; + return true; + } + return false; +} + +GrBackendSemaphore::GrBackendSemaphore(const GrBackendSemaphore& that) { + fIsInitialized = false; + *this = that; +} + +GrBackendSemaphore& GrBackendSemaphore::operator=(const GrBackendSemaphore& that) { + SkASSERT(!fIsInitialized || fBackend == that.fBackend); + fBackend = that.fBackend; + switch (that.fBackend) { +#ifdef SK_GL + case GrBackendApi::kOpenGL: + fGLSync = that.fGLSync; + break; +#endif +#ifdef SK_VULKAN + case GrBackendApi::kVulkan: + fVkSemaphore = that.fVkSemaphore; + break; +#endif +#ifdef SK_METAL + case GrBackendApi::kMetal: + fMtlEvent = that.fMtlEvent; + fMtlValue = that.fMtlValue; + break; +#endif + case GrBackendApi::kDirect3D: + this->assignD3DFenceInfo(*that.fD3DFenceInfo); + break; + default: + SK_ABORT("Unknown GrBackend"); + } + fIsInitialized = true; + return *this; +} + +#endif // SK_DIRECT3D diff --git a/src/gpu/GrBackendSurface.cpp b/src/gpu/GrBackendSurface.cpp index 25a8533a390ce..a1e0203ff4613 100644 --- a/src/gpu/GrBackendSurface.cpp +++ b/src/gpu/GrBackendSurface.cpp @@ -706,7 +706,13 @@ bool GrBackendTexture::isSameTexture(const GrBackendTexture& that) { #endif #ifdef SK_DIRECT3D case GrBackendApi::kDirect3D: - return false; //TODO + return fD3DInfo.snapTextureResourceInfo().fResource == + that.fD3DInfo.snapTextureResourceInfo().fResource; +#endif +#ifdef SK_DAWN + case GrBackendApi::kDawn: { + return this->fDawnInfo.fTexture.Get() == that.fDawnInfo.fTexture.Get(); + } #endif case GrBackendApi::kMock: return fMockInfo.id() == that.fMockInfo.id(); @@ -772,6 +778,12 @@ bool GrBackendTexture::TestingOnly_Equals(const GrBackendTexture& t0, const GrBa return false; } + // For our tests when checking equality we are assuming the both backendTexture objects will + // be using the same mutable state object. + if (t0.fMutableState != t1.fMutableState) { + return false; + } + switch (t0.fBackend) { #ifdef SK_GL case GrBackendApi::kOpenGL: diff --git a/src/gpu/GrBackendTextureImageGenerator.cpp b/src/gpu/GrBackendTextureImageGenerator.cpp index 54d4c75a29a22..d029a647d4d8b 100644 --- a/src/gpu/GrBackendTextureImageGenerator.cpp +++ b/src/gpu/GrBackendTextureImageGenerator.cpp @@ -6,7 +6,7 @@ */ #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkMessageBus.h" #include "src/gpu/GrBackendTextureImageGenerator.h" #include "src/gpu/GrContextPriv.h" diff --git a/src/gpu/GrBackendUtils.h b/src/gpu/GrBackendUtils.h new file mode 100644 index 0000000000000..cfbcb0ea30292 --- /dev/null +++ b/src/gpu/GrBackendUtils.h @@ -0,0 +1,85 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrBackendUtils_DEFINED +#define GrBackendUtils_DEFINED + +#include "include/core/SkImage.h" + +#include "include/gpu/GrBackendSurface.h" + +#ifdef SK_METAL +#include "src/gpu/mtl/GrMtlCppUtil.h" +#endif + +static SkImage::CompressionType GrBackendFormatToCompressionType(const GrBackendFormat& format) { + switch (format.backend()) { + case GrBackendApi::kOpenGL: { +#ifdef SK_GL + GrGLFormat glFormat = format.asGLFormat(); + switch (glFormat) { + case GrGLFormat::kCOMPRESSED_ETC1_RGB8: + case GrGLFormat::kCOMPRESSED_RGB8_ETC2: + return SkImage::CompressionType::kETC2_RGB8_UNORM; + case GrGLFormat::kCOMPRESSED_RGB8_BC1: + return SkImage::CompressionType::kBC1_RGB8_UNORM; + case GrGLFormat::kCOMPRESSED_RGBA8_BC1: + return SkImage::CompressionType::kBC1_RGBA8_UNORM; + default: + return SkImage::CompressionType::kNone; + } +#endif + break; + } + case GrBackendApi::kVulkan: { +#ifdef SK_VULKAN + VkFormat vkFormat; + SkAssertResult(format.asVkFormat(&vkFormat)); + switch (vkFormat) { + case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: + return SkImage::CompressionType::kETC2_RGB8_UNORM; + case VK_FORMAT_BC1_RGB_UNORM_BLOCK: + return SkImage::CompressionType::kBC1_RGB8_UNORM; + case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: + return SkImage::CompressionType::kBC1_RGBA8_UNORM; + default: + return SkImage::CompressionType::kNone; + } +#endif + break; + } + case GrBackendApi::kMetal: { +#ifdef SK_METAL + return GrMtlBackendFormatToCompressionType(format); +#endif + break; + } + case GrBackendApi::kDirect3D: { +#ifdef SK_DIRECT3D + DXGI_FORMAT dxgiFormat; + SkAssertResult(format.asDxgiFormat(&dxgiFormat)); + switch (dxgiFormat) { + case DXGI_FORMAT_BC1_UNORM: + return SkImage::CompressionType::kBC1_RGBA8_UNORM; + default: + return SkImage::CompressionType::kNone; + } +#endif + break; + } + case GrBackendApi::kDawn: { + return SkImage::CompressionType::kNone; + } + case GrBackendApi::kMock: { + return format.asMockCompressionType(); + } + } + return SkImage::CompressionType::kNone; +} + +#endif + diff --git a/src/gpu/GrBaseContextPriv.h b/src/gpu/GrBaseContextPriv.h index e5643471f36a1..8a08d7a116fd7 100644 --- a/src/gpu/GrBaseContextPriv.h +++ b/src/gpu/GrBaseContextPriv.h @@ -27,7 +27,7 @@ class GrBaseContextPriv { GrImageContext* asImageContext() { return fContext->asImageContext(); } GrRecordingContext* asRecordingContext() { return fContext->asRecordingContext(); } - GrContext* asDirectContext() { return fContext->asDirectContext(); } + GrDirectContext* asDirectContext() { return fContext->asDirectContext(); } GrContextOptions::ShaderErrorHandler* getShaderErrorHandler() const; diff --git a/src/gpu/GrBitmapTextureMaker.cpp b/src/gpu/GrBitmapTextureMaker.cpp index 25b03f23a33dd..795562b1d8b91 100644 --- a/src/gpu/GrBitmapTextureMaker.cpp +++ b/src/gpu/GrBitmapTextureMaker.cpp @@ -9,7 +9,7 @@ #include "include/core/SkBitmap.h" #include "include/core/SkPixelRef.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/SkIDChangeListener.h" #include "src/gpu/GrGpuResourcePriv.h" #include "src/gpu/GrProxyProvider.h" diff --git a/src/gpu/GrBlockAllocator.h b/src/gpu/GrBlockAllocator.h index fae9dabbf2027..b683d7825eb63 100644 --- a/src/gpu/GrBlockAllocator.h +++ b/src/gpu/GrBlockAllocator.h @@ -436,7 +436,7 @@ GrBlockAllocator::ByteRange GrBlockAllocator::allocate(size_t size) { <= std::numeric_limits::max()); if (size > kMaxAllocationSize) { - SK_ABORT("Allocation too large"); + SK_ABORT("Allocation too large (%zu bytes requested)", size); } int iSize = (int) size; diff --git a/src/gpu/GrBlurUtils.cpp b/src/gpu/GrBlurUtils.cpp index e348f4bc7a7d0..778dbd5603271 100644 --- a/src/gpu/GrBlurUtils.cpp +++ b/src/gpu/GrBlurUtils.cpp @@ -7,7 +7,7 @@ #include "src/gpu/GrBlurUtils.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrFixedClip.h" @@ -200,8 +200,7 @@ static std::unique_ptr create_mask_GPU(GrRecordingContext maskPaint.setCoverageSetOpXPFactory(SkRegion::kReplace_Op); // setup new clip - const SkIRect clipRect = SkIRect::MakeWH(maskRect.width(), maskRect.height()); - GrFixedClip clip(clipRect); + GrFixedClip clip(rtContext->dimensions(), SkIRect::MakeWH(maskRect.width(), maskRect.height())); // Draw the mask into maskTexture with the path's integerized top-left at the origin using // maskPaint. @@ -245,8 +244,7 @@ static bool get_shape_and_clip_bounds(GrRenderTargetContext* renderTargetContext SkIRect* unclippedDevShapeBounds, SkIRect* devClipBounds) { // compute bounds as intersection of rt size, clip, and path - *devClipBounds = clip ? clip->getConservativeBounds(renderTargetContext->width(), - renderTargetContext->height()) + *devClipBounds = clip ? clip->getConservativeBounds() : SkIRect::MakeWH(renderTargetContext->width(), renderTargetContext->height()); @@ -451,7 +449,7 @@ void GrBlurUtils::drawShapeWithMaskFilter(GrRecordingContext* context, const SkPaint& paint, const SkMatrixProvider& matrixProvider, const GrStyledShape& shape) { - if (context->priv().abandoned()) { + if (context->abandoned()) { return; } diff --git a/src/gpu/GrCaps.cpp b/src/gpu/GrCaps.cpp index 43b8996170e95..9cd3ea381c142 100644 --- a/src/gpu/GrCaps.cpp +++ b/src/gpu/GrCaps.cpp @@ -8,6 +8,7 @@ #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContextOptions.h" #include "include/private/GrTypesPriv.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrSurface.h" #include "src/gpu/GrSurfaceProxy.h" @@ -358,9 +359,11 @@ GrCaps::SupportedRead GrCaps::supportedReadPixelsColorType(GrColorType srcColorT // offset alignment is a multiple of 2 but not 4. case 2: read.fOffsetAlignmentForTransferBuffer *= 2; + break; // offset alignment is not a multiple of 2. default: read.fOffsetAlignmentForTransferBuffer *= 4; + break; } } return read; @@ -388,3 +391,37 @@ GrBackendFormat GrCaps::getDefaultBackendFormat(GrColorType colorType, } return format; } + +bool GrCaps::areColorTypeAndFormatCompatible(GrColorType grCT, + const GrBackendFormat& format) const { + if (GrColorType::kUnknown == grCT) { + return false; + } + + SkImage::CompressionType compression = GrBackendFormatToCompressionType(format); + if (compression != SkImage::CompressionType::kNone) { + return grCT == (SkCompressionTypeIsOpaque(compression) ? GrColorType::kRGB_888x + : GrColorType::kRGBA_8888); + } + + return this->onAreColorTypeAndFormatCompatible(grCT, format); +} + +GrSwizzle GrCaps::getReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { + SkImage::CompressionType compression = GrBackendFormatToCompressionType(format); + if (compression != SkImage::CompressionType::kNone) { + if (colorType == GrColorType::kRGB_888x || colorType == GrColorType::kRGBA_8888) { + return GrSwizzle::RGBA(); + } + SkDEBUGFAILF("Illegal color type (%d) and compressed format (%d) combination.", colorType, + compression); + return {}; + } + + return this->onGetReadSwizzle(format, colorType); +} + +bool GrCaps::isFormatCompressed(const GrBackendFormat& format) const { + return GrBackendFormatToCompressionType(format) != SkImage::CompressionType::kNone; +} + diff --git a/src/gpu/GrCaps.h b/src/gpu/GrCaps.h index 3ef0c61812aeb..f81ec565e5394 100644 --- a/src/gpu/GrCaps.h +++ b/src/gpu/GrCaps.h @@ -13,6 +13,7 @@ #include "include/core/SkString.h" #include "include/gpu/GrDriverBugWorkarounds.h" #include "include/private/GrTypesPriv.h" +#include "src/core/SkCompressedDataUtils.h" #include "src/gpu/GrBlend.h" #include "src/gpu/GrSamplerState.h" #include "src/gpu/GrShaderCaps.h" @@ -191,12 +192,7 @@ class GrCaps : public SkRefCnt { virtual bool isFormatSRGB(const GrBackendFormat&) const = 0; - // This will return SkImage::CompressionType::kNone if the backend format is not compressed. - virtual SkImage::CompressionType compressionType(const GrBackendFormat&) const = 0; - - bool isFormatCompressed(const GrBackendFormat& format) const { - return this->compressionType(format) != SkImage::CompressionType::kNone; - } + bool isFormatCompressed(const GrBackendFormat& format) const; // Can a texture be made with the GrBackendFormat, and then be bound and sampled in a shader. virtual bool isFormatTexturable(const GrBackendFormat&) const = 0; @@ -396,14 +392,7 @@ class GrCaps : public SkRefCnt { bool validateSurfaceParams(const SkISize&, const GrBackendFormat&, GrRenderable renderable, int renderTargetSampleCnt, GrMipMapped) const; - bool areColorTypeAndFormatCompatible(GrColorType grCT, - const GrBackendFormat& format) const { - if (GrColorType::kUnknown == grCT) { - return false; - } - - return this->onAreColorTypeAndFormatCompatible(grCT, format); - } + bool areColorTypeAndFormatCompatible(GrColorType grCT, const GrBackendFormat& format) const; /** These are used when creating a new texture internally. */ GrBackendFormat getDefaultBackendFormat(GrColorType, GrRenderable) const; @@ -420,7 +409,7 @@ class GrCaps : public SkRefCnt { * Returns the GrSwizzle to use when sampling or reading back from a texture with the passed in * GrBackendFormat and GrColorType. */ - virtual GrSwizzle getReadSwizzle(const GrBackendFormat&, GrColorType) const = 0; + GrSwizzle getReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const; /** * Returns the GrSwizzle to use when writing colors to a surface with the passed in @@ -557,6 +546,9 @@ class GrCaps : public SkRefCnt { const GrBackendFormat& srcFormat, GrColorType dstColorType) const = 0; + virtual GrSwizzle onGetReadSwizzle(const GrBackendFormat&, GrColorType) const = 0; + + bool fSuppressPrints : 1; bool fWireframeMode : 1; diff --git a/src/gpu/GrClip.h b/src/gpu/GrClip.h index cec96d0991dc0..f9008ae4b2a4f 100644 --- a/src/gpu/GrClip.h +++ b/src/gpu/GrClip.h @@ -21,46 +21,72 @@ class GrContext; */ class GrClip { public: - virtual bool quickContains(const SkRect&) const = 0; - virtual bool quickContains(const SkRRect& rrect) const { - return this->quickContains(rrect.getBounds()); - } + enum class Effect { + // The clip conservatively modifies the draw's coverage but doesn't eliminate the draw + kClipped, + // The clip definitely does not modify the draw's coverage and the draw can be performed + // without clipping (beyond the automatic device bounds clip). + kUnclipped, + // The clip definitely eliminates all of the draw's coverage and the draw can be skipped + kClippedOut + }; + + struct PreClipResult { + Effect fEffect; + SkRRect fRRect; // Ignore if 'isRRect' is false + GrAA fAA; // Ignore if 'isRRect' is false + bool fIsRRect; + + PreClipResult(Effect effect) : fEffect(effect), fIsRRect(false) {} + PreClipResult(SkRect rect, GrAA aa) : PreClipResult(SkRRect::MakeRect(rect), aa) {} + PreClipResult(SkRRect rrect, GrAA aa) + : fEffect(Effect::kClipped) + , fRRect(rrect) + , fAA(aa) + , fIsRRect(true) {} + }; + + virtual ~GrClip() {} + /** * Compute a conservative pixel bounds restricted to the given render target dimensions. * The returned bounds represent the limits of pixels that can be drawn; anything outside of the * bounds will be entirely clipped out. */ - virtual SkIRect getConservativeBounds(int width, int height) const { - return SkIRect::MakeWH(width, height); - } + virtual SkIRect getConservativeBounds() const = 0; /** * This computes a GrAppliedClip from the clip which in turn can be used to build a GrPipeline. * To determine the appropriate clipping implementation the GrClip subclass must know whether * the draw will enable HW AA or uses the stencil buffer. On input 'bounds' is a conservative - * bounds of the draw that is to be clipped. After return 'bounds' has been intersected with a - * conservative bounds of the clip. A return value of false indicates that the draw can be - * skipped as it is fully clipped out. + * bounds of the draw that is to be clipped. If kClipped or kUnclipped is returned, the 'bounds' + * will have been updated to be contained within the clip bounds (or the device's, for wide-open + * clips). If kNoDraw is returned, 'bounds' and the applied clip are in an undetermined state + * and should be ignored (and the draw should be skipped). */ - virtual bool apply(GrRecordingContext*, GrRenderTargetContext*, bool useHWAA, - bool hasUserStencilSettings, GrAppliedClip*, SkRect* bounds) const = 0; - - virtual ~GrClip() {} + virtual Effect apply(GrRecordingContext*, GrRenderTargetContext*, bool useHWAA, + bool hasUserStencilSettings, GrAppliedClip*, SkRect* bounds) const = 0; /** - * This method quickly and conservatively determines whether the entire clip is equivalent to - * intersection with a rrect. This will only return true if the rrect does not fully contain - * the render target bounds. Moreover, the returned rrect need not be contained by the render - * target bounds. We assume all draws will be implicitly clipped by the render target bounds. + * Perform preliminary, conservative analysis on the draw bounds as if it were provided to + * apply(). The results of this are returned the PreClipResults struct, where 'result.fEffect' + * corresponds to what 'apply' would return. If this value is kUnclipped or kNoDraw, then it + * can be assumed that apply() would also always result in the same Effect. * - * @param rtBounds The bounds of the render target that the clip will be applied to. - * @param rrect If return is true rrect will contain the rrect equivalent to the clip within - * rtBounds. - * @param aa If return is true aa will indicate whether the rrect clip is antialiased. - * @return true if the clip is equivalent to a single rrect, false otherwise. + * If kClipped is returned, apply() may further refine the effect to kUnclipped or kNoDraw, + * with one exception. When 'result.fIsRRect' is true, preApply() reports the single round rect + * and anti-aliased state that would act as an intersection on the draw geometry. If no further + * action is taken to modify the draw, apply() will represent this round rect in the applied + * clip. * + * When set, 'result.fRRect' will intersect with the render target bounds but may extend + * beyond it. If the render target bounds are the only clip effect on the draw, this is reported + * as kUnclipped and not as a degenerate rrect that matches the bounds. */ - virtual bool isRRect(const SkRect& rtBounds, SkRRect* rrect, GrAA* aa) const = 0; + virtual PreClipResult preApply(const SkRect& drawBounds) const { + bool outside = !drawBounds.intersects(SkRect::Make(this->getConservativeBounds())); + return outside ? Effect::kClippedOut : Effect::kClipped; + } /** * This is the maximum distance that a draw may extend beyond a clip's boundary and still count @@ -151,12 +177,12 @@ class GrHardClip : public GrClip { * return 'bounds' has been intersected with a conservative bounds of the clip. A return value * of false indicates that the draw can be skipped as it is fully clipped out. */ - virtual bool apply(int rtWidth, int rtHeight, GrAppliedHardClip* out, SkRect* bounds) const = 0; + virtual Effect apply(GrAppliedHardClip* out, SkRect* bounds) const = 0; private: - bool apply(GrRecordingContext*, GrRenderTargetContext* rtc, bool useHWAA, - bool hasUserStencilSettings, GrAppliedClip* out, SkRect* bounds) const final { - return this->apply(rtc->width(), rtc->height(), &out->hardClip(), bounds); + Effect apply(GrRecordingContext*, GrRenderTargetContext* rtc, bool useHWAA, + bool hasUserStencilSettings, GrAppliedClip* out, SkRect* bounds) const final { + return this->apply(&out->hardClip(), bounds); } }; diff --git a/src/gpu/GrClipStackClip.cpp b/src/gpu/GrClipStackClip.cpp index f0f31a667281d..5ded1aebc8ebb 100644 --- a/src/gpu/GrClipStackClip.cpp +++ b/src/gpu/GrClipStackClip.cpp @@ -7,6 +7,7 @@ #include "src/gpu/GrClipStackClip.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkTo.h" #include "src/core/SkClipOpPriv.h" #include "src/core/SkTaskGroup.h" @@ -15,7 +16,6 @@ #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDeferredProxyUploader.h" #include "src/gpu/GrDrawingManager.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrGpuResourcePriv.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -24,7 +24,6 @@ #include "src/gpu/GrStencilAttachment.h" #include "src/gpu/GrStyle.h" #include "src/gpu/GrTextureProxy.h" -#include "src/gpu/effects/GrConvexPolyEffect.h" #include "src/gpu/effects/GrRRectEffect.h" #include "src/gpu/effects/generated/GrDeviceSpaceEffect.h" #include "src/gpu/geometry/GrStyledShape.h" @@ -35,40 +34,31 @@ typedef GrReducedClip::ElementList ElementList; const char GrClipStackClip::kMaskTestTag[] = "clip_mask"; -bool GrClipStackClip::quickContains(const SkRect& rect) const { - if (!fStack || fStack->isWideOpen()) { - return true; +GrClip::PreClipResult GrClipStackClip::preApply(const SkRect& drawBounds) const { + SkIRect deviceRect = SkIRect::MakeSize(fDeviceSize); + SkRect rect = SkRect::Make(deviceRect); + if (!rect.intersect(drawBounds) || (fStack && fStack->isEmpty(deviceRect))) { + return Effect::kClippedOut; + } else if (!fStack || fStack->isWideOpen()) { + return Effect::kUnclipped; } - return fStack->quickContains(rect); -} -bool GrClipStackClip::quickContains(const SkRRect& rrect) const { - if (!fStack || fStack->isWideOpen()) { - return true; - } - return fStack->quickContains(rrect); -} - -bool GrClipStackClip::isRRect(const SkRect& origRTBounds, SkRRect* rr, GrAA* aa) const { - if (!fStack) { - return false; - } - const SkRect* rtBounds = &origRTBounds; + PreClipResult result(Effect::kClipped); bool isAA; - if (fStack->isRRect(*rtBounds, rr, &isAA)) { - *aa = GrAA(isAA); - return true; + if (fStack->isRRect(rect, &result.fRRect, &isAA)) { + result.fIsRRect = true; + result.fAA = GrAA(isAA); } - return false; + return result; } -SkIRect GrClipStackClip::getConservativeBounds(int width, int height) const { +SkIRect GrClipStackClip::getConservativeBounds() const { if (fStack) { SkRect devBounds; - fStack->getConservativeBounds(0, 0, width, height, &devBounds); + fStack->getConservativeBounds(0, 0, fDeviceSize.fWidth, fDeviceSize.fHeight, &devBounds); return devBounds.roundOut(); } else { - return this->GrClip::getConservativeBounds(width, height); + return SkIRect::MakeSize(fDeviceSize); } } @@ -197,16 +187,19 @@ bool GrClipStackClip::UseSWOnlyPath(GrRecordingContext* context, //////////////////////////////////////////////////////////////////////////////// // sort out what kind of clip mask needs to be created: alpha, stencil, // scissor, or entirely software -bool GrClipStackClip::apply(GrRecordingContext* context, GrRenderTargetContext* renderTargetContext, - bool useHWAA, bool hasUserStencilSettings, GrAppliedClip* out, - SkRect* bounds) const { - SkRect devBounds = SkRect::MakeIWH(renderTargetContext->width(), renderTargetContext->height()); +GrClip::Effect GrClipStackClip::apply(GrRecordingContext* context, + GrRenderTargetContext* renderTargetContext, + bool useHWAA, bool hasUserStencilSettings, + GrAppliedClip* out, SkRect* bounds) const { + SkASSERT(renderTargetContext->width() == fDeviceSize.fWidth && + renderTargetContext->height() == fDeviceSize.fHeight); + SkRect devBounds = SkRect::MakeIWH(fDeviceSize.fWidth, fDeviceSize.fHeight); if (!devBounds.intersect(*bounds)) { - return false; + return Effect::kClippedOut; } if (!fStack || fStack->isWideOpen()) { - return true; + return Effect::kUnclipped; } // An default count of 4 was chosen because of the common pattern in Blink of: @@ -231,33 +224,39 @@ bool GrClipStackClip::apply(GrRecordingContext* context, GrRenderTargetContext* maxWindowRectangles, maxAnalyticFPs, ccpr ? maxAnalyticFPs : 0); if (InitialState::kAllOut == reducedClip.initialState() && reducedClip.maskElements().isEmpty()) { - return false; + return Effect::kClippedOut; } + Effect effect = Effect::kUnclipped; if (reducedClip.hasScissor() && !GrClip::IsInsideClip(reducedClip.scissor(), devBounds)) { out->hardClip().addScissor(reducedClip.scissor(), bounds); + effect = Effect::kClipped; } if (!reducedClip.windowRectangles().empty()) { out->hardClip().addWindowRectangles(reducedClip.windowRectangles(), GrWindowRectsState::Mode::kExclusive); + effect = Effect::kClipped; } if (!reducedClip.maskElements().isEmpty()) { if (!this->applyClipMask(context, renderTargetContext, reducedClip, hasUserStencilSettings, out)) { - return false; + return Effect::kClippedOut; } + effect = Effect::kClipped; } // The opsTask ID must not be looked up until AFTER producing the clip mask (if any). That step // can cause a flush or otherwise change which opstask our draw is going into. uint32_t opsTaskID = renderTargetContext->getOpsTask()->uniqueID(); - if (auto clipFPs = reducedClip.finishAndDetachAnalyticFPs(ccpr, opsTaskID)) { + if (auto clipFPs = reducedClip.finishAndDetachAnalyticFPs(context, *fMatrixProvider, ccpr, + opsTaskID)) { out->addCoverageFP(std::move(clipFPs)); + effect = Effect::kClipped; } - return true; + return effect; } bool GrClipStackClip::applyClipMask(GrRecordingContext* context, @@ -472,7 +471,7 @@ GrSurfaceProxyView GrClipStackClip::createSoftwareClipMask( SkIRect maskSpaceIBounds = SkIRect::MakeWH(reducedClip.width(), reducedClip.height()); SkTaskGroup* taskGroup = nullptr; - if (auto direct = context->priv().asDirectContext()) { + if (auto direct = context->asDirectContext()) { taskGroup = direct->priv().getTaskGroup(); } diff --git a/src/gpu/GrClipStackClip.h b/src/gpu/GrClipStackClip.h index 90ca8676fc822..f1d47964ea113 100644 --- a/src/gpu/GrClipStackClip.h +++ b/src/gpu/GrClipStackClip.h @@ -20,17 +20,17 @@ class GrTextureProxy; */ class GrClipStackClip final : public GrClip { public: - GrClipStackClip(const SkClipStack* stack = nullptr) { this->reset(stack); } + GrClipStackClip(const SkISize& dimensions, + const SkClipStack* stack = nullptr, + const SkMatrixProvider* matrixProvider = nullptr) + : fDeviceSize(dimensions) + , fStack(stack) + , fMatrixProvider(matrixProvider) {} - void reset(const SkClipStack* stack) { fStack = stack; } - - bool quickContains(const SkRect&) const final; - bool quickContains(const SkRRect&) const final; - SkIRect getConservativeBounds(int width, int height) const final; - bool apply(GrRecordingContext*, GrRenderTargetContext*, bool useHWAA, - bool hasUserStencilSettings, GrAppliedClip* out, SkRect* bounds) const final; - - bool isRRect(const SkRect& rtBounds, SkRRect* rr, GrAA* aa) const override; + SkIRect getConservativeBounds() const final; + Effect apply(GrRecordingContext*, GrRenderTargetContext*, bool useHWAA, + bool hasUserStencilSettings, GrAppliedClip* out, SkRect* bounds) const final; + PreClipResult preApply(const SkRect& drawBounds) const final; sk_sp testingOnly_createClipMask(GrContext*) const; static const char kMaskTestTag[]; @@ -61,7 +61,11 @@ class GrClipStackClip final : public GrClip { const GrRenderTargetContext*, const GrReducedClip&); - const SkClipStack* fStack; + // SkClipStack does not track device bounds explicitly, but it will refine these device bounds + // as clip elements are added to the stack. + SkISize fDeviceSize; + const SkClipStack* fStack; + const SkMatrixProvider* fMatrixProvider; // for applying clip shaders }; #endif // GrClipStackClip_DEFINED diff --git a/src/gpu/GrColorInfo.cpp b/src/gpu/GrColorInfo.cpp index ada27da5a64a0..22bdc98678c2b 100644 --- a/src/gpu/GrColorInfo.cpp +++ b/src/gpu/GrColorInfo.cpp @@ -11,7 +11,11 @@ GrColorInfo::GrColorInfo( GrColorType colorType, SkAlphaType alphaType, sk_sp colorSpace) - : fColorSpace(std::move(colorSpace)), fColorType(colorType), fAlphaType(alphaType) {} + : fColorSpace(std::move(colorSpace)), fColorType(colorType), fAlphaType(alphaType) { + // sRGB sources are very common (SkColor, etc...), so we cache that transformation + fColorXformFromSRGB = GrColorSpaceXform::Make(sk_srgb_singleton(), kUnpremul_SkAlphaType, + fColorSpace.get(), kUnpremul_SkAlphaType); +} GrColorInfo::GrColorInfo(const SkColorInfo& ci) : GrColorInfo(SkColorTypeToGrColorType(ci.colorType()), @@ -20,16 +24,3 @@ GrColorInfo::GrColorInfo(const SkColorInfo& ci) GrColorInfo::GrColorInfo(const GrColorInfo&) = default; GrColorInfo& GrColorInfo::operator=(const GrColorInfo&) = default; - -GrColorSpaceXform* GrColorInfo::colorSpaceXformFromSRGB() const { - // TODO: Make this atomic if we start accessing this on multiple threads. - if (!fInitializedColorSpaceXformFromSRGB) { - // sRGB sources are very common (SkColor, etc...), so we cache that transformation - fColorXformFromSRGB = GrColorSpaceXform::Make(sk_srgb_singleton(), kUnpremul_SkAlphaType, - fColorSpace.get(), kUnpremul_SkAlphaType); - fInitializedColorSpaceXformFromSRGB = true; - } - // You can't be color-space aware in legacy mode - SkASSERT(fColorSpace || !fColorXformFromSRGB); - return fColorXformFromSRGB.get(); -} diff --git a/src/gpu/GrColorInfo.h b/src/gpu/GrColorInfo.h index 578575a5d6ce0..0af549a8ee590 100644 --- a/src/gpu/GrColorInfo.h +++ b/src/gpu/GrColorInfo.h @@ -29,10 +29,8 @@ class GrColorInfo { SkColorSpace* colorSpace() const { return fColorSpace.get(); } sk_sp refColorSpace() const { return fColorSpace; } - GrColorSpaceXform* colorSpaceXformFromSRGB() const; - sk_sp refColorSpaceXformFromSRGB() const { - return sk_ref_sp(this->colorSpaceXformFromSRGB()); - } + GrColorSpaceXform* colorSpaceXformFromSRGB() const { return fColorXformFromSRGB.get(); } + sk_sp refColorSpaceXformFromSRGB() const { return fColorXformFromSRGB; } GrColorType colorType() const { return fColorType; } SkAlphaType alphaType() const { return fAlphaType; } @@ -43,10 +41,9 @@ class GrColorInfo { private: sk_sp fColorSpace; - mutable sk_sp fColorXformFromSRGB; + sk_sp fColorXformFromSRGB; GrColorType fColorType = GrColorType::kUnknown; SkAlphaType fAlphaType = kUnknown_SkAlphaType; - mutable bool fInitializedColorSpaceXformFromSRGB = false; }; #endif diff --git a/src/gpu/GrColorSpaceXform.cpp b/src/gpu/GrColorSpaceXform.cpp index 0f97d21f9ef97..8b1d2343e0577 100644 --- a/src/gpu/GrColorSpaceXform.cpp +++ b/src/gpu/GrColorSpaceXform.cpp @@ -58,31 +58,26 @@ SkColor4f GrColorSpaceXform::apply(const SkColor4f& srcColor) { class GrGLColorSpaceXformEffect : public GrGLSLFragmentProcessor { public: void emitCode(EmitArgs& args) override { - const GrColorSpaceXformEffect& csxe = args.fFp.cast(); + const GrColorSpaceXformEffect& proc = args.fFp.cast(); GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; - fColorSpaceHelper.emitCode(uniformHandler, csxe.colorXform()); + fColorSpaceHelper.emitCode(uniformHandler, proc.colorXform()); - if (this->numChildProcessors()) { - SkString childColor = this->invokeChild(0, args); + SkString childColor = this->numChildProcessors() + ? this->invokeChild(0, args.fInputColor, args) + : SkString(args.fInputColor); - SkString xformedColor; - fragBuilder->appendColorGamutXform(&xformedColor, childColor.c_str(), &fColorSpaceHelper); - fragBuilder->codeAppendf("%s = %s * %s;", args.fOutputColor, xformedColor.c_str(), - args.fInputColor); - } else { - SkString xformedColor; - fragBuilder->appendColorGamutXform(&xformedColor, args.fInputColor, &fColorSpaceHelper); - fragBuilder->codeAppendf("%s = %s;", args.fOutputColor, xformedColor.c_str()); - } + SkString xformedColor; + fragBuilder->appendColorGamutXform(&xformedColor, childColor.c_str(), &fColorSpaceHelper); + fragBuilder->codeAppendf("%s = %s;", args.fOutputColor, xformedColor.c_str()); } private: void onSetData(const GrGLSLProgramDataManager& pdman, - const GrFragmentProcessor& processor) override { - const GrColorSpaceXformEffect& csxe = processor.cast(); - fColorSpaceHelper.setData(pdman, csxe.colorXform()); + const GrFragmentProcessor& fp) override { + const GrColorSpaceXformEffect& proc = fp.cast(); + fColorSpaceHelper.setData(pdman, proc.colorXform()); } GrGLSLColorSpaceXformHelper fColorSpaceHelper; @@ -97,15 +92,18 @@ GrColorSpaceXformEffect::GrColorSpaceXformEffect(std::unique_ptrregisterChildProcessor(std::move(child)); + this->registerChild(std::move(child)); } } +GrColorSpaceXformEffect::GrColorSpaceXformEffect(const GrColorSpaceXformEffect& that) + : INHERITED(kGrColorSpaceXformEffect_ClassID, that.optimizationFlags()) + , fColorXform(that.fColorXform) { + this->cloneAndRegisterAllChildProcessors(that); +} + std::unique_ptr GrColorSpaceXformEffect::clone() const { - std::unique_ptr child = - this->numChildProcessors() ? this->childProcessor(0).clone() : nullptr; - return std::unique_ptr( - new GrColorSpaceXformEffect(std::move(child), fColorXform)); + return std::unique_ptr(new GrColorSpaceXformEffect(*this)); } bool GrColorSpaceXformEffect::onIsEqual(const GrFragmentProcessor& s) const { @@ -124,23 +122,10 @@ GrGLSLFragmentProcessor* GrColorSpaceXformEffect::onCreateGLSLInstance() const { GrFragmentProcessor::OptimizationFlags GrColorSpaceXformEffect::OptFlags( const GrFragmentProcessor* child) { - if (child) { - OptimizationFlags flags = kNone_OptimizationFlags; - if (child->compatibleWithCoverageAsAlpha()) { - flags |= kCompatibleWithCoverageAsAlpha_OptimizationFlag; - } - if (child->preservesOpaqueInput()) { - flags |= kPreservesOpaqueInput_OptimizationFlag; - } - if (child->hasConstantOutputForConstantInput()) { - flags |= kConstantOutputForConstantInput_OptimizationFlag; - } - return flags; - } else { - return kCompatibleWithCoverageAsAlpha_OptimizationFlag | + return (child ? ProcessorOptimizationFlags(child) : kAll_OptimizationFlags) & + (kCompatibleWithCoverageAsAlpha_OptimizationFlag | kPreservesOpaqueInput_OptimizationFlag | - kConstantOutputForConstantInput_OptimizationFlag; - } + kConstantOutputForConstantInput_OptimizationFlag); } SkPMColor4f GrColorSpaceXformEffect::constantOutputForConstantInput( @@ -151,42 +136,16 @@ SkPMColor4f GrColorSpaceXformEffect::constantOutputForConstantInput( return this->fColorXform->apply(c0.unpremul()).premul(); } -std::unique_ptr GrColorSpaceXformEffect::Make(SkColorSpace* src, - SkAlphaType srcAT, - SkColorSpace* dst, - SkAlphaType dstAT) { - auto xform = GrColorSpaceXform::Make(src, srcAT, - dst, dstAT); - if (!xform) { - return nullptr; - } - - return std::unique_ptr(new GrColorSpaceXformEffect(nullptr, - std::move(xform))); -} - std::unique_ptr GrColorSpaceXformEffect::Make( std::unique_ptr child, - SkColorSpace* src, SkAlphaType srcAT, SkColorSpace* dst) { - if (!child) { - return nullptr; - } - - auto xform = GrColorSpaceXform::Make(src, srcAT, - dst, kPremul_SkAlphaType); - if (!xform) { - return child; - } - - return std::unique_ptr(new GrColorSpaceXformEffect(std::move(child), - std::move(xform))); + SkColorSpace* src, SkAlphaType srcAT, + SkColorSpace* dst, SkAlphaType dstAT) { + return Make(std::move(child), GrColorSpaceXform::Make(src, srcAT, dst, dstAT)); } std::unique_ptr GrColorSpaceXformEffect::Make( - std::unique_ptr child, sk_sp colorXform) { - if (!child) { - return nullptr; - } + std::unique_ptr child, + sk_sp colorXform) { if (!colorXform) { return child; } diff --git a/src/gpu/GrColorSpaceXform.h b/src/gpu/GrColorSpaceXform.h index 9d540e4f365c1..63b5aa02e555d 100644 --- a/src/gpu/GrColorSpaceXform.h +++ b/src/gpu/GrColorSpaceXform.h @@ -59,23 +59,18 @@ class GrColorSpaceXform : public SkRefCnt { class GrColorSpaceXformEffect : public GrFragmentProcessor { public: - /** - * Returns a fragment processor that converts the input's color space from src to dst. - */ - static std::unique_ptr Make(SkColorSpace* src, SkAlphaType srcAT, - SkColorSpace* dst, SkAlphaType dstAT); - /** * Returns a fragment processor that calls the passed in fragment processor, and then converts - * the color space of the output from src to dst. + * the color space of the output from src to dst. If the child is null, sk_InColor is used. */ static std::unique_ptr Make(std::unique_ptr child, SkColorSpace* src, SkAlphaType srcAT, - SkColorSpace* dst); + SkColorSpace* dst, SkAlphaType dstAT); /** * Returns a fragment processor that calls the passed in FP and then converts it with the given - * color xform. Returns null if child is null, returns child if the xform is null (e.g. noop). + * color xform. If the child is null, sk_InColor is used. Returns child as-is if the xform is + * null (i.e. a no-op). */ static std::unique_ptr Make(std::unique_ptr child, sk_sp colorXform); @@ -89,6 +84,8 @@ class GrColorSpaceXformEffect : public GrFragmentProcessor { GrColorSpaceXformEffect(std::unique_ptr child, sk_sp colorXform); + GrColorSpaceXformEffect(const GrColorSpaceXformEffect& that); + static OptimizationFlags OptFlags(const GrFragmentProcessor* child); SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override; diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp index 5bff036a84b02..48b6982153f22 100644 --- a/src/gpu/GrContext.cpp +++ b/src/gpu/GrContext.cpp @@ -30,9 +30,9 @@ #include "src/gpu/SkGr.h" #include "src/gpu/ccpr/GrCoverageCountingPathRenderer.h" #include "src/gpu/effects/GrSkSLFP.h" +#include "src/gpu/text/GrSDFTOptions.h" #include "src/gpu/text/GrStrikeCache.h" #include "src/gpu/text/GrTextBlobCache.h" -#include "src/gpu/text/GrTextContext.h" #include "src/image/SkImage_GpuBase.h" #include "src/image/SkSurface_Gpu.h" #include @@ -56,9 +56,8 @@ GrContext::GrContext(sk_sp proxy) : INHERITED(std::mov GrContext::~GrContext() { ASSERT_SINGLE_OWNER - if (this->drawingManager()) { - this->drawingManager()->cleanup(); - } + this->destroyDrawingManager(); + fMappedBufferManager.reset(); delete fResourceProvider; delete fResourceCache; } @@ -120,10 +119,6 @@ void GrContext::abandonContext() { fResourceProvider->abandon(); - // Need to cleanup the drawing manager first so all the render targets - // will be released/forgotten before they too are abandoned. - this->drawingManager()->cleanup(); - // abandon first to so destructors // don't try to free the resources in the API. fResourceCache->abandonAll(); @@ -144,10 +139,6 @@ void GrContext::releaseResourcesAndAbandonContext() { fResourceProvider->abandon(); - // Need to cleanup the drawing manager first so all the render targets - // will be released/forgotten before they too are abandoned. - this->drawingManager()->cleanup(); - // Release all resources in the backend 3D API. fResourceCache->releaseAll(); @@ -166,6 +157,8 @@ bool GrContext::abandoned() { return false; } +bool GrContext::oomed() { return fGpu ? fGpu->checkAndResetOOMed() : false; } + void GrContext::resetGLTextureBindings() { if (this->abandoned() || this->backend() != GrBackendApi::kOpenGL) { return; @@ -181,6 +174,10 @@ void GrContext::resetContext(uint32_t state) { void GrContext::freeGpuResources() { ASSERT_SINGLE_OWNER + if (this->abandoned()) { + return; + } + // TODO: the glyph cache doesn't hold any GpuResources so this call should not be needed here. // Some slack in the GrTextBlob's implementation requires it though. That could be fixed. fStrikeCache->freeAll(); @@ -301,15 +298,18 @@ bool GrContext::wait(int numSemaphores, const GrBackendSemaphore waitSemaphores[ std::unique_ptr sema = fResourceProvider->wrapBackendSemaphore( waitSemaphores[i], GrResourceProvider::SemaphoreWrapType::kWillWait, kAdopt_GrWrapOwnership); - fGpu->waitSemaphore(sema.get()); + // If we failed to wrap the semaphore it means the client didn't give us a valid semaphore + // to begin with. Therefore, it is fine to not wait on it. + if (sema) { + fGpu->waitSemaphore(sema.get()); + } } return true; } //////////////////////////////////////////////////////////////////////////////// -GrSemaphoresSubmitted GrContext::flush(const GrFlushInfo& info, - const GrPrepareForExternalIORequests& externalRequests) { +GrSemaphoresSubmitted GrContext::flush(const GrFlushInfo& info) { ASSERT_SINGLE_OWNER if (this->abandoned()) { if (info.fFinishedProc) { @@ -322,7 +322,7 @@ GrSemaphoresSubmitted GrContext::flush(const GrFlushInfo& info, } bool flushed = this->drawingManager()->flush( - nullptr, 0, SkSurface::BackendSurfaceAccess::kNoAccess, info, externalRequests); + nullptr, 0, SkSurface::BackendSurfaceAccess::kNoAccess, info, nullptr); if (!flushed || (!this->priv().caps()->semaphoreSupport() && info.fNumSemaphores)) { return GrSemaphoresSubmitted::kNo; @@ -468,71 +468,71 @@ GrBackendTexture GrContext::createBackendTexture(const SkSurfaceCharacterization return result; } +static GrBackendTexture create_and_update_backend_texture( + GrContext* context, + SkISize dimensions, + const GrBackendFormat& backendFormat, + GrMipMapped mipMapped, + GrRenderable renderable, + GrProtected isProtected, + sk_sp finishedCallback, + const GrGpu::BackendTextureData* data) { + GrGpu* gpu = context->priv().getGpu(); + + GrBackendTexture beTex = gpu->createBackendTexture(dimensions, backendFormat, renderable, + mipMapped, isProtected); + if (!beTex.isValid()) { + return {}; + } + + if (!context->priv().getGpu()->updateBackendTexture(beTex, std::move(finishedCallback), data)) { + context->deleteBackendTexture(beTex); + return {}; + } + return beTex; +} + + GrBackendTexture GrContext::createBackendTexture(const SkSurfaceCharacterization& c, const SkColor4f& color, GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { + sk_sp finishedCallback; + if (finishedProc) { + finishedCallback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + if (!this->asDirectContext() || !c.isValid()) { - finishedProc(finishedContext); return {}; } if (this->abandoned()) { - finishedProc(finishedContext); return {}; } if (c.usesGLFBO0()) { - finishedProc(finishedContext); // If we are making the surface we will never use FBO0. return {}; } if (c.vulkanSecondaryCBCompatible()) { - finishedProc(finishedContext); return {}; } const GrBackendFormat format = this->defaultBackendFormat(c.colorType(), GrRenderable::kYes); if (!format.isValid()) { - finishedProc(finishedContext); return {}; } - GrBackendTexture result = this->createBackendTexture(c.width(), c.height(), format, color, - GrMipMapped(c.isMipMapped()), - GrRenderable::kYes, - c.isProtected(), finishedProc, - finishedContext); + GrGpu::BackendTextureData data(color); + GrBackendTexture result = create_and_update_backend_texture( + this, {c.width(), c.height()}, format, GrMipMapped(c.isMipMapped()), GrRenderable::kYes, + c.isProtected(), std::move(finishedCallback), &data); + SkASSERT(c.isCompatible(result)); return result; } -static GrBackendTexture create_and_update_backend_texture(GrContext* context, - SkISize dimensions, - const GrBackendFormat& backendFormat, - GrMipMapped mipMapped, - GrRenderable renderable, - GrProtected isProtected, - GrGpuFinishedProc finishedProc, - GrGpuFinishedContext finishedContext, - const GrGpu::BackendTextureData* data) { - GrGpu* gpu = context->priv().getGpu(); - - GrBackendTexture beTex = gpu->createBackendTexture(dimensions, backendFormat, renderable, - mipMapped, isProtected); - if (!beTex.isValid()) { - return {}; - } - - if (!context->priv().getGpu()->updateBackendTexture(beTex, finishedProc, finishedContext, - data)) { - context->deleteBackendTexture(beTex); - return {}; - } - return beTex; -} - GrBackendTexture GrContext::createBackendTexture(int width, int height, const GrBackendFormat& backendFormat, const SkColor4f& color, @@ -541,20 +541,23 @@ GrBackendTexture GrContext::createBackendTexture(int width, int height, GrProtected isProtected, GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { + sk_sp finishedCallback; + if (finishedProc) { + finishedCallback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + TRACE_EVENT0("skia.gpu", TRACE_FUNC); if (!this->asDirectContext()) { - finishedProc(finishedContext); return {}; } if (this->abandoned()) { - finishedProc(finishedContext); return {}; } GrGpu::BackendTextureData data(color); return create_and_update_backend_texture(this, {width, height}, backendFormat, mipMapped, - renderable, isProtected, finishedProc, finishedContext, + renderable, isProtected, std::move(finishedCallback), &data); } @@ -566,27 +569,31 @@ GrBackendTexture GrContext::createBackendTexture(int width, int height, GrProtected isProtected, GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { + sk_sp finishedCallback; + if (finishedProc) { + finishedCallback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + if (!this->asDirectContext()) { - finishedProc(finishedContext); return {}; } if (this->abandoned()) { - finishedProc(finishedContext); return {}; } GrBackendFormat format = this->defaultBackendFormat(skColorType, renderable); if (!format.isValid()) { - finishedProc(finishedContext); return {}; } GrColorType grColorType = SkColorTypeToGrColorType(skColorType); SkColor4f swizzledColor = this->caps()->getWriteSwizzle(format, grColorType).applyTo(color); - return this->createBackendTexture(width, height, format, swizzledColor, mipMapped, renderable, - isProtected, finishedProc, finishedContext); + GrGpu::BackendTextureData data(swizzledColor); + return create_and_update_backend_texture(this, {width, height}, format, mipMapped, + renderable, isProtected, std::move(finishedCallback), + &data); } GrBackendTexture GrContext::createBackendTexture(const SkPixmap srcData[], int numProvidedLevels, @@ -595,18 +602,20 @@ GrBackendTexture GrContext::createBackendTexture(const SkPixmap srcData[], int n GrGpuFinishedContext finishedContext) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); + sk_sp finishedCallback; + if (finishedProc) { + finishedCallback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + if (!this->asDirectContext()) { - finishedProc(finishedContext); return {}; } if (this->abandoned()) { - finishedProc(finishedContext); return {}; } if (!srcData || numProvidedLevels <= 0) { - finishedProc(finishedContext); return {}; } @@ -622,7 +631,6 @@ GrBackendTexture GrContext::createBackendTexture(const SkPixmap srcData[], int n } if (numProvidedLevels != numExpectedLevels) { - finishedProc(finishedContext); return {}; } @@ -630,26 +638,29 @@ GrBackendTexture GrContext::createBackendTexture(const SkPixmap srcData[], int n GrGpu::BackendTextureData data(srcData); return create_and_update_backend_texture(this, {baseWidth, baseHeight}, backendFormat, - mipMapped, renderable, isProtected, finishedProc, - finishedContext, &data); + mipMapped, renderable, isProtected, + std::move(finishedCallback), &data); } bool GrContext::updateBackendTexture(const GrBackendTexture& backendTexture, const SkColor4f& color, GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { + sk_sp finishedCallback; + if (finishedProc) { + finishedCallback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + if (!this->asDirectContext()) { - finishedProc(finishedContext); return false; } if (this->abandoned()) { - finishedProc(finishedContext); return false; } GrGpu::BackendTextureData data(color); - return fGpu->updateBackendTexture(backendTexture, finishedProc, finishedContext, &data); + return fGpu->updateBackendTexture(backendTexture, std::move(finishedCallback), &data); } bool GrContext::updateBackendTexture(const GrBackendTexture& backendTexture, @@ -657,18 +668,20 @@ bool GrContext::updateBackendTexture(const GrBackendTexture& backendTexture, int numLevels, GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { + sk_sp finishedCallback; + if (finishedProc) { + finishedCallback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + if (!this->asDirectContext()) { - finishedProc(finishedContext); return false; } if (this->abandoned()) { - finishedProc(finishedContext); return false; } if (!srcData || numLevels <= 0) { - finishedProc(finishedContext); return false; } @@ -678,12 +691,11 @@ bool GrContext::updateBackendTexture(const GrBackendTexture& backendTexture, backendTexture.height()) + 1; } if (numLevels != numExpectedLevels) { - finishedProc(finishedContext); return false; } GrGpu::BackendTextureData data(srcData); - return fGpu->updateBackendTexture(backendTexture, finishedProc, finishedContext, &data); + return fGpu->updateBackendTexture(backendTexture, std::move(finishedCallback), &data); } ////////////////////////////////////////////////////////////////////////////// @@ -696,20 +708,23 @@ GrBackendTexture GrContext::createCompressedBackendTexture(int width, int height GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); + sk_sp finishedCallback; + if (finishedProc) { + finishedCallback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + if (!this->asDirectContext()) { - finishedProc(finishedContext); return {}; } if (this->abandoned()) { - finishedProc(finishedContext); return {}; } GrGpu::BackendTextureData data(color); return fGpu->createCompressedBackendTexture({width, height}, backendFormat, - mipMapped, isProtected, finishedProc, - finishedContext, &data); + mipMapped, isProtected, std::move(finishedCallback), + &data); } GrBackendTexture GrContext::createCompressedBackendTexture(int width, int height, @@ -720,16 +735,6 @@ GrBackendTexture GrContext::createCompressedBackendTexture(int width, int height GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); - if (!this->asDirectContext()) { - finishedProc(finishedContext); - return {}; - } - - if (this->abandoned()) { - finishedProc(finishedContext); - return {}; - } - GrBackendFormat format = this->compressedBackendFormat(compression); return this->createCompressedBackendTexture(width, height, format, color, mipMapped, isProtected, finishedProc, @@ -745,20 +750,23 @@ GrBackendTexture GrContext::createCompressedBackendTexture(int width, int height GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); + sk_sp finishedCallback; + if (finishedProc) { + finishedCallback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + if (!this->asDirectContext()) { - finishedProc(finishedContext); return {}; } if (this->abandoned()) { - finishedProc(finishedContext); return {}; } GrGpu::BackendTextureData data(compressedData, dataSize); return fGpu->createCompressedBackendTexture({width, height}, backendFormat, - mipMapped, isProtected, finishedProc, - finishedContext, &data); + mipMapped, isProtected, std::move(finishedCallback), + &data); } GrBackendTexture GrContext::createCompressedBackendTexture(int width, int height, @@ -769,20 +777,49 @@ GrBackendTexture GrContext::createCompressedBackendTexture(int width, int height GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); + GrBackendFormat format = this->compressedBackendFormat(compression); + return this->createCompressedBackendTexture(width, height, format, data, dataSize, mipMapped, + isProtected, finishedProc, finishedContext); +} + +bool GrContext::setBackendTextureState(const GrBackendTexture& backendTexture, + const GrBackendSurfaceMutableState& state, + GrGpuFinishedProc finishedProc, + GrGpuFinishedContext finishedContext) { + sk_sp callback; + if (finishedProc) { + callback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + if (!this->asDirectContext()) { - finishedProc(finishedContext); - return {}; + return false; } if (this->abandoned()) { - finishedProc(finishedContext); - return {}; + return false; } - GrBackendFormat format = this->compressedBackendFormat(compression); - return this->createCompressedBackendTexture(width, height, format, data, dataSize, - mipMapped, isProtected, finishedProc, - finishedContext); + return fGpu->setBackendTextureState(backendTexture, state, std::move(callback)); +} + +bool GrContext::setBackendRenderTargetState(const GrBackendRenderTarget& backendRenderTarget, + const GrBackendSurfaceMutableState& state, + GrGpuFinishedProc finishedProc, + GrGpuFinishedContext finishedContext) { + sk_sp callback; + if (finishedProc) { + callback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); + } + + if (!this->asDirectContext()) { + return false; + } + + if (this->abandoned()) { + return false; + } + + return fGpu->setBackendRenderTargetState(backendRenderTarget, state, std::move(callback)); } void GrContext::deleteBackendTexture(GrBackendTexture backendTex) { @@ -796,6 +833,8 @@ void GrContext::deleteBackendTexture(GrBackendTexture backendTex) { fGpu->deleteBackendTexture(backendTex); } +////////////////////////////////////////////////////////////////////////////// + bool GrContext::precompileShader(const SkData& key, const SkData& data) { return fGpu->precompileShader(key, data); } diff --git a/src/gpu/GrContextPriv.cpp b/src/gpu/GrContextPriv.cpp index 7b311a14b6ce4..4b895d3e01ee9 100644 --- a/src/gpu/GrContextPriv.cpp +++ b/src/gpu/GrContextPriv.cpp @@ -52,7 +52,7 @@ GrSemaphoresSubmitted GrContextPriv::flushSurfaces(GrSurfaceProxy* proxies[], in ASSERT_OWNED_PROXY(proxies[i]); } return fContext->drawingManager()->flushSurfaces( - proxies, numProxies, SkSurface::BackendSurfaceAccess::kNoAccess, info); + proxies, numProxies, SkSurface::BackendSurfaceAccess::kNoAccess, info, nullptr); } void GrContextPriv::flushSurface(GrSurfaceProxy* proxy) { @@ -63,9 +63,9 @@ void GrContextPriv::moveRenderTasksToDDL(SkDeferredDisplayList* ddl) { fContext->drawingManager()->moveRenderTasksToDDL(ddl); } -void GrContextPriv::copyRenderTasksFromDDL(const SkDeferredDisplayList* ddl, +void GrContextPriv::copyRenderTasksFromDDL(sk_sp ddl, GrRenderTargetProxy* newDest) { - fContext->drawingManager()->copyRenderTasksFromDDL(ddl, newDest); + fContext->drawingManager()->copyRenderTasksFromDDL(std::move(ddl), newDest); } bool GrContextPriv::compile(const GrProgramDesc& desc, const GrProgramInfo& info) { @@ -153,10 +153,6 @@ void GrContextPriv::printContextStats() const { } ///////////////////////////////////////////////// -void GrContextPriv::testingOnly_setTextBlobCacheLimit(size_t bytes) { - fContext->priv().getTextBlobCache()->setBudget(bytes); -} - sk_sp GrContextPriv::testingOnly_getFontAtlasImage(GrMaskFormat format, unsigned int index) { auto atlasManager = this->getAtlasManager(); if (!atlasManager) { diff --git a/src/gpu/GrContextPriv.h b/src/gpu/GrContextPriv.h index c5d3f72021e0f..2abd0376a534e 100644 --- a/src/gpu/GrContextPriv.h +++ b/src/gpu/GrContextPriv.h @@ -40,14 +40,11 @@ class GrContextPriv { GrImageContext* asImageContext() { return fContext->asImageContext(); } GrRecordingContext* asRecordingContext() { return fContext->asRecordingContext(); } - GrContext* asDirectContext() { return fContext->asDirectContext(); } // from GrImageContext GrProxyProvider* proxyProvider() { return fContext->proxyProvider(); } const GrProxyProvider* proxyProvider() const { return fContext->proxyProvider(); } - bool abandoned() const { return fContext->abandoned(); } - /** This is only useful for debug purposes */ SkDEBUGCODE(GrSingleOwner* singleOwner() const { return fContext->singleOwner(); } ) @@ -121,7 +118,7 @@ class GrContextPriv { } void moveRenderTasksToDDL(SkDeferredDisplayList*); - void copyRenderTasksFromDDL(const SkDeferredDisplayList*, GrRenderTargetProxy* newDest); + void copyRenderTasksFromDDL(sk_sp, GrRenderTargetProxy* newDest); bool compile(const GrProgramDesc&, const GrProgramInfo&); @@ -154,10 +151,6 @@ class GrContextPriv { void dumpContextStatsKeyValuePairs(SkTArray* keys, SkTArray* values) const; void printContextStats() const; - /** Specify the TextBlob cache limit. If the current cache exceeds this limit it will purge. - this is for testing only */ - void testingOnly_setTextBlobCacheLimit(size_t bytes); - /** Get pointer to atlas texture for given mask format. Note that this wraps an actively mutating texture in an SkImage. This could yield unexpected results if it gets cached or used more generally. */ diff --git a/src/gpu/GrContextThreadSafeProxy.cpp b/src/gpu/GrContextThreadSafeProxy.cpp index 6fd86bd1a9f84..4fa6fb719b458 100644 --- a/src/gpu/GrContextThreadSafeProxy.cpp +++ b/src/gpu/GrContextThreadSafeProxy.cpp @@ -37,6 +37,7 @@ GrContextThreadSafeProxy::~GrContextThreadSafeProxy() = default; void GrContextThreadSafeProxy::init(sk_sp caps) { fCaps = std::move(caps); + fTextBlobCache.reset(new GrTextBlobCache(fContextID)); } SkSurfaceCharacterization GrContextThreadSafeProxy::createCharacterization( @@ -127,11 +128,13 @@ GrBackendFormat GrContextThreadSafeProxy::defaultBackendFormat(SkColorType skCol } void GrContextThreadSafeProxy::abandonContext() { - fAbandoned.store(true, std::memory_order_relaxed); + if (!fAbandoned.exchange(true)) { + fTextBlobCache->freeAll(); + } } bool GrContextThreadSafeProxy::abandoned() const { - return fAbandoned.load(std::memory_order_relaxed); + return fAbandoned; } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/GrContextThreadSafeProxyPriv.h b/src/gpu/GrContextThreadSafeProxyPriv.h index c4873bb98473b..e644fb1b2f402 100644 --- a/src/gpu/GrContextThreadSafeProxyPriv.h +++ b/src/gpu/GrContextThreadSafeProxyPriv.h @@ -12,6 +12,7 @@ #include "include/private/GrContext_Base.h" #include "src/gpu/GrCaps.h" +#include "src/gpu/text/GrTextBlobCache.h" /** * Class that adds methods to GrContextThreadSafeProxy that are only intended for use internal to @@ -20,7 +21,9 @@ */ class GrContextThreadSafeProxyPriv { public: - void init(sk_sp caps) const { fProxy->init(std::move(caps)); } + void init(sk_sp caps) const { + fProxy->init(std::move(caps)); + } bool matches(GrContext_Base* candidate) const { return fProxy == candidate->threadSafeProxy().get(); @@ -33,6 +36,9 @@ class GrContextThreadSafeProxyPriv { const GrCaps* caps() const { return fProxy->fCaps.get(); } sk_sp refCaps() const { return fProxy->fCaps; } + GrTextBlobCache* getTextBlobCache() { return fProxy->fTextBlobCache.get(); } + const GrTextBlobCache* getTextBlobCache() const { return fProxy->fTextBlobCache.get(); } + void abandonContext() { fProxy->abandonContext(); } bool abandoned() const { return fProxy->abandoned(); } diff --git a/src/gpu/GrCoordTransform.h b/src/gpu/GrCoordTransform.h index 73f09ba709fd1..85cdf2e459baa 100644 --- a/src/gpu/GrCoordTransform.h +++ b/src/gpu/GrCoordTransform.h @@ -9,11 +9,6 @@ #define GrCoordTransform_DEFINED #include "include/core/SkMatrix.h" -#include "src/core/SkMatrixPriv.h" -#include "src/gpu/GrSurfaceProxyPriv.h" -#include "src/gpu/GrTextureProxy.h" - -class GrTexture; /** * A class representing a linear transformation of local coordinates. GrFragnentProcessors @@ -22,72 +17,6 @@ class GrTexture; class GrCoordTransform { public: GrCoordTransform() = default; - - GrCoordTransform(const GrCoordTransform&) = default; - - /** - * Create a transformation that maps [0, proxy->width()] x [0, proxy->height()] to a proxy's - * extent. - */ - GrCoordTransform(GrSurfaceProxy* proxy, GrSurfaceOrigin origin) - : fProxy(proxy), fOrigin(origin) {} - - /** - * Create a transformation from a matrix. The origin implies whether a y-reversal should be - * performed. - */ - GrCoordTransform(const SkMatrix& m, GrSurfaceProxy* proxy, GrSurfaceOrigin origin) - : fProxy(proxy), fOrigin(origin), fMatrix(m) { - SkASSERT(proxy); - } - - /** - * Create a transformation that applies the matrix to a coord set. - */ - GrCoordTransform(const SkMatrix& m) : fMatrix(m) {} - - GrCoordTransform& operator=(const GrCoordTransform& that) = default; - - // The textures' effect is to optionally normalize the final matrix, so a blind equality check - // could be misleading. - bool operator==(const GrCoordTransform& that) const = delete; - bool operator!=(const GrCoordTransform& that) const = delete; - - bool hasSameEffectiveMatrix(const GrCoordTransform& that) const { - // This is slightly more conservative than computing each transforms effective matrix and - // then comparing them. - if (!SkMatrixPriv::CheapEqual(fMatrix, that.fMatrix)) { - return false; - } - if (SkToBool(fProxy) != SkToBool(that.fProxy)) { - return false; - } - if (this->normalize() != that.normalize() || this->reverseY() != that.reverseY()) { - return false; - } - if (this->normalize() && - fProxy->backingStoreDimensions() != that.fProxy->backingStoreDimensions()) { - return false; - } - return true; - } - - const SkMatrix& matrix() const { return fMatrix; } - const GrSurfaceProxy* proxy() const { return fProxy; } - bool normalize() const { - return fProxy && fProxy->backendFormat().textureType() != GrTextureType::kRectangle; - } - bool reverseY() const { return fProxy && fOrigin == kBottomLeft_GrSurfaceOrigin; } - bool isNoOp() const { return fMatrix.isIdentity() && !this->normalize() && !this->reverseY(); } - - // This should only ever be called at flush time after the backing texture has been - // successfully instantiated - GrTexture* peekTexture() const { return fProxy->peekTexture(); } - -private: - const GrSurfaceProxy* fProxy = nullptr; - GrSurfaceOrigin fOrigin = kTopLeft_GrSurfaceOrigin; - SkMatrix fMatrix = SkMatrix::I(); }; #endif diff --git a/src/gpu/GrCopyRenderTask.cpp b/src/gpu/GrCopyRenderTask.cpp index 0f46e69efcbb2..a578451b1a7df 100644 --- a/src/gpu/GrCopyRenderTask.cpp +++ b/src/gpu/GrCopyRenderTask.cpp @@ -11,7 +11,8 @@ #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrResourceAllocator.h" -sk_sp GrCopyRenderTask::Make(GrSurfaceProxyView srcView, +sk_sp GrCopyRenderTask::Make(GrDrawingManager* drawingMgr, + GrSurfaceProxyView srcView, const SkIRect& srcRect, GrSurfaceProxyView dstView, const SkIPoint& dstPoint, @@ -41,34 +42,35 @@ sk_sp GrCopyRenderTask::Make(GrSurfaceProxyView srcView, } sk_sp task(new GrCopyRenderTask( - std::move(srcView), clippedSrcRect, std::move(dstView), clippedDstPoint)); + drawingMgr, std::move(srcView), clippedSrcRect, std::move(dstView), clippedDstPoint)); return std::move(task); } -GrCopyRenderTask::GrCopyRenderTask(GrSurfaceProxyView srcView, +GrCopyRenderTask::GrCopyRenderTask(GrDrawingManager* drawingMgr, + GrSurfaceProxyView srcView, const SkIRect& srcRect, GrSurfaceProxyView dstView, const SkIPoint& dstPoint) - : GrRenderTask(std::move(dstView)) + : GrRenderTask() , fSrcView(std::move(srcView)) , fSrcRect(srcRect) , fDstPoint(dstPoint) { - fTargetView.proxy()->setLastRenderTask(this); + this->addTarget(drawingMgr, dstView); } void GrCopyRenderTask::gatherProxyIntervals(GrResourceAllocator* alloc) const { // This renderTask doesn't have "normal" ops. In this case we still need to add an interval (so // fEndOfOpsTaskOpIndices will remain in sync), so we create a fake op# to capture the fact that - // we read fSrcView and copy to fTargetView. + // we read fSrcView and copy to target view. alloc->addInterval(fSrcView.proxy(), alloc->curOp(), alloc->curOp(), GrResourceAllocator::ActualUse::kYes); - alloc->addInterval(fTargetView.proxy(), alloc->curOp(), alloc->curOp(), + alloc->addInterval(this->target(0).proxy(), alloc->curOp(), alloc->curOp(), GrResourceAllocator::ActualUse::kYes); alloc->incOps(); } bool GrCopyRenderTask::onExecute(GrOpFlushState* flushState) { - GrSurfaceProxy* dstProxy = fTargetView.proxy(); + GrSurfaceProxy* dstProxy = this->target(0).proxy(); GrSurfaceProxy* srcProxy = fSrcView.proxy(); if (!srcProxy->isInstantiated() || !dstProxy->isInstantiated()) { return false; diff --git a/src/gpu/GrCopyRenderTask.h b/src/gpu/GrCopyRenderTask.h index a9c79ea43c74d..4ecd3c7f1dccd 100644 --- a/src/gpu/GrCopyRenderTask.h +++ b/src/gpu/GrCopyRenderTask.h @@ -12,21 +12,21 @@ class GrCopyRenderTask final : public GrRenderTask { public: - static sk_sp Make(GrSurfaceProxyView srcView, + static sk_sp Make(GrDrawingManager*, + GrSurfaceProxyView srcView, const SkIRect& srcRect, GrSurfaceProxyView dstView, const SkIPoint& dstPoint, const GrCaps*); private: - GrCopyRenderTask(GrSurfaceProxyView srcView, + GrCopyRenderTask(GrDrawingManager*, + GrSurfaceProxyView srcView, const SkIRect& srcRect, GrSurfaceProxyView dstView, const SkIPoint& dstPoint); bool onIsUsed(GrSurfaceProxy* proxy) const override { - // This case should be handled by GrRenderTask. - SkASSERT(proxy != fTargetView.proxy()); return proxy == fSrcView.proxy(); } // If instantiation failed, at flush time we simply will skip doing the copy. diff --git a/src/gpu/GrDDLContext.cpp b/src/gpu/GrDDLContext.cpp index 159d99d77ae14..20b844dd07636 100644 --- a/src/gpu/GrDDLContext.cpp +++ b/src/gpu/GrDDLContext.cpp @@ -37,14 +37,14 @@ class GrDDLContext final : public GrContext { } void freeGpuResources() override { - SkASSERT(0); // freeing resources in a DDL Recorder doesn't make a whole lot of sense - INHERITED::freeGpuResources(); + // freeing resources in a DDL Recorder doesn't make a whole lot of sense but some of + // our tests do it anyways } private: // TODO: Here we're pretending this isn't derived from GrContext. Switch this to be derived from // GrRecordingContext! - GrContext* asDirectContext() override { return nullptr; } + GrDirectContext* asDirectContext() override { return nullptr; } bool init() override { if (!INHERITED::init()) { @@ -71,10 +71,10 @@ class GrDDLContext final : public GrContext { const GrCaps* caps = this->caps(); - if (this->backend() == GrBackendApi::kVulkan || - this->backend() == GrBackendApi::kMetal || + if (this->backend() == GrBackendApi::kMetal || + this->backend() == GrBackendApi::kDirect3D || this->backend() == GrBackendApi::kDawn) { - // Currently, Vulkan, Metal and Dawn require a live renderTarget to + // Currently Metal, Direct3D, and Dawn require a live renderTarget to // compute the key return; } diff --git a/src/gpu/GrDataUtils.cpp b/src/gpu/GrDataUtils.cpp index 7e6a6c734eb6b..19ab50d43a6cb 100644 --- a/src/gpu/GrDataUtils.cpp +++ b/src/gpu/GrDataUtils.cpp @@ -332,6 +332,10 @@ static GrSwizzle get_load_and_src_swizzle(GrColorType ct, SkRasterPipeline::Stoc case GrColorType::kAlpha_16: *load = SkRasterPipeline::load_a16; break; case GrColorType::kBGR_565: *load = SkRasterPipeline::load_565; break; case GrColorType::kABGR_4444: *load = SkRasterPipeline::load_4444; break; + case GrColorType::kARGB_4444: swizzle = GrSwizzle("bgra"); + *load = SkRasterPipeline::load_4444; break; + case GrColorType::kBGRA_4444: swizzle = GrSwizzle("gbar"); + *load = SkRasterPipeline::load_4444; break; case GrColorType::kRGBA_8888: *load = SkRasterPipeline::load_8888; break; case GrColorType::kRG_88: *load = SkRasterPipeline::load_rg88; break; case GrColorType::kRGBA_1010102: *load = SkRasterPipeline::load_1010102; break; @@ -397,6 +401,10 @@ static GrSwizzle get_dst_swizzle_and_store(GrColorType ct, SkRasterPipeline::Sto case GrColorType::kAlpha_16: *store = SkRasterPipeline::store_a16; break; case GrColorType::kBGR_565: *store = SkRasterPipeline::store_565; break; case GrColorType::kABGR_4444: *store = SkRasterPipeline::store_4444; break; + case GrColorType::kARGB_4444: swizzle = GrSwizzle("bgra"); + *store = SkRasterPipeline::store_4444; break; + case GrColorType::kBGRA_4444: swizzle = GrSwizzle("argb"); + *store = SkRasterPipeline::store_4444; break; case GrColorType::kRGBA_8888: *store = SkRasterPipeline::store_8888; break; case GrColorType::kRG_88: *store = SkRasterPipeline::store_rg88; break; case GrColorType::kRGBA_1010102: *store = SkRasterPipeline::store_1010102; break; diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp index 4f93238d1ae39..c3ef6935b6b34 100644 --- a/src/gpu/GrDefaultGeoProcFactory.cpp +++ b/src/gpu/GrDefaultGeoProcFactory.cpp @@ -57,6 +57,7 @@ class DefaultGeoProc : public GrGeometryProcessor { public: GLSLProcessor() : fViewMatrix(SkMatrix::InvalidMatrix()) + , fLocalMatrix(SkMatrix::InvalidMatrix()) , fColor(SK_PMColor4fILLEGAL) , fCoverage(0xff) {} @@ -111,14 +112,14 @@ class DefaultGeoProc : public GrGeometryProcessor { &fViewMatrixUniform); // emit transforms using either explicit local coords or positions - const auto& coordsAttr = gp.fInLocalCoords.isInitialized() ? gp.fInLocalCoords - : gp.fInPosition; - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - coordsAttr.asShaderVar(), - gp.localMatrix(), - args.fFPCoordTransformHandler); + if (gp.fInLocalCoords.isInitialized()) { + SkASSERT(gp.localMatrix().isIdentity()); + gpArgs->fLocalCoordVar = gp.fInLocalCoords.asShaderVar(); + } else if (gp.fLocalCoordsWillBeRead) { + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, + gp.fInPosition.asShaderVar(), gp.localMatrix(), + &fLocalMatrixUniform); + } // Setup coverage as pass through if (gp.hasVertexCoverage() && !tweakAlpha) { @@ -144,22 +145,21 @@ class DefaultGeoProc : public GrGeometryProcessor { const DefaultGeoProc& def = gp.cast(); uint32_t key = def.fFlags; key |= (def.coverage() == 0xff) ? 0x80 : 0; - key |= (def.localCoordsWillBeRead() && def.localMatrix().hasPerspective()) ? 0x100 : 0; - key |= ComputePosKey(def.viewMatrix()) << 20; + key |= def.localCoordsWillBeRead() ? 0x100 : 0; + + bool usesLocalMatrix = def.localCoordsWillBeRead() && + !def.fInLocalCoords.isInitialized(); + key = AddMatrixKeys(key, def.viewMatrix(), + usesLocalMatrix ? def.localMatrix() : SkMatrix::I()); b->add32(key); } void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& gp, - const CoordTransformRange& transformRange) override { + const GrPrimitiveProcessor& gp) override { const DefaultGeoProc& dgp = gp.cast(); - if (!dgp.viewMatrix().isIdentity() && - !SkMatrixPriv::CheapEqual(fViewMatrix, dgp.viewMatrix())) - { - fViewMatrix = dgp.viewMatrix(); - pdman.setSkMatrix(fViewMatrixUniform, fViewMatrix); - } + this->setTransform(pdman, fViewMatrixUniform, dgp.viewMatrix(), &fViewMatrix); + this->setTransform(pdman, fLocalMatrixUniform, dgp.localMatrix(), &fLocalMatrix); if (!dgp.hasVertexColor() && dgp.color() != fColor) { pdman.set4fv(fColorUniform, 1, dgp.color().vec()); @@ -170,14 +170,15 @@ class DefaultGeoProc : public GrGeometryProcessor { pdman.set1f(fCoverageUniform, GrNormalizeByteToFloat(dgp.coverage())); fCoverage = dgp.coverage(); } - this->setTransformDataHelper(dgp.fLocalMatrix, pdman, transformRange); } private: SkMatrix fViewMatrix; + SkMatrix fLocalMatrix; SkPMColor4f fColor; uint8_t fCoverage; UniformHandle fViewMatrixUniform; + UniformHandle fLocalMatrixUniform; UniformHandle fColorUniform; UniformHandle fCoverageUniform; diff --git a/src/gpu/GrDirectContext.cpp b/src/gpu/GrDirectContext.cpp new file mode 100644 index 0000000000000..b6cc8afa1f1d3 --- /dev/null +++ b/src/gpu/GrDirectContext.cpp @@ -0,0 +1,281 @@ +/* + * Copyright 2018 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + + +#include "include/gpu/GrDirectContext.h" + +#include "include/gpu/GrContextThreadSafeProxy.h" +#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrContextThreadSafeProxyPriv.h" +#include "src/gpu/GrGpu.h" + +#include "src/gpu/effects/GrSkSLFP.h" +#include "src/gpu/gl/GrGLGpu.h" +#include "src/gpu/mock/GrMockGpu.h" +#include "src/gpu/text/GrAtlasManager.h" +#include "src/gpu/text/GrStrikeCache.h" +#ifdef SK_METAL +#include "src/gpu/mtl/GrMtlTrampoline.h" +#endif +#ifdef SK_VULKAN +#include "src/gpu/vk/GrVkGpu.h" +#endif +#ifdef SK_DIRECT3D +#include "src/gpu/d3d/GrD3DGpu.h" +#endif +#ifdef SK_DAWN +#include "src/gpu/dawn/GrDawnGpu.h" +#endif + +#if GR_TEST_UTILS +# include "include/utils/SkRandom.h" +# if defined(SK_ENABLE_SCOPED_LSAN_SUPPRESSIONS) +# include +# endif +#endif + +#ifdef SK_DISABLE_REDUCE_OPLIST_SPLITTING +static const bool kDefaultReduceOpsTaskSplitting = false; +#else +static const bool kDefaultReduceOpsTaskSplitting = false; +#endif + +GrDirectContext::GrDirectContext(GrBackendApi backend, const GrContextOptions& options) + : INHERITED(GrContextThreadSafeProxyPriv::Make(backend, options)) + , fAtlasManager(nullptr) { +} + +GrDirectContext::~GrDirectContext() { + // this if-test protects against the case where the context is being destroyed + // before having been fully created + if (this->priv().getGpu()) { + this->flushAndSubmit(); + } + + delete fAtlasManager; +} + +void GrDirectContext::abandonContext() { + INHERITED::abandonContext(); + fAtlasManager->freeAll(); +} + +void GrDirectContext::releaseResourcesAndAbandonContext() { + INHERITED::releaseResourcesAndAbandonContext(); + fAtlasManager->freeAll(); +} + +void GrDirectContext::freeGpuResources() { + this->flushAndSubmit(); + fAtlasManager->freeAll(); + + INHERITED::freeGpuResources(); +} + +bool GrDirectContext::init() { + const GrGpu* gpu = this->priv().getGpu(); + if (!gpu) { + return false; + } + + fThreadSafeProxy->priv().init(gpu->refCaps()); + if (!INHERITED::init()) { + return false; + } + + bool reduceOpsTaskSplitting = kDefaultReduceOpsTaskSplitting; + if (GrContextOptions::Enable::kNo == this->options().fReduceOpsTaskSplitting) { + reduceOpsTaskSplitting = false; + } else if (GrContextOptions::Enable::kYes == this->options().fReduceOpsTaskSplitting) { + reduceOpsTaskSplitting = true; + } + + this->setupDrawingManager(true, reduceOpsTaskSplitting); + + GrDrawOpAtlas::AllowMultitexturing allowMultitexturing; + if (GrContextOptions::Enable::kNo == this->options().fAllowMultipleGlyphCacheTextures || + // multitexturing supported only if range can represent the index + texcoords fully + !(this->caps()->shaderCaps()->floatIs32Bits() || + this->caps()->shaderCaps()->integerSupport())) { + allowMultitexturing = GrDrawOpAtlas::AllowMultitexturing::kNo; + } else { + allowMultitexturing = GrDrawOpAtlas::AllowMultitexturing::kYes; + } + + GrProxyProvider* proxyProvider = this->priv().proxyProvider(); + + fAtlasManager = new GrAtlasManager(proxyProvider, + this->options().fGlyphCacheTextureMaximumBytes, + allowMultitexturing); + this->priv().addOnFlushCallbackObject(fAtlasManager); + + return true; +} + +#ifdef SK_GL +sk_sp GrContext::MakeGL(sk_sp glInterface) { + GrContextOptions defaultOptions; + return MakeGL(std::move(glInterface), defaultOptions); +} + +sk_sp GrContext::MakeGL(const GrContextOptions& options) { + return MakeGL(nullptr, options); +} + +sk_sp GrContext::MakeGL() { + GrContextOptions defaultOptions; + return MakeGL(nullptr, defaultOptions); +} + +#if GR_TEST_UTILS +GrGLFunction make_get_error_with_random_oom(GrGLFunction original) { + // A SkRandom and a GrGLFunction are too big to be captured by a + // GrGLFunction (surprise, surprise). So we make a context object and + // capture that by pointer. However, GrGLFunction doesn't support calling a destructor + // on the thing it captures. So we leak the context. + struct GetErrorContext { + SkRandom fRandom; + GrGLFunction fGetError; + }; + + auto errorContext = new GetErrorContext; + +#if defined(SK_ENABLE_SCOPED_LSAN_SUPPRESSIONS) + __lsan_ignore_object(errorContext); +#endif + + errorContext->fGetError = original; + + return GrGLFunction([errorContext]() { + GrGLenum error = errorContext->fGetError(); + if (error == GR_GL_NO_ERROR && (errorContext->fRandom.nextU() % 300) == 0) { + error = GR_GL_OUT_OF_MEMORY; + } + return error; + }); +} +#endif + +sk_sp GrContext::MakeGL(sk_sp glInterface, + const GrContextOptions& options) { + sk_sp context(new GrDirectContext(GrBackendApi::kOpenGL, options)); +#if GR_TEST_UTILS + if (options.fRandomGLOOM) { + auto copy = sk_make_sp(*glInterface); + copy->fFunctions.fGetError = + make_get_error_with_random_oom(glInterface->fFunctions.fGetError); +#if GR_GL_CHECK_ERROR + // Suppress logging GL errors since we'll be synthetically generating them. + copy->suppressErrorLogging(); +#endif + glInterface = std::move(copy); + } +#endif + context->fGpu = GrGLGpu::Make(std::move(glInterface), options, context.get()); + if (!context->init()) { + return nullptr; + } + return context; +} +#endif + +sk_sp GrContext::MakeMock(const GrMockOptions* mockOptions) { + GrContextOptions defaultOptions; + return MakeMock(mockOptions, defaultOptions); +} + +sk_sp GrContext::MakeMock(const GrMockOptions* mockOptions, + const GrContextOptions& options) { + sk_sp context(new GrDirectContext(GrBackendApi::kMock, options)); + + context->fGpu = GrMockGpu::Make(mockOptions, options, context.get()); + if (!context->init()) { + return nullptr; + } + + return context; +} + +sk_sp GrContext::MakeVulkan(const GrVkBackendContext& backendContext) { +#ifdef SK_VULKAN + GrContextOptions defaultOptions; + return MakeVulkan(backendContext, defaultOptions); +#else + return nullptr; +#endif +} + +sk_sp GrContext::MakeVulkan(const GrVkBackendContext& backendContext, + const GrContextOptions& options) { +#ifdef SK_VULKAN + sk_sp context(new GrDirectContext(GrBackendApi::kVulkan, options)); + + context->fGpu = GrVkGpu::Make(backendContext, options, context.get()); + if (!context->init()) { + return nullptr; + } + + return context; +#else + return nullptr; +#endif +} + +#ifdef SK_METAL +sk_sp GrContext::MakeMetal(void* device, void* queue) { + GrContextOptions defaultOptions; + return MakeMetal(device, queue, defaultOptions); +} + +sk_sp GrContext::MakeMetal(void* device, void* queue, const GrContextOptions& options) { + sk_sp context(new GrDirectContext(GrBackendApi::kMetal, options)); + + context->fGpu = GrMtlTrampoline::MakeGpu(context.get(), options, device, queue); + if (!context->init()) { + return nullptr; + } + + return context; +} +#endif + +#ifdef SK_DIRECT3D +sk_sp GrContext::MakeDirect3D(const GrD3DBackendContext& backendContext) { + GrContextOptions defaultOptions; + return MakeDirect3D(backendContext, defaultOptions); +} + +sk_sp GrContext::MakeDirect3D(const GrD3DBackendContext& backendContext, + const GrContextOptions& options) { + sk_sp context(new GrDirectContext(GrBackendApi::kDirect3D, options)); + + context->fGpu = GrD3DGpu::Make(backendContext, options, context.get()); + if (!context->init()) { + return nullptr; + } + + return context; +} +#endif + +#ifdef SK_DAWN +sk_sp GrContext::MakeDawn(const wgpu::Device& device) { + GrContextOptions defaultOptions; + return MakeDawn(device, defaultOptions); +} + +sk_sp GrContext::MakeDawn(const wgpu::Device& device, const GrContextOptions& options) { + sk_sp context(new GrDirectContext(GrBackendApi::kDawn, options)); + + context->fGpu = GrDawnGpu::Make(device, options, context.get()); + if (!context->init()) { + return nullptr; + } + + return context; +} +#endif diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp index d96d3cfd5b007..e28d5c9f0296f 100644 --- a/src/gpu/GrDrawingManager.cpp +++ b/src/gpu/GrDrawingManager.cpp @@ -9,7 +9,9 @@ #include "include/core/SkDeferredDisplayList.h" #include "include/gpu/GrBackendSemaphore.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" +#include "src/core/SkDeferredDisplayListPriv.h" #include "src/core/SkTTopoSort.h" #include "src/gpu/GrAuditTrail.h" #include "src/gpu/GrClientMappedBufferManager.h" @@ -34,9 +36,10 @@ #include "src/gpu/GrTextureResolveRenderTask.h" #include "src/gpu/GrTracing.h" #include "src/gpu/GrTransferFromRenderTask.h" +#include "src/gpu/GrUnrefDDLTask.h" #include "src/gpu/GrWaitRenderTask.h" #include "src/gpu/ccpr/GrCoverageCountingPathRenderer.h" -#include "src/gpu/text/GrTextContext.h" +#include "src/gpu/text/GrSDFTOptions.h" #include "src/image/SkSurface_Gpu.h" GrDrawingManager::RenderTaskDAG::RenderTaskDAG(bool sortRenderTasks) @@ -57,27 +60,15 @@ void GrDrawingManager::RenderTaskDAG::reset() { fRenderTasks.reset(); } -void GrDrawingManager::RenderTaskDAG::removeRenderTask(int index) { - if (!fRenderTasks[index]->unique()) { - // TODO: Eventually this should be guaranteed unique: http://skbug.com/7111 - fRenderTasks[index]->endFlush(); - } - - fRenderTasks[index] = nullptr; -} - -void GrDrawingManager::RenderTaskDAG::removeRenderTasks(int startIndex, int stopIndex) { +void GrDrawingManager::RenderTaskDAG::rawRemoveRenderTasks(int startIndex, int stopIndex) { for (int i = startIndex; i < stopIndex; ++i) { - if (!fRenderTasks[i]) { - continue; - } - this->removeRenderTask(i); + fRenderTasks[i] = nullptr; } } bool GrDrawingManager::RenderTaskDAG::isUsed(GrSurfaceProxy* proxy) const { - for (int i = 0; i < fRenderTasks.count(); ++i) { - if (fRenderTasks[i] && fRenderTasks[i]->isUsed(proxy)) { + for (const auto& task : fRenderTasks) { + if (task && task->isUsed(proxy)) { return true; } } @@ -134,7 +125,7 @@ void GrDrawingManager::RenderTaskDAG::prepForFlush() { GrOpsTask* curOpsTask = fRenderTasks[i]->asOpsTask(); if (prevOpsTask && curOpsTask) { - SkASSERT(prevOpsTask->fTargetView != curOpsTask->fTargetView); + SkASSERT(prevOpsTask->target(0).proxy() != curOpsTask->target(0).proxy()); } prevOpsTask = curOpsTask; @@ -144,67 +135,33 @@ void GrDrawingManager::RenderTaskDAG::prepForFlush() { } void GrDrawingManager::RenderTaskDAG::closeAll(const GrCaps* caps) { - for (int i = 0; i < fRenderTasks.count(); ++i) { - if (fRenderTasks[i]) { - fRenderTasks[i]->makeClosed(*caps); + for (auto& task : fRenderTasks) { + if (task) { + task->makeClosed(*caps); } } } -void GrDrawingManager::RenderTaskDAG::cleanup(const GrCaps* caps) { - for (int i = 0; i < fRenderTasks.count(); ++i) { - if (!fRenderTasks[i]) { - continue; - } - - // no renderTask should receive a dependency - fRenderTasks[i]->makeClosed(*caps); - - // We shouldn't need to do this, but it turns out some clients still hold onto opsTasks - // after a cleanup. - // MDB TODO: is this still true? - if (!fRenderTasks[i]->unique()) { - // TODO: Eventually this should be guaranteed unique. - // https://bugs.chromium.org/p/skia/issues/detail?id=7111 - fRenderTasks[i]->endFlush(); - } - } - - fRenderTasks.reset(); -} - /////////////////////////////////////////////////////////////////////////////////////////////////// GrDrawingManager::GrDrawingManager(GrRecordingContext* context, const GrPathRendererChain::Options& optionsForPathRendererChain, - const GrTextContext::Options& optionsForTextContext, bool sortRenderTasks, bool reduceOpsTaskSplitting) : fContext(context) , fOptionsForPathRendererChain(optionsForPathRendererChain) - , fOptionsForTextContext(optionsForTextContext) , fDAG(sortRenderTasks) - , fTextContext(nullptr) , fPathRendererChain(nullptr) , fSoftwarePathRenderer(nullptr) , fFlushing(false) - , fReduceOpsTaskSplitting(reduceOpsTaskSplitting) { -} - -void GrDrawingManager::cleanup() { - fDAG.cleanup(fContext->priv().caps()); - - fPathRendererChain = nullptr; - fSoftwarePathRenderer = nullptr; - - fOnFlushCBObjects.reset(); -} + , fReduceOpsTaskSplitting(reduceOpsTaskSplitting) { } GrDrawingManager::~GrDrawingManager() { - this->cleanup(); + fDAG.closeAll(fContext->priv().caps()); + this->removeRenderTasks(0, fDAG.numRenderTasks()); } bool GrDrawingManager::wasAbandoned() const { - return fContext->priv().abandoned(); + return fContext->abandoned(); } void GrDrawingManager::freeGpuResources() { @@ -221,9 +178,12 @@ void GrDrawingManager::freeGpuResources() { } // MDB TODO: make use of the 'proxy' parameter. -bool GrDrawingManager::flush(GrSurfaceProxy* proxies[], int numProxies, - SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, - const GrPrepareForExternalIORequests& externalRequests) { +bool GrDrawingManager::flush( + GrSurfaceProxy* proxies[], + int numProxies, + SkSurface::BackendSurfaceAccess access, + const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState) { SkASSERT(numProxies >= 0); SkASSERT(!numProxies || proxies); GR_CREATE_TRACE_MARKER_CONTEXT("GrDrawingManager", "flush", fContext); @@ -240,9 +200,8 @@ bool GrDrawingManager::flush(GrSurfaceProxy* proxies[], int numProxies, SkDEBUGCODE(this->validate()); - if (kNone_GrFlushFlags == info.fFlags && !info.fNumSemaphores && !info.fFinishedProc && - access == SkSurface::BackendSurfaceAccess::kNoAccess && - !externalRequests.hasRequests()) { + if (!info.fNumSemaphores && !info.fFinishedProc && + access == SkSurface::BackendSurfaceAccess::kNoAccess && !newState) { bool canSkip = numProxies > 0; for (int i = 0; i < numProxies && canSkip; ++i) { canSkip = !fDAG.isUsed(proxies[i]) && !this->isDDLTarget(proxies[i]); @@ -255,7 +214,7 @@ bool GrDrawingManager::flush(GrSurfaceProxy* proxies[], int numProxies, } } - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { if (info.fSubmittedProc) { info.fSubmittedProc(info.fSubmittedContext, false); @@ -295,8 +254,6 @@ bool GrDrawingManager::flush(GrSurfaceProxy* proxies[], int numProxies, GrOpFlushState flushState(gpu, resourceProvider, &fTokenTracker, fCpuBufferCache); GrOnFlushResourceProvider onFlushProvider(this); - // TODO: AFAICT the only reason fFlushState is on GrDrawingManager rather than on the - // stack here is to preserve the flush tokens. // Prepare any onFlush op lists (e.g. atlases). if (!fOnFlushCBObjects.empty()) { @@ -371,6 +328,7 @@ bool GrDrawingManager::flush(GrSurfaceProxy* proxies[], int numProxies, } renderTask->handleInternalAllocationFailure(); } + this->removeRenderTasks(startIndex, stopIndex); } if (this->executeRenderTasks( @@ -382,12 +340,12 @@ bool GrDrawingManager::flush(GrSurfaceProxy* proxies[], int numProxies, #ifdef SK_DEBUG for (int i = 0; i < fDAG.numRenderTasks(); ++i) { - // If there are any remaining opsTaskss at this point, make sure they will not survive the - // flush. Otherwise we need to call endFlush() on them. - // http://skbug.com/7111 - SkASSERT(!fDAG.renderTask(i) || fDAG.renderTask(i)->unique()); + // All render tasks should have been cleared out by now – we only reset the array below to + // reclaim storage. + SkASSERT(!fDAG.renderTask(i)); } #endif + fLastRenderTasks.reset(); fDAG.reset(); this->clearDDLTargets(); @@ -400,7 +358,7 @@ bool GrDrawingManager::flush(GrSurfaceProxy* proxies[], int numProxies, opMemoryPool->isEmpty(); #endif - gpu->executeFlushInfo(proxies, numProxies, access, info, externalRequests); + gpu->executeFlushInfo(proxies, numProxies, access, info, newState); // Give the cache a chance to purge resources that become purgeable due to flushing. if (flushed) { @@ -426,7 +384,7 @@ bool GrDrawingManager::submitToGpu(bool syncToCpu) { return false; } - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { return false; // Can't submit while DDL recording } @@ -477,6 +435,7 @@ bool GrDrawingManager::executeRenderTasks(int startIndex, int stopIndex, GrOpFlu SkDebugf("WARNING: onFlushRenderTask failed to execute.\n"); } SkASSERT(onFlushRenderTask->unique()); + onFlushRenderTask->disown(this); onFlushRenderTask = nullptr; (*numRenderTasksExecuted)++; if (*numRenderTasksExecuted >= kMaxRenderTasksBeforeFlush) { @@ -511,14 +470,63 @@ bool GrDrawingManager::executeRenderTasks(int startIndex, int stopIndex, GrOpFlu // resources are the last to be purged by the resource cache. flushState->reset(); - fDAG.removeRenderTasks(startIndex, stopIndex); + this->removeRenderTasks(startIndex, stopIndex); return anyRenderTasksExecuted; } -GrSemaphoresSubmitted GrDrawingManager::flushSurfaces(GrSurfaceProxy* proxies[], int numProxies, - SkSurface::BackendSurfaceAccess access, - const GrFlushInfo& info) { +void GrDrawingManager::removeRenderTasks(int startIndex, int stopIndex) { + for (int i = startIndex; i < stopIndex; ++i) { + GrRenderTask* task = fDAG.renderTask(i); + if (!task) { + continue; + } + if (!task->unique()) { + // TODO: Eventually this should be guaranteed unique: http://skbug.com/7111 + task->endFlush(this); + } + task->disown(this); + } + fDAG.rawRemoveRenderTasks(startIndex, stopIndex); +} + +static void resolve_and_mipmap(GrGpu* gpu, GrSurfaceProxy* proxy) { + if (!proxy->isInstantiated()) { + return; + } + + // In the flushSurfaces case, we need to resolve MSAA immediately after flush. This is + // because clients expect the flushed surface's backing texture to be fully resolved + // upon return. + if (proxy->requiresManualMSAAResolve()) { + auto* rtProxy = proxy->asRenderTargetProxy(); + SkASSERT(rtProxy); + if (rtProxy->isMSAADirty()) { + SkASSERT(rtProxy->peekRenderTarget()); + gpu->resolveRenderTarget(rtProxy->peekRenderTarget(), rtProxy->msaaDirtyRect(), + GrGpu::ForExternalIO::kYes); + rtProxy->markMSAAResolved(); + } + } + // If, after a flush, any of the proxies of interest have dirty mipmaps, regenerate them in + // case their backend textures are being stolen. + // (This special case is exercised by the ReimportImageTextureWithMipLevels test.) + // FIXME: It may be more ideal to plumb down a "we're going to steal the backends" flag. + if (auto* textureProxy = proxy->asTextureProxy()) { + if (textureProxy->mipMapsAreDirty()) { + SkASSERT(textureProxy->peekTexture()); + gpu->regenerateMipMapLevels(textureProxy->peekTexture()); + textureProxy->markMipMapsClean(); + } + } +} + +GrSemaphoresSubmitted GrDrawingManager::flushSurfaces( + GrSurfaceProxy* proxies[], + int numProxies, + SkSurface::BackendSurfaceAccess access, + const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState) { if (this->wasAbandoned()) { if (info.fSubmittedProc) { info.fSubmittedProc(info.fSubmittedContext, false); @@ -532,7 +540,7 @@ GrSemaphoresSubmitted GrDrawingManager::flushSurfaces(GrSurfaceProxy* proxies[], SkASSERT(numProxies >= 0); SkASSERT(!numProxies || proxies); - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { if (info.fSubmittedProc) { info.fSubmittedProc(info.fSubmittedContext, false); @@ -550,38 +558,9 @@ GrSemaphoresSubmitted GrDrawingManager::flushSurfaces(GrSurfaceProxy* proxies[], // TODO: It is important to upgrade the drawingmanager to just flushing the // portion of the DAG required by 'proxies' in order to restore some of the // semantics of this method. - bool didFlush = this->flush(proxies, numProxies, access, info, - GrPrepareForExternalIORequests()); + bool didFlush = this->flush(proxies, numProxies, access, info, newState); for (int i = 0; i < numProxies; ++i) { - GrSurfaceProxy* proxy = proxies[i]; - if (!proxy->isInstantiated()) { - continue; - } - // In the flushSurfaces case, we need to resolve MSAA immediately after flush. This is - // because the client will call through to this method when drawing into a target created by - // wrapBackendTextureAsRenderTarget, and will expect the original texture to be fully - // resolved upon return. - if (proxy->requiresManualMSAAResolve()) { - auto* rtProxy = proxy->asRenderTargetProxy(); - SkASSERT(rtProxy); - if (rtProxy->isMSAADirty()) { - SkASSERT(rtProxy->peekRenderTarget()); - gpu->resolveRenderTarget(rtProxy->peekRenderTarget(), rtProxy->msaaDirtyRect(), - GrGpu::ForExternalIO::kYes); - rtProxy->markMSAAResolved(); - } - } - // If, after a flush, any of the proxies of interest have dirty mipmaps, regenerate them in - // case their backend textures are being stolen. - // (This special case is exercised by the ReimportImageTextureWithMipLevels test.) - // FIXME: It may be more ideal to plumb down a "we're going to steal the backends" flag. - if (auto* textureProxy = proxy->asTextureProxy()) { - if (textureProxy->mipMapsAreDirty()) { - SkASSERT(textureProxy->peekTexture()); - gpu->regenerateMipMapLevels(textureProxy->peekTexture()); - textureProxy->markMipMapsClean(); - } - } + resolve_and_mipmap(gpu, proxies[i]); } SkDEBUGCODE(this->validate()); @@ -605,6 +584,31 @@ void GrDrawingManager::testingOnly_removeOnFlushCallbackObject(GrOnFlushCallback } #endif +void GrDrawingManager::setLastRenderTask(const GrSurfaceProxy* proxy, GrRenderTask* task) { +#ifdef SK_DEBUG + if (GrRenderTask* prior = this->getLastRenderTask(proxy)) { + SkASSERT(prior->isClosed()); + } +#endif + uint32_t key = proxy->uniqueID().asUInt(); + if (task) { + fLastRenderTasks.set(key, task); + } else if (fLastRenderTasks.find(key)) { + fLastRenderTasks.remove(key); + } +} + +GrRenderTask* GrDrawingManager::getLastRenderTask(const GrSurfaceProxy* proxy) const { + auto entry = fLastRenderTasks.find(proxy->uniqueID().asUInt()); + return entry ? *entry : nullptr; +} + +GrOpsTask* GrDrawingManager::getLastOpsTask(const GrSurfaceProxy* proxy) const { + GrRenderTask* task = this->getLastRenderTask(proxy); + return task ? task->asOpsTask() : nullptr; +} + + void GrDrawingManager::moveRenderTasksToDDL(SkDeferredDisplayList* ddl) { SkDEBUGCODE(this->validate()); @@ -616,6 +620,7 @@ void GrDrawingManager::moveRenderTasksToDDL(SkDeferredDisplayList* ddl) { SkASSERT(!fDAG.numRenderTasks()); for (auto& renderTask : ddl->fRenderTasks) { + renderTask->disown(this); renderTask->prePrepare(fContext); } @@ -632,7 +637,7 @@ void GrDrawingManager::moveRenderTasksToDDL(SkDeferredDisplayList* ddl) { SkDEBUGCODE(this->validate()); } -void GrDrawingManager::copyRenderTasksFromDDL(const SkDeferredDisplayList* ddl, +void GrDrawingManager::copyRenderTasksFromDDL(sk_sp ddl, GrRenderTargetProxy* newDest) { SkDEBUGCODE(this->validate()); @@ -645,7 +650,17 @@ void GrDrawingManager::copyRenderTasksFromDDL(const SkDeferredDisplayList* ddl, fActiveOpsTask = nullptr; } - this->addDDLTarget(newDest); + // Propagate the DDL proxy's state information to the replaying DDL. + if (ddl->priv().targetProxy()->isMSAADirty()) { + newDest->markMSAADirty(ddl->priv().targetProxy()->msaaDirtyRect(), + ddl->characterization().origin()); + } + GrTextureProxy* newTextureProxy = newDest->asTextureProxy(); + if (newTextureProxy && GrMipMapped::kYes == newTextureProxy->mipMapped()) { + newTextureProxy->markMipMapsDirty(); + } + + this->addDDLTarget(newDest, ddl->priv().targetProxy()); // Here we jam the proxy that backs the current replay SkSurface into the LazyProxyData. // The lazy proxy that references it (in the copied opsTasks) will steal its GrTexture. @@ -659,6 +674,10 @@ void GrDrawingManager::copyRenderTasksFromDDL(const SkDeferredDisplayList* ddl, fDAG.add(ddl->fRenderTasks); + // Add a task to unref the DDL after flush. + GrRenderTask* unrefTask = fDAG.add(sk_make_sp(std::move(ddl))); + unrefTask->makeClosed(*fContext->priv().caps()); + SkDEBUGCODE(this->validate()); } @@ -697,7 +716,7 @@ void GrDrawingManager::closeRenderTasksForNewRenderTask(GrSurfaceProxy* target) // split in case they use both the old and new content. (This is a bit of an overkill: they // really only need to be split if they ever reference proxy's contents again but that is // hard to predict/handle). - if (GrRenderTask* lastRenderTask = target->getLastRenderTask()) { + if (GrRenderTask* lastRenderTask = this->getLastRenderTask(target)) { lastRenderTask->closeThoseWhoDependOnMe(*fContext->priv().caps()); } } else if (fActiveOpsTask) { @@ -718,10 +737,10 @@ sk_sp GrDrawingManager::newOpsTask(GrSurfaceProxyView surfaceView, GrSurfaceProxy* proxy = surfaceView.proxy(); this->closeRenderTasksForNewRenderTask(proxy); - sk_sp opsTask(new GrOpsTask(fContext->priv().arenas(), + sk_sp opsTask(new GrOpsTask(this, fContext->priv().arenas(), std::move(surfaceView), fContext->priv().auditTrail())); - SkASSERT(proxy->getLastRenderTask() == opsTask.get()); + SkASSERT(this->getLastRenderTask(proxy) == opsTask.get()); if (managedOpsTask) { fDAG.add(opsTask); @@ -761,7 +780,7 @@ void GrDrawingManager::newWaitRenderTask(sk_sp proxy, std::move(semaphores), numSemaphores); if (fReduceOpsTaskSplitting) { - GrRenderTask* lastTask = proxy->getLastRenderTask(); + GrRenderTask* lastTask = this->getLastRenderTask(proxy.get()); if (lastTask && !lastTask->isClosed()) { // We directly make the currently open renderTask depend on waitTask instead of using // the proxy version of addDependency. The waitTask will never need to trigger any @@ -785,12 +804,12 @@ void GrDrawingManager::newWaitRenderTask(sk_sp proxy, if (lastTask) { waitTask->addDependency(lastTask); } - proxy->setLastRenderTask(waitTask.get()); + this->setLastRenderTask(proxy.get(), waitTask.get()); } fDAG.add(waitTask); } else { - if (fActiveOpsTask && (fActiveOpsTask->fTargetView.proxy() == proxy.get())) { - SkASSERT(proxy->getLastRenderTask() == fActiveOpsTask); + if (fActiveOpsTask && (fActiveOpsTask->target(0).proxy() == proxy.get())) { + SkASSERT(this->getLastRenderTask(proxy.get()) == fActiveOpsTask); fDAG.addBeforeLast(waitTask); // In this case we keep the current renderTask open but just insert the new waitTask // before it in the list. The waitTask will never need to trigger any resolves or mip @@ -812,10 +831,10 @@ void GrDrawingManager::newWaitRenderTask(sk_sp proxy, // there is a lastTask on the proxy we make waitTask depend on that task. This // dependency isn't strictly needed but it does keep the DAG from reordering the // waitTask earlier and blocking more tasks. - if (GrRenderTask* lastTask = proxy->getLastRenderTask()) { + if (GrRenderTask* lastTask = this->getLastRenderTask(proxy.get())) { waitTask->addDependency(lastTask); } - proxy->setLastRenderTask(waitTask.get()); + this->setLastRenderTask(proxy.get(), waitTask.get()); this->closeRenderTasksForNewRenderTask(proxy.get()); fDAG.add(waitTask); } @@ -837,13 +856,15 @@ void GrDrawingManager::newTransferFromRenderTask(sk_sp srcProxy, this->closeRenderTasksForNewRenderTask(nullptr); GrRenderTask* task = fDAG.add(sk_make_sp( - srcProxy, srcRect, surfaceColorType, dstColorType, std::move(dstBuffer), dstOffset)); + srcProxy, srcRect, surfaceColorType, dstColorType, + std::move(dstBuffer), dstOffset)); const GrCaps& caps = *fContext->priv().caps(); // We always say GrMipMapped::kNo here since we are always just copying from the base layer. We // don't need to make sure the whole mip map chain is valid. - task->addDependency(srcProxy.get(), GrMipMapped::kNo, GrTextureResolveManager(this), caps); + task->addDependency(this, srcProxy.get(), GrMipMapped::kNo, + GrTextureResolveManager(this), caps); task->makeClosed(caps); // We have closed the previous active oplist but since a new oplist isn't being added there @@ -865,7 +886,7 @@ bool GrDrawingManager::newCopyRenderTask(GrSurfaceProxyView srcView, GrSurfaceProxy* srcProxy = srcView.proxy(); GrRenderTask* task = - fDAG.add(GrCopyRenderTask::Make(std::move(srcView), srcRect, std::move(dstView), + fDAG.add(GrCopyRenderTask::Make(this, std::move(srcView), srcRect, std::move(dstView), dstPoint, &caps)); if (!task) { return false; @@ -873,7 +894,7 @@ bool GrDrawingManager::newCopyRenderTask(GrSurfaceProxyView srcView, // We always say GrMipMapped::kNo here since we are always just copying from the base layer to // another base layer. We don't need to make sure the whole mip map chain is valid. - task->addDependency(srcProxy, GrMipMapped::kNo, GrTextureResolveManager(this), caps); + task->addDependency(this, srcProxy, GrMipMapped::kNo, GrTextureResolveManager(this), caps); task->makeClosed(caps); // We have closed the previous active oplist but since a new oplist isn't being added there @@ -883,14 +904,6 @@ bool GrDrawingManager::newCopyRenderTask(GrSurfaceProxyView srcView, return true; } -GrTextContext* GrDrawingManager::getTextContext() { - if (!fTextContext) { - fTextContext = GrTextContext::Make(fOptionsForTextContext); - } - - return fTextContext.get(); -} - /* * This method finds a path renderer that can draw the specified path on * the provided target. @@ -940,7 +953,7 @@ GrCoverageCountingPathRenderer* GrDrawingManager::getCoverageCountingPathRendere } void GrDrawingManager::flushIfNecessary() { - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { return; } @@ -948,7 +961,7 @@ void GrDrawingManager::flushIfNecessary() { auto resourceCache = direct->priv().getResourceCache(); if (resourceCache && resourceCache->requestsFlush()) { if (this->flush(nullptr, 0, SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo(), - GrPrepareForExternalIORequests())) { + nullptr)) { this->submitToGpu(false); } resourceCache->purgeAsNeeded(); diff --git a/src/gpu/GrDrawingManager.h b/src/gpu/GrDrawingManager.h index fcb5466e18fbb..62b3ed3c98e06 100644 --- a/src/gpu/GrDrawingManager.h +++ b/src/gpu/GrDrawingManager.h @@ -8,26 +8,30 @@ #ifndef GrDrawingManager_DEFINED #define GrDrawingManager_DEFINED -#include #include "include/core/SkSurface.h" #include "include/private/SkTArray.h" +#include "include/private/SkTHash.h" #include "src/gpu/GrBufferAllocPool.h" #include "src/gpu/GrDeferredUpload.h" +#include "src/gpu/GrHashMapWithCache.h" #include "src/gpu/GrPathRenderer.h" #include "src/gpu/GrPathRendererChain.h" #include "src/gpu/GrResourceCache.h" -#include "src/gpu/text/GrTextContext.h" +#include "src/gpu/GrSurfaceProxy.h" // Enabling this will print out which path renderers are being chosen #define GR_PATH_RENDERER_SPEW 0 class GrCoverageCountingPathRenderer; +class GrGpuBuffer; class GrOnFlushCallbackObject; class GrOpFlushState; class GrOpsTask; class GrRecordingContext; class GrRenderTargetContext; class GrRenderTargetProxy; +class GrRenderTask; +class GrSemaphore; class GrSoftwarePathRenderer; class GrSurfaceContext; class GrSurfaceProxyView; @@ -78,8 +82,6 @@ class GrDrawingManager { GrRecordingContext* getContext() { return fContext; } - GrTextContext* getTextContext(); - GrPathRenderer* getPathRenderer(const GrPathRenderer::CanDrawPathArgs& args, bool allowSW, GrPathRendererChain::DrawType drawType, @@ -98,11 +100,13 @@ class GrDrawingManager { GrSemaphoresSubmitted flushSurfaces(GrSurfaceProxy* proxies[], int cnt, SkSurface::BackendSurfaceAccess access, - const GrFlushInfo& info); + const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState); GrSemaphoresSubmitted flushSurface(GrSurfaceProxy* proxy, SkSurface::BackendSurfaceAccess access, - const GrFlushInfo& info) { - return this->flushSurfaces(&proxy, 1, access, info); + const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState) { + return this->flushSurfaces(&proxy, 1, access, info, newState); } void addOnFlushCallbackObject(GrOnFlushCallbackObject*); @@ -111,8 +115,12 @@ class GrDrawingManager { void testingOnly_removeOnFlushCallbackObject(GrOnFlushCallbackObject*); #endif + GrRenderTask* getLastRenderTask(const GrSurfaceProxy*) const; + GrOpsTask* getLastOpsTask(const GrSurfaceProxy*) const; + void setLastRenderTask(const GrSurfaceProxy*, GrRenderTask*); + void moveRenderTasksToDDL(SkDeferredDisplayList* ddl); - void copyRenderTasksFromDDL(const SkDeferredDisplayList*, GrRenderTargetProxy* newDest); + void copyRenderTasksFromDDL(sk_sp, GrRenderTargetProxy* newDest); private: // This class encapsulates maintenance and manipulation of the drawing manager's DAG of @@ -129,19 +137,15 @@ class GrDrawingManager { void closeAll(const GrCaps* caps); - // A yucky combination of closeAll and reset - void cleanup(const GrCaps* caps); - void gatherIDs(SkSTArray<8, uint32_t, true>* idArray) const; void reset(); - // These calls forceably remove a GrRenderTask from the DAG. They are problematic bc they - // just remove the GrRenderTask but don't cleanup any refering pointers (i.e., dependency - // pointers in the DAG). They work right now bc they are only called at flush time, after - // the topological sort is complete (so the dangling pointers aren't used). - void removeRenderTask(int index); - void removeRenderTasks(int startIndex, int stopIndex); + // This call forceably removes GrRenderTasks from the DAG. It is problematic bc it + // just removes the GrRenderTasks but doesn't cleanup any referring pointers (i.e. + // dependency pointers in the DAG). It works right now bc it is only called after the + // topological sort is complete (so the dangling pointers aren't used). + void rawRemoveRenderTasks(int startIndex, int stopIndex); bool empty() const { return fRenderTasks.empty(); } int numRenderTasks() const { return fRenderTasks.count(); } @@ -167,15 +171,13 @@ class GrDrawingManager { bool fSortRenderTasks; }; - GrDrawingManager(GrRecordingContext*, const GrPathRendererChain::Options&, - const GrTextContext::Options&, + GrDrawingManager(GrRecordingContext*, + const GrPathRendererChain::Options&, bool sortRenderTasks, bool reduceOpsTaskSplitting); bool wasAbandoned() const; - void cleanup(); - // Closes the target's dependent render tasks (or, if not in sorting/opsTask-splitting-reduction // mode, closes fActiveOpsTask) in preparation for us opening a new opsTask that will write to // 'target'. @@ -185,11 +187,13 @@ class GrDrawingManager { bool executeRenderTasks(int startIndex, int stopIndex, GrOpFlushState*, int* numRenderTasksExecuted); + void removeRenderTasks(int startIndex, int stopIndex); + bool flush(GrSurfaceProxy* proxies[], int numProxies, SkSurface::BackendSurfaceAccess access, const GrFlushInfo&, - const GrPrepareForExternalIORequests&); + const GrBackendSurfaceMutableState* newState); bool submitToGpu(bool syncToCpu); @@ -206,7 +210,7 @@ class GrDrawingManager { GrRecordingContext* fContext; GrPathRendererChain::Options fOptionsForPathRendererChain; - GrTextContext::Options fOptionsForTextContext; + // This cache is used by both the vertex and index pools. It reuses memory across multiple // flushes. sk_sp fCpuBufferCache; @@ -218,8 +222,6 @@ class GrDrawingManager { // These are the new renderTasks generated by the onFlush CBs SkSTArray<4, sk_sp> fOnFlushRenderTasks; - std::unique_ptr fTextContext; - std::unique_ptr fPathRendererChain; sk_sp fSoftwarePathRenderer; @@ -229,15 +231,31 @@ class GrDrawingManager { SkTArray fOnFlushCBObjects; - void addDDLTarget(GrSurfaceProxy* proxy) { fDDLTargets.insert(proxy); } - bool isDDLTarget(GrSurfaceProxy* proxy) { return fDDLTargets.find(proxy) != fDDLTargets.end(); } - void clearDDLTargets() { fDDLTargets.clear(); } + void addDDLTarget(GrSurfaceProxy* newTarget, GrRenderTargetProxy* ddlTarget) { + fDDLTargets.set(newTarget->uniqueID().asUInt(), ddlTarget); + } + bool isDDLTarget(GrSurfaceProxy* newTarget) { + return SkToBool(fDDLTargets.find(newTarget->uniqueID().asUInt())); + } + GrRenderTargetProxy* getDDLTarget(GrSurfaceProxy* newTarget) { + auto entry = fDDLTargets.find(newTarget->uniqueID().asUInt()); + return entry ? *entry : nullptr; + } + void clearDDLTargets() { fDDLTargets.reset(); } // We play a trick with lazy proxies to retarget the base target of a DDL to the SkSurface - // it is replayed on. Because of this remapping we need to explicitly store the targets of - // DDL replaying. + // it is replayed on. 'fDDLTargets' stores this mapping from SkSurface unique proxy ID + // to the DDL's lazy proxy. // Note: we do not expect a whole lot of these per flush - std::set fDDLTargets; + SkTHashMap fDDLTargets; + + struct SurfaceIDKeyTraits { + static uint32_t GetInvalidKey() { + return GrSurfaceProxy::UniqueID::InvalidID().asUInt(); + } + }; + + GrHashMapWithCache fLastRenderTasks; }; #endif diff --git a/src/gpu/GrDynamicAtlas.h b/src/gpu/GrDynamicAtlas.h index 68b2e0e3ca87f..e96ffe8f5907b 100644 --- a/src/gpu/GrDynamicAtlas.h +++ b/src/gpu/GrDynamicAtlas.h @@ -54,6 +54,7 @@ class GrDynamicAtlas { void reset(SkISize initialSize, const GrCaps& desc); + int maxAtlasSize() const { return fMaxAtlasSize; } GrTextureProxy* textureProxy() const { return fTextureProxy.get(); } bool isInstantiated() const { return fTextureProxy->isInstantiated(); } int currentWidth() const { return fWidth; } diff --git a/src/gpu/GrFPArgs.h b/src/gpu/GrFPArgs.h index 3058f8681de17..6b21e32602c0f 100644 --- a/src/gpu/GrFPArgs.h +++ b/src/gpu/GrFPArgs.h @@ -28,7 +28,13 @@ struct GrFPArgs { } class WithPreLocalMatrix; - class WithPostLocalMatrix; + + GrFPArgs withNewMatrixProvider(const SkMatrixProvider& provider) const { + GrFPArgs newArgs(fContext, provider, fFilterQuality, fDstColorInfo); + newArgs.fInputColorIsOpaque = fInputColorIsOpaque; + newArgs.fPreLocalMatrix = fPreLocalMatrix; + return newArgs; + } GrRecordingContext* fContext; const SkMatrixProvider& fMatrixProvider; @@ -65,4 +71,3 @@ class GrFPArgs::WithPreLocalMatrix final : public GrFPArgs { }; #endif - diff --git a/src/gpu/GrFixedClip.cpp b/src/gpu/GrFixedClip.cpp index 2f826fb981c51..928b6809d8169 100644 --- a/src/gpu/GrFixedClip.cpp +++ b/src/gpu/GrFixedClip.cpp @@ -10,56 +10,46 @@ #include "src/gpu/GrAppliedClip.h" #include "src/gpu/GrRenderTargetContext.h" -bool GrFixedClip::quickContains(const SkRect& rect) const { - if (fWindowRectsState.enabled()) { - return false; - } - return !fScissorState.enabled() || GrClip::IsInsideClip(fScissorState.rect(), rect); +SkIRect GrFixedClip::getConservativeBounds() const { + return fScissorState.rect(); } -SkIRect GrFixedClip::getConservativeBounds(int w, int h) const { - SkIRect devResult = this->GrClip::getConservativeBounds(w, h); - if (fScissorState.enabled()) { - if (!devResult.intersect(fScissorState.rect())) { - devResult.setEmpty(); - } +GrClip::PreClipResult GrFixedClip::preApply(const SkRect& drawBounds) const { + if (IsOutsideClip(fScissorState.rect(), drawBounds)) { + return Effect::kClippedOut; } - return devResult; -} -bool GrFixedClip::isRRect(const SkRect& rtBounds, SkRRect* rr, GrAA* aa) const { if (fWindowRectsState.enabled()) { - return false; + return Effect::kClipped; } - if (fScissorState.enabled()) { - SkRect rect = SkRect::Make(fScissorState.rect()); - if (!rect.intersects(rtBounds)) { - return false; - } - rr->setRect(rect); - *aa = GrAA::kNo; - return true; + + if (!fScissorState.enabled() || IsInsideClip(fScissorState.rect(), drawBounds)) { + // Either no scissor or the scissor doesn't clip the draw + return Effect::kUnclipped; + } + // Report the scissor as a degenerate round rect + return {SkRect::Make(fScissorState.rect()), GrAA::kNo}; +} + +GrClip::Effect GrFixedClip::apply(GrAppliedHardClip* out, SkRect* bounds) const { + if (IsOutsideClip(fScissorState.rect(), *bounds)) { + return Effect::kClippedOut; } - return false; -}; -bool GrFixedClip::apply(int rtWidth, int rtHeight, GrAppliedHardClip* out, SkRect* bounds) const { - if (fScissorState.enabled()) { - SkIRect tightScissor = SkIRect::MakeWH(rtWidth, rtHeight); - if (!tightScissor.intersect(fScissorState.rect())) { - return false; - } - if (IsOutsideClip(tightScissor, *bounds)) { - return false; - } - if (!IsInsideClip(fScissorState.rect(), *bounds)) { - out->addScissor(tightScissor, bounds); - } + Effect effect = Effect::kUnclipped; + if (fScissorState.enabled() && !IsInsideClip(fScissorState.rect(), *bounds)) { + SkIRect tightScissor = bounds->roundOut(); + SkAssertResult(tightScissor.intersect(fScissorState.rect())); + out->addScissor(tightScissor, bounds); + effect = Effect::kClipped; } if (fWindowRectsState.enabled()) { out->addWindowRectangles(fWindowRectsState); + // We could iterate each window rectangle to check for intersection, but be conservative + // and report that it's clipped + effect = Effect::kClipped; } - return true; + return effect; } diff --git a/src/gpu/GrFixedClip.h b/src/gpu/GrFixedClip.h index 017c3ff4f0409..383c388bf2d33 100644 --- a/src/gpu/GrFixedClip.h +++ b/src/gpu/GrFixedClip.h @@ -17,17 +17,21 @@ */ class GrFixedClip final : public GrHardClip { public: - GrFixedClip() = default; - explicit GrFixedClip(const SkIRect& scissorRect) : fScissorState(scissorRect) {} + explicit GrFixedClip(const SkISize& rtDims) : fScissorState(rtDims) {} + GrFixedClip(const SkISize& rtDims, const SkIRect& scissorRect) + : GrFixedClip(rtDims) { + SkAssertResult(fScissorState.set(scissorRect)); + } const GrScissorState& scissorState() const { return fScissorState; } bool scissorEnabled() const { return fScissorState.enabled(); } - const SkIRect& scissorRect() const { SkASSERT(scissorEnabled()); return fScissorState.rect(); } + // Returns the scissor rect or rt bounds if the scissor test is not enabled. + const SkIRect& scissorRect() const { return fScissorState.rect(); } void disableScissor() { fScissorState.setDisabled(); } - void setScissor(const SkIRect& irect) { - fScissorState.set(irect); + bool SK_WARN_UNUSED_RESULT setScissor(const SkIRect& irect) { + return fScissorState.set(irect); } bool SK_WARN_UNUSED_RESULT intersect(const SkIRect& irect) { return fScissorState.intersect(irect); @@ -42,10 +46,9 @@ class GrFixedClip final : public GrHardClip { fWindowRectsState.set(windows, mode); } - bool quickContains(const SkRect&) const override; - SkIRect getConservativeBounds(int w, int h) const override; - bool isRRect(const SkRect& rtBounds, SkRRect* rr, GrAA*) const override; - bool apply(int rtWidth, int rtHeight, GrAppliedHardClip*, SkRect*) const override; + SkIRect getConservativeBounds() const final; + Effect apply(GrAppliedHardClip*, SkRect*) const final; + PreClipResult preApply(const SkRect& drawBounds) const final; private: GrScissorState fScissorState; diff --git a/src/gpu/GrFragmentProcessor.cpp b/src/gpu/GrFragmentProcessor.cpp index 5b6633928a554..a37206b5d2308 100644 --- a/src/gpu/GrFragmentProcessor.cpp +++ b/src/gpu/GrFragmentProcessor.cpp @@ -13,7 +13,6 @@ #include "src/gpu/effects/generated/GrClampFragmentProcessor.h" #include "src/gpu/effects/generated/GrConstColorProcessor.h" #include "src/gpu/effects/generated/GrOverrideInputFragmentProcessor.h" -#include "src/gpu/effects/generated/GrPremulInputFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLProgramDataManager.h" @@ -31,7 +30,8 @@ bool GrFragmentProcessor::isEqual(const GrFragmentProcessor& that) const { return false; } } - if (!this->hasSameTransforms(that)) { + if (this->numCoordTransforms() != that.numCoordTransforms()) { + // FPs have either 0 or 1 coord transform, and if they have 1, it's the identity return false; } if (!this->onIsEqual(that)) { @@ -69,41 +69,38 @@ const GrFragmentProcessor::TextureSampler& GrFragmentProcessor::textureSampler(i return this->onTextureSampler(i); } -void GrFragmentProcessor::addCoordTransform(GrCoordTransform* transform) { - fCoordTransforms.push_back(transform); - fFlags |= kHasCoordTransforms_Flag; +int GrFragmentProcessor::numCoordTransforms() const { + if (SkToBool(fFlags & kUsesSampleCoordsDirectly_Flag) && !this->isSampledWithExplicitCoords()) { + // coordTransform(0) will return an implicitly defined coord transform so that varyings are + // added for this FP in order to support uniform sample matrix lifting. + return 1; + } else { + return 0; + } +} + +const GrCoordTransform& GrFragmentProcessor::coordTransform(int i) const { + SkASSERT(i == 0 && SkToBool(fFlags & kUsesSampleCoordsDirectly_Flag) && + !this->isSampledWithExplicitCoords()); + // as things stand, matrices only work when there's a coord transform, so we need to add + // an identity transform to keep the downstream code happy + static const GrCoordTransform kImplicitIdentity; + return kImplicitIdentity; } -void GrFragmentProcessor::setSampleMatrix(SkSL::SampleMatrix newMatrix) { - if (newMatrix == fMatrix) { - return; - } - SkASSERT(newMatrix.fKind != SkSL::SampleMatrix::Kind::kNone); - SkASSERT(fMatrix.fKind != SkSL::SampleMatrix::Kind::kVariable); - if (this->numCoordTransforms() == 0 && - (newMatrix.fKind == SkSL::SampleMatrix::Kind::kConstantOrUniform || - newMatrix.fKind == SkSL::SampleMatrix::Kind::kMixed)) { - // as things stand, matrices only work when there's a coord transform, so we need to add - // an identity transform to keep the downstream code happy - static GrCoordTransform identity; - this->addCoordTransform(&identity); - } - if (fMatrix.fKind == SkSL::SampleMatrix::Kind::kConstantOrUniform) { - if (newMatrix.fKind == SkSL::SampleMatrix::Kind::kConstantOrUniform) { - // need to base this transform on the one that happened in our parent - fMatrix.fBase = newMatrix.fOwner; - } else { - SkASSERT(newMatrix.fKind == SkSL::SampleMatrix::Kind::kVariable); - fMatrix = SkSL::SampleMatrix(SkSL::SampleMatrix::Kind::kMixed, fMatrix.fOwner, - fMatrix.fExpression); +void GrFragmentProcessor::addAndPushFlagToChildren(PrivateFlags flag) { + // This propagates down, so if we've already marked it, all our children should have it too + if (!(fFlags & flag)) { + fFlags |= flag; + for (auto& child : fChildProcessors) { + child->addAndPushFlagToChildren(flag); } - } else { - SkASSERT(fMatrix.fKind == SkSL::SampleMatrix::Kind::kNone); - fMatrix = newMatrix; } +#ifdef SK_DEBUG for (auto& child : fChildProcessors) { - child->setSampleMatrix(newMatrix); + SkASSERT(child->fFlags & flag); } +#endif } #ifdef SK_DEBUG @@ -124,56 +121,90 @@ bool GrFragmentProcessor::isInstantiated() const { } #endif -int GrFragmentProcessor::registerChildProcessor(std::unique_ptr child) { - if (child->fFlags & kHasCoordTransforms_Flag) { - fFlags |= kHasCoordTransforms_Flag; +int GrFragmentProcessor::registerChild(std::unique_ptr child, + SkSL::SampleUsage sampleUsage) { + // The child should not have been attached to another FP already and not had any sampling + // strategy set on it. + SkASSERT(child && !child->fParent && !child->sampleUsage().isSampled() && + !child->isSampledWithExplicitCoords() && !child->hasPerspectiveTransform()); + + // If a child is sampled directly (sample(child)), and with a single uniform matrix, we need to + // treat it as if it were sampled with multiple matrices (eg variable). + bool variableMatrix = sampleUsage.hasVariableMatrix() || + (sampleUsage.fPassThrough && sampleUsage.hasUniformMatrix()); + + // Configure child's sampling state first + child->fUsage = sampleUsage; + + // When an FP is sampled using variable matrix expressions, it is effectively being sampled + // explicitly, except that the call site will automatically evaluate the matrix expression to + // produce the float2 passed into this FP. + if (sampleUsage.fExplicitCoords || variableMatrix) { + child->addAndPushFlagToChildren(kSampledWithExplicitCoords_Flag); + } + + // Push perspective matrix type to children + if (sampleUsage.fHasPerspective) { + child->addAndPushFlagToChildren(kNetTransformHasPerspective_Flag); + } + + // If the child is sampled with a variable matrix expression, auto-generated code in + // invokeChildWithMatrix() for this FP will refer to the local coordinates. + if (variableMatrix) { + this->setUsesSampleCoordsDirectly(); } + + // If the child is not sampled explicitly and not already accessing sample coords directly + // (through reference or variable matrix expansion), then mark that this FP tree relies on + // coordinates at a lower level. If the child is sampled with explicit coordinates and + // there isn't any other direct reference to the sample coords, we halt the upwards propagation + // because it means this FP is determining coordinates on its own. + if (!child->isSampledWithExplicitCoords()) { + if ((child->fFlags & kUsesSampleCoordsDirectly_Flag || + child->fFlags & kUsesSampleCoordsIndirectly_Flag)) { + fFlags |= kUsesSampleCoordsIndirectly_Flag; + } + } + fRequestedFeatures |= child->fRequestedFeatures; int index = fChildProcessors.count(); + // Record that the child is attached to us; this FP is the source of any uniform data needed + // to evaluate the child sample matrix. + child->fParent = this; fChildProcessors.push_back(std::move(child)); - SkASSERT(fMatrix.fKind == SkSL::SampleMatrix::Kind::kNone || - fMatrix.fKind == SkSL::SampleMatrix::Kind::kConstantOrUniform); + + // Sanity check: our sample strategy comes from a parent we shouldn't have yet. + SkASSERT(!this->isSampledWithExplicitCoords() && !this->hasPerspectiveTransform() && + !fUsage.isSampled() && !fParent); return index; } -bool GrFragmentProcessor::hasSameTransforms(const GrFragmentProcessor& that) const { - if (this->numCoordTransforms() != that.numCoordTransforms()) { - return false; - } - int count = this->numCoordTransforms(); - for (int i = 0; i < count; ++i) { - if (!this->coordTransform(i).hasSameEffectiveMatrix(that.coordTransform(i))) { - return false; - } - } - return true; +int GrFragmentProcessor::cloneAndRegisterChildProcessor(const GrFragmentProcessor& fp) { + std::unique_ptr clone = fp.clone(); + return this->registerChild(std::move(clone), fp.sampleUsage()); } -std::unique_ptr GrFragmentProcessor::MulChildByInputAlpha( - std::unique_ptr fp) { - if (!fp) { - return nullptr; +void GrFragmentProcessor::cloneAndRegisterAllChildProcessors(const GrFragmentProcessor& src) { + for (int i = 0; i < src.numChildProcessors(); ++i) { + this->cloneAndRegisterChildProcessor(src.childProcessor(i)); } - return GrXfermodeFragmentProcessor::MakeFromDstProcessor(std::move(fp), SkBlendMode::kDstIn); } -std::unique_ptr GrFragmentProcessor::MulInputByChildAlpha( +std::unique_ptr GrFragmentProcessor::MulChildByInputAlpha( std::unique_ptr fp) { if (!fp) { return nullptr; } - return GrXfermodeFragmentProcessor::MakeFromDstProcessor(std::move(fp), SkBlendMode::kSrcIn); + return GrXfermodeFragmentProcessor::Make(/*src=*/nullptr, std::move(fp), SkBlendMode::kDstIn); } -std::unique_ptr GrFragmentProcessor::PremulInput( +std::unique_ptr GrFragmentProcessor::MulInputByChildAlpha( std::unique_ptr fp) { if (!fp) { return nullptr; } - std::unique_ptr fpPipeline[] = { GrPremulInputFragmentProcessor::Make(), - std::move(fp) }; - return GrFragmentProcessor::RunInSeries(fpPipeline, 2); + return GrXfermodeFragmentProcessor::Make(/*src=*/nullptr, std::move(fp), SkBlendMode::kSrcIn); } std::unique_ptr GrFragmentProcessor::ClampPremulOutput( @@ -181,41 +212,45 @@ std::unique_ptr GrFragmentProcessor::ClampPremulOutput( if (!fp) { return nullptr; } - std::unique_ptr fpPipeline[] = { - std::move(fp), - GrClampFragmentProcessor::Make(true) - }; - return GrFragmentProcessor::RunInSeries(fpPipeline, 2); + return GrClampFragmentProcessor::Make(std::move(fp), /*clampToPremul=*/true); } std::unique_ptr GrFragmentProcessor::SwizzleOutput( std::unique_ptr fp, const GrSwizzle& swizzle) { class SwizzleFragmentProcessor : public GrFragmentProcessor { public: - static std::unique_ptr Make(const GrSwizzle& swizzle) { - return std::unique_ptr(new SwizzleFragmentProcessor(swizzle)); + static std::unique_ptr Make(std::unique_ptr fp, + const GrSwizzle& swizzle) { + return std::unique_ptr( + new SwizzleFragmentProcessor(std::move(fp), swizzle)); } const char* name() const override { return "Swizzle"; } const GrSwizzle& swizzle() const { return fSwizzle; } - std::unique_ptr clone() const override { return Make(fSwizzle); } + std::unique_ptr clone() const override { + return Make(this->childProcessor(0).clone(), fSwizzle); + } private: - SwizzleFragmentProcessor(const GrSwizzle& swizzle) - : INHERITED(kSwizzleFragmentProcessor_ClassID, kAll_OptimizationFlags) - , fSwizzle(swizzle) {} + SwizzleFragmentProcessor(std::unique_ptr fp, const GrSwizzle& swizzle) + : INHERITED(kSwizzleFragmentProcessor_ClassID, ProcessorOptimizationFlags(fp.get())) + , fSwizzle(swizzle) { + this->registerChild(std::move(fp)); + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { class GLFP : public GrGLSLFragmentProcessor { public: void emitCode(EmitArgs& args) override { + SkString childColor = this->invokeChild(0, args.fInputColor, args); + const SwizzleFragmentProcessor& sfp = args.fFp.cast(); const GrSwizzle& swizzle = sfp.swizzle(); GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; fragBuilder->codeAppendf("%s = %s.%s;", - args.fOutputColor, args.fInputColor, swizzle.asString().c_str()); + args.fOutputColor, childColor.c_str(), swizzle.asString().c_str()); } }; return new GLFP; @@ -245,9 +280,7 @@ std::unique_ptr GrFragmentProcessor::SwizzleOutput( if (GrSwizzle::RGBA() == swizzle) { return fp; } - std::unique_ptr fpPipeline[] = { std::move(fp), - SwizzleFragmentProcessor::Make(swizzle) }; - return GrFragmentProcessor::RunInSeries(fpPipeline, 2); + return SwizzleFragmentProcessor::Make(std::move(fp), swizzle); } std::unique_ptr GrFragmentProcessor::MakeInputPremulAndMulByOutput( @@ -269,7 +302,7 @@ std::unique_ptr GrFragmentProcessor::MakeInputPremulAndMulB private: PremulFragmentProcessor(std::unique_ptr processor) : INHERITED(kPremulFragmentProcessor_ClassID, OptFlags(processor.get())) { - this->registerChildProcessor(std::move(processor)); + this->registerChild(std::move(processor)); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { @@ -369,7 +402,7 @@ std::unique_ptr GrFragmentProcessor::RunInSeries( : INHERITED(kSeriesFragmentProcessor_ClassID, OptFlags(children, cnt)) { SkASSERT(cnt > 1); for (int i = 0; i < cnt; ++i) { - this->registerChildProcessor(std::move(children[i])); + this->registerChild(std::move(children[i])); } } @@ -410,8 +443,8 @@ std::unique_ptr GrFragmentProcessor::RunInSeries( SkPMColor4f knownColor; int leadingFPsToEliminate = info.initialProcessorsToEliminate(&knownColor); if (leadingFPsToEliminate) { - std::unique_ptr colorFP( - GrConstColorProcessor::Make(knownColor, GrConstColorProcessor::InputMode::kIgnore)); + std::unique_ptr colorFP = GrConstColorProcessor::Make( + /*inputFP=*/nullptr, knownColor, GrConstColorProcessor::InputMode::kIgnore); if (leadingFPsToEliminate == cnt) { return colorFP; } diff --git a/src/gpu/GrFragmentProcessor.h b/src/gpu/GrFragmentProcessor.h index efc4c9ac78bf6..9fe9291f31dee 100644 --- a/src/gpu/GrFragmentProcessor.h +++ b/src/gpu/GrFragmentProcessor.h @@ -8,11 +8,13 @@ #ifndef GrFragmentProcessor_DEFINED #define GrFragmentProcessor_DEFINED -#include "src/gpu/GrCoordTransform.h" +#include + +#include "include/private/SkSLSampleUsage.h" #include "src/gpu/GrProcessor.h" #include "src/gpu/ops/GrOp.h" -#include "src/sksl/SkSLSampleMatrix.h" +class GrCoordTransform; class GrGLSLFragmentProcessor; class GrPaint; class GrPipeline; @@ -104,6 +106,9 @@ class GrFragmentProcessor : public GrProcessor { */ virtual std::unique_ptr clone() const = 0; + // The FP this was registered with as a child function. This will be null if this is a root. + const GrFragmentProcessor* parent() const { return fParent; } + GrGLSLFragmentProcessor* createGLSLInstance() const; void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const { @@ -116,16 +121,8 @@ class GrFragmentProcessor : public GrProcessor { int numTextureSamplers() const { return fTextureSamplerCnt; } const TextureSampler& textureSampler(int i) const; - int numCoordTransforms() const { return fCoordTransforms.count(); } - - /** Returns the coordinate transformation at index. index must be valid according to - numCoordTransforms(). */ - const GrCoordTransform& coordTransform(int index) const { return *fCoordTransforms[index]; } - GrCoordTransform& coordTransform(int index) { return *fCoordTransforms[index]; } - - const SkTArray& coordTransforms() const { - return fCoordTransforms; - } + int numCoordTransforms() const; + const GrCoordTransform& coordTransform(int index) const; int numChildProcessors() const { return fChildProcessors.count(); } @@ -134,30 +131,51 @@ class GrFragmentProcessor : public GrProcessor { SkDEBUGCODE(bool isInstantiated() const;) - /** Do any of the coord transforms for this processor require local coords? */ - bool usesLocalCoords() const { - // If the processor is sampled with explicit coords then we do not need to apply the - // coord transforms in the vertex shader to the local coords. - return SkToBool(fFlags & kHasCoordTransforms_Flag) && - !SkToBool(fFlags & kSampledWithExplicitCoords); + /** + * Do any of the FPs in this tree require local coordinates to be produced by the primitive + * processor. This can return true even if this FP does not refer to sample coordinates, but + * true if a descendant FP uses them. FPs that are sampled explicitly do not + * require primitive-generated local coordinates. + * + * If the root of an FP tree does not provide explicit coordinates, the geometry processor + * provides the original local coordinates to start. This may be implicit as part of vertex + * shader-lifted varyings, or by providing the base local coordinate to the fragment shader. + */ + bool sampleCoordsDependOnLocalCoords() const { + return (SkToBool(fFlags & kUsesSampleCoordsDirectly_Flag) || + SkToBool(fFlags & kUsesSampleCoordsIndirectly_Flag)) && + !SkToBool(fFlags & kSampledWithExplicitCoords_Flag); } - bool isSampledWithExplicitCoords() const { - return SkToBool(fFlags & kSampledWithExplicitCoords); + /** + * True if this FP refers directly to the sample coordinate parameter of its function + * (e.g. uses EmitArgs::fSampleCoord in emitCode()). This also returns true if the + * coordinate reference comes from autogenerated code invoking 'sample(matrix)' expressions. + * + * Unlike sampleCoordsDependOnLocalCoords(), this can return true whether or not the FP is + * explicitly sampled, and does not change based on how the FP is composed. This property is + * specific to the FP's function and not the entire program. + */ + bool referencesSampleCoords() const { + return SkToBool(fFlags & kUsesSampleCoordsDirectly_Flag); } - void setSampledWithExplicitCoords() { - fFlags |= kSampledWithExplicitCoords; - for (auto& child : fChildProcessors) { - child->setSampledWithExplicitCoords(); - } + // True if this FP's parent invokes it with 'sample(float2)' or a variable 'sample(matrix)' + bool isSampledWithExplicitCoords() const { + return SkToBool(fFlags & kSampledWithExplicitCoords_Flag); } - SkSL::SampleMatrix sampleMatrix() const { - return fMatrix; + // True if the transform chain from root to this FP introduces perspective into the local + // coordinate expression. + bool hasPerspectiveTransform() const { + return SkToBool(fFlags & kNetTransformHasPerspective_Flag); } - void setSampleMatrix(SkSL::SampleMatrix matrix); + // The SampleUsage describing how this FP is invoked by its parent using 'sample(matrix)' + // This only reflects the immediate sampling from parent to this FP + const SkSL::SampleUsage& sampleUsage() const { + return fUsage; + } /** * A GrDrawOp may premultiply its antialiasing coverage into its GrGeometryProcessor's color @@ -290,27 +308,19 @@ class GrFragmentProcessor : public GrProcessor { // Implementation detail for using CoordTransformIter and TextureSamplerIter in range-for loops. template class FPItemRange; - // These allow iteration over coord transforms/texture samplers for various FP sources via - // range-for loops. An example usage for looping over the coord transforms in a pipeline: - // for (auto [transform, fp] : GrFragmentProcessor::PipelineCoordTransformRange(pipeline)) { + // These allow iteration over texture samplers for various FP sources via range-for loops. + // An example usage for looping over the texture samplers in a pipeline: + // for (auto [sampler, fp] : GrFragmentProcessor::PipelineTextureSamplerRange(pipeline)) { // ... // } // Only the combinations of FP sources and iterable things have been defined but it is easy // to add more as they become useful. Maybe someday we'll have template argument deduction // with guides for type aliases and the sources can be removed from the type aliases: // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1021r5.html - using PipelineCoordTransformRange = FPItemRange; using PipelineTextureSamplerRange = FPItemRange; using FPTextureSamplerRange = FPItemRange; using ProcessorSetTextureSamplerRange = FPItemRange; - // Not used directly. - using NonConstCoordTransformIter = - FPItemIter; - // Iterator over non-const GrCoordTransforms owned by FP and its descendants. - using FPCoordTransformRange = FPItemRange; - // Sentinel type for range-for using Iter. class EndIter {}; // Sentinel type for range-for using FPItemIter. @@ -381,41 +391,44 @@ class GrFragmentProcessor : public GrProcessor { return fp.constantOutputForConstantInput(input); } - /** - * Fragment Processor subclasses call this from their constructor to register coordinate - * transformations. Coord transforms provide a mechanism for a processor to receive coordinates - * in their FS code. The matrix expresses a transformation from local space. For a given - * fragment the matrix will be applied to the local coordinate that maps to the fragment. - * - * When the transformation has perspective, the transformed coordinates will have - * 3 components. Otherwise they'll have 2. - * - * This must only be called from the constructor because GrProcessors are immutable. The - * processor subclass manages the lifetime of the transformations (this function only stores a - * pointer). The GrCoordTransform is typically a member field of the GrProcessor subclass. - * - * A processor subclass that has multiple methods of construction should always add its coord - * transforms in a consistent order. The non-virtual implementation of isEqual() automatically - * compares transforms and will assume they line up across the two processor instances. - */ - void addCoordTransform(GrCoordTransform*); - /** * FragmentProcessor subclasses call this from their constructor to register any child * FragmentProcessors they have. This must be called AFTER all texture accesses and coord * transforms have been added. * This is for processors whose shader code will be composed of nested processors whose output - * colors will be combined somehow to produce its output color. Registering these child + * colors will be combined somehow to produce its output color. Registering these child * processors will allow the ProgramBuilder to automatically handle their transformed coords and * texture accesses and mangle their uniform and output color names. + * + * The SampleUsage parameter describes all of the ways that the child is sampled by the parent. + */ + int registerChild(std::unique_ptr child, + SkSL::SampleUsage sampleUsage = SkSL::SampleUsage::PassThrough()); + + /** + * This method takes an existing fragment processor, clones it, registers it as a child of this + * fragment processor, and returns its child index. It also takes care of any boilerplate in the + * cloning process. + */ + int cloneAndRegisterChildProcessor(const GrFragmentProcessor& fp); + + /** + * This method takes an existing fragment processor, clones all of its children, and registers + * the clones as children of this fragment processor. */ - int registerChildProcessor(std::unique_ptr child); + void cloneAndRegisterAllChildProcessors(const GrFragmentProcessor& src); void setTextureSamplerCnt(int cnt) { SkASSERT(cnt >= 0); fTextureSamplerCnt = cnt; } + // FP implementations must call this function if their matching GrGLSLFragmentProcessor's + // emitCode() function uses the EmitArgs::fSampleCoord variable in generated SkSL. + void setUsesSampleCoordsDirectly() { + fFlags |= kUsesSampleCoordsDirectly_Flag; + } + /** * Helper for implementing onTextureSampler(). E.g.: * return IthTexureSampler(i, fMyFirstSampler, fMySecondSampler, fMyThirdSampler); @@ -453,23 +466,28 @@ class GrFragmentProcessor : public GrProcessor { virtual const TextureSampler& onTextureSampler(int) const { return IthTextureSampler(0); } - bool hasSameTransforms(const GrFragmentProcessor&) const; - enum PrivateFlags { kFirstPrivateFlag = kAll_OptimizationFlags + 1, - kHasCoordTransforms_Flag = kFirstPrivateFlag, - kSampledWithExplicitCoords = kFirstPrivateFlag << 1, + + // Propagate up the FP tree to the root + kUsesSampleCoordsIndirectly_Flag = kFirstPrivateFlag, + + // Does not propagate at all + kUsesSampleCoordsDirectly_Flag = kFirstPrivateFlag << 1, + + // Propagates down the FP to all its leaves + kSampledWithExplicitCoords_Flag = kFirstPrivateFlag << 2, + kNetTransformHasPerspective_Flag = kFirstPrivateFlag << 3, }; + void addAndPushFlagToChildren(PrivateFlags flag); uint32_t fFlags = 0; int fTextureSamplerCnt = 0; - SkSTArray<4, GrCoordTransform*, true> fCoordTransforms; - SkSTArray<1, std::unique_ptr, true> fChildProcessors; - - SkSL::SampleMatrix fMatrix; + const GrFragmentProcessor* fParent = nullptr; + SkSL::SampleUsage fUsage; typedef GrProcessor INHERITED; }; @@ -658,4 +676,18 @@ template class GrFragmentProcessor::FPItemRang Src& fSrc; }; +/** + * Some fragment-processor creation methods have preconditions that might not be satisfied by the + * calling code. Those methods can return a `GrFPResult` from their factory methods. If creation + * succeeds, the new fragment processor is created and `success` is true. If a precondition is not + * met, `success` is set to false and the input FP is returned unchanged. + */ +using GrFPResult = std::tuple>; +static inline GrFPResult GrFPFailure(std::unique_ptr fp) { + return {false, std::move(fp)}; +} +static inline GrFPResult GrFPSuccess(std::unique_ptr fp) { + return {true, std::move(fp)}; +} + #endif diff --git a/src/gpu/GrGpu.cpp b/src/gpu/GrGpu.cpp index a32eb00ff0d54..195d22e03c03c 100644 --- a/src/gpu/GrGpu.cpp +++ b/src/gpu/GrGpu.cpp @@ -15,6 +15,7 @@ #include "src/core/SkMathPriv.h" #include "src/core/SkMipMap.h" #include "src/gpu/GrAuditTrail.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDataUtils.h" @@ -262,7 +263,7 @@ sk_sp GrGpu::createCompressedTexture(SkISize dimensions, } // TODO: expand CompressedDataIsCorrect to work here too - SkImage::CompressionType compressionType = this->caps()->compressionType(format); + SkImage::CompressionType compressionType = GrBackendFormatToCompressionType(format); if (dataSize < SkCompressedDataSize(compressionType, dimensions, nullptr, mipMapped == GrMipMapped::kYes)) { @@ -658,7 +659,7 @@ void GrGpu::executeFlushInfo(GrSurfaceProxy* proxies[], int numProxies, SkSurface::BackendSurfaceAccess access, const GrFlushInfo& info, - const GrPrepareForExternalIORequests& externalRequests) { + const GrBackendSurfaceMutableState* newState) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); GrResourceProvider* resourceProvider = fContext->priv().resourceProvider(); @@ -672,7 +673,11 @@ void GrGpu::executeFlushInfo(GrSurfaceProxy* proxies[], info.fSignalSemaphores[i], GrResourceProvider::SemaphoreWrapType::kWillSignal, kBorrow_GrWrapOwnership); - this->insertSemaphore(semaphores[i].get()); + // If we failed to wrap the semaphore it means the client didn't give us a valid + // semaphore to begin with. Therefore, it is fine to not signal it. + if (semaphores[i]) { + this->insertSemaphore(semaphores[i].get()); + } } else { semaphores[i] = resourceProvider->makeSemaphore(false); if (semaphores[i]) { @@ -691,8 +696,12 @@ void GrGpu::executeFlushInfo(GrSurfaceProxy* proxies[], fSubmittedProcs.emplace_back(info.fSubmittedProc, info.fSubmittedContext); } - this->prepareSurfacesForBackendAccessAndExternalIO(proxies, numProxies, access, - externalRequests); + // We currently don't support passing in new surface state for multiple proxies here. The only + // time we have multiple proxies is if we are flushing a yuv SkImage which won't have state + // updates anyways. + SkASSERT(!newState || numProxies == 1); + SkASSERT(!newState || access == SkSurface::BackendSurfaceAccess::kNoAccess); + this->prepareSurfacesForBackendAccessAndStateUpdates(proxies, numProxies, access, newState); } bool GrGpu::submitToGpu(bool syncCpu) { @@ -710,6 +719,14 @@ bool GrGpu::submitToGpu(bool syncCpu) { return submitted; } +bool GrGpu::checkAndResetOOMed() { + if (fOOMed) { + fOOMed = false; + return true; + } + return false; +} + void GrGpu::callSubmittedProcs(bool success) { for (int i = 0; i < fSubmittedProcs.count(); ++i) { fSubmittedProcs[i].fProc(fSubmittedProcs[i].fContext, success); @@ -885,17 +902,11 @@ GrBackendTexture GrGpu::createBackendTexture(SkISize dimensions, } bool GrGpu::updateBackendTexture(const GrBackendTexture& backendTexture, - GrGpuFinishedProc finishedProc, - GrGpuFinishedContext finishedContext, + sk_sp finishedCallback, const BackendTextureData* data) { SkASSERT(data); const GrCaps* caps = this->caps(); - sk_sp callback; - if (finishedProc) { - callback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); - } - if (!backendTexture.isValid()) { return false; } @@ -916,28 +927,22 @@ bool GrGpu::updateBackendTexture(const GrBackendTexture& backendTexture, return false; } - return this->onUpdateBackendTexture(backendTexture, std::move(callback), data); + return this->onUpdateBackendTexture(backendTexture, std::move(finishedCallback), data); } GrBackendTexture GrGpu::createCompressedBackendTexture(SkISize dimensions, const GrBackendFormat& format, GrMipMapped mipMapped, GrProtected isProtected, - GrGpuFinishedProc finishedProc, - GrGpuFinishedContext finishedContext, + sk_sp finishedCallback, const BackendTextureData* data) { - sk_sp callback; - if (finishedProc) { - callback.reset(new GrRefCntedCallback(finishedProc, finishedContext)); - } - const GrCaps* caps = this->caps(); if (!format.isValid()) { return {}; } - SkImage::CompressionType compressionType = caps->compressionType(format); + SkImage::CompressionType compressionType = GrBackendFormatToCompressionType(format); if (compressionType == SkImage::CompressionType::kNone) { // Uncompressed formats must go through the createBackendTexture API return {}; @@ -958,7 +963,7 @@ GrBackendTexture GrGpu::createCompressedBackendTexture(SkISize dimensions, } return this->onCreateCompressedBackendTexture(dimensions, format, mipMapped, - isProtected, std::move(callback), data); + isProtected, std::move(finishedCallback), data); } GrStagingBuffer* GrGpu::findStagingBuffer(size_t size) { diff --git a/src/gpu/GrGpu.h b/src/gpu/GrGpu.h index 620556557eda3..d93c47fcfc413 100644 --- a/src/gpu/GrGpu.h +++ b/src/gpu/GrGpu.h @@ -367,8 +367,9 @@ class GrGpu : public SkRefCnt { // insert any numSemaphore semaphores on the gpu and set the backendSemaphores to match the // inserted semaphores. void executeFlushInfo(GrSurfaceProxy*[], int numProxies, - SkSurface::BackendSurfaceAccess access, const GrFlushInfo&, - const GrPrepareForExternalIORequests&); + SkSurface::BackendSurfaceAccess access, + const GrFlushInfo&, + const GrBackendSurfaceMutableState* newState); bool submitToGpu(bool syncCpu); @@ -387,6 +388,12 @@ class GrGpu : public SkRefCnt { virtual void checkFinishProcs() = 0; + /** + * Checks if we detected an OOM from the underlying 3D API and if so returns true and resets + * the internal OOM state to false. Otherwise, returns false. + */ + bool checkAndResetOOMed(); + /** * Put this texture in a safe and known state for use across multiple GrContexts. Depending on * the backend, this may return a GrSemaphore. If so, other contexts should wait on that @@ -606,8 +613,7 @@ class GrGpu : public SkRefCnt { GrProtected); bool updateBackendTexture(const GrBackendTexture&, - GrGpuFinishedProc finishedProc, - GrGpuFinishedContext finishedContext, + sk_sp finishedCallback, const BackendTextureData*); /** @@ -618,10 +624,21 @@ class GrGpu : public SkRefCnt { const GrBackendFormat&, GrMipMapped, GrProtected, - GrGpuFinishedProc finishedProc, - GrGpuFinishedContext finishedContext, + sk_sp finishedCallback, const BackendTextureData*); + virtual bool setBackendTextureState(const GrBackendTexture&, + const GrBackendSurfaceMutableState&, + sk_sp finishedCallback) { + return false; + } + + virtual bool setBackendRenderTargetState(const GrBackendRenderTarget&, + const GrBackendSurfaceMutableState&, + sk_sp finishedCallback) { + return false; + } + /** * Frees a texture created by createBackendTexture(). If ownership of the backend * texture has been transferred to a GrContext using adopt semantics this should not be called. @@ -710,6 +727,8 @@ class GrGpu : public SkRefCnt { void didWriteToSurface(GrSurface* surface, GrSurfaceOrigin origin, const SkIRect* bounds, uint32_t mipLevels = 1) const; + void setOOMed() { fOOMed = true; } + typedef SkTInternalLList StagingBufferList; const StagingBufferList& availableStagingBuffers() { return fAvailableStagingBuffers; } const StagingBufferList& activeStagingBuffers() { return fActiveStagingBuffers; } @@ -821,9 +840,11 @@ class GrGpu : public SkRefCnt { virtual void addFinishedProc(GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) = 0; - virtual void prepareSurfacesForBackendAccessAndExternalIO( - GrSurfaceProxy* proxies[], int numProxies, SkSurface::BackendSurfaceAccess access, - const GrPrepareForExternalIORequests& externalRequests) {} + virtual void prepareSurfacesForBackendAccessAndStateUpdates( + GrSurfaceProxy* proxies[], + int numProxies, + SkSurface::BackendSurfaceAccess access, + const GrBackendSurfaceMutableState* newState) {} virtual bool onSubmitToGpu(bool syncCpu) = 0; @@ -871,6 +892,8 @@ class GrGpu : public SkRefCnt { }; SkSTArray<4, SubmittedProc> fSubmittedProcs; + bool fOOMed = false; + friend class GrPathRendering; typedef SkRefCnt INHERITED; }; diff --git a/src/gpu/GrHashMapWithCache.h b/src/gpu/GrHashMapWithCache.h new file mode 100644 index 0000000000000..8a24ecc525c7c --- /dev/null +++ b/src/gpu/GrHashMapWithCache.h @@ -0,0 +1,84 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrHashMapWithCache_DEFINED +#define GrHashMapWithCache_DEFINED + +#include "include/private/SkChecksum.h" +#include "include/private/SkNoncopyable.h" +#include "include/private/SkTHash.h" + +// Cheaper than SkGoodHash and good enough for UniqueID tables. +struct GrCheapHash { + uint32_t operator()(uint32_t val) { + return SkChecksum::CheapMix(val); + } +}; + +/** A hash map that caches the most recently accessed entry. + The API is a subset of SkHashMap, and you must provide a + sentinel key that will never be present, such as SK_InvalidUniqueID. + + KeyTraits must have: + - static K GetInvalidKey() +*/ +template +class GrHashMapWithCache : public SkNoncopyable { +public: + // How many key/value pairs are in the table? + int count() const { return fMap.count(); } + + // Approximately how many bytes of memory do we use beyond sizeof(*this)? + size_t approxBytesUsed() const { return fMap.approxBytesUsed(); } + + // N.B. The pointers returned by set() and find() are valid only until the next call to set(). + + // If there is key/value entry in the table with this key, return a pointer to the value. + // If not, return null. + const V* find(const K& key) const { + if (key != fLastKey) { + fLastKey = key; + fLastValue = fMap.find(key); + } + return fLastValue; + } + + // Set key to val in the map, replacing any previous value with the same key. + // We copy both key and val, and return a pointer to the value copy now in the map. + const V* set(K key, V val) { + if (fLastValue && key == fLastKey) { + *fLastValue = std::move(val); + } else { + fLastKey = key; + fLastValue = fMap.set(std::move(key), std::move(val)); + } + return fLastValue; + } + + // Remove the key/value entry in the table with this key. + void remove(K key) { + // Match SkTHashMap requirement. The caller can find() if they're unsure. + SkASSERT(fMap.find(fLastKey)); + fLastKey = std::move(key); + fLastValue = nullptr; + fMap.remove(fLastKey); + } + + // Clear the map. + void reset() { + fLastKey = KeyTraits::GetInvalidKey(); + fLastValue = nullptr; + fMap.reset(); + } + +private: + SkTHashMap fMap; + mutable K fLastKey = KeyTraits::GetInvalidKey(); + mutable V* fLastValue = nullptr; +}; + +#endif diff --git a/src/gpu/GrImageContextPriv.h b/src/gpu/GrImageContextPriv.h index ec1146445a197..ea7c740f17bdf 100644 --- a/src/gpu/GrImageContextPriv.h +++ b/src/gpu/GrImageContextPriv.h @@ -27,7 +27,6 @@ class GrImageContextPriv { GrImageContext* asImageContext() { return fContext->asImageContext(); } GrRecordingContext* asRecordingContext() { return fContext->asRecordingContext(); } - GrContext* asDirectContext() { return fContext->asDirectContext(); } // from GrImageContext GrProxyProvider* proxyProvider() { return fContext->proxyProvider(); } diff --git a/src/gpu/GrImageTextureMaker.cpp b/src/gpu/GrImageTextureMaker.cpp index 71c2d263f7232..581f28570e134 100644 --- a/src/gpu/GrImageTextureMaker.cpp +++ b/src/gpu/GrImageTextureMaker.cpp @@ -40,7 +40,7 @@ GrSurfaceProxyView GrImageTextureMaker::refOriginalTextureProxyView(GrMipMapped ///////////////////////////////////////////////////////////////////////////////////////////////// -GrYUVAImageTextureMaker::GrYUVAImageTextureMaker(GrContext* context, const SkImage* client) +GrYUVAImageTextureMaker::GrYUVAImageTextureMaker(GrRecordingContext* context, const SkImage* client) : INHERITED(context, client->imageInfo()) , fImage(static_cast(client)) { SkASSERT(as_IB(client)->isYUVA()); @@ -94,15 +94,20 @@ std::unique_ptr GrYUVAImageTextureMaker::createFragmentProc const auto& caps = *fImage->context()->priv().caps(); const SkMatrix& m = filterOrNullForBicubic ? textureMatrix : SkMatrix::I(); + GrSamplerState sampler(wrapX, wrapY, filter); auto fp = GrYUVtoRGBEffect::Make(fImage->fViews, fImage->fYUVAIndices, fImage->fYUVColorSpace, - filter, caps, m, domain); + sampler, caps, m, domain); if (!filterOrNullForBicubic) { - fp = GrBicubicEffect::Make(std::move(fp), fImage->alphaType(), textureMatrix, + fp = GrBicubicEffect::Make(std::move(fp), + fImage->alphaType(), + textureMatrix, + GrBicubicEffect::Kernel::kMitchell, GrBicubicEffect::Direction::kXY); } if (fImage->fFromColorSpace) { - fp = GrColorSpaceXformEffect::Make(std::move(fp), fImage->fFromColorSpace.get(), - fImage->alphaType(), fImage->colorSpace()); + fp = GrColorSpaceXformEffect::Make(std::move(fp), + fImage->fFromColorSpace.get(), fImage->alphaType(), + fImage->colorSpace(), kPremul_SkAlphaType); } return fp; } diff --git a/src/gpu/GrImageTextureMaker.h b/src/gpu/GrImageTextureMaker.h index a84042f64c305..8636b8ac65050 100644 --- a/src/gpu/GrImageTextureMaker.h +++ b/src/gpu/GrImageTextureMaker.h @@ -33,7 +33,7 @@ class GrImageTextureMaker final : public GrTextureMaker { /** This class manages the conversion of generator-backed YUVA images to GrTextures. */ class GrYUVAImageTextureMaker final : public GrTextureMaker { public: - GrYUVAImageTextureMaker(GrContext* context, const SkImage* client); + GrYUVAImageTextureMaker(GrRecordingContext* context, const SkImage* client); std::unique_ptr createFragmentProcessor( const SkMatrix& textureMatrix, diff --git a/src/gpu/GrLegacyDirectContext.cpp b/src/gpu/GrLegacyDirectContext.cpp deleted file mode 100644 index 07be4fb81bc50..0000000000000 --- a/src/gpu/GrLegacyDirectContext.cpp +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - - -#include "include/gpu/GrContext.h" - -#include "include/gpu/GrContextThreadSafeProxy.h" -#include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrContextThreadSafeProxyPriv.h" -#include "src/gpu/GrGpu.h" - -#include "src/gpu/effects/GrSkSLFP.h" -#include "src/gpu/gl/GrGLGpu.h" -#include "src/gpu/mock/GrMockGpu.h" -#include "src/gpu/text/GrAtlasManager.h" -#include "src/gpu/text/GrStrikeCache.h" -#ifdef SK_METAL -#include "src/gpu/mtl/GrMtlTrampoline.h" -#endif -#ifdef SK_VULKAN -#include "src/gpu/vk/GrVkGpu.h" -#endif -#ifdef SK_DIRECT3D -#include "src/gpu/d3d/GrD3DGpu.h" -#endif -#ifdef SK_DAWN -#include "src/gpu/dawn/GrDawnGpu.h" -#endif - -#ifdef SK_DISABLE_REDUCE_OPLIST_SPLITTING -static const bool kDefaultReduceOpsTaskSplitting = false; -#else -static const bool kDefaultReduceOpsTaskSplitting = false; -#endif - -class GrLegacyDirectContext : public GrContext { -public: - GrLegacyDirectContext(GrBackendApi backend, const GrContextOptions& options) - : INHERITED(GrContextThreadSafeProxyPriv::Make(backend, options)) - , fAtlasManager(nullptr) { - } - - ~GrLegacyDirectContext() override { - // this if-test protects against the case where the context is being destroyed - // before having been fully created - if (this->priv().getGpu()) { - this->flushAndSubmit(); - } - - delete fAtlasManager; - } - - void abandonContext() override { - INHERITED::abandonContext(); - fAtlasManager->freeAll(); - } - - void releaseResourcesAndAbandonContext() override { - INHERITED::releaseResourcesAndAbandonContext(); - fAtlasManager->freeAll(); - } - - void freeGpuResources() override { - this->flushAndSubmit(); - fAtlasManager->freeAll(); - - INHERITED::freeGpuResources(); - } - -protected: - bool init() override { - const GrGpu* gpu = this->priv().getGpu(); - if (!gpu) { - return false; - } - - fThreadSafeProxy->priv().init(gpu->refCaps()); - if (!INHERITED::init()) { - return false; - } - - bool reduceOpsTaskSplitting = kDefaultReduceOpsTaskSplitting; - if (GrContextOptions::Enable::kNo == this->options().fReduceOpsTaskSplitting) { - reduceOpsTaskSplitting = false; - } else if (GrContextOptions::Enable::kYes == this->options().fReduceOpsTaskSplitting) { - reduceOpsTaskSplitting = true; - } - - this->setupDrawingManager(true, reduceOpsTaskSplitting); - - GrDrawOpAtlas::AllowMultitexturing allowMultitexturing; - if (GrContextOptions::Enable::kNo == this->options().fAllowMultipleGlyphCacheTextures || - // multitexturing supported only if range can represent the index + texcoords fully - !(this->caps()->shaderCaps()->floatIs32Bits() || - this->caps()->shaderCaps()->integerSupport())) { - allowMultitexturing = GrDrawOpAtlas::AllowMultitexturing::kNo; - } else { - allowMultitexturing = GrDrawOpAtlas::AllowMultitexturing::kYes; - } - - GrProxyProvider* proxyProvider = this->priv().proxyProvider(); - - fAtlasManager = new GrAtlasManager(proxyProvider, - this->options().fGlyphCacheTextureMaximumBytes, - allowMultitexturing); - this->priv().addOnFlushCallbackObject(fAtlasManager); - - return true; - } - - GrAtlasManager* onGetAtlasManager() override { return fAtlasManager; } - -private: - GrAtlasManager* fAtlasManager; - - typedef GrContext INHERITED; -}; - -#ifdef SK_GL -sk_sp GrContext::MakeGL(sk_sp glInterface) { - GrContextOptions defaultOptions; - return MakeGL(std::move(glInterface), defaultOptions); -} - -sk_sp GrContext::MakeGL(const GrContextOptions& options) { - return MakeGL(nullptr, options); -} - -sk_sp GrContext::MakeGL() { - GrContextOptions defaultOptions; - return MakeGL(nullptr, defaultOptions); -} - -sk_sp GrContext::MakeGL(sk_sp glInterface, - const GrContextOptions& options) { - sk_sp context(new GrLegacyDirectContext(GrBackendApi::kOpenGL, options)); - - context->fGpu = GrGLGpu::Make(std::move(glInterface), options, context.get()); - if (!context->init()) { - return nullptr; - } - return context; -} -#endif - -sk_sp GrContext::MakeMock(const GrMockOptions* mockOptions) { - GrContextOptions defaultOptions; - return MakeMock(mockOptions, defaultOptions); -} - -sk_sp GrContext::MakeMock(const GrMockOptions* mockOptions, - const GrContextOptions& options) { - sk_sp context(new GrLegacyDirectContext(GrBackendApi::kMock, options)); - - context->fGpu = GrMockGpu::Make(mockOptions, options, context.get()); - if (!context->init()) { - return nullptr; - } - - return context; -} - -sk_sp GrContext::MakeVulkan(const GrVkBackendContext& backendContext) { -#ifdef SK_VULKAN - GrContextOptions defaultOptions; - return MakeVulkan(backendContext, defaultOptions); -#else - return nullptr; -#endif -} - -sk_sp GrContext::MakeVulkan(const GrVkBackendContext& backendContext, - const GrContextOptions& options) { -#ifdef SK_VULKAN - sk_sp context(new GrLegacyDirectContext(GrBackendApi::kVulkan, options)); - - context->fGpu = GrVkGpu::Make(backendContext, options, context.get()); - if (!context->init()) { - return nullptr; - } - - return context; -#else - return nullptr; -#endif -} - -#ifdef SK_METAL -sk_sp GrContext::MakeMetal(void* device, void* queue) { - GrContextOptions defaultOptions; - return MakeMetal(device, queue, defaultOptions); -} - -sk_sp GrContext::MakeMetal(void* device, void* queue, const GrContextOptions& options) { - sk_sp context(new GrLegacyDirectContext(GrBackendApi::kMetal, options)); - - context->fGpu = GrMtlTrampoline::MakeGpu(context.get(), options, device, queue); - if (!context->init()) { - return nullptr; - } - - return context; -} -#endif - -#ifdef SK_DIRECT3D -sk_sp GrContext::MakeDirect3D(const GrD3DBackendContext& backendContext) { - GrContextOptions defaultOptions; - return MakeDirect3D(backendContext, defaultOptions); -} - -sk_sp GrContext::MakeDirect3D(const GrD3DBackendContext& backendContext, - const GrContextOptions& options) { - sk_sp context(new GrLegacyDirectContext(GrBackendApi::kDirect3D, options)); - - context->fGpu = GrD3DGpu::Make(backendContext, options, context.get()); - if (!context->init()) { - return nullptr; - } - - return context; -} -#endif - -#ifdef SK_DAWN -sk_sp GrContext::MakeDawn(const wgpu::Device& device) { - GrContextOptions defaultOptions; - return MakeDawn(device, defaultOptions); -} - -sk_sp GrContext::MakeDawn(const wgpu::Device& device, const GrContextOptions& options) { - sk_sp context(new GrLegacyDirectContext(GrBackendApi::kDawn, options)); - - context->fGpu = GrDawnGpu::Make(device, options, context.get()); - if (!context->init()) { - return nullptr; - } - - return context; -} -#endif diff --git a/src/gpu/GrOnFlushResourceProvider.cpp b/src/gpu/GrOnFlushResourceProvider.cpp index 0ca9f13ef4772..750096dfd7f3c 100644 --- a/src/gpu/GrOnFlushResourceProvider.cpp +++ b/src/gpu/GrOnFlushResourceProvider.cpp @@ -7,7 +7,8 @@ #include "src/gpu/GrOnFlushResourceProvider.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDrawingManager.h" #include "src/gpu/GrProxyProvider.h" @@ -52,12 +53,12 @@ void GrOnFlushResourceProvider::addTextureResolveTask(sk_sp text // Since we are bypassing normal DAG operation, we need to ensure the textureProxy's last render // task gets closed before making a texture resolve task. makeClosed is what will mark msaa and // mipmaps dirty. - if (GrRenderTask* renderTask = textureProxy->getLastRenderTask()) { + if (GrRenderTask* renderTask = fDrawingMgr->getLastRenderTask(textureProxy.get())) { renderTask->makeClosed(*this->caps()); } auto task = static_cast(fDrawingMgr->fOnFlushRenderTasks.push_back( sk_make_sp()).get()); - task->addProxy(std::move(textureProxy), resolveFlags, *this->caps()); + task->addProxy(fDrawingMgr, std::move(textureProxy), resolveFlags, *this->caps()); task->makeClosed(*this->caps()); } @@ -89,7 +90,7 @@ bool GrOnFlushResourceProvider::instatiateProxy(GrSurfaceProxy* proxy) { SkASSERT(proxy->canSkipResourceAllocator()); // TODO: this class should probably just get a GrDirectContext - auto direct = fDrawingMgr->getContext()->priv().asDirectContext(); + auto direct = fDrawingMgr->getContext()->asDirectContext(); if (!direct) { return false; } @@ -106,7 +107,7 @@ bool GrOnFlushResourceProvider::instatiateProxy(GrSurfaceProxy* proxy) { sk_sp GrOnFlushResourceProvider::makeBuffer(GrGpuBufferType intendedType, size_t size, const void* data) { // TODO: this class should probably just get a GrDirectContext - auto direct = fDrawingMgr->getContext()->priv().asDirectContext(); + auto direct = fDrawingMgr->getContext()->asDirectContext(); if (!direct) { return nullptr; } @@ -120,7 +121,7 @@ sk_sp GrOnFlushResourceProvider::makeBuffer(GrGpuBufferType intende sk_sp GrOnFlushResourceProvider::findOrMakeStaticBuffer( GrGpuBufferType intendedType, size_t size, const void* data, const GrUniqueKey& key) { // TODO: class should probably just get a GrDirectContext - auto direct = fDrawingMgr->getContext()->priv().asDirectContext(); + auto direct = fDrawingMgr->getContext()->asDirectContext(); if (!direct) { return nullptr; } diff --git a/src/gpu/GrOpFlushState.cpp b/src/gpu/GrOpFlushState.cpp index dfaa9d6e73cad..8bc88f0d0915e 100644 --- a/src/gpu/GrOpFlushState.cpp +++ b/src/gpu/GrOpFlushState.cpp @@ -194,7 +194,7 @@ void GrOpFlushState::putBackVertices(int vertices, size_t vertexStride) { } GrAppliedClip GrOpFlushState::detachAppliedClip() { - return fOpArgs->appliedClip() ? std::move(*fOpArgs->appliedClip()) : GrAppliedClip(); + return fOpArgs->appliedClip() ? std::move(*fOpArgs->appliedClip()) : GrAppliedClip::Disabled(); } GrStrikeCache* GrOpFlushState::strikeCache() const { diff --git a/src/gpu/GrOpsTask.cpp b/src/gpu/GrOpsTask.cpp index 4537242dc9789..84f4accf413e1 100644 --- a/src/gpu/GrOpsTask.cpp +++ b/src/gpu/GrOpsTask.cpp @@ -7,7 +7,7 @@ #include "src/gpu/GrOpsTask.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkRectPriv.h" #include "src/core/SkScopeExit.h" #include "src/core/SkTraceEvent.h" @@ -357,14 +357,14 @@ inline void GrOpsTask::OpChain::validate() const { //////////////////////////////////////////////////////////////////////////////// -GrOpsTask::GrOpsTask(GrRecordingContext::Arenas arenas, +GrOpsTask::GrOpsTask(GrDrawingManager* drawingMgr, GrRecordingContext::Arenas arenas, GrSurfaceProxyView view, GrAuditTrail* auditTrail) - : GrRenderTask(std::move(view)) + : GrRenderTask() , fArenas(arenas) , fAuditTrail(auditTrail) SkDEBUGCODE(, fNumClips(0)) { - fTargetView.proxy()->setLastRenderTask(this); + this->addTarget(drawingMgr, std::move(view)); } void GrOpsTask::deleteOps() { @@ -388,20 +388,16 @@ void GrOpsTask::removeClosedObserver(GrOpsTaskClosedObserver* observer) { } } -void GrOpsTask::endFlush() { +void GrOpsTask::endFlush(GrDrawingManager* drawingMgr) { fLastClipStackGenID = SK_InvalidUniqueID; this->deleteOps(); fClipAllocator.reset(); - GrSurfaceProxy* proxy = fTargetView.proxy(); - if (proxy && this == proxy->getLastRenderTask()) { - proxy->setLastRenderTask(nullptr); - } - - fTargetView.reset(); fDeferredProxies.reset(); fSampledProxies.reset(); fAuditTrail = nullptr; + + GrRenderTask::endFlush(drawingMgr); } void GrOpsTask::onPrePrepare(GrRecordingContext* context) { @@ -420,7 +416,7 @@ void GrOpsTask::onPrePrepare(GrRecordingContext* context) { for (const auto& chain : fOpChains) { if (chain.shouldExecute()) { chain.head()->prePrepare(context, - &fTargetView, + &fTargets[0], chain.appliedClip(), chain.dstProxyView()); } @@ -428,7 +424,7 @@ void GrOpsTask::onPrePrepare(GrRecordingContext* context) { } void GrOpsTask::onPrepare(GrOpFlushState* flushState) { - SkASSERT(fTargetView.proxy()->peekRenderTarget()); + SkASSERT(this->target(0).proxy()->peekRenderTarget()); SkASSERT(this->isClosed()); #ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK TRACE_EVENT0("skia.gpu", TRACE_FUNC); @@ -449,7 +445,7 @@ void GrOpsTask::onPrepare(GrOpFlushState* flushState) { TRACE_EVENT0("skia.gpu", chain.head()->name()); #endif GrOpFlushState::OpArgs opArgs(chain.head(), - &fTargetView, + &fTargets[0], chain.appliedClip(), chain.dstProxyView()); @@ -457,7 +453,7 @@ void GrOpsTask::onPrepare(GrOpFlushState* flushState) { // Temporary debugging helper: for debugging prePrepare w/o going through DDLs // Delete once most of the GrOps have an onPrePrepare. - // chain.head()->prePrepare(flushState->gpu()->getContext(), &fTargetView, + // chain.head()->prePrepare(flushState->gpu()->getContext(), &this->target(0), // chain.appliedClip()); // GrOp::prePrepare may or may not have been called at this point @@ -505,8 +501,8 @@ bool GrOpsTask::onExecute(GrOpFlushState* flushState) { return false; } - SkASSERT(fTargetView.proxy()); - GrRenderTargetProxy* proxy = fTargetView.proxy()->asRenderTargetProxy(); + SkASSERT(this->numTargets() == 1); + GrRenderTargetProxy* proxy = this->target(0).proxy()->asRenderTargetProxy(); SkASSERT(proxy); TRACE_EVENT0("skia.gpu", TRACE_FUNC); @@ -554,6 +550,7 @@ bool GrOpsTask::onExecute(GrOpFlushState* flushState) { // once finished, meaning the stencil values will always remain cleared after the // initial clear. Just fall through to reloading the existing (cleared) stencil values // from memory. + [[fallthrough]]; case StencilContent::kPreserved: SkASSERT(stencil); stencilLoadOp = GrLoadOp::kLoad; @@ -572,7 +569,7 @@ bool GrOpsTask::onExecute(GrOpFlushState* flushState) { : GrStoreOp::kStore; GrOpsRenderPass* renderPass = create_render_pass( - flushState->gpu(), proxy->peekRenderTarget(), stencil, fTargetView.origin(), + flushState->gpu(), proxy->peekRenderTarget(), stencil, this->target(0).origin(), fClippedContentBounds, fColorLoadOp, fLoadClearColor, stencilLoadOp, stencilStoreOp, fSampledProxies); if (!renderPass) { @@ -591,7 +588,7 @@ bool GrOpsTask::onExecute(GrOpFlushState* flushState) { #endif GrOpFlushState::OpArgs opArgs(chain.head(), - &fTargetView, + &fTargets[0], chain.appliedClip(), chain.dstProxyView()); @@ -611,9 +608,9 @@ void GrOpsTask::setColorLoadOp(GrLoadOp op, const SkPMColor4f& color) { fColorLoadOp = op; fLoadClearColor = color; if (GrLoadOp::kClear == fColorLoadOp) { - GrSurfaceProxy* proxy = fTargetView.proxy(); + GrSurfaceProxy* proxy = this->target(0).proxy(); SkASSERT(proxy); - fTotalBounds = proxy->getBoundsRect(); + fTotalBounds = proxy->backingStoreBoundsRect(); } } @@ -632,7 +629,7 @@ bool GrOpsTask::resetForFullscreenClear(CanDiscardPreviousOps canDiscardPrevious // If the opsTask is using a render target which wraps a vulkan command buffer, we can't do // a clear load since we cannot change the render pass that we are using. Thus we fall back // to making a clear op in this case. - return !fTargetView.asRenderTargetProxy()->wrapsVkSecondaryCB(); + return !this->target(0).asRenderTargetProxy()->wrapsVkSecondaryCB(); } // Could not empty the task, so an op must be added to handle the clear @@ -758,7 +755,7 @@ void GrOpsTask::gatherProxyIntervals(GrResourceAllocator* alloc) const { alloc->addInterval(fDeferredProxies[i], 0, 0, GrResourceAllocator::ActualUse::kNo); } - GrSurfaceProxy* targetProxy = fTargetView.proxy(); + GrSurfaceProxy* targetProxy = this->target(0).proxy(); // Add the interval for all the writes to this GrOpsTasks's target if (fOpChains.count()) { @@ -777,7 +774,7 @@ void GrOpsTask::gatherProxyIntervals(GrResourceAllocator* alloc) const { auto gather = [ alloc SkDEBUGCODE(, this) ] (GrSurfaceProxy* p, GrMipMapped) { alloc->addInterval(p, alloc->curOp(), alloc->curOp(), GrResourceAllocator::ActualUse::kYes - SkDEBUGCODE(, fTargetView.proxy() == p)); + SkDEBUGCODE(, this->target(0).proxy() == p)); }; for (const OpChain& recordedOp : fOpChains) { recordedOp.visitProxies(gather); @@ -793,7 +790,7 @@ void GrOpsTask::recordOp( const DstProxyView* dstProxyView, const GrCaps& caps) { SkDEBUGCODE(op->validate();) SkASSERT(processorAnalysis.requiresDstTexture() == (dstProxyView && dstProxyView->proxy())); - GrSurfaceProxy* proxy = fTargetView.proxy(); + GrSurfaceProxy* proxy = this->target(0).proxy(); SkASSERT(proxy); // A closed GrOpsTask should never receive new/more ops @@ -893,9 +890,11 @@ GrRenderTask::ExpectedOutcome GrOpsTask::onMakeClosed( fClosedObservers.reset(); }); if (!this->isNoOp()) { - GrSurfaceProxy* proxy = fTargetView.proxy(); - SkRect clippedContentBounds = proxy->getBoundsRect(); - // TODO: If we can fix up GLPrograms test to always intersect the fTargetView proxy bounds + GrSurfaceProxy* proxy = this->target(0).proxy(); + // Use the entire backing store bounds since the GPU doesn't clip automatically to the + // logical dimensions. + SkRect clippedContentBounds = proxy->backingStoreBoundsRect(); + // TODO: If we can fix up GLPrograms test to always intersect the target proxy bounds // then we can simply assert here that the bounds intersect. if (clippedContentBounds.intersect(fTotalBounds)) { clippedContentBounds.roundOut(&fClippedContentBounds); diff --git a/src/gpu/GrOpsTask.h b/src/gpu/GrOpsTask.h index 0baf847e282c3..2ee247db3f135 100644 --- a/src/gpu/GrOpsTask.h +++ b/src/gpu/GrOpsTask.h @@ -12,7 +12,7 @@ #include "include/core/SkRefCnt.h" #include "include/core/SkStrokeRec.h" #include "include/core/SkTypes.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/SkColorData.h" #include "include/private/SkTArray.h" #include "include/private/SkTDArray.h" @@ -51,7 +51,7 @@ class GrOpsTask : public GrRenderTask { public: // The Arenas must outlive the GrOpsTask, either by preserving the context that owns // the pool, or by moving the pool to the DDL that takes over the GrOpsTask. - GrOpsTask(GrRecordingContext::Arenas, GrSurfaceProxyView, GrAuditTrail*); + GrOpsTask(GrDrawingManager*, GrRecordingContext::Arenas, GrSurfaceProxyView, GrAuditTrail*); ~GrOpsTask() override; GrOpsTask* asOpsTask() override { return this; } @@ -68,7 +68,7 @@ class GrOpsTask : public GrRenderTask { /** * Empties the draw buffer of any queued up draws. */ - void endFlush() override; + void endFlush(GrDrawingManager*) override; void onPrePrepare(GrRecordingContext*) override; /** @@ -88,11 +88,11 @@ class GrOpsTask : public GrRenderTask { fSampledProxies.push_back(proxy); } - void addOp(std::unique_ptr op, GrTextureResolveManager textureResolveManager, - const GrCaps& caps) { - auto addDependency = [ textureResolveManager, &caps, this ] ( + void addOp(GrDrawingManager* drawingMgr, std::unique_ptr op, + GrTextureResolveManager textureResolveManager, const GrCaps& caps) { + auto addDependency = [ drawingMgr, textureResolveManager, &caps, this ] ( GrSurfaceProxy* p, GrMipMapped mipmapped) { - this->addDependency(p, mipmapped, textureResolveManager, caps); + this->addDependency(drawingMgr, p, mipmapped, textureResolveManager, caps); }; op->visitProxies(addDependency); @@ -100,19 +100,20 @@ class GrOpsTask : public GrRenderTask { this->recordOp(std::move(op), GrProcessorSet::EmptySetAnalysis(), nullptr, nullptr, caps); } - void addWaitOp(std::unique_ptr op, GrTextureResolveManager textureResolveManager, - const GrCaps& caps) { + void addWaitOp(GrDrawingManager* drawingMgr, std::unique_ptr op, + GrTextureResolveManager textureResolveManager, const GrCaps& caps) { fHasWaitOp = true; - this->addOp(std::move(op), textureResolveManager, caps); + this->addOp(drawingMgr, std::move(op), textureResolveManager, caps); } - void addDrawOp(std::unique_ptr op, const GrProcessorSet::Analysis& processorAnalysis, + void addDrawOp(GrDrawingManager* drawingMgr, std::unique_ptr op, + const GrProcessorSet::Analysis& processorAnalysis, GrAppliedClip&& clip, const DstProxyView& dstProxyView, GrTextureResolveManager textureResolveManager, const GrCaps& caps) { - auto addDependency = [ textureResolveManager, &caps, this ] ( + auto addDependency = [ drawingMgr, textureResolveManager, &caps, this ] ( GrSurfaceProxy* p, GrMipMapped mipmapped) { this->addSampledTexture(p); - this->addDependency(p, mipmapped, textureResolveManager, caps); + this->addDependency(drawingMgr, p, mipmapped, textureResolveManager, caps); }; op->visitProxies(addDependency); diff --git a/src/gpu/GrPathProcessor.cpp b/src/gpu/GrPathProcessor.cpp index ec62eb17cd485..2fdd97b0c1aef 100644 --- a/src/gpu/GrPathProcessor.cpp +++ b/src/gpu/GrPathProcessor.cpp @@ -8,6 +8,7 @@ #include "src/gpu/GrPathProcessor.h" #include "include/private/SkTo.h" +#include "src/core/SkMatrixPriv.h" #include "src/gpu/GrShaderCaps.h" #include "src/gpu/gl/GrGLGpu.h" #ifdef SK_GL @@ -53,102 +54,47 @@ class GrGLPathProcessor : public GrGLSLPrimitiveProcessor { fragBuilder->codeAppendf("%s = half4(1);", args.fOutputCoverage); } - SkString matrix_to_sksl(const SkMatrix& m) { - return SkStringPrintf("float3x3(%f, %f, %f, %f, %f, %f, %f, %f, %f)", m[0], m[1], m[2], - m[3], m[4], m[5], m[6], m[7], m[8]); - } - void emitTransforms(GrGLSLVaryingHandler* varyingHandler, GrGLSLUniformHandler* uniformHandler, FPCoordTransformHandler* transformHandler) { for (int i = 0; *transformHandler; ++*transformHandler, ++i) { - auto [coordTransform, fp] = transformHandler->get(); + const auto& fp = transformHandler->get(); GrShaderVar fragmentVar; GrShaderVar transformVar; if (fp.isSampledWithExplicitCoords()) { - if (coordTransform.isNoOp()) { - transformHandler->omitCoordsForCurrCoordTransform(); - continue; - } else { - const char* name; - SkString strUniName; - strUniName.printf("CoordTransformMatrix_%d", i); - auto& uni = fUniformTransform.push_back(); - if (coordTransform.matrix().isScaleTranslate()) { - uni.fType = kFloat4_GrSLType; - } else { - uni.fType = kFloat3x3_GrSLType; - } - uni.fHandle = uniformHandler - ->addUniform(nullptr, - kFragment_GrShaderFlag, - uni.fType, - strUniName.c_str(), - &name) - .toIndex(); - transformVar = uniformHandler->getUniformVariable(uni.fHandle); - } + transformHandler->omitCoordsForCurrCoordTransform(); } else { SkString strVaryingName; strVaryingName.printf("TransformedCoord_%d", i); - GrSLType varyingType = coordTransform.matrix().hasPerspective() ? kHalf3_GrSLType - : kHalf2_GrSLType; - GrGLSLVarying v(varyingType); + GrGLSLVarying v(kFloat2_GrSLType); #ifdef SK_GL GrGLVaryingHandler* glVaryingHandler = (GrGLVaryingHandler*)varyingHandler; fVaryingTransform.push_back().fHandle = glVaryingHandler->addPathProcessingVarying(strVaryingName.c_str(), &v) .toIndex(); #endif - fVaryingTransform.back().fType = varyingType; - fragmentVar = {SkString(v.fsIn()), varyingType}; + fragmentVar = {SkString(v.fsIn()), kFloat2_GrSLType}; + transformHandler->specifyCoordsForCurrCoordTransform(transformVar, fragmentVar); } - transformHandler->specifyCoordsForCurrCoordTransform(transformVar, fragmentVar); } } void setData(const GrGLSLProgramDataManager& pd, - const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { + const GrPrimitiveProcessor& primProc) override { const GrPathProcessor& pathProc = primProc.cast(); if (pathProc.color() != fColor) { pd.set4fv(fColorUniform, 1, pathProc.color().vec()); fColor = pathProc.color(); } - int v = 0, u = 0; - for (auto [transform, fp] : transformRange) { - if (fp.isSampledWithExplicitCoords()) { - if (transform.isNoOp()) { - continue; - } - if (fUniformTransform[u].fHandle.isValid()) { - SkMatrix m = GetTransformMatrix(transform, SkMatrix::I()); - if (!SkMatrixPriv::CheapEqual(fUniformTransform[u].fCurrentValue, m)) { - fUniformTransform[u].fCurrentValue = m; - if (fUniformTransform[u].fType == kFloat4_GrSLType) { - float values[4] = {m.getScaleX(), m.getTranslateX(), - m.getScaleY(), m.getTranslateY()}; - pd.set4fv(fUniformTransform[u].fHandle.toIndex(), 1, values); - } else { - SkASSERT(fUniformTransform[u].fType == kFloat3x3_GrSLType); - pd.setSkMatrix(fUniformTransform[u].fHandle.toIndex(), m); - } - } - } - ++u; - } else { - SkASSERT(fVaryingTransform[v].fHandle.isValid()); - SkMatrix m = GetTransformMatrix(transform, pathProc.localMatrix()); + for (int v = 0; v < fVaryingTransform.count(); ++v) { + if (fVaryingTransform[v].fHandle.isValid()) { + SkMatrix m = pathProc.localMatrix(); if (!SkMatrixPriv::CheapEqual(fVaryingTransform[v].fCurrentValue, m)) { fVaryingTransform[v].fCurrentValue = m; - SkASSERT(fVaryingTransform[v].fType == kHalf2_GrSLType || - fVaryingTransform[v].fType == kHalf3_GrSLType); - int components = fVaryingTransform[v].fType == kHalf2_GrSLType ? 2 : 3; - pd.setPathFragmentInputTransform(fVaryingTransform[v].fHandle, components, m); + pd.setPathFragmentInputTransform(fVaryingTransform[v].fHandle, 2, m); } - ++v; } } } @@ -162,18 +108,9 @@ class GrGLPathProcessor : public GrGLSLPrimitiveProcessor { struct TransformVarying { VaryingHandle fHandle; SkMatrix fCurrentValue = SkMatrix::InvalidMatrix(); - GrSLType fType = kVoid_GrSLType; - }; - // For explicitly sampled FPs we stick a uniform in the FS and apply it to the explicit coords - // to implement the CoordTransform. - struct TransformUniform { - UniformHandle fHandle; - SkMatrix fCurrentValue = SkMatrix::InvalidMatrix(); - GrSLType fType = kVoid_GrSLType; }; SkTArray fVaryingTransform; - SkTArray fUniformTransform; UniformHandle fColorUniform; SkPMColor4f fColor; diff --git a/src/gpu/GrPathRenderer.h b/src/gpu/GrPathRenderer.h index c42b9eedc86ec..0866e0106c435 100644 --- a/src/gpu/GrPathRenderer.h +++ b/src/gpu/GrPathRenderer.h @@ -14,7 +14,6 @@ class GrCaps; class GrClip; -class GrFixedClip; class GrHardClip; class GrPaint; class GrRecordingContext; diff --git a/src/gpu/GrPathRendererChain.cpp b/src/gpu/GrPathRendererChain.cpp index cf7e271f3066e..27079f2a326d0 100644 --- a/src/gpu/GrPathRendererChain.cpp +++ b/src/gpu/GrPathRendererChain.cpp @@ -8,8 +8,8 @@ #include "src/gpu/GrPathRendererChain.h" -#include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" @@ -63,7 +63,7 @@ GrPathRendererChain::GrPathRendererChain(GrRecordingContext* context, const Opti fChain.push_back(std::move(spr)); } if (options.fGpuPathRenderers & GpuPathRenderers::kStencilAndCover) { - auto direct = context->priv().asDirectContext(); + auto direct = context->asDirectContext(); if (direct) { auto resourceProvider = direct->priv().resourceProvider(); diff --git a/src/gpu/GrPersistentCacheUtils.h b/src/gpu/GrPersistentCacheUtils.h index fe932c261944c..d6a15e73280be 100644 --- a/src/gpu/GrPersistentCacheUtils.h +++ b/src/gpu/GrPersistentCacheUtils.h @@ -10,8 +10,8 @@ #include "include/core/SkData.h" #include "include/private/GrTypesPriv.h" -#include "src/core/SkReader32.h" -#include "src/core/SkWriter32.h" +#include "src/core/SkReadBuffer.h" +#include "src/core/SkWriteBuffer.h" #include "src/sksl/SkSLString.h" #include "src/sksl/ir/SkSLProgram.h" @@ -28,7 +28,7 @@ struct ShaderMetadata { }; // Increment this whenever the serialization format of cached shaders changes -static constexpr int kCurrentVersion = 1; +static constexpr int kCurrentVersion = 2; static inline sk_sp PackCachedShaders(SkFourByteTag shaderType, const SkSL::String shaders[], @@ -39,12 +39,12 @@ static inline sk_sp PackCachedShaders(SkFourByteTag shaderType, // kGrShaderTypeCount inputs. If the backend gives us fewer, we just replicate the last one. SkASSERT(numInputs >= 1 && numInputs <= kGrShaderTypeCount); - SkWriter32 writer; - writer.write32(kCurrentVersion); - writer.write32(shaderType); + SkBinaryWriteBuffer writer; + writer.writeInt(kCurrentVersion); + writer.writeUInt(shaderType); for (int i = 0; i < kGrShaderTypeCount; ++i) { - writer.writeString(shaders[i].c_str(), shaders[i].size()); - writer.writePad(&inputs[std::min(i, numInputs - 1)], sizeof(SkSL::Program::Inputs)); + writer.writeByteArray(shaders[i].c_str(), shaders[i].size()); + writer.writePad32(&inputs[std::min(i, numInputs - 1)], sizeof(SkSL::Program::Inputs)); } writer.writeBool(SkToBool(meta)); if (meta) { @@ -57,7 +57,7 @@ static inline sk_sp PackCachedShaders(SkFourByteTag shaderType, writer.writeInt(meta->fAttributeNames.count()); for (const auto& attr : meta->fAttributeNames) { - writer.writeString(attr.c_str(), attr.size()); + writer.writeByteArray(attr.c_str(), attr.size()); } writer.writeBool(meta->fHasCustomColorOutput); @@ -66,30 +66,28 @@ static inline sk_sp PackCachedShaders(SkFourByteTag shaderType, return writer.snapshotAsData(); } -static SkFourByteTag GetType(SkReader32* reader) { +static SkFourByteTag GetType(SkReadBuffer* reader) { constexpr SkFourByteTag kInvalidTag = ~0; - if (!reader->isAvailable(2 * sizeof(int))) { - return kInvalidTag; - } - if (reader->readInt() != kCurrentVersion) { - return kInvalidTag; - } - return reader->readU32(); + int version = reader->readInt(); + SkFourByteTag typeTag = reader->readUInt(); + return reader->validate(version == kCurrentVersion) ? typeTag : kInvalidTag; } -static inline void UnpackCachedShaders(SkReader32* reader, +static inline bool UnpackCachedShaders(SkReadBuffer* reader, SkSL::String shaders[], SkSL::Program::Inputs inputs[], int numInputs, ShaderMetadata* meta = nullptr) { for (int i = 0; i < kGrShaderTypeCount; ++i) { - size_t stringLen = 0; - const char* string = reader->readString(&stringLen); - shaders[i] = SkSL::String(string, stringLen); + size_t shaderLen = 0; + const char* shaderBuf = static_cast(reader->skipByteArray(&shaderLen)); + if (shaderBuf) { + shaders[i].assign(shaderBuf, shaderLen); + } // GL, for example, only wants one set of Inputs if (i < numInputs) { - reader->read(&inputs[i], sizeof(inputs[i])); + reader->readPad32(&inputs[i], sizeof(inputs[i])); } else { reader->skip(sizeof(SkSL::Program::Inputs)); } @@ -104,15 +102,24 @@ static inline void UnpackCachedShaders(SkReader32* reader, } meta->fAttributeNames.resize(reader->readInt()); - for (int i = 0; i < meta->fAttributeNames.count(); ++i) { - size_t stringLen = 0; - const char* string = reader->readString(&stringLen); - meta->fAttributeNames[i] = SkSL::String(string, stringLen); + for (auto& attr : meta->fAttributeNames) { + size_t attrLen = 0; + const char* attrName = static_cast(reader->skipByteArray(&attrLen)); + if (attrName) { + attr.assign(attrName, attrLen); + } } meta->fHasCustomColorOutput = reader->readBool(); meta->fHasSecondaryColorOutput = reader->readBool(); } + + if (!reader->isValid()) { + for (int i = 0; i < kGrShaderTypeCount; ++i) { + shaders[i].clear(); + } + } + return reader->isValid(); } } diff --git a/src/gpu/GrPrimitiveProcessor.cpp b/src/gpu/GrPrimitiveProcessor.cpp index b2c75c0d2963c..60ecb50c1b3bf 100644 --- a/src/gpu/GrPrimitiveProcessor.cpp +++ b/src/gpu/GrPrimitiveProcessor.cpp @@ -7,19 +7,22 @@ #include "src/gpu/GrPrimitiveProcessor.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" /** - * We specialize the vertex or fragment coord transform code for these matrix types. - * Some specializations are only applied when the coord transform is applied in the fragment - * shader. + * We specialize the vertex or fragment coord transform code for these matrix types, and where + * the transform code is applied. */ -enum MatrixType { - kNone_MatrixType = 0, // Used only in FS for explicitly sampled FPs - kScaleTranslate_MatrixType = 1, // Used only in FS for explicitly sampled FPs - kNoPersp_MatrixType = 2, - kGeneral_MatrixType = 3, +enum SampleFlag { + kExplicitlySampled_Flag = 0b00001, // GrFP::isSampledWithExplicitCoords() + + kNone_SampleMatrix_Flag = 0b00100, // GrFP::sampleUsage()::hasMatrix() == false + kUniform_SampleMatrix_Flag = 0b01000, // GrFP::sampleUsage()::hasUniformMatrix() + kVariable_SampleMatrix_Flag = 0b01100, // GrFP::sampleUsage()::hasVariableMatrix() + + // Currently, sample(matrix) only specializes on no-perspective or general. + // FIXME add new flags as more matrix types are supported. + kPersp_Matrix_Flag = 0b10000, // GrFP::sampleUsage()::fHasPerspective }; GrPrimitiveProcessor::GrPrimitiveProcessor(ClassID classID) : GrProcessor(classID) {} @@ -30,29 +33,31 @@ const GrPrimitiveProcessor::TextureSampler& GrPrimitiveProcessor::textureSampler } uint32_t GrPrimitiveProcessor::computeCoordTransformsKey(const GrFragmentProcessor& fp) const { - // This is highly coupled with the code in GrGLSLGeometryProcessor::emitTransforms(). - SkASSERT(fp.numCoordTransforms() * 2 <= 32); - uint32_t totalKey = 0; - for (int t = 0; t < fp.numCoordTransforms(); ++t) { - uint32_t key = 0; - const GrCoordTransform& coordTransform = fp.coordTransform(t); - if (fp.isSampledWithExplicitCoords() && coordTransform.isNoOp()) { - key = kNone_MatrixType; - } else if (fp.isSampledWithExplicitCoords() && coordTransform.matrix().isScaleTranslate()) { - key = kScaleTranslate_MatrixType; - } else if (!coordTransform.matrix().hasPerspective()) { - key = kNoPersp_MatrixType; - } else { - // Note that we can also have homogeneous varyings as a result of a GP local matrix or - // homogeneous local coords generated by GP. We're relying on the GP to include any - // variability in those in its key. - key = kGeneral_MatrixType; - } - key <<= 2*t; - SkASSERT(0 == (totalKey & key)); // keys for each transform ought not to overlap - totalKey |= key; + // This is highly coupled with the code in GrGLSLGeometryProcessor::collectTransforms(). + // At this point, all effects do not use really coord transforms; they may implicitly report + // a noop coord transform but this does not impact the key. + + uint32_t key = 0; + if (fp.isSampledWithExplicitCoords()) { + key |= kExplicitlySampled_Flag; } - return totalKey; + + switch(fp.sampleUsage().fKind) { + case SkSL::SampleUsage::Kind::kNone: + key |= kNone_SampleMatrix_Flag; + break; + case SkSL::SampleUsage::Kind::kUniform: + key |= kUniform_SampleMatrix_Flag; + break; + case SkSL::SampleUsage::Kind::kVariable: + key |= kVariable_SampleMatrix_Flag; + break; + } + if (fp.sampleUsage().fHasPerspective) { + key |= kPersp_Matrix_Flag; + } + + return key; } /////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/GrPrimitiveProcessor.h b/src/gpu/GrPrimitiveProcessor.h index 40d4c93d586ea..09face17076e3 100644 --- a/src/gpu/GrPrimitiveProcessor.h +++ b/src/gpu/GrPrimitiveProcessor.h @@ -14,8 +14,6 @@ #include "src/gpu/GrShaderVar.h" #include "src/gpu/GrSwizzle.h" -class GrCoordTransform; - /* * The GrPrimitiveProcessor represents some kind of geometric primitive. This includes the shape * of the primitive and the inherent color of the primitive. The GrPrimitiveProcessor is @@ -36,6 +34,7 @@ class GrCoordTransform; */ class GrGLSLPrimitiveProcessor; +class GrGLSLUniformHandler; /** * GrPrimitiveProcessor defines an interface which all subclasses must implement. All @@ -56,12 +55,14 @@ class GrPrimitiveProcessor : public GrProcessor, public GrNonAtomicRefcompatibleWithCoverageAsAlpha()) { fCompatibleWithCoverageAsAlpha = false; } - if (fp->usesLocalCoords()) { + if (fp->sampleCoordsDependOnLocalCoords()) { fUsesLocalCoords = true; } } diff --git a/src/gpu/GrProcessorSet.cpp b/src/gpu/GrProcessorSet.cpp index fe64cb9233daa..cc1042417d118 100644 --- a/src/gpu/GrProcessorSet.cpp +++ b/src/gpu/GrProcessorSet.cpp @@ -69,8 +69,9 @@ GrProcessorSet::GrProcessorSet(GrProcessorSet&& that) fFragmentProcessors[i] = std::move(that.fFragmentProcessors[i + that.fFragmentProcessorOffset]); } - that.fColorFragmentProcessorCnt = 0; that.fFragmentProcessors.reset(0); + that.fColorFragmentProcessorCnt = 0; + that.fFragmentProcessorOffset = 0; } GrProcessorSet::~GrProcessorSet() { @@ -182,14 +183,14 @@ GrProcessorSet::Analysis GrProcessorSet::finalize( if (!fps[i]->compatibleWithCoverageAsAlpha()) { analysis.fCompatibleWithCoverageAsAlpha = false; } - coverageUsesLocalCoords |= fps[i]->usesLocalCoords(); + coverageUsesLocalCoords |= fps[i]->sampleCoordsDependOnLocalCoords(); } if (clip) { hasCoverageFP = hasCoverageFP || clip->numClipCoverageFragmentProcessors(); for (int i = 0; i < clip->numClipCoverageFragmentProcessors(); ++i) { const GrFragmentProcessor* clipFP = clip->clipCoverageFragmentProcessor(i); analysis.fCompatibleWithCoverageAsAlpha &= clipFP->compatibleWithCoverageAsAlpha(); - coverageUsesLocalCoords |= clipFP->usesLocalCoords(); + coverageUsesLocalCoords |= clipFP->sampleCoordsDependOnLocalCoords(); } } int colorFPsToEliminate = colorAnalysis.initialProcessorsToEliminate(overrideInputColor); diff --git a/src/gpu/GrProcessorUnitTest.cpp b/src/gpu/GrProcessorUnitTest.cpp index f584171d8e4c0..e4e4b980c7d78 100644 --- a/src/gpu/GrProcessorUnitTest.cpp +++ b/src/gpu/GrProcessorUnitTest.cpp @@ -81,7 +81,7 @@ SkTArray* GrXPFactoryTestFactory::GetFactories() * we verify the count is as expected. If a new factory is added, then these numbers must be * manually adjusted. */ -static const int kFPFactoryCount = 35; +static const int kFPFactoryCount = 34; static const int kGPFactoryCount = 14; static const int kXPFactoryCount = 4; diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp index a25c396fbc31e..80456c5c893b6 100644 --- a/src/gpu/GrProxyProvider.cpp +++ b/src/gpu/GrProxyProvider.cpp @@ -9,7 +9,7 @@ #include "include/core/SkBitmap.h" #include "include/core/SkImage.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/GrImageContext.h" #include "include/private/GrResourceKey.h" #include "include/private/GrSingleOwner.h" @@ -58,7 +58,7 @@ bool GrProxyProvider::assignUniqueKeyToProxy(const GrUniqueKey& key, GrTexturePr #ifdef SK_DEBUG { - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (direct) { GrResourceCache* resourceCache = direct->priv().getResourceCache(); // If there is already a GrResource with this key then the caller has violated the @@ -127,7 +127,7 @@ sk_sp GrProxyProvider::testingOnly_createInstantiatedProxy( if (this->isAbandoned()) { return nullptr; } - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (!direct) { return nullptr; } @@ -212,7 +212,7 @@ sk_sp GrProxyProvider::findOrCreateProxyByUniqueKey(const GrUniq return result; } - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (!direct) { return nullptr; } @@ -296,7 +296,7 @@ sk_sp GrProxyProvider::createProxyFromBitmap(const SkBitmap& bit return nullptr; } - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (direct) { GrResourceProvider* resourceProvider = direct->priv().resourceProvider(); @@ -474,7 +474,7 @@ sk_sp GrProxyProvider::createCompressedTextureProxy( return nullptr; } - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (direct) { GrResourceProvider* resourceProvider = direct->priv().resourceProvider(); // In order to reuse code we always create a lazy proxy. When we aren't in DDL mode however @@ -490,15 +490,15 @@ sk_sp GrProxyProvider::wrapBackendTexture(const GrBackendTexture GrWrapOwnership ownership, GrWrapCacheable cacheable, GrIOType ioType, - ReleaseProc releaseProc, - ReleaseContext releaseCtx) { + sk_sp releaseHelper) { SkASSERT(ioType != kWrite_GrIOType); + if (this->isAbandoned()) { return nullptr; } // This is only supported on a direct GrContext. - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (!direct) { return nullptr; } @@ -511,8 +511,8 @@ sk_sp GrProxyProvider::wrapBackendTexture(const GrBackendTexture return nullptr; } - if (releaseProc) { - tex->setRelease(releaseProc, releaseCtx); + if (releaseHelper) { + tex->setRelease(std::move(releaseHelper)); } SkASSERT(!tex->asRenderTarget()); // Strictly a GrTexture @@ -523,17 +523,17 @@ sk_sp GrProxyProvider::wrapBackendTexture(const GrBackendTexture this->isDDLProvider())); } -sk_sp GrProxyProvider::wrapCompressedBackendTexture(const GrBackendTexture& beTex, - GrWrapOwnership ownership, - GrWrapCacheable cacheable, - ReleaseProc releaseProc, - ReleaseContext releaseCtx) { +sk_sp GrProxyProvider::wrapCompressedBackendTexture( + const GrBackendTexture& beTex, + GrWrapOwnership ownership, + GrWrapCacheable cacheable, + sk_sp releaseHelper) { if (this->isAbandoned()) { return nullptr; } // This is only supported on a direct GrContext. - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (!direct) { return nullptr; } @@ -546,8 +546,8 @@ sk_sp GrProxyProvider::wrapCompressedBackendTexture(const GrBack return nullptr; } - if (releaseProc) { - tex->setRelease(releaseProc, releaseCtx); + if (releaseHelper) { + tex->setRelease(std::move(releaseHelper)); } SkASSERT(!tex->asRenderTarget()); // Strictly a GrTexture @@ -563,14 +563,13 @@ sk_sp GrProxyProvider::wrapRenderableBackendTexture( int sampleCnt, GrWrapOwnership ownership, GrWrapCacheable cacheable, - ReleaseProc releaseProc, - ReleaseContext releaseCtx) { + sk_sp releaseHelper) { if (this->isAbandoned()) { return nullptr; } // This is only supported on a direct GrContext. - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (!direct) { return nullptr; } @@ -588,8 +587,8 @@ sk_sp GrProxyProvider::wrapRenderableBackendTexture( return nullptr; } - if (releaseProc) { - tex->setRelease(releaseProc, releaseCtx); + if (releaseHelper) { + tex->setRelease(std::move(releaseHelper)); } SkASSERT(tex->asRenderTarget()); // A GrTextureRenderTarget @@ -602,14 +601,13 @@ sk_sp GrProxyProvider::wrapRenderableBackendTexture( sk_sp GrProxyProvider::wrapBackendRenderTarget( const GrBackendRenderTarget& backendRT, - ReleaseProc releaseProc, - ReleaseContext releaseCtx) { + sk_sp releaseHelper) { if (this->isAbandoned()) { return nullptr; } // This is only supported on a direct GrContext. - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (!direct) { return nullptr; } @@ -621,8 +619,8 @@ sk_sp GrProxyProvider::wrapBackendRenderTarget( return nullptr; } - if (releaseProc) { - rt->setRelease(releaseProc, releaseCtx); + if (releaseHelper) { + rt->setRelease(std::move(releaseHelper)); } SkASSERT(!rt->asTexture()); // A GrRenderTarget that's not textureable @@ -640,7 +638,7 @@ sk_sp GrProxyProvider::wrapBackendTextureAsRenderTarget( } // This is only supported on a direct GrContext. - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (!direct) { return nullptr; } @@ -667,7 +665,7 @@ sk_sp GrProxyProvider::wrapVulkanSecondaryCBAsRenderTarget( } // This is only supported on a direct GrContext. - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (!direct) { return nullptr; } @@ -847,7 +845,7 @@ void GrProxyProvider::processInvalidUniqueKeyImpl(const GrUniqueKey& key, GrText // proxy's unique key. We must do it in this order because 'key' may alias the proxy's key. sk_sp invalidGpuResource; if (InvalidateGPUResource::kYes == invalidateGPUResource) { - GrContext* direct = fImageContext->priv().asDirectContext(); + auto direct = fImageContext->asDirectContext(); if (direct) { GrResourceProvider* resourceProvider = direct->priv().resourceProvider(); invalidGpuResource = resourceProvider->findByUniqueKey(key); @@ -870,7 +868,7 @@ void GrProxyProvider::processInvalidUniqueKeyImpl(const GrUniqueKey& key, GrText } GrDDLProvider GrProxyProvider::isDDLProvider() const { - return fImageContext->priv().asDirectContext() ? GrDDLProvider::kNo : GrDDLProvider::kYes; + return fImageContext->asDirectContext() ? GrDDLProvider::kNo : GrDDLProvider::kYes; } uint32_t GrProxyProvider::contextID() const { @@ -908,5 +906,5 @@ void GrProxyProvider::removeAllUniqueKeys() { } bool GrProxyProvider::renderingDirectly() const { - return fImageContext->priv().asDirectContext(); + return fImageContext->asDirectContext(); } diff --git a/src/gpu/GrProxyProvider.h b/src/gpu/GrProxyProvider.h index 8a8b1e12f6ed7..e1f681f04b6ef 100644 --- a/src/gpu/GrProxyProvider.h +++ b/src/gpu/GrProxyProvider.h @@ -115,12 +115,12 @@ class GrProxyProvider { GrWrapOwnership, GrWrapCacheable, GrIOType, - ReleaseProc = nullptr, - ReleaseContext = nullptr); + sk_sp = nullptr); - sk_sp wrapCompressedBackendTexture(const GrBackendTexture&, GrWrapOwnership, - GrWrapCacheable, ReleaseProc = nullptr, - ReleaseContext = nullptr); + sk_sp wrapCompressedBackendTexture(const GrBackendTexture&, + GrWrapOwnership, + GrWrapCacheable, + sk_sp releaseHelper); /* * Create a texture proxy that wraps a backend texture and is both texture-able and renderable @@ -129,15 +129,13 @@ class GrProxyProvider { int sampleCnt, GrWrapOwnership, GrWrapCacheable, - ReleaseProc = nullptr, - ReleaseContext = nullptr); + sk_sp releaseHelper); /* * Create a render target proxy that wraps a backend render target */ sk_sp wrapBackendRenderTarget(const GrBackendRenderTarget&, - ReleaseProc = nullptr, - ReleaseContext = nullptr); + sk_sp releaseHelper); /* * Create a render target proxy that wraps a backend texture diff --git a/src/gpu/GrRecordingContext.cpp b/src/gpu/GrRecordingContext.cpp index 41b0bce98eb13..072ef4cea92f6 100644 --- a/src/gpu/GrRecordingContext.cpp +++ b/src/gpu/GrRecordingContext.cpp @@ -5,13 +5,14 @@ * found in the LICENSE file. */ -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/gpu/GrContext.h" #include "include/gpu/GrContextThreadSafeProxy.h" #include "src/core/SkArenaAlloc.h" #include "src/gpu/GrAuditTrail.h" #include "src/gpu/GrCaps.h" +#include "src/gpu/GrContextThreadSafeProxyPriv.h" #include "src/gpu/GrDrawingManager.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrProgramDesc.h" @@ -43,29 +44,6 @@ GrRecordingContext::GrRecordingContext(sk_sp proxy) GrRecordingContext::~GrRecordingContext() = default; -bool GrRecordingContext::init() { - - if (!INHERITED::init()) { - return false; - } - - auto overBudget = [this]() { - if (GrContext* direct = this->priv().asDirectContext(); direct != nullptr) { - - // TODO: move text blob draw calls below context - // TextBlobs are drawn at the SkGpuDevice level, therefore they cannot rely on - // GrRenderTargetContext to perform a necessary flush. The solution is to move drawText - // calls to below the GrContext level, but this is not trivial because they call - // drawPath on SkGpuDevice. - direct->flushAndSubmit(); - } - }; - - fTextBlobCache.reset(new GrTextBlobCache(overBudget, this->contextID())); - - return true; -} - void GrRecordingContext::setupDrawingManager(bool sortOpsTasks, bool reduceOpsTaskSplitting) { GrPathRendererChain::Options prcOptions; prcOptions.fAllowPathMaskCaching = this->options().fAllowPathMaskCaching; @@ -87,14 +65,8 @@ void GrRecordingContext::setupDrawingManager(bool sortOpsTasks, bool reduceOpsTa prcOptions.fGpuPathRenderers &= ~GpuPathRenderers::kSmall; } - GrTextContext::Options textContextOptions; - textContextOptions.fMaxDistanceFieldFontSize = this->options().fGlyphsAsPathsFontSize; - textContextOptions.fMinDistanceFieldFontSize = this->options().fMinDistanceFieldFontSize; - textContextOptions.fDistanceFieldVerticesAlwaysHaveW = false; - fDrawingManager.reset(new GrDrawingManager(this, prcOptions, - textContextOptions, sortOpsTasks, reduceOpsTaskSplitting)); } @@ -102,13 +74,17 @@ void GrRecordingContext::setupDrawingManager(bool sortOpsTasks, bool reduceOpsTa void GrRecordingContext::abandonContext() { INHERITED::abandonContext(); - fTextBlobCache->freeAll(); + this->destroyDrawingManager(); } GrDrawingManager* GrRecordingContext::drawingManager() { return fDrawingManager.get(); } +void GrRecordingContext::destroyDrawingManager() { + fDrawingManager.reset(); +} + GrRecordingContext::Arenas::Arenas(GrOpMemoryPool* opMemoryPool, SkArenaAlloc* recordTimeAllocator) : fOpMemoryPool(opMemoryPool) , fRecordTimeAllocator(recordTimeAllocator) { @@ -149,11 +125,11 @@ GrRecordingContext::OwnedArenas&& GrRecordingContext::detachArenas() { } GrTextBlobCache* GrRecordingContext::getTextBlobCache() { - return fTextBlobCache.get(); + return fThreadSafeProxy->priv().getTextBlobCache(); } const GrTextBlobCache* GrRecordingContext::getTextBlobCache() const { - return fTextBlobCache.get(); + return fThreadSafeProxy->priv().getTextBlobCache(); } void GrRecordingContext::addOnFlushCallbackObject(GrOnFlushCallbackObject* onFlushCBObject) { diff --git a/src/gpu/GrRecordingContextPriv.h b/src/gpu/GrRecordingContextPriv.h index 4337d3f3c4bc4..5a763e75610c6 100644 --- a/src/gpu/GrRecordingContextPriv.h +++ b/src/gpu/GrRecordingContextPriv.h @@ -8,7 +8,8 @@ #ifndef GrRecordingContextPriv_DEFINED #define GrRecordingContextPriv_DEFINED -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" +#include "src/gpu/text/GrSDFTOptions.h" /** Class that exposes methods to GrRecordingContext that are only intended for use internal to Skia. This class is purely a privileged window into GrRecordingContext. It should never have @@ -27,14 +28,11 @@ class GrRecordingContextPriv { GrImageContext* asImageContext() { return fContext->asImageContext(); } GrRecordingContext* asRecordingContext() { return fContext->asRecordingContext(); } - GrContext* asDirectContext() { return fContext->asDirectContext(); } // from GrImageContext GrProxyProvider* proxyProvider() { return fContext->proxyProvider(); } const GrProxyProvider* proxyProvider() const { return fContext->proxyProvider(); } - bool abandoned() const { return fContext->abandoned(); } - /** This is only useful for debug purposes */ SkDEBUGCODE(GrSingleOwner* singleOwner() const { return fContext->singleOwner(); } ) @@ -102,6 +100,10 @@ class GrRecordingContextPriv { return &fContext->fStats; } + GrSDFTOptions SDFTOptions() const { + return {this->options().fMinDistanceFieldFontSize, this->options().fGlyphsAsPathsFontSize}; + } + private: explicit GrRecordingContextPriv(GrRecordingContext* context) : fContext(context) {} GrRecordingContextPriv(const GrRecordingContextPriv&); // unimpl diff --git a/src/gpu/GrReducedClip.cpp b/src/gpu/GrReducedClip.cpp index 0e01895f0a7d7..533132edc7cb1 100644 --- a/src/gpu/GrReducedClip.cpp +++ b/src/gpu/GrReducedClip.cpp @@ -25,7 +25,9 @@ #include "src/gpu/effects/GrConvexPolyEffect.h" #include "src/gpu/effects/GrRRectEffect.h" #include "src/gpu/effects/generated/GrAARectEffect.h" +#include "src/gpu/effects/generated/GrDeviceSpaceEffect.h" #include "src/gpu/geometry/GrStyledShape.h" +#include "src/shaders/SkShaderBase.h" /** * There are plenty of optimizations that could be added here. Maybe flips could be folded into @@ -115,6 +117,13 @@ GrReducedClip::GrReducedClip(const SkClipStack& stack, const SkRect& queryBounds // Now that we have determined the bounds to use and filtered out the trivial cases, call // the helper that actually walks the stack. this->walkStack(stack, tighterQuery); + + if (fInitialState == InitialState::kAllOut && fMaskElements.isEmpty()) { + // The clip starts with no coverage and there are no elements to add coverage with + // expanding ops. We ignore the AAClipRectGenID since it is an implied intersection. + this->makeEmpty(); + return; + } } if (SK_InvalidGenID != fAAClipRectGenID && // Is there an AA clip rect? @@ -173,6 +182,18 @@ void GrReducedClip::walkStack(const SkClipStack& stack, const SkRect& queryBound break; } + if (element->getDeviceSpaceType() == Element::DeviceSpaceType::kShader) { + if (fShader) { + // Combine multiple shaders together with src-in blending. This works because all + // shaders are effectively intersections (difference ops have been modified to be + // 1 - alpha already). + fShader = SkShaders::Blend(SkBlendMode::kSrcIn, element->refShader(), fShader); + } else { + fShader = element->refShader(); + } + continue; + } + bool skippable = false; bool isFlip = false; // does this op just flip the in/out state of every point in the bounds @@ -480,6 +501,8 @@ void GrReducedClip::walkStack(const SkClipStack& stack, const SkRect& queryBound } GrReducedClip::ClipResult GrReducedClip::clipInsideElement(const Element* element) { + SkASSERT(element->getDeviceSpaceType() != Element::DeviceSpaceType::kShader); + SkIRect elementIBounds; if (!element->isAA()) { element->getBounds().round(&elementIBounds); @@ -523,12 +546,17 @@ GrReducedClip::ClipResult GrReducedClip::clipInsideElement(const Element* elemen case Element::DeviceSpaceType::kPath: return this->addAnalyticFP(element->getDeviceSpacePath(), Invert(element->isInverseFilled()), GrAA(element->isAA())); + + case Element::DeviceSpaceType::kShader: + SkUNREACHABLE; } SK_ABORT("Unexpected DeviceSpaceType"); } GrReducedClip::ClipResult GrReducedClip::clipOutsideElement(const Element* element) { + SkASSERT(element->getDeviceSpaceType() != Element::DeviceSpaceType::kShader); + switch (element->getDeviceSpaceType()) { case Element::DeviceSpaceType::kEmpty: return ClipResult::kMadeEmpty; @@ -589,6 +617,9 @@ GrReducedClip::ClipResult GrReducedClip::clipOutsideElement(const Element* eleme case Element::DeviceSpaceType::kPath: return this->addAnalyticFP(element->getDeviceSpacePath(), Invert(!element->isInverseFilled()), GrAA(element->isAA())); + + case Element::DeviceSpaceType::kShader: + SkUNREACHABLE; } SK_ABORT("Unexpected DeviceSpaceType"); @@ -620,9 +651,10 @@ GrReducedClip::ClipResult GrReducedClip::addAnalyticFP(const SkRect& deviceSpace return ClipResult::kNotClipped; } - fAnalyticFPs.push_back(GrAARectEffect::Make(GetClipEdgeType(invert, aa), deviceSpaceRect)); - SkASSERT(fAnalyticFPs.back()); + fAnalyticFP = GrAARectEffect::Make(std::move(fAnalyticFP), GetClipEdgeType(invert, aa), + deviceSpaceRect); + SkASSERT(fAnalyticFP != nullptr); return ClipResult::kClipped; } @@ -632,9 +664,12 @@ GrReducedClip::ClipResult GrReducedClip::addAnalyticFP(const SkRRect& deviceSpac return ClipResult::kNotClipped; } - if (auto fp = GrRRectEffect::Make(GetClipEdgeType(invert, aa), deviceSpaceRRect, - *fCaps->shaderCaps())) { - fAnalyticFPs.push_back(std::move(fp)); + // Combine this analytic effect with the previous effect in the stack. + bool success; + std::tie(success, fAnalyticFP) = GrRRectEffect::Make(std::move(fAnalyticFP), + GetClipEdgeType(invert, aa), + deviceSpaceRRect, *fCaps->shaderCaps()); + if (success) { return ClipResult::kClipped; } @@ -650,8 +685,12 @@ GrReducedClip::ClipResult GrReducedClip::addAnalyticFP(const SkPath& deviceSpace return ClipResult::kNotClipped; } - if (auto fp = GrConvexPolyEffect::Make(GetClipEdgeType(invert, aa), deviceSpacePath)) { - fAnalyticFPs.push_back(std::move(fp)); + // Combine this analytic effect with the previous effect in the stack. + bool success; + std::tie(success, fAnalyticFP) = GrConvexPolyEffect::Make(std::move(fAnalyticFP), + GetClipEdgeType(invert, aa), + deviceSpacePath); + if (success) { return ClipResult::kClipped; } @@ -673,6 +712,7 @@ void GrReducedClip::makeEmpty() { fAAClipRectGenID = SK_InvalidGenID; fWindowRects.reset(); fMaskElements.reset(); + fShader.reset(); fInitialState = InitialState::kAllOut; } @@ -742,7 +782,7 @@ static void draw_element(GrRenderTargetContext* rtc, bool GrReducedClip::drawAlphaClipMask(GrRenderTargetContext* rtc) const { // The texture may be larger than necessary, this rect represents the part of the texture // we populate with a rasterization of the clip. - GrFixedClip clip(SkIRect::MakeWH(fScissor.width(), fScissor.height())); + GrFixedClip clip(rtc->dimensions(), SkIRect::MakeWH(fScissor.width(), fScissor.height())); if (!fWindowRects.empty()) { clip.setWindowRectangles(fWindowRects.makeOffset(-fScissor.left(), -fScissor.top()), @@ -850,21 +890,59 @@ bool GrReducedClip::drawStencilClipMask(GrRecordingContext* context, return true; } +static int count_fp_recursive(GrFragmentProcessor* fp) { + int count = 0; + if (fp != nullptr) { + count += 1; // count self + for (int index=0; index < fp->numChildProcessors(); ++index) { + count += count_fp_recursive(&fp->childProcessor(index)); // count children + } + } + return count; +} + +int GrReducedClip::numAnalyticFPs() const { + return fCCPRClipPaths.size() + count_fp_recursive(fAnalyticFP.get()); +} + std::unique_ptr GrReducedClip::finishAndDetachAnalyticFPs( + GrRecordingContext* context, const SkMatrixProvider& matrixProvider, GrCoverageCountingPathRenderer* ccpr, uint32_t opsTaskID) { - // Make sure finishAndDetachAnalyticFPs hasn't been called already. - SkDEBUGCODE(for (const auto& fp : fAnalyticFPs) { SkASSERT(fp); }) - - if (!fCCPRClipPaths.empty()) { - fAnalyticFPs.reserve(fAnalyticFPs.count() + fCCPRClipPaths.count()); - for (const SkPath& ccprClipPath : fCCPRClipPaths) { - SkASSERT(ccpr); - SkASSERT(fHasScissor); - auto fp = ccpr->makeClipProcessor(opsTaskID, ccprClipPath, fScissor, *fCaps); - fAnalyticFPs.push_back(std::move(fp)); + // Combine the analytic FP with any CCPR clip processors. + std::unique_ptr clipFP = std::move(fAnalyticFP); + + for (const SkPath& ccprClipPath : fCCPRClipPaths) { + SkASSERT(ccpr); + SkASSERT(fHasScissor); + clipFP = ccpr->makeClipProcessor(std::move(clipFP), opsTaskID, ccprClipPath, + fScissor, *fCaps); + } + fCCPRClipPaths.reset(); + + // Create the shader. + std::unique_ptr shaderFP; + if (fShader != nullptr) { + static const GrColorInfo kCoverageColorInfo{GrColorType::kUnknown, kPremul_SkAlphaType, + nullptr}; + GrFPArgs args(context, matrixProvider, kNone_SkFilterQuality, &kCoverageColorInfo); + shaderFP = as_SB(fShader)->asFragmentProcessor(args); + if (shaderFP != nullptr) { + shaderFP = GrFragmentProcessor::SwizzleOutput(std::move(shaderFP), GrSwizzle::AAAA()); } - fCCPRClipPaths.reset(); } - return GrFragmentProcessor::RunInSeries(fAnalyticFPs.begin(), fAnalyticFPs.count()); + // Combine the clip and shader FPs using RunInSeries. (RunInSeries will automatically return the + // input as-is if we only have one.) + SkSTArray<2, std::unique_ptr> seriesFPs; + if (clipFP != nullptr) { + seriesFPs.push_back(std::move(clipFP)); + } + if (shaderFP != nullptr) { + seriesFPs.push_back(std::move(shaderFP)); + } + + return seriesFPs.empty() + ? nullptr + : GrFragmentProcessor::RunInSeries(&seriesFPs.front(), seriesFPs.size()); } + diff --git a/src/gpu/GrReducedClip.h b/src/gpu/GrReducedClip.h index ca95bd09949e6..bcc45a0702eae 100644 --- a/src/gpu/GrReducedClip.h +++ b/src/gpu/GrReducedClip.h @@ -52,6 +52,13 @@ class GrReducedClip { */ bool hasScissor() const { return fHasScissor; } + /** + * Indicates if there is a clip shader, representing the merge of all shader elements of the + * original stack. + */ + bool hasShader() const { return SkToBool(fShader); } + sk_sp shader() const { SkASSERT(fShader); return fShader; } + /** * If nonempty, the clip mask is not valid inside these windows and the caller must clip them * out using the window rectangles GPU extension. @@ -85,7 +92,7 @@ class GrReducedClip { bool drawAlphaClipMask(GrRenderTargetContext*) const; bool drawStencilClipMask(GrRecordingContext*, GrRenderTargetContext*) const; - int numAnalyticFPs() const { return fAnalyticFPs.count() + fCCPRClipPaths.count(); } + int numAnalyticFPs() const; /** * Called once the client knows the ID of the opsTask that the clip FPs will operate in. This @@ -97,6 +104,7 @@ class GrReducedClip { * may cause flushes or otherwise change which opsTask the actual draw is going into. */ std::unique_ptr finishAndDetachAnalyticFPs( + GrRecordingContext*, const SkMatrixProvider& matrixProvider, GrCoverageCountingPathRenderer*, uint32_t opsTaskID); private: @@ -144,8 +152,11 @@ class GrReducedClip { ElementList fMaskElements; uint32_t fMaskGenID; bool fMaskRequiresAA; - SkSTArray<4, std::unique_ptr> fAnalyticFPs; + std::unique_ptr fAnalyticFP; SkSTArray<4, SkPath> fCCPRClipPaths; // Will convert to FPs once we have an opsTask ID for CCPR. + // Will be the combination of all kShader elements or null if there's no clip shader. + // Does not count against the analytic FP limit. + sk_sp fShader; }; #endif diff --git a/src/gpu/GrRenderTargetContext.cpp b/src/gpu/GrRenderTargetContext.cpp index cdbc65dad2e99..ab69c8a6291e3 100644 --- a/src/gpu/GrRenderTargetContext.cpp +++ b/src/gpu/GrRenderTargetContext.cpp @@ -10,8 +10,9 @@ #include "include/core/SkDrawable.h" #include "include/core/SkVertices.h" #include "include/gpu/GrBackendSemaphore.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/GrImageContext.h" -#include "include/private/GrRecordingContext.h" #include "include/private/SkShadowFlags.h" #include "include/utils/SkShadowUtils.h" #include "src/core/SkAutoPixmapStorage.h" @@ -20,26 +21,24 @@ #include "src/core/SkGlyphRunPainter.h" #include "src/core/SkLatticeIter.h" #include "src/core/SkMatrixPriv.h" +#include "src/core/SkMatrixProvider.h" #include "src/core/SkRRectPriv.h" #include "src/core/SkSurfacePriv.h" -#include "src/core/SkYUVMath.h" #include "src/gpu/GrAppliedClip.h" #include "src/gpu/GrAuditTrail.h" #include "src/gpu/GrBlurUtils.h" #include "src/gpu/GrCaps.h" -#include "src/gpu/GrClientMappedBufferManager.h" +#include "src/gpu/GrClip.h" #include "src/gpu/GrColor.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDataUtils.h" #include "src/gpu/GrDrawingManager.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrGpuResourcePriv.h" #include "src/gpu/GrImageContextPriv.h" #include "src/gpu/GrImageInfo.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrPathRenderer.h" #include "src/gpu/GrProxyProvider.h" -#include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTarget.h" #include "src/gpu/GrRenderTargetContextPriv.h" #include "src/gpu/GrResourceProvider.h" @@ -49,13 +48,11 @@ #include "src/gpu/SkGr.h" #include "src/gpu/effects/GrBicubicEffect.h" #include "src/gpu/effects/GrRRectEffect.h" -#include "src/gpu/effects/generated/GrColorMatrixFragmentProcessor.h" #include "src/gpu/geometry/GrQuad.h" #include "src/gpu/geometry/GrQuadUtils.h" #include "src/gpu/geometry/GrStyledShape.h" #include "src/gpu/ops/GrAtlasTextOp.h" #include "src/gpu/ops/GrClearOp.h" -#include "src/gpu/ops/GrClearStencilClipOp.h" #include "src/gpu/ops/GrDrawAtlasOp.h" #include "src/gpu/ops/GrDrawOp.h" #include "src/gpu/ops/GrDrawVerticesOp.h" @@ -70,7 +67,8 @@ #include "src/gpu/ops/GrStencilPathOp.h" #include "src/gpu/ops/GrStrokeRectOp.h" #include "src/gpu/ops/GrTextureOp.h" -#include "src/gpu/text/GrTextContext.h" +#include "src/gpu/text/GrSDFTOptions.h" +#include "src/gpu/text/GrTextBlobCache.h" #include "src/gpu/text/GrTextTarget.h" class GrRenderTargetContext::TextTarget : public GrTextTarget { @@ -78,8 +76,7 @@ class GrRenderTargetContext::TextTarget : public GrTextTarget { TextTarget(GrRenderTargetContext* renderTargetContext) : GrTextTarget(renderTargetContext->width(), renderTargetContext->height(), renderTargetContext->colorInfo()) - , fRenderTargetContext(renderTargetContext) - , fGlyphPainter{*renderTargetContext} {} + , fRenderTargetContext(renderTargetContext) {} void addDrawOp(const GrClip* clip, std::unique_ptr op) override { fRenderTargetContext->addDrawOp(clip, std::move(op)); @@ -111,24 +108,26 @@ class GrRenderTargetContext::TextTarget : public GrTextTarget { return fRenderTargetContext->fContext; } + GrRenderTargetContext* renderTargetContext() override { + return fRenderTargetContext; + } + SkGlyphRunListPainter* glyphPainter() override { - return &fGlyphPainter; + return fRenderTargetContext->glyphPainter(); } private: GrRenderTargetContext* fRenderTargetContext; - SkGlyphRunListPainter fGlyphPainter; - }; #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this->drawingManager()->getContext()) #define ASSERT_SINGLE_OWNER GR_ASSERT_SINGLE_OWNER(this->singleOwner()) #define ASSERT_SINGLE_OWNER_PRIV GR_ASSERT_SINGLE_OWNER(fRenderTargetContext->singleOwner()) -#define RETURN_IF_ABANDONED if (fContext->priv().abandoned()) { return; } -#define RETURN_IF_ABANDONED_PRIV if (fRenderTargetContext->fContext->priv().abandoned()) { return; } -#define RETURN_FALSE_IF_ABANDONED if (fContext->priv().abandoned()) { return false; } -#define RETURN_FALSE_IF_ABANDONED_PRIV if (fRenderTargetContext->fContext->priv().abandoned()) { return false; } -#define RETURN_NULL_IF_ABANDONED if (fContext->priv().abandoned()) { return nullptr; } +#define RETURN_IF_ABANDONED if (fContext->abandoned()) { return; } +#define RETURN_IF_ABANDONED_PRIV if (fRenderTargetContext->fContext->abandoned()) { return; } +#define RETURN_FALSE_IF_ABANDONED if (fContext->abandoned()) { return false; } +#define RETURN_FALSE_IF_ABANDONED_PRIV if (fRenderTargetContext->fContext->abandoned()) { return false; } +#define RETURN_NULL_IF_ABANDONED if (fContext->abandoned()) { return nullptr; } ////////////////////////////////////////////////////////////////////////////// @@ -187,7 +186,7 @@ std::unique_ptr GrRenderTargetContext::Make( // GrRenderTargetContext which need the context will mostly likely fail later on without an // issue. However having this hear adds some reassurance in case there is a path doesn't handle // an abandoned context correctly. It also lets us early out of some extra work. - if (context->priv().abandoned()) { + if (context->abandoned()) { return nullptr; } @@ -294,12 +293,11 @@ std::unique_ptr GrRenderTargetContext::MakeFromBackendTex int sampleCnt, GrSurfaceOrigin origin, const SkSurfaceProps* surfaceProps, - ReleaseProc releaseProc, - ReleaseContext releaseCtx) { + sk_sp releaseHelper) { SkASSERT(sampleCnt > 0); sk_sp proxy(context->priv().proxyProvider()->wrapRenderableBackendTexture( - tex, sampleCnt, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, releaseProc, - releaseCtx)); + tex, sampleCnt, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, + std::move(releaseHelper))); if (!proxy) { return nullptr; } @@ -336,8 +334,13 @@ std::unique_ptr GrRenderTargetContext::MakeFromBackendRen const SkSurfaceProps* surfaceProps, ReleaseProc releaseProc, ReleaseContext releaseCtx) { + sk_sp releaseHelper; + if (releaseProc) { + releaseHelper.reset(new GrRefCntedCallback(releaseProc, releaseCtx)); + } + sk_sp proxy( - context->priv().proxyProvider()->wrapBackendRenderTarget(rt, releaseProc, releaseCtx)); + context->priv().proxyProvider()->wrapBackendRenderTarget(rt, std::move(releaseHelper))); if (!proxy) { return nullptr; } @@ -377,9 +380,10 @@ GrRenderTargetContext::GrRenderTargetContext(GrRecordingContext* context, : GrSurfaceContext(context, std::move(readView), colorType, kPremul_SkAlphaType, std::move(colorSpace)) , fWriteView(std::move(writeView)) - , fOpsTask(sk_ref_sp(this->asSurfaceProxy()->getLastOpsTask())) , fSurfaceProps(SkSurfacePropsCopyOrDefault(surfaceProps)) - , fManagedOpsTask(managedOpsTask) { + , fManagedOpsTask(managedOpsTask) + , fGlyphPainter(*this) { + fOpsTask = sk_ref_sp(context->priv().drawingManager()->getLastOpsTask(this->asSurfaceProxy())); if (fOpsTask) { fOpsTask->addClosedObserver(this); } @@ -393,7 +397,7 @@ GrRenderTargetContext::GrRenderTargetContext(GrRecordingContext* context, #ifdef SK_DEBUG void GrRenderTargetContext::onValidate() const { if (fOpsTask && !fOpsTask->isClosed()) { - SkASSERT(fWriteView.proxy()->getLastRenderTask() == fOpsTask.get()); + SkASSERT(this->drawingManager()->getLastRenderTask(fWriteView.proxy()) == fOpsTask.get()); } } #endif @@ -446,9 +450,34 @@ GrOpsTask* GrRenderTargetContext::getOpsTask() { return fOpsTask.get(); } +static SkColor compute_canonical_color(const SkPaint& paint, bool lcd) { + SkColor canonicalColor = SkPaintPriv::ComputeLuminanceColor(paint); + if (lcd) { + // This is the correct computation for canonicalColor, but there are tons of cases where LCD + // can be modified. For now we just regenerate if any run in a textblob has LCD. + // TODO figure out where all of these modifications are and see if we can incorporate that + // logic at a higher level *OR* use sRGB + //canonicalColor = SkMaskGamma::CanonicalColor(canonicalColor); + + // TODO we want to figure out a way to be able to use the canonical color on LCD text, + // see the note above. We pick a dummy value for LCD text to ensure we always match the + // same key + return SK_ColorTRANSPARENT; + } else { + // A8, though can have mixed BMP text but it shouldn't matter because BMP text won't have + // gamma corrected masks anyways, nor color + U8CPU lum = SkComputeLuminance(SkColorGetR(canonicalColor), + SkColorGetG(canonicalColor), + SkColorGetB(canonicalColor)); + // reduce to our finite number of bits + canonicalColor = SkMaskGamma::CanonicalColor(SkColorSetRGB(lum, lum, lum)); + } + return canonicalColor; +} + void GrRenderTargetContext::drawGlyphRunList(const GrClip* clip, const SkMatrixProvider& matrixProvider, - const SkGlyphRunList& blob) { + const SkGlyphRunList& glyphRunList) { ASSERT_SINGLE_OWNER RETURN_IF_ABANDONED SkDEBUGCODE(this->validate();) @@ -461,9 +490,72 @@ void GrRenderTargetContext::drawGlyphRunList(const GrClip* clip, return; } - GrTextContext* atlasTextContext = this->drawingManager()->getTextContext(); - atlasTextContext->drawGlyphRunList(fContext, fTextTarget.get(), clip, matrixProvider, - fSurfaceProps, blob); + GrSDFTOptions options = fContext->priv().SDFTOptions(); + GrTextBlobCache* textBlobCache = fContext->priv().getTextBlobCache(); + + // Get the first paint to use as the key paint. + const SkPaint& blobPaint = glyphRunList.paint(); + + SkPoint drawOrigin = glyphRunList.origin(); + + SkMaskFilterBase::BlurRec blurRec; + // It might be worth caching these things, but its not clear at this time + // TODO for animated mask filters, this will fill up our cache. We need a safeguard here + const SkMaskFilter* mf = blobPaint.getMaskFilter(); + bool canCache = glyphRunList.canCache() && + !(blobPaint.getPathEffect() || (mf && !as_MFB(mf)->asABlur(&blurRec))); + + // If we're doing linear blending, then we can disable the gamma hacks. + // Otherwise, leave them on. In either case, we still want the contrast boost: + // TODO: Can we be even smarter about mask gamma based on the dest transfer function? + SkScalerContextFlags scalerContextFlags = this->colorInfo().isLinearlyBlended() + ? SkScalerContextFlags::kBoostContrast + : SkScalerContextFlags::kFakeGammaAndBoostContrast; + + sk_sp blob; + GrTextBlob::Key key; + if (canCache) { + bool hasLCD = glyphRunList.anyRunsLCD(); + + // We canonicalize all non-lcd draws to use kUnknown_SkPixelGeometry + SkPixelGeometry pixelGeometry = + hasLCD ? fSurfaceProps.pixelGeometry() : kUnknown_SkPixelGeometry; + + GrColor canonicalColor = compute_canonical_color(blobPaint, hasLCD); + + key.fPixelGeometry = pixelGeometry; + key.fUniqueID = glyphRunList.uniqueID(); + key.fStyle = blobPaint.getStyle(); + key.fHasBlur = SkToBool(mf); + key.fCanonicalColor = canonicalColor; + key.fScalerContextFlags = scalerContextFlags; + blob = textBlobCache->find(key); + } + + const SkMatrix& drawMatrix(matrixProvider.localToDevice()); + if (blob != nullptr && blob->canReuse(blobPaint, blurRec, drawMatrix, drawOrigin)) { + // Reusing the blob. Move it to the front of LRU cache. + textBlobCache->makeMRU(blob.get()); + } else { + // Build or Rebuild the GrTextBlob + if (blob != nullptr) { + // We have to remake the blob because changes may invalidate our masks. + // TODO we could probably get away with reuse most of the time if the pointer is unique, + // but we'd have to clear the SubRun information + textBlobCache->remove(blob.get()); + } + if (canCache) { + blob = textBlobCache->makeCachedBlob(glyphRunList, key, blurRec, drawMatrix); + } else { + blob = GrTextBlob::Make(glyphRunList, drawMatrix); + } + bool supportsSDFT = fContext->priv().caps()->shaderCaps()->supportsDistanceFieldText(); + fGlyphPainter.processGlyphRunList( + glyphRunList, drawMatrix, fSurfaceProps, supportsSDFT, options, blob.get()); + } + + blob->insertOpsIntoTarget( + fTextTarget.get(), fSurfaceProps, blobPaint, clip, matrixProvider, drawOrigin); } void GrRenderTargetContext::discard() { @@ -500,30 +592,35 @@ void GrRenderTargetContext::internalClear(const SkIRect* scissor, SkDEBUGCODE(this->validate();) GR_CREATE_TRACE_MARKER_CONTEXT("GrRenderTargetContext", "clear", fContext); - // The clear will be fullscreen if no scissor is provided, or if the scissor is larger than - // the logical bounds of the render target, or if the special flag was provided that allows - // partial clears to upgrade to full (because it's a scratch resource and the caller knows - // anything outside the scissor doesn't matter, but if full screen clears aren't free, then - // the scissor is still provided so that fewer pixels are written to). - // TODO: wrt the shouldInitializeTextures path, it would be more performant to - // only clear the entire target if we knew it had not been cleared before. As - // is this could end up doing a lot of redundant clears. - GrScissorState scissorState; - if (scissor) { - // TODO(michaelludwig) - This will get simpler when GrScissorState knows the device dims - scissorState.set(*scissor); - if (!scissorState.intersect(SkIRect::MakeWH(this->width(), this->height()))) { - // The clear is offscreen, so skip it (normally this would be handled by addDrawOp, - // except clear ops are not draw ops). - return; + // There are three ways clears are handled: load ops, native clears, and draws. Load ops are + // only for fullscreen clears; native clears can be fullscreen or with scissors if the backend + // supports then. Drawing an axis-aligned rect is the fallback path. + GrScissorState scissorState(this->asSurfaceProxy()->backingStoreDimensions()); + if (scissor && !scissorState.set(*scissor)) { + // The clear is offscreen, so skip it (normally this would be handled by addDrawOp, + // except clear ops are not draw ops). + return; + } + + // If we have a scissor but it's okay to clear beyond it for performance reasons, then disable + // the test. We only do this when the clear would be handled by a load op or natively. + if (scissorState.enabled() && !this->caps()->performColorClearsAsDraws()) { + if (upgradePartialToFull && (this->caps()->preferFullscreenClears() || + this->caps()->shouldInitializeTextures())) { + // TODO: wrt the shouldInitializeTextures path, it would be more performant to + // only clear the entire target if we knew it had not been cleared before. As + // is this could end up doing a lot of redundant clears. + scissorState.setDisabled(); + } else { + // Unlike with stencil clears, we also allow clears up to the logical dimensions of the + // render target to overflow into any approx-fit padding of the backing store dimensions + scissorState.relaxTest(this->dimensions()); } } - bool isFull = !scissorState.enabled() || - scissorState.rect().contains(SkIRect::MakeWH(this->width(), this->height())) || - (upgradePartialToFull && (this->caps()->preferFullscreenClears() || - this->caps()->shouldInitializeTextures())); - if (isFull) { + if (!scissorState.enabled()) { + // This is a fullscreen clear, so could be handled as a load op. Regardless, we can also + // discard all prior ops in the current task since the color buffer will be overwritten. GrOpsTask* opsTask = this->getOpsTask(); if (opsTask->resetForFullscreenClear(this->canDiscardPreviousOpsOnFullClear()) && !this->caps()->performColorClearsAsDraws()) { @@ -535,38 +632,20 @@ void GrRenderTargetContext::internalClear(const SkIRect* scissor, // blow away the color buffer contents opsTask->setColorLoadOp(GrLoadOp::kDiscard); } + } - // Must add an op to the list (either because we couldn't use a load op, or because the - // clear load op isn't supported) - if (this->caps()->performColorClearsAsDraws()) { - SkRect rtRect = SkRect::MakeWH(this->width(), this->height()); - GrPaint paint; - clear_to_grpaint(color, &paint); - this->addDrawOp(nullptr, - GrFillRectOp::MakeNonAARect(fContext, std::move(paint), SkMatrix::I(), - rtRect)); - } else { - this->addOp(GrClearOp::Make(fContext, GrScissorState(), color, this->asSurfaceProxy())); - } + // At this point we are either a partial clear or a fullscreen clear that couldn't be applied + // as a load op. + bool clearAsDraw = this->caps()->performColorClearsAsDraws() || + (scissorState.enabled() && this->caps()->performPartialClearsAsDraws()); + if (clearAsDraw) { + GrPaint paint; + clear_to_grpaint(color, &paint); + this->addDrawOp(nullptr, + GrFillRectOp::MakeNonAARect(fContext, std::move(paint), SkMatrix::I(), + SkRect::Make(scissorState.rect()))); } else { - if (this->caps()->performPartialClearsAsDraws()) { - // performPartialClearsAsDraws() also returns true if any clear has to be a draw. - GrPaint paint; - clear_to_grpaint(color, &paint); - - this->addDrawOp(nullptr, - GrFillRectOp::MakeNonAARect(fContext, std::move(paint), SkMatrix::I(), - SkRect::Make(scissorState.rect()))); - } else { - std::unique_ptr op(GrClearOp::Make(fContext, scissorState, color, - this->asSurfaceProxy())); - // This version of the clear op factory can return null if the clip doesn't intersect - // with the surface proxy's boundary - if (!op) { - return; - } - this->addOp(std::move(op)); - } + this->addOp(GrClearOp::MakeColor(fContext, scissorState, color)); } } @@ -606,26 +685,6 @@ enum class GrRenderTargetContext::QuadOptimization { kCropped }; -static bool make_vertex_finite(float* value) { - if (SkScalarIsNaN(*value)) { - return false; - } - - if (!SkScalarIsFinite(*value)) { - // +/- infinity at this point. Don't use exactly SK_ScalarMax so that we have some precision - // left when calculating crops. - static constexpr float kNearInfinity = SK_ScalarMax / 4.f; - *value = *value < 0.f ? -kNearInfinity : kNearInfinity; - } - - return true; -} - -static SkIRect get_clip_bounds(const GrRenderTargetContext* rtc, const GrClip* clip) { - return clip ? clip->getConservativeBounds(rtc->width(), rtc->height()) - : SkIRect::MakeWH(rtc->width(), rtc->height()); -} - GrRenderTargetContext::QuadOptimization GrRenderTargetContext::attemptQuadOptimization( const GrClip* clip, const SkPMColor4f* constColor, const GrUserStencilSettings* stencilSettings, GrAA* aa, DrawQuad* quad) { @@ -641,144 +700,115 @@ GrRenderTargetContext::QuadOptimization GrRenderTargetContext::attemptQuadOptimi // better to just keep the old flags instead of introducing mixed edge flags. GrQuadAAFlags oldFlags = quad->fEdgeFlags; - SkRect rtRect; - if (stencilSettings) { - // Must use size at which the rendertarget will ultimately be allocated so that stencil - // buffer updates on approximately sized render targets don't get corrupted. - rtRect = this->asSurfaceProxy()->backingStoreBoundsRect(); - } else { - // Use the logical size of the render target, which allows for "fullscreen" clears even if - // the render target has an approximate backing fit - rtRect = SkRect::MakeWH(this->width(), this->height()); - } + // Use the logical size of the render target, which allows for "fullscreen" clears even if + // the render target has an approximate backing fit + SkRect rtRect = this->asSurfaceProxy()->getBoundsRect(); SkRect drawBounds = quad->fDevice.bounds(); - if (constColor) { - // If the device quad is not finite, coerce into a finite quad. This is acceptable since it - // will be cropped to the finite 'clip' or render target and there is no local space mapping - if (!quad->fDevice.isFinite()) { - for (int i = 0; i < 4; ++i) { - if (!make_vertex_finite(quad->fDevice.xs() + i) || - !make_vertex_finite(quad->fDevice.ys() + i) || - !make_vertex_finite(quad->fDevice.ws() + i)) { - // Discard if we see a nan - return QuadOptimization::kDiscarded; - } - } - SkASSERT(quad->fDevice.isFinite()); - } - } else { - // CropToRect requires the quads to be finite. If they are not finite and we have local - // coordinates, the mapping from local space to device space is poorly defined so drop it - if (!quad->fDevice.isFinite()) { - return QuadOptimization::kDiscarded; - } - } - - // If the quad is entirely off screen, it doesn't matter what the clip does - if (!rtRect.intersects(drawBounds)) { + if (!quad->fDevice.isFinite() || drawBounds.isEmpty() || + GrClip::IsOutsideClip(rtRect, drawBounds)) { return QuadOptimization::kDiscarded; } - - // Check if clip can be represented as a rounded rect (initialize as if clip fully contained - // the render target). - SkRRect clipRRect = SkRRect::MakeRect(rtRect); - // We initialize clipAA to *aa when there are stencil settings so that we don't artificially - // encounter mixed-aa edges (not allowed for stencil), but we want to start as non-AA for - // regular draws so that if we fully cover the render target, that can stop being anti-aliased. - GrAA clipAA = stencilSettings ? *aa : GrAA::kNo; - bool axisAlignedClip = true; - if (clip && !clip->quickContains(rtRect)) { - if (!clip->isRRect(rtRect, &clipRRect, &clipAA)) { - axisAlignedClip = false; + auto conservativeCrop = [&]() { + static constexpr int kLargeDrawLimit = 15000; + // Crop the quad to the render target. This doesn't change the visual results of drawing but + // is meant to help numerical stability for excessively large draws. + if (drawBounds.width() > kLargeDrawLimit || drawBounds.height() > kLargeDrawLimit) { + GrQuadUtils::CropToRect(rtRect, *aa, quad, /* compute local */ !constColor); + SkASSERT(quad->fEdgeFlags == oldFlags); } - } + }; - // If the clip rrect is valid (i.e. axis-aligned), we can potentially combine it with the - // draw geometry so that no clip is needed when drawing. - if (axisAlignedClip && (!stencilSettings || clipAA == *aa)) { - // Tighten clip bounds (if clipRRect.isRect() is true, clipBounds now holds the intersection - // of the render target and the clip rect) - SkRect clipBounds = rtRect; - if (!clipBounds.intersect(clipRRect.rect()) || !clipBounds.intersects(drawBounds)) { + bool simpleColor = !stencilSettings && constColor; + GrClip::PreClipResult result = clip ? clip->preApply(drawBounds) + : GrClip::PreClipResult(GrClip::Effect::kUnclipped); + switch(result.fEffect) { + case GrClip::Effect::kClippedOut: return QuadOptimization::kDiscarded; - } - - if (clipRRect.isRect()) { - // No rounded corners, so the kClear and kExplicitClip optimizations are possible - if (GrQuadUtils::CropToRect(clipBounds, clipAA, quad, /*compute local*/ !constColor)) { - if (!stencilSettings && constColor && - quad->fDevice.quadType() == GrQuad::Type::kAxisAligned) { - // Clear optimization is possible - drawBounds = quad->fDevice.bounds(); - if (drawBounds.contains(rtRect)) { - // Fullscreen clear - this->clear(*constColor); - return QuadOptimization::kSubmitted; - } else if (GrClip::IsPixelAligned(drawBounds) && - drawBounds.width() > 256 && drawBounds.height() > 256) { - // Scissor + clear (round shouldn't do anything since we are pixel aligned) - SkIRect scissorRect; - drawBounds.round(&scissorRect); - this->clear(scissorRect, *constColor); - return QuadOptimization::kSubmitted; - } - } - - // Update overall AA setting. - if (*aa == GrAA::kNo && clipAA == GrAA::kYes && - quad->fEdgeFlags != GrQuadAAFlags::kNone) { - // The clip was anti-aliased and now the draw needs to be upgraded to AA to - // properly reflect the smooth edge of the clip. - *aa = GrAA::kYes; - } - // We intentionally do not downgrade AA here because we don't know if we need to - // preserve MSAA (see GrQuadAAFlags docs). But later in the pipeline, the ops can - // use GrResolveAATypeForQuad() to turn off coverage AA when all flags are off. - - // deviceQuad is exactly the intersection of original quad and clip, so it can be - // drawn with no clip (submitted by caller) + case GrClip::Effect::kUnclipped: + if (!simpleColor) { + conservativeCrop(); return QuadOptimization::kClipApplied; } else { - // The quads have been updated to better fit the clip bounds, but can't get rid of - // the clip entirely - quad->fEdgeFlags = oldFlags; - return QuadOptimization::kCropped; + // Update result to store the render target bounds in order and then fall + // through to attempt the draw->native clear optimization + result = GrClip::PreClipResult(SkRRect::MakeRect(rtRect), *aa); } - } else if (!stencilSettings && constColor) { - // Rounded corners and constant filled color (limit ourselves to solid colors because - // there is no way to use custom local coordinates with drawRRect). - if (GrQuadUtils::CropToRect(clipBounds, clipAA, quad, /* compute local */ false) && - quad->fDevice.quadType() == GrQuad::Type::kAxisAligned && - quad->fDevice.bounds().contains(clipBounds)) { - // Since the cropped quad became a rectangle which covered the bounds of the rrect, - // we can draw the rrect directly and ignore the edge flags - GrPaint paint; - clear_to_grpaint(*constColor, &paint); - this->drawRRect(nullptr, std::move(paint), clipAA, SkMatrix::I(), - clipRRect, GrStyle::SimpleFill()); - return QuadOptimization::kSubmitted; - } else { - // The quad has been updated to better fit clip bounds, but can't remove the clip - quad->fEdgeFlags = oldFlags; + break; + case GrClip::Effect::kClipped: + if (!result.fIsRRect || (stencilSettings && result.fAA != *aa) || + (!result.fRRect.isRect() && !simpleColor)) { + // The clip and draw state are too complicated to try and reduce + conservativeCrop(); return QuadOptimization::kCropped; + } // Else fall through to attempt to combine the draw and clip geometry together + break; + default: + SkUNREACHABLE; + } + + // If we reached here, we know we're an axis-aligned clip that is either a rect or a round rect, + // so we can potentially combine it with the draw geometry so that no clipping is needed. + SkASSERT(result.fEffect == GrClip::Effect::kClipped && result.fIsRRect); + SkRect clippedBounds = result.fRRect.getBounds(); + clippedBounds.intersect(rtRect); + if (result.fRRect.isRect()) { + // No rounded corners, so we might be able to become a native clear or we might be able to + // modify geometry and edge flags to represent intersected shape of clip and draw. + if (GrQuadUtils::CropToRect(clippedBounds, result.fAA, quad, + /*compute local*/ !constColor)) { + if (simpleColor && quad->fDevice.quadType() == GrQuad::Type::kAxisAligned) { + // Clear optimization is possible + drawBounds = quad->fDevice.bounds(); + if (drawBounds.contains(rtRect)) { + // Fullscreen clear + this->clear(*constColor); + return QuadOptimization::kSubmitted; + } else if (GrClip::IsPixelAligned(drawBounds) && + drawBounds.width() > 256 && drawBounds.height() > 256) { + // Scissor + clear (round shouldn't do anything since we are pixel aligned) + SkIRect scissorRect; + drawBounds.round(&scissorRect); + this->clear(scissorRect, *constColor); + return QuadOptimization::kSubmitted; + } } - } - } - - // Crop the quad to the conservative bounds of the clip. - SkRect clipBounds = SkRect::Make(get_clip_bounds(this, clip)); - // One final check for discarding, since we may have gone here directly due to a complex clip - if (!clipBounds.intersects(drawBounds)) { - return QuadOptimization::kDiscarded; + // else the draw and clip were combined so just update the AA to reflect combination + if (*aa == GrAA::kNo && result.fAA == GrAA::kYes && + quad->fEdgeFlags != GrQuadAAFlags::kNone) { + // The clip was anti-aliased and now the draw needs to be upgraded to AA to + // properly reflect the smooth edge of the clip. + *aa = GrAA::kYes; + } + // We intentionally do not downgrade AA here because we don't know if we need to + // preserve MSAA (see GrQuadAAFlags docs). But later in the pipeline, the ops can + // use GrResolveAATypeForQuad() to turn off coverage AA when all flags are off. + // deviceQuad is exactly the intersection of original quad and clip, so it can be + // drawn with no clip (submitted by caller) + return QuadOptimization::kClipApplied; + } + } else { + // Rounded corners and constant filled color (limit ourselves to solid colors because + // there is no way to use custom local coordinates with drawRRect). + SkASSERT(simpleColor); + if (GrQuadUtils::CropToRect(clippedBounds, result.fAA, quad, + /* compute local */ false) && + quad->fDevice.quadType() == GrQuad::Type::kAxisAligned && + quad->fDevice.bounds().contains(clippedBounds)) { + // Since the cropped quad became a rectangle which covered the bounds of the rrect, + // we can draw the rrect directly and ignore the edge flags + GrPaint paint; + clear_to_grpaint(*constColor, &paint); + this->drawRRect(nullptr, std::move(paint), result.fAA, SkMatrix::I(), result.fRRect, + GrStyle::SimpleFill()); + return QuadOptimization::kSubmitted; + } } - // Even if this were to return true, the crop rect does not exactly match the clip, so can not - // report explicit-clip. Since these edges aren't visible, don't update the final edge flags. - GrQuadUtils::CropToRect(clipBounds, clipAA, quad, /* compute local */ !constColor); + // The quads have been updated to better fit the clip bounds, but can't get rid of + // the clip entirely quad->fEdgeFlags = oldFlags; - return QuadOptimization::kCropped; } @@ -912,8 +942,7 @@ int GrRenderTargetContextPriv::maxWindowRectangles() const { *fRenderTargetContext->caps()); } -GrOpsTask::CanDiscardPreviousOps GrRenderTargetContext::canDiscardPreviousOpsOnFullClear( - ) const { +GrOpsTask::CanDiscardPreviousOps GrRenderTargetContext::canDiscardPreviousOpsOnFullClear() const { #if GR_TEST_UTILS if (fPreserveOpsOnFullClear_TestingOnly) { return GrOpsTask::CanDiscardPreviousOps::kNo; @@ -961,30 +990,25 @@ void GrRenderTargetContext::setNeedsStencil(bool useMixedSamplesIfNotMSAA) { void GrRenderTargetContext::internalStencilClear(const SkIRect* scissor, bool insideStencilMask) { this->setNeedsStencil(/* useMixedSamplesIfNotMSAA = */ false); + GrScissorState scissorState(this->asSurfaceProxy()->backingStoreDimensions()); + if (scissor && !scissorState.set(*scissor)) { + // The requested clear region is off screen, so nothing to do. + return; + } + bool clearWithDraw = this->caps()->performStencilClearsAsDraws() || - (scissor && this->caps()->performPartialClearsAsDraws()); + (scissorState.enabled() && this->caps()->performPartialClearsAsDraws()); if (clearWithDraw) { const GrUserStencilSettings* ss = GrStencilSettings::SetClipBitSettings(insideStencilMask); - SkRect rect = scissor ? SkRect::Make(*scissor) - : SkRect::MakeWH(this->width(), this->height()); // Configure the paint to have no impact on the color buffer GrPaint paint; paint.setXPFactory(GrDisableColorXPFactory::Get()); - this->addDrawOp(nullptr, GrFillRectOp::MakeNonAARect(fContext, std::move(paint), - SkMatrix::I(), rect, ss)); + this->addDrawOp(nullptr, + GrFillRectOp::MakeNonAARect(fContext, std::move(paint), SkMatrix::I(), + SkRect::Make(scissorState.rect()), ss)); } else { - GrScissorState scissorState; - if (scissor) { - scissorState.set(*scissor); - } - - std::unique_ptr op(GrClearStencilClipOp::Make( - fContext, scissorState, insideStencilMask, this->asRenderTargetProxy())); - if (!op) { - return; - } - this->addOp(std::move(op)); + this->addOp(GrClearOp::MakeStencilClip(fContext, scissorState, insideStencilMask)); } } @@ -1009,9 +1033,10 @@ void GrRenderTargetContextPriv::stencilPath(const GrHardClip* clip, // Setup clip and reject offscreen paths; we do this explicitly instead of relying on addDrawOp // because GrStencilPathOp is not a draw op as its state depends directly on the choices made // during this clip application. - GrAppliedHardClip appliedClip; - if (clip && !clip->apply(fRenderTargetContext->width(), fRenderTargetContext->height(), - &appliedClip, &bounds)) { + GrAppliedHardClip appliedClip(fRenderTargetContext->dimensions(), + fRenderTargetContext->asSurfaceProxy()->backingStoreDimensions()); + + if (clip && GrClip::Effect::kClippedOut == clip->apply(&appliedClip, &bounds)) { return; } // else see FIXME above; we'd normally want to check path bounds with render target bounds, @@ -1112,26 +1137,49 @@ void GrRenderTargetContext::drawRRect(const GrClip* origClip, SkDEBUGCODE(this->validate();) GR_CREATE_TRACE_MARKER_CONTEXT("GrRenderTargetContext", "drawRRect", fContext); + SkASSERT(!style.pathEffect()); // this should've been devolved to a path in SkGpuDevice + const SkStrokeRec& stroke = style.strokeRec(); if (stroke.getStyle() == SkStrokeRec::kFill_Style && rrect.isEmpty()) { return; } const GrClip* clip = origClip; -#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK - // The Android framework frequently clips rrects to themselves where the clip is non-aa and the - // draw is aa. Since our lower level clip code works from op bounds, which are SkRects, it - // doesn't detect that the clip can be ignored (modulo antialiasing). The following test - // attempts to mitigate the stencil clip cost but will only help when the entire clip stack - // can be ignored. We'd prefer to fix this in the framework by removing the clips calls. This - // only works for filled rrects since the stroke width outsets beyond the rrect itself. + // It is not uncommon to clip to a round rect and then draw that same round rect. Since our + // lower level clip code works from op bounds, which are SkRects, it doesn't detect that the + // clip can be ignored. The following test attempts to mitigate the stencil clip cost but only + // works for axis-aligned round rects. This also only works for filled rrects since the stroke + // width outsets beyond the rrect itself. SkRRect devRRect; if (clip && stroke.getStyle() == SkStrokeRec::kFill_Style && - rrect.transform(viewMatrix, &devRRect) && clip->quickContains(devRRect)) { - clip = nullptr; - } + rrect.transform(viewMatrix, &devRRect)) { + GrClip::PreClipResult result = clip->preApply(devRRect.getBounds()); + switch(result.fEffect) { + case GrClip::Effect::kClippedOut: + return; + case GrClip::Effect::kUnclipped: + clip = nullptr; + break; + case GrClip::Effect::kClipped: + // Currently there's no general-purpose rrect-to-rrect contains function, and if we + // got here, we know the devRRect's bounds aren't fully contained by the clip. + // Testing for equality between the two is a reasonable stop-gap for now. + if (result.fIsRRect && result.fRRect == devRRect) { + // NOTE: On the android framework, we allow this optimization even when the clip + // is non-AA and the draw is AA. +#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK + if (result.fAA == aa || (result.fAA == GrAA::kNo && aa == GrAA::kYes)) { +#else + if (result.fAA == aa) { #endif - SkASSERT(!style.pathEffect()); // this should've been devolved to a path in SkGpuDevice + clip = nullptr; + } + } + break; + default: + SkUNREACHABLE; + } + } AutoCheckFlush acf(this->drawingManager()); @@ -1180,7 +1228,7 @@ bool GrRenderTargetContext::drawFastShadow(const GrClip* clip, const SkPath& path, const SkDrawShadowRec& rec) { ASSERT_SINGLE_OWNER - if (fContext->priv().abandoned()) { + if (fContext->abandoned()) { return true; } SkDEBUGCODE(this->validate();) @@ -1436,18 +1484,17 @@ bool GrRenderTargetContext::drawFilledDRRect(const GrClip* clip, const auto& caps = *this->caps()->shaderCaps(); // TODO these need to be a geometry processors - auto innerEffect = GrRRectEffect::Make(innerEdgeType, *inner, caps); - if (!innerEffect) { + auto [success, fp] = GrRRectEffect::Make(/*inputFP=*/nullptr, innerEdgeType, *inner, caps); + if (!success) { return false; } - auto outerEffect = GrRRectEffect::Make(outerEdgeType, *outer, caps); - if (!outerEffect) { + std::tie(success, fp) = GrRRectEffect::Make(std::move(fp), outerEdgeType, *outer, caps); + if (!success) { return false; } - paint.addCoverageFragmentProcessor(std::move(innerEffect)); - paint.addCoverageFragmentProcessor(std::move(outerEffect)); + paint.addCoverageFragmentProcessor(std::move(fp)); SkRect bounds = outer->getBounds(); if (GrAAType::kCoverage == aaType) { @@ -1655,518 +1702,6 @@ void GrRenderTargetContext::drawDrawable(std::unique_ptraddOp(std::move(op)); } -void GrRenderTargetContext::asyncRescaleAndReadPixels( - const SkImageInfo& info, const SkIRect& srcRect, SkSurface::RescaleGamma rescaleGamma, - SkFilterQuality rescaleQuality, ReadPixelsCallback callback, ReadPixelsContext context) { - auto direct = fContext->priv().asDirectContext(); - if (!direct) { - callback(context, nullptr); - return; - } - if (this->asRenderTargetProxy()->wrapsVkSecondaryCB()) { - callback(context, nullptr); - return; - } - if (this->asRenderTargetProxy()->framebufferOnly()) { - callback(context, nullptr); - return; - } - auto dstCT = SkColorTypeToGrColorType(info.colorType()); - if (dstCT == GrColorType::kUnknown) { - callback(context, nullptr); - return; - } - bool needsRescale = srcRect.width() != info.width() || srcRect.height() != info.height(); - auto colorTypeOfFinalContext = this->colorInfo().colorType(); - auto backendFormatOfFinalContext = this->asSurfaceProxy()->backendFormat(); - if (needsRescale) { - colorTypeOfFinalContext = dstCT; - backendFormatOfFinalContext = this->caps()->getDefaultBackendFormat(dstCT, - GrRenderable::kYes); - } - auto readInfo = this->caps()->supportedReadPixelsColorType(colorTypeOfFinalContext, - backendFormatOfFinalContext, dstCT); - // Fail if we can't read from the source surface's color type. - if (readInfo.fColorType == GrColorType::kUnknown) { - callback(context, nullptr); - return; - } - // Fail if read color type does not have all of dstCT's color channels and those missing color - // channels are in the src. - uint32_t dstChannels = GrColorTypeChannelFlags(dstCT); - uint32_t legalReadChannels = GrColorTypeChannelFlags(readInfo.fColorType); - uint32_t srcChannels = GrColorTypeChannelFlags(this->colorInfo().colorType()); - if ((~legalReadChannels & dstChannels) & srcChannels) { - callback(context, nullptr); - return; - } - - std::unique_ptr tempRTC; - int x = srcRect.fLeft; - int y = srcRect.fTop; - if (needsRescale) { - tempRTC = this->rescale(info, kTopLeft_GrSurfaceOrigin, srcRect, rescaleGamma, - rescaleQuality); - if (!tempRTC) { - callback(context, nullptr); - return; - } - SkASSERT(SkColorSpace::Equals(tempRTC->colorInfo().colorSpace(), info.colorSpace())); - SkASSERT(tempRTC->origin() == kTopLeft_GrSurfaceOrigin); - x = y = 0; - } else { - sk_sp xform = GrColorSpaceXform::Make(this->colorInfo().colorSpace(), - this->colorInfo().alphaType(), - info.colorSpace(), - info.alphaType()); - // Insert a draw to a temporary surface if we need to do a y-flip or color space conversion. - if (this->origin() == kBottomLeft_GrSurfaceOrigin || xform) { - // We flip or color convert by drawing and we don't currently support drawing to - // kPremul. - if (info.alphaType() == kUnpremul_SkAlphaType) { - callback(context, nullptr); - return; - } - GrSurfaceProxyView texProxyView = this->readSurfaceView(); - SkRect srcRectToDraw = SkRect::Make(srcRect); - // If the src is not texturable first try to make a copy to a texture. - if (!texProxyView.asTextureProxy()) { - texProxyView = - GrSurfaceProxyView::Copy(fContext, texProxyView, GrMipMapped::kNo, srcRect, - SkBackingFit::kApprox, SkBudgeted::kNo); - if (!texProxyView) { - callback(context, nullptr); - return; - } - SkASSERT(texProxyView.asTextureProxy()); - srcRectToDraw = SkRect::MakeWH(srcRect.width(), srcRect.height()); - } - tempRTC = GrRenderTargetContext::Make( - direct, this->colorInfo().colorType(), info.refColorSpace(), - SkBackingFit::kApprox, srcRect.size(), 1, GrMipMapped::kNo, GrProtected::kNo, - kTopLeft_GrSurfaceOrigin); - if (!tempRTC) { - callback(context, nullptr); - return; - } - tempRTC->drawTexture(nullptr, std::move(texProxyView), this->colorInfo().alphaType(), - GrSamplerState::Filter::kNearest, SkBlendMode::kSrc, - SK_PMColor4fWHITE, srcRectToDraw, - SkRect::MakeWH(srcRect.width(), srcRect.height()), GrAA::kNo, - GrQuadAAFlags::kNone, SkCanvas::kFast_SrcRectConstraint, - SkMatrix::I(), std::move(xform)); - x = y = 0; - } - } - auto rtc = tempRTC ? tempRTC.get() : this; - return rtc->asyncReadPixels(SkIRect::MakeXYWH(x, y, info.width(), info.height()), - info.colorType(), callback, context); -} - -class GrRenderTargetContext::AsyncReadResult : public SkSurface::AsyncReadResult { -public: - AsyncReadResult(uint32_t inboxID) : fInboxID(inboxID) {} - ~AsyncReadResult() override { - for (int i = 0; i < fPlanes.count(); ++i) { - if (!fPlanes[i].fMappedBuffer) { - delete[] static_cast(fPlanes[i].fData); - } else { - GrClientMappedBufferManager::BufferFinishedMessageBus::Post( - {std::move(fPlanes[i].fMappedBuffer), fInboxID}); - } - } - } - - int count() const override { return fPlanes.count(); } - const void* data(int i) const override { return fPlanes[i].fData; } - size_t rowBytes(int i) const override { return fPlanes[i].fRowBytes; } - - bool addTransferResult(const PixelTransferResult& result, - SkISize dimensions, - size_t rowBytes, - GrClientMappedBufferManager* manager) { - SkASSERT(!result.fTransferBuffer->isMapped()); - const void* mappedData = result.fTransferBuffer->map(); - if (!mappedData) { - return false; - } - if (result.fPixelConverter) { - std::unique_ptr convertedData(new char[rowBytes * dimensions.height()]); - result.fPixelConverter(convertedData.get(), mappedData); - this->addCpuPlane(std::move(convertedData), rowBytes); - result.fTransferBuffer->unmap(); - } else { - manager->insert(result.fTransferBuffer); - this->addMappedPlane(mappedData, rowBytes, std::move(result.fTransferBuffer)); - } - return true; - } - - void addCpuPlane(std::unique_ptr data, size_t rowBytes) { - SkASSERT(data); - SkASSERT(rowBytes > 0); - fPlanes.emplace_back(data.release(), rowBytes, nullptr); - } - -private: - void addMappedPlane(const void* data, size_t rowBytes, sk_sp mappedBuffer) { - SkASSERT(data); - SkASSERT(rowBytes > 0); - SkASSERT(mappedBuffer); - SkASSERT(mappedBuffer->isMapped()); - fPlanes.emplace_back(data, rowBytes, std::move(mappedBuffer)); - } - - struct Plane { - Plane(const void* data, size_t rowBytes, sk_sp buffer) - : fData(data), fRowBytes(rowBytes), fMappedBuffer(std::move(buffer)) {} - const void* fData; - size_t fRowBytes; - // If this is null then fData is heap alloc and must be delete[]ed as const char[]. - sk_sp fMappedBuffer; - }; - SkSTArray<3, Plane> fPlanes; - uint32_t fInboxID; -}; - -void GrRenderTargetContext::asyncReadPixels(const SkIRect& rect, SkColorType colorType, - ReadPixelsCallback callback, - ReadPixelsContext context) { - SkASSERT(rect.fLeft >= 0 && rect.fRight <= this->width()); - SkASSERT(rect.fTop >= 0 && rect.fBottom <= this->height()); - - if (this->asSurfaceProxy()->isProtected() == GrProtected::kYes) { - callback(context, nullptr); - return; - } - - auto directContext = fContext->priv().asDirectContext(); - SkASSERT(directContext); - auto mappedBufferManager = directContext->priv().clientMappedBufferManager(); - - auto transferResult = this->transferPixels(SkColorTypeToGrColorType(colorType), rect); - - if (!transferResult.fTransferBuffer) { - auto ii = SkImageInfo::Make(rect.size(), colorType, - this->colorInfo().alphaType(), - this->colorInfo().refColorSpace()); - auto result = std::make_unique(0); - std::unique_ptr data(new char[ii.computeMinByteSize()]); - SkPixmap pm(ii, data.get(), ii.minRowBytes()); - result->addCpuPlane(std::move(data), pm.rowBytes()); - - if (!this->readPixels(ii, pm.writable_addr(), pm.rowBytes(), {rect.fLeft, rect.fTop})) { - callback(context, nullptr); - return; - } - callback(context, std::move(result)); - return; - } - - struct FinishContext { - ReadPixelsCallback* fClientCallback; - ReadPixelsContext fClientContext; - SkISize fSize; - SkColorType fColorType; - GrClientMappedBufferManager* fMappedBufferManager; - PixelTransferResult fTransferResult; - }; - // Assumption is that the caller would like to flush. We could take a parameter or require an - // explicit flush from the caller. We'd have to have a way to defer attaching the finish - // callback to GrGpu until after the next flush that flushes our op list, though. - auto* finishContext = new FinishContext{callback, - context, - rect.size(), - colorType, - mappedBufferManager, - std::move(transferResult)}; - auto finishCallback = [](GrGpuFinishedContext c) { - const auto* context = reinterpret_cast(c); - auto result = std::make_unique(context->fMappedBufferManager->inboxID()); - size_t rowBytes = context->fSize.width() * SkColorTypeBytesPerPixel(context->fColorType); - if (!result->addTransferResult(context->fTransferResult, context->fSize, rowBytes, - context->fMappedBufferManager)) { - result.reset(); - } - (*context->fClientCallback)(context->fClientContext, std::move(result)); - delete context; - }; - GrFlushInfo flushInfo; - flushInfo.fFinishedContext = finishContext; - flushInfo.fFinishedProc = finishCallback; - this->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); -} - -void GrRenderTargetContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, - sk_sp dstColorSpace, - const SkIRect& srcRect, - SkISize dstSize, - RescaleGamma rescaleGamma, - SkFilterQuality rescaleQuality, - ReadPixelsCallback callback, - ReadPixelsContext context) { - SkASSERT(srcRect.fLeft >= 0 && srcRect.fRight <= this->width()); - SkASSERT(srcRect.fTop >= 0 && srcRect.fBottom <= this->height()); - SkASSERT(!dstSize.isZero()); - SkASSERT((dstSize.width() % 2 == 0) && (dstSize.height() % 2 == 0)); - - auto direct = fContext->priv().asDirectContext(); - if (!direct) { - callback(context, nullptr); - return; - } - if (this->asRenderTargetProxy()->wrapsVkSecondaryCB()) { - callback(context, nullptr); - return; - } - if (this->asRenderTargetProxy()->framebufferOnly()) { - callback(context, nullptr); - return; - } - if (this->asSurfaceProxy()->isProtected() == GrProtected::kYes) { - callback(context, nullptr); - return; - } - int x = srcRect.fLeft; - int y = srcRect.fTop; - bool needsRescale = srcRect.size() != dstSize; - GrSurfaceProxyView srcView; - if (needsRescale) { - // We assume the caller wants kPremul. There is no way to indicate a preference. - auto info = SkImageInfo::Make(dstSize, kRGBA_8888_SkColorType, kPremul_SkAlphaType, - dstColorSpace); - // TODO: Incorporate the YUV conversion into last pass of rescaling. - auto tempRTC = this->rescale(info, kTopLeft_GrSurfaceOrigin, srcRect, rescaleGamma, - rescaleQuality); - if (!tempRTC) { - callback(context, nullptr); - return; - } - SkASSERT(SkColorSpace::Equals(tempRTC->colorInfo().colorSpace(), info.colorSpace())); - SkASSERT(tempRTC->origin() == kTopLeft_GrSurfaceOrigin); - x = y = 0; - srcView = tempRTC->readSurfaceView(); - } else { - srcView = this->readSurfaceView(); - if (!srcView.asTextureProxy()) { - srcView = GrSurfaceProxyView::Copy(fContext, std::move(srcView), GrMipMapped::kNo, - srcRect, SkBackingFit::kApprox, SkBudgeted::kYes); - if (!srcView) { - // If we can't get a texture copy of the contents then give up. - callback(context, nullptr); - return; - } - SkASSERT(srcView.asTextureProxy()); - x = y = 0; - } - // We assume the caller wants kPremul. There is no way to indicate a preference. - sk_sp xform = GrColorSpaceXform::Make( - this->colorInfo().colorSpace(), this->colorInfo().alphaType(), dstColorSpace.get(), - kPremul_SkAlphaType); - if (xform) { - SkRect srcRectToDraw = SkRect::MakeXYWH(x, y, srcRect.width(), srcRect.height()); - auto tempRTC = GrRenderTargetContext::Make( - direct, this->colorInfo().colorType(), dstColorSpace, SkBackingFit::kApprox, - dstSize, 1, GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); - if (!tempRTC) { - callback(context, nullptr); - return; - } - tempRTC->drawTexture(nullptr, std::move(srcView), this->colorInfo().alphaType(), - GrSamplerState::Filter::kNearest, SkBlendMode::kSrc, - SK_PMColor4fWHITE, srcRectToDraw, SkRect::Make(srcRect.size()), - GrAA::kNo, GrQuadAAFlags::kNone, SkCanvas::kFast_SrcRectConstraint, - SkMatrix::I(), std::move(xform)); - srcView = tempRTC->readSurfaceView(); - SkASSERT(srcView.asTextureProxy()); - x = y = 0; - } - } - - auto yRTC = GrRenderTargetContext::MakeWithFallback( - direct, GrColorType::kAlpha_8, dstColorSpace, SkBackingFit::kApprox, dstSize, 1, - GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); - int halfW = dstSize.width()/2; - int halfH = dstSize.height()/2; - auto uRTC = GrRenderTargetContext::MakeWithFallback( - direct, GrColorType::kAlpha_8, dstColorSpace, SkBackingFit::kApprox, {halfW, halfH}, 1, - GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); - auto vRTC = GrRenderTargetContext::MakeWithFallback( - direct, GrColorType::kAlpha_8, dstColorSpace, SkBackingFit::kApprox, {halfW, halfH}, 1, - GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); - if (!yRTC || !uRTC || !vRTC) { - callback(context, nullptr); - return; - } - - float baseM[20]; - SkColorMatrix_RGB2YUV(yuvColorSpace, baseM); - - // TODO: Use one transfer buffer for all three planes to reduce map/unmap cost? - - auto texMatrix = SkMatrix::Translate(x, y); - - SkRect dstRectY = SkRect::Make(dstSize); - SkRect dstRectUV = SkRect::MakeWH(halfW, halfH); - - bool doSynchronousRead = !this->caps()->transferFromSurfaceToBufferSupport(); - PixelTransferResult yTransfer, uTransfer, vTransfer; - - // This matrix generates (r,g,b,a) = (0, 0, 0, y) - float yM[20]; - std::fill_n(yM, 15, 0.f); - std::copy_n(baseM + 0, 5, yM + 15); - GrPaint yPaint; - yPaint.addColorFragmentProcessor( - GrTextureEffect::Make(srcView, this->colorInfo().alphaType(), texMatrix)); - auto yFP = GrColorMatrixFragmentProcessor::Make(yM, false, true, false); - yPaint.addColorFragmentProcessor(std::move(yFP)); - yPaint.setPorterDuffXPFactory(SkBlendMode::kSrc); - yRTC->fillRectToRect(nullptr, std::move(yPaint), GrAA::kNo, SkMatrix::I(), - dstRectY, dstRectY); - if (!doSynchronousRead) { - yTransfer = yRTC->transferPixels(GrColorType::kAlpha_8, - SkIRect::MakeWH(yRTC->width(), yRTC->height())); - if (!yTransfer.fTransferBuffer) { - callback(context, nullptr); - return; - } - } - - texMatrix.preScale(2.f, 2.f); - // This matrix generates (r,g,b,a) = (0, 0, 0, u) - float uM[20]; - std::fill_n(uM, 15, 0.f); - std::copy_n(baseM + 5, 5, uM + 15); - GrPaint uPaint; - uPaint.addColorFragmentProcessor(GrTextureEffect::Make( - srcView, this->colorInfo().alphaType(), texMatrix, GrSamplerState::Filter::kBilerp)); - auto uFP = GrColorMatrixFragmentProcessor::Make(uM, false, true, false); - uPaint.addColorFragmentProcessor(std::move(uFP)); - uPaint.setPorterDuffXPFactory(SkBlendMode::kSrc); - uRTC->fillRectToRect(nullptr, std::move(uPaint), GrAA::kNo, SkMatrix::I(), - dstRectUV, dstRectUV); - if (!doSynchronousRead) { - uTransfer = uRTC->transferPixels(GrColorType::kAlpha_8, - SkIRect::MakeWH(uRTC->width(), uRTC->height())); - if (!uTransfer.fTransferBuffer) { - callback(context, nullptr); - return; - } - } - - // This matrix generates (r,g,b,a) = (0, 0, 0, v) - float vM[20]; - std::fill_n(vM, 15, 0.f); - std::copy_n(baseM + 10, 5, vM + 15); - GrPaint vPaint; - vPaint.addColorFragmentProcessor(GrTextureEffect::Make(std::move(srcView), - this->colorInfo().alphaType(), texMatrix, - GrSamplerState::Filter::kBilerp)); - auto vFP = GrColorMatrixFragmentProcessor::Make(vM, false, true, false); - vPaint.addColorFragmentProcessor(std::move(vFP)); - vPaint.setPorterDuffXPFactory(SkBlendMode::kSrc); - vRTC->fillRectToRect(nullptr, std::move(vPaint), GrAA::kNo, SkMatrix::I(), - dstRectUV, dstRectUV); - if (!doSynchronousRead) { - vTransfer = vRTC->transferPixels(GrColorType::kAlpha_8, - SkIRect::MakeWH(vRTC->width(), vRTC->height())); - if (!vTransfer.fTransferBuffer) { - callback(context, nullptr); - return; - } - } - - if (doSynchronousRead) { - GrImageInfo yInfo(GrColorType::kAlpha_8, kPremul_SkAlphaType, nullptr, dstSize); - GrImageInfo uvInfo = yInfo.makeWH(halfW, halfH); - size_t yRB = yInfo.minRowBytes(); - size_t uvRB = uvInfo.minRowBytes(); - std::unique_ptr y(new char[yRB * yInfo.height()]); - std::unique_ptr u(new char[uvRB*uvInfo.height()]); - std::unique_ptr v(new char[uvRB*uvInfo.height()]); - if (!yRTC->readPixels(yInfo, y.get(), yRB, {0, 0}, direct) || - !uRTC->readPixels(uvInfo, u.get(), uvRB, {0, 0}, direct) || - !vRTC->readPixels(uvInfo, v.get(), uvRB, {0, 0}, direct)) { - callback(context, nullptr); - return; - } - auto result = std::make_unique(direct->priv().contextID()); - result->addCpuPlane(std::move(y), yRB ); - result->addCpuPlane(std::move(u), uvRB); - result->addCpuPlane(std::move(v), uvRB); - callback(context, std::move(result)); - return; - } - - struct FinishContext { - ReadPixelsCallback* fClientCallback; - ReadPixelsContext fClientContext; - GrClientMappedBufferManager* fMappedBufferManager; - SkISize fSize; - PixelTransferResult fYTransfer; - PixelTransferResult fUTransfer; - PixelTransferResult fVTransfer; - }; - // Assumption is that the caller would like to flush. We could take a parameter or require an - // explicit flush from the caller. We'd have to have a way to defer attaching the finish - // callback to GrGpu until after the next flush that flushes our op list, though. - auto* finishContext = new FinishContext{callback, - context, - direct->priv().clientMappedBufferManager(), - dstSize, - std::move(yTransfer), - std::move(uTransfer), - std::move(vTransfer)}; - auto finishCallback = [](GrGpuFinishedContext c) { - const auto* context = reinterpret_cast(c); - auto result = std::make_unique(context->fMappedBufferManager->inboxID()); - auto manager = context->fMappedBufferManager; - size_t rowBytes = SkToSizeT(context->fSize.width()); - if (!result->addTransferResult(context->fYTransfer, context->fSize, rowBytes, manager)) { - (*context->fClientCallback)(context->fClientContext, nullptr); - delete context; - return; - } - rowBytes /= 2; - SkISize uvSize = {context->fSize.width()/2, context->fSize.height()/2}; - if (!result->addTransferResult(context->fUTransfer, uvSize, rowBytes, manager)) { - (*context->fClientCallback)(context->fClientContext, nullptr); - delete context; - return; - } - if (!result->addTransferResult(context->fVTransfer, uvSize, rowBytes, manager)) { - (*context->fClientCallback)(context->fClientContext, nullptr); - delete context; - return; - } - (*context->fClientCallback)(context->fClientContext, std::move(result)); - delete context; - }; - GrFlushInfo flushInfo; - flushInfo.fFinishedContext = finishContext; - flushInfo.fFinishedProc = finishCallback; - this->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); -} - -GrSemaphoresSubmitted GrRenderTargetContext::flush(SkSurface::BackendSurfaceAccess access, - const GrFlushInfo& info) { - ASSERT_SINGLE_OWNER - if (fContext->priv().abandoned()) { - if (info.fSubmittedProc) { - info.fSubmittedProc(info.fSubmittedContext, false); - } - if (info.fFinishedProc) { - info.fFinishedProc(info.fFinishedContext); - } - return GrSemaphoresSubmitted::kNo; - } - SkDEBUGCODE(this->validate();) - GR_CREATE_TRACE_MARKER_CONTEXT("GrRenderTargetContext", "flush", fContext); - - return this->drawingManager()->flushSurface(this->asSurfaceProxy(), access, info); -} - bool GrRenderTargetContext::waitOnSemaphores(int numSemaphores, const GrBackendSemaphore waitSemaphores[]) { ASSERT_SINGLE_OWNER @@ -2180,7 +1715,7 @@ bool GrRenderTargetContext::waitOnSemaphores(int numSemaphores, return false; } - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { return false; } @@ -2273,6 +1808,10 @@ void GrRenderTargetContext::drawShape(const GrClip* clip, /* attempt fallback */ false); } +static SkIRect get_clip_bounds(const GrRenderTargetContext* rtc, const GrClip* clip) { + return clip ? clip->getConservativeBounds() : SkIRect::MakeWH(rtc->width(), rtc->height()); +} + bool GrRenderTargetContextPriv::drawAndStencilPath(const GrHardClip* clip, const GrUserStencilSettings* ss, SkRegion::Op op, @@ -2346,7 +1885,7 @@ bool GrRenderTargetContextPriv::drawAndStencilPath(const GrHardClip* clip, SkBudgeted GrRenderTargetContextPriv::isBudgeted() const { ASSERT_SINGLE_OWNER_PRIV - if (fRenderTargetContext->fContext->priv().abandoned()) { + if (fRenderTargetContext->fContext->abandoned()) { return SkBudgeted::kNo; } @@ -2478,14 +2017,15 @@ static void op_bounds(SkRect* bounds, const GrOp* op) { } void GrRenderTargetContext::addOp(std::unique_ptr op) { - this->getOpsTask()->addOp( - std::move(op), GrTextureResolveManager(this->drawingManager()), *this->caps()); + GrDrawingManager* drawingMgr = this->drawingManager(); + this->getOpsTask()->addOp(drawingMgr, + std::move(op), GrTextureResolveManager(drawingMgr), *this->caps()); } void GrRenderTargetContext::addDrawOp(const GrClip* clip, std::unique_ptr op, const std::function& willAddFn) { ASSERT_SINGLE_OWNER - if (fContext->priv().abandoned()) { + if (fContext->abandoned()) { fContext->priv().opMemoryPool()->release(std::move(op)); return; } @@ -2496,7 +2036,7 @@ void GrRenderTargetContext::addDrawOp(const GrClip* clip, std::unique_ptrdimensions(), this->asSurfaceProxy()->backingStoreDimensions()); GrDrawOp::FixedFunctionFlags fixedFunctionFlags = op->fixedFunctionFlags(); bool usesHWAA = fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesHWAA; bool usesUserStencilBits = fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesStencil; @@ -2508,14 +2048,11 @@ void GrRenderTargetContext::addDrawOp(const GrClip* clip, std::unique_ptrapply(fContext, this, usesHWAA, usesUserStencilBits, &appliedClip, &bounds)) { - skipDraw = true; - } + skipDraw = clip->apply(fContext, this, usesHWAA, usesUserStencilBits, + &appliedClip, &bounds) == GrClip::Effect::kClippedOut; } else { // No clipping, so just clip the bounds against the logical render target dimensions - if (!bounds.intersect(this->asSurfaceProxy()->getBoundsRect())) { - skipDraw = true; - } + skipDraw = !bounds.intersect(this->asSurfaceProxy()->getBoundsRect()); } if (skipDraw) { @@ -2538,24 +2075,26 @@ void GrRenderTargetContext::addDrawOp(const GrClip* clip, std::unique_ptrfinalize( *this->caps(), &appliedClip, hasMixedSampledCoverage, clampType); + // Must be called before setDstProxyView so that it sees the final bounds of the op. + op->setClippedBounds(bounds); + GrXferProcessor::DstProxyView dstProxyView; if (analysis.requiresDstTexture()) { - if (!this->setupDstProxyView(clip, *op, &dstProxyView)) { + if (!this->setupDstProxyView(*op, &dstProxyView)) { fContext->priv().opMemoryPool()->release(std::move(op)); return; } } - op->setClippedBounds(bounds); auto opsTask = this->getOpsTask(); if (willAddFn) { willAddFn(op.get(), opsTask->uniqueID()); } - opsTask->addDrawOp(std::move(op), analysis, std::move(appliedClip), dstProxyView, - GrTextureResolveManager(this->drawingManager()), *this->caps()); + opsTask->addDrawOp(this->drawingManager(), std::move(op), analysis, std::move(appliedClip), + dstProxyView,GrTextureResolveManager(this->drawingManager()), *this->caps()); } -bool GrRenderTargetContext::setupDstProxyView(const GrClip* clip, const GrOp& op, +bool GrRenderTargetContext::setupDstProxyView(const GrOp& op, GrXferProcessor::DstProxyView* dstProxyView) { // If we are wrapping a vulkan secondary command buffer, we can't make a dst copy because we // don't actually have a VkImage to make a copy of. Additionally we don't have the power to @@ -2575,37 +2114,20 @@ bool GrRenderTargetContext::setupDstProxyView(const GrClip* clip, const GrOp& op } } - SkIRect copyRect = SkIRect::MakeSize(this->asSurfaceProxy()->dimensions()); - - SkIRect clippedRect = get_clip_bounds(this, clip); - SkRect opBounds = op.bounds(); - // If the op has aa bloating or is a infinitely thin geometry (hairline) outset the bounds by - // 0.5 pixels. - if (op.hasAABloat() || op.hasZeroArea()) { - opBounds.outset(0.5f, 0.5f); - // An antialiased/hairline draw can sometimes bleed outside of the clips bounds. For - // performance we may ignore the clip when the draw is entirely inside the clip is float - // space but will hit pixels just outside the clip when actually rasterizing. - clippedRect.outset(1, 1); - clippedRect.intersect(SkIRect::MakeSize(this->asSurfaceProxy()->dimensions())); - } - SkIRect opIBounds; - opBounds.roundOut(&opIBounds); - if (!clippedRect.intersect(opIBounds)) { -#ifdef SK_DEBUG - GrCapsDebugf(this->caps(), "setupDstTexture: Missed an early reject bailing on draw."); -#endif - return false; - } - GrColorType colorType = this->colorInfo().colorType(); // MSAA consideration: When there is support for reading MSAA samples in the shader we could // have per-sample dst values by making the copy multisampled. GrCaps::DstCopyRestrictions restrictions = this->caps()->getDstCopyRestrictions( this->asRenderTargetProxy(), colorType); + SkIRect copyRect = SkIRect::MakeSize(this->asSurfaceProxy()->backingStoreDimensions()); if (!restrictions.fMustCopyWholeSrc) { - copyRect = clippedRect; + // If we don't need the whole source, restrict to the op's bounds. We add an extra pixel + // of padding to account for AA bloat and the unpredictable rounding of coords near pixel + // centers during rasterization. + SkIRect conservativeDrawBounds = op.bounds().roundOut(); + conservativeDrawBounds.outset(1, 1); + SkAssertResult(copyRect.intersect(conservativeDrawBounds)); } SkIPoint dstOffset; diff --git a/src/gpu/GrRenderTargetContext.h b/src/gpu/GrRenderTargetContext.h index 21d12e43ddad9..4aa6cdeda87bc 100644 --- a/src/gpu/GrRenderTargetContext.h +++ b/src/gpu/GrRenderTargetContext.h @@ -14,6 +14,7 @@ #include "include/core/SkSurface.h" #include "include/core/SkSurfaceProps.h" #include "include/private/GrTypesPriv.h" +#include "src/core/SkGlyphRunPainter.h" #include "src/gpu/GrOpsTask.h" #include "src/gpu/GrPaint.h" #include "src/gpu/GrRenderTargetProxy.h" @@ -28,7 +29,6 @@ class GrClip; class GrColorSpaceXform; class GrCoverageCountingPathRenderer; class GrDrawOp; -class GrFixedClip; class GrOp; class GrRenderTarget; class GrRenderTargetContextPriv; @@ -118,8 +118,8 @@ class GrRenderTargetContext : public GrSurfaceContext, public GrOpsTaskClosedObs // Creates a GrRenderTargetContext that wraps the passed in GrBackendTexture. static std::unique_ptr MakeFromBackendTexture( GrRecordingContext*, GrColorType, sk_sp, const GrBackendTexture&, - int sampleCnt, GrSurfaceOrigin, const SkSurfaceProps*, ReleaseProc releaseProc, - ReleaseContext releaseCtx); + int sampleCnt, GrSurfaceOrigin, const SkSurfaceProps*, + sk_sp releaseHelper); static std::unique_ptr MakeFromBackendTextureAsRenderTarget( GrRecordingContext*, GrColorType, sk_sp, const GrBackendTexture&, @@ -524,30 +524,6 @@ class GrRenderTargetContext : public GrSurfaceContext, public GrOpsTaskClosedObs */ void drawDrawable(std::unique_ptr, const SkRect& bounds); - using ReadPixelsCallback = SkSurface::ReadPixelsCallback; - using ReadPixelsContext = SkSurface::ReadPixelsContext; - using RescaleGamma = SkSurface::RescaleGamma; - - // GPU implementation for SkSurface::asyncRescaleAndReadPixels. - void asyncRescaleAndReadPixels(const SkImageInfo& info, const SkIRect& srcRect, - RescaleGamma rescaleGamma, SkFilterQuality rescaleQuality, - ReadPixelsCallback callback, ReadPixelsContext context); - // GPU implementation for SkSurface::asyncRescaleAndReadPixelsYUV420. - void asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, - sk_sp dstColorSpace, - const SkIRect& srcRect, - SkISize dstSize, - RescaleGamma rescaleGamma, - SkFilterQuality rescaleQuality, - ReadPixelsCallback callback, - ReadPixelsContext context); - - /** - * After this returns any pending surface IO will be issued to the backend 3D API and - * if the surface has MSAA it will be resolved. - */ - GrSemaphoresSubmitted flush(SkSurface::BackendSurfaceAccess access, const GrFlushInfo&); - /** * The next time this GrRenderTargetContext is flushed, the gpu will wait on the passed in * semaphores before executing any commands. @@ -589,13 +565,12 @@ class GrRenderTargetContext : public GrSurfaceContext, public GrOpsTaskClosedObs GrAAType chooseAAType(GrAA); - friend class GrAtlasTextBlob; // for access to add[Mesh]DrawOp friend class GrClipStackClip; // for access to getOpsTask friend class GrOnFlushResourceProvider; // for access to getOpsTask (http://skbug.com/9357) friend class GrRenderTargetContextPriv; - // All the path renderers currently make their own ops + // All the path and text renderers/ops currently make their own ops friend class GrSoftwarePathRenderer; // for access to add[Mesh]DrawOp friend class GrAAConvexPathRenderer; // for access to add[Mesh]DrawOp friend class GrDashLinePathRenderer; // for access to add[Mesh]DrawOp @@ -610,6 +585,7 @@ class GrRenderTargetContext : public GrSurfaceContext, public GrOpsTaskClosedObs friend class GrFillRectOp; // for access to addDrawOp friend class GrTessellationPathRenderer; // for access to addDrawOp friend class GrTextureOp; // for access to addDrawOp + friend class GrAtlasTextOp; // for access to addDrawOp SkDEBUGCODE(void onValidate() const override;) @@ -688,17 +664,15 @@ class GrRenderTargetContext : public GrSurfaceContext, public GrOpsTaskClosedObs // Makes a copy of the proxy if it is necessary for the draw and places the texture that should // be used by GrXferProcessor to access the destination color in 'result'. If the return // value is false then a texture copy could not be made. - bool SK_WARN_UNUSED_RESULT setupDstProxyView(const GrClip*, const GrOp& op, + // + // The op should have already had setClippedBounds called on it. + bool SK_WARN_UNUSED_RESULT setupDstProxyView(const GrOp& op, GrXferProcessor::DstProxyView* result); - class AsyncReadResult; - - // The async read step of asyncRescaleAndReadPixels() - void asyncReadPixels(const SkIRect& rect, SkColorType colorType, ReadPixelsCallback callback, - ReadPixelsContext context); - GrOpsTask* getOpsTask(); + SkGlyphRunListPainter* glyphPainter() { return &fGlyphPainter; } + std::unique_ptr fTextTarget; GrSurfaceProxyView fWriteView; @@ -714,7 +688,7 @@ class GrRenderTargetContext : public GrSurfaceContext, public GrOpsTaskClosedObs #if GR_TEST_UTILS bool fPreserveOpsOnFullClear_TestingOnly = false; #endif - + SkGlyphRunListPainter fGlyphPainter; typedef GrSurfaceContext INHERITED; }; diff --git a/src/gpu/GrRenderTargetContextPriv.h b/src/gpu/GrRenderTargetContextPriv.h index c09713fc20bac..4e1e227fbc9f1 100644 --- a/src/gpu/GrRenderTargetContextPriv.h +++ b/src/gpu/GrRenderTargetContextPriv.h @@ -12,7 +12,6 @@ #include "src/gpu/GrPathRendering.h" #include "src/gpu/GrRenderTargetContext.h" -class GrFixedClip; class GrHardClip; class GrPath; class GrRenderTargetPriv; diff --git a/src/gpu/GrRenderTargetProxy.h b/src/gpu/GrRenderTargetProxy.h index de21acc23cbab..31193ae184baa 100644 --- a/src/gpu/GrRenderTargetProxy.h +++ b/src/gpu/GrRenderTargetProxy.h @@ -60,7 +60,7 @@ class GrRenderTargetProxy : virtual public GrSurfaceProxy { bool wrapsVkSecondaryCB() const { return fWrapsVkSecondaryCB == WrapsVkSecondaryCB::kYes; } void markMSAADirty(const SkIRect& dirtyRect, GrSurfaceOrigin origin) { - SkASSERT(SkIRect::MakeSize(this->dimensions()).contains(dirtyRect)); + SkASSERT(SkIRect::MakeSize(this->backingStoreDimensions()).contains(dirtyRect)); SkASSERT(this->requiresManualMSAAResolve()); auto nativeRect = GrNativeRect::MakeRelativeTo( origin, this->backingStoreDimensions().height(), dirtyRect); diff --git a/src/gpu/GrRenderTask.cpp b/src/gpu/GrRenderTask.cpp index 7dc434b827694..7b294a4395c64 100644 --- a/src/gpu/GrRenderTask.cpp +++ b/src/gpu/GrRenderTask.cpp @@ -26,21 +26,27 @@ GrRenderTask::GrRenderTask() , fFlags(0) { } -GrRenderTask::GrRenderTask(GrSurfaceProxyView targetView) - : fTargetView(std::move(targetView)) - , fUniqueID(CreateUniqueID()) - , fFlags(0) { -} +void GrRenderTask::disown(GrDrawingManager* drawingMgr) { + SkASSERT(!fDrawingMgr || drawingMgr == fDrawingMgr); + SkASSERT(this->isClosed()); + if (this->isSetFlag(kDisowned_Flag)) { + return; + } + SkDEBUGCODE(fDrawingMgr = nullptr); + this->setFlag(kDisowned_Flag); -GrRenderTask::~GrRenderTask() { - GrSurfaceProxy* proxy = fTargetView.proxy(); - if (proxy && this == proxy->getLastRenderTask()) { - // Ensure the target proxy doesn't keep hold of a dangling back pointer. - proxy->setLastRenderTask(nullptr); + for (const GrSurfaceProxyView& target : fTargets) { + if (this == drawingMgr->getLastRenderTask(target.proxy())) { + drawingMgr->setLastRenderTask(target.proxy(), nullptr); + } } } #ifdef SK_DEBUG +GrRenderTask::~GrRenderTask() { + SkASSERT(this->isSetFlag(kDisowned_Flag)); +} + bool GrRenderTask::deferredProxiesAreInstantiated() const { for (int i = 0; i < fDeferredProxies.count(); ++i) { if (!fDeferredProxies[i]->isInstantiated()) { @@ -59,13 +65,13 @@ void GrRenderTask::makeClosed(const GrCaps& caps) { SkIRect targetUpdateBounds; if (ExpectedOutcome::kTargetDirty == this->onMakeClosed(caps, &targetUpdateBounds)) { - GrSurfaceProxy* proxy = fTargetView.proxy(); + GrSurfaceProxy* proxy = this->target(0).proxy(); if (proxy->requiresManualMSAAResolve()) { - SkASSERT(fTargetView.asRenderTargetProxy()); - fTargetView.asRenderTargetProxy()->markMSAADirty(targetUpdateBounds, - fTargetView.origin()); + SkASSERT(this->target(0).asRenderTargetProxy()); + this->target(0).asRenderTargetProxy()->markMSAADirty(targetUpdateBounds, + this->target(0).origin()); } - GrTextureProxy* textureProxy = fTargetView.asTextureProxy(); + GrTextureProxy* textureProxy = this->target(0).asTextureProxy(); if (textureProxy && GrMipMapped::kYes == textureProxy->mipMapped()) { textureProxy->markMipMapsDirty(); } @@ -111,13 +117,14 @@ void GrRenderTask::addDependenciesFromOtherTask(GrRenderTask* otherTask) { } // Convert from a GrSurface-based dependency to a GrRenderTask one -void GrRenderTask::addDependency(GrSurfaceProxy* dependedOn, GrMipMapped mipMapped, +void GrRenderTask::addDependency(GrDrawingManager* drawingMgr, GrSurfaceProxy* dependedOn, + GrMipMapped mipMapped, GrTextureResolveManager textureResolveManager, const GrCaps& caps) { // If it is still receiving dependencies, this GrRenderTask shouldn't be closed SkASSERT(!this->isClosed()); - GrRenderTask* dependedOnTask = dependedOn->getLastRenderTask(); + GrRenderTask* dependedOnTask = drawingMgr->getLastRenderTask(dependedOn); if (dependedOnTask == this) { // self-read - presumably for dst reads. We don't need to do anything in this case. The @@ -168,11 +175,11 @@ void GrRenderTask::addDependency(GrSurfaceProxy* dependedOn, GrMipMapped mipMapp if (!fTextureResolveTask) { fTextureResolveTask = textureResolveManager.newTextureResolveRenderTask(caps); } - fTextureResolveTask->addProxy(sk_ref_sp(dependedOn), resolveFlags, caps); + fTextureResolveTask->addProxy(drawingMgr, sk_ref_sp(dependedOn), resolveFlags, caps); // addProxy() should have closed the texture proxy's previous task. SkASSERT(!dependedOnTask || dependedOnTask->isClosed()); - SkASSERT(dependedOn->getLastRenderTask() == fTextureResolveTask); + SkASSERT(drawingMgr->getLastRenderTask(dependedOn) == fTextureResolveTask); #ifdef SK_DEBUG // addProxy() should have called addDependency (in this instance, recursively) on @@ -192,7 +199,7 @@ void GrRenderTask::addDependency(GrSurfaceProxy* dependedOn, GrMipMapped mipMapp if (textureProxy) { SkASSERT(!textureProxy->mipMapsAreDirty()); } - SkASSERT(dependedOn->getLastRenderTask() == fTextureResolveTask); + SkASSERT(drawingMgr->getLastRenderTask(dependedOn) == fTextureResolveTask); #endif return; } @@ -250,11 +257,11 @@ void GrRenderTask::closeThoseWhoDependOnMe(const GrCaps& caps) { } bool GrRenderTask::isInstantiated() const { - // Some renderTasks (e.g. GrTransferFromRenderTask) don't have a target. - GrSurfaceProxy* proxy = fTargetView.proxy(); - if (!proxy) { + // Some renderTasks (e.g. GrTransferFromRenderTask) don't have any targets. + if (0 == this->numTargets()) { return true; } + GrSurfaceProxy* proxy = this->target(0).proxy(); if (!proxy->isInstantiated()) { return false; @@ -268,16 +275,32 @@ bool GrRenderTask::isInstantiated() const { return true; } +void GrRenderTask::addTarget(GrDrawingManager* drawingMgr, GrSurfaceProxyView view) { + SkASSERT(view); + SkASSERT(!this->isClosed()); + SkASSERT(!fDrawingMgr || drawingMgr == fDrawingMgr); + SkDEBUGCODE(fDrawingMgr = drawingMgr); + drawingMgr->setLastRenderTask(view.proxy(), this); + fTargets.push_back(std::move(view)); +} + #ifdef SK_DEBUG void GrRenderTask::dump(bool printDependencies) const { SkDebugf("--------------------------------------------------------------\n"); - GrSurfaceProxy* proxy = fTargetView.proxy(); - SkDebugf("%s - renderTaskID: %d - proxyID: %d - surfaceID: %d\n", - this->name(), fUniqueID, - proxy ? proxy->uniqueID().asUInt() : -1, - proxy && proxy->peekSurface() - ? proxy->peekSurface()->uniqueID().asUInt() - : -1); + SkDebugf("%s - renderTaskID: %d\n", this->name(), fUniqueID); + + if (!fTargets.empty()) { + SkDebugf("Targets: \n"); + for (int i = 0; i < fTargets.count(); ++i) { + GrSurfaceProxy* proxy = fTargets[i].proxy(); + SkDebugf("[%d]: proxyID: %d - surfaceID: %d\n", + i, + proxy ? proxy->uniqueID().asUInt() : -1, + proxy && proxy->peekSurface() + ? proxy->peekSurface()->uniqueID().asUInt() + : -1); + } + } if (printDependencies) { SkDebugf("I rely On (%d): ", fDependencies.count()); diff --git a/src/gpu/GrRenderTask.h b/src/gpu/GrRenderTask.h index 83f17d902436d..a35fbf8322c64 100644 --- a/src/gpu/GrRenderTask.h +++ b/src/gpu/GrRenderTask.h @@ -14,6 +14,7 @@ #include "src/gpu/GrSurfaceProxyView.h" #include "src/gpu/GrTextureProxy.h" #include "src/gpu/GrTextureResolveManager.h" +#include "src/gpu/ops/GrOp.h" class GrOpFlushState; class GrOpsTask; @@ -26,8 +27,7 @@ class GrTextureResolveRenderTask; class GrRenderTask : public SkRefCnt { public: GrRenderTask(); - GrRenderTask(GrSurfaceProxyView); - ~GrRenderTask() override; + SkDEBUGCODE(~GrRenderTask() override); void makeClosed(const GrCaps&); @@ -40,15 +40,20 @@ class GrRenderTask : public SkRefCnt { // Called when this class will survive a flush and needs to truncate its ops and start over. // TODO: ultimately it should be invalid for an op list to survive a flush. // https://bugs.chromium.org/p/skia/issues/detail?id=7111 - virtual void endFlush() {} + virtual void endFlush(GrDrawingManager*) {} + + // This method "disowns" all the GrSurfaceProxies this RenderTask modifies. In + // practice this just means telling the drawingManager to forget the relevant + // mappings from surface proxy to last modifying rendertask. + virtual void disown(GrDrawingManager*); bool isClosed() const { return this->isSetFlag(kClosed_Flag); } /* * Notify this GrRenderTask that it relies on the contents of 'dependedOn' */ - void addDependency(GrSurfaceProxy* dependedOn, GrMipMapped, GrTextureResolveManager, - const GrCaps& caps); + void addDependency(GrDrawingManager*, GrSurfaceProxy* dependedOn, GrMipMapped, + GrTextureResolveManager, const GrCaps& caps); /* * Notify this GrRenderTask that it relies on the contents of all GrRenderTasks which otherTask @@ -62,6 +67,8 @@ class GrRenderTask : public SkRefCnt { bool dependsOn(const GrRenderTask* dependedOn) const; uint32_t uniqueID() const { return fUniqueID; } + int numTargets() const { return fTargets.count(); } + const GrSurfaceProxyView& target(int i) const { return fTargets[i]; } /* * Safely cast this GrRenderTask to a GrOpsTask (if possible). @@ -81,8 +88,8 @@ class GrRenderTask : public SkRefCnt { void visitTargetAndSrcProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const { this->visitProxies_debugOnly(fn); - if (fTargetView.proxy()) { - fn(fTargetView.proxy(), GrMipMapped::kNo); + for (int i = 0; i < this->numTargets(); ++i) { + fn(this->target(i).proxy(), GrMipMapped::kNo); } } #endif @@ -94,6 +101,10 @@ class GrRenderTask : public SkRefCnt { SkDEBUGCODE(bool deferredProxiesAreInstantiated() const;) + // Add a target surface proxy to the list of targets for this task. + // This also informs the drawing manager to update the lastRenderTask association. + void addTarget(GrDrawingManager*, GrSurfaceProxyView); + enum class ExpectedOutcome : bool { kTargetUnchanged, kTargetDirty, @@ -106,7 +117,7 @@ class GrRenderTask : public SkRefCnt { // targetUpdateBounds must not extend beyond the proxy bounds. virtual ExpectedOutcome onMakeClosed(const GrCaps&, SkIRect* targetUpdateBounds) = 0; - GrSurfaceProxyView fTargetView; + SkSTArray<1, GrSurfaceProxyView> fTargets; // List of texture proxies whose contents are being prepared on a worker thread // TODO: this list exists so we can fire off the proper upload when an renderTask begins @@ -118,15 +129,19 @@ class GrRenderTask : public SkRefCnt { friend class GrDrawingManager; // Drops any pending operations that reference proxies that are not instantiated. - // NOTE: Derived classes don't need to check fTargetView. That is handled when the + // NOTE: Derived classes don't need to check targets. That is handled when the // drawingManager calls isInstantiated. virtual void handleInternalAllocationFailure() = 0; + // Derived classes can override to indicate usage of proxies _other than target proxies_. + // GrRenderTask itself will handle checking the target proxies. virtual bool onIsUsed(GrSurfaceProxy*) const = 0; bool isUsed(GrSurfaceProxy* proxy) const { - if (proxy == fTargetView.proxy()) { - return true; + for (const GrSurfaceProxyView& target : fTargets) { + if (target.proxy() == proxy) { + return true; + } } return this->onIsUsed(proxy); @@ -144,10 +159,11 @@ class GrRenderTask : public SkRefCnt { static uint32_t CreateUniqueID(); enum Flags { - kClosed_Flag = 0x01, //!< This GrRenderTask can't accept any more dependencies. + kClosed_Flag = 0x01, //!< This task can't accept any more dependencies. + kDisowned_Flag = 0x02, //!< This task is disowned by its creating GrDrawingManager. - kWasOutput_Flag = 0x02, //!< Flag for topological sorting - kTempMark_Flag = 0x04, //!< Flag for topological sorting + kWasOutput_Flag = 0x04, //!< Flag for topological sorting + kTempMark_Flag = 0x08, //!< Flag for topological sorting }; void setFlag(uint32_t flag) { @@ -203,6 +219,8 @@ class GrRenderTask : public SkRefCnt { // (http://skbug.com/9406). To accomplish this, we make and reuse one single resolve task for // each render task, then add it as a dependency during makeClosed(). GrTextureResolveRenderTask* fTextureResolveTask = nullptr; + + SkDEBUGCODE(GrDrawingManager *fDrawingMgr = nullptr;) }; #endif diff --git a/src/gpu/GrRingBuffer.cpp b/src/gpu/GrRingBuffer.cpp index c9014286dea3e..145c88a72df8e 100644 --- a/src/gpu/GrRingBuffer.cpp +++ b/src/gpu/GrRingBuffer.cpp @@ -61,10 +61,12 @@ GrRingBuffer::Slice GrRingBuffer::suballocate(size_t size) { fTotalSize *= 2; fBuffer = this->createBuffer(fTotalSize); SkASSERT(fBuffer); - SkAutoSpinlock lock(fMutex); - fHead = 0; - fTail = 0; - fGenID++; + { + SkAutoSpinlock lock(fMutex); + fHead = 0; + fTail = 0; + fGenID++; + } offset = this->getAllocationOffset(size); SkASSERT(offset < fTotalSize); return { fBuffer, offset }; diff --git a/src/gpu/GrRingBuffer.h b/src/gpu/GrRingBuffer.h index f8169220eaab8..2498c0d9cfb8d 100644 --- a/src/gpu/GrRingBuffer.h +++ b/src/gpu/GrRingBuffer.h @@ -13,7 +13,10 @@ #include "include/private/SkSpinlock.h" /** - * A wrapper for a GPU buffer that allocates slices in a continuous ring + * A wrapper for a GPU buffer that allocates slices in a continuous ring. + * + * It's assumed that suballocate and startSubmit are always called in the same thread, + * and that finishSubmit could be called in a separate thread. */ class GrRingBuffer : public SkRefCnt { public: diff --git a/src/gpu/GrSPIRVUniformHandler.h b/src/gpu/GrSPIRVUniformHandler.h index 0ba4ff9b8acf3..fe4137c73092f 100644 --- a/src/gpu/GrSPIRVUniformHandler.h +++ b/src/gpu/GrSPIRVUniformHandler.h @@ -42,6 +42,9 @@ class GrSPIRVUniformHandler : public GrGLSLUniformHandler { UniformInfo& uniform(int idx) override { return fUniforms.item(idx); } + const UniformInfo& uniform(int idx) const override { + return fUniforms.item(idx); + } private: explicit GrSPIRVUniformHandler(GrGLSLProgramBuilder* program); diff --git a/src/gpu/GrSTArenaList.h b/src/gpu/GrSTArenaList.h new file mode 100644 index 0000000000000..eb86c7054b664 --- /dev/null +++ b/src/gpu/GrSTArenaList.h @@ -0,0 +1,55 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrSTArenaList_DEFINED +#define GrSTArenaList_DEFINED + +#include "src/core/SkArenaAlloc.h" + +// A singly-linked list whose head element is a "stack allocated" class member and whose subsequent +// elements are allocated in an SkArenaAlloc. +template class GrSTArenaList { +public: + struct Node { + template + Node(Args&&... elementArgs) : fElement(std::forward(elementArgs)...) {} + T fElement; + Node* fNext = nullptr; + }; + + template + GrSTArenaList(Args&&... headArgs) : fHead(std::forward(headArgs)...) {} + + const T& head() const { return fHead.fElement; } + T& head() { return fHead.fElement; } + + void concat(GrSTArenaList&& list, SkArenaAlloc* allocator) { + Node* listHeadCopy = allocator->make(std::move(list.fHead)); + fTail->fNext = listHeadCopy; + // If the list's fTail pointed to its locally allocated head element, then point our fTail + // at the copy we just made in the arena. Otherwise the list's fTail already points at an + // arena-allocated element, so keep it. + fTail = (list.fTail == &list.fHead) ? listHeadCopy : list.fTail; + } + + struct Iter { + bool operator!=(const Iter& it) const { return fCurr != it.fCurr; } + bool operator==(const Iter& it) const { return fCurr == it.fCurr; } + void operator++() { fCurr = fCurr->fNext; } + T& operator*() { return fCurr->fElement; } + Node* fCurr; + }; + + Iter begin() { return Iter{&fHead}; } + Iter end() { return Iter{nullptr}; } + +private: + Node fHead; + Node* fTail = &fHead; +}; + +#endif diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp index 65e6d4752929d..2117df4bf5fb4 100644 --- a/src/gpu/GrSWMaskHelper.cpp +++ b/src/gpu/GrSWMaskHelper.cpp @@ -7,7 +7,7 @@ #include "src/gpu/GrSWMaskHelper.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkMatrixProvider.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrCaps.h" diff --git a/src/gpu/GrSWMaskHelper.h b/src/gpu/GrSWMaskHelper.h index 5ca23f70d61c7..5982bcffb3517 100644 --- a/src/gpu/GrSWMaskHelper.h +++ b/src/gpu/GrSWMaskHelper.h @@ -15,6 +15,7 @@ #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkDraw.h" #include "src/core/SkRasterClip.h" +#include "src/gpu/GrSurfaceProxyView.h" class GrShape; class GrStyledShape; diff --git a/src/gpu/GrScissorState.h b/src/gpu/GrScissorState.h index dac735b023da4..cc1cea25781e5 100644 --- a/src/gpu/GrScissorState.h +++ b/src/gpu/GrScissorState.h @@ -10,33 +10,74 @@ #include "include/core/SkRect.h" +/** + * The scissor state is stored as the scissor rectangle and the backing store bounds of the render + * target that the scissor will apply to. If the render target is approximate fit and the padded + * content should not be modified, the clip should apply the render target context's logical bounds + * as part of the scissor (e.g. when stenciling). This puts the onus on the render target context + * to intentionally discard the scissor at its logical bounds when drawing into the padded content + * is acceptable (e.g. color-only updates). + */ class GrScissorState { public: - GrScissorState() : fEnabled(false) {} - GrScissorState(const SkIRect& rect) : fEnabled(true), fRect(rect) {} - void setDisabled() { fEnabled = false; } - void set(const SkIRect& rect) { fRect = rect; fEnabled = true; } + // The disabled scissor state for a render target of the given size. + explicit GrScissorState(const SkISize& rtDims) + : fRTSize(rtDims) + , fRect(SkIRect::MakeSize(rtDims)) {} + + void setDisabled() { fRect = SkIRect::MakeSize(fRTSize); } + bool set(const SkIRect& rect) { + this->setDisabled(); + return this->intersect(rect); + } + bool SK_WARN_UNUSED_RESULT intersect(const SkIRect& rect) { - if (!fEnabled) { - this->set(rect); + if (!fRect.intersect(rect)) { + fRect.setEmpty(); + return false; + } else { return true; } - return fRect.intersect(rect); } + + // If the scissor was configured for the backing store dimensions and it's acceptable to + // draw outside the logical dimensions of the target, this will discard the scissor test if + // the test wouldn't modify the logical dimensions. + bool relaxTest(const SkISize& logicalDimensions) { + SkASSERT(logicalDimensions.fWidth <= fRTSize.fWidth && + logicalDimensions.fHeight <= fRTSize.fHeight); + if (fRect.fLeft == 0 && fRect.fTop == 0 && fRect.fRight >= logicalDimensions.fWidth && + fRect.fBottom >= logicalDimensions.fHeight) { + this->setDisabled(); + return true; + } else { + return false; + } + } + bool operator==(const GrScissorState& other) const { - return fEnabled == other.fEnabled && - (false == fEnabled || fRect == other.fRect); + return fRTSize == other.fRTSize && fRect == other.fRect; } bool operator!=(const GrScissorState& other) const { return !(*this == other); } - bool enabled() const { return fEnabled; } + bool enabled() const { + SkASSERT(fRect.isEmpty() || SkIRect::MakeSize(fRTSize).contains(fRect)); + // This is equivalent to a strict contains check on SkIRect::MakeSize(rtSize) w/o creating + // the render target bounding rectangle. + return fRect.fLeft > 0 || fRect.fTop > 0 || + fRect.fRight < fRTSize.fWidth || fRect.fBottom < fRTSize.fHeight; + } + + // Will always be equal to or contained in the rt bounds, or empty if scissor rectangles were + // added that did not intersect with the render target or prior scissor. const SkIRect& rect() const { - SkASSERT(fEnabled); + SkASSERT(fRect.isEmpty() || SkIRect::MakeSize(fRTSize).contains(fRect)); return fRect; } private: - bool fEnabled; + // The scissor is considered enabled if the rectangle does not cover the render target + SkISize fRTSize; SkIRect fRect; }; diff --git a/src/gpu/GrShaderCaps.cpp b/src/gpu/GrShaderCaps.cpp index 78bcab334dac5..a629085a099b9 100644 --- a/src/gpu/GrShaderCaps.cpp +++ b/src/gpu/GrShaderCaps.cpp @@ -49,7 +49,6 @@ GrShaderCaps::GrShaderCaps(const GrContextOptions& options) { fPreferFlatInterpolation = false; fNoPerspectiveInterpolationSupport = false; fSampleMaskSupport = false; - fTessellationSupport = false; fExternalTextureSupport = false; fVertexIDSupport = false; fFPManipulationSupport = false; @@ -77,6 +76,7 @@ GrShaderCaps::GrShaderCaps(const GrContextOptions& options) { fFBFetchColorName = nullptr; fFBFetchExtensionString = nullptr; fMaxFragmentSamplers = 0; + fMaxTessellationSegments = 0; fAdvBlendEqInteraction = kNotSupported_AdvBlendEqInteraction; } @@ -133,7 +133,6 @@ void GrShaderCaps::dumpJSON(SkJSONWriter* writer) const { writer->appendBool("Prefer flat interpolation", fPreferFlatInterpolation); writer->appendBool("No perspective interpolation support", fNoPerspectiveInterpolationSupport); writer->appendBool("Sample mask support", fSampleMaskSupport); - writer->appendBool("Tessellation Support", fTessellationSupport); writer->appendBool("External texture support", fExternalTextureSupport); writer->appendBool("sk_VertexID support", fVertexIDSupport); writer->appendBool("Floating point manipulation support", fFPManipulationSupport); @@ -146,6 +145,7 @@ void GrShaderCaps::dumpJSON(SkJSONWriter* writer) const { writer->appendBool("Can use do-while loops", fCanUseDoLoops); writer->appendS32("Max FS Samplers", fMaxFragmentSamplers); + writer->appendS32("Max Tessellation Segments", fMaxTessellationSegments); writer->appendString("Advanced blend equation interaction", kAdvBlendEqInteractionStr[fAdvBlendEqInteraction]); @@ -185,7 +185,7 @@ void GrShaderCaps::applyOptionsOverrides(const GrContextOptions& options) { fGeometryShaderSupport = false; } if (options.fSuppressTessellationShaders) { - fTessellationSupport = false; + fMaxTessellationSegments = 0; } #endif } diff --git a/src/gpu/GrShaderCaps.h b/src/gpu/GrShaderCaps.h index 84e6372f37fec..3b3e1bf9b5ff0 100644 --- a/src/gpu/GrShaderCaps.h +++ b/src/gpu/GrShaderCaps.h @@ -72,8 +72,6 @@ class GrShaderCaps : public SkRefCnt { bool sampleMaskSupport() const { return fSampleMaskSupport; } - bool tessellationSupport() const { return fTessellationSupport; } - bool externalTextureSupport() const { return fExternalTextureSupport; } bool vertexIDSupport() const { return fVertexIDSupport; } @@ -248,6 +246,11 @@ class GrShaderCaps : public SkRefCnt { int maxFragmentSamplers() const { return fMaxFragmentSamplers; } + // Maximum number of segments a tessellation edge can be divided into. + int maxTessellationSegments() const { return fMaxTessellationSegments; } + + bool tessellationSupport() const { return SkToBool(fMaxTessellationSegments);} + bool textureSwizzleAppliedInShader() const { return fTextureSwizzleAppliedInShader; } GrGLSLGeneration generation() const { return fGLSLGeneration; } @@ -271,7 +274,6 @@ class GrShaderCaps : public SkRefCnt { bool fPreferFlatInterpolation : 1; bool fNoPerspectiveInterpolationSupport : 1; bool fSampleMaskSupport : 1; - bool fTessellationSupport : 1; bool fExternalTextureSupport : 1; bool fVertexIDSupport : 1; bool fFPManipulationSupport : 1; @@ -324,6 +326,7 @@ class GrShaderCaps : public SkRefCnt { const char* fFBFetchExtensionString; int fMaxFragmentSamplers; + int fMaxTessellationSegments; AdvBlendEqInteraction fAdvBlendEqInteraction; diff --git a/src/gpu/GrSoftwarePathRenderer.cpp b/src/gpu/GrSoftwarePathRenderer.cpp index 921232589127f..4c59b586cf587 100644 --- a/src/gpu/GrSoftwarePathRenderer.cpp +++ b/src/gpu/GrSoftwarePathRenderer.cpp @@ -7,6 +7,7 @@ #include "src/gpu/GrSoftwarePathRenderer.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkSemaphore.h" #include "src/core/SkTaskGroup.h" #include "src/core/SkTraceEvent.h" @@ -75,8 +76,7 @@ bool GrSoftwarePathRenderer::GetShapeAndClipBounds(GrRenderTargetContext* render SkIRect* clippedDevShapeBounds, SkIRect* devClipBounds) { // compute bounds as intersection of rt size, clip, and path - *devClipBounds = clip ? clip->getConservativeBounds(renderTargetContext->width(), - renderTargetContext->height()) + *devClipBounds = clip ? clip->getConservativeBounds() : SkIRect::MakeWH(renderTargetContext->width(), renderTargetContext->height()); @@ -328,7 +328,7 @@ bool GrSoftwarePathRenderer::onDrawPath(const DrawPathArgs& args) { GrAA aa = GrAA(GrAAType::kCoverage == args.fAAType); SkTaskGroup* taskGroup = nullptr; - if (auto direct = args.fContext->priv().asDirectContext()) { + if (auto direct = args.fContext->asDirectContext()) { taskGroup = direct->priv().getTaskGroup(); } diff --git a/src/gpu/GrStencilClip.h b/src/gpu/GrStencilClip.h index 854ba1ce510e1..a55c463de2c92 100644 --- a/src/gpu/GrStencilClip.h +++ b/src/gpu/GrStencilClip.h @@ -16,12 +16,14 @@ */ class GrStencilClip final : public GrHardClip { public: - GrStencilClip(uint32_t stencilStackID = SK_InvalidGenID) : fStencilStackID(stencilStackID) {} + explicit GrStencilClip(const SkISize& rtDims, uint32_t stencilStackID = SK_InvalidGenID) + : fFixedClip(rtDims) + , fStencilStackID(stencilStackID) {} - explicit GrStencilClip(const SkIRect& scissorRect, uint32_t stencilStackID = SK_InvalidGenID) - : fFixedClip(scissorRect) - , fStencilStackID(stencilStackID) { - } + GrStencilClip(const SkISize& rtDims, const SkIRect& scissorRect, + uint32_t stencilStackID = SK_InvalidGenID) + : fFixedClip(rtDims, scissorRect) + , fStencilStackID(stencilStackID) {} const GrFixedClip& fixedClip() const { return fFixedClip; } GrFixedClip& fixedClip() { return fFixedClip; } @@ -30,23 +32,29 @@ class GrStencilClip final : public GrHardClip { bool hasStencilClip() const { return SK_InvalidGenID != fStencilStackID; } void setStencilClip(uint32_t stencilStackID) { fStencilStackID = stencilStackID; } - bool quickContains(const SkRect& rect) const override { - return !this->hasStencilClip() && fFixedClip.quickContains(rect); - } - SkIRect getConservativeBounds(int width, int height) const override { - return fFixedClip.getConservativeBounds(width, height); + SkIRect getConservativeBounds() const final { + return fFixedClip.getConservativeBounds(); } - bool isRRect(const SkRect& rtBounds, SkRRect* rr, GrAA* aa) const override { - return !this->hasStencilClip() && fFixedClip.isRRect(rtBounds, rr, aa); - } - bool apply(int rtWidth, int rtHeight, GrAppliedHardClip* out, SkRect* bounds) const override { - if (!fFixedClip.apply(rtWidth, rtHeight, out, bounds)) { - return false; + + Effect apply(GrAppliedHardClip* out, SkRect* bounds) const final { + Effect effect = fFixedClip.apply(out, bounds); + if (effect == Effect::kClippedOut) { + // Stencil won't bring back coverage + return Effect::kClippedOut; } if (this->hasStencilClip()) { out->addStencilClip(fStencilStackID); + effect = Effect::kClipped; + } + return effect; + } + + PreClipResult preApply(const SkRect& drawBounds) const final { + if (this->hasStencilClip()) { + return this->INHERITED::preApply(drawBounds); + } else { + return fFixedClip.preApply(drawBounds); } - return true; } private: diff --git a/src/gpu/GrStencilMaskHelper.cpp b/src/gpu/GrStencilMaskHelper.cpp index c4bd9b9e1b57b..f261e265e92f5 100644 --- a/src/gpu/GrStencilMaskHelper.cpp +++ b/src/gpu/GrStencilMaskHelper.cpp @@ -334,7 +334,8 @@ bool GrStencilMaskHelper::init(const SkIRect& bounds, uint32_t genID, } fClip.setStencilClip(genID); - fClip.fixedClip().setScissor(bounds); + // Should have caught bounds not intersecting the render target much earlier in clip application + SkAssertResult(fClip.fixedClip().setScissor(bounds)); if (!windowRects.empty()) { fClip.fixedClip().setWindowRectangles( windowRects, GrWindowRectsState::Mode::kExclusive); diff --git a/src/gpu/GrStencilMaskHelper.h b/src/gpu/GrStencilMaskHelper.h index 547bee2d934f6..f6cd2b90aa248 100644 --- a/src/gpu/GrStencilMaskHelper.h +++ b/src/gpu/GrStencilMaskHelper.h @@ -39,7 +39,8 @@ class GrStencilMaskHelper : SkNoncopyable { // of which must outlive the helper. GrStencilMaskHelper(GrRecordingContext* context, GrRenderTargetContext* rtc) : fContext(context) - , fRTC(rtc) {} + , fRTC(rtc) + , fClip(rtc->dimensions()) {} // Returns true if the stencil mask must be redrawn bool init(const SkIRect& maskBounds, uint32_t genID, diff --git a/src/gpu/GrSurface.cpp b/src/gpu/GrSurface.cpp index 03f46166116a4..1aa4444482f41 100644 --- a/src/gpu/GrSurface.cpp +++ b/src/gpu/GrSurface.cpp @@ -7,6 +7,7 @@ #include "include/gpu/GrContext.h" #include "src/core/SkCompressedDataUtils.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrRenderTarget.h" #include "src/gpu/GrResourceProvider.h" #include "src/gpu/GrSurface.h" @@ -34,7 +35,7 @@ size_t GrSurface::ComputeSize(const GrCaps& caps, dimensions = GrResourceProvider::MakeApprox(dimensions); } - SkImage::CompressionType compressionType = caps.compressionType(format); + SkImage::CompressionType compressionType = GrBackendFormatToCompressionType(format); if (compressionType != SkImage::CompressionType::kNone) { colorSize = SkCompressedFormatDataSize(compressionType, dimensions, mipMapped == GrMipMapped::kYes); diff --git a/src/gpu/GrSurfaceContext.cpp b/src/gpu/GrSurfaceContext.cpp index efc76cbd6bc4d..5ab0986458110 100644 --- a/src/gpu/GrSurfaceContext.cpp +++ b/src/gpu/GrSurfaceContext.cpp @@ -7,9 +7,10 @@ #include "src/gpu/GrSurfaceContext.h" -#include "include/effects/SkRuntimeEffect.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkAutoPixmapStorage.h" +#include "src/core/SkYUVMath.h" #include "src/gpu/GrAuditTrail.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDataUtils.h" @@ -23,10 +24,10 @@ #include "src/gpu/GrSurfacePriv.h" #include "src/gpu/SkGr.h" #include "src/gpu/effects/GrBicubicEffect.h" -#include "src/gpu/effects/GrSkSLFP.h" +#include "src/gpu/effects/generated/GrColorMatrixFragmentProcessor.h" #define ASSERT_SINGLE_OWNER GR_ASSERT_SINGLE_OWNER(this->singleOwner()) -#define RETURN_FALSE_IF_ABANDONED if (this->fContext->priv().abandoned()) { return false; } +#define RETURN_FALSE_IF_ABANDONED if (this->fContext->abandoned()) { return false; } std::unique_ptr GrSurfaceContext::Make(GrRecordingContext* context, GrSurfaceProxyView readView, @@ -37,7 +38,7 @@ std::unique_ptr GrSurfaceContext::Make(GrRecordingContext* con // GrSurfaceContext which need the context will mostly likely fail later on without an issue. // However having this hear adds some reassurance in case there is a path doesn't handle an // abandoned context correctly. It also lets us early out of some extra work. - if (context->priv().abandoned()) { + if (context->abandoned()) { return nullptr; } GrSurfaceProxy* proxy = readView.proxy(); @@ -107,7 +108,7 @@ GrSurfaceContext::GrSurfaceContext(GrRecordingContext* context, : fContext(context) , fReadView(std::move(readView)) , fColorInfo(colorType, alphaType, std::move(colorSpace)) { - SkASSERT(!context->priv().abandoned()); + SkASSERT(!context->abandoned()); } const GrCaps* GrSurfaceContext::caps() const { return fContext->priv().caps(); } @@ -131,13 +132,13 @@ GrSingleOwner* GrSurfaceContext::singleOwner() { #endif bool GrSurfaceContext::readPixels(const GrImageInfo& origDstInfo, void* dst, size_t rowBytes, - SkIPoint pt, GrContext* direct) { + SkIPoint pt, GrDirectContext* direct) { ASSERT_SINGLE_OWNER RETURN_FALSE_IF_ABANDONED SkDEBUGCODE(this->validate();) GR_AUDIT_TRAIL_AUTO_FRAME(this->auditTrail(), "GrSurfaceContext::readPixels"); - if (!direct && !(direct = fContext->priv().asDirectContext())) { + if (!direct && !(direct = fContext->asDirectContext())) { return false; } @@ -289,13 +290,13 @@ bool GrSurfaceContext::readPixels(const GrImageInfo& origDstInfo, void* dst, siz } bool GrSurfaceContext::writePixels(const GrImageInfo& origSrcInfo, const void* src, size_t rowBytes, - SkIPoint pt, GrContext* direct) { + SkIPoint pt, GrDirectContext* direct) { ASSERT_SINGLE_OWNER RETURN_FALSE_IF_ABANDONED SkDEBUGCODE(this->validate();) GR_AUDIT_TRAIL_AUTO_FRAME(this->auditTrail(), "GrSurfaceContext::writePixels"); - if (!direct && !(direct = fContext->priv().asDirectContext())) { + if (!direct && !(direct = fContext->asDirectContext())) { return false; } @@ -476,6 +477,511 @@ bool GrSurfaceContext::writePixels(const GrImageInfo& origSrcInfo, const void* s srcColorType, src, rowBytes); } +void GrSurfaceContext::asyncRescaleAndReadPixels(const SkImageInfo& info, + const SkIRect& srcRect, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context) { + auto direct = fContext->asDirectContext(); + + // We implement this by rendering and we don't currently support rendering kUnpremul. + if (info.alphaType() == kUnpremul_SkAlphaType) { + callback(context, nullptr); + return; + } + if (!direct) { + callback(context, nullptr); + return; + } + auto rt = this->asRenderTargetProxy(); + if (rt && rt->wrapsVkSecondaryCB()) { + callback(context, nullptr); + return; + } + if (rt && rt->framebufferOnly()) { + callback(context, nullptr); + return; + } + auto dstCT = SkColorTypeToGrColorType(info.colorType()); + if (dstCT == GrColorType::kUnknown) { + callback(context, nullptr); + return; + } + bool needsRescale = srcRect.width() != info.width() || srcRect.height() != info.height(); + auto colorTypeOfFinalContext = this->colorInfo().colorType(); + auto backendFormatOfFinalContext = this->asSurfaceProxy()->backendFormat(); + if (needsRescale) { + colorTypeOfFinalContext = dstCT; + backendFormatOfFinalContext = + this->caps()->getDefaultBackendFormat(dstCT, GrRenderable::kYes); + } + auto readInfo = this->caps()->supportedReadPixelsColorType(colorTypeOfFinalContext, + backendFormatOfFinalContext, dstCT); + // Fail if we can't read from the source surface's color type. + if (readInfo.fColorType == GrColorType::kUnknown) { + callback(context, nullptr); + return; + } + // Fail if read color type does not have all of dstCT's color channels and those missing color + // channels are in the src. + uint32_t dstChannels = GrColorTypeChannelFlags(dstCT); + uint32_t legalReadChannels = GrColorTypeChannelFlags(readInfo.fColorType); + uint32_t srcChannels = GrColorTypeChannelFlags(this->colorInfo().colorType()); + if ((~legalReadChannels & dstChannels) & srcChannels) { + callback(context, nullptr); + return; + } + + std::unique_ptr tempRTC; + int x = srcRect.fLeft; + int y = srcRect.fTop; + if (needsRescale) { + tempRTC = this->rescale(info, kTopLeft_GrSurfaceOrigin, srcRect, rescaleGamma, + rescaleQuality); + if (!tempRTC) { + callback(context, nullptr); + return; + } + SkASSERT(SkColorSpace::Equals(tempRTC->colorInfo().colorSpace(), info.colorSpace())); + SkASSERT(tempRTC->origin() == kTopLeft_GrSurfaceOrigin); + x = y = 0; + } else { + sk_sp xform = GrColorSpaceXform::Make(this->colorInfo().colorSpace(), + this->colorInfo().alphaType(), + info.colorSpace(), + info.alphaType()); + // Insert a draw to a temporary surface if we need to do a y-flip or color space conversion. + if (this->origin() == kBottomLeft_GrSurfaceOrigin || xform) { + GrSurfaceProxyView texProxyView = this->readSurfaceView(); + SkRect srcRectToDraw = SkRect::Make(srcRect); + // If the src is not texturable first try to make a copy to a texture. + if (!texProxyView.asTextureProxy()) { + texProxyView = + GrSurfaceProxyView::Copy(fContext, texProxyView, GrMipMapped::kNo, srcRect, + SkBackingFit::kApprox, SkBudgeted::kNo); + if (!texProxyView) { + callback(context, nullptr); + return; + } + SkASSERT(texProxyView.asTextureProxy()); + srcRectToDraw = SkRect::MakeWH(srcRect.width(), srcRect.height()); + } + tempRTC = GrRenderTargetContext::Make(direct, this->colorInfo().colorType(), + info.refColorSpace(), SkBackingFit::kApprox, + srcRect.size(), 1, GrMipMapped::kNo, + GrProtected::kNo, kTopLeft_GrSurfaceOrigin); + if (!tempRTC) { + callback(context, nullptr); + return; + } + tempRTC->drawTexture(nullptr, std::move(texProxyView), this->colorInfo().alphaType(), + GrSamplerState::Filter::kNearest, SkBlendMode::kSrc, + SK_PMColor4fWHITE, srcRectToDraw, + SkRect::MakeWH(srcRect.width(), srcRect.height()), GrAA::kNo, + GrQuadAAFlags::kNone, SkCanvas::kFast_SrcRectConstraint, + SkMatrix::I(), std::move(xform)); + x = y = 0; + } + } + auto rtc = tempRTC ? tempRTC.get() : this; + return rtc->asyncReadPixels(SkIRect::MakeXYWH(x, y, info.width(), info.height()), + info.colorType(), callback, context); +} + +class GrSurfaceContext::AsyncReadResult : public SkImage::AsyncReadResult { +public: + AsyncReadResult(uint32_t inboxID) : fInboxID(inboxID) {} + ~AsyncReadResult() override { + for (int i = 0; i < fPlanes.count(); ++i) { + if (!fPlanes[i].fMappedBuffer) { + delete[] static_cast(fPlanes[i].fData); + } else { + GrClientMappedBufferManager::BufferFinishedMessageBus::Post( + {std::move(fPlanes[i].fMappedBuffer), fInboxID}); + } + } + } + + int count() const override { return fPlanes.count(); } + const void* data(int i) const override { return fPlanes[i].fData; } + size_t rowBytes(int i) const override { return fPlanes[i].fRowBytes; } + + bool addTransferResult(const PixelTransferResult& result, + SkISize dimensions, + size_t rowBytes, + GrClientMappedBufferManager* manager) { + SkASSERT(!result.fTransferBuffer->isMapped()); + const void* mappedData = result.fTransferBuffer->map(); + if (!mappedData) { + return false; + } + if (result.fPixelConverter) { + std::unique_ptr convertedData(new char[rowBytes * dimensions.height()]); + result.fPixelConverter(convertedData.get(), mappedData); + this->addCpuPlane(std::move(convertedData), rowBytes); + result.fTransferBuffer->unmap(); + } else { + manager->insert(result.fTransferBuffer); + this->addMappedPlane(mappedData, rowBytes, std::move(result.fTransferBuffer)); + } + return true; + } + + void addCpuPlane(std::unique_ptr data, size_t rowBytes) { + SkASSERT(data); + SkASSERT(rowBytes > 0); + fPlanes.emplace_back(data.release(), rowBytes, nullptr); + } + +private: + void addMappedPlane(const void* data, size_t rowBytes, sk_sp mappedBuffer) { + SkASSERT(data); + SkASSERT(rowBytes > 0); + SkASSERT(mappedBuffer); + SkASSERT(mappedBuffer->isMapped()); + fPlanes.emplace_back(data, rowBytes, std::move(mappedBuffer)); + } + + struct Plane { + Plane(const void* data, size_t rowBytes, sk_sp buffer) + : fData(data), fRowBytes(rowBytes), fMappedBuffer(std::move(buffer)) {} + const void* fData; + size_t fRowBytes; + // If this is null then fData is heap alloc and must be delete[]ed as const char[]. + sk_sp fMappedBuffer; + }; + SkSTArray<3, Plane> fPlanes; + uint32_t fInboxID; +}; + +void GrSurfaceContext::asyncReadPixels(const SkIRect& rect, + SkColorType colorType, + ReadPixelsCallback callback, + ReadPixelsContext context) { + SkASSERT(rect.fLeft >= 0 && rect.fRight <= this->width()); + SkASSERT(rect.fTop >= 0 && rect.fBottom <= this->height()); + + if (this->asSurfaceProxy()->isProtected() == GrProtected::kYes) { + callback(context, nullptr); + return; + } + + auto directContext = fContext->asDirectContext(); + SkASSERT(directContext); + auto mappedBufferManager = directContext->priv().clientMappedBufferManager(); + + auto transferResult = this->transferPixels(SkColorTypeToGrColorType(colorType), rect); + + if (!transferResult.fTransferBuffer) { + auto ii = SkImageInfo::Make(rect.size(), colorType, this->colorInfo().alphaType(), + this->colorInfo().refColorSpace()); + auto result = std::make_unique(0); + std::unique_ptr data(new char[ii.computeMinByteSize()]); + SkPixmap pm(ii, data.get(), ii.minRowBytes()); + result->addCpuPlane(std::move(data), pm.rowBytes()); + + if (!this->readPixels(ii, pm.writable_addr(), pm.rowBytes(), {rect.fLeft, rect.fTop})) { + callback(context, nullptr); + return; + } + callback(context, std::move(result)); + return; + } + + struct FinishContext { + ReadPixelsCallback* fClientCallback; + ReadPixelsContext fClientContext; + SkISize fSize; + SkColorType fColorType; + GrClientMappedBufferManager* fMappedBufferManager; + PixelTransferResult fTransferResult; + }; + // Assumption is that the caller would like to flush. We could take a parameter or require an + // explicit flush from the caller. We'd have to have a way to defer attaching the finish + // callback to GrGpu until after the next flush that flushes our op list, though. + auto* finishContext = new FinishContext{callback, + context, + rect.size(), + colorType, + mappedBufferManager, + std::move(transferResult)}; + auto finishCallback = [](GrGpuFinishedContext c) { + const auto* context = reinterpret_cast(c); + auto result = std::make_unique(context->fMappedBufferManager->inboxID()); + size_t rowBytes = context->fSize.width() * SkColorTypeBytesPerPixel(context->fColorType); + if (!result->addTransferResult(context->fTransferResult, context->fSize, rowBytes, + context->fMappedBufferManager)) { + result.reset(); + } + (*context->fClientCallback)(context->fClientContext, std::move(result)); + delete context; + }; + GrFlushInfo flushInfo; + flushInfo.fFinishedContext = finishContext; + flushInfo.fFinishedProc = finishCallback; + this->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo, nullptr); +} + +void GrSurfaceContext::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, + sk_sp dstColorSpace, + const SkIRect& srcRect, + SkISize dstSize, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context) { + SkASSERT(srcRect.fLeft >= 0 && srcRect.fRight <= this->width()); + SkASSERT(srcRect.fTop >= 0 && srcRect.fBottom <= this->height()); + SkASSERT(!dstSize.isZero()); + SkASSERT((dstSize.width() % 2 == 0) && (dstSize.height() % 2 == 0)); + + auto direct = fContext->asDirectContext(); + if (!direct) { + callback(context, nullptr); + return; + } + auto rt = this->asRenderTargetProxy(); + if (rt && rt->wrapsVkSecondaryCB()) { + callback(context, nullptr); + return; + } + if (rt && rt->framebufferOnly()) { + callback(context, nullptr); + return; + } + if (this->asSurfaceProxy()->isProtected() == GrProtected::kYes) { + callback(context, nullptr); + return; + } + int x = srcRect.fLeft; + int y = srcRect.fTop; + bool needsRescale = srcRect.size() != dstSize; + GrSurfaceProxyView srcView; + if (needsRescale) { + // We assume the caller wants kPremul. There is no way to indicate a preference. + auto info = SkImageInfo::Make(dstSize, kRGBA_8888_SkColorType, kPremul_SkAlphaType, + dstColorSpace); + // TODO: Incorporate the YUV conversion into last pass of rescaling. + auto tempRTC = this->rescale(info, kTopLeft_GrSurfaceOrigin, srcRect, rescaleGamma, + rescaleQuality); + if (!tempRTC) { + callback(context, nullptr); + return; + } + SkASSERT(SkColorSpace::Equals(tempRTC->colorInfo().colorSpace(), info.colorSpace())); + SkASSERT(tempRTC->origin() == kTopLeft_GrSurfaceOrigin); + x = y = 0; + srcView = tempRTC->readSurfaceView(); + } else { + srcView = this->readSurfaceView(); + if (!srcView.asTextureProxy()) { + srcView = GrSurfaceProxyView::Copy(fContext, std::move(srcView), GrMipMapped::kNo, + srcRect, SkBackingFit::kApprox, SkBudgeted::kYes); + if (!srcView) { + // If we can't get a texture copy of the contents then give up. + callback(context, nullptr); + return; + } + SkASSERT(srcView.asTextureProxy()); + x = y = 0; + } + // We assume the caller wants kPremul. There is no way to indicate a preference. + sk_sp xform = GrColorSpaceXform::Make( + this->colorInfo().colorSpace(), this->colorInfo().alphaType(), dstColorSpace.get(), + kPremul_SkAlphaType); + if (xform) { + SkRect srcRectToDraw = SkRect::MakeXYWH(x, y, srcRect.width(), srcRect.height()); + auto tempRTC = GrRenderTargetContext::Make( + direct, this->colorInfo().colorType(), dstColorSpace, SkBackingFit::kApprox, + dstSize, 1, GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); + if (!tempRTC) { + callback(context, nullptr); + return; + } + tempRTC->drawTexture(nullptr, std::move(srcView), this->colorInfo().alphaType(), + GrSamplerState::Filter::kNearest, SkBlendMode::kSrc, + SK_PMColor4fWHITE, srcRectToDraw, SkRect::Make(srcRect.size()), + GrAA::kNo, GrQuadAAFlags::kNone, SkCanvas::kFast_SrcRectConstraint, + SkMatrix::I(), std::move(xform)); + srcView = tempRTC->readSurfaceView(); + SkASSERT(srcView.asTextureProxy()); + x = y = 0; + } + } + + auto yRTC = GrRenderTargetContext::MakeWithFallback( + direct, GrColorType::kAlpha_8, dstColorSpace, SkBackingFit::kApprox, dstSize, 1, + GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); + int halfW = dstSize.width() /2; + int halfH = dstSize.height()/2; + auto uRTC = GrRenderTargetContext::MakeWithFallback( + direct, GrColorType::kAlpha_8, dstColorSpace, SkBackingFit::kApprox, {halfW, halfH}, 1, + GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); + auto vRTC = GrRenderTargetContext::MakeWithFallback( + direct, GrColorType::kAlpha_8, dstColorSpace, SkBackingFit::kApprox, {halfW, halfH}, 1, + GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); + if (!yRTC || !uRTC || !vRTC) { + callback(context, nullptr); + return; + } + + float baseM[20]; + SkColorMatrix_RGB2YUV(yuvColorSpace, baseM); + + // TODO: Use one transfer buffer for all three planes to reduce map/unmap cost? + + auto texMatrix = SkMatrix::Translate(x, y); + + SkRect dstRectY = SkRect::Make(dstSize); + SkRect dstRectUV = SkRect::MakeWH(halfW, halfH); + + bool doSynchronousRead = !this->caps()->transferFromSurfaceToBufferSupport(); + PixelTransferResult yTransfer, uTransfer, vTransfer; + + // This matrix generates (r,g,b,a) = (0, 0, 0, y) + float yM[20]; + std::fill_n(yM, 15, 0.f); + std::copy_n(baseM + 0, 5, yM + 15); + GrPaint yPaint; + auto yTexFP = GrTextureEffect::Make(srcView, this->colorInfo().alphaType(), texMatrix); + auto yColFP = GrColorMatrixFragmentProcessor::Make(std::move(yTexFP), yM, + /*unpremulInput=*/false, + /*clampRGBOutput=*/true, + /*premulOutput=*/false); + yPaint.addColorFragmentProcessor(std::move(yColFP)); + yPaint.setPorterDuffXPFactory(SkBlendMode::kSrc); + yRTC->fillRectToRect(nullptr, std::move(yPaint), GrAA::kNo, SkMatrix::I(), dstRectY, dstRectY); + if (!doSynchronousRead) { + yTransfer = yRTC->transferPixels(GrColorType::kAlpha_8, + SkIRect::MakeWH(yRTC->width(), yRTC->height())); + if (!yTransfer.fTransferBuffer) { + callback(context, nullptr); + return; + } + } + + texMatrix.preScale(2.f, 2.f); + // This matrix generates (r,g,b,a) = (0, 0, 0, u) + float uM[20]; + std::fill_n(uM, 15, 0.f); + std::copy_n(baseM + 5, 5, uM + 15); + GrPaint uPaint; + auto uTexFP = GrTextureEffect::Make(srcView, this->colorInfo().alphaType(), texMatrix, + GrSamplerState::Filter::kBilerp); + auto uColFP = GrColorMatrixFragmentProcessor::Make(std::move(uTexFP), uM, + /*unpremulInput=*/false, + /*clampRGBOutput=*/true, + /*premulOutput=*/false); + uPaint.addColorFragmentProcessor(std::move(uColFP)); + uPaint.setPorterDuffXPFactory(SkBlendMode::kSrc); + uRTC->fillRectToRect(nullptr, std::move(uPaint), GrAA::kNo, SkMatrix::I(), dstRectUV, + dstRectUV); + if (!doSynchronousRead) { + uTransfer = uRTC->transferPixels(GrColorType::kAlpha_8, + SkIRect::MakeWH(uRTC->width(), uRTC->height())); + if (!uTransfer.fTransferBuffer) { + callback(context, nullptr); + return; + } + } + + // This matrix generates (r,g,b,a) = (0, 0, 0, v) + float vM[20]; + std::fill_n(vM, 15, 0.f); + std::copy_n(baseM + 10, 5, vM + 15); + GrPaint vPaint; + auto vTexFP = GrTextureEffect::Make(std::move(srcView), this->colorInfo().alphaType(), + texMatrix, GrSamplerState::Filter::kBilerp); + auto vColFP = GrColorMatrixFragmentProcessor::Make(std::move(vTexFP), vM, + /*unpremulInput=*/false, + /*clampRGBOutput=*/true, + /*premulOutput=*/false); + vPaint.addColorFragmentProcessor(std::move(vColFP)); + vPaint.setPorterDuffXPFactory(SkBlendMode::kSrc); + vRTC->fillRectToRect(nullptr, std::move(vPaint), GrAA::kNo, SkMatrix::I(), dstRectUV, + dstRectUV); + if (!doSynchronousRead) { + vTransfer = vRTC->transferPixels(GrColorType::kAlpha_8, + SkIRect::MakeWH(vRTC->width(), vRTC->height())); + if (!vTransfer.fTransferBuffer) { + callback(context, nullptr); + return; + } + } + + if (doSynchronousRead) { + GrImageInfo yInfo(GrColorType::kAlpha_8, kPremul_SkAlphaType, nullptr, dstSize); + GrImageInfo uvInfo = yInfo.makeWH(halfW, halfH); + size_t yRB = yInfo.minRowBytes(); + size_t uvRB = uvInfo.minRowBytes(); + std::unique_ptr y(new char[yRB * yInfo.height()]); + std::unique_ptr u(new char[uvRB*uvInfo.height()]); + std::unique_ptr v(new char[uvRB*uvInfo.height()]); + if (!yRTC->readPixels(yInfo, y.get(), yRB, {0, 0}, direct) || + !uRTC->readPixels(uvInfo, u.get(), uvRB, {0, 0}, direct) || + !vRTC->readPixels(uvInfo, v.get(), uvRB, {0, 0}, direct)) { + callback(context, nullptr); + return; + } + auto result = std::make_unique(direct->priv().contextID()); + result->addCpuPlane(std::move(y), yRB ); + result->addCpuPlane(std::move(u), uvRB); + result->addCpuPlane(std::move(v), uvRB); + callback(context, std::move(result)); + return; + } + + struct FinishContext { + ReadPixelsCallback* fClientCallback; + ReadPixelsContext fClientContext; + GrClientMappedBufferManager* fMappedBufferManager; + SkISize fSize; + PixelTransferResult fYTransfer; + PixelTransferResult fUTransfer; + PixelTransferResult fVTransfer; + }; + // Assumption is that the caller would like to flush. We could take a parameter or require an + // explicit flush from the caller. We'd have to have a way to defer attaching the finish + // callback to GrGpu until after the next flush that flushes our op list, though. + auto* finishContext = new FinishContext{callback, + context, + direct->priv().clientMappedBufferManager(), + dstSize, + std::move(yTransfer), + std::move(uTransfer), + std::move(vTransfer)}; + auto finishCallback = [](GrGpuFinishedContext c) { + const auto* context = reinterpret_cast(c); + auto result = std::make_unique(context->fMappedBufferManager->inboxID()); + auto manager = context->fMappedBufferManager; + size_t rowBytes = SkToSizeT(context->fSize.width()); + if (!result->addTransferResult(context->fYTransfer, context->fSize, rowBytes, manager)) { + (*context->fClientCallback)(context->fClientContext, nullptr); + delete context; + return; + } + rowBytes /= 2; + SkISize uvSize = {context->fSize.width() / 2, context->fSize.height() / 2}; + if (!result->addTransferResult(context->fUTransfer, uvSize, rowBytes, manager)) { + (*context->fClientCallback)(context->fClientContext, nullptr); + delete context; + return; + } + if (!result->addTransferResult(context->fVTransfer, uvSize, rowBytes, manager)) { + (*context->fClientCallback)(context->fClientContext, nullptr); + delete context; + return; + } + (*context->fClientCallback)(context->fClientContext, std::move(result)); + delete context; + }; + GrFlushInfo flushInfo; + flushInfo.fFinishedContext = finishContext; + flushInfo.fFinishedProc = finishCallback; + this->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo, nullptr); +} + bool GrSurfaceContext::copy(GrSurfaceProxy* src, const SkIRect& srcRect, const SkIPoint& dstPoint) { ASSERT_SINGLE_OWNER RETURN_FALSE_IF_ABANDONED @@ -501,67 +1007,11 @@ bool GrSurfaceContext::copy(GrSurfaceProxy* src, const SkIRect& srcRect, const S this->readSurfaceView(), dstPoint); } -template static std::unique_ptr make_avg_effect(GrRecordingContext* context) { - static sk_sp gEffect; - static SkString gName; - if (!gEffect) { - SkString string; - for (int i = 0; i < N; ++i) { - string.appendf("in fragmentProcessor child%d;\n", i); - } - string.append("void main(float2 p, inout half4 color) {\n"); - for (int i = 0; i < N; ++i) { - string.appendf(" color %c= sample(child%d, p);\n", i ? '+' : ' ', i); - } - string.appendf(" color /= half(%d);\n" - "}\n", N); - gEffect = std::get<0>(SkRuntimeEffect::Make(std::move(string))); - SkASSERT(gEffect); - gName.printf("Avg%d", N); - } - return GrSkSLFP::Make(context, gEffect, gName.c_str(), nullptr); -} - -template -static std::unique_ptr make_multibilerp_effect(GrRecordingContext* context, - GrSurfaceProxyView srcView, - SkAlphaType alphaType, - const SkIRect& srcRect, - const SkISize& dstSize) { - auto effect = make_avg_effect(context); - - // scale factors. - float sx = static_cast(srcRect.width()) /dstSize.width(), - sy = static_cast(srcRect.height())/dstSize.height(); - // spacing between bilerp samples. - float dx = sx/NX, - dy = sy/NY; - // offset in src from back projection of dst pixel center to left/upper-most bilerp sample. - float x0 = (dx - sx)/2, - y0 = (dy - sy)/2; - - const auto& caps = *context->priv().caps(); - for (int j = 0; j < NY; ++j) { - for (int i = 0; i < NX; ++i) { - float tx = x0 + i*dx, - ty = y0 + j*dy; - SkMatrix m = SkMatrix::Scale(sx, sy); - m.postTranslate(tx + srcRect.x(), ty + srcRect.y()); - SkRect domain = SkRect::Make(srcRect).makeInset(sx/2, sy/2).makeOffset(tx, ty); - effect->addChild(GrTextureEffect::MakeSubset(srcView, alphaType, m, - GrSamplerState::Filter::kBilerp, - SkRect::Make(srcRect), domain, caps)); - } - } - return std::move(effect); -} - -std::unique_ptr GrSurfaceContext::rescale( - const GrImageInfo& info, - GrSurfaceOrigin origin, - SkIRect srcRect, - SkSurface::RescaleGamma rescaleGamma, - SkFilterQuality rescaleQuality) { +std::unique_ptr GrSurfaceContext::rescale(const GrImageInfo& info, + GrSurfaceOrigin origin, + SkIRect srcRect, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality) { auto rtProxy = this->asRenderTargetProxy(); if (rtProxy && rtProxy->wrapsVkSecondaryCB()) { return nullptr; @@ -595,7 +1045,7 @@ std::unique_ptr GrSurfaceContext::rescale( // Assume we should ignore the rescale linear request if the surface has no color space since // it's unclear how we'd linearize from an unknown color space. - if (rescaleGamma == SkSurface::kLinear && this->colorInfo().colorSpace() && + if (rescaleGamma == RescaleGamma::kLinear && this->colorInfo().colorSpace() && !this->colorInfo().colorSpace()->gammaIsLinear()) { auto cs = this->colorInfo().colorSpace()->makeLinearGamma(); auto xform = GrColorSpaceXform::Make(this->colorInfo().colorSpace(), srcAlphaType, cs.get(), @@ -619,42 +1069,22 @@ std::unique_ptr GrSurfaceContext::rescale( srcRect = SkIRect::MakeSize(srcRect.size()); } - enum StepType { - kNearest, - kBilinear, - kFourTapBilinear, - kBicubic, - }; - auto determineNextStep = [rescaleQuality, finalSize = info.dimensions()](SkISize srcSize) { - if (rescaleQuality == kNone_SkFilterQuality) { - return std::make_tuple(StepType::kNearest, finalSize); - } - SkISize nextSize; - if (srcSize.width() > finalSize.width()) { - nextSize.fWidth = std::max((srcSize.width() + 1)/2, finalSize.width()); - } else { - nextSize.fWidth = std::min(srcSize.width()*2, finalSize.width()); - } - if (srcSize.height() > finalSize.height()) { - nextSize.fHeight = std::max((srcSize.height() + 1)/2, finalSize.height()); - } else { - nextSize.fHeight = std::min(srcSize.height()*2, finalSize.height()); - } - if (rescaleQuality == kHigh_SkFilterQuality) { - return std::make_tuple(StepType::kBicubic, nextSize); - } - // See if we can do multiple bilinear steps in one. - if (nextSize.width() > finalSize.width() && nextSize.height() > finalSize.height()) { - nextSize = {std::max((nextSize.width() + 1)/2, finalSize.width()), - std::max((nextSize.height() + 1)/2, finalSize.height())}; - return std::make_tuple(StepType::kFourTapBilinear, nextSize); - } - return std::make_tuple(StepType::kBilinear, nextSize); - }; while (srcRect.size() != info.dimensions()) { - auto [stepType, nextDims] = determineNextStep(srcRect.size()); + SkISize nextDims = info.dimensions(); + if (rescaleQuality != kNone_SkFilterQuality) { + if (srcRect.width() > info.width()) { + nextDims.fWidth = std::max((srcRect.width() + 1)/2, info.width()); + } else if (srcRect.width() < info.width()) { + nextDims.fWidth = std::min(srcRect.width()*2, info.width()); + } + if (srcRect.height() > info.height()) { + nextDims.fHeight = std::max((srcRect.height() + 1)/2, info.height()); + } else if (srcRect.height() < info.height()) { + nextDims.fHeight = std::min(srcRect.height()*2, info.height()); + } + } auto input = tempA ? tempA.get() : this; - auto colorType = input->colorInfo().colorType(); + GrColorType colorType = input->colorInfo().colorType(); auto cs = input->colorInfo().refColorSpace(); sk_sp xform; auto prevAlphaType = input->colorInfo().alphaType(); @@ -671,49 +1101,44 @@ std::unique_ptr GrSurfaceContext::rescale( if (!tempB) { return nullptr; } - std::unique_ptr srcFP; - switch (stepType) { - case StepType::kBicubic: { - SkMatrix matrix; - matrix.setScaleTranslate((float)srcRect.width() /nextDims.width(), - (float)srcRect.height()/nextDims.height(), - srcRect.x(), - srcRect.y()); - auto dir = GrBicubicEffect::Direction::kXY; - if (nextDims.width() == srcRect.width()) { - dir = GrBicubicEffect::Direction::kY; - } else if (nextDims.height() == srcRect.height()) { - dir = GrBicubicEffect::Direction::kX; - } - static constexpr GrSamplerState::WrapMode kWM = GrSamplerState::WrapMode::kClamp; - srcFP = GrBicubicEffect::MakeSubset(std::move(texView), prevAlphaType, matrix, kWM, - kWM, SkRect::Make(srcRect), dir, *this->caps()); - break; + auto dstRect = SkRect::Make(nextDims); + if (rescaleQuality == kHigh_SkFilterQuality) { + SkMatrix matrix; + matrix.setScaleTranslate((float)srcRect.width()/nextDims.width(), + (float)srcRect.height()/nextDims.height(), + srcRect.x(), + srcRect.y()); + std::unique_ptr fp; + auto dir = GrBicubicEffect::Direction::kXY; + if (nextDims.width() == srcRect.width()) { + dir = GrBicubicEffect::Direction::kY; + } else if (nextDims.height() == srcRect.height()) { + dir = GrBicubicEffect::Direction::kX; + } + static constexpr auto kWM = GrSamplerState::WrapMode::kClamp; + static constexpr auto kKernel = GrBicubicEffect::Kernel::kCatmullRom; + fp = GrBicubicEffect::MakeSubset(std::move(texView), prevAlphaType, matrix, kWM, kWM, + SkRect::Make(srcRect), kKernel, dir, *this->caps()); + if (xform) { + fp = GrColorSpaceXformEffect::Make(std::move(fp), std::move(xform)); } - case StepType::kFourTapBilinear: - srcFP = make_multibilerp_effect<2, 2>(fContext, texView, srcAlphaType, srcRect, - nextDims); - break; - default: { - auto filter = stepType == StepType::kNearest ? GrSamplerState::Filter::kNearest - : GrSamplerState::Filter::kBilerp; - float sx = static_cast(srcRect.width()) /nextDims.width(), - sy = static_cast(srcRect.height())/nextDims.height(); - SkMatrix matrix; - matrix.setScaleTranslate(sx, sy, srcRect.x(), srcRect.y()); - SkRect domain = SkRect::Make(srcRect).makeInset(sx/2, sy/2); - srcFP = GrTextureEffect::MakeSubset(std::move(texView), srcAlphaType, matrix, - filter, SkRect::Make(srcRect), domain, - *this->caps()); - break; + GrPaint paint; + paint.addColorFragmentProcessor(std::move(fp)); + paint.setPorterDuffXPFactory(SkBlendMode::kSrc); + tempB->fillRectToRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::I(), dstRect, + dstRect); + } else { + auto filter = rescaleQuality == kNone_SkFilterQuality ? GrSamplerState::Filter::kNearest + : GrSamplerState::Filter::kBilerp; + // Minimizing draw with integer coord src and dev rects can always be kFast. + auto constraint = SkCanvas::SrcRectConstraint::kStrict_SrcRectConstraint; + if (nextDims.width() <= srcRect.width() && nextDims.height() <= srcRect.height()) { + constraint = SkCanvas::SrcRectConstraint::kFast_SrcRectConstraint; } + tempB->drawTexture(nullptr, std::move(texView), srcAlphaType, filter, SkBlendMode::kSrc, + SK_PMColor4fWHITE, SkRect::Make(srcRect), dstRect, GrAA::kNo, + GrQuadAAFlags::kNone, constraint, SkMatrix::I(), std::move(xform)); } - GrPaint paint; - paint.setPorterDuffXPFactory(SkBlendMode::kSrc); - srcFP = GrColorSpaceXformEffect::Make(std::move(srcFP), std::move(xform)); - paint.addColorFragmentProcessor(std::move(srcFP)); - tempB->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::I(), - SkRect::Make(nextDims)); texView = tempB->readSurfaceView(); tempA = std::move(tempB); srcRect = SkIRect::MakeSize(nextDims); @@ -722,11 +1147,30 @@ std::unique_ptr GrSurfaceContext::rescale( return tempA; } +GrSemaphoresSubmitted GrSurfaceContext::flush(SkSurface::BackendSurfaceAccess access, + const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState) { + ASSERT_SINGLE_OWNER + if (fContext->abandoned()) { + if (info.fSubmittedProc) { + info.fSubmittedProc(info.fSubmittedContext, false); + } + if (info.fFinishedProc) { + info.fFinishedProc(info.fFinishedContext); + } + return GrSemaphoresSubmitted::kNo; + } + SkDEBUGCODE(this->validate();) + GR_CREATE_TRACE_MARKER_CONTEXT("GrRenderTargetContext", "flush", fContext); + + return this->drawingManager()->flushSurface(this->asSurfaceProxy(), access, info, newState); +} + GrSurfaceContext::PixelTransferResult GrSurfaceContext::transferPixels(GrColorType dstCT, const SkIRect& rect) { SkASSERT(rect.fLeft >= 0 && rect.fRight <= this->width()); SkASSERT(rect.fTop >= 0 && rect.fBottom <= this->height()); - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { return {}; } diff --git a/src/gpu/GrSurfaceContext.h b/src/gpu/GrSurfaceContext.h index 8e3394ce1a0e1..82307b5dddc72 100644 --- a/src/gpu/GrSurfaceContext.h +++ b/src/gpu/GrSurfaceContext.h @@ -9,9 +9,11 @@ #define GrSurfaceContext_DEFINED #include "include/core/SkFilterQuality.h" +#include "include/core/SkImage.h" #include "include/core/SkRect.h" #include "include/core/SkRefCnt.h" #include "include/core/SkSurface.h" +#include "src/gpu/GrClientMappedBufferManager.h" #include "src/gpu/GrColorInfo.h" #include "src/gpu/GrDataUtils.h" #include "src/gpu/GrImageInfo.h" @@ -81,7 +83,29 @@ class GrSurfaceContext { * is a GrDirectContext and fail otherwise. */ bool readPixels(const GrImageInfo& dstInfo, void* dst, size_t rowBytes, SkIPoint srcPt, - GrContext* direct = nullptr); + GrDirectContext* direct = nullptr); + + using ReadPixelsCallback = SkImage::ReadPixelsCallback; + using ReadPixelsContext = SkImage::ReadPixelsContext; + using RescaleGamma = SkImage::RescaleGamma; + + // GPU implementation for SkImage:: and SkSurface::asyncRescaleAndReadPixels. + void asyncRescaleAndReadPixels(const SkImageInfo& info, + const SkIRect& srcRect, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context); + + // GPU implementation for SkImage:: and SkSurface::asyncRescaleAndReadPixelsYUV420. + void asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, + sk_sp dstColorSpace, + const SkIRect& srcRect, + SkISize dstSize, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context); /** * Writes a rectangle of pixels [srcInfo, srcBuffer, srcRowbytes] into the @@ -94,7 +118,7 @@ class GrSurfaceContext { * is a GrDirectContext and fail otherwise. */ bool writePixels(const GrImageInfo& srcInfo, const void* src, size_t rowBytes, SkIPoint dstPt, - GrContext* direct = nullptr); + GrDirectContext* direct = nullptr); GrSurfaceProxy* asSurfaceProxy() { return fReadView.proxy(); } const GrSurfaceProxy* asSurfaceProxy() const { return fReadView.proxy(); } @@ -124,9 +148,17 @@ class GrSurfaceContext { std::unique_ptr rescale(const GrImageInfo& info, GrSurfaceOrigin, SkIRect srcRect, - SkSurface::RescaleGamma, + SkImage::RescaleGamma, SkFilterQuality); + /** + * After this returns any pending surface IO will be issued to the backend 3D API and + * if the surface has MSAA it will be resolved. + */ + GrSemaphoresSubmitted flush(SkSurface::BackendSurfaceAccess access, + const GrFlushInfo&, + const GrBackendSurfaceMutableState*); + GrAuditTrail* auditTrail(); // Provides access to functions that aren't part of the public API. @@ -171,6 +203,12 @@ class GrSurfaceContext { }; PixelTransferResult transferPixels(GrColorType colorType, const SkIRect& rect); + // The async read step of asyncRescaleAndReadPixels() + void asyncReadPixels(const SkIRect& rect, + SkColorType colorType, + ReadPixelsCallback callback, + ReadPixelsContext context); + private: friend class GrSurfaceProxy; // for copy @@ -192,6 +230,8 @@ class GrSurfaceContext { */ bool copy(GrSurfaceProxy* src, const SkIRect& srcRect, const SkIPoint& dstPoint); + class AsyncReadResult; + GrColorInfo fColorInfo; typedef SkRefCnt INHERITED; diff --git a/src/gpu/GrSurfaceProxy.cpp b/src/gpu/GrSurfaceProxy.cpp index 4df6c3302db39..3ecb3f90d5f4c 100644 --- a/src/gpu/GrSurfaceProxy.cpp +++ b/src/gpu/GrSurfaceProxy.cpp @@ -9,7 +9,7 @@ #include "src/gpu/GrSurfaceProxyPriv.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkMathPriv.h" #include "src/core/SkMipMap.h" #include "src/gpu/GrCaps.h" @@ -106,9 +106,6 @@ GrSurfaceProxy::GrSurfaceProxy(sk_sp surface, } GrSurfaceProxy::~GrSurfaceProxy() { - // For this to be deleted the opsTask that held a ref on it (if there was one) must have been - // deleted. Which would have cleared out this back pointer. - SkASSERT(!fLastRenderTask); } sk_sp GrSurfaceProxy::createSurfaceImpl(GrResourceProvider* resourceProvider, @@ -219,21 +216,6 @@ void GrSurfaceProxy::computeScratchKey(const GrCaps& caps, GrScratchKey* key) co renderable, sampleCount, mipMapped, fIsProtected, key); } -void GrSurfaceProxy::setLastRenderTask(GrRenderTask* renderTask) { -#ifdef SK_DEBUG - if (fLastRenderTask) { - SkASSERT(fLastRenderTask->isClosed()); - } -#endif - - // Un-reffed - fLastRenderTask = renderTask; -} - -GrOpsTask* GrSurfaceProxy::getLastOpsTask() { - return fLastRenderTask ? fLastRenderTask->asOpsTask() : nullptr; -} - SkISize GrSurfaceProxy::backingStoreDimensions() const { SkASSERT(!this->isFullyLazy()); if (fTarget) { @@ -259,7 +241,7 @@ bool GrSurfaceProxy::isFormatCompressed(const GrCaps* caps) const { #ifdef SK_DEBUG void GrSurfaceProxy::validate(GrContext_Base* context) const { if (fTarget) { - SkASSERT(fTarget->getContext() == context); + SkASSERT(fTarget->getContext()->priv().matches(context)); } } #endif diff --git a/src/gpu/GrSurfaceProxy.h b/src/gpu/GrSurfaceProxy.h index 0bbd936127b16..f30e21d10d406 100644 --- a/src/gpu/GrSurfaceProxy.h +++ b/src/gpu/GrSurfaceProxy.h @@ -268,11 +268,6 @@ class GrSurfaceProxy : public SkNVRefCnt { return fSurfaceFlags & GrInternalSurfaceFlags::kRequiresManualMSAAResolve; } - void setLastRenderTask(GrRenderTask*); - GrRenderTask* getLastRenderTask() { return fLastRenderTask; } - - GrOpsTask* getLastOpsTask(); - /** * Retrieves the amount of GPU memory that will be or currently is used by this resource * in bytes. It is approximate since we aren't aware of additional padding or copies made @@ -436,15 +431,6 @@ class GrSurfaceProxy : public SkNVRefCnt { // If the proxy computes its own answer that answer is checked (in debug mode) in // the instantiation method. mutable size_t fGpuMemorySize; - - // The last GrRenderTask that wrote to or is currently going to write to this surface - // The GrRenderTask can be closed (e.g., no surface context is currently bound - // to this proxy). - // This back-pointer is required so that we can add a dependancy between - // the GrRenderTask used to create the current contents of this surface - // and the GrRenderTask of a destination surface to which this one is being drawn or copied. - // This pointer is unreffed. GrRenderTasks own a ref on their surface proxies. - GrRenderTask* fLastRenderTask = nullptr; }; GR_MAKE_BITFIELD_CLASS_OPS(GrSurfaceProxy::ResolveFlags) diff --git a/src/gpu/GrTextureAdjuster.cpp b/src/gpu/GrTextureAdjuster.cpp index d3371d759d057..e83ef0a2e63b2 100644 --- a/src/gpu/GrTextureAdjuster.cpp +++ b/src/gpu/GrTextureAdjuster.cpp @@ -5,7 +5,7 @@ * found in the LICENSE file. */ -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrColorSpaceXform.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrProxyProvider.h" @@ -50,7 +50,7 @@ GrSurfaceProxyView GrTextureAdjuster::makeMippedCopy() { } GrSurfaceProxyView GrTextureAdjuster::onView(GrMipMapped mipMapped) { - if (this->context()->priv().abandoned()) { + if (this->context()->abandoned()) { // The texture was abandoned. return {}; } diff --git a/src/gpu/GrTextureMaker.cpp b/src/gpu/GrTextureMaker.cpp index 7003888bb79ce..7db8b91582bcd 100644 --- a/src/gpu/GrTextureMaker.cpp +++ b/src/gpu/GrTextureMaker.cpp @@ -7,7 +7,7 @@ #include "src/gpu/GrTextureMaker.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrColorSpaceXform.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrProxyProvider.h" diff --git a/src/gpu/GrTextureProducer.cpp b/src/gpu/GrTextureProducer.cpp index cf024adfa707c..8bc94278ca20d 100644 --- a/src/gpu/GrTextureProducer.cpp +++ b/src/gpu/GrTextureProducer.cpp @@ -7,7 +7,7 @@ #include "src/gpu/GrTextureProducer.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkMipMap.h" #include "src/core/SkRectPriv.h" #include "src/gpu/GrClip.h" @@ -153,15 +153,15 @@ std::unique_ptr GrTextureProducer::createFragmentProcessorF return GrTextureEffect::MakeSubset(std::move(view), srcAlphaType, textureMatrix, samplerState, domain, caps); } else { - - static constexpr auto kDir = GrBicubicEffect::Direction::kXY; + static constexpr auto kDir = GrBicubicEffect::Direction::kXY; + static constexpr auto kKernel = GrBicubicEffect::Kernel::kMitchell; const auto& caps = *fContext->priv().caps(); if (kDomain_DomainMode == domainMode) { return GrBicubicEffect::MakeSubset(std::move(view), srcAlphaType, textureMatrix, wrapX, - wrapY, domain, kDir, caps); + wrapY, domain, kKernel, kDir, caps); } else { return GrBicubicEffect::Make(std::move(view), srcAlphaType, textureMatrix, wrapX, wrapY, - kDir, caps); + kKernel, kDir, caps); } } } diff --git a/src/gpu/GrTextureResolveRenderTask.cpp b/src/gpu/GrTextureResolveRenderTask.cpp index 8d67c0353214c..1a915bad9db22 100644 --- a/src/gpu/GrTextureResolveRenderTask.cpp +++ b/src/gpu/GrTextureResolveRenderTask.cpp @@ -14,28 +14,24 @@ #include "src/gpu/GrResourceAllocator.h" #include "src/gpu/GrTexturePriv.h" -GrTextureResolveRenderTask::~GrTextureResolveRenderTask() { - for (const auto& resolve : fResolves) { - // Ensure the proxy doesn't keep hold of a dangling back pointer. - resolve.fProxy->setLastRenderTask(nullptr); - } -} - -void GrTextureResolveRenderTask::addProxy( - sk_sp proxyRef, GrSurfaceProxy::ResolveFlags flags, const GrCaps& caps) { - fResolves.emplace_back(std::move(proxyRef), flags); - GrSurfaceProxy* proxy = fResolves.back().fProxy.get(); +void GrTextureResolveRenderTask::addProxy(GrDrawingManager* drawingMgr, + sk_sp proxyRef, + GrSurfaceProxy::ResolveFlags flags, + const GrCaps& caps) { + Resolve& resolve = fResolves.emplace_back(flags); + GrSurfaceProxy* proxy = proxyRef.get(); // Ensure the last render task that operated on the proxy is closed. That's where msaa and // mipmaps should have been marked dirty. - SkASSERT(!proxy->getLastRenderTask() || proxy->getLastRenderTask()->isClosed()); + SkASSERT(!drawingMgr->getLastRenderTask(proxy) + || drawingMgr->getLastRenderTask(proxy)->isClosed()); SkASSERT(GrSurfaceProxy::ResolveFlags::kNone != flags); if (GrSurfaceProxy::ResolveFlags::kMSAA & flags) { GrRenderTargetProxy* renderTargetProxy = proxy->asRenderTargetProxy(); SkASSERT(renderTargetProxy); SkASSERT(renderTargetProxy->isMSAADirty()); - fResolves.back().fMSAAResolveRect = renderTargetProxy->msaaDirtyRect(); + resolve.fMSAAResolveRect = renderTargetProxy->msaaDirtyRect(); renderTargetProxy->markMSAAResolved(); } @@ -48,8 +44,9 @@ void GrTextureResolveRenderTask::addProxy( // Add the proxy as a dependency: We will read the existing contents of this texture while // generating mipmap levels and/or resolving MSAA. - this->addDependency(proxy, GrMipMapped::kNo, GrTextureResolveManager(nullptr), caps); - proxy->setLastRenderTask(this); + this->addDependency(drawingMgr, proxy, GrMipMapped::kNo, + GrTextureResolveManager(nullptr), caps); + this->addTarget(drawingMgr, GrSurfaceProxyView(std::move(proxyRef))); } void GrTextureResolveRenderTask::gatherProxyIntervals(GrResourceAllocator* alloc) const { @@ -57,8 +54,9 @@ void GrTextureResolveRenderTask::gatherProxyIntervals(GrResourceAllocator* alloc // fEndOfOpsTaskOpIndices will remain in sync. We create fake op#'s to capture the fact that we // manipulate the resolve proxies. auto fakeOp = alloc->curOp(); - for (const auto& resolve : fResolves) { - alloc->addInterval(resolve.fProxy.get(), fakeOp, fakeOp, + SkASSERT(fResolves.count() == this->numTargets()); + for (const GrSurfaceProxyView& target : fTargets) { + alloc->addInterval(target.proxy(), fakeOp, fakeOp, GrResourceAllocator::ActualUse::kYes); } alloc->incOps(); @@ -66,9 +64,11 @@ void GrTextureResolveRenderTask::gatherProxyIntervals(GrResourceAllocator* alloc bool GrTextureResolveRenderTask::onExecute(GrOpFlushState* flushState) { // Resolve all msaa back-to-back, before regenerating mipmaps. - for (const auto& resolve : fResolves) { + SkASSERT(fResolves.count() == this->numTargets()); + for (int i = 0; i < fResolves.count(); ++i) { + const Resolve& resolve = fResolves[i]; if (GrSurfaceProxy::ResolveFlags::kMSAA & resolve.fFlags) { - GrSurfaceProxy* proxy = resolve.fProxy.get(); + GrSurfaceProxy* proxy = this->target(i).proxy(); // peekRenderTarget might be null if there was an instantiation error. if (GrRenderTarget* renderTarget = proxy->peekRenderTarget()) { flushState->gpu()->resolveRenderTarget(renderTarget, resolve.fMSAAResolveRect, @@ -77,10 +77,11 @@ bool GrTextureResolveRenderTask::onExecute(GrOpFlushState* flushState) { } } // Regenerate all mipmaps back-to-back. - for (const auto& resolve : fResolves) { + for (int i = 0; i < fResolves.count(); ++i) { + const Resolve& resolve = fResolves[i]; if (GrSurfaceProxy::ResolveFlags::kMipMaps & resolve.fFlags) { // peekTexture might be null if there was an instantiation error. - GrTexture* texture = resolve.fProxy->peekTexture(); + GrTexture* texture = this->target(i).proxy()->peekTexture(); if (texture && texture->texturePriv().mipMapsAreDirty()) { flushState->gpu()->regenerateMipMapLevels(texture); SkASSERT(!texture->texturePriv().mipMapsAreDirty()); @@ -92,9 +93,5 @@ bool GrTextureResolveRenderTask::onExecute(GrOpFlushState* flushState) { } #ifdef SK_DEBUG -void GrTextureResolveRenderTask::visitProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const { - for (const auto& resolve : fResolves) { - fn(resolve.fProxy.get(), GrMipMapped::kNo); - } -} +void GrTextureResolveRenderTask::visitProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const {} #endif diff --git a/src/gpu/GrTextureResolveRenderTask.h b/src/gpu/GrTextureResolveRenderTask.h index e9ce954ca5c58..379aa4b345307 100644 --- a/src/gpu/GrTextureResolveRenderTask.h +++ b/src/gpu/GrTextureResolveRenderTask.h @@ -13,14 +13,12 @@ class GrTextureResolveRenderTask final : public GrRenderTask { public: GrTextureResolveRenderTask() : GrRenderTask() {} - ~GrTextureResolveRenderTask() override; - void addProxy(sk_sp proxy, GrSurfaceProxy::ResolveFlags, const GrCaps&); + void addProxy(GrDrawingManager*, sk_sp proxy, + GrSurfaceProxy::ResolveFlags, const GrCaps&); private: bool onIsUsed(GrSurfaceProxy* proxy) const override { - // This case should be handled by GrRenderTask. - SkASSERT(proxy != fTargetView.proxy()); return false; } void handleInternalAllocationFailure() override { @@ -40,9 +38,7 @@ class GrTextureResolveRenderTask final : public GrRenderTask { #endif struct Resolve { - Resolve(sk_sp proxy, GrSurfaceProxy::ResolveFlags flags) - : fProxy(std::move(proxy)), fFlags(flags) {} - sk_sp fProxy; + Resolve(GrSurfaceProxy::ResolveFlags flags) : fFlags(flags) {} GrSurfaceProxy::ResolveFlags fFlags; SkIRect fMSAAResolveRect; }; diff --git a/src/gpu/GrTransferFromRenderTask.h b/src/gpu/GrTransferFromRenderTask.h index 2126ae81a86a3..93a0f7aad31ed 100644 --- a/src/gpu/GrTransferFromRenderTask.h +++ b/src/gpu/GrTransferFromRenderTask.h @@ -28,7 +28,7 @@ class GrTransferFromRenderTask final : public GrRenderTask { private: bool onIsUsed(GrSurfaceProxy* proxy) const override { - SkASSERT(!fTargetView.proxy()); + SkASSERT(0 == this->numTargets()); return proxy == fSrcProxy.get(); } // If fSrcProxy is uninstantiated at flush time we simply will skip doing the transfer. diff --git a/src/gpu/GrTriangulator.cpp b/src/gpu/GrTriangulator.cpp index b2b2af31add48..f695d6ee2dc3f 100644 --- a/src/gpu/GrTriangulator.cpp +++ b/src/gpu/GrTriangulator.cpp @@ -2400,13 +2400,13 @@ int get_contour_count(const SkPath& path, SkScalar tolerance) { if (!first) { ++contourCnt; } - // fallthru. + [[fallthrough]]; case SkPath::kLine_Verb: case SkPath::kConic_Verb: case SkPath::kQuad_Verb: case SkPath::kCubic_Verb: hasPoints = true; - // fallthru to break. + break; default: break; } diff --git a/src/gpu/GrUniformDataManager.h b/src/gpu/GrUniformDataManager.h index d36e69a969830..dc08bcf0d2bcd 100644 --- a/src/gpu/GrUniformDataManager.h +++ b/src/gpu/GrUniformDataManager.h @@ -49,6 +49,9 @@ class GrUniformDataManager : public GrGLSLProgramDataManager { SK_ABORT("Only supported in NVPR, which is only available in GL"); } + // For the uniform data to be dirty so that we will reupload on the next use. + void markDirty() { fUniformsDirty = true; } + protected: struct Uniform { uint32_t fOffset; diff --git a/src/gpu/GrUnrefDDLTask.h b/src/gpu/GrUnrefDDLTask.h new file mode 100644 index 0000000000000..51979d866b610 --- /dev/null +++ b/src/gpu/GrUnrefDDLTask.h @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrUnrefDDLTask_DEFINED +#define GrUnrefDDLTask_DEFINED + +#include "src/gpu/GrRenderTask.h" + +/** When a DDL is played back, the drawing manager refs the DDL and adds one + * of these to the DAG to release it after the flush. Thus the user is free + * to unref the DDL at their leisure without messing us up. + */ +class GrUnrefDDLTask final : public GrRenderTask { +public: + GrUnrefDDLTask(sk_sp ddl) + : GrRenderTask() + , fDDL(std::move(ddl)) {} + + // We actually do the unreffing in dtor instead of onExecute, so that we maintain the invariant + // that DDLs are always the last owners of their render tasks (because those tasks depend on + // memory owned by the DDL.) If we had this in onExecute, the tasks would still be alive in + // the drawing manager although it would already have executed them. + ~GrUnrefDDLTask() override { + fDDL.reset(); + } + +private: + bool onIsUsed(GrSurfaceProxy* proxy) const override { return false; } + void handleInternalAllocationFailure() override {} + void gatherProxyIntervals(GrResourceAllocator* alloc) const override { + // We don't have any proxies, but the resource allocator will still bark + // if a task doesn't claim any op indices, so we oblige it. + alloc->incOps(); + } + + ExpectedOutcome onMakeClosed(const GrCaps&, SkIRect*) override { + return ExpectedOutcome::kTargetUnchanged; + } + + bool onExecute(GrOpFlushState*) override { return true; } + +#ifdef SK_DEBUG + const char* name() const final { return "UnrefDDL"; } + void visitProxies_debugOnly(const GrOp::VisitProxyFunc& fn) const override {} +#endif + + sk_sp fDDL; +}; + +#endif diff --git a/src/gpu/GrWaitRenderTask.cpp b/src/gpu/GrWaitRenderTask.cpp index d7b2a7cc081b7..d9740301760b1 100644 --- a/src/gpu/GrWaitRenderTask.cpp +++ b/src/gpu/GrWaitRenderTask.cpp @@ -14,15 +14,22 @@ void GrWaitRenderTask::gatherProxyIntervals(GrResourceAllocator* alloc) const { // This renderTask doesn't have "normal" ops. In this case we still need to add an interval (so // fEndOfOpsTaskOpIndices will remain in sync), so we create a fake op# to capture the fact that - // we manipulate fTargetView's proxy. - alloc->addInterval(fTargetView.proxy(), alloc->curOp(), alloc->curOp(), + // we manipulate our target's proxy. + SkASSERT(0 == this->numTargets()); + auto fakeOp = alloc->curOp(); + alloc->addInterval(fWaitedOn.proxy(), fakeOp, fakeOp, GrResourceAllocator::ActualUse::kYes); alloc->incOps(); } bool GrWaitRenderTask::onExecute(GrOpFlushState* flushState) { for (int i = 0; i < fNumSemaphores; ++i) { - flushState->gpu()->waitSemaphore(fSemaphores[i].get()); + // If we don't have a semaphore here it means we failed to wrap it. That happens if the + // client didn't give us a valid semaphore to begin with. Therefore, it is fine to not wait + // on it. + if (fSemaphores[i].get()) { + flushState->gpu()->waitSemaphore(fSemaphores[i].get()); + } } return true; } diff --git a/src/gpu/GrWaitRenderTask.h b/src/gpu/GrWaitRenderTask.h index 18e715755c849..4681f76209f2d 100644 --- a/src/gpu/GrWaitRenderTask.h +++ b/src/gpu/GrWaitRenderTask.h @@ -16,15 +16,14 @@ class GrWaitRenderTask final : public GrRenderTask { GrWaitRenderTask(GrSurfaceProxyView surfaceView, std::unique_ptr[]> semaphores, int numSemaphores) - : GrRenderTask(std::move(surfaceView)) + : GrRenderTask() , fSemaphores(std::move(semaphores)) - , fNumSemaphores(numSemaphores) {} + , fNumSemaphores(numSemaphores) + , fWaitedOn(std::move(surfaceView)) {} private: bool onIsUsed(GrSurfaceProxy* proxy) const override { - // This case should be handled by GrRenderTask. - SkASSERT(proxy != fTargetView.proxy()); - return false; + return proxy == fWaitedOn.proxy(); } void handleInternalAllocationFailure() override {} void gatherProxyIntervals(GrResourceAllocator*) const override; @@ -42,6 +41,11 @@ class GrWaitRenderTask final : public GrRenderTask { #endif std::unique_ptr[]> fSemaphores; int fNumSemaphores; + + // This field is separate from the main "targets" field on GrRenderTask because this task + // does not actually write to the surface and so should not participate in the normal + // lastRenderTask tracking that written-to targets do. + GrSurfaceProxyView fWaitedOn; }; #endif diff --git a/src/gpu/GrYUVProvider.cpp b/src/gpu/GrYUVProvider.cpp index 3d5668c6f30e1..def05f6524f10 100644 --- a/src/gpu/GrYUVProvider.cpp +++ b/src/gpu/GrYUVProvider.cpp @@ -9,7 +9,7 @@ #include "include/core/SkRefCnt.h" #include "include/core/SkYUVAIndex.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkAutoMalloc.h" #include "src/core/SkCachedData.h" #include "src/core/SkResourceCache.h" @@ -172,18 +172,16 @@ GrSurfaceProxyView GrYUVProvider::refAsTextureProxyView(GrRecordingContext* ctx, GrPaint paint; const auto& caps = *ctx->priv().caps(); - auto yuvToRgbProcessor = GrYUVtoRGBEffect::Make(yuvViews, yuvaIndices, yuvColorSpace, - GrSamplerState::Filter::kNearest, caps); - paint.addColorFragmentProcessor(std::move(yuvToRgbProcessor)); + std::unique_ptr yuvToRgbProcessor = GrYUVtoRGBEffect::Make( + yuvViews, yuvaIndices, yuvColorSpace, GrSamplerState::Filter::kNearest, caps); // If the caller expects the pixels in a different color space than the one from the image, // apply a color conversion to do this. std::unique_ptr colorConversionProcessor = - GrColorSpaceXformEffect::Make(srcColorSpace, kOpaque_SkAlphaType, + GrColorSpaceXformEffect::Make(std::move(yuvToRgbProcessor), + srcColorSpace, kOpaque_SkAlphaType, dstColorSpace, kOpaque_SkAlphaType); - if (colorConversionProcessor) { - paint.addColorFragmentProcessor(std::move(colorConversionProcessor)); - } + paint.addColorFragmentProcessor(std::move(colorConversionProcessor)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); const SkRect r = SkRect::MakeIWH(yuvSizeInfo.fSizes[0].fWidth, diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 573225ce46f04..7824574130a16 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -32,7 +32,6 @@ #include "src/core/SkVerticesPriv.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrBlurUtils.h" -#include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrImageTextureMaker.h" #include "src/gpu/GrRenderTargetContextPriv.h" @@ -78,7 +77,7 @@ bool SkGpuDevice::CheckAlphaTypeAndGetFlags( sk_sp SkGpuDevice::Make(GrContext* context, std::unique_ptr renderTargetContext, InitContents init) { - if (!renderTargetContext || context->priv().abandoned()) { + if (!renderTargetContext || context->abandoned()) { return nullptr; } @@ -125,14 +124,14 @@ SkGpuDevice::SkGpuDevice(GrContext* context, renderTargetContext->surfaceProps()) , fContext(SkRef(context)) , fRenderTargetContext(std::move(renderTargetContext)) - , fClip(&this->cs()) { + , fClip(fRenderTargetContext->dimensions(), &this->cs(), &this->asMatrixProvider()) { if (flags & kNeedClear_Flag) { this->clearAll(); } } std::unique_ptr SkGpuDevice::MakeRenderTargetContext( - GrContext* context, + GrRecordingContext* context, SkBudgeted budgeted, const SkImageInfo& origInfo, int sampleCount, @@ -219,7 +218,7 @@ void SkGpuDevice::replaceRenderTargetContext(std::unique_ptrnumSamples() == fRenderTargetContext->numSamples()); SkASSERT(rtc->asSurfaceProxy()->priv().isExact()); if (mode == SkSurface::kRetain_ContentChangeMode) { - if (this->context()->abandoned()) { + if (this->recordingContext()->abandoned()) { return; } @@ -239,7 +238,7 @@ void SkGpuDevice::replaceRenderTargetContext(SkSurface::ContentChangeMode mode) // This entry point is used by SkSurface_Gpu::onCopyOnWrite so it must create a // kExact-backed render target context. - auto newRTC = MakeRenderTargetContext(this->context(), + auto newRTC = MakeRenderTargetContext(this->recordingContext(), budgeted, this->imageInfo(), fRenderTargetContext->numSamples(), @@ -259,7 +258,7 @@ void SkGpuDevice::drawPaint(const SkPaint& paint) { GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPaint", fContext.get()); GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -291,7 +290,7 @@ void SkGpuDevice::drawPoints(SkCanvas::PointMode mode, if (paint.getPathEffect() && 2 == count && SkCanvas::kLines_PointMode == mode) { GrStyle style(paint, SkPaint::kStroke_Style); GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -334,7 +333,7 @@ void SkGpuDevice::drawPoints(SkCanvas::PointMode mode, #endif GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, *matrixProvider, &grPaint)) { return; } @@ -365,7 +364,7 @@ void SkGpuDevice::drawRect(const SkRect& rect, const SkPaint& paint) { } GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -428,7 +427,7 @@ void SkGpuDevice::drawRRect(const SkRRect& rrect, const SkPaint& paint) { SkASSERT(!style.pathEffect()); GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -453,7 +452,7 @@ void SkGpuDevice::drawDRRect(const SkRRect& outer, const SkRRect& inner, const S if (stroke.isFillStyle() && !paint.getMaskFilter() && !paint.getPathEffect()) { GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -489,7 +488,7 @@ void SkGpuDevice::drawRegion(const SkRegion& region, const SkPaint& paint) { } GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -509,7 +508,7 @@ void SkGpuDevice::drawOval(const SkRect& oval, const SkPaint& paint) { } GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -527,7 +526,7 @@ void SkGpuDevice::drawArc(const SkRect& oval, SkScalar startAngle, return; } GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -581,7 +580,7 @@ void SkGpuDevice::drawStrokedLine(const SkPoint points[2], SkPreConcatMatrixProvider matrixProvider(this->asMatrixProvider(), local); GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), newPaint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), newPaint, matrixProvider, &grPaint)) { return; } @@ -612,7 +611,7 @@ void SkGpuDevice::drawPath(const SkPath& origSrcPath, const SkPaint& paint, bool GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawPath", fContext.get()); if (!paint.getMaskFilter()) { GrPaint grPaint; - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), paint, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -628,8 +627,7 @@ void SkGpuDevice::drawPath(const SkPath& origSrcPath, const SkPaint& paint, bool paint, this->asMatrixProvider(), shape); } -void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const SkPaint& paint, - SkImage* clipImage, const SkMatrix& clipMatrix) { +void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const SkPaint& paint) { SkASSERT(!paint.getMaskFilter()); ASSERT_SINGLE_OWNER @@ -651,7 +649,7 @@ void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const } SkASSERT(result->isTextureBacked()); - GrSurfaceProxyView view = result->view(this->context()); + GrSurfaceProxyView view = result->view(this->recordingContext()); if (!view) { return; } @@ -663,8 +661,10 @@ void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const tmpUnfiltered.setImageFilter(nullptr); auto fp = GrTextureEffect::Make(std::move(view), special->alphaType()); - fp = GrColorSpaceXformEffect::Make(std::move(fp), result->getColorSpace(), result->alphaType(), - fRenderTargetContext->colorInfo().colorSpace()); + fp = GrColorSpaceXformEffect::Make( + std::move(fp), + result->getColorSpace(), result->alphaType(), + fRenderTargetContext->colorInfo().colorSpace(), kPremul_SkAlphaType); if (GrColorTypeIsAlphaOnly(SkColorTypeToGrColorType(result->colorType()))) { fp = GrFragmentProcessor::MakeInputPremulAndMulByOutput(std::move(fp)); } else { @@ -676,7 +676,7 @@ void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const } GrPaint grPaint; - if (!SkPaintToGrPaintReplaceShader(this->context(), fRenderTargetContext->colorInfo(), + if (!SkPaintToGrPaintReplaceShader(this->recordingContext(), fRenderTargetContext->colorInfo(), tmpUnfiltered, this->asMatrixProvider(), std::move(fp), &grPaint)) { return; @@ -685,58 +685,7 @@ void SkGpuDevice::drawSpecial(SkSpecialImage* special, int left, int top, const const SkIRect& subset = result->subset(); SkRect dstRect = SkRect::Make(SkIRect::MakeXYWH(left, top, subset.width(), subset.height())); SkRect srcRect = SkRect::Make(subset); - if (clipImage) { - // Add the image as a simple texture effect applied to coverage. Accessing content outside - // of the clip image should behave as if it were a decal (i.e. zero coverage). However, to - // limit pixels touched and hardware checks, we draw the clip image geometry to get the - // decal effect. - auto filter = paint.getFilterQuality() > kNone_SkFilterQuality - ? GrSamplerState::Filter::kBilerp - : GrSamplerState::Filter::kNearest; - GrSurfaceProxyView clipView = as_IB(clipImage)->refView(this->context(), GrMipMapped::kNo); - // Fold clip matrix into ctm - ctm.preConcat(clipMatrix); - SkMatrix inverseClipMatrix; - - std::unique_ptr cfp; - if (clipView && ctm.invert(&inverseClipMatrix)) { - GrColorType srcColorType = SkColorTypeToGrColorType(clipImage->colorType()); - - cfp = GrTextureEffect::Make(std::move(clipView), clipImage->alphaType(), - inverseClipMatrix, filter); - if (srcColorType != GrColorType::kAlpha_8) { - cfp = GrFragmentProcessor::SwizzleOutput(std::move(cfp), GrSwizzle::AAAA()); - } - } - if (cfp) { - // If the grPaint already has coverage, this adds an additional stage that multiples - // the image's alpha channel with the prior coverage. - grPaint.addCoverageFragmentProcessor(std::move(cfp)); - - // Undo the offset that was needed for shader coord transforms to get the transform for - // the actual drawn geometry. - ctm.postTranslate(SkIntToScalar(left), SkIntToScalar(top)); - inverseClipMatrix.preTranslate(-SkIntToScalar(left), -SkIntToScalar(top)); - SkRect clipGeometry = SkRect::MakeWH(clipImage->width(), clipImage->height()); - if (!clipGeometry.contains(inverseClipMatrix.mapRect(dstRect))) { - // Draw the clip geometry since it is smaller, using dstRect as an extra scissor - SkClipStack dstRectClip(this->cs()); - dstRectClip.clipDevRect( - SkIRect::MakeXYWH(left, top, subset.width(), subset.height()), - SkClipOp::kIntersect); - GrClipStackClip clip(&dstRectClip); - SkMatrix local = SkMatrix::Concat(SkMatrix::MakeRectToRect( - dstRect, srcRect, SkMatrix::kFill_ScaleToFit), ctm); - fRenderTargetContext->fillRectWithLocalMatrix(&clip, std::move(grPaint), - GrAA(paint.isAntiAlias()), ctm, - clipGeometry, local); - return; - } - // Else fall through and draw the subset since that is contained in the clip geometry - } - // Else some issue configuring the coverage FP, so just draw without the clip mask image - } // Draw directly in screen space, possibly with an extra coverage processor fRenderTargetContext->fillRectToRect(this->clip(), std::move(grPaint), GrAA(paint.isAntiAlias()), SkMatrix::I(), dstRect, srcRect); @@ -766,7 +715,7 @@ sk_sp SkGpuDevice::makeSpecial(const SkBitmap& bitmap) { sk_sp SkGpuDevice::makeSpecial(const SkImage* image) { SkPixmap pm; if (image->isTextureBacked()) { - const GrSurfaceProxyView* view = as_IB(image)->view(this->context()); + const GrSurfaceProxyView* view = as_IB(image)->view(this->recordingContext()); SkASSERT(view); return SkSpecialImage::MakeDeferredFromGpu(fContext.get(), @@ -845,7 +794,7 @@ void SkGpuDevice::drawDevice(SkBaseDevice* device, return; } - this->drawSpecial(srcImg.get(), left, top, paint, nullptr, SkMatrix::I()); + this->drawSpecial(srcImg.get(), left, top, paint); } void SkGpuDevice::drawImageRect(const SkImage* image, const SkRect* src, const SkRect& dst, @@ -870,8 +819,9 @@ void SkGpuDevice::drawImageNine(const SkImage* image, ASSERT_SINGLE_OWNER uint32_t pinnedUniqueID; auto iter = std::make_unique(image->width(), image->height(), center, dst); - if (GrSurfaceProxyView view = as_IB(image)->refPinnedView(this->context(), &pinnedUniqueID)) { - GrTextureAdjuster adjuster(this->context(), std::move(view), + if (GrSurfaceProxyView view = as_IB(image)->refPinnedView(this->recordingContext(), + &pinnedUniqueID)) { + GrTextureAdjuster adjuster(this->recordingContext(), std::move(view), image->imageInfo().colorInfo(), pinnedUniqueID); this->drawProducerLattice(&adjuster, std::move(iter), dst, paint); } else { @@ -896,7 +846,8 @@ void SkGpuDevice::drawProducerLattice(GrTextureProducer* producer, paint.writable()->setColor(SkColorSetARGB(origPaint.getAlpha(), 0xFF, 0xFF, 0xFF)); } GrPaint grPaint; - if (!SkPaintToGrPaintWithPrimitiveColor(this->context(), fRenderTargetContext->colorInfo(), + if (!SkPaintToGrPaintWithPrimitiveColor(this->recordingContext(), + fRenderTargetContext->colorInfo(), *paint, this->asMatrixProvider(), &grPaint)) { return; } @@ -921,8 +872,9 @@ void SkGpuDevice::drawImageLattice(const SkImage* image, ASSERT_SINGLE_OWNER uint32_t pinnedUniqueID; auto iter = std::make_unique(lattice, dst); - if (GrSurfaceProxyView view = as_IB(image)->refPinnedView(this->context(), &pinnedUniqueID)) { - GrTextureAdjuster adjuster(this->context(), std::move(view), + if (GrSurfaceProxyView view = as_IB(image)->refPinnedView(this->recordingContext(), + &pinnedUniqueID)) { + GrTextureAdjuster adjuster(this->recordingContext(), std::move(view), image->imageInfo().colorInfo(), pinnedUniqueID); this->drawProducerLattice(&adjuster, std::move(iter), dst, paint); } else { @@ -1011,12 +963,13 @@ void SkGpuDevice::drawAtlas(const SkImage* atlas, const SkRSXform xform[], GrPaint grPaint; if (colors) { - if (!SkPaintToGrPaintWithXfermode(this->context(), fRenderTargetContext->colorInfo(), p, + if (!SkPaintToGrPaintWithXfermode(this->recordingContext(), + fRenderTargetContext->colorInfo(), p, this->asMatrixProvider(), (SkBlendMode)mode, &grPaint)) { return; } } else { - if (!SkPaintToGrPaint(this->context(), fRenderTargetContext->colorInfo(), p, + if (!SkPaintToGrPaint(this->recordingContext(), fRenderTargetContext->colorInfo(), p, this->asMatrixProvider(), &grPaint)) { return; } @@ -1043,7 +996,7 @@ void SkGpuDevice::drawGlyphRunList(const SkGlyphRunList& glyphRunList) { /////////////////////////////////////////////////////////////////////////////// void SkGpuDevice::drawDrawable(SkDrawable* drawable, const SkMatrix* matrix, SkCanvas* canvas) { - GrBackendApi api = this->context()->backend(); + GrBackendApi api = this->recordingContext()->backend(); if (GrBackendApi::kVulkan == api) { const SkMatrix& ctm = canvas->getTotalMatrix(); const SkMatrix& combinedMatrix = matrix ? SkMatrix::Concat(ctm, *matrix) : ctm; @@ -1062,15 +1015,16 @@ void SkGpuDevice::drawDrawable(SkDrawable* drawable, const SkMatrix* matrix, SkC /////////////////////////////////////////////////////////////////////////////// void SkGpuDevice::flush() { - this->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo()); + this->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo(), nullptr); this->context()->submit(); } GrSemaphoresSubmitted SkGpuDevice::flush(SkSurface::BackendSurfaceAccess access, - const GrFlushInfo& info) { + const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState) { ASSERT_SINGLE_OWNER - return fRenderTargetContext->flush(access, info); + return fRenderTargetContext->flush(access, info, newState); } bool SkGpuDevice::wait(int numSemaphores, const GrBackendSemaphore* waitSemaphores) { diff --git a/src/gpu/SkGpuDevice.h b/src/gpu/SkGpuDevice.h index 870ecddaf4199..22421277d5d20 100644 --- a/src/gpu/SkGpuDevice.h +++ b/src/gpu/SkGpuDevice.h @@ -62,6 +62,7 @@ class SkGpuDevice : public SkClipStackDevice { ~SkGpuDevice() override {} GrContext* context() const override { return fContext.get(); } + GrRecordingContext* recordingContext() const override { return fContext.get(); } // set all pixels to 0 void clearAll(); @@ -101,8 +102,7 @@ class SkGpuDevice : public SkClipStackDevice { void drawDevice(SkBaseDevice*, int x, int y, const SkPaint&) override; - void drawSpecial(SkSpecialImage*, int left, int top, const SkPaint& paint, - SkImage*, const SkMatrix&) override; + void drawSpecial(SkSpecialImage*, int left, int top, const SkPaint&) override; void drawEdgeAAQuad(const SkRect& rect, const SkPoint clip[4], SkCanvas::QuadAAFlags aaFlags, const SkColor4f& color, SkBlendMode mode) override; @@ -114,7 +114,8 @@ class SkGpuDevice : public SkClipStackDevice { sk_sp snapSpecial(const SkIRect&, bool = false) override; void flush() override; - GrSemaphoresSubmitted flush(SkSurface::BackendSurfaceAccess access, const GrFlushInfo&); + GrSemaphoresSubmitted flush(SkSurface::BackendSurfaceAccess access, const GrFlushInfo&, + const GrBackendSurfaceMutableState*); bool wait(int numSemaphores, const GrBackendSemaphore* waitSemaphores); bool onAccessPixels(SkPixmap*) override; @@ -169,7 +170,7 @@ class SkGpuDevice : public SkClipStackDevice { void drawStrokedLine(const SkPoint pts[2], const SkPaint&); - static std::unique_ptr MakeRenderTargetContext(GrContext*, + static std::unique_ptr MakeRenderTargetContext(GrRecordingContext*, SkBudgeted, const SkImageInfo&, int sampleCount, diff --git a/src/gpu/SkGpuDevice_drawTexture.cpp b/src/gpu/SkGpuDevice_drawTexture.cpp index c19971f014dfc..3f5a64507f305 100644 --- a/src/gpu/SkGpuDevice_drawTexture.cpp +++ b/src/gpu/SkGpuDevice_drawTexture.cpp @@ -130,7 +130,7 @@ static SkIRect determine_clipped_src_rect(int width, int height, const SkMatrix& srcToDstRect, const SkISize& imageDimensions, const SkRect* srcRectPtr) { - SkIRect clippedSrcIRect = clip ? clip->getConservativeBounds(width, height) + SkIRect clippedSrcIRect = clip ? clip->getConservativeBounds() : SkIRect::MakeWH(width, height); SkMatrix inv = SkMatrix::Concat(viewMatrix, srcToDstRect); if (!inv.invert(&inv)) { @@ -185,7 +185,7 @@ static bool should_tile_image_id(GrContext* context, // and theoretically, the resource cache's limits could be being changed on another thread, so // even having access to just the limit wouldn't be a reliable test during recording here. // Instead, we will just upload the entire image to be on the safe side and not tile. - if (!context->priv().asDirectContext()) { + if (!context->asDirectContext()) { return false; } @@ -462,8 +462,9 @@ static void draw_texture_producer(GrContext* context, } auto fp = producer->createFragmentProcessor(textureMatrix, src, constraintMode, coordsAllInsideSrcRect, wm, wm, filterMode); - fp = GrColorSpaceXformEffect::Make(std::move(fp), producer->colorSpace(), producer->alphaType(), - rtc->colorInfo().colorSpace()); + fp = GrColorSpaceXformEffect::Make(std::move(fp), + producer->colorSpace(), producer->alphaType(), + rtc->colorInfo().colorSpace(), kPremul_SkAlphaType); if (!fp) { return; } @@ -661,7 +662,8 @@ void SkGpuDevice::drawImageQuad(const SkImage* image, const SkRect* srcRect, con // Pinned texture proxies can be rendered directly as textures, or with relatively simple // adjustments applied to the image content (scaling, mipmaps, color space, etc.) uint32_t pinnedUniqueID; - if (GrSurfaceProxyView view = as_IB(image)->refPinnedView(this->context(), &pinnedUniqueID)) { + if (GrSurfaceProxyView view = as_IB(image)->refPinnedView(this->recordingContext(), + &pinnedUniqueID)) { SK_HISTOGRAM_BOOLEAN("DrawTiled", false); LogDrawScaleFactor(ctm, srcToDst, paint.getFilterQuality()); @@ -815,9 +817,9 @@ void SkGpuDevice::drawEdgeAAImageSet(const SkCanvas::ImageSetEntry set[], int co // drawImageQuad and the proper effect to dynamically sample their planes. if (!image->isYUVA()) { uint32_t uniqueID; - view = image->refPinnedView(this->context(), &uniqueID); + view = image->refPinnedView(this->recordingContext(), &uniqueID); if (!view) { - view = image->refView(this->context(), GrMipMapped::kNo); + view = image->refView(this->recordingContext(), GrMipMapped::kNo); } } diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 735c78dd4412d..6c0a2b5c14045 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -13,13 +13,14 @@ #include "include/core/SkPixelRef.h" #include "include/effects/SkRuntimeEffect.h" #include "include/gpu/GrContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/gpu/GrTypes.h" -#include "include/private/GrRecordingContext.h" #include "include/private/SkIDChangeListener.h" #include "include/private/SkImageInfoPriv.h" #include "include/private/SkTemplates.h" #include "src/core/SkAutoMalloc.h" #include "src/core/SkBlendModePriv.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkImagePriv.h" #include "src/core/SkMaskFilterBase.h" @@ -204,6 +205,8 @@ static inline float dither_range_for_config(GrColorType dstColorType) { switch (dstColorType) { // 4 bit case GrColorType::kABGR_4444: + case GrColorType::kARGB_4444: + case GrColorType::kBGRA_4444: return 1 / 15.f; // 6 bit case GrColorType::kBGR_565: @@ -262,15 +265,17 @@ static inline bool skpaint_to_grpaint_impl(GrRecordingContext* context, // Setup the initial color considering the shader, the SkPaint color, and the presence or not // of per-vertex colors. - std::unique_ptr shaderFP; + std::unique_ptr paintFP; if (!primColorMode || blend_requires_shader(*primColorMode)) { fpArgs.fInputColorIsOpaque = origColor.isOpaque(); if (shaderProcessor) { - shaderFP = std::move(*shaderProcessor); - } else if (const auto* shader = as_SB(skPaint.getShader())) { - shaderFP = shader->asFragmentProcessor(fpArgs); - if (!shaderFP) { - return false; + paintFP = std::move(*shaderProcessor); + } else { + if (const SkShaderBase* shader = as_SB(skPaint.getShader())) { + paintFP = shader->asFragmentProcessor(fpArgs); + if (paintFP == nullptr) { + return false; + } } } } @@ -279,7 +284,7 @@ static inline bool skpaint_to_grpaint_impl(GrRecordingContext* context, // a known constant value. In that case we can simply apply a color filter during this // conversion without converting the color filter to a GrFragmentProcessor. bool applyColorFilterToPaintColor = false; - if (shaderFP) { + if (paintFP) { if (primColorMode) { // There is a blend between the primitive color and the shader color. The shader sees // the opaque paint color. The shader's output is blended using the provided mode by @@ -289,43 +294,33 @@ static inline bool skpaint_to_grpaint_impl(GrRecordingContext* context, // the GrPaint color will be ignored. SkPMColor4f shaderInput = origColor.makeOpaque().premul(); - shaderFP = GrFragmentProcessor::OverrideInput(std::move(shaderFP), shaderInput); - shaderFP = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(shaderFP), - *primColorMode); - - // The above may return null if compose results in a pass through of the prim color. - if (shaderFP) { - grPaint->addColorFragmentProcessor(std::move(shaderFP)); - } + paintFP = GrFragmentProcessor::OverrideInput(std::move(paintFP), shaderInput); + paintFP = GrXfermodeFragmentProcessor::Make(std::move(paintFP), /*dst=*/nullptr, + *primColorMode); // We can ignore origColor here - alpha is unchanged by gamma float paintAlpha = skPaint.getColor4f().fA; if (1.0f != paintAlpha) { // No gamut conversion - paintAlpha is a (linear) alpha value, splatted to all // color channels. It's value should be treated as the same in ANY color space. - grPaint->addColorFragmentProcessor(GrConstColorProcessor::Make( - { paintAlpha, paintAlpha, paintAlpha, paintAlpha }, - GrConstColorProcessor::InputMode::kModulateRGBA)); + paintFP = GrConstColorProcessor::Make( + std::move(paintFP), { paintAlpha, paintAlpha, paintAlpha, paintAlpha }, + GrConstColorProcessor::InputMode::kModulateRGBA); } } else { // The shader's FP sees the paint *unpremul* color SkPMColor4f origColorAsPM = { origColor.fR, origColor.fG, origColor.fB, origColor.fA }; grPaint->setColor4f(origColorAsPM); - grPaint->addColorFragmentProcessor(std::move(shaderFP)); } } else { if (primColorMode) { // There is a blend between the primitive color and the paint color. The blend considers // the opaque paint color. The paint's alpha is applied to the post-blended color. SkPMColor4f opaqueColor = origColor.makeOpaque().premul(); - auto processor = GrConstColorProcessor::Make(opaqueColor, - GrConstColorProcessor::InputMode::kIgnore); - processor = GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(processor), - *primColorMode); - if (processor) { - grPaint->addColorFragmentProcessor(std::move(processor)); - } - + paintFP = GrConstColorProcessor::Make(/*inputFP=*/nullptr, opaqueColor, + GrConstColorProcessor::InputMode::kIgnore); + paintFP = GrXfermodeFragmentProcessor::Make(std::move(paintFP), /*dst=*/nullptr, + *primColorMode); grPaint->setColor4f(opaqueColor); // We can ignore origColor here - alpha is unchanged by gamma @@ -333,9 +328,9 @@ static inline bool skpaint_to_grpaint_impl(GrRecordingContext* context, if (1.0f != paintAlpha) { // No gamut conversion - paintAlpha is a (linear) alpha value, splatted to all // color channels. It's value should be treated as the same in ANY color space. - grPaint->addColorFragmentProcessor(GrConstColorProcessor::Make( - { paintAlpha, paintAlpha, paintAlpha, paintAlpha }, - GrConstColorProcessor::InputMode::kModulateRGBA)); + paintFP = GrConstColorProcessor::Make( + std::move(paintFP), { paintAlpha, paintAlpha, paintAlpha, paintAlpha }, + GrConstColorProcessor::InputMode::kModulateRGBA); } } else { // No shader, no primitive color. @@ -350,15 +345,19 @@ static inline bool skpaint_to_grpaint_impl(GrRecordingContext* context, SkColorSpace* dstCS = dstColorInfo.colorSpace(); grPaint->setColor4f(colorFilter->filterColor4f(origColor, dstCS, dstCS).premul()); } else { - auto cfFP = colorFilter->asFragmentProcessor(context, dstColorInfo); - if (cfFP) { - grPaint->addColorFragmentProcessor(std::move(cfFP)); - } else { + auto [success, fp] = as_CFB(colorFilter)->asFragmentProcessor(std::move(paintFP), + context, dstColorInfo); + if (!success) { return false; } + paintFP = std::move(fp); } } + if (paintFP) { + grPaint->addColorFragmentProcessor(std::move(paintFP)); + } + SkMaskFilterBase* maskFilter = as_MFB(skPaint.getMaskFilter()); if (maskFilter) { // We may have set this before passing to the SkShader. @@ -385,9 +384,6 @@ static inline bool skpaint_to_grpaint_impl(GrRecordingContext* context, auto ditherFP = GrSkSLFP::Make(context, effect, "Dither", SkData::MakeWithCopy(&ditherRange, sizeof(ditherRange))); if (ditherFP) { - // The dither shader doesn't actually use input coordinates, but if we don't set - // this flag, the generated shader includes an extra local coord varying. - ditherFP->setSampledWithExplicitCoords(); grPaint->addColorFragmentProcessor(std::move(ditherFP)); } } @@ -395,7 +391,8 @@ static inline bool skpaint_to_grpaint_impl(GrRecordingContext* context, #endif if (GrColorTypeClampType(dstColorInfo.colorType()) == GrClampType::kManual) { if (grPaint->numColorFragmentProcessors()) { - grPaint->addColorFragmentProcessor(GrClampFragmentProcessor::Make(false)); + grPaint->addColorFragmentProcessor( + GrClampFragmentProcessor::Make(/*inputFP=*/nullptr, /*clampToPremul=*/false)); } else { auto color = grPaint->getColor4f(); grPaint->setColor4f({SkTPin(color.fR, 0.f, 1.f), diff --git a/src/gpu/ccpr/GrCCClipPath.cpp b/src/gpu/ccpr/GrCCClipPath.cpp index b2a2c07f833a9..36ba5f8383eaf 100644 --- a/src/gpu/ccpr/GrCCClipPath.cpp +++ b/src/gpu/ccpr/GrCCClipPath.cpp @@ -21,23 +21,19 @@ void GrCCClipPath::init( fAtlasLazyProxy = GrCCAtlas::MakeLazyAtlasProxy( [this](GrResourceProvider* resourceProvider, const GrCCAtlas::LazyAtlasDesc& desc) { SkASSERT(fHasAtlas); - SkASSERT(!fHasAtlasTransform); + SkASSERT(!fHasAtlasTranslate); GrTextureProxy* textureProxy = fAtlas ? fAtlas->textureProxy() : nullptr; if (!textureProxy || !textureProxy->instantiate(resourceProvider)) { - fAtlasScale = fAtlasTranslate = {0, 0}; - SkDEBUGCODE(fHasAtlasTransform = true); + SkDEBUGCODE(fHasAtlasTranslate = true); return GrSurfaceProxy::LazyCallbackResult(); } sk_sp texture = sk_ref_sp(textureProxy->peekTexture()); SkASSERT(texture); - fAtlasScale = {1.f / texture->width(), 1.f / texture->height()}; - fAtlasTranslate.set(fDevToAtlasOffset.fX * fAtlasScale.x(), - fDevToAtlasOffset.fY * fAtlasScale.y()); - SkDEBUGCODE(fHasAtlasTransform = true); + SkDEBUGCODE(fHasAtlasTranslate = true); // We use LazyInstantiationKeyMode::kUnsynced here because CCPR clip masks are never // cached, and the clip FP proxies need to ignore any unique keys that atlas diff --git a/src/gpu/ccpr/GrCCClipPath.h b/src/gpu/ccpr/GrCCClipPath.h index 0f3fef205837a..c0ec06c47b14f 100644 --- a/src/gpu/ccpr/GrCCClipPath.h +++ b/src/gpu/ccpr/GrCCClipPath.h @@ -62,8 +62,10 @@ class GrCCClipPath { void accountForOwnPath(GrCCPerFlushResourceSpecs*) const; void renderPathInAtlas(GrCCPerFlushResources*, GrOnFlushResourceProvider*); - const SkVector& atlasScale() const { SkASSERT(fHasAtlasTransform); return fAtlasScale; } - const SkVector& atlasTranslate() const { SkASSERT(fHasAtlasTransform); return fAtlasTranslate; } + const SkIVector& atlasTranslate() const { + SkASSERT(fHasAtlasTranslate); + return fDevToAtlasOffset; + } private: sk_sp fAtlasLazyProxy; @@ -74,10 +76,7 @@ class GrCCClipPath { const GrCCAtlas* fAtlas = nullptr; SkIVector fDevToAtlasOffset; // Translation from device space to location in atlas. SkDEBUGCODE(bool fHasAtlas = false;) - - SkVector fAtlasScale; - SkVector fAtlasTranslate; - SkDEBUGCODE(bool fHasAtlasTransform = false;) + SkDEBUGCODE(bool fHasAtlasTranslate = false;) }; #endif diff --git a/src/gpu/ccpr/GrCCClipProcessor.cpp b/src/gpu/ccpr/GrCCClipProcessor.cpp index 9eed783219fbb..baa27e9863028 100644 --- a/src/gpu/ccpr/GrCCClipProcessor.cpp +++ b/src/gpu/ccpr/GrCCClipProcessor.cpp @@ -7,9 +7,8 @@ #include "src/gpu/ccpr/GrCCClipProcessor.h" -#include "src/gpu/GrTexture.h" -#include "src/gpu/GrTextureProxy.h" #include "src/gpu/ccpr/GrCCClipPath.h" +#include "src/gpu/effects/GrTextureEffect.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" @@ -20,30 +19,34 @@ static GrSurfaceProxyView make_view(const GrCaps& caps, GrSurfaceProxy* proxy, return { sk_ref_sp(proxy), GrCCAtlas::kTextureOrigin, swizzle }; } -GrCCClipProcessor::GrCCClipProcessor(GrSurfaceProxyView view, const GrCCClipPath* clipPath, +GrCCClipProcessor::GrCCClipProcessor(std::unique_ptr inputFP, + const GrCaps& caps, + const GrCCClipPath* clipPath, IsCoverageCount isCoverageCount, MustCheckBounds mustCheckBounds) : INHERITED(kGrCCClipProcessor_ClassID, kCompatibleWithCoverageAsAlpha_OptimizationFlag) , fClipPath(clipPath) , fIsCoverageCount(IsCoverageCount::kYes == isCoverageCount) - , fMustCheckBounds(MustCheckBounds::kYes == mustCheckBounds) - , fAtlasAccess(std::move(view)) { - SkASSERT(fAtlasAccess.view()); - this->setTextureSamplerCnt(1); + , fMustCheckBounds(MustCheckBounds::kYes == mustCheckBounds) { + auto view = make_view(caps, clipPath->atlasLazyProxy(), fIsCoverageCount); + auto texEffect = GrTextureEffect::Make(std::move(view), kUnknown_SkAlphaType); + this->registerChild(std::move(texEffect), SkSL::SampleUsage::Explicit()); + + if (inputFP != nullptr) { + this->registerChild(std::move(inputFP)); + } } -GrCCClipProcessor::GrCCClipProcessor(const GrCaps& caps, const GrCCClipPath* clipPath, - IsCoverageCount isCoverageCount, - MustCheckBounds mustCheckBounds) - : GrCCClipProcessor(make_view(caps, clipPath->atlasLazyProxy(), - IsCoverageCount::kYes == isCoverageCount), - clipPath, isCoverageCount, mustCheckBounds) { +GrCCClipProcessor::GrCCClipProcessor(const GrCCClipProcessor& that) + : INHERITED(kGrCCClipProcessor_ClassID, that.optimizationFlags()) + , fClipPath(that.fClipPath) + , fIsCoverageCount(that.fIsCoverageCount) + , fMustCheckBounds(that.fMustCheckBounds) { + this->cloneAndRegisterAllChildProcessors(that); } std::unique_ptr GrCCClipProcessor::clone() const { - return std::make_unique( - fAtlasAccess.view(), fClipPath, IsCoverageCount(fIsCoverageCount), - MustCheckBounds(fMustCheckBounds)); + return std::unique_ptr(new GrCCClipProcessor(*this)); } void GrCCClipProcessor::onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const { @@ -56,15 +59,19 @@ void GrCCClipProcessor::onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKe bool GrCCClipProcessor::onIsEqual(const GrFragmentProcessor& fp) const { const GrCCClipProcessor& that = fp.cast(); - // Each ClipPath path has a unique atlas proxy, so hasSameSamplersAndAccesses should have - // already weeded out FPs with different ClipPaths. - SkASSERT(that.fClipPath->deviceSpacePath().getGenerationID() == - fClipPath->deviceSpacePath().getGenerationID()); - return that.fClipPath->deviceSpacePath().getFillType() == + return that.fClipPath->deviceSpacePath().getGenerationID() == + fClipPath->deviceSpacePath().getGenerationID() && + that.fClipPath->deviceSpacePath().getFillType() == fClipPath->deviceSpacePath().getFillType() && that.fIsCoverageCount == fIsCoverageCount && that.fMustCheckBounds == fMustCheckBounds; } +bool GrCCClipProcessor::hasInputFP() const { + // We always have a `texEffect`, and this accounts for one child. + // The second child will be the input FP, if we have one. + return this->numChildProcessors() > 1; +} + class GrCCClipProcessor::Impl : public GrGLSLFragmentProcessor { public: void emitCode(EmitArgs& args) override { @@ -72,7 +79,7 @@ class GrCCClipProcessor::Impl : public GrGLSLFragmentProcessor { GrGLSLUniformHandler* uniHandler = args.fUniformHandler; GrGLSLFPFragmentBuilder* f = args.fFragBuilder; - f->codeAppend ("half coverage;"); + f->codeAppend("half coverage;"); if (proc.fMustCheckBounds) { const char* pathIBounds; @@ -84,39 +91,43 @@ class GrCCClipProcessor::Impl : public GrGLSLFragmentProcessor { pathIBounds, pathIBounds); } - const char* atlasTransform; - fAtlasTransformUniform = uniHandler->addUniform(&proc, kFragment_GrShaderFlag, - kFloat4_GrSLType, "atlas_transform", - &atlasTransform); - f->codeAppendf("float2 texcoord = sk_FragCoord.xy * %s.xy + %s.zw;", - atlasTransform, atlasTransform); - - f->codeAppend ("coverage = "); - f->appendTextureLookup(args.fTexSamplers[0], "texcoord"); - f->codeAppend (".a;"); + const char* atlasTranslate; + fAtlasTranslateUniform = uniHandler->addUniform(&proc, kFragment_GrShaderFlag, + kFloat2_GrSLType, "atlas_translate", + &atlasTranslate); + SkString coord; + coord.printf("sk_FragCoord.xy + %s.xy", atlasTranslate); + constexpr int kTexEffectFPIndex = 0; + SkString sample = this->invokeChild(kTexEffectFPIndex, args, coord.c_str()); + f->codeAppendf("coverage = %s.a;", sample.c_str()); if (proc.fIsCoverageCount) { auto fillRule = GrFillRuleForSkPath(proc.fClipPath->deviceSpacePath()); if (GrFillRule::kEvenOdd == fillRule) { - f->codeAppend ("half t = mod(abs(coverage), 2);"); - f->codeAppend ("coverage = 1 - abs(t - 1);"); + f->codeAppend("half t = mod(abs(coverage), 2);"); + f->codeAppend("coverage = 1 - abs(t - 1);"); } else { SkASSERT(GrFillRule::kNonzero == fillRule); - f->codeAppend ("coverage = min(abs(coverage), 1);"); + f->codeAppend("coverage = min(abs(coverage), 1);"); } } if (proc.fMustCheckBounds) { - f->codeAppend ("} else {"); - f->codeAppend ( "coverage = 0;"); - f->codeAppend ("}"); + f->codeAppend("} else {"); + f->codeAppend( "coverage = 0;"); + f->codeAppend("}"); } if (proc.fClipPath->deviceSpacePath().isInverseFillType()) { - f->codeAppend ("coverage = 1 - coverage;"); + f->codeAppend("coverage = 1 - coverage;"); } - f->codeAppendf("%s = %s * coverage;", args.fOutputColor, args.fInputColor); + constexpr int kInputFPIndex = 1; + SkString inputColor = proc.hasInputFP() + ? this->invokeChild(kInputFPIndex, args.fInputColor, args) + : SkString(args.fInputColor); + + f->codeAppendf("%s = %s * coverage;", args.fOutputColor, inputColor.c_str()); } void onSetData(const GrGLSLProgramDataManager& pdman, @@ -127,14 +138,13 @@ class GrCCClipProcessor::Impl : public GrGLSLFragmentProcessor { pdman.set4f(fPathIBoundsUniform, pathIBounds.left(), pathIBounds.top(), pathIBounds.right(), pathIBounds.bottom()); } - const SkVector& scale = proc.fClipPath->atlasScale(); - const SkVector& trans = proc.fClipPath->atlasTranslate(); - pdman.set4f(fAtlasTransformUniform, scale.x(), scale.y(), trans.x(), trans.y()); + const SkIVector& trans = proc.fClipPath->atlasTranslate(); + pdman.set2f(fAtlasTranslateUniform, trans.x(), trans.y()); } private: UniformHandle fPathIBoundsUniform; - UniformHandle fAtlasTransformUniform; + UniformHandle fAtlasTranslateUniform; }; GrGLSLFragmentProcessor* GrCCClipProcessor::onCreateGLSLInstance() const { diff --git a/src/gpu/ccpr/GrCCClipProcessor.h b/src/gpu/ccpr/GrCCClipProcessor.h index d7eae5e5bc196..536bb8ed2145d 100644 --- a/src/gpu/ccpr/GrCCClipProcessor.h +++ b/src/gpu/ccpr/GrCCClipProcessor.h @@ -24,21 +24,22 @@ class GrCCClipProcessor : public GrFragmentProcessor { kYes = true }; - GrCCClipProcessor(GrSurfaceProxyView, const GrCCClipPath*, IsCoverageCount, MustCheckBounds); - GrCCClipProcessor(const GrCaps&, const GrCCClipPath*, IsCoverageCount, MustCheckBounds); + GrCCClipProcessor(std::unique_ptr, const GrCaps&, const GrCCClipPath*, + IsCoverageCount, MustCheckBounds); const char* name() const override { return "GrCCClipProcessor"; } std::unique_ptr clone() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; - const TextureSampler& onTextureSampler(int) const override { return fAtlasAccess; } + bool hasInputFP() const; private: + explicit GrCCClipProcessor(const GrCCClipProcessor&); + const GrCCClipPath* const fClipPath; const bool fIsCoverageCount; const bool fMustCheckBounds; - const TextureSampler fAtlasAccess; class Impl; diff --git a/src/gpu/ccpr/GrCCDrawPathsOp.cpp b/src/gpu/ccpr/GrCCDrawPathsOp.cpp index 3b27f15efe688..c17de845f7e64 100644 --- a/src/gpu/ccpr/GrCCDrawPathsOp.cpp +++ b/src/gpu/ccpr/GrCCDrawPathsOp.cpp @@ -7,7 +7,7 @@ #include "src/gpu/ccpr/GrCCDrawPathsOp.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -18,7 +18,7 @@ static bool has_coord_transforms(const GrPaint& paint) { for (const auto& fp : GrFragmentProcessor::PaintCRange(paint)) { - if (!fp.coordTransforms().empty()) { + if (fp.numCoordTransforms() > 0) { return true; } } diff --git a/src/gpu/ccpr/GrCCFiller.cpp b/src/gpu/ccpr/GrCCFiller.cpp index ee9520f83beb4..9b30a708cd552 100644 --- a/src/gpu/ccpr/GrCCFiller.cpp +++ b/src/gpu/ccpr/GrCCFiller.cpp @@ -433,7 +433,7 @@ bool GrCCFiller::prepareToDraw(GrOnFlushResourceProvider* onFlushRP) { SkASSERT(!currFan.empty()); currFan.pop_back(); } - // fallthru. + [[fallthrough]]; case Verb::kEndOpenContour: // endPt != startPt. SkASSERT(!currFanIsTessellated || currFan.empty()); if (!currFanIsTessellated && currFan.count() >= 3) { diff --git a/src/gpu/ccpr/GrCCPathProcessor.cpp b/src/gpu/ccpr/GrCCPathProcessor.cpp index d4c1d8be46611..6d122d43bea4a 100644 --- a/src/gpu/ccpr/GrCCPathProcessor.cpp +++ b/src/gpu/ccpr/GrCCPathProcessor.cpp @@ -103,21 +103,31 @@ class GrCCPathProcessor::Impl : public GrGLSLGeometryProcessor { public: void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override; + static void GenKey(const GrCCPathProcessor& cc, GrProcessorKeyBuilder* b) { + b->add32(AddMatrixKeys((uint32_t) cc.fCoverageMode, SkMatrix::I(), cc.fLocalMatrix)); + } + private: - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { const auto& proc = primProc.cast(); pdman.set2f(fAtlasAdjustUniform, 1.0f / proc.fAtlasDimensions.fWidth, 1.0f / proc.fAtlasDimensions.fHeight); - this->setTransformDataHelper(proc.fLocalMatrix, pdman, transformRange); + this->setTransform(pdman, fLocalMatrixUni, proc.fLocalMatrix, &fLocalMatrix); } GrGLSLUniformHandler::UniformHandle fAtlasAdjustUniform; + GrGLSLUniformHandler::UniformHandle fLocalMatrixUni; + SkMatrix fLocalMatrix = SkMatrix::InvalidMatrix(); typedef GrGLSLGeometryProcessor INHERITED; }; +void GrCCPathProcessor::getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const { + GrCCPathProcessor::Impl::GenKey(*this, b); +} + GrGLSLPrimitiveProcessor* GrCCPathProcessor::createGLSLInstance(const GrShaderCaps&) const { return new Impl(); } @@ -218,8 +228,8 @@ void GrCCPathProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { } gpArgs->fPositionVar.set(kFloat2_GrSLType, "octocoord"); - this->emitTransforms(v, varyingHandler, uniHandler, gpArgs->fPositionVar, proc.fLocalMatrix, - args.fFPCoordTransformHandler); + this->writeLocalCoord(v, args.fUniformHandler, gpArgs, gpArgs->fPositionVar, proc.fLocalMatrix, + &fLocalMatrixUni); // Fragment shader. GrGLSLFPFragmentBuilder* f = args.fFragBuilder; diff --git a/src/gpu/ccpr/GrCCPathProcessor.h b/src/gpu/ccpr/GrCCPathProcessor.h index cb5f22770efb4..789ac2e3ff61c 100644 --- a/src/gpu/ccpr/GrCCPathProcessor.h +++ b/src/gpu/ccpr/GrCCPathProcessor.h @@ -64,9 +64,8 @@ class GrCCPathProcessor : public GrGeometryProcessor { const SkMatrix& viewMatrixIfUsingLocalCoords = SkMatrix::I()); const char* name() const override { return "GrCCPathProcessor"; } - void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const override { - b->add32((uint32_t)fCoverageMode); - } + void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const override; + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; void drawPaths(GrOpFlushState*, const GrPipeline&, const GrSurfaceProxy& atlasProxy, diff --git a/src/gpu/ccpr/GrCCPerFlushResources.cpp b/src/gpu/ccpr/GrCCPerFlushResources.cpp index dde97ae2aa968..004ea0d0d7b1d 100644 --- a/src/gpu/ccpr/GrCCPerFlushResources.cpp +++ b/src/gpu/ccpr/GrCCPerFlushResources.cpp @@ -7,7 +7,7 @@ #include "src/gpu/ccpr/GrCCPerFlushResources.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrOnFlushResourceProvider.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -96,8 +96,10 @@ class CopyAtlasOp : public AtlasOp { GrCCPathProcessor pathProc(coverageMode, fSrcProxy->peekTexture(), swizzle, GrCCAtlas::kTextureOrigin); - GrPipeline pipeline(GrScissorTest::kDisabled, SkBlendMode::kSrc, - flushState->drawOpArgs().writeSwizzle()); + bool hasScissor = flushState->appliedClip() && + flushState->appliedClip()->scissorState().enabled(); + GrPipeline pipeline(hasScissor ? GrScissorTest::kEnabled : GrScissorTest::kDisabled, + SkBlendMode::kSrc, flushState->drawOpArgs().writeSwizzle()); pathProc.drawPaths(flushState, pipeline, *fSrcProxy, *fResources, fBaseInstance, fEndInstance, this->bounds()); diff --git a/src/gpu/ccpr/GrCCStroker.cpp b/src/gpu/ccpr/GrCCStroker.cpp index 44f3db3362f44..a1805f83c41b6 100644 --- a/src/gpu/ccpr/GrCCStroker.cpp +++ b/src/gpu/ccpr/GrCCStroker.cpp @@ -89,8 +89,7 @@ class LinearStrokeProcessor : public GrGeometryProcessor { }; class Impl : public GrGLSLGeometryProcessor { - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - const CoordTransformRange&) override {} + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override; }; @@ -103,7 +102,6 @@ class LinearStrokeProcessor : public GrGeometryProcessor { void LinearStrokeProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; - GrGLSLUniformHandler* uniHandler = args.fUniformHandler; varyingHandler->emitAttributes(args.fGP.cast()); @@ -137,8 +135,7 @@ void LinearStrokeProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { edgeDistances.vsOut(), edgeDistances.vsOut(), edgeDistances.vsOut()); gpArgs->fPositionVar.set(kFloat2_GrSLType, "position"); - this->emitTransforms(v, varyingHandler, uniHandler, GrShaderVar("position", kFloat2_GrSLType), - SkMatrix::I(), args.fFPCoordTransformHandler); + // Leave fLocalCoordVar uninitialized; this GP is not combined with frag processors // Use the 4 edge distances to calculate coverage in the fragment shader. GrGLSLFPFragmentBuilder* f = args.fFragBuilder; @@ -182,8 +179,7 @@ class CubicStrokeProcessor : public GrGeometryProcessor { }; class Impl : public GrGLSLGeometryProcessor { - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - const CoordTransformRange&) override {} + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override; }; @@ -194,7 +190,6 @@ class CubicStrokeProcessor : public GrGeometryProcessor { void CubicStrokeProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; - GrGLSLUniformHandler* uniHandler = args.fUniformHandler; varyingHandler->emitAttributes(args.fGP.cast()); @@ -259,8 +254,7 @@ void CubicStrokeProcessor::Impl::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { coverages.vsOut()); gpArgs->fPositionVar.set(kFloat2_GrSLType, "position"); - this->emitTransforms(v, varyingHandler, uniHandler, GrShaderVar("position", kFloat2_GrSLType), - SkMatrix::I(), args.fFPCoordTransformHandler); + // Leave fLocalCoordVar uninitialized; this GP is not combined with frag processors // Use the 2 edge distances and interpolated butt cap AA to calculate fragment coverage. GrGLSLFPFragmentBuilder* f = args.fFragBuilder; @@ -649,10 +643,10 @@ bool GrCCStroker::prepareToDraw(GrOnFlushResourceProvider* onFlushRP) { case Verb::kRoundJoin: case Verb::kInternalRoundJoin: conicWeight = params[paramsIdx++].fConicWeight; - // fallthru + [[fallthrough]]; case Verb::kMiterJoin: miterCapHeightOverWidth = params[paramsIdx++].fMiterCapHeightOverWidth; - // fallthru + [[fallthrough]]; case Verb::kBevelJoin: case Verb::kInternalBevelJoin: builder.appendJoin(verb, pts[ptsIdx], normals[normalsIdx], normals[normalsIdx + 1], diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp index eb4cae7ac927f..5f66c6e442edc 100644 --- a/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp +++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer.cpp @@ -136,7 +136,7 @@ GrPathRenderer::CanDrawPath GrCoverageCountingPathRenderer::onCanDrawPath( // defined relative to device space. return CanDrawPath::kNo; } - // fallthru + [[fallthrough]]; case SkStrokeRec::kHairline_Style: { if (CoverageType::kFP16_CoverageCount != fCoverageType) { // Stroking is not yet supported in MSAA atlas mode. @@ -186,8 +186,8 @@ void GrCoverageCountingPathRenderer::recordOp(std::unique_ptr o } std::unique_ptr GrCoverageCountingPathRenderer::makeClipProcessor( - uint32_t opsTaskID, const SkPath& deviceSpacePath, const SkIRect& accessRect, - const GrCaps& caps) { + std::unique_ptr inputFP, uint32_t opsTaskID, + const SkPath& deviceSpacePath, const SkIRect& accessRect, const GrCaps& caps) { SkASSERT(!fFlushing); uint32_t key = deviceSpacePath.getGenerationID(); @@ -218,7 +218,8 @@ std::unique_ptr GrCoverageCountingPathRenderer::makeClipPro CoverageType::kFP16_CoverageCount == fCoverageType); auto mustCheckBounds = GrCCClipProcessor::MustCheckBounds( !clipPath.pathDevIBounds().contains(accessRect)); - return std::make_unique(caps, &clipPath, isCoverageCount, mustCheckBounds); + return std::make_unique( + std::move(inputFP), caps, &clipPath, isCoverageCount, mustCheckBounds); } void GrCoverageCountingPathRenderer::preFlush( diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer.h b/src/gpu/ccpr/GrCoverageCountingPathRenderer.h index a3107057b448c..e5e09472f003a 100644 --- a/src/gpu/ccpr/GrCoverageCountingPathRenderer.h +++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer.h @@ -63,8 +63,8 @@ class GrCoverageCountingPathRenderer : public GrPathRenderer, public GrOnFlushCa } std::unique_ptr makeClipProcessor( - uint32_t oplistID, const SkPath& deviceSpacePath, const SkIRect& accessRect, - const GrCaps&); + std::unique_ptr inputFP, uint32_t opsTaskID, + const SkPath& deviceSpacePath, const SkIRect& accessRect, const GrCaps& caps); // GrOnFlushCallbackObject overrides. void preFlush(GrOnFlushResourceProvider*, const uint32_t* opsTaskIDs, diff --git a/src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp b/src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp index 1b2a55e0e7008..72d443c694975 100644 --- a/src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp +++ b/src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp @@ -17,7 +17,7 @@ sk_sp GrCoverageCountingPathRenderer::CreateIfSu } std::unique_ptr GrCoverageCountingPathRenderer::makeClipProcessor( - uint32_t opsTaskID, const SkPath& deviceSpacePath, const SkIRect& accessRect, - const GrCaps& caps) { + std::unique_ptr inputFP, uint32_t opsTaskID, + const SkPath& deviceSpacePath, const SkIRect& accessRect, const GrCaps& caps) { return nullptr; } diff --git a/src/gpu/ccpr/GrGSCoverageProcessor.cpp b/src/gpu/ccpr/GrGSCoverageProcessor.cpp index feaac1a1439c3..a627db5a8a391 100644 --- a/src/gpu/ccpr/GrGSCoverageProcessor.cpp +++ b/src/gpu/ccpr/GrGSCoverageProcessor.cpp @@ -23,10 +23,7 @@ class GrGSCoverageProcessor::Impl : public GrGLSLGeometryProcessor { virtual bool hasCoverage(const GrGSCoverageProcessor& proc) const { return false; } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - const CoordTransformRange& transformRange) final { - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); - } + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&) final {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) final { const GrGSCoverageProcessor& proc = args.fGP.cast(); diff --git a/src/gpu/ccpr/GrSampleMaskProcessor.cpp b/src/gpu/ccpr/GrSampleMaskProcessor.cpp index 857f1865427b9..87fe3417f7a7c 100644 --- a/src/gpu/ccpr/GrSampleMaskProcessor.cpp +++ b/src/gpu/ccpr/GrSampleMaskProcessor.cpp @@ -15,8 +15,7 @@ class GrSampleMaskProcessor::Impl : public GrGLSLGeometryProcessor { Impl(std::unique_ptr shader) : fShader(std::move(shader)) {} private: - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - const CoordTransformRange&) override {} + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override {} void onEmitCode(EmitArgs&, GrGPArgs*) override; diff --git a/src/gpu/ccpr/GrStencilAtlasOp.cpp b/src/gpu/ccpr/GrStencilAtlasOp.cpp index 3422592939352..322a626933c70 100644 --- a/src/gpu/ccpr/GrStencilAtlasOp.cpp +++ b/src/gpu/ccpr/GrStencilAtlasOp.cpp @@ -7,7 +7,7 @@ #include "src/gpu/ccpr/GrStencilAtlasOp.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrOpsRenderPass.h" #include "src/gpu/GrProgramInfo.h" @@ -58,8 +58,7 @@ class StencilResolveProcessor::Impl : public GrGLSLGeometryProcessor { f->codeAppendf("%s = %s = half4(1);", args.fOutputColor, args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - const CoordTransformRange&) override {} + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override {} }; GrGLSLPrimitiveProcessor* StencilResolveProcessor::createGLSLInstance(const GrShaderCaps&) const { diff --git a/src/gpu/ccpr/GrVSCoverageProcessor.cpp b/src/gpu/ccpr/GrVSCoverageProcessor.cpp index ee3ce647edb31..43aff622195bd 100644 --- a/src/gpu/ccpr/GrVSCoverageProcessor.cpp +++ b/src/gpu/ccpr/GrVSCoverageProcessor.cpp @@ -18,10 +18,7 @@ class GrVSCoverageProcessor::Impl : public GrGLSLGeometryProcessor { : fShader(std::move(shader)), fNumSides(numSides) {} private: - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - const CoordTransformRange& transformRange) final { - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); - } + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&) final {} void onEmitCode(EmitArgs&, GrGPArgs*) override; diff --git a/src/gpu/d3d/GrD3DBuffer.cpp b/src/gpu/d3d/GrD3DBuffer.cpp index 108e9d11571a3..f1fe713302dc5 100644 --- a/src/gpu/d3d/GrD3DBuffer.cpp +++ b/src/gpu/d3d/GrD3DBuffer.cpp @@ -200,6 +200,15 @@ void GrD3DBuffer::internalMap(size_t size) { range.End = size; fMappedResource->fD3DResource->Map(0, &range, &fMapPtr); } else { + if (!fResource->unique()) { + // in use by a previously submitted command list, so we need to create a new one + // TODO: try to use a recycled buffer resource + D3D12_RESOURCE_STATES resourceState; + fResource = Resource::Make(this->getD3DGpu(), this->size(), this->intendedType(), + this->accessPattern(), &resourceState); + SkASSERT(fResource); + fResourceState = resourceState; // no need to transition, this is a new resource + } fMappedResource = fResource; D3D12_RANGE range; range.Begin = 0; diff --git a/src/gpu/d3d/GrD3DCaps.cpp b/src/gpu/d3d/GrD3DCaps.cpp index df17463d607c9..81ee9659b68fe 100644 --- a/src/gpu/d3d/GrD3DCaps.cpp +++ b/src/gpu/d3d/GrD3DCaps.cpp @@ -10,6 +10,7 @@ #include "include/gpu/d3d/GrD3DTypes.h" #include "src/core/SkCompressedDataUtils.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrProgramInfo.h" #include "src/gpu/GrShaderCaps.h" @@ -33,9 +34,9 @@ GrD3DCaps::GrD3DCaps(const GrContextOptions& contextOptions, IDXGIAdapter1* adap fOversizedStencilSupport = false; //TODO: figure this out fDrawInstancedSupport = true; + fSemaphoreSupport = true; + fFenceSyncSupport = true; // TODO: implement these - fSemaphoreSupport = false; - fFenceSyncSupport = false; fCrossContextTextureSupport = false; fHalfFloatVertexAttributeSupport = false; @@ -356,6 +357,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 4; + info.fFormatColorType = GrColorType::kRGBA_8888; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 2; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -384,6 +386,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 1; + info.fFormatColorType = GrColorType::kR_8; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 2; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -413,6 +416,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 4; + info.fFormatColorType = GrColorType::kBGRA_8888; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -432,6 +436,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 2; + info.fFormatColorType = GrColorType::kBGR_565; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -451,6 +456,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 8; + info.fFormatColorType = GrColorType::kRGBA_F16; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 2; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -477,6 +483,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 2; + info.fFormatColorType = GrColorType::kR_F16; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -498,6 +505,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 2; + info.fFormatColorType = GrColorType::kRG_88; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -517,6 +525,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 4; + info.fFormatColorType = GrColorType::kRGBA_1010102; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -536,6 +545,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 2; + info.fFormatColorType = GrColorType::kBGRA_4444; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -546,8 +556,8 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& ctInfo = info.fColorTypeInfos[ctIdx++]; ctInfo.fColorType = ct; ctInfo.fFlags = ColorTypeInfo::kUploadData_Flag | ColorTypeInfo::kRenderable_Flag; - ctInfo.fReadSwizzle = GrSwizzle("bgra"); - ctInfo.fWriteSwizzle = GrSwizzle("bgra"); + ctInfo.fReadSwizzle = GrSwizzle("argb"); + ctInfo.fWriteSwizzle = GrSwizzle("gbar"); } } } @@ -557,6 +567,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 4; + info.fFormatColorType = GrColorType::kRGBA_8888_SRGB; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -576,6 +587,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 2; + info.fFormatColorType = GrColorType::kR_16; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -597,6 +609,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 4; + info.fFormatColorType = GrColorType::kRG_1616; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -616,6 +629,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 8; + info.fFormatColorType = GrColorType::kRGBA_16161616; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -635,6 +649,7 @@ void GrD3DCaps::initFormatTable(const DXGI_ADAPTER_DESC& adapterDesc, ID3D12Devi auto& info = this->getFormatInfo(format); info.init(adapterDesc, device, format); info.fBytesPerPixel = 4; + info.fFormatColorType = GrColorType::kRG_F16; if (SkToBool(info.fFlags & FormatInfo::kTexturable_Flag)) { info.fColorTypeInfoCount = 1; info.fColorTypeInfos.reset(new ColorTypeInfo[info.fColorTypeInfoCount]()); @@ -773,20 +788,6 @@ bool GrD3DCaps::isFormatSRGB(const GrBackendFormat& format) const { } } -SkImage::CompressionType GrD3DCaps::compressionType(const GrBackendFormat& format) const { - DXGI_FORMAT dxgiFormat; - if (!format.asDxgiFormat(&dxgiFormat)) { - return SkImage::CompressionType::kNone; - } - - switch (dxgiFormat) { - case DXGI_FORMAT_BC1_UNORM: return SkImage::CompressionType::kBC1_RGBA8_UNORM; - default: return SkImage::CompressionType::kNone; - } - - SkUNREACHABLE; -} - bool GrD3DCaps::isFormatTexturable(const GrBackendFormat& format) const { DXGI_FORMAT dxgiFormat; if (!format.asDxgiFormat(&dxgiFormat)) { @@ -893,6 +894,11 @@ size_t GrD3DCaps::bytesPerPixel(DXGI_FORMAT format) const { return this->getFormatInfo(format).fBytesPerPixel; } +GrColorType GrD3DCaps::getFormatColorType(DXGI_FORMAT format) const { + const FormatInfo& info = this->getFormatInfo(format); + return info.fFormatColorType; +} + GrCaps::SupportedWrite GrD3DCaps::supportedWritePixelsColorType( GrColorType surfaceColorType, const GrBackendFormat& surfaceFormat, GrColorType srcColorType) const { @@ -944,12 +950,6 @@ bool GrD3DCaps::onAreColorTypeAndFormatCompatible(GrColorType ct, return false; } - SkImage::CompressionType compression = GrDxgiFormatToCompressionType(dxgiFormat); - if (compression != SkImage::CompressionType::kNone) { - return ct == (SkCompressionTypeIsOpaque(compression) ? GrColorType::kRGB_888x - : GrColorType::kRGBA_8888); - } - const auto& info = this->getFormatInfo(dxgiFormat); for (int i = 0; i < info.fColorTypeInfoCount; ++i) { if (info.fColorTypeInfos[i].fColorType == ct) { @@ -982,7 +982,7 @@ GrBackendFormat GrD3DCaps::getBackendFormatFromCompressionType( SkUNREACHABLE; } -GrSwizzle GrD3DCaps::getReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { +GrSwizzle GrD3DCaps::onGetReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { DXGI_FORMAT dxgiFormat; SkAssertResult(format.asDxgiFormat(&dxgiFormat)); const auto& info = this->getFormatInfo(dxgiFormat); @@ -1025,7 +1025,7 @@ GrCaps::SupportedRead GrD3DCaps::onSupportedReadPixelsColorType( return { GrColorType::kUnknown, 0 }; } - SkImage::CompressionType compression = GrDxgiFormatToCompressionType(dxgiFormat); + SkImage::CompressionType compression = GrBackendFormatToCompressionType(srcBackendFormat); if (compression != SkImage::CompressionType::kNone) { return { SkCompressionTypeIsOpaque(compression) ? GrColorType::kRGB_888x : GrColorType::kRGBA_8888, 0 }; diff --git a/src/gpu/d3d/GrD3DCaps.h b/src/gpu/d3d/GrD3DCaps.h index 1c4fefb52db58..1f4cd7e7da722 100644 --- a/src/gpu/d3d/GrD3DCaps.h +++ b/src/gpu/d3d/GrD3DCaps.h @@ -29,7 +29,6 @@ class GrD3DCaps : public GrCaps { GrD3DCaps(const GrContextOptions& contextOptions, IDXGIAdapter1*, ID3D12Device*); bool isFormatSRGB(const GrBackendFormat&) const override; - SkImage::CompressionType compressionType(const GrBackendFormat&) const override; bool isFormatTexturable(const GrBackendFormat&) const override; bool isFormatTexturable(DXGI_FORMAT) const; @@ -50,6 +49,8 @@ class GrD3DCaps : public GrCaps { size_t bytesPerPixel(const GrBackendFormat&) const override; size_t bytesPerPixel(DXGI_FORMAT) const; + GrColorType getFormatColorType(DXGI_FORMAT) const; + SupportedWrite supportedWritePixelsColorType(GrColorType surfaceColorType, const GrBackendFormat& surfaceFormat, GrColorType srcColorType) const override; @@ -93,7 +94,6 @@ class GrD3DCaps : public GrCaps { return fColorTypeToFormatTable[idx]; } - GrSwizzle getReadSwizzle(const GrBackendFormat&, GrColorType) const override; GrSwizzle getWriteSwizzle(const GrBackendFormat&, GrColorType) const override; uint64_t computeFormatKey(const GrBackendFormat&) const override; @@ -139,6 +139,8 @@ class GrD3DCaps : public GrCaps { SupportedRead onSupportedReadPixelsColorType(GrColorType, const GrBackendFormat&, GrColorType) const override; + GrSwizzle onGetReadSwizzle(const GrBackendFormat&, GrColorType) const override; + // ColorTypeInfo for a specific format struct ColorTypeInfo { GrColorType fColorType = GrColorType::kUnknown; @@ -184,6 +186,11 @@ class GrD3DCaps : public GrCaps { // This value is only valid for regular formats. Compressed formats will be 0. size_t fBytesPerPixel = 0; + // This GrColorType represents how the actually GPU format lays out its memory. This is used + // for uploading data to backend textures to make sure we've arranged the memory in the + // correct order. + GrColorType fFormatColorType = GrColorType::kUnknown; + std::unique_ptr fColorTypeInfos; int fColorTypeInfoCount = 0; }; diff --git a/src/gpu/d3d/GrD3DCommandList.cpp b/src/gpu/d3d/GrD3DCommandList.cpp index 363a3f7f176c2..a422622116d7f 100644 --- a/src/gpu/d3d/GrD3DCommandList.cpp +++ b/src/gpu/d3d/GrD3DCommandList.cpp @@ -12,6 +12,8 @@ #include "src/gpu/d3d/GrD3DGpu.h" #include "src/gpu/d3d/GrD3DPipelineState.h" #include "src/gpu/d3d/GrD3DRenderTarget.h" +#include "src/gpu/d3d/GrD3DStencilAttachment.h" +#include "src/gpu/d3d/GrD3DTexture.h" #include "src/gpu/d3d/GrD3DTextureResource.h" GrD3DCommandList::GrD3DCommandList(gr_cp allocator, @@ -31,6 +33,7 @@ bool GrD3DCommandList::close() { GrD3DCommandList::SubmitResult GrD3DCommandList::submit(ID3D12CommandQueue* queue) { SkASSERT(fIsActive); if (!this->hasWork()) { + this->callFinishedCallbacks(); return SubmitResult::kNoWork; } @@ -75,6 +78,12 @@ void GrD3DCommandList::releaseResources() { fTrackedResources.reset(); fTrackedRecycledResources.reset(); + + this->callFinishedCallbacks(); +} + +void GrD3DCommandList::addFinishedCallback(sk_sp callback) { + fFinishedCallbacks.push_back(std::move(callback)); } //////////////////////////////////////////////////////////////////////////////// @@ -83,7 +92,7 @@ void GrD3DCommandList::releaseResources() { void GrD3DCommandList::resourceBarrier(sk_sp resource, int numBarriers, - D3D12_RESOURCE_TRANSITION_BARRIER* barriers) { + const D3D12_RESOURCE_TRANSITION_BARRIER* barriers) { SkASSERT(fIsActive); SkASSERT(barriers); for (int i = 0; i < numBarriers; ++i) { @@ -110,8 +119,8 @@ void GrD3DCommandList::submitResourceBarriers() { SkASSERT(!fResourceBarriers.count()); } -void GrD3DCommandList::copyBufferToTexture(GrD3DBuffer* srcBuffer, - GrD3DTextureResource* dstTexture, +void GrD3DCommandList::copyBufferToTexture(const GrD3DBuffer* srcBuffer, + const GrD3DTextureResource* dstTexture, uint32_t subresourceCount, D3D12_PLACED_SUBRESOURCE_FOOTPRINT* bufferFootprints, int left, int top) { @@ -151,9 +160,9 @@ void GrD3DCommandList::copyTextureRegion(sk_sp dst, } void GrD3DCommandList::copyBufferToBuffer(sk_sp dst, - ID3D12Resource * dstBuffer, uint64_t dstOffset, + ID3D12Resource* dstBuffer, uint64_t dstOffset, sk_sp src, - ID3D12Resource * srcBuffer, uint64_t srcOffset, + ID3D12Resource* srcBuffer, uint64_t srcOffset, uint64_t numBytes) { SkASSERT(fIsActive); @@ -201,7 +210,9 @@ GrD3DDirectCommandList::GrD3DDirectCommandList(gr_cp all , fCurrentInstanceBuffer(nullptr) , fCurrentInstanceStride(0) , fCurrentIndexBuffer(nullptr) - , fCurrentConstantRingBuffer(nullptr) { + , fCurrentConstantRingBuffer(nullptr) + , fCurrentSRVCRVDescriptorHeap(nullptr) + , fCurrentSamplerDescriptorHeap(nullptr) { } void GrD3DDirectCommandList::onReset() { @@ -215,6 +226,8 @@ void GrD3DDirectCommandList::onReset() { fCurrentConstantRingBuffer->finishSubmit(fConstantRingBufferSubmitData); fCurrentConstantRingBuffer = nullptr; } + fCurrentSRVCRVDescriptorHeap = nullptr; + fCurrentSamplerDescriptorHeap = nullptr; } void GrD3DDirectCommandList::setPipelineState(sk_sp pipelineState) { @@ -275,7 +288,6 @@ void GrD3DDirectCommandList::setVertexBuffers(unsigned int startSlot, size_t instanceStride) { if (fCurrentVertexBuffer != vertexBuffer || fCurrentVertexStride != vertexStride || fCurrentInstanceBuffer != instanceBuffer || fCurrentInstanceStride != instanceStride) { - this->addingWork(); this->addResource(vertexBuffer->resource()); D3D12_VERTEX_BUFFER_VIEW views[2]; @@ -300,7 +312,6 @@ void GrD3DDirectCommandList::setVertexBuffers(unsigned int startSlot, void GrD3DDirectCommandList::setIndexBuffer(const GrD3DBuffer* indexBuffer) { if (fCurrentIndexBuffer != indexBuffer) { - this->addingWork(); this->addResource(indexBuffer->resource()); D3D12_INDEX_BUFFER_VIEW view = {}; @@ -329,22 +340,47 @@ void GrD3DDirectCommandList::drawIndexedInstanced(unsigned int indexCount, startInstance); } -void GrD3DDirectCommandList::clearRenderTargetView(GrD3DRenderTarget* renderTarget, +void GrD3DDirectCommandList::clearRenderTargetView(const GrD3DRenderTarget* renderTarget, const SkPMColor4f& color, - const GrScissorState& scissor) { - SkASSERT(!scissor.enabled()); // no cliprects for now + const D3D12_RECT* rect) { this->addingWork(); this->addResource(renderTarget->resource()); + if (renderTarget->numSamples() > 1) { + this->addResource(renderTarget->msaaTextureResource()->resource()); + } + unsigned int numRects = rect ? 1 : 0; fCommandList->ClearRenderTargetView(renderTarget->colorRenderTargetView(), - color.vec(), - 0, NULL); + color.vec(), numRects, rect); } -void GrD3DDirectCommandList::setRenderTarget(GrD3DRenderTarget * renderTarget) { +void GrD3DDirectCommandList::clearDepthStencilView(const GrD3DStencilAttachment* stencil, + uint8_t stencilClearValue, + const D3D12_RECT* rect) { + this->addingWork(); + this->addResource(stencil->resource()); + unsigned int numRects = rect ? 1 : 0; + fCommandList->ClearDepthStencilView(stencil->view(), D3D12_CLEAR_FLAG_STENCIL, 0, + stencilClearValue, numRects, rect); +} + +void GrD3DDirectCommandList::setRenderTarget(const GrD3DRenderTarget* renderTarget) { this->addingWork(); this->addResource(renderTarget->resource()); + if (renderTarget->numSamples() > 1) { + this->addResource(renderTarget->msaaTextureResource()->resource()); + } D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor = renderTarget->colorRenderTargetView(); - fCommandList->OMSetRenderTargets(1, &rtvDescriptor, false, nullptr); + + D3D12_CPU_DESCRIPTOR_HANDLE dsDescriptor; + D3D12_CPU_DESCRIPTOR_HANDLE* dsDescriptorPtr = nullptr; + if (auto stencil = renderTarget->renderTargetPriv().getStencilAttachment()) { + GrD3DStencilAttachment* d3dStencil = static_cast(stencil); + this->addResource(d3dStencil->resource()); + dsDescriptor = d3dStencil->view(); + dsDescriptorPtr = &dsDescriptor; + } + + fCommandList->OMSetRenderTargets(1, &rtvDescriptor, false, dsDescriptorPtr); } void GrD3DDirectCommandList::setGraphicsRootConstantBufferView( @@ -352,6 +388,34 @@ void GrD3DDirectCommandList::setGraphicsRootConstantBufferView( fCommandList->SetGraphicsRootConstantBufferView(rootParameterIndex, bufferLocation); } +void GrD3DDirectCommandList::setGraphicsRootDescriptorTable( + unsigned int rootParameterIndex, D3D12_GPU_DESCRIPTOR_HANDLE baseDescriptor) { + fCommandList->SetGraphicsRootDescriptorTable(rootParameterIndex, baseDescriptor); +} + +void GrD3DDirectCommandList::setDescriptorHeaps(sk_sp srvCrvHeapResource, + ID3D12DescriptorHeap* srvCrvDescriptorHeap, + sk_sp samplerHeapResource, + ID3D12DescriptorHeap* samplerDescriptorHeap) { + if (srvCrvDescriptorHeap != fCurrentSRVCRVDescriptorHeap || + samplerDescriptorHeap != fCurrentSamplerDescriptorHeap) { + ID3D12DescriptorHeap* heaps[2] = { + srvCrvDescriptorHeap, + samplerDescriptorHeap + }; + + fCommandList->SetDescriptorHeaps(2, heaps); + this->addRecycledResource(std::move(srvCrvHeapResource)); + this->addRecycledResource(std::move(samplerHeapResource)); + fCurrentSRVCRVDescriptorHeap = srvCrvDescriptorHeap; + fCurrentSamplerDescriptorHeap = samplerDescriptorHeap; + } +} + +void GrD3DDirectCommandList::addSampledTextureRef(GrD3DTexture* texture) { + this->addResource(texture->resource()); +} + //////////////////////////////////////////////////////////////////////////////////////////////////// std::unique_ptr GrD3DCopyCommandList::Make(ID3D12Device* device) { diff --git a/src/gpu/d3d/GrD3DCommandList.h b/src/gpu/d3d/GrD3DCommandList.h index 9652234cd7bd6..4bea28bad1efb 100644 --- a/src/gpu/d3d/GrD3DCommandList.h +++ b/src/gpu/d3d/GrD3DCommandList.h @@ -22,6 +22,8 @@ class GrD3DConstantRingBuffer; class GrD3DPipelineState; class GrD3DRenderTarget; class GrD3DRootSignature; +class GrD3DStencilAttachment; +class GrD3DTexture; class GrD3DTextureResource; class GrScissorState; @@ -50,11 +52,11 @@ class GrD3DCommandList { // All barriers should reference subresources of managedResource void resourceBarrier(sk_sp managedResource, int numBarriers, - D3D12_RESOURCE_TRANSITION_BARRIER* barriers); + const D3D12_RESOURCE_TRANSITION_BARRIER* barriers); // Helper method that calls copyTextureRegion multiple times, once for each subresource - void copyBufferToTexture(GrD3DBuffer* srcBuffer, - GrD3DTextureResource* dstTexture, + void copyBufferToTexture(const GrD3DBuffer* srcBuffer, + const GrD3DTextureResource* dstTexture, uint32_t subresourceCount, D3D12_PLACED_SUBRESOURCE_FOOTPRINT* bufferFootprints, int left, int top); @@ -70,6 +72,19 @@ class GrD3DCommandList { ID3D12Resource* srcBuffer, uint64_t srcOffset, uint64_t numBytes); + void releaseResources(); + + bool hasWork() const { return fHasWork; } + + void addFinishedCallback(sk_sp callback); + +private: + static const int kInitialTrackedResourcesCount = 32; + +protected: + GrD3DCommandList(gr_cp allocator, + gr_cp commandList); + // Add ref-counted resource that will be tracked and released when this command buffer finishes // execution void addResource(sk_sp resource) { @@ -85,17 +100,6 @@ class GrD3DCommandList { fTrackedRecycledResources.push_back(std::move(resource)); } - void releaseResources(); - - bool hasWork() const { return fHasWork; } - -private: - static const int kInitialTrackedResourcesCount = 32; - -protected: - GrD3DCommandList(gr_cp allocator, - gr_cp commandList); - void addingWork(); virtual void onReset() {} @@ -111,9 +115,13 @@ class GrD3DCommandList { bool fHasWork = false; private: + void callFinishedCallbacks() { fFinishedCallbacks.reset(); } + gr_cp fAllocator; SkSTArray<4, D3D12_RESOURCE_BARRIER> fResourceBarriers; + + SkTArray> fFinishedCallbacks; }; class GrD3DDirectCommandList : public GrD3DCommandList { @@ -142,12 +150,22 @@ class GrD3DDirectCommandList : public GrD3DCommandList { unsigned int startIndex, unsigned int baseVertex, unsigned int startInstance); - void clearRenderTargetView(GrD3DRenderTarget* renderTarget, const SkPMColor4f& color, - const GrScissorState& scissor); - void setRenderTarget(GrD3DRenderTarget* renderTarget); + void clearRenderTargetView(const GrD3DRenderTarget* renderTarget, const SkPMColor4f& color, + const D3D12_RECT* rect); + void clearDepthStencilView(const GrD3DStencilAttachment*, uint8_t stencilClearValue, + const D3D12_RECT* rect); + void setRenderTarget(const GrD3DRenderTarget* renderTarget); void setGraphicsRootConstantBufferView(unsigned int rootParameterIndex, D3D12_GPU_VIRTUAL_ADDRESS bufferLocation); + void setGraphicsRootDescriptorTable(unsigned int rootParameterIndex, + D3D12_GPU_DESCRIPTOR_HANDLE bufferLocation); + void setDescriptorHeaps(sk_sp srvCrvHeapResource, + ID3D12DescriptorHeap* srvDescriptorHeap, + sk_sp samplerHeapResource, + ID3D12DescriptorHeap* samplerDescriptorHeap); + + void addSampledTextureRef(GrD3DTexture*); private: GrD3DDirectCommandList(gr_cp allocator, @@ -164,6 +182,9 @@ class GrD3DDirectCommandList : public GrD3DCommandList { GrD3DConstantRingBuffer* fCurrentConstantRingBuffer; GrD3DConstantRingBuffer::SubmitData fConstantRingBufferSubmitData; + + const ID3D12DescriptorHeap* fCurrentSRVCRVDescriptorHeap; + const ID3D12DescriptorHeap* fCurrentSamplerDescriptorHeap; }; class GrD3DCopyCommandList : public GrD3DCommandList { diff --git a/src/gpu/d3d/GrD3DCpuDescriptorManager.cpp b/src/gpu/d3d/GrD3DCpuDescriptorManager.cpp index 202d432343c2d..3ad33c388eaa7 100644 --- a/src/gpu/d3d/GrD3DCpuDescriptorManager.cpp +++ b/src/gpu/d3d/GrD3DCpuDescriptorManager.cpp @@ -15,57 +15,58 @@ GrD3DCpuDescriptorManager::GrD3DCpuDescriptorManager(GrD3DGpu* gpu) , fCBVSRVDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV) , fSamplerDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) {} -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createRenderTargetView( +GrD3DDescriptorHeap::CPUHandle GrD3DCpuDescriptorManager::createRenderTargetView( GrD3DGpu* gpu, ID3D12Resource* textureResource) { - D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fRTVDescriptorPool.allocateHandle(gpu); - gpu->device()->CreateRenderTargetView(textureResource, nullptr, descriptor); + const GrD3DDescriptorHeap::CPUHandle& descriptor = fRTVDescriptorPool.allocateHandle(gpu); + gpu->device()->CreateRenderTargetView(textureResource, nullptr, descriptor.fHandle); return descriptor; } void GrD3DCpuDescriptorManager::recycleRenderTargetView( - D3D12_CPU_DESCRIPTOR_HANDLE* rtvDescriptor) { + const GrD3DDescriptorHeap::CPUHandle& rtvDescriptor) { fRTVDescriptorPool.releaseHandle(rtvDescriptor); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createDepthStencilView( +GrD3DDescriptorHeap::CPUHandle GrD3DCpuDescriptorManager::createDepthStencilView( GrD3DGpu* gpu, ID3D12Resource* textureResource) { - D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fDSVDescriptorPool.allocateHandle(gpu); - gpu->device()->CreateDepthStencilView(textureResource, nullptr, descriptor); + const GrD3DDescriptorHeap::CPUHandle& descriptor = fDSVDescriptorPool.allocateHandle(gpu); + gpu->device()->CreateDepthStencilView(textureResource, nullptr, descriptor.fHandle); return descriptor; } void GrD3DCpuDescriptorManager::recycleDepthStencilView( - D3D12_CPU_DESCRIPTOR_HANDLE* dsvDescriptor) { + const GrD3DDescriptorHeap::CPUHandle& dsvDescriptor) { fDSVDescriptorPool.releaseHandle(dsvDescriptor); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createConstantBufferView( +GrD3DDescriptorHeap::CPUHandle GrD3DCpuDescriptorManager::createConstantBufferView( GrD3DGpu* gpu, ID3D12Resource* bufferResource, size_t offset, size_t size) { - D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fCBVSRVDescriptorPool.allocateHandle(gpu); + const GrD3DDescriptorHeap::CPUHandle& descriptor = fCBVSRVDescriptorPool.allocateHandle(gpu); D3D12_CONSTANT_BUFFER_VIEW_DESC desc = {}; desc.BufferLocation = bufferResource->GetGPUVirtualAddress() + offset; desc.SizeInBytes = size; - gpu->device()->CreateConstantBufferView(&desc, descriptor); + gpu->device()->CreateConstantBufferView(&desc, descriptor.fHandle); return descriptor; } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createShaderResourceView( +GrD3DDescriptorHeap::CPUHandle GrD3DCpuDescriptorManager::createShaderResourceView( GrD3DGpu* gpu, ID3D12Resource* resource) { - D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fCBVSRVDescriptorPool.allocateHandle(gpu); + const GrD3DDescriptorHeap::CPUHandle& descriptor = fCBVSRVDescriptorPool.allocateHandle(gpu); // TODO: for 4:2:0 YUV formats we'll need to map two different views, one for Y and one for UV. // For now map the entire resource. - gpu->device()->CreateShaderResourceView(resource, nullptr, descriptor); + gpu->device()->CreateShaderResourceView(resource, nullptr, descriptor.fHandle); return descriptor; } -void GrD3DCpuDescriptorManager::recycleConstantOrShaderView(D3D12_CPU_DESCRIPTOR_HANDLE* view) { +void GrD3DCpuDescriptorManager::recycleConstantOrShaderView( + const GrD3DDescriptorHeap::CPUHandle& view) { fCBVSRVDescriptorPool.releaseHandle(view); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createSampler( +GrD3DDescriptorHeap::CPUHandle GrD3DCpuDescriptorManager::createSampler( GrD3DGpu* gpu, D3D12_FILTER filter, D3D12_TEXTURE_ADDRESS_MODE addressModeU, D3D12_TEXTURE_ADDRESS_MODE addressModeV) { - D3D12_CPU_DESCRIPTOR_HANDLE descriptor = fSamplerDescriptorPool.allocateHandle(gpu); + const GrD3DDescriptorHeap::CPUHandle& descriptor = fSamplerDescriptorPool.allocateHandle(gpu); D3D12_SAMPLER_DESC desc = {}; desc.Filter = filter; desc.AddressU = addressModeU; @@ -78,11 +79,12 @@ D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::createSampler( desc.MinLOD = 0; desc.MaxLOD = SK_ScalarMax; - gpu->device()->CreateSampler(&desc, descriptor); + gpu->device()->CreateSampler(&desc, descriptor.fHandle); return descriptor; } -void GrD3DCpuDescriptorManager::recycleSampler(D3D12_CPU_DESCRIPTOR_HANDLE* samplerDescriptor) { +void GrD3DCpuDescriptorManager::recycleSampler( + const GrD3DDescriptorHeap::CPUHandle& samplerDescriptor) { fSamplerDescriptorPool.releaseHandle(samplerDescriptor); } @@ -99,7 +101,7 @@ std::unique_ptr GrD3DCpuDescriptorManager::Heap return std::unique_ptr(new Heap(heap, numDescriptors)); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::Heap::allocateCPUHandle() { +GrD3DDescriptorHeap::CPUHandle GrD3DCpuDescriptorManager::Heap::allocateCPUHandle() { SkBitSet::OptionalIndex freeBlock = fFreeBlocks.findFirst(); SkASSERT(freeBlock); fFreeBlocks.reset(*freeBlock); @@ -107,15 +109,11 @@ D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::Heap::allocateCPUHandle() return fHeap->getCPUHandle(*freeBlock); } -bool GrD3DCpuDescriptorManager::Heap::freeCPUHandle(D3D12_CPU_DESCRIPTOR_HANDLE* handle) { - size_t index; - if (!fHeap->getIndex(*handle, &index)) { - return false; - } +void GrD3DCpuDescriptorManager::Heap::freeCPUHandle(const GrD3DDescriptorHeap::CPUHandle& handle) { + SkASSERT(this->ownsHandle(handle)); + size_t index = fHeap->getIndex(handle); fFreeBlocks.set(index); ++fFreeCount; - handle->ptr = 0; - return true; } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -128,10 +126,11 @@ GrD3DCpuDescriptorManager::HeapPool::HeapPool(GrD3DGpu* gpu, D3D12_DESCRIPTOR_HE fDescriptorHeaps.push_back(std::move(heap)); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::HeapPool::allocateHandle(GrD3DGpu* gpu) { +GrD3DDescriptorHeap::CPUHandle GrD3DCpuDescriptorManager::HeapPool::allocateHandle( + GrD3DGpu* gpu) { for (unsigned int i = 0; i < fDescriptorHeaps.size(); ++i) { if (fDescriptorHeaps[i]->canAllocate()) { - D3D12_CPU_DESCRIPTOR_HANDLE handle = fDescriptorHeaps[i]->allocateCPUHandle(); + GrD3DDescriptorHeap::CPUHandle handle = fDescriptorHeaps[i]->allocateCPUHandle(); return handle; } } @@ -142,15 +141,16 @@ D3D12_CPU_DESCRIPTOR_HANDLE GrD3DCpuDescriptorManager::HeapPool::allocateHandle( fDescriptorHeaps.push_back(std::move(heap)); fMaxAvailableDescriptors *= 2; - D3D12_CPU_DESCRIPTOR_HANDLE handle = + GrD3DDescriptorHeap::CPUHandle handle = fDescriptorHeaps[fDescriptorHeaps.size() - 1]->allocateCPUHandle(); return handle; } void GrD3DCpuDescriptorManager::HeapPool::releaseHandle( - D3D12_CPU_DESCRIPTOR_HANDLE* dsvDescriptor) { + const GrD3DDescriptorHeap::CPUHandle& dsvDescriptor) { for (unsigned int i = 0; i < fDescriptorHeaps.size(); ++i) { - if (fDescriptorHeaps[i]->freeCPUHandle(dsvDescriptor)) { + if (fDescriptorHeaps[i]->ownsHandle(dsvDescriptor)) { + fDescriptorHeaps[i]->freeCPUHandle(dsvDescriptor); return; } } diff --git a/src/gpu/d3d/GrD3DCpuDescriptorManager.h b/src/gpu/d3d/GrD3DCpuDescriptorManager.h index 4cb926e40ea62..056c696873885 100644 --- a/src/gpu/d3d/GrD3DCpuDescriptorManager.h +++ b/src/gpu/d3d/GrD3DCpuDescriptorManager.h @@ -16,24 +16,27 @@ class GrD3DCpuDescriptorManager { public: GrD3DCpuDescriptorManager(GrD3DGpu*); - D3D12_CPU_DESCRIPTOR_HANDLE createRenderTargetView(GrD3DGpu*, ID3D12Resource* textureResource); - void recycleRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE*); - - D3D12_CPU_DESCRIPTOR_HANDLE createDepthStencilView(GrD3DGpu*, ID3D12Resource* textureResource); - void recycleDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE*); - - D3D12_CPU_DESCRIPTOR_HANDLE createConstantBufferView(GrD3DGpu*, - ID3D12Resource* bufferResource, - size_t offset, - size_t size); - D3D12_CPU_DESCRIPTOR_HANDLE createShaderResourceView(GrD3DGpu*, - ID3D12Resource* resource); - void recycleConstantOrShaderView(D3D12_CPU_DESCRIPTOR_HANDLE*); - - D3D12_CPU_DESCRIPTOR_HANDLE createSampler(GrD3DGpu*, D3D12_FILTER filter, - D3D12_TEXTURE_ADDRESS_MODE addressModeU, - D3D12_TEXTURE_ADDRESS_MODE addressModeV); - void recycleSampler(D3D12_CPU_DESCRIPTOR_HANDLE*); + GrD3DDescriptorHeap::CPUHandle createRenderTargetView(GrD3DGpu*, + ID3D12Resource* textureResource); + void recycleRenderTargetView(const GrD3DDescriptorHeap::CPUHandle&); + + GrD3DDescriptorHeap::CPUHandle createDepthStencilView(GrD3DGpu*, + ID3D12Resource* textureResource); + void recycleDepthStencilView(const GrD3DDescriptorHeap::CPUHandle&); + + GrD3DDescriptorHeap::CPUHandle createConstantBufferView(GrD3DGpu*, + ID3D12Resource* bufferResource, + size_t offset, + size_t size); + GrD3DDescriptorHeap::CPUHandle createShaderResourceView(GrD3DGpu*, + ID3D12Resource* resource); + void recycleConstantOrShaderView(const GrD3DDescriptorHeap::CPUHandle&); + + GrD3DDescriptorHeap::CPUHandle createSampler(GrD3DGpu*, + D3D12_FILTER filter, + D3D12_TEXTURE_ADDRESS_MODE addressModeU, + D3D12_TEXTURE_ADDRESS_MODE addressModeV); + void recycleSampler(const GrD3DDescriptorHeap::CPUHandle&); private: class Heap { @@ -41,8 +44,11 @@ class GrD3DCpuDescriptorManager { static std::unique_ptr Make(GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE type, unsigned int numDescriptors); - D3D12_CPU_DESCRIPTOR_HANDLE allocateCPUHandle(); - bool freeCPUHandle(D3D12_CPU_DESCRIPTOR_HANDLE*); + GrD3DDescriptorHeap::CPUHandle allocateCPUHandle(); + void freeCPUHandle(const GrD3DDescriptorHeap::CPUHandle&); + bool ownsHandle(const GrD3DDescriptorHeap::CPUHandle& handle) { + return handle.fHeapID == fHeap->uniqueID(); + } bool canAllocate() { return fFreeCount > 0; } @@ -65,8 +71,8 @@ class GrD3DCpuDescriptorManager { public: HeapPool(GrD3DGpu*, D3D12_DESCRIPTOR_HEAP_TYPE); - D3D12_CPU_DESCRIPTOR_HANDLE allocateHandle(GrD3DGpu*); - void releaseHandle(D3D12_CPU_DESCRIPTOR_HANDLE*); + GrD3DDescriptorHeap::CPUHandle allocateHandle(GrD3DGpu*); + void releaseHandle(const GrD3DDescriptorHeap::CPUHandle&); private: std::vector> fDescriptorHeaps; diff --git a/src/gpu/d3d/GrD3DDescriptorHeap.cpp b/src/gpu/d3d/GrD3DDescriptorHeap.cpp index b3ae3cc330eb6..8d2569783bf27 100644 --- a/src/gpu/d3d/GrD3DDescriptorHeap.cpp +++ b/src/gpu/d3d/GrD3DDescriptorHeap.cpp @@ -28,25 +28,24 @@ std::unique_ptr GrD3DDescriptorHeap::Make(GrD3DGpu* gpu, GrD3DDescriptorHeap::GrD3DDescriptorHeap(const gr_cp& heap, unsigned int handleIncrementSize) : fHeap(heap) - , fHandleIncrementSize(handleIncrementSize) { + , fHandleIncrementSize(handleIncrementSize) + , fUniqueID(GenID()) { fCPUHeapStart = fHeap->GetCPUDescriptorHandleForHeapStart(); fGPUHeapStart = fHeap->GetGPUDescriptorHandleForHeapStart(); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DDescriptorHeap::getCPUHandle(unsigned int index) { - // valid only for non-shader-visible heaps - SkASSERT(!SkToBool(fHeap->GetDesc().Flags & D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE)); +GrD3DDescriptorHeap::CPUHandle GrD3DDescriptorHeap::getCPUHandle(unsigned int index) { SkASSERT(index < fHeap->GetDesc().NumDescriptors); D3D12_CPU_DESCRIPTOR_HANDLE handle = fCPUHeapStart; handle.ptr += index * fHandleIncrementSize; - return handle; + return {handle, fUniqueID}; } -D3D12_GPU_DESCRIPTOR_HANDLE GrD3DDescriptorHeap::getGPUHandle(unsigned int index) { +GrD3DDescriptorHeap::GPUHandle GrD3DDescriptorHeap::getGPUHandle(unsigned int index) { SkASSERT(index < fHeap->GetDesc().NumDescriptors); D3D12_GPU_DESCRIPTOR_HANDLE handle = fGPUHeapStart; handle.ptr += index * fHandleIncrementSize; - return handle; + return {handle, fUniqueID}; } diff --git a/src/gpu/d3d/GrD3DDescriptorHeap.h b/src/gpu/d3d/GrD3DDescriptorHeap.h index 19e2745011c8c..30fdc1358eba0 100644 --- a/src/gpu/d3d/GrD3DDescriptorHeap.h +++ b/src/gpu/d3d/GrD3DDescriptorHeap.h @@ -22,42 +22,56 @@ class GrD3DDescriptorHeap { ~GrD3DDescriptorHeap() = default; - D3D12_CPU_DESCRIPTOR_HANDLE getCPUHandle(unsigned int index); // only if non-shader-visible - D3D12_GPU_DESCRIPTOR_HANDLE getGPUHandle(unsigned int index); - - bool getIndex(D3D12_CPU_DESCRIPTOR_HANDLE handle, size_t* indexPtr) { - if (handle.ptr < fCPUHeapStart.ptr) { - return false; - } - size_t index = (handle.ptr - fCPUHeapStart.ptr) / fHandleIncrementSize; - if (index >= fHeap->GetDesc().NumDescriptors) { - return false; - } - SkASSERT(handle.ptr == fCPUHeapStart.ptr + index * fHandleIncrementSize); - *indexPtr = index; - return true; + uint32_t uniqueID() const { return fUniqueID; } + + struct CPUHandle { + D3D12_CPU_DESCRIPTOR_HANDLE fHandle; + uint32_t fHeapID; + }; + + struct GPUHandle { + D3D12_GPU_DESCRIPTOR_HANDLE fHandle; + uint32_t fHeapID; + }; + + CPUHandle getCPUHandle(unsigned int index); // write-only if shader-visible + GPUHandle getGPUHandle(unsigned int index); + ID3D12DescriptorHeap* descriptorHeap() const { return fHeap.get(); } + size_t handleIncrementSize() { return fHandleIncrementSize; } + + size_t getIndex(const CPUHandle& handle) { + SkASSERT(handle.fHeapID == fUniqueID); + size_t index = (handle.fHandle.ptr - fCPUHeapStart.ptr) / fHandleIncrementSize; + SkASSERT(index < fHeap->GetDesc().NumDescriptors); + SkASSERT(handle.fHandle.ptr == fCPUHeapStart.ptr + index * fHandleIncrementSize); + return index; } - bool getIndex(D3D12_GPU_DESCRIPTOR_HANDLE handle, size_t* indexPtr) { - if (handle.ptr < fGPUHeapStart.ptr) { - return false; - } - size_t index = (handle.ptr - fGPUHeapStart.ptr) / fHandleIncrementSize; - if (index >= fHeap->GetDesc().NumDescriptors) { - return false; - } - SkASSERT(handle.ptr == fGPUHeapStart.ptr + index * fHandleIncrementSize); - *indexPtr = index; - return true; + size_t getIndex(const GPUHandle& handle) { + SkASSERT(handle.fHeapID == fUniqueID); + size_t index = (handle.fHandle.ptr - fCPUHeapStart.ptr) / fHandleIncrementSize; + SkASSERT(index < fHeap->GetDesc().NumDescriptors); + SkASSERT(handle.fHandle.ptr == fCPUHeapStart.ptr + index * fHandleIncrementSize); + return index; } protected: GrD3DDescriptorHeap(const gr_cp&, unsigned int handleIncrementSize); + static uint32_t GenID() { + static std::atomic nextID{1}; + uint32_t id; + do { + id = nextID++; + } while (id == SK_InvalidUniqueID); + return id; + } + gr_cp fHeap; size_t fHandleIncrementSize; D3D12_CPU_DESCRIPTOR_HANDLE fCPUHeapStart; D3D12_GPU_DESCRIPTOR_HANDLE fGPUHeapStart; + uint32_t fUniqueID; }; #endif diff --git a/src/gpu/d3d/GrD3DDescriptorTableManager.cpp b/src/gpu/d3d/GrD3DDescriptorTableManager.cpp new file mode 100644 index 0000000000000..7bbb95f2450f8 --- /dev/null +++ b/src/gpu/d3d/GrD3DDescriptorTableManager.cpp @@ -0,0 +1,150 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/gpu/d3d/GrD3DDescriptorTableManager.h" + +#include "src/gpu/d3d/GrD3DGpu.h" + +GrD3DDescriptorTableManager::GrD3DDescriptorTableManager(GrD3DGpu* gpu) + : fCBVSRVDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV) + , fSamplerDescriptorPool(gpu, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER) {} + +std::unique_ptr + GrD3DDescriptorTableManager::createShaderOrConstantResourceTable(GrD3DGpu* gpu, + unsigned int size) { + std::unique_ptr table = fCBVSRVDescriptorPool.allocateTable(gpu, size); + this->setHeaps(gpu); + return table; +} + +std::unique_ptr GrD3DDescriptorTableManager::createSamplerTable( + GrD3DGpu* gpu, unsigned int size) { + std::unique_ptr table = fSamplerDescriptorPool.allocateTable(gpu, size); + this->setHeaps(gpu); + return table; +} + +void GrD3DDescriptorTableManager::setHeaps(GrD3DGpu* gpu) { + sk_sp& currentCBVSRVHeap = fCBVSRVDescriptorPool.currentDescriptorHeap(); + sk_sp& currentSamplerHeap = fSamplerDescriptorPool.currentDescriptorHeap(); + GrD3DDirectCommandList* commandList = gpu->currentCommandList(); + commandList->setDescriptorHeaps(currentCBVSRVHeap, + currentCBVSRVHeap->d3dDescriptorHeap(), + currentSamplerHeap, + currentSamplerHeap->d3dDescriptorHeap()); +} + +void GrD3DDescriptorTableManager::prepForSubmit(GrD3DGpu* gpu) { + fCBVSRVDescriptorPool.prepForSubmit(gpu); + fSamplerDescriptorPool.prepForSubmit(gpu); +} + +void GrD3DDescriptorTableManager::recycle(Heap* heap) { + // wrap the heap in an sk_sp and take ownership of it + sk_sp wrappedHeap(heap); + + SkASSERT(heap); + switch (heap->type()) { + case D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV: + fCBVSRVDescriptorPool.recycle(std::move(wrappedHeap)); + break; + case D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER: + fSamplerDescriptorPool.recycle(std::move(wrappedHeap)); + break; + default: + SkUNREACHABLE; + } +} + +//////////////////////////////////////////////////////////////////////////////////////////////// + +sk_sp GrD3DDescriptorTableManager::Heap::Make( + GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE type, unsigned int descriptorCount) { + std::unique_ptr heap = + GrD3DDescriptorHeap::Make(gpu, type, descriptorCount, + D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE); + if (!heap) { + return nullptr; + } + + return sk_sp< GrD3DDescriptorTableManager::Heap>(new Heap(gpu, heap, type, descriptorCount)); +} + +std::unique_ptr GrD3DDescriptorTableManager::Heap::allocateTable( + unsigned int count) { + SkASSERT(fDescriptorCount - fNextAvailable >= count); + unsigned int startIndex = fNextAvailable; + fNextAvailable += count; + return std::unique_ptr( + new GrD3DDescriptorTable(fHeap->getCPUHandle(startIndex).fHandle, + fHeap->getGPUHandle(startIndex).fHandle, fType)); +} + +void GrD3DDescriptorTableManager::Heap::onRecycle() const { + fGpu->resourceProvider().descriptorTableMgr()->recycle(const_cast(this)); +} + +//////////////////////////////////////////////////////////////////////////////////////////////// + +GrD3DDescriptorTableManager::HeapPool::HeapPool(GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE heapType) + : fHeapType(heapType) + , fCurrentHeapDescriptorCount(kInitialHeapDescriptorCount) { + sk_sp heap = Heap::Make(gpu, fHeapType, fCurrentHeapDescriptorCount); + fDescriptorHeaps.push_back(heap); +} + +std::unique_ptr GrD3DDescriptorTableManager::HeapPool::allocateTable( + GrD3DGpu* gpu, unsigned int count) { + // In back-to-front order, iterate through heaps until we find one we can allocate from. + // Any heap we can't allocate from gets removed from the list. + // If it was already used, it will have been added to the commandlist, + // and then later recycled back to us. + while (fDescriptorHeaps.size() > 0) { + if (fDescriptorHeaps[fDescriptorHeaps.size() - 1]->canAllocate(count)) { + return fDescriptorHeaps[fDescriptorHeaps.size() - 1]->allocateTable(count); + } + // No space in current heap, pop off list + fDescriptorHeaps.pop_back(); + } + + // Out of available heaps, need to allocate a new one + fCurrentHeapDescriptorCount = std::min(2*fCurrentHeapDescriptorCount, 2048u); + sk_sp heap = + GrD3DDescriptorTableManager::Heap::Make(gpu, fHeapType, fCurrentHeapDescriptorCount); + fDescriptorHeaps.push_back(heap); + return fDescriptorHeaps[fDescriptorHeaps.size() - 1]->allocateTable(count); +} + +sk_sp& + GrD3DDescriptorTableManager::HeapPool::currentDescriptorHeap() { + SkASSERT(fDescriptorHeaps.size() > 0); + return fDescriptorHeaps[fDescriptorHeaps.size() - 1]; +} + +void GrD3DDescriptorTableManager::HeapPool::prepForSubmit(GrD3DGpu* gpu) { + // Pop off the current descriptor heap + if (fDescriptorHeaps[fDescriptorHeaps.size() - 1]->used()) { + fDescriptorHeaps.pop_back(); + } + + if (fDescriptorHeaps.size() == 0) { + fCurrentHeapDescriptorCount = std::min(fCurrentHeapDescriptorCount, 2048u); + sk_sp heap = + GrD3DDescriptorTableManager::Heap::Make(gpu, fHeapType, fCurrentHeapDescriptorCount); + fDescriptorHeaps.push_back(heap); + } +} + +void GrD3DDescriptorTableManager::HeapPool::recycle(sk_sp heap) { + SkASSERT(heap); + // only add heaps back if they match our current size + // this purges any smaller heaps we no longer need + if (heap->descriptorCount() == fCurrentHeapDescriptorCount) { + heap->reset(); + fDescriptorHeaps.push_back(heap); + } +} diff --git a/src/gpu/d3d/GrD3DDescriptorTableManager.h b/src/gpu/d3d/GrD3DDescriptorTableManager.h new file mode 100644 index 0000000000000..295b8680afc6a --- /dev/null +++ b/src/gpu/d3d/GrD3DDescriptorTableManager.h @@ -0,0 +1,123 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrD3DGpuDescriptorTableManager_DEFINED +#define GrD3DGpuDescriptorTableManager_DEFINED + +#include "src/gpu/d3d/GrD3DDescriptorHeap.h" + +class GrD3DCommandList; +class GrD3DDirectCommandList; +class GrD3DGpu; + +class GrD3DDescriptorTable { +public: + GrD3DDescriptorTable(D3D12_CPU_DESCRIPTOR_HANDLE baseCPU, D3D12_GPU_DESCRIPTOR_HANDLE baseGPU, + D3D12_DESCRIPTOR_HEAP_TYPE type) + : fDescriptorTableCpuStart(baseCPU) + , fDescriptorTableGpuStart(baseGPU) + , fType(type) {} + + const D3D12_CPU_DESCRIPTOR_HANDLE* baseCpuDescriptorPtr() { + return &fDescriptorTableCpuStart; + } + + const D3D12_GPU_DESCRIPTOR_HANDLE baseGpuDescriptor() { + return fDescriptorTableGpuStart; + } + + D3D12_DESCRIPTOR_HEAP_TYPE type() const { return fType; } + +private: + D3D12_CPU_DESCRIPTOR_HANDLE fDescriptorTableCpuStart; + D3D12_GPU_DESCRIPTOR_HANDLE fDescriptorTableGpuStart; + D3D12_DESCRIPTOR_HEAP_TYPE fType; +}; + +class GrD3DDescriptorTableManager { +public: + GrD3DDescriptorTableManager(GrD3DGpu*); + + std::unique_ptr createShaderOrConstantResourceTable(GrD3DGpu*, + unsigned int count); + std::unique_ptr createSamplerTable(GrD3DGpu*, unsigned int count); + + void prepForSubmit(GrD3DGpu* gpu); + +private: + class Heap : public GrRecycledResource { + public: + static sk_sp Make(GrD3DGpu* gpu, D3D12_DESCRIPTOR_HEAP_TYPE type, + unsigned int numDescriptors); + + std::unique_ptr allocateTable(unsigned int count); + bool canAllocate(unsigned int count) const { + return (fDescriptorCount - fNextAvailable) >= count; + } + ID3D12DescriptorHeap* d3dDescriptorHeap() const { return fHeap->descriptorHeap(); } + D3D12_DESCRIPTOR_HEAP_TYPE type() const { return fType; } + unsigned int descriptorCount() { return fDescriptorCount; } + bool used() { return fNextAvailable > 0; } + + void reset() { + fNextAvailable = 0; + } + + private: + Heap(GrD3DGpu* gpu, std::unique_ptr& heap, + D3D12_DESCRIPTOR_HEAP_TYPE type, unsigned int descriptorCount) + : INHERITED() + , fGpu(gpu) + , fHeap(std::move(heap)) + , fType(type) + , fDescriptorCount(descriptorCount) + , fNextAvailable(0) { + } + + void freeGPUData() const override {} + void onRecycle() const override; + +#ifdef SK_TRACE_MANAGED_RESOURCES + void dumpInfo() const override { + SkDebugf("GrD3DDescriptorTable::Heap: %d (%d refs)\n", fHeap.get(), this->getRefCnt()); + } +#endif + + GrD3DGpu* fGpu; + std::unique_ptr fHeap; + D3D12_DESCRIPTOR_HEAP_TYPE fType; + unsigned int fDescriptorCount; + unsigned int fNextAvailable; + + typedef GrRecycledResource INHERITED; + }; + + class HeapPool { + public: + HeapPool(GrD3DGpu*, D3D12_DESCRIPTOR_HEAP_TYPE); + + std::unique_ptr allocateTable(GrD3DGpu*, unsigned int count); + void recycle(sk_sp); + sk_sp& currentDescriptorHeap(); + void prepForSubmit(GrD3DGpu* gpu); + + private: + static constexpr int kInitialHeapDescriptorCount = 256; + + std::vector> fDescriptorHeaps; + D3D12_DESCRIPTOR_HEAP_TYPE fHeapType; + unsigned int fCurrentHeapDescriptorCount; + }; + + void setHeaps(GrD3DGpu*); + void recycle(Heap*); + + HeapPool fCBVSRVDescriptorPool; + HeapPool fSamplerDescriptorPool; +}; + +#endif diff --git a/src/gpu/d3d/GrD3DGpu.cpp b/src/gpu/d3d/GrD3DGpu.cpp index 7a50f01008ff2..e555c00fbfc63 100644 --- a/src/gpu/d3d/GrD3DGpu.cpp +++ b/src/gpu/d3d/GrD3DGpu.cpp @@ -11,11 +11,13 @@ #include "include/gpu/d3d/GrD3DBackendContext.h" #include "src/core/SkConvertPixels.h" #include "src/core/SkMipMap.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrDataUtils.h" #include "src/gpu/GrTexturePriv.h" #include "src/gpu/d3d/GrD3DBuffer.h" #include "src/gpu/d3d/GrD3DCaps.h" #include "src/gpu/d3d/GrD3DOpsRenderPass.h" +#include "src/gpu/d3d/GrD3DSemaphore.h" #include "src/gpu/d3d/GrD3DStencilAttachment.h" #include "src/gpu/d3d/GrD3DTexture.h" #include "src/gpu/d3d/GrD3DTextureRenderTarget.h" @@ -54,9 +56,8 @@ GrD3DGpu::GrD3DGpu(GrContext* context, const GrContextOptions& contextOptions, SkASSERT(fCurrentDirectCommandList); SkASSERT(fCurrentFenceValue == 0); - SkDEBUGCODE(HRESULT hr = ) fDevice->CreateFence(fCurrentFenceValue, D3D12_FENCE_FLAG_NONE, - IID_PPV_ARGS(&fFence)); - SkASSERT(SUCCEEDED(hr)); + GR_D3D_CALL_ERRCHECK(fDevice->CreateFence(fCurrentFenceValue, D3D12_FENCE_FLAG_NONE, + IID_PPV_ARGS(&fFence))); #if GR_TEST_UTILS HRESULT getAnalysis = DXGIGetDebugInterface1(0, IID_PPV_ARGS(&fGraphicsAnalysis)); @@ -84,12 +85,14 @@ void GrD3DGpu::destroyResources() { // We used a placement new for each object in fOutstandingCommandLists, so we're responsible // for calling the destructor on each of them as well. while (!fOutstandingCommandLists.empty()) { - OutstandingCommandList* list = (OutstandingCommandList*)fOutstandingCommandLists.back(); + OutstandingCommandList* list = (OutstandingCommandList*)fOutstandingCommandLists.front(); SkASSERT(list->fFenceValue <= fenceValue); // No reason to recycle the command lists since we are destroying all resources anyways. list->~OutstandingCommandList(); - fOutstandingCommandLists.pop_back(); + fOutstandingCommandLists.pop_front(); } + + fResourceProvider.destroyResources(); } GrOpsRenderPass* GrD3DGpu::getOpsRenderPass( @@ -124,11 +127,13 @@ bool GrD3DGpu::submitDirectCommandList(SyncQueue sync) { return true; } - new (fOutstandingCommandLists.push_back()) OutstandingCommandList( - std::move(fCurrentDirectCommandList), ++fCurrentFenceValue); + // We just submitted the command list so make sure all GrD3DPipelineState's mark their cached + // uniform data as dirty. + fResourceProvider.markPipelineStateUniformsDirty(); - SkDEBUGCODE(HRESULT hr = ) fQueue->Signal(fFence.get(), fCurrentFenceValue); - SkASSERT(SUCCEEDED(hr)); + GrFence fence = this->insertFence(); + new (fOutstandingCommandLists.push_back()) OutstandingCommandList( + std::move(fCurrentDirectCommandList), fence); if (sync == SyncQueue::kForce) { this->waitForQueueCompletion(); @@ -153,15 +158,14 @@ void GrD3DGpu::checkForFinishedCommandLists() { // value is less than the last signaled value. If so we pop it off and move onto the next. // Repeat till we find a command list that has not finished yet (and all others afterwards are // also guaranteed to not have finished). - SkDeque::F2BIter iter(fOutstandingCommandLists); - const OutstandingCommandList* curList = (const OutstandingCommandList*)iter.next(); - while (curList && curList->fFenceValue <= currentFenceValue) { - curList = (const OutstandingCommandList*)iter.next(); - OutstandingCommandList* front = (OutstandingCommandList*)fOutstandingCommandLists.front(); - fResourceProvider.recycleDirectCommandList(std::move(front->fCommandList)); + OutstandingCommandList* front = (OutstandingCommandList*)fOutstandingCommandLists.front(); + while (front && front->fFenceValue <= currentFenceValue) { + std::unique_ptr currList(std::move(front->fCommandList)); // Since we used placement new we are responsible for calling the destructor manually. front->~OutstandingCommandList(); fOutstandingCommandLists.pop_front(); + fResourceProvider.recycleDirectCommandList(std::move(currList)); + front = (OutstandingCommandList*)fOutstandingCommandLists.front(); } } @@ -170,8 +174,7 @@ void GrD3DGpu::waitForQueueCompletion() { HANDLE fenceEvent; fenceEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr); SkASSERT(fenceEvent); - SkDEBUGCODE(HRESULT hr = ) fFence->SetEventOnCompletion(fCurrentFenceValue, fenceEvent); - SkASSERT(SUCCEEDED(hr)); + GR_D3D_CALL_ERRCHECK(fFence->SetEventOnCompletion(fCurrentFenceValue, fenceEvent)); WaitForSingleObject(fenceEvent, INFINITE); CloseHandle(fenceEvent); } @@ -184,6 +187,29 @@ void GrD3DGpu::submit(GrOpsRenderPass* renderPass) { fCachedOpsRenderPass.reset(); } +void GrD3DGpu::addFinishedProc(GrGpuFinishedProc finishedProc, + GrGpuFinishedContext finishedContext) { + SkASSERT(finishedProc); + sk_sp finishedCallback( + new GrRefCntedCallback(finishedProc, finishedContext)); + this->addFinishedCallback(std::move(finishedCallback)); +} + +void GrD3DGpu::addFinishedCallback(sk_sp finishedCallback) { + SkASSERT(finishedCallback); + // Besides the current command list, we also add the finishedCallback to the newest outstanding + // command list. Our contract for calling the proc is that all previous submitted command lists + // have finished when we call it. However, if our current command list has no work when it is + // flushed it will drop its ref to the callback immediately. But the previous work may not have + // finished. It is safe to only add the proc to the newest outstanding commandlist cause that + // must finish after all previously submitted command lists. + OutstandingCommandList* back = (OutstandingCommandList*)fOutstandingCommandLists.back(); + if (back) { + back->fCommandList->addFinishedCallback(finishedCallback); + } + fCurrentDirectCommandList->addFinishedCallback(std::move(finishedCallback)); +} + void GrD3DGpu::querySampleLocations(GrRenderTarget* rt, SkTArray* sampleLocations) { // TODO } @@ -565,14 +591,6 @@ bool GrD3DGpu::uploadToTexture(GrD3DTexture* tex, int left, int top, int width, return true; } -void GrD3DGpu::clear(const GrScissorState& scissor, const SkPMColor4f& color, GrRenderTarget* rt) { - GrD3DRenderTarget* d3dRT = static_cast(rt); - - d3dRT->setResourceState(this, D3D12_RESOURCE_STATE_RENDER_TARGET); - - fCurrentDirectCommandList->clearRenderTargetView(d3dRT, color, scissor); -} - static bool check_resource_info(const GrD3DTextureResourceInfo& info) { if (!info.fResource.get()) { return false; @@ -888,10 +906,132 @@ GrBackendTexture GrD3DGpu::onCreateBackendTexture(SkISize dimensions, return GrBackendTexture(dimensions.width(), dimensions.height(), info); } +bool copy_src_data(GrD3DGpu* gpu, char* mapPtr, DXGI_FORMAT dxgiFormat, + D3D12_PLACED_SUBRESOURCE_FOOTPRINT* placedFootprints, + const SkPixmap srcData[], int numMipLevels) { + SkASSERT(srcData && numMipLevels); + SkASSERT(!GrDxgiFormatIsCompressed(dxgiFormat)); + SkASSERT(mapPtr); + + size_t bytesPerPixel = gpu->d3dCaps().bytesPerPixel(dxgiFormat); + + for (int currentMipLevel = 0; currentMipLevel < numMipLevels; currentMipLevel++) { + const size_t trimRowBytes = srcData[currentMipLevel].width() * bytesPerPixel; + + // copy data into the buffer, skipping any trailing bytes + char* dst = mapPtr + placedFootprints[currentMipLevel].Offset; + SkRectMemcpy(dst, placedFootprints[currentMipLevel].Footprint.RowPitch, + srcData[currentMipLevel].addr(), srcData[currentMipLevel].rowBytes(), + trimRowBytes, srcData[currentMipLevel].height()); + } + + return true; +} + +bool copy_color_data(const GrD3DCaps& caps, char* mapPtr, DXGI_FORMAT dxgiFormat, + SkISize dimensions, D3D12_PLACED_SUBRESOURCE_FOOTPRINT* placedFootprints, + SkColor4f color) { + auto colorType = caps.getFormatColorType(dxgiFormat); + if (colorType == GrColorType::kUnknown) { + return false; + } + GrImageInfo ii(colorType, kUnpremul_SkAlphaType, nullptr, dimensions); + if (!GrClearImage(ii, mapPtr, placedFootprints[0].Footprint.RowPitch, color)) { + return false; + } + + return true; +} + bool GrD3DGpu::onUpdateBackendTexture(const GrBackendTexture& backendTexture, sk_sp finishedCallback, const BackendTextureData* data) { - // TODO: handle finishedCallback and data upload + GrD3DTextureResourceInfo info; + SkAssertResult(backendTexture.getD3DTextureResourceInfo(&info)); + + sk_sp state = backendTexture.getGrD3DResourceState(); + SkASSERT(state); + sk_sp texture = + GrD3DTexture::MakeWrappedTexture(this, backendTexture.dimensions(), + GrWrapCacheable::kNo, + kRW_GrIOType, info, std::move(state)); + if (!texture) { + return false; + } + + GrD3DDirectCommandList* cmdList = this->currentCommandList(); + if (!cmdList) { + return false; + } + + texture->setResourceState(this, D3D12_RESOURCE_STATE_COPY_DEST); + + ID3D12Resource* d3dResource = texture->d3dResource(); + SkASSERT(d3dResource); + D3D12_RESOURCE_DESC desc = d3dResource->GetDesc(); + unsigned int mipLevelCount = 1; + if (backendTexture.fMipMapped == GrMipMapped::kYes) { + mipLevelCount = SkMipMap::ComputeLevelCount(backendTexture.dimensions().width(), + backendTexture.dimensions().height()) + 1; + } + SkASSERT(mipLevelCount == info.fLevelCount); + SkAutoTMalloc placedFootprints(mipLevelCount); + UINT64 combinedBufferSize; + fDevice->GetCopyableFootprints(&desc, 0, mipLevelCount, 0, placedFootprints.get(), + nullptr, nullptr, &combinedBufferSize); + SkASSERT(combinedBufferSize); + if (data->type() == BackendTextureData::Type::kColor && + !GrDxgiFormatIsCompressed(info.fFormat) && mipLevelCount > 1) { + // For a single uncompressed color, we reuse the same top-level buffer area for all levels. + combinedBufferSize = + placedFootprints[0].Footprint.RowPitch * placedFootprints[0].Footprint.Height; + for (unsigned int i = 1; i < mipLevelCount; ++i) { + placedFootprints[i].Offset = 0; + placedFootprints[i].Footprint.RowPitch = placedFootprints[0].Footprint.RowPitch; + } + } + + // TODO: do this until we have slices of buttery buffers + sk_sp transferBuffer = this->createBuffer(combinedBufferSize, + GrGpuBufferType::kXferCpuToGpu, + kDynamic_GrAccessPattern); + if (!transferBuffer) { + return false; + } + char* bufferData = (char*)transferBuffer->map(); + SkASSERT(bufferData); + + bool result; + if (data->type() == BackendTextureData::Type::kPixmaps) { + result = copy_src_data(this, bufferData, info.fFormat, placedFootprints.get(), + data->pixmaps(), info.fLevelCount); + } else if (data->type() == BackendTextureData::Type::kCompressed) { + memcpy(bufferData, data->compressedData(), data->compressedSize()); + result = true; + } else { + SkASSERT(data->type() == BackendTextureData::Type::kColor); + SkImage::CompressionType compression = + GrBackendFormatToCompressionType(backendTexture.getBackendFormat()); + if (SkImage::CompressionType::kNone == compression) { + result = copy_color_data(this->d3dCaps(), bufferData, info.fFormat, + backendTexture.dimensions(), + placedFootprints, data->color()); + } else { + GrFillInCompressedData(compression, backendTexture.dimensions(), + backendTexture.fMipMapped, bufferData, data->color()); + result = true; + } + } + transferBuffer->unmap(); + + GrD3DBuffer* d3dBuffer = static_cast(transferBuffer.get()); + cmdList->copyBufferToTexture(d3dBuffer, texture.get(), mipLevelCount, placedFootprints.get(), + 0, 0); + + if (finishedCallback) { + this->addFinishedCallback(std::move(finishedCallback)); + } + return true; } @@ -1010,9 +1150,11 @@ void GrD3DGpu::addResourceBarriers(sk_sp resource, fCurrentDirectCommandList->resourceBarrier(std::move(resource), numBarriers, barriers); } -void GrD3DGpu::prepareSurfacesForBackendAccessAndExternalIO( - GrSurfaceProxy* proxies[], int numProxies, SkSurface::BackendSurfaceAccess access, - const GrPrepareForExternalIORequests& externalRequests) { +void GrD3DGpu::prepareSurfacesForBackendAccessAndStateUpdates( + GrSurfaceProxy* proxies[], + int numProxies, + SkSurface::BackendSurfaceAccess access, + const GrBackendSurfaceMutableState* newState) { SkASSERT(numProxies >= 0); SkASSERT(!numProxies || proxies); @@ -1040,3 +1182,41 @@ bool GrD3DGpu::onSubmitToGpu(bool syncCpu) { return this->submitDirectCommandList(SyncQueue::kSkip); } } + +std::unique_ptr SK_WARN_UNUSED_RESULT GrD3DGpu::makeSemaphore(bool) { + return GrD3DSemaphore::Make(this); +} +std::unique_ptr GrD3DGpu::wrapBackendSemaphore( + const GrBackendSemaphore& semaphore, + GrResourceProvider::SemaphoreWrapType, + GrWrapOwnership) { + SkASSERT(this->caps()->semaphoreSupport()); + GrD3DFenceInfo fenceInfo; + if (!semaphore.getD3DFenceInfo(&fenceInfo)) { + return nullptr; + } + return GrD3DSemaphore::MakeWrapped(fenceInfo); +} + +void GrD3DGpu::insertSemaphore(GrSemaphore* semaphore) { + SkASSERT(semaphore); + GrD3DSemaphore* d3dSem = static_cast(semaphore); + // TODO: Do we need to track the lifetime of this? How do we know it's done? + fQueue->Signal(d3dSem->fence(), d3dSem->value()); +} + +void GrD3DGpu::waitSemaphore(GrSemaphore* semaphore) { + SkASSERT(semaphore); + GrD3DSemaphore* d3dSem = static_cast(semaphore); + // TODO: Do we need to track the lifetime of this? + fQueue->Wait(d3dSem->fence(), d3dSem->value()); +} + +GrFence SK_WARN_UNUSED_RESULT GrD3DGpu::insertFence() { + GR_D3D_CALL_ERRCHECK(fQueue->Signal(fFence.get(), ++fCurrentFenceValue)); + return fCurrentFenceValue; +} + +bool GrD3DGpu::waitFence(GrFence fence) { + return (fFence->GetCompletedValue() >= fence); +} diff --git a/src/gpu/d3d/GrD3DGpu.h b/src/gpu/d3d/GrD3DGpu.h index 4100893a527cc..75bcab19d0e67 100644 --- a/src/gpu/d3d/GrD3DGpu.h +++ b/src/gpu/d3d/GrD3DGpu.h @@ -64,6 +64,10 @@ class GrD3DGpu : public GrGpu { void testingOnly_startCapture() override; void testingOnly_endCapture() override; + + void resetShaderCacheForTesting() const override { + fResourceProvider.resetShaderCacheForTesting(); + } #endif GrStencilAttachment* createStencilAttachmentForRenderTarget( @@ -80,30 +84,24 @@ class GrD3DGpu : public GrGpu { int numBarriers, D3D12_RESOURCE_TRANSITION_BARRIER* barriers) const; - GrFence SK_WARN_UNUSED_RESULT insertFence() override { return 0; } - bool waitFence(GrFence) override { return true; } + GrFence SK_WARN_UNUSED_RESULT insertFence() override; + bool waitFence(GrFence) override; void deleteFence(GrFence) const override {} - std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override { - return nullptr; - } + std::unique_ptr SK_WARN_UNUSED_RESULT makeSemaphore(bool isOwned) override; std::unique_ptr wrapBackendSemaphore( const GrBackendSemaphore& semaphore, GrResourceProvider::SemaphoreWrapType wrapType, - GrWrapOwnership ownership) override { - return nullptr; - } - void insertSemaphore(GrSemaphore* semaphore) override {} - void waitSemaphore(GrSemaphore* semaphore) override {} + GrWrapOwnership ownership) override; + void insertSemaphore(GrSemaphore* semaphore) override; + void waitSemaphore(GrSemaphore* semaphore) override; std::unique_ptr prepareTextureForCrossContextUsage(GrTexture*) override { return nullptr; } - void clear(const GrScissorState& scissor, const SkPMColor4f& color, GrRenderTarget*); - void submit(GrOpsRenderPass* renderPass) override; - void checkFinishProcs() override {} + void checkFinishProcs() override { this->checkForFinishedCommandLists(); } SkSL::Compiler* shaderCompiler() const { return fCompiler.get(); @@ -185,15 +183,14 @@ class GrD3DGpu : public GrGpu { void onResolveRenderTarget(GrRenderTarget* target, const SkIRect&, ForExternalIO) override {} void addFinishedProc(GrGpuFinishedProc finishedProc, - GrGpuFinishedContext finishedContext) override { - // TODO: have this actually wait before calling the proc - SkASSERT(finishedProc); - finishedProc(finishedContext); - } - - void prepareSurfacesForBackendAccessAndExternalIO( - GrSurfaceProxy* proxies[], int numProxies, SkSurface::BackendSurfaceAccess access, - const GrPrepareForExternalIORequests& externalRequests) override; + GrGpuFinishedContext finishedContext) override; + void addFinishedCallback(sk_sp finishedCallback); + + void prepareSurfacesForBackendAccessAndStateUpdates( + GrSurfaceProxy* proxies[], + int numProxies, + SkSurface::BackendSurfaceAccess access, + const GrBackendSurfaceMutableState* newState) override; bool onSubmitToGpu(bool syncCpu) override; diff --git a/src/gpu/d3d/GrD3DOpsRenderPass.cpp b/src/gpu/d3d/GrD3DOpsRenderPass.cpp index 1a35c2361d736..baac3d222f245 100644 --- a/src/gpu/d3d/GrD3DOpsRenderPass.cpp +++ b/src/gpu/d3d/GrD3DOpsRenderPass.cpp @@ -8,7 +8,7 @@ #include "src/gpu/d3d/GrD3DOpsRenderPass.h" #include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrFixedClip.h" +#include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrRenderTargetPriv.h" #include "src/gpu/GrStencilSettings.h" @@ -48,10 +48,19 @@ void GrD3DOpsRenderPass::onBegin() { GrD3DRenderTarget* d3dRT = static_cast(fRenderTarget); d3dRT->setResourceState(fGpu, D3D12_RESOURCE_STATE_RENDER_TARGET); fGpu->currentCommandList()->setRenderTarget(d3dRT); - // TODO: set stencil too if (GrLoadOp::kClear == fColorLoadOp) { - fGpu->currentCommandList()->clearRenderTargetView(d3dRT, fClearColor, GrScissorState()); + // Passing in nullptr for the rect clears the entire d3d RT. Is this correct? Does the load + // op respect the logical bounds of a RT? + fGpu->currentCommandList()->clearRenderTargetView(d3dRT, fClearColor, nullptr); + } + + if (auto stencil = d3dRT->renderTargetPriv().getStencilAttachment()) { + GrD3DStencilAttachment* d3dStencil = static_cast(stencil); + d3dStencil->setResourceState(fGpu, D3D12_RESOURCE_STATE_DEPTH_WRITE); + if (fStencilLoadOp == GrLoadOp::kClear) { + fGpu->currentCommandList()->clearDepthStencilView(d3dStencil, 0, nullptr); + } } } @@ -60,6 +69,8 @@ void set_stencil_ref(GrD3DGpu* gpu, const GrProgramInfo& info) { if (!stencilSettings.isDisabled()) { unsigned int stencilRef = 0; if (stencilSettings.isTwoSided()) { + SkASSERT(stencilSettings.postOriginCCWFace(info.origin()).fRef == + stencilSettings.postOriginCWFace(info.origin()).fRef); stencilRef = stencilSettings.postOriginCCWFace(info.origin()).fRef; } else { stencilRef = stencilSettings.singleSidedFace().fRef; @@ -177,6 +188,15 @@ bool GrD3DOpsRenderPass::onBindPipeline(const GrProgramInfo& info, const SkRect& return true; } +void GrD3DOpsRenderPass::onSetScissorRect(const SkIRect& scissor) { + SkIRect combinedScissorRect; + if (!combinedScissorRect.intersect(fCurrentPipelineBounds, scissor)) { + combinedScissorRect = SkIRect::MakeEmpty(); + } + + set_scissor_rects(fGpu, fRenderTarget, fOrigin, combinedScissorRect); +} + void update_resource_state(GrTexture* tex, GrRenderTarget* rt, GrD3DGpu* gpu) { SkASSERT(!tex->isProtected() || (rt->isProtected() && gpu->protectedContext())); GrD3DTexture* d3dTex = static_cast(tex); @@ -202,7 +222,7 @@ bool GrD3DOpsRenderPass::onBindTextures(const GrPrimitiveProcessor& primProc, } // TODO: possibly check for success once we start binding properly - fCurrentPipelineState->setAndBindTextures(primProc, primProcTextures, pipeline); + fCurrentPipelineState->setAndBindTextures(fGpu, primProc, primProcTextures, pipeline); return true; } @@ -238,6 +258,58 @@ void GrD3DOpsRenderPass::onDrawIndexedInstanced(int indexCount, int baseIndex, i fGpu->stats()->incNumDraws(); } +static D3D12_RECT scissor_to_d3d_clear_rect(const GrScissorState& scissor, + const GrSurface* surface, + GrSurfaceOrigin origin) { + D3D12_RECT clearRect; + // Flip rect if necessary + SkIRect d3dRect; + if (!scissor.enabled()) { + d3dRect.setXYWH(0, 0, surface->width(), surface->height()); + } else if (kBottomLeft_GrSurfaceOrigin != origin) { + d3dRect = scissor.rect(); + } else { + d3dRect.setLTRB(scissor.rect().fLeft, surface->height() - scissor.rect().fBottom, + scissor.rect().fRight, surface->height() - scissor.rect().fTop); + } + clearRect.left = d3dRect.fLeft; + clearRect.right = d3dRect.fRight; + clearRect.top = d3dRect.fTop; + clearRect.bottom = d3dRect.fBottom; + return clearRect; +} + void GrD3DOpsRenderPass::onClear(const GrScissorState& scissor, const SkPMColor4f& color) { - fGpu->clear(scissor, color, fRenderTarget); + D3D12_RECT clearRect = scissor_to_d3d_clear_rect(scissor, fRenderTarget, fOrigin); + auto d3dRT = static_cast(fRenderTarget); + SkASSERT(d3dRT->grD3DResourceState()->getResourceState() == D3D12_RESOURCE_STATE_RENDER_TARGET); + fGpu->currentCommandList()->clearRenderTargetView(d3dRT, color, &clearRect); +} + +void GrD3DOpsRenderPass::onClearStencilClip(const GrScissorState& scissor, bool insideStencilMask) { + GrStencilAttachment* sb = fRenderTarget->renderTargetPriv().getStencilAttachment(); + // this should only be called internally when we know we have a + // stencil buffer. + SkASSERT(sb); + int stencilBitCount = sb->bits(); + + // The contract with the callers does not guarantee that we preserve all bits in the stencil + // during this clear. Thus we will clear the entire stencil to the desired value. + + uint8_t stencilColor = 0; + if (insideStencilMask) { + stencilColor = (1 << (stencilBitCount - 1)); + } + + D3D12_RECT clearRect = scissor_to_d3d_clear_rect(scissor, fRenderTarget, fOrigin); + + auto d3dStencil = static_cast(sb); + fGpu->currentCommandList()->clearDepthStencilView(d3dStencil, stencilColor, &clearRect); +} + +void GrD3DOpsRenderPass::inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) { + // If we ever start using copy command lists for doing uploads, then we'll need to make sure + // we submit our main command list before doing the copy here and then start a new main command + // list. + state->doUpload(upload); } diff --git a/src/gpu/d3d/GrD3DOpsRenderPass.h b/src/gpu/d3d/GrD3DOpsRenderPass.h index 51a385e75f743..ed540bd7ed273 100644 --- a/src/gpu/d3d/GrD3DOpsRenderPass.h +++ b/src/gpu/d3d/GrD3DOpsRenderPass.h @@ -22,7 +22,7 @@ class GrD3DOpsRenderPass : public GrOpsRenderPass { ~GrD3DOpsRenderPass() override; - void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override {} + void inlineUpload(GrOpFlushState* state, GrDeferredTextureUploadFn& upload) override; void onExecuteDrawable(std::unique_ptr) override {} @@ -37,7 +37,7 @@ class GrD3DOpsRenderPass : public GrOpsRenderPass { void onBegin() override; bool onBindPipeline(const GrProgramInfo&, const SkRect& drawBounds) override; - void onSetScissorRect(const SkIRect&) override {} + void onSetScissorRect(const SkIRect&) override; bool onBindTextures(const GrPrimitiveProcessor&, const GrSurfaceProxy* const primProcTextures[], const GrPipeline&) override; void onBindBuffers(const GrBuffer* indexBuffer, const GrBuffer* instanceBuffer, @@ -58,7 +58,7 @@ class GrD3DOpsRenderPass : public GrOpsRenderPass { void onClear(const GrScissorState& scissor, const SkPMColor4f& color) override; - void onClearStencilClip(const GrScissorState& scissor, bool insideStencilMask) override {} + void onClearStencilClip(const GrScissorState& scissor, bool insideStencilMask) override; GrD3DGpu* fGpu; @@ -69,6 +69,7 @@ class GrD3DOpsRenderPass : public GrOpsRenderPass { GrLoadOp fColorLoadOp; SkPMColor4f fClearColor; + GrLoadOp fStencilLoadOp; typedef GrOpsRenderPass INHERITED; }; diff --git a/src/gpu/d3d/GrD3DPipelineState.cpp b/src/gpu/d3d/GrD3DPipelineState.cpp index c9db9a4e6b753..c3c464e17fd9f 100644 --- a/src/gpu/d3d/GrD3DPipelineState.cpp +++ b/src/gpu/d3d/GrD3DPipelineState.cpp @@ -47,8 +47,7 @@ void GrD3DPipelineState::setAndBindConstants(GrD3DGpu* gpu, const GrProgramInfo& programInfo) { this->setRenderTargetState(renderTarget, programInfo.origin()); - GrFragmentProcessor::PipelineCoordTransformRange transformRange(programInfo.pipeline()); - fGeometryProcessor->setData(fDataManager, programInfo.primProc(), transformRange); + fGeometryProcessor->setData(fDataManager, programInfo.primProc()); GrFragmentProcessor::CIter fpIter(programInfo.pipeline()); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); for (; fpIter && glslIter; ++fpIter, ++glslIter) { @@ -91,23 +90,25 @@ void GrD3DPipelineState::setRenderTargetState(const GrRenderTarget* rt, GrSurfac } } -void GrD3DPipelineState::setAndBindTextures(const GrPrimitiveProcessor& primProc, +void GrD3DPipelineState::setAndBindTextures(GrD3DGpu* gpu, const GrPrimitiveProcessor& primProc, const GrSurfaceProxy* const primProcTextures[], const GrPipeline& pipeline) { SkASSERT(primProcTextures || !primProc.numTextureSamplers()); - struct SamplerBindings { - GrSamplerState fState; - GrD3DTexture* fTexture; - }; - SkAutoSTMalloc<8, SamplerBindings> samplerBindings(fNumSamplers); - int currTextureBinding = 0; + SkAutoSTMalloc<8, D3D12_CPU_DESCRIPTOR_HANDLE> shaderResourceViews(fNumSamplers); + SkAutoSTMalloc<8, D3D12_CPU_DESCRIPTOR_HANDLE> samplers(fNumSamplers); + SkAutoSTMalloc<8, unsigned int> rangeSizes(fNumSamplers); + unsigned int currTextureBinding = 0; for (int i = 0; i < primProc.numTextureSamplers(); ++i) { SkASSERT(primProcTextures[i]->asTextureProxy()); const auto& sampler = primProc.textureSampler(i); auto texture = static_cast(primProcTextures[i]->peekTexture()); - samplerBindings[currTextureBinding++] = { sampler.samplerState(), texture }; + shaderResourceViews[currTextureBinding] = texture->shaderResourceView(); + samplers[currTextureBinding] = + gpu->resourceProvider().findOrCreateCompatibleSampler(sampler.samplerState()); + gpu->currentCommandList()->addSampledTextureRef(texture); + rangeSizes[currTextureBinding++] = 1; } GrFragmentProcessor::CIter fpIter(pipeline); @@ -115,19 +116,49 @@ void GrD3DPipelineState::setAndBindTextures(const GrPrimitiveProcessor& primProc for (; fpIter && glslIter; ++fpIter, ++glslIter) { for (int i = 0; i < fpIter->numTextureSamplers(); ++i) { const auto& sampler = fpIter->textureSampler(i); - samplerBindings[currTextureBinding++] = - { sampler.samplerState(), static_cast(sampler.peekTexture()) }; + auto texture = static_cast(sampler.peekTexture()); + shaderResourceViews[currTextureBinding] = texture->shaderResourceView(); + samplers[currTextureBinding] = + gpu->resourceProvider().findOrCreateCompatibleSampler(sampler.samplerState()); + gpu->currentCommandList()->addSampledTextureRef(texture); + rangeSizes[currTextureBinding++] = 1; } } SkASSERT(!fpIter && !glslIter); if (GrTexture* dstTexture = pipeline.peekDstTexture()) { - samplerBindings[currTextureBinding++] = { - GrSamplerState::Filter::kNearest, static_cast(dstTexture) }; + auto texture = static_cast(dstTexture); + shaderResourceViews[currTextureBinding] = texture->shaderResourceView(); + samplers[currTextureBinding] = gpu->resourceProvider().findOrCreateCompatibleSampler( + GrSamplerState::Filter::kNearest); + gpu->currentCommandList()->addSampledTextureRef(texture); + rangeSizes[currTextureBinding++] = 1; } - // TODO: bind descriptors SkASSERT(fNumSamplers == currTextureBinding); + + // fill in descriptor tables and bind to root signature + if (fNumSamplers > 0) { + // set up and bind shader resource view table + std::unique_ptr srvTable = + gpu->resourceProvider().createShaderOrConstantResourceTable(fNumSamplers); + gpu->device()->CopyDescriptors(1, srvTable->baseCpuDescriptorPtr(), &fNumSamplers, + fNumSamplers, shaderResourceViews.get(), rangeSizes.get(), + srvTable->type()); + gpu->currentCommandList()->setGraphicsRootDescriptorTable( + static_cast(GrD3DRootSignature::ParamIndex::kTextureDescriptorTable), + srvTable->baseGpuDescriptor()); + + // set up and bind sampler table + std::unique_ptr samplerTable = + gpu->resourceProvider().createSamplerTable(fNumSamplers); + gpu->device()->CopyDescriptors(1, samplerTable->baseCpuDescriptorPtr(), &fNumSamplers, + fNumSamplers, samplers.get(), rangeSizes.get(), + samplerTable->type()); + gpu->currentCommandList()->setGraphicsRootDescriptorTable( + static_cast(GrD3DRootSignature::ParamIndex::kSamplerDescriptorTable), + samplerTable->baseGpuDescriptor()); + } } void GrD3DPipelineState::bindBuffers(GrD3DGpu* gpu, const GrBuffer* indexBuffer, diff --git a/src/gpu/d3d/GrD3DPipelineState.h b/src/gpu/d3d/GrD3DPipelineState.h index e6aa71be8a3ed..0925571d950d9 100644 --- a/src/gpu/d3d/GrD3DPipelineState.h +++ b/src/gpu/d3d/GrD3DPipelineState.h @@ -54,13 +54,18 @@ class GrD3DPipelineState : public GrManagedResource { void setAndBindConstants(GrD3DGpu*, const GrRenderTarget*, const GrProgramInfo&); - void setAndBindTextures(const GrPrimitiveProcessor& primProc, + void setAndBindTextures(GrD3DGpu*, const GrPrimitiveProcessor& primProc, const GrSurfaceProxy* const primProcTextures[], const GrPipeline& pipeline); void bindBuffers(GrD3DGpu*, const GrBuffer* indexBuffer, const GrBuffer* instanceBuffer, const GrBuffer* vertexBuffer, GrD3DDirectCommandList* commandList); + // We can only cache non dirty uniform values until we submit a command list. After that, the + // next frame will get a completely different uniform buffer and/or offset into the buffer. Thus + // we need a way to mark them all as dirty during submit. + void markUniformsDirty() { fDataManager.markDirty(); } + private: /** * We use the RT's size and origin to adjust from Skia device space to d3d normalized device @@ -117,7 +122,7 @@ class GrD3DPipelineState : public GrManagedResource { GrD3DPipelineStateDataManager fDataManager; - int fNumSamplers; + unsigned int fNumSamplers; size_t fVertexStride; size_t fInstanceStride; }; diff --git a/src/gpu/d3d/GrD3DPipelineStateBuilder.cpp b/src/gpu/d3d/GrD3DPipelineStateBuilder.cpp index f57935eee2daf..5c2b91f509d97 100644 --- a/src/gpu/d3d/GrD3DPipelineStateBuilder.cpp +++ b/src/gpu/d3d/GrD3DPipelineStateBuilder.cpp @@ -14,6 +14,7 @@ #include "src/core/SkTraceEvent.h" #include "src/gpu/GrAutoLocaleSetter.h" #include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrPersistentCacheUtils.h" #include "src/gpu/GrShaderCaps.h" #include "src/gpu/GrShaderUtils.h" #include "src/gpu/GrStencilSettings.h" @@ -24,8 +25,6 @@ #include -typedef size_t shader_size; - sk_sp GrD3DPipelineStateBuilder::MakePipelineState( GrD3DGpu* gpu, GrRenderTarget* renderTarget, @@ -66,27 +65,9 @@ void GrD3DPipelineStateBuilder::finalizeFragmentSecondaryColor(GrShaderVar& outp outputColor.addLayoutQualifier("location = 0, index = 1"); } -void GrD3DPipelineStateBuilder::compileD3DProgram(SkSL::Program::Kind kind, - const SkSL::String& sksl, - const SkSL::Program::Settings& settings, - ID3DBlob** shader, - SkSL::Program::Inputs* outInputs) { - auto errorHandler = fGpu->getContext()->priv().getShaderErrorHandler(); - std::unique_ptr program = fGpu->shaderCompiler()->convertProgram( - kind, sksl, settings); - if (!program) { - errorHandler->compileError(sksl.c_str(), - fGpu->shaderCompiler()->errorText().c_str()); - return; - } - *outInputs = program->fInputs; - SkSL::String outHLSL; - if (!fGpu->shaderCompiler()->toHLSL(*program, &outHLSL)) { - errorHandler->compileError(sksl.c_str(), - fGpu->shaderCompiler()->errorText().c_str()); - return; - } - +static gr_cp GrCompileHLSLShader(GrD3DGpu* gpu, + const SkSL::String& hlsl, + SkSL::Program::Kind kind) { const char* compileTarget = nullptr; switch (kind) { case SkSL::Program::kVertex_Kind: @@ -110,14 +91,66 @@ void GrD3DPipelineStateBuilder::compileD3DProgram(SkSL::Program::Kind kind, // SPRIV-cross does matrix multiplication expecting row major matrices compileFlags |= D3DCOMPILE_PACK_MATRIX_ROW_MAJOR; - // TODO: D3D Static Function + gr_cp shader; gr_cp errors; - HRESULT hr = D3DCompile(outHLSL.c_str(), outHLSL.length(), nullptr, nullptr, nullptr, "main", - compileTarget, compileFlags, 0, shader, &errors); + HRESULT hr = D3DCompile(hlsl.c_str(), hlsl.length(), nullptr, nullptr, nullptr, "main", + compileTarget, compileFlags, 0, &shader, &errors); if (!SUCCEEDED(hr)) { - errorHandler->compileError(outHLSL.c_str(), - reinterpret_cast(errors->GetBufferPointer())); + gpu->getContext()->priv().getShaderErrorHandler()->compileError( + hlsl.c_str(), reinterpret_cast(errors->GetBufferPointer())); } + return shader; +} + +bool GrD3DPipelineStateBuilder::loadHLSLFromCache(SkReadBuffer* reader, gr_cp shaders[]) { + + SkSL::String hlsl[kGrShaderTypeCount]; + SkSL::Program::Inputs inputs[kGrShaderTypeCount]; + + if (!GrPersistentCacheUtils::UnpackCachedShaders(reader, hlsl, inputs, kGrShaderTypeCount)) { + return false; + } + + auto compile = [&](SkSL::Program::Kind kind, GrShaderType shaderType) { + if (inputs[shaderType].fRTHeight) { + this->addRTHeightUniform(SKSL_RTHEIGHT_NAME); + } + shaders[shaderType] = GrCompileHLSLShader(fGpu, hlsl[shaderType], kind); + return shaders[shaderType].get(); + }; + + return compile(SkSL::Program::kVertex_Kind, kVertex_GrShaderType) && + compile(SkSL::Program::kFragment_Kind, kFragment_GrShaderType) && + (hlsl[kGeometry_GrShaderType].empty() || + compile(SkSL::Program::kGeometry_Kind, kGeometry_GrShaderType)); +} + +gr_cp GrD3DPipelineStateBuilder::compileD3DProgram( + SkSL::Program::Kind kind, + const SkSL::String& sksl, + const SkSL::Program::Settings& settings, + SkSL::Program::Inputs* outInputs, + SkSL::String* outHLSL) { + auto errorHandler = fGpu->getContext()->priv().getShaderErrorHandler(); + std::unique_ptr program = fGpu->shaderCompiler()->convertProgram( + kind, sksl, settings); + if (!program) { + errorHandler->compileError(sksl.c_str(), + fGpu->shaderCompiler()->errorText().c_str()); + return gr_cp(); + } + *outInputs = program->fInputs; + if (!fGpu->shaderCompiler()->toHLSL(*program, outHLSL)) { + errorHandler->compileError(sksl.c_str(), + fGpu->shaderCompiler()->errorText().c_str()); + return gr_cp(); + } + + if (program->fInputs.fRTHeight) { + this->addRTHeightUniform(SKSL_RTHEIGHT_NAME); + } + + return GrCompileHLSLShader(fGpu, *outHLSL, kind); } static DXGI_FORMAT attrib_type_to_format(GrVertexAttribType type) { @@ -212,7 +245,7 @@ static void setup_vertex_input_layout(const GrPrimitiveProcessor& primProc, inputElements[currentAttrib] = { "TEXCOORD", currentAttrib, attrib_type_to_format(attrib.cpuType()), instanceSlot, instanceAttributeOffset, - D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }; + D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA, 1 }; instanceAttributeOffset += attrib.sizeAlign4(); currentAttrib++; } @@ -403,7 +436,7 @@ static void fill_in_depth_stencil_state(const GrProgramInfo& programInfo, if (!stencilSettings.isDisabled()) { if (stencilSettings.isTwoSided()) { const auto& frontFace = stencilSettings.postOriginCCWFace(origin); - const auto& backFace = stencilSettings.postOriginCCWFace(origin); + const auto& backFace = stencilSettings.postOriginCWFace(origin); SkASSERT(frontFace.fTestMask == backFace.fTestMask); SkASSERT(frontFace.fWriteMask == backFace.fWriteMask); @@ -414,7 +447,7 @@ static void fill_in_depth_stencil_state(const GrProgramInfo& programInfo, setup_stencilop_desc(&dsDesc->BackFace, backFace); } else { dsDesc->StencilReadMask = stencilSettings.singleSidedFace().fTestMask; - dsDesc->StencilWriteMask = stencilSettings.singleSidedFace().fTestMask; + dsDesc->StencilWriteMask = stencilSettings.singleSidedFace().fWriteMask; setup_stencilop_desc(&dsDesc->FrontFace, stencilSettings.singleSidedFace()); dsDesc->BackFace = dsDesc->FrontFace; } @@ -501,6 +534,9 @@ gr_cp create_pipeline_state( return pipelineState; } +static constexpr SkFourByteTag kHLSL_Tag = SkSetFourByteTag('H', 'L', 'S', 'L'); +static constexpr SkFourByteTag kSKSL_Tag = SkSetFourByteTag('S', 'K', 'S', 'L'); + sk_sp GrD3DPipelineStateBuilder::finalize() { TRACE_EVENT0("skia.gpu", TRACE_FUNC); @@ -516,33 +552,86 @@ sk_sp GrD3DPipelineStateBuilder::finalize() { SkSL::Program::Settings settings; settings.fCaps = this->caps()->shaderCaps(); settings.fFlipY = this->origin() != kTopLeft_GrSurfaceOrigin; + settings.fInverseW = true; settings.fSharpenTextures = this->gpu()->getContext()->priv().options().fSharpenMipmappedTextures; settings.fRTHeightOffset = fUniformHandler.getRTHeightOffset(); settings.fRTHeightBinding = 0; settings.fRTHeightSet = 0; - gr_cp vertexShader; - gr_cp geometryShader; - gr_cp pixelShader; - SkSL::Program::Inputs vertInputs, fragInputs, geomInputs; - - this->compileD3DProgram(SkSL::Program::kVertex_Kind, fVS.fCompilerString, settings, - &vertexShader, &vertInputs); - this->compileD3DProgram(SkSL::Program::kFragment_Kind, fFS.fCompilerString, settings, - &pixelShader, &fragInputs); - - if (!vertexShader.get() || !pixelShader.get()) { - return nullptr; + sk_sp cached; + SkReadBuffer reader; + SkFourByteTag shaderType = 0; + auto persistentCache = fGpu->getContext()->priv().getPersistentCache(); + if (persistentCache) { + // Shear off the D3D-specific portion of the Desc to get the persistent key. We only cache + // shader code, not entire pipelines. + sk_sp key = + SkData::MakeWithoutCopy(this->desc().asKey(), this->desc().initialKeyLength()); + cached = persistentCache->load(*key); + if (cached) { + reader.setMemory(cached->data(), cached->size()); + shaderType = GrPersistentCacheUtils::GetType(&reader); + } } const GrPrimitiveProcessor& primProc = this->primitiveProcessor(); - if (primProc.willUseGeoShader()) { - this->compileD3DProgram(SkSL::Program::kGeometry_Kind, fGS.fCompilerString, settings, - &geometryShader, &geomInputs); - if (!geometryShader.get()) { + gr_cp shaders[kGrShaderTypeCount]; + + if (kHLSL_Tag == shaderType && this->loadHLSLFromCache(&reader, shaders)) { + // We successfully loaded and compiled HLSL + } else { + SkSL::Program::Inputs inputs[kGrShaderTypeCount]; + SkSL::String* sksl[kGrShaderTypeCount] = { + &fVS.fCompilerString, + &fGS.fCompilerString, + &fFS.fCompilerString, + }; + SkSL::String cached_sksl[kGrShaderTypeCount]; + SkSL::String hlsl[kGrShaderTypeCount]; + + if (kSKSL_Tag == shaderType) { + if (GrPersistentCacheUtils::UnpackCachedShaders(&reader, cached_sksl, inputs, + kGrShaderTypeCount)) { + for (int i = 0; i < kGrShaderTypeCount; ++i) { + sksl[i] = &cached_sksl[i]; + } + } + } + + auto compile = [&](SkSL::Program::Kind kind, GrShaderType shaderType) { + shaders[shaderType] = this->compileD3DProgram(kind, *sksl[shaderType], settings, + &inputs[shaderType], &hlsl[shaderType]); + return shaders[shaderType].get(); + }; + + if (!compile(SkSL::Program::kVertex_Kind, kVertex_GrShaderType) || + !compile(SkSL::Program::kFragment_Kind, kFragment_GrShaderType)) { return nullptr; } + + if (primProc.willUseGeoShader()) { + if (!compile(SkSL::Program::kGeometry_Kind, kGeometry_GrShaderType)) { + return nullptr; + } + } + + if (persistentCache && !cached) { + const bool cacheSkSL = fGpu->getContext()->priv().options().fShaderCacheStrategy == + GrContextOptions::ShaderCacheStrategy::kSkSL; + if (cacheSkSL) { + // Replace the HLSL with formatted SkSL to be cached. This looks odd, but this is + // the last time we're going to use these strings, so it's safe. + for (int i = 0; i < kGrShaderTypeCount; ++i) { + hlsl[i] = GrShaderUtils::PrettyPrint(*sksl[i]); + } + } + sk_sp key = + SkData::MakeWithoutCopy(this->desc().asKey(), this->desc().initialKeyLength()); + sk_sp data = GrPersistentCacheUtils::PackCachedShaders( + cacheSkSL ? kSKSL_Tag : kHLSL_Tag, hlsl, inputs, kGrShaderTypeCount); + persistentCache->store(*key, *data); + } } sk_sp rootSig = @@ -553,9 +642,9 @@ sk_sp GrD3DPipelineStateBuilder::finalize() { const GrD3DRenderTarget* rt = static_cast(fRenderTarget); gr_cp pipelineState = create_pipeline_state( - fGpu, fProgramInfo, rootSig, std::move(vertexShader), - std::move(geometryShader), std::move(pixelShader), rt->dxgiFormat(), - rt->stencilDxgiFormat(), rt->sampleQualityLevel()); + fGpu, fProgramInfo, rootSig, std::move(shaders[kVertex_GrShaderType]), + std::move(shaders[kGeometry_GrShaderType]), std::move(shaders[kFragment_GrShaderType]), + rt->dxgiFormat(), rt->stencilDxgiFormat(), rt->sampleQualityLevel()); return sk_sp(new GrD3DPipelineState(std::move(pipelineState), std::move(rootSig), diff --git a/src/gpu/d3d/GrD3DPipelineStateBuilder.h b/src/gpu/d3d/GrD3DPipelineStateBuilder.h index e5fc4171bbdfd..357c024b0cd91 100644 --- a/src/gpu/d3d/GrD3DPipelineStateBuilder.h +++ b/src/gpu/d3d/GrD3DPipelineStateBuilder.h @@ -18,7 +18,6 @@ class GrProgramDesc; class GrD3DGpu; class GrVkRenderPass; -class SkReader32; class GrD3DPipelineStateBuilder : public GrGLSLProgramBuilder { public: @@ -46,11 +45,13 @@ class GrD3DPipelineStateBuilder : public GrGLSLProgramBuilder { sk_sp finalize(); - void compileD3DProgram(SkSL::Program::Kind kind, - const SkSL::String& sksl, - const SkSL::Program::Settings& settings, - ID3DBlob** shader, - SkSL::Program::Inputs* outInputs); + bool loadHLSLFromCache(SkReadBuffer* reader, gr_cp shaders[]); + + gr_cp compileD3DProgram(SkSL::Program::Kind kind, + const SkSL::String& sksl, + const SkSL::Program::Settings& settings, + SkSL::Program::Inputs* outInputs, + SkSL::String* outHLSL); GrGLSLUniformHandler* uniformHandler() override { return &fUniformHandler; } const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; } diff --git a/src/gpu/d3d/GrD3DPipelineStateDataManager.cpp b/src/gpu/d3d/GrD3DPipelineStateDataManager.cpp index a611d7c315fab..a902bddc9a5c1 100644 --- a/src/gpu/d3d/GrD3DPipelineStateDataManager.cpp +++ b/src/gpu/d3d/GrD3DPipelineStateDataManager.cpp @@ -33,7 +33,7 @@ GrD3DPipelineStateDataManager::GrD3DPipelineStateDataManager(const UniformInfoAr D3D12_GPU_VIRTUAL_ADDRESS GrD3DPipelineStateDataManager::uploadConstants(GrD3DGpu* gpu) { if (fUniformsDirty) { fConstantBufferAddress = gpu->resourceProvider().uploadConstantData(fUniformData.get(), - fUniformSize); + fUniformSize); fUniformsDirty = false; } diff --git a/src/gpu/d3d/GrD3DRenderTarget.cpp b/src/gpu/d3d/GrD3DRenderTarget.cpp index 4dd2e6092ec39..b572a6f5c7b00 100644 --- a/src/gpu/d3d/GrD3DRenderTarget.cpp +++ b/src/gpu/d3d/GrD3DRenderTarget.cpp @@ -24,8 +24,8 @@ GrD3DRenderTarget::GrD3DRenderTarget(GrD3DGpu* gpu, sk_sp state, const GrD3DTextureResourceInfo& msaaInfo, sk_sp msaaState, - const D3D12_CPU_DESCRIPTOR_HANDLE& colorRenderTargetView, - const D3D12_CPU_DESCRIPTOR_HANDLE& resolveRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& colorRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& resolveRenderTargetView, Wrapped) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, std::move(state)) @@ -48,8 +48,8 @@ GrD3DRenderTarget::GrD3DRenderTarget(GrD3DGpu* gpu, sk_sp state, const GrD3DTextureResourceInfo& msaaInfo, sk_sp msaaState, - const D3D12_CPU_DESCRIPTOR_HANDLE& colorRenderTargetView, - const D3D12_CPU_DESCRIPTOR_HANDLE& resolveRenderTargetView) + const GrD3DDescriptorHeap::CPUHandle& colorRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& resolveRenderTargetView) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, std::move(state)) // for the moment we only support 1:1 color to stencil @@ -67,7 +67,7 @@ GrD3DRenderTarget::GrD3DRenderTarget(GrD3DGpu* gpu, SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, - const D3D12_CPU_DESCRIPTOR_HANDLE& renderTargetView, + const GrD3DDescriptorHeap::CPUHandle& renderTargetView, Wrapped) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, std::move(state)) @@ -83,7 +83,7 @@ GrD3DRenderTarget::GrD3DRenderTarget(GrD3DGpu* gpu, SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, - const D3D12_CPU_DESCRIPTOR_HANDLE& renderTargetView) + const GrD3DDescriptorHeap::CPUHandle& renderTargetView) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, std::move(state)) , GrRenderTarget(gpu, dimensions, 1, info.fProtected) @@ -98,7 +98,7 @@ sk_sp GrD3DRenderTarget::MakeWrappedRenderTarget( SkASSERT(1 == info.fLevelCount); DXGI_FORMAT dxgiFormat = info.fFormat; - D3D12_CPU_DESCRIPTOR_HANDLE renderTargetView = + GrD3DDescriptorHeap::CPUHandle renderTargetView = gpu->resourceProvider().createRenderTargetView(info.fResource.get()); // create msaa surface if necessary @@ -137,7 +137,7 @@ sk_sp GrD3DRenderTarget::MakeWrappedRenderTarget( msState.reset(new GrD3DResourceState( static_cast(msInfo.fResourceState))); - D3D12_CPU_DESCRIPTOR_HANDLE msaaRenderTargetView = + GrD3DDescriptorHeap::CPUHandle msaaRenderTargetView = gpu->resourceProvider().createRenderTargetView(msInfo.fResource.get()); d3dRT = new GrD3DRenderTarget(gpu, dimensions, sampleCnt, info, std::move(state), msInfo, @@ -162,10 +162,10 @@ void GrD3DRenderTarget::releaseInternalObjects() { if (fMSAATextureResource) { fMSAATextureResource->releaseResource(gpu); fMSAATextureResource.reset(); - gpu->resourceProvider().recycleRenderTargetView(&fResolveRenderTargetView); + gpu->resourceProvider().recycleRenderTargetView(fResolveRenderTargetView); } - gpu->resourceProvider().recycleRenderTargetView(&fColorRenderTargetView); + gpu->resourceProvider().recycleRenderTargetView(fColorRenderTargetView); } void GrD3DRenderTarget::onRelease() { diff --git a/src/gpu/d3d/GrD3DRenderTarget.h b/src/gpu/d3d/GrD3DRenderTarget.h index e2829a444ca2c..c83cf60020e94 100644 --- a/src/gpu/d3d/GrD3DRenderTarget.h +++ b/src/gpu/d3d/GrD3DRenderTarget.h @@ -14,6 +14,7 @@ #include "include/gpu/d3d/GrD3DTypes.h" #include "src/gpu/GrGpu.h" +#include "src/gpu/d3d/GrD3DDescriptorHeap.h" #include "src/gpu/d3d/GrD3DResourceProvider.h" class GrD3DGpu; @@ -36,7 +37,7 @@ class GrD3DRenderTarget: public GrRenderTarget, public virtual GrD3DTextureResou GrBackendFormat backendFormat() const override { return this->getBackendFormat(); } - GrD3DTextureResource* msaaTextureResource() { return fMSAATextureResource.get(); } + GrD3DTextureResource* msaaTextureResource() const { return fMSAATextureResource.get(); } bool canAttemptStencilAttachment() const override { return true; @@ -44,8 +45,8 @@ class GrD3DRenderTarget: public GrRenderTarget, public virtual GrD3DTextureResou GrBackendRenderTarget getBackendRenderTarget() const override; - D3D12_CPU_DESCRIPTOR_HANDLE colorRenderTargetView() { - return fColorRenderTargetView; + D3D12_CPU_DESCRIPTOR_HANDLE colorRenderTargetView() const { + return fColorRenderTargetView.fHandle; } DXGI_FORMAT stencilDxgiFormat() const; @@ -61,14 +62,14 @@ class GrD3DRenderTarget: public GrRenderTarget, public virtual GrD3DTextureResou sk_sp state, const GrD3DTextureResourceInfo& msaaInfo, sk_sp msaaState, - const D3D12_CPU_DESCRIPTOR_HANDLE& colorRenderTargetView, - const D3D12_CPU_DESCRIPTOR_HANDLE& resolveRenderTargetView); + const GrD3DDescriptorHeap::CPUHandle& colorRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& resolveRenderTargetView); GrD3DRenderTarget(GrD3DGpu* gpu, SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, - const D3D12_CPU_DESCRIPTOR_HANDLE& renderTargetView); + const GrD3DDescriptorHeap::CPUHandle& renderTargetView); void onAbandon() override; void onRelease() override; @@ -95,15 +96,15 @@ class GrD3DRenderTarget: public GrRenderTarget, public virtual GrD3DTextureResou sk_sp state, const GrD3DTextureResourceInfo& msaaInfo, sk_sp msaaState, - const D3D12_CPU_DESCRIPTOR_HANDLE& colorRenderTargetView, - const D3D12_CPU_DESCRIPTOR_HANDLE& resolveRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& colorRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& resolveRenderTargetView, Wrapped); GrD3DRenderTarget(GrD3DGpu* gpu, SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, - const D3D12_CPU_DESCRIPTOR_HANDLE& renderTargetView, + const GrD3DDescriptorHeap::CPUHandle& renderTargetView, Wrapped); GrD3DGpu* getD3DGpu() const; @@ -121,8 +122,8 @@ class GrD3DRenderTarget: public GrRenderTarget, public virtual GrD3DTextureResou std::unique_ptr fMSAATextureResource; - D3D12_CPU_DESCRIPTOR_HANDLE fColorRenderTargetView; - D3D12_CPU_DESCRIPTOR_HANDLE fResolveRenderTargetView; + GrD3DDescriptorHeap::CPUHandle fColorRenderTargetView; + GrD3DDescriptorHeap::CPUHandle fResolveRenderTargetView; }; #endif diff --git a/src/gpu/d3d/GrD3DResourceProvider.cpp b/src/gpu/d3d/GrD3DResourceProvider.cpp index f6810deb46069..c933743e358e3 100644 --- a/src/gpu/d3d/GrD3DResourceProvider.cpp +++ b/src/gpu/d3d/GrD3DResourceProvider.cpp @@ -18,8 +18,15 @@ GrD3DResourceProvider::GrD3DResourceProvider(GrD3DGpu* gpu) : fGpu(gpu) , fCpuDescriptorManager(gpu) + , fDescriptorTableManager(gpu) , fPipelineStateCache(new PipelineStateCache(gpu)) {} +void GrD3DResourceProvider::destroyResources() { + fSamplers.reset(); + + fPipelineStateCache->release(); +} + std::unique_ptr GrD3DResourceProvider::findOrCreateDirectCommandList() { if (fAvailableDirectCommandLists.count()) { std::unique_ptr list = @@ -52,46 +59,91 @@ sk_sp GrD3DResourceProvider::findOrCreateRootSignature(int n } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createRenderTargetView( +GrD3DDescriptorHeap::CPUHandle GrD3DResourceProvider::createRenderTargetView( ID3D12Resource* textureResource) { return fCpuDescriptorManager.createRenderTargetView(fGpu, textureResource); } -void GrD3DResourceProvider::recycleRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE* rtvDescriptor) { +void GrD3DResourceProvider::recycleRenderTargetView( + const GrD3DDescriptorHeap::CPUHandle& rtvDescriptor) { fCpuDescriptorManager.recycleRenderTargetView(rtvDescriptor); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createDepthStencilView( +GrD3DDescriptorHeap::CPUHandle GrD3DResourceProvider::createDepthStencilView( ID3D12Resource* textureResource) { return fCpuDescriptorManager.createDepthStencilView(fGpu, textureResource); } -void GrD3DResourceProvider::recycleDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE* dsvDescriptor) { +void GrD3DResourceProvider::recycleDepthStencilView( + const GrD3DDescriptorHeap::CPUHandle& dsvDescriptor) { fCpuDescriptorManager.recycleDepthStencilView(dsvDescriptor); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createConstantBufferView( +GrD3DDescriptorHeap::CPUHandle GrD3DResourceProvider::createConstantBufferView( ID3D12Resource* bufferResource, size_t offset, size_t size) { return fCpuDescriptorManager.createConstantBufferView(fGpu, bufferResource, offset, size); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createShaderResourceView( +GrD3DDescriptorHeap::CPUHandle GrD3DResourceProvider::createShaderResourceView( ID3D12Resource* resource) { return fCpuDescriptorManager.createShaderResourceView(fGpu, resource); } -void GrD3DResourceProvider::recycleConstantOrShaderView(D3D12_CPU_DESCRIPTOR_HANDLE* view) { +void GrD3DResourceProvider::recycleConstantOrShaderView( + const GrD3DDescriptorHeap::CPUHandle& view) { fCpuDescriptorManager.recycleConstantOrShaderView(view); } -D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::createSampler( - D3D12_FILTER filter, D3D12_TEXTURE_ADDRESS_MODE addressModeU, - D3D12_TEXTURE_ADDRESS_MODE addressModeV) { - return fCpuDescriptorManager.createSampler(fGpu, filter, addressModeU, addressModeV); +static D3D12_TEXTURE_ADDRESS_MODE wrap_mode_to_d3d_address_mode(GrSamplerState::WrapMode wrapMode) { + switch (wrapMode) { + case GrSamplerState::WrapMode::kClamp: + return D3D12_TEXTURE_ADDRESS_MODE_CLAMP; + case GrSamplerState::WrapMode::kRepeat: + return D3D12_TEXTURE_ADDRESS_MODE_WRAP; + case GrSamplerState::WrapMode::kMirrorRepeat: + return D3D12_TEXTURE_ADDRESS_MODE_MIRROR; + case GrSamplerState::WrapMode::kClampToBorder: + return D3D12_TEXTURE_ADDRESS_MODE_BORDER; + } + SK_ABORT("Unknown wrap mode."); +} + +D3D12_CPU_DESCRIPTOR_HANDLE GrD3DResourceProvider::findOrCreateCompatibleSampler( + const GrSamplerState& params) { + uint32_t key = GrSamplerState::GenerateKey(params); + D3D12_CPU_DESCRIPTOR_HANDLE* samplerPtr = fSamplers.find(key); + if (samplerPtr) { + return *samplerPtr; + } + + static D3D12_FILTER d3dFilterModes[] = { + D3D12_FILTER_MIN_MAG_MIP_POINT, + D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT, + D3D12_FILTER_MIN_MAG_MIP_LINEAR + }; + + static_assert((int)GrSamplerState::Filter::kNearest == 0); + static_assert((int)GrSamplerState::Filter::kBilerp == 1); + static_assert((int)GrSamplerState::Filter::kMipMap == 2); + + D3D12_FILTER filter = d3dFilterModes[static_cast(params.filter())]; + D3D12_TEXTURE_ADDRESS_MODE addressModeU = wrap_mode_to_d3d_address_mode(params.wrapModeX()); + D3D12_TEXTURE_ADDRESS_MODE addressModeV = wrap_mode_to_d3d_address_mode(params.wrapModeY()); + + D3D12_CPU_DESCRIPTOR_HANDLE sampler = + fCpuDescriptorManager.createSampler( + fGpu, filter, addressModeU, addressModeV).fHandle; + fSamplers.set(key, sampler); + return sampler; } -void GrD3DResourceProvider::recycleSampler(D3D12_CPU_DESCRIPTOR_HANDLE* sampler) { - fCpuDescriptorManager.recycleSampler(sampler); +std::unique_ptr GrD3DResourceProvider::createShaderOrConstantResourceTable( + unsigned int size) { + return fDescriptorTableManager.createShaderOrConstantResourceTable(fGpu, size); +} + +std::unique_ptr GrD3DResourceProvider::createSamplerTable(unsigned int size) { + return fDescriptorTableManager.createSamplerTable(fGpu, size); } sk_sp GrD3DResourceProvider::findOrCreateCompatiblePipelineState( @@ -124,6 +176,7 @@ D3D12_GPU_VIRTUAL_ADDRESS GrD3DResourceProvider::uploadConstantData(void* data, void GrD3DResourceProvider::prepForSubmit() { fGpu->currentCommandList()->setCurrentConstantBuffer(fConstantBuffer); + fDescriptorTableManager.prepForSubmit(fGpu); } //////////////////////////////////////////////////////////////////////////////////////////////// @@ -165,6 +218,10 @@ GrD3DResourceProvider::PipelineStateCache::~PipelineStateCache() { #endif } +void GrD3DResourceProvider::PipelineStateCache::release() { + fMap.reset(); +} + sk_sp GrD3DResourceProvider::PipelineStateCache::refPipelineState( GrRenderTarget* renderTarget, const GrProgramInfo& programInfo) { #ifdef GR_PIPELINE_STATE_CACHE_STATS @@ -195,3 +252,10 @@ sk_sp GrD3DResourceProvider::PipelineStateCache::refPipeline } return (*entry)->fPipelineState; } + +void GrD3DResourceProvider::PipelineStateCache::markPipelineStateUniformsDirty() { + fMap.foreach ([](const GrProgramDesc*, std::unique_ptr* entry) { + (*entry)->fPipelineState->markUniformsDirty(); + }); +} + diff --git a/src/gpu/d3d/GrD3DResourceProvider.h b/src/gpu/d3d/GrD3DResourceProvider.h index 0d7b8289fa506..923342ab79f35 100644 --- a/src/gpu/d3d/GrD3DResourceProvider.h +++ b/src/gpu/d3d/GrD3DResourceProvider.h @@ -10,10 +10,12 @@ #include "include/gpu/d3d/GrD3DTypes.h" #include "include/private/SkTArray.h" +#include "include/private/SkTHash.h" #include "src/core/SkLRUCache.h" #include "src/gpu/GrProgramDesc.h" #include "src/gpu/d3d/GrD3DConstantRingBuffer.h" #include "src/gpu/d3d/GrD3DCpuDescriptorManager.h" +#include "src/gpu/d3d/GrD3DDescriptorTableManager.h" #include "src/gpu/d3d/GrD3DRootSignature.h" #include @@ -21,39 +23,52 @@ class GrD3DDirectCommandList; class GrD3DGpu; class GrD3DPipelineState; +class GrSamplerState; class GrD3DResourceProvider { public: GrD3DResourceProvider(GrD3DGpu*); + void destroyResources(); + std::unique_ptr findOrCreateDirectCommandList(); void recycleDirectCommandList(std::unique_ptr); sk_sp findOrCreateRootSignature(int numTextureSamplers); - D3D12_CPU_DESCRIPTOR_HANDLE createRenderTargetView(ID3D12Resource* textureResource); - void recycleRenderTargetView(D3D12_CPU_DESCRIPTOR_HANDLE*); + GrD3DDescriptorHeap::CPUHandle createRenderTargetView(ID3D12Resource* textureResource); + void recycleRenderTargetView(const GrD3DDescriptorHeap::CPUHandle&); + + GrD3DDescriptorHeap::CPUHandle createDepthStencilView(ID3D12Resource* textureResource); + void recycleDepthStencilView(const GrD3DDescriptorHeap::CPUHandle&); - D3D12_CPU_DESCRIPTOR_HANDLE createDepthStencilView(ID3D12Resource* textureResource); - void recycleDepthStencilView(D3D12_CPU_DESCRIPTOR_HANDLE*); + GrD3DDescriptorHeap::CPUHandle createConstantBufferView(ID3D12Resource* bufferResource, + size_t offset, + size_t size); + GrD3DDescriptorHeap::CPUHandle createShaderResourceView(ID3D12Resource* resource); + void recycleConstantOrShaderView(const GrD3DDescriptorHeap::CPUHandle&); - D3D12_CPU_DESCRIPTOR_HANDLE createConstantBufferView(ID3D12Resource* bufferResource, - size_t offset, - size_t size); - D3D12_CPU_DESCRIPTOR_HANDLE createShaderResourceView(ID3D12Resource* resource); - void recycleConstantOrShaderView(D3D12_CPU_DESCRIPTOR_HANDLE*); + D3D12_CPU_DESCRIPTOR_HANDLE findOrCreateCompatibleSampler(const GrSamplerState& params); - D3D12_CPU_DESCRIPTOR_HANDLE createSampler(D3D12_FILTER filter, - D3D12_TEXTURE_ADDRESS_MODE addressModeU, - D3D12_TEXTURE_ADDRESS_MODE addressModeV); - void recycleSampler(D3D12_CPU_DESCRIPTOR_HANDLE*); - sk_sp findOrCreateCompatiblePipelineState(GrRenderTarget*, + std::unique_ptr createShaderOrConstantResourceTable(unsigned int size); + std::unique_ptr createSamplerTable(unsigned int size); + GrD3DDescriptorTableManager* descriptorTableMgr() { + return &fDescriptorTableManager; + } + + sk_sp findOrCreateCompatiblePipelineState(GrRenderTarget*, const GrProgramInfo&); - D3D12_GPU_VIRTUAL_ADDRESS uploadConstantData(void* data, size_t size); - void prepForSubmit(); + D3D12_GPU_VIRTUAL_ADDRESS uploadConstantData(void* data, size_t size); + void prepForSubmit(); + + void markPipelineStateUniformsDirty() { fPipelineStateCache->markPipelineStateUniformsDirty(); } + +#if GR_TEST_UTILS + void resetShaderCacheForTesting() const { fPipelineStateCache->release(); } +#endif private: #ifdef SK_DEBUG @@ -65,8 +80,11 @@ class GrD3DResourceProvider { PipelineStateCache(GrD3DGpu* gpu); ~PipelineStateCache(); + void release(); sk_sp refPipelineState(GrRenderTarget*, const GrProgramInfo&); + void markPipelineStateUniformsDirty(); + private: struct Entry; @@ -92,10 +110,13 @@ class GrD3DResourceProvider { SkSTArray<4, sk_sp> fRootSignatures; GrD3DCpuDescriptorManager fCpuDescriptorManager; + GrD3DDescriptorTableManager fDescriptorTableManager; sk_sp fConstantBuffer; std::unique_ptr fPipelineStateCache; + + SkTHashMap fSamplers; }; #endif diff --git a/src/gpu/d3d/GrD3DSemaphore.cpp b/src/gpu/d3d/GrD3DSemaphore.cpp new file mode 100644 index 0000000000000..cd2cf54965d63 --- /dev/null +++ b/src/gpu/d3d/GrD3DSemaphore.cpp @@ -0,0 +1,31 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/gpu/d3d/GrD3DSemaphore.h" + +#include "src/gpu/d3d/GrD3DGpu.h" + + +std::unique_ptr GrD3DSemaphore::Make(GrD3DGpu* gpu) { + GrD3DFenceInfo fenceInfo; + gpu->device()->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&fenceInfo.fFence)); + fenceInfo.fValue = 1; + + return std::unique_ptr(new GrD3DSemaphore(fenceInfo)); +} + +std::unique_ptr GrD3DSemaphore::MakeWrapped(const GrD3DFenceInfo& fenceInfo) { + return std::unique_ptr(new GrD3DSemaphore(fenceInfo)); +} + +GrD3DSemaphore::GrD3DSemaphore(const GrD3DFenceInfo& fenceInfo) : fFenceInfo(fenceInfo) {} + +GrBackendSemaphore GrD3DSemaphore::backendSemaphore() const { + GrBackendSemaphore backendSemaphore; + backendSemaphore.initDirect3D(fFenceInfo); + return backendSemaphore; +} diff --git a/src/gpu/d3d/GrD3DSemaphore.h b/src/gpu/d3d/GrD3DSemaphore.h new file mode 100644 index 0000000000000..d96a6392a186d --- /dev/null +++ b/src/gpu/d3d/GrD3DSemaphore.h @@ -0,0 +1,41 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrMtlSemaphore_DEFINED +#define GrMtlSemaphore_DEFINED + +#include "include/gpu/GrBackendSemaphore.h" +#include "include/gpu/d3d/GrD3DTypes.h" +#include "include/private/GrTypesPriv.h" +#include "src/gpu/GrSemaphore.h" + +class GrD3DGpu; + +class GrD3DSemaphore : public GrSemaphore { +public: + static std::unique_ptr Make(GrD3DGpu* gpu); + + static std::unique_ptr MakeWrapped(const GrD3DFenceInfo&); + + ~GrD3DSemaphore() override {} + + ID3D12Fence* fence() const { return fFenceInfo.fFence.get(); } + uint64_t value() const { return fFenceInfo.fValue; } + + GrBackendSemaphore backendSemaphore() const override; + +private: + GrD3DSemaphore(const GrD3DFenceInfo&); + + void setIsOwned() override {} + + GrD3DFenceInfo fFenceInfo; + + typedef GrSemaphore INHERITED; +}; + +#endif diff --git a/src/gpu/d3d/GrD3DStencilAttachment.cpp b/src/gpu/d3d/GrD3DStencilAttachment.cpp index e5dd5bcf33941..c8925c1d87f4f 100644 --- a/src/gpu/d3d/GrD3DStencilAttachment.cpp +++ b/src/gpu/d3d/GrD3DStencilAttachment.cpp @@ -13,10 +13,12 @@ GrD3DStencilAttachment::GrD3DStencilAttachment(GrD3DGpu* gpu, const Format& format, const D3D12_RESOURCE_DESC& desc, const GrD3DTextureResourceInfo& info, - sk_sp state) + sk_sp state, + const GrD3DDescriptorHeap::CPUHandle& view) : GrStencilAttachment(gpu, desc.Width, desc.Height, format.fStencilBits, desc.SampleDesc.Count) - , GrD3DTextureResource(info, state) { + , GrD3DTextureResource(info, state) + , fView(view) { this->registerWithCache(SkBudgeted::kYes); } @@ -51,9 +53,12 @@ GrD3DStencilAttachment* GrD3DStencilAttachment::Make(GrD3DGpu* gpu, return nullptr; } + GrD3DDescriptorHeap::CPUHandle view = + gpu->resourceProvider().createDepthStencilView(info.fResource.get()); + sk_sp state(new GrD3DResourceState(info.fResourceState)); GrD3DStencilAttachment* stencil = new GrD3DStencilAttachment(gpu, format, resourceDesc, - info, std::move(state)); + info, std::move(state), view); return stencil; } diff --git a/src/gpu/d3d/GrD3DStencilAttachment.h b/src/gpu/d3d/GrD3DStencilAttachment.h index 096626d9053e0..927637c9e1575 100644 --- a/src/gpu/d3d/GrD3DStencilAttachment.h +++ b/src/gpu/d3d/GrD3DStencilAttachment.h @@ -11,11 +11,11 @@ #include "src/gpu/GrStencilAttachment.h" #include "include/gpu/d3d/GrD3DTypes.h" +#include "src/gpu/d3d/GrD3DDescriptorHeap.h" #include "src/gpu/d3d/GrD3DTextureResource.h" class GrD3DGpu; - class GrD3DStencilAttachment : public GrStencilAttachment, public GrD3DTextureResource { public: struct Format { @@ -28,6 +28,10 @@ class GrD3DStencilAttachment : public GrStencilAttachment, public GrD3DTextureRe ~GrD3DStencilAttachment() override {} + D3D12_CPU_DESCRIPTOR_HANDLE view() const { + return fView.fHandle; + } + protected: void onRelease() override; void onAbandon() override; @@ -39,9 +43,12 @@ class GrD3DStencilAttachment : public GrStencilAttachment, public GrD3DTextureRe const Format& format, const D3D12_RESOURCE_DESC&, const GrD3DTextureResourceInfo&, - sk_sp); + sk_sp, + const GrD3DDescriptorHeap::CPUHandle& view); GrD3DGpu* getD3DGpu() const; + + GrD3DDescriptorHeap::CPUHandle fView; }; #endif diff --git a/src/gpu/d3d/GrD3DTexture.cpp b/src/gpu/d3d/GrD3DTexture.cpp index 458853a3ad61f..b59fb4d5f4d1b 100644 --- a/src/gpu/d3d/GrD3DTexture.cpp +++ b/src/gpu/d3d/GrD3DTexture.cpp @@ -19,10 +19,12 @@ GrD3DTexture::GrD3DTexture(GrD3DGpu* gpu, SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, GrMipMapsStatus mipMapsStatus) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, std::move(state)) - , INHERITED(gpu, dimensions, info.fProtected, GrTextureType::k2D, mipMapsStatus) { + , INHERITED(gpu, dimensions, info.fProtected, GrTextureType::k2D, mipMapsStatus) + , fShaderResourceView(shaderResourceView) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == info.fLevelCount)); this->registerWithCache(budgeted); if (GrDxgiFormatIsCompressed(info.fFormat)) { @@ -31,11 +33,14 @@ GrD3DTexture::GrD3DTexture(GrD3DGpu* gpu, } GrD3DTexture::GrD3DTexture(GrD3DGpu* gpu, SkISize dimensions, const GrD3DTextureResourceInfo& info, - sk_sp state, GrMipMapsStatus mipMapsStatus, - GrWrapCacheable cacheable, GrIOType ioType) + sk_sp state, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, + GrMipMapsStatus mipMapsStatus, GrWrapCacheable cacheable, + GrIOType ioType) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, std::move(state)) - , INHERITED(gpu, dimensions, info.fProtected, GrTextureType::k2D, mipMapsStatus) { + , INHERITED(gpu, dimensions, info.fProtected, GrTextureType::k2D, mipMapsStatus) + , fShaderResourceView(shaderResourceView) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == info.fLevelCount)); if (ioType == kRead_GrIOType) { this->setReadOnly(); @@ -48,10 +53,12 @@ GrD3DTexture::GrD3DTexture(GrD3DGpu* gpu, SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, GrMipMapsStatus mipMapsStatus) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, state) - , INHERITED(gpu, dimensions, info.fProtected, GrTextureType::k2D, mipMapsStatus) { + , INHERITED(gpu, dimensions, info.fProtected, GrTextureType::k2D, mipMapsStatus) + , fShaderResourceView(shaderResourceView) { SkASSERT((GrMipMapsStatus::kNotAllocated == mipMapsStatus) == (1 == info.fLevelCount)); } @@ -70,8 +77,11 @@ sk_sp GrD3DTexture::MakeNewTexture(GrD3DGpu* gpu, SkBudgeted budge sk_sp state( new GrD3DResourceState(static_cast(info.fResourceState))); + GrD3DDescriptorHeap::CPUHandle shaderResourceView = + gpu->resourceProvider().createShaderResourceView(info.fResource.get()); + GrD3DTexture* tex = new GrD3DTexture(gpu, budgeted, dimensions, info, std::move(state), - mipMapsStatus); + shaderResourceView, mipMapsStatus); return sk_sp(tex); } @@ -90,8 +100,12 @@ sk_sp GrD3DTexture::MakeWrappedTexture(GrD3DGpu* gpu, GrMipMapsStatus mipMapsStatus = info.fLevelCount > 1 ? GrMipMapsStatus::kValid : GrMipMapsStatus::kNotAllocated; + GrD3DDescriptorHeap::CPUHandle shaderResourceView = + gpu->resourceProvider().createShaderResourceView(info.fResource.get()); + return sk_sp(new GrD3DTexture(gpu, dimensions, info, std::move(state), - mipMapsStatus, cacheable, ioType)); + shaderResourceView, mipMapsStatus, cacheable, + ioType)); } void GrD3DTexture::onRelease() { @@ -103,7 +117,9 @@ void GrD3DTexture::onRelease() { this->removeFinishIdleProcs(); } - this->releaseResource(this->getD3DGpu()); + GrD3DGpu* gpu = this->getD3DGpu(); + gpu->resourceProvider().recycleConstantOrShaderView(fShaderResourceView); + this->releaseResource(gpu); INHERITED::onRelease(); } @@ -117,7 +133,9 @@ void GrD3DTexture::onAbandon() { this->removeFinishIdleProcs(); } - this->releaseResource(this->getD3DGpu()); + GrD3DGpu* gpu = this->getD3DGpu(); + gpu->resourceProvider().recycleConstantOrShaderView(fShaderResourceView); + this->releaseResource(gpu); INHERITED::onAbandon(); } diff --git a/src/gpu/d3d/GrD3DTexture.h b/src/gpu/d3d/GrD3DTexture.h index 704f1b2146d90..e6e9b56a42a3e 100644 --- a/src/gpu/d3d/GrD3DTexture.h +++ b/src/gpu/d3d/GrD3DTexture.h @@ -11,6 +11,7 @@ #include "src/core/SkLRUCache.h" #include "src/gpu/GrSamplerState.h" #include "src/gpu/GrTexture.h" +#include "src/gpu/d3d/GrD3DDescriptorHeap.h" #include "src/gpu/d3d/GrD3DTextureResource.h" class GrD3DTexture : public GrTexture, public virtual GrD3DTextureResource { @@ -34,6 +35,7 @@ class GrD3DTexture : public GrTexture, public virtual GrD3DTextureResource { GrBackendTexture getBackendTexture() const override; GrBackendFormat backendFormat() const override { return this->getBackendFormat(); } + D3D12_CPU_DESCRIPTOR_HANDLE shaderResourceView() { return fShaderResourceView.fHandle; } void textureParamsModified() override {} @@ -45,6 +47,7 @@ class GrD3DTexture : public GrTexture, public virtual GrD3DTextureResource { SkISize dimensions, const GrD3DTextureResourceInfo&, sk_sp, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, GrMipMapsStatus); GrD3DGpu* getD3DGpu() const; @@ -60,9 +63,13 @@ class GrD3DTexture : public GrTexture, public virtual GrD3DTextureResource { private: GrD3DTexture(GrD3DGpu*, SkBudgeted, SkISize dimensions, const GrD3DTextureResourceInfo&, - sk_sp, GrMipMapsStatus); + sk_sp, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, + GrMipMapsStatus); GrD3DTexture(GrD3DGpu*, SkISize dimensions, const GrD3DTextureResourceInfo&, - sk_sp, GrMipMapsStatus, GrWrapCacheable, GrIOType); + sk_sp, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, + GrMipMapsStatus, GrWrapCacheable, GrIOType); // In D3D we call the release proc after we are finished with the underlying // GrSurfaceResource::Resource object (which occurs after the GPU has finished all work on it). @@ -79,6 +86,8 @@ class GrD3DTexture : public GrTexture, public virtual GrD3DTextureResource { } }; + GrD3DDescriptorHeap::CPUHandle fShaderResourceView; + typedef GrTexture INHERITED; }; diff --git a/src/gpu/d3d/GrD3DTextureRenderTarget.cpp b/src/gpu/d3d/GrD3DTextureRenderTarget.cpp index 1aa178b5f6123..f352e8d795454 100644 --- a/src/gpu/d3d/GrD3DTextureRenderTarget.cpp +++ b/src/gpu/d3d/GrD3DTextureRenderTarget.cpp @@ -13,13 +13,14 @@ GrD3DTextureRenderTarget::GrD3DTextureRenderTarget( GrD3DGpu* gpu, SkBudgeted budgeted, SkISize dimensions, int sampleCnt, const GrD3DTextureResourceInfo& info, sk_sp state, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, const GrD3DTextureResourceInfo& msaaInfo, sk_sp msaaState, - const D3D12_CPU_DESCRIPTOR_HANDLE& colorRenderTargetView, - const D3D12_CPU_DESCRIPTOR_HANDLE& resolveRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& colorRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& resolveRenderTargetView, GrMipMapsStatus mipMapsStatus) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, state) - , GrD3DTexture(gpu, dimensions, info, state, mipMapsStatus) + , GrD3DTexture(gpu, dimensions, info, state, shaderResourceView, mipMapsStatus) , GrD3DRenderTarget(gpu, dimensions, sampleCnt, info, state, msaaInfo, std::move(msaaState), colorRenderTargetView, resolveRenderTargetView) { SkASSERT(info.fProtected == msaaInfo.fProtected); @@ -29,11 +30,12 @@ GrD3DTextureRenderTarget::GrD3DTextureRenderTarget( GrD3DTextureRenderTarget::GrD3DTextureRenderTarget( GrD3DGpu* gpu, SkBudgeted budgeted, SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, - const D3D12_CPU_DESCRIPTOR_HANDLE& renderTargetView, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, + const GrD3DDescriptorHeap::CPUHandle& renderTargetView, GrMipMapsStatus mipMapsStatus) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, state) - , GrD3DTexture(gpu, dimensions, info, state, mipMapsStatus) + , GrD3DTexture(gpu, dimensions, info, state, shaderResourceView, mipMapsStatus) , GrD3DRenderTarget(gpu, dimensions, info, state, renderTargetView) { this->registerWithCache(budgeted); } @@ -41,14 +43,15 @@ GrD3DTextureRenderTarget::GrD3DTextureRenderTarget( GrD3DTextureRenderTarget::GrD3DTextureRenderTarget( GrD3DGpu* gpu, SkISize dimensions, int sampleCnt, const GrD3DTextureResourceInfo& info, sk_sp state, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, const GrD3DTextureResourceInfo& msaaInfo, sk_sp msaaState, - const D3D12_CPU_DESCRIPTOR_HANDLE& colorRenderTargetView, - const D3D12_CPU_DESCRIPTOR_HANDLE& resolveRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& colorRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& resolveRenderTargetView, GrMipMapsStatus mipMapsStatus, GrWrapCacheable cacheable) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, state) - , GrD3DTexture(gpu, dimensions, info, state, mipMapsStatus) + , GrD3DTexture(gpu, dimensions, info, state, shaderResourceView, mipMapsStatus) , GrD3DRenderTarget(gpu, dimensions, sampleCnt, info, state, msaaInfo, std::move(msaaState), colorRenderTargetView, resolveRenderTargetView) { SkASSERT(info.fProtected == msaaInfo.fProtected); @@ -58,12 +61,13 @@ GrD3DTextureRenderTarget::GrD3DTextureRenderTarget( GrD3DTextureRenderTarget::GrD3DTextureRenderTarget( GrD3DGpu* gpu, SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, - const D3D12_CPU_DESCRIPTOR_HANDLE& renderTargetView, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, + const GrD3DDescriptorHeap::CPUHandle& renderTargetView, GrMipMapsStatus mipMapsStatus, GrWrapCacheable cacheable) : GrSurface(gpu, dimensions, info.fProtected) , GrD3DTextureResource(info, state) - , GrD3DTexture(gpu, dimensions, info, state, mipMapsStatus) + , GrD3DTexture(gpu, dimensions, info, state, shaderResourceView, mipMapsStatus) , GrD3DRenderTarget(gpu, dimensions, info, state, renderTargetView) { this->registerWithCacheWrapped(cacheable); } @@ -134,8 +138,11 @@ sk_sp GrD3DTextureRenderTarget::MakeNewTextureRenderTa sk_sp state(new GrD3DResourceState( static_cast(info.fResourceState))); - const D3D12_CPU_DESCRIPTOR_HANDLE renderTargetView = - gpu->resourceProvider().createRenderTargetView(info.fResource.get()); + const GrD3DDescriptorHeap::CPUHandle shaderResourceView = + gpu->resourceProvider().createShaderResourceView(info.fResource.get()); + + const GrD3DDescriptorHeap::CPUHandle renderTargetView = + gpu->resourceProvider().createRenderTargetView(info.fResource.get()); if (sampleCnt > 1) { GrD3DTextureResourceInfo msInfo; @@ -143,16 +150,17 @@ sk_sp GrD3DTextureRenderTarget::MakeNewTextureRenderTa std::tie(msInfo, msState) = create_msaa_resource(gpu, dimensions, sampleCnt, info); - const D3D12_CPU_DESCRIPTOR_HANDLE msaaRenderTargetView = - gpu->resourceProvider().createRenderTargetView(msInfo.fResource.get()); + const GrD3DDescriptorHeap::CPUHandle msaaRenderTargetView = + gpu->resourceProvider().createRenderTargetView(msInfo.fResource.get()); GrD3DTextureRenderTarget* trt = new GrD3DTextureRenderTarget( - gpu, budgeted, dimensions, sampleCnt, info, std::move(state), + gpu, budgeted, dimensions, sampleCnt, info, std::move(state), shaderResourceView, msInfo, std::move(msState), msaaRenderTargetView, renderTargetView, mipMapsStatus); return sk_sp(trt); } else { GrD3DTextureRenderTarget* trt = new GrD3DTextureRenderTarget( - gpu, budgeted, dimensions, info, std::move(state), renderTargetView, mipMapsStatus); + gpu, budgeted, dimensions, info, std::move(state), shaderResourceView, + renderTargetView, mipMapsStatus); return sk_sp(trt); } } @@ -172,25 +180,29 @@ sk_sp GrD3DTextureRenderTarget::MakeWrappedTextureRend GrMipMapsStatus mipMapsStatus = info.fLevelCount > 1 ? GrMipMapsStatus::kDirty : GrMipMapsStatus::kNotAllocated; - const D3D12_CPU_DESCRIPTOR_HANDLE renderTargetView = - gpu->resourceProvider().createRenderTargetView(info.fResource.get()); + const GrD3DDescriptorHeap::CPUHandle shaderResourceView = + gpu->resourceProvider().createShaderResourceView(info.fResource.get()); + + const GrD3DDescriptorHeap::CPUHandle renderTargetView = + gpu->resourceProvider().createRenderTargetView(info.fResource.get()); if (sampleCnt > 1) { GrD3DTextureResourceInfo msInfo; sk_sp msState; std::tie(msInfo, msState) = create_msaa_resource(gpu, dimensions, sampleCnt, info); - const D3D12_CPU_DESCRIPTOR_HANDLE msaaRenderTargetView = + const GrD3DDescriptorHeap::CPUHandle msaaRenderTargetView = gpu->resourceProvider().createRenderTargetView(msInfo.fResource.get()); GrD3DTextureRenderTarget* trt = new GrD3DTextureRenderTarget( - gpu, dimensions, sampleCnt, info, std::move(state), msInfo, std::move(msState), - msaaRenderTargetView, renderTargetView, mipMapsStatus, cacheable); + gpu, dimensions, sampleCnt, info, std::move(state), shaderResourceView, + msInfo, std::move(msState), msaaRenderTargetView, renderTargetView, mipMapsStatus, + cacheable); return sk_sp(trt); } else { return sk_sp(new GrD3DTextureRenderTarget( - gpu, dimensions, info, std::move(state), renderTargetView, mipMapsStatus, - cacheable)); + gpu, dimensions, info, std::move(state), shaderResourceView, renderTargetView, + mipMapsStatus, cacheable)); } } diff --git a/src/gpu/d3d/GrD3DTextureRenderTarget.h b/src/gpu/d3d/GrD3DTextureRenderTarget.h index 75ac076fb07ab..46d3ca5a3fc15 100644 --- a/src/gpu/d3d/GrD3DTextureRenderTarget.h +++ b/src/gpu/d3d/GrD3DTextureRenderTarget.h @@ -59,10 +59,11 @@ class GrD3DTextureRenderTarget: public GrD3DTexture, public GrD3DRenderTarget { int sampleCnt, const GrD3DTextureResourceInfo& info, sk_sp state, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, const GrD3DTextureResourceInfo& msaaInfo, sk_sp msaaState, - const D3D12_CPU_DESCRIPTOR_HANDLE& colorRenderTargetView, - const D3D12_CPU_DESCRIPTOR_HANDLE& resolveRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& colorRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& resolveRenderTargetView, GrMipMapsStatus); // non-MSAA, not-wrapped @@ -71,7 +72,8 @@ class GrD3DTextureRenderTarget: public GrD3DTexture, public GrD3DRenderTarget { SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, - const D3D12_CPU_DESCRIPTOR_HANDLE& renderTargetView, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, + const GrD3DDescriptorHeap::CPUHandle& renderTargetView, GrMipMapsStatus); // MSAA, wrapped @@ -80,10 +82,11 @@ class GrD3DTextureRenderTarget: public GrD3DTexture, public GrD3DRenderTarget { int sampleCnt, const GrD3DTextureResourceInfo& info, sk_sp state, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, const GrD3DTextureResourceInfo& msaaInfo, sk_sp msaaState, - const D3D12_CPU_DESCRIPTOR_HANDLE& colorRenderTargetView, - const D3D12_CPU_DESCRIPTOR_HANDLE& resolveRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& colorRenderTargetView, + const GrD3DDescriptorHeap::CPUHandle& resolveRenderTargetView, GrMipMapsStatus, GrWrapCacheable); @@ -92,7 +95,8 @@ class GrD3DTextureRenderTarget: public GrD3DTexture, public GrD3DRenderTarget { SkISize dimensions, const GrD3DTextureResourceInfo& info, sk_sp state, - const D3D12_CPU_DESCRIPTOR_HANDLE& renderTargetView, + const GrD3DDescriptorHeap::CPUHandle& shaderResourceView, + const GrD3DDescriptorHeap::CPUHandle& renderTargetView, GrMipMapsStatus, GrWrapCacheable); diff --git a/src/gpu/d3d/GrD3DTextureResource.cpp b/src/gpu/d3d/GrD3DTextureResource.cpp index e54bf95e8248a..a307d11036571 100644 --- a/src/gpu/d3d/GrD3DTextureResource.cpp +++ b/src/gpu/d3d/GrD3DTextureResource.cpp @@ -16,14 +16,12 @@ void GrD3DTextureResource::setResourceState(const GrD3DGpu* gpu, return; } - SkAutoTMalloc barriers(fInfo.fLevelCount); - for (uint32_t mipLevel = 0; mipLevel < fInfo.fLevelCount; ++mipLevel) { - barriers[mipLevel].pResource = this->d3dResource(); - barriers[mipLevel].Subresource = mipLevel; - barriers[mipLevel].StateBefore = currentResourceState; - barriers[mipLevel].StateAfter = newResourceState; - } - gpu->addResourceBarriers(this->resource(), fInfo.fLevelCount, barriers.get()); + D3D12_RESOURCE_TRANSITION_BARRIER barrier; + barrier.pResource = this->d3dResource(); + barrier.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; + barrier.StateBefore = currentResourceState; + barrier.StateAfter = newResourceState; + gpu->addResourceBarriers(this->resource(), 1, &barrier); this->updateResourceState(newResourceState); } diff --git a/src/gpu/d3d/GrD3DUtil.cpp b/src/gpu/d3d/GrD3DUtil.cpp index 521fd5d684dec..dd66b8355be09 100644 --- a/src/gpu/d3d/GrD3DUtil.cpp +++ b/src/gpu/d3d/GrD3DUtil.cpp @@ -21,11 +21,3 @@ bool GrDxgiFormatIsCompressed(DXGI_FORMAT format) { } SkUNREACHABLE; } - -SkImage::CompressionType GrDxgiFormatToCompressionType(DXGI_FORMAT format) { - switch (format) { - case DXGI_FORMAT_BC1_UNORM: return SkImage::CompressionType::kBC1_RGBA8_UNORM; - default: return SkImage::CompressionType::kNone; - } - SkUNREACHABLE; -} diff --git a/src/gpu/d3d/GrD3DUtil.h b/src/gpu/d3d/GrD3DUtil.h index b17f7a5dae86f..da161733e9fa5 100644 --- a/src/gpu/d3d/GrD3DUtil.h +++ b/src/gpu/d3d/GrD3DUtil.h @@ -13,16 +13,20 @@ #include "include/gpu/d3d/GrD3DTypes.h" #include "include/private/GrTypesPriv.h" +#define GR_D3D_CALL_ERRCHECK(X) \ + do { \ + HRESULT result = X; \ + SkASSERT(SUCCEEDED(result)); \ + if (!SUCCEEDED(result)) { \ + SkDebugf("Failed Direct3D call. Error: 0x%08x\n", result); \ + } \ + } while(false) + /** * Returns true if the format is compressed. */ bool GrDxgiFormatIsCompressed(DXGI_FORMAT); -/** - * Maps a dxgi format into the CompressionType enum if applicable. - */ -SkImage::CompressionType GrDxgiFormatToCompressionType(DXGI_FORMAT dxgiFormat); - static constexpr uint32_t GrDxgiFormatChannels(DXGI_FORMAT vkFormat) { switch (vkFormat) { case DXGI_FORMAT_R8G8B8A8_UNORM: return kRGBA_SkColorChannelFlags; diff --git a/src/gpu/dawn/GrDawnCaps.cpp b/src/gpu/dawn/GrDawnCaps.cpp index a7c5c26df3dc4..41b9fd851a418 100644 --- a/src/gpu/dawn/GrDawnCaps.cpp +++ b/src/gpu/dawn/GrDawnCaps.cpp @@ -38,10 +38,6 @@ bool GrDawnCaps::isFormatSRGB(const GrBackendFormat& format) const { return false; } -SkImage::CompressionType GrDawnCaps::compressionType(const GrBackendFormat& format) const { - return SkImage::CompressionType::kNone; -} - bool GrDawnCaps::isFormatTexturable(const GrBackendFormat& format) const { // Currently, all the formats in GrDawnFormatToPixelConfig are texturable. wgpu::TextureFormat dawnFormat; @@ -67,6 +63,7 @@ static GrSwizzle get_swizzle(const GrBackendFormat& format, GrColorType colorTyp if (!forOutput) { return GrSwizzle::RGB1(); } + break; default: return GrSwizzle::RGBA(); } @@ -95,6 +92,11 @@ GrCaps::SurfaceReadPixelsSupport GrDawnCaps::surfaceSupportsReadPixels( : SurfaceReadPixelsSupport::kUnsupported; } +bool GrDawnCaps::onSurfaceSupportsWritePixels(const GrSurface* surface) const { + // We currently support writePixels only to Textures and TextureRenderTargets. + return surface->asTexture() != nullptr; +} + size_t GrDawnCaps::bytesPerPixel(const GrBackendFormat& backendFormat) const { wgpu::TextureFormat dawnFormat; if (!backendFormat.asDawnFormat(&dawnFormat)) { @@ -129,7 +131,7 @@ GrBackendFormat GrDawnCaps::getBackendFormatFromCompressionType(SkImage::Compres return GrBackendFormat(); } -GrSwizzle GrDawnCaps::getReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const +GrSwizzle GrDawnCaps::onGetReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { return get_swizzle(format, colorType, false); } diff --git a/src/gpu/dawn/GrDawnCaps.h b/src/gpu/dawn/GrDawnCaps.h index e47e64bd2cce9..fc2f8b52ed251 100644 --- a/src/gpu/dawn/GrDawnCaps.h +++ b/src/gpu/dawn/GrDawnCaps.h @@ -18,7 +18,6 @@ class GrDawnCaps : public GrCaps { GrDawnCaps(const GrContextOptions& contextOptions); bool isFormatSRGB(const GrBackendFormat&) const override; - SkImage::CompressionType compressionType(const GrBackendFormat&) const override; bool isFormatRenderable(const GrBackendFormat& format, int sampleCount = 1) const override; @@ -47,8 +46,6 @@ class GrDawnCaps : public GrCaps { GrBackendFormat getBackendFormatFromCompressionType(SkImage::CompressionType) const override; - GrSwizzle getReadSwizzle(const GrBackendFormat&, GrColorType) const override; - GrSwizzle getWriteSwizzle(const GrBackendFormat&, GrColorType) const override; uint64_t computeFormatKey(const GrBackendFormat&) const override; @@ -60,9 +57,7 @@ class GrDawnCaps : public GrCaps { #endif private: - bool onSurfaceSupportsWritePixels(const GrSurface* surface) const override { - return true; - } + bool onSurfaceSupportsWritePixels(const GrSurface* surface) const override; bool onCanCopySurface(const GrSurfaceProxy* dst, const GrSurfaceProxy* src, const SkIRect& srcRect, const SkIPoint& dstPoint) const override { return true; @@ -77,6 +72,8 @@ class GrDawnCaps : public GrCaps { return { srcColorType, GrColorTypeBytesPerPixel(srcColorType) }; } + GrSwizzle onGetReadSwizzle(const GrBackendFormat&, GrColorType) const override; + typedef GrCaps INHERITED; }; diff --git a/src/gpu/dawn/GrDawnGpu.cpp b/src/gpu/dawn/GrDawnGpu.cpp index f4756e7b63a82..f35a2e7e630ca 100644 --- a/src/gpu/dawn/GrDawnGpu.cpp +++ b/src/gpu/dawn/GrDawnGpu.cpp @@ -10,6 +10,7 @@ #include "include/gpu/GrBackendSemaphore.h" #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContextOptions.h" +#include "src/gpu/GrDataUtils.h" #include "src/gpu/GrGeometryProcessor.h" #include "src/gpu/GrGpuResourceCacheAccess.h" #include "src/gpu/GrPipeline.h" @@ -92,7 +93,6 @@ static wgpu::AddressMode to_dawn_address_mode(GrSamplerState::WrapMode wrapMode) } SkASSERT(!"unsupported address mode"); return wgpu::AddressMode::ClampToEdge; - } sk_sp GrDawnGpu::Make(const wgpu::Device& device, @@ -124,13 +124,14 @@ GrDawnGpu::~GrDawnGpu() { } } - void GrDawnGpu::disconnect(DisconnectType type) { if (DisconnectType::kCleanup == type) { while (!this->busyStagingBuffers().isEmpty()) { fDevice.Tick(); } } + fQueue = nullptr; + fDevice = nullptr; INHERITED::disconnect(type); } @@ -357,7 +358,13 @@ bool GrDawnGpu::onUpdateBackendTexture(const GrBackendTexture& backendTexture, pixels = data->pixmap(0).addr(); } else { pixels = defaultStorage.get(); - memset(defaultStorage.get(), 0, baseLayerSize); + GrColorType colorType; + if (!GrDawnFormatToGrColorType(info.fFormat, &colorType)) { + return false; + } + SkISize size{backendTexture.width(), backendTexture.height()}; + GrImageInfo imageInfo(colorType, kUnpremul_SkAlphaType, nullptr, size); + GrClearImage(imageInfo, defaultStorage.get(), bpp * backendTexture.width(), data->color()); } wgpu::Device device = this->device(); wgpu::CommandEncoder copyEncoder = this->getCopyEncoder(); @@ -641,7 +648,6 @@ std::unique_ptr GrDawnGpu::prepareTextureForCrossContextUsage(GrTex sk_sp GrDawnGpu::getOrCreateRenderPipeline( GrRenderTarget* rt, const GrProgramInfo& programInfo) { - GrProgramDesc desc = this->caps()->makeDesc(rt, programInfo); if (!desc.isValid()) { return nullptr; diff --git a/src/gpu/dawn/GrDawnOpsRenderPass.cpp b/src/gpu/dawn/GrDawnOpsRenderPass.cpp index 1b0db7ade683b..ba4c73e77aceb 100644 --- a/src/gpu/dawn/GrDawnOpsRenderPass.cpp +++ b/src/gpu/dawn/GrDawnOpsRenderPass.cpp @@ -7,7 +7,6 @@ #include "src/gpu/dawn/GrDawnOpsRenderPass.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrPipeline.h" #include "src/gpu/GrRenderTargetPriv.h" @@ -148,20 +147,22 @@ bool GrDawnOpsRenderPass::onBindPipeline(const GrProgramInfo& programInfo, } void GrDawnOpsRenderPass::onSetScissorRect(const SkIRect& scissor) { - SkIRect rect; - SkIRect currentPipelineBounds = - SkIRect::MakeWH(fRenderTarget->width(), fRenderTarget->height()); - if (!rect.intersect(currentPipelineBounds, scissor)) { - rect = SkIRect::MakeEmpty(); - } - fPassEncoder.SetScissorRect(rect.x(), rect.y(), rect.width(), rect.height()); + // Higher-level GrRenderTargetContext and clips should have already ensured draw bounds are + // restricted to the render target. This is a sanity check. + SkASSERT(SkIRect::MakeSize(fRenderTarget->dimensions()).contains(scissor)); + auto nativeScissorRect = + GrNativeRect::MakeRelativeTo(fOrigin, fRenderTarget->height(), scissor); + fPassEncoder.SetScissorRect(nativeScissorRect.fX, nativeScissorRect.fY, + nativeScissorRect.fWidth, nativeScissorRect.fHeight); } bool GrDawnOpsRenderPass::onBindTextures(const GrPrimitiveProcessor& primProc, const GrSurfaceProxy* const primProcTextures[], const GrPipeline& pipeline) { auto bindGroup = fCurrentProgram->setTextures(fGpu, primProc, pipeline, primProcTextures); - fPassEncoder.SetBindGroup(1, bindGroup, 0, nullptr); + if (bindGroup) { + fPassEncoder.SetBindGroup(1, bindGroup, 0, nullptr); + } return true; } diff --git a/src/gpu/dawn/GrDawnProgramBuilder.cpp b/src/gpu/dawn/GrDawnProgramBuilder.cpp index 95d85fb75014d..99d53618f2e08 100644 --- a/src/gpu/dawn/GrDawnProgramBuilder.cpp +++ b/src/gpu/dawn/GrDawnProgramBuilder.cpp @@ -23,6 +23,12 @@ static SkSL::String sksl_to_spirv(const GrDawnGpu* gpu, const char* shaderString settings.fRTHeightOffset = rtHeightOffset; settings.fRTHeightBinding = 0; settings.fRTHeightSet = 0; +#ifdef SK_BUILD_FOR_WIN + // Work around the fact that D3D12 gives w in fragcoord.w, while the other APIs give 1/w. + // This difference may be better handled by Dawn, at which point this workaround can be removed. + // (See http://skbug.com/10475). + settings.fInverseW = true; +#endif std::unique_ptr program = gpu->shaderCompiler()->convertProgram( kind, shaderString, @@ -325,29 +331,32 @@ sk_sp GrDawnProgramBuilder::Build(GrDawnGpu* gpu, if (0 != uniformBufferSize) { uniformLayoutEntries.push_back({ GrSPIRVUniformHandler::kUniformBinding, wgpu::ShaderStage::Vertex | wgpu::ShaderStage::Fragment, - wgpu::BindingType::UniformBuffer}); + wgpu::BindingType::UniformBuffer }); } wgpu::BindGroupLayoutDescriptor uniformBindGroupLayoutDesc; uniformBindGroupLayoutDesc.entryCount = uniformLayoutEntries.size(); uniformBindGroupLayoutDesc.entries = uniformLayoutEntries.data(); - result->fBindGroupLayouts[0] = - gpu->device().CreateBindGroupLayout(&uniformBindGroupLayoutDesc); + result->fBindGroupLayouts.push_back( + gpu->device().CreateBindGroupLayout(&uniformBindGroupLayoutDesc)); uint32_t binding = 0; std::vector textureLayoutEntries; - for (int i = 0; i < builder.fUniformHandler.fSamplers.count(); ++i) { - textureLayoutEntries.push_back({ binding++, wgpu::ShaderStage::Fragment, - wgpu::BindingType::Sampler}); - textureLayoutEntries.push_back({ binding++, wgpu::ShaderStage::Fragment, - wgpu::BindingType::SampledTexture}); + int textureCount = builder.fUniformHandler.fSamplers.count(); + if (textureCount > 0) { + for (int i = 0; i < textureCount; ++i) { + textureLayoutEntries.push_back({ binding++, wgpu::ShaderStage::Fragment, + wgpu::BindingType::Sampler }); + textureLayoutEntries.push_back({ binding++, wgpu::ShaderStage::Fragment, + wgpu::BindingType::SampledTexture }); + } + wgpu::BindGroupLayoutDescriptor textureBindGroupLayoutDesc; + textureBindGroupLayoutDesc.entryCount = textureLayoutEntries.size(); + textureBindGroupLayoutDesc.entries = textureLayoutEntries.data(); + result->fBindGroupLayouts.push_back( + gpu->device().CreateBindGroupLayout(&textureBindGroupLayoutDesc)); } - wgpu::BindGroupLayoutDescriptor textureBindGroupLayoutDesc; - textureBindGroupLayoutDesc.entryCount = textureLayoutEntries.size(); - textureBindGroupLayoutDesc.entries = textureLayoutEntries.data(); - result->fBindGroupLayouts[1] = - gpu->device().CreateBindGroupLayout(&textureBindGroupLayoutDesc); wgpu::PipelineLayoutDescriptor pipelineLayoutDesc; - pipelineLayoutDesc.bindGroupLayoutCount = 2; - pipelineLayoutDesc.bindGroupLayouts = &result->fBindGroupLayouts[0]; + pipelineLayoutDesc.bindGroupLayoutCount = result->fBindGroupLayouts.size(); + pipelineLayoutDesc.bindGroupLayouts = result->fBindGroupLayouts.data(); auto pipelineLayout = gpu->device().CreatePipelineLayout(&pipelineLayoutDesc); result->fBuiltinUniformHandles = builder.fUniformHandles; const GrPipeline& pipeline = programInfo.pipeline(); @@ -365,9 +374,9 @@ sk_sp GrDawnProgramBuilder::Build(GrDawnGpu* gpu, std::vector vertexAttributes; const GrPrimitiveProcessor& primProc = programInfo.primProc(); + int i = 0; if (primProc.numVertexAttributes() > 0) { size_t offset = 0; - int i = 0; for (const auto& attrib : primProc.vertexAttributes()) { wgpu::VertexAttributeDescriptor attribute; attribute.shaderLocation = i; @@ -387,7 +396,6 @@ sk_sp GrDawnProgramBuilder::Build(GrDawnGpu* gpu, std::vector instanceAttributes; if (primProc.numInstanceAttributes() > 0) { size_t offset = 0; - int i = 0; for (const auto& attrib : primProc.instanceAttributes()) { wgpu::VertexAttributeDescriptor attribute; attribute.shaderLocation = i; @@ -519,8 +527,7 @@ wgpu::BindGroup GrDawnProgram::setUniformData(GrDawnGpu* gpu, const GrRenderTarg this->setRenderTargetState(renderTarget, programInfo.origin()); const GrPipeline& pipeline = programInfo.pipeline(); const GrPrimitiveProcessor& primProc = programInfo.primProc(); - GrFragmentProcessor::PipelineCoordTransformRange transformRange(pipeline); - fGeometryProcessor->setData(fDataManager, primProc, transformRange); + fGeometryProcessor->setData(fDataManager, primProc); GrFragmentProcessor::CIter fpIter(pipeline); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); for (; fpIter && glslIter; ++fpIter, ++glslIter) { @@ -543,6 +550,9 @@ wgpu::BindGroup GrDawnProgram::setTextures(GrDawnGpu* gpu, const GrPrimitiveProcessor& primProc, const GrPipeline& pipeline, const GrSurfaceProxy* const primProcTextures[]) { + if (fBindGroupLayouts.size() < 2) { + return nullptr; + } std::vector bindings; int binding = 0; if (primProcTextures) { diff --git a/src/gpu/dawn/GrDawnProgramBuilder.h b/src/gpu/dawn/GrDawnProgramBuilder.h index b4f75d4e05883..af707843b65ca 100644 --- a/src/gpu/dawn/GrDawnProgramBuilder.h +++ b/src/gpu/dawn/GrDawnProgramBuilder.h @@ -57,7 +57,7 @@ struct GrDawnProgram : public SkRefCnt { std::unique_ptr fXferProcessor; std::unique_ptr[]> fFragmentProcessors; int fFragmentProcessorCnt; - wgpu::BindGroupLayout fBindGroupLayouts[2]; + std::vector fBindGroupLayouts; wgpu::RenderPipeline fRenderPipeline; GrDawnProgramDataManager fDataManager; RenderTargetState fRenderTargetState; diff --git a/src/gpu/dawn/GrDawnUtil.cpp b/src/gpu/dawn/GrDawnUtil.cpp index 9f6daec00cc6b..91b155d8e766b 100644 --- a/src/gpu/dawn/GrDawnUtil.cpp +++ b/src/gpu/dawn/GrDawnUtil.cpp @@ -45,6 +45,22 @@ bool GrColorTypeToDawnFormat(GrColorType ct, wgpu::TextureFormat* format) { } } +bool GrDawnFormatToGrColorType(wgpu::TextureFormat format, GrColorType* colorType) { + switch (format) { + case wgpu::TextureFormat::RGBA8Unorm: + *colorType = GrColorType::kRGBA_8888; + return true; + case wgpu::TextureFormat::BGRA8Unorm: + *colorType = GrColorType::kBGRA_8888; + return true; + case wgpu::TextureFormat::R8Unorm: + *colorType = GrColorType::kR_8; + return true; + default: + return false; + } +} + size_t GrDawnRoundRowBytes(size_t rowBytes) { // Dawn requires that rowBytes be a multiple of 256. (This is actually imposed by D3D12.) return (rowBytes + 0xFF) & ~0xFF; diff --git a/src/gpu/dawn/GrDawnUtil.h b/src/gpu/dawn/GrDawnUtil.h index 7b5ac6c5715bc..6f090ffe4a1a2 100644 --- a/src/gpu/dawn/GrDawnUtil.h +++ b/src/gpu/dawn/GrDawnUtil.h @@ -14,6 +14,7 @@ size_t GrDawnBytesPerPixel(wgpu::TextureFormat format); bool GrDawnFormatIsRenderable(wgpu::TextureFormat format); bool GrColorTypeToDawnFormat(GrColorType colorType, wgpu::TextureFormat* format); +bool GrDawnFormatToGrColorType(wgpu::TextureFormat format, GrColorType* colorType); size_t GrDawnRoundRowBytes(size_t rowBytes); #if GR_TEST_UTILS const char* GrDawnFormatToStr(wgpu::TextureFormat format); diff --git a/src/gpu/effects/GrAARectEffect.fp b/src/gpu/effects/GrAARectEffect.fp index 856b761a0f595..6a66a69d7322f 100644 --- a/src/gpu/effects/GrAARectEffect.fp +++ b/src/gpu/effects/GrAARectEffect.fp @@ -5,12 +5,16 @@ * found in the LICENSE file. */ +in fragmentProcessor? inputFP; layout(key) in GrClipEdgeType edgeType; layout(ctype=SkRect) in float4 rect; layout(ctype=SkRect) float4 prevRect = float4(-1); uniform float4 rectUniform; -@optimizationFlags { kCompatibleWithCoverageAsAlpha_OptimizationFlag } +@optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag +} void main() { half alpha; @@ -37,7 +41,8 @@ void main() { @if (edgeType == GrClipEdgeType::kInverseFillBW || edgeType == GrClipEdgeType::kInverseFillAA) { alpha = 1.0 - alpha; } - sk_OutColor = sk_InColor * alpha; + half4 inputColor = sample(inputFP, sk_InColor); + sk_OutColor = inputColor * alpha; } @setData(pdman) { @@ -59,7 +64,7 @@ void main() { GrClipEdgeType edgeType = static_cast( d->fRandom->nextULessThan(kGrClipEdgeTypeCnt)); - fp = GrAARectEffect::Make(edgeType, rect); + fp = GrAARectEffect::Make(/*inputFP=*/nullptr, edgeType, rect); } while (nullptr == fp); return fp; } diff --git a/src/gpu/effects/GrAlphaThresholdFragmentProcessor.fp b/src/gpu/effects/GrAlphaThresholdFragmentProcessor.fp index 4373512fd40d8..24aaf921c7e4d 100644 --- a/src/gpu/effects/GrAlphaThresholdFragmentProcessor.fp +++ b/src/gpu/effects/GrAlphaThresholdFragmentProcessor.fp @@ -5,47 +5,19 @@ * found in the LICENSE file. */ -in uniform sampler2D mask; +in fragmentProcessor? inputFP; +in fragmentProcessor maskFP; in uniform half innerThreshold; in uniform half outerThreshold; -@class { - inline OptimizationFlags optFlags(float outerThreshold); -} - -@constructorParams { - const SkIRect& bounds -} - -@make { - static std::unique_ptr Make(GrSurfaceProxyView mask, - float innerThreshold, - float outerThreshold, - const SkIRect& bounds) { - return std::unique_ptr(new GrAlphaThresholdFragmentProcessor( - std::move(mask), innerThreshold, outerThreshold, bounds)); - } -} - -@coordTransform(mask) { - SkMatrix::Translate(SkIntToScalar(-bounds.x()), SkIntToScalar(-bounds.y())) -} - -@cpp { - inline GrFragmentProcessor::OptimizationFlags GrAlphaThresholdFragmentProcessor::optFlags( - float outerThreshold) { - if (outerThreshold >= 1.0) { - return kPreservesOpaqueInput_OptimizationFlag | - kCompatibleWithCoverageAsAlpha_OptimizationFlag; - } else { - return kCompatibleWithCoverageAsAlpha_OptimizationFlag; - } - } +@optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + ((outerThreshold >= 1.0) ? kPreservesOpaqueInput_OptimizationFlag : kNone_OptimizationFlags) } void main() { - half4 color = sk_InColor; - half4 mask_color = sample(mask, sk_TransformedCoords2D[0]); + half4 color = sample(inputFP, sk_InColor); + half4 mask_color = sample(maskFP); if (mask_color.a < 0.5) { if (color.a > outerThreshold) { half scale = outerThreshold / color.a; @@ -61,18 +33,15 @@ void main() { } @test(testData) { - auto [maskView, ct, at] = testData->randomAlphaOnlyView(); - // Make the inner and outer thresholds be in (0, 1) exclusive and be sorted correctly. - float innerThresh = testData->fRandom->nextUScalar1() * .99f + 0.005f; - float outerThresh = testData->fRandom->nextUScalar1() * .99f + 0.005f; - const int kMaxWidth = 1000; - const int kMaxHeight = 1000; - uint32_t width = testData->fRandom->nextULessThan(kMaxWidth); - uint32_t height = testData->fRandom->nextULessThan(kMaxHeight); - uint32_t x = testData->fRandom->nextULessThan(kMaxWidth - width); - uint32_t y = testData->fRandom->nextULessThan(kMaxHeight - height); - SkIRect bounds = SkIRect::MakeXYWH(x, y, width, height); + // Make the inner and outer thresholds be in [0, 1]. + float outerThresh = testData->fRandom->nextUScalar1(); + float innerThresh = testData->fRandom->nextUScalar1(); + std::unique_ptr inputChild, maskChild; + if (testData->fRandom->nextBool()) { + inputChild = GrProcessorUnitTest::MakeChildFP(testData); + } + maskChild = GrProcessorUnitTest::MakeChildFP(testData); - return GrAlphaThresholdFragmentProcessor::Make(std::move(maskView), innerThresh, outerThresh, - bounds); + return GrAlphaThresholdFragmentProcessor::Make(std::move(inputChild), std::move(maskChild), + innerThresh, outerThresh); } diff --git a/src/gpu/effects/GrBezierEffect.cpp b/src/gpu/effects/GrBezierEffect.cpp index 2fc715c70f293..e68f570cd0972 100644 --- a/src/gpu/effects/GrBezierEffect.cpp +++ b/src/gpu/effects/GrBezierEffect.cpp @@ -24,16 +24,12 @@ class GrGLConicEffect : public GrGLSLGeometryProcessor { const GrShaderCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { const GrConicEffect& ce = primProc.cast(); - if (!ce.viewMatrix().isIdentity() && - !SkMatrixPriv::CheapEqual(fViewMatrix, ce.viewMatrix())) - { - fViewMatrix = ce.viewMatrix(); - pdman.setSkMatrix(fViewMatrixUniform, fViewMatrix); - } + this->setTransform(pdman, fViewMatrixUniform, ce.viewMatrix(), &fViewMatrix); + this->setTransform(pdman, fLocalMatrixUniform, ce.localMatrix(), &fLocalMatrix); if (ce.color() != fColor) { pdman.set4fv(fColorUniform, 1, ce.color().vec()); @@ -44,26 +40,26 @@ class GrGLConicEffect : public GrGLSLGeometryProcessor { pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(ce.coverageScale())); fCoverageScale = ce.coverageScale(); } - this->setTransformDataHelper(ce.localMatrix(), pdman, transformRange); } private: SkMatrix fViewMatrix; + SkMatrix fLocalMatrix; SkPMColor4f fColor; uint8_t fCoverageScale; - GrClipEdgeType fEdgeType; UniformHandle fColorUniform; UniformHandle fCoverageScaleUniform; UniformHandle fViewMatrixUniform; + UniformHandle fLocalMatrixUniform; typedef GrGLSLGeometryProcessor INHERITED; }; GrGLConicEffect::GrGLConicEffect(const GrGeometryProcessor& processor) - : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(SK_PMColor4fILLEGAL), fCoverageScale(0xff) { - const GrConicEffect& ce = processor.cast(); - fEdgeType = ce.getEdgeType(); -} + : fViewMatrix(SkMatrix::InvalidMatrix()) + , fLocalMatrix(SkMatrix::InvalidMatrix()) + , fColor(SK_PMColor4fILLEGAL) + , fCoverageScale(0xff) {} void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; @@ -89,14 +85,10 @@ void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { gp.inPosition().name(), gp.viewMatrix(), &fViewMatrixUniform); - - // emit transforms with position - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - gp.inPosition().asShaderVar(), - gp.localMatrix(), - args.fFPCoordTransformHandler); + if (gp.usesLocalCoords()) { + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, gp.inPosition().asShaderVar(), + gp.localMatrix(), &fLocalMatrixUniform); + } // TODO: we should check on the number of bits float and half provide and use the smallest one // that suffices. Additionally we should assert that the upstream code only lets us get here if @@ -120,74 +112,31 @@ void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { fragBuilder->declAppend(gFM); fragBuilder->declAppend(func); - switch (fEdgeType) { - case GrClipEdgeType::kHairlineAA: { - fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn()); - fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn()); - fragBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", - dfdx.c_str(), - v.fsIn(), dklmdx.c_str(), - v.fsIn(), dklmdx.c_str(), - v.fsIn(), dklmdx.c_str()); - fragBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", - dfdy.c_str(), - v.fsIn(), dklmdy.c_str(), - v.fsIn(), dklmdy.c_str(), - v.fsIn(), dklmdy.c_str()); - fragBuilder->codeAppendf("%s = float2(%s, %s);", gF.c_str(), dfdx.c_str(), - dfdy.c_str()); - fragBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", - gFM.c_str(), gF.c_str(), gF.c_str()); - fragBuilder->codeAppendf("%s = %s.x*%s.x - %s.y*%s.z;", - func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v.fsIn()); - fragBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str()); - fragBuilder->codeAppendf("%s = half(%s / %s);", - edgeAlpha.c_str(), func.c_str(), gFM.c_str()); - fragBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);", - edgeAlpha.c_str(), edgeAlpha.c_str()); - // Add line below for smooth cubic ramp - // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*edgeAlpha);"); - break; - } - case GrClipEdgeType::kFillAA: { - fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn()); - fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn()); - fragBuilder->codeAppendf("%s =" - "2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", - dfdx.c_str(), - v.fsIn(), dklmdx.c_str(), - v.fsIn(), dklmdx.c_str(), - v.fsIn(), dklmdx.c_str()); - fragBuilder->codeAppendf("%s =" - "2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", - dfdy.c_str(), - v.fsIn(), dklmdy.c_str(), - v.fsIn(), dklmdy.c_str(), - v.fsIn(), dklmdy.c_str()); - fragBuilder->codeAppendf("%s = float2(%s, %s);", gF.c_str(), dfdx.c_str(), - dfdy.c_str()); - fragBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", - gFM.c_str(), gF.c_str(), gF.c_str()); - fragBuilder->codeAppendf("%s = %s.x * %s.x - %s.y * %s.z;", - func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v.fsIn()); - fragBuilder->codeAppendf("%s = half(%s / %s);", - edgeAlpha.c_str(), func.c_str(), gFM.c_str()); - fragBuilder->codeAppendf("%s = saturate(0.5 - %s);", - edgeAlpha.c_str(), edgeAlpha.c_str()); - // Add line below for smooth cubic ramp - // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*edgeAlpha);"); - break; - } - case GrClipEdgeType::kFillBW: { - fragBuilder->codeAppendf("%s = half(%s.x * %s.x - %s.y * %s.z);", - edgeAlpha.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v.fsIn()); - fragBuilder->codeAppendf("%s = half(%s < 0.0);", - edgeAlpha.c_str(), edgeAlpha.c_str()); - break; - } - default: - SK_ABORT("Shouldn't get here"); - } + fragBuilder->codeAppendf("%s = dFdx(%s.xyz);", dklmdx.c_str(), v.fsIn()); + fragBuilder->codeAppendf("%s = dFdy(%s.xyz);", dklmdy.c_str(), v.fsIn()); + fragBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", + dfdx.c_str(), + v.fsIn(), dklmdx.c_str(), + v.fsIn(), dklmdx.c_str(), + v.fsIn(), dklmdx.c_str()); + fragBuilder->codeAppendf("%s = 2.0 * %s.x * %s.x - %s.y * %s.z - %s.z * %s.y;", + dfdy.c_str(), + v.fsIn(), dklmdy.c_str(), + v.fsIn(), dklmdy.c_str(), + v.fsIn(), dklmdy.c_str()); + fragBuilder->codeAppendf("%s = float2(%s, %s);", gF.c_str(), dfdx.c_str(), + dfdy.c_str()); + fragBuilder->codeAppendf("%s = sqrt(dot(%s, %s));", + gFM.c_str(), gF.c_str(), gF.c_str()); + fragBuilder->codeAppendf("%s = %s.x*%s.x - %s.y*%s.z;", + func.c_str(), v.fsIn(), v.fsIn(), v.fsIn(), v.fsIn()); + fragBuilder->codeAppendf("%s = abs(%s);", func.c_str(), func.c_str()); + fragBuilder->codeAppendf("%s = half(%s / %s);", + edgeAlpha.c_str(), func.c_str(), gFM.c_str()); + fragBuilder->codeAppendf("%s = max(1.0 - %s, 0.0);", + edgeAlpha.c_str(), edgeAlpha.c_str()); + // Add line below for smooth cubic ramp + // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*edgeAlpha);"); // TODO should we really be doing this? if (gp.coverageScale() != 0xff) { @@ -210,8 +159,9 @@ void GrGLConicEffect::GenKey(const GrGeometryProcessor& gp, const GrConicEffect& ce = gp.cast(); uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; key |= 0xff != ce.coverageScale() ? 0x8 : 0x0; - key |= ce.usesLocalCoords() && ce.localMatrix().hasPerspective() ? 0x10 : 0x0; - key |= ComputePosKey(ce.viewMatrix()) << 5; + key |= ce.usesLocalCoords() ? 0x10 : 0x0; + key = AddMatrixKeys(key, ce.viewMatrix(), ce.usesLocalCoords() ? ce.localMatrix() + : SkMatrix::I()); b->add32(key); } @@ -231,15 +181,13 @@ GrGLSLPrimitiveProcessor* GrConicEffect::createGLSLInstance(const GrShaderCaps&) } GrConicEffect::GrConicEffect(const SkPMColor4f& color, const SkMatrix& viewMatrix, uint8_t coverage, - GrClipEdgeType edgeType, const SkMatrix& localMatrix, - bool usesLocalCoords) + const SkMatrix& localMatrix, bool usesLocalCoords) : INHERITED(kGrConicEffect_ClassID) , fColor(color) , fViewMatrix(viewMatrix) , fLocalMatrix(viewMatrix) , fUsesLocalCoords(usesLocalCoords) - , fCoverageScale(coverage) - , fEdgeType(edgeType) { + , fCoverageScale(coverage) { this->setVertexAttributes(kAttributes, SK_ARRAY_COUNT(kAttributes)); } @@ -249,17 +197,10 @@ GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrConicEffect); #if GR_TEST_UTILS GrGeometryProcessor* GrConicEffect::TestCreate(GrProcessorTestData* d) { - GrGeometryProcessor* gp; - do { - GrClipEdgeType edgeType = - static_cast( - d->fRandom->nextULessThan(kGrClipEdgeTypeCnt)); - gp = GrConicEffect::Make(d->allocator(), - SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), - GrTest::TestMatrix(d->fRandom), edgeType, *d->caps(), - GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); - } while (nullptr == gp); - return gp; + return GrConicEffect::Make(d->allocator(), + SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), + GrTest::TestMatrix(d->fRandom), *d->caps(), + GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); } #endif @@ -277,16 +218,12 @@ class GrGLQuadEffect : public GrGLSLGeometryProcessor { const GrShaderCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { const GrQuadEffect& qe = primProc.cast(); - if (!qe.viewMatrix().isIdentity() && - !SkMatrixPriv::CheapEqual(fViewMatrix, qe.viewMatrix())) - { - fViewMatrix = qe.viewMatrix(); - pdman.setSkMatrix(fViewMatrixUniform, fViewMatrix); - } + this->setTransform(pdman, fViewMatrixUniform, qe.viewMatrix(), &fViewMatrix); + this->setTransform(pdman, fLocalMatrixUniform, qe.localMatrix(), &fLocalMatrix); if (qe.color() != fColor) { pdman.set4fv(fColorUniform, 1, qe.color().vec()); @@ -297,26 +234,27 @@ class GrGLQuadEffect : public GrGLSLGeometryProcessor { pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(qe.coverageScale())); fCoverageScale = qe.coverageScale(); } - this->setTransformDataHelper(qe.localMatrix(), pdman, transformRange); } private: SkMatrix fViewMatrix; + SkMatrix fLocalMatrix; SkPMColor4f fColor; uint8_t fCoverageScale; - GrClipEdgeType fEdgeType; + UniformHandle fColorUniform; UniformHandle fCoverageScaleUniform; UniformHandle fViewMatrixUniform; + UniformHandle fLocalMatrixUniform; typedef GrGLSLGeometryProcessor INHERITED; }; GrGLQuadEffect::GrGLQuadEffect(const GrGeometryProcessor& processor) - : fViewMatrix(SkMatrix::InvalidMatrix()), fColor(SK_PMColor4fILLEGAL), fCoverageScale(0xff) { - const GrQuadEffect& ce = processor.cast(); - fEdgeType = ce.getEdgeType(); -} + : fViewMatrix(SkMatrix::InvalidMatrix()) + , fLocalMatrix(SkMatrix::InvalidMatrix()) + , fColor(SK_PMColor4fILLEGAL) + , fCoverageScale(0xff) {} void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; @@ -342,55 +280,24 @@ void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { gp.inPosition().name(), gp.viewMatrix(), &fViewMatrixUniform); - - // emit transforms with position - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - gp.inPosition().asShaderVar(), - gp.localMatrix(), - args.fFPCoordTransformHandler); + if (gp.usesLocalCoords()) { + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, gp.inPosition().asShaderVar(), + gp.localMatrix(), &fLocalMatrixUniform); + } fragBuilder->codeAppendf("half edgeAlpha;"); - switch (fEdgeType) { - case GrClipEdgeType::kHairlineAA: { - fragBuilder->codeAppendf("half2 duvdx = half2(dFdx(%s.xy));", v.fsIn()); - fragBuilder->codeAppendf("half2 duvdy = half2(dFdy(%s.xy));", v.fsIn()); - fragBuilder->codeAppendf("half2 gF = half2(2.0 * %s.x * duvdx.x - duvdx.y," - " 2.0 * %s.x * duvdy.x - duvdy.y);", - v.fsIn(), v.fsIn()); - fragBuilder->codeAppendf("edgeAlpha = half(%s.x * %s.x - %s.y);", - v.fsIn(), v.fsIn(), v.fsIn()); - fragBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / dot(gF, gF));"); - fragBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);"); - // Add line below for smooth cubic ramp - // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*edgeAlpha);"); - break; - } - case GrClipEdgeType::kFillAA: { - fragBuilder->codeAppendf("half2 duvdx = half2(dFdx(%s.xy));", v.fsIn()); - fragBuilder->codeAppendf("half2 duvdy = half2(dFdy(%s.xy));", v.fsIn()); - fragBuilder->codeAppendf("half2 gF = half2(2.0 * %s.x * duvdx.x - duvdx.y," - " 2.0 * %s.x * duvdy.x - duvdy.y);", - v.fsIn(), v.fsIn()); - fragBuilder->codeAppendf("edgeAlpha = half(%s.x * %s.x - %s.y);", - v.fsIn(), v.fsIn(), v.fsIn()); - fragBuilder->codeAppend("edgeAlpha = edgeAlpha / sqrt(dot(gF, gF));"); - fragBuilder->codeAppend("edgeAlpha = saturate(0.5 - edgeAlpha);"); - // Add line below for smooth cubic ramp - // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*edgeAlpha);"); - break; - } - case GrClipEdgeType::kFillBW: { - fragBuilder->codeAppendf("edgeAlpha = half(%s.x * %s.x - %s.y);", - v.fsIn(), v.fsIn(), v.fsIn()); - fragBuilder->codeAppend("edgeAlpha = half(edgeAlpha < 0.0);"); - break; - } - default: - SK_ABORT("Shouldn't get here"); - } + fragBuilder->codeAppendf("half2 duvdx = half2(dFdx(%s.xy));", v.fsIn()); + fragBuilder->codeAppendf("half2 duvdy = half2(dFdy(%s.xy));", v.fsIn()); + fragBuilder->codeAppendf("half2 gF = half2(2.0 * %s.x * duvdx.x - duvdx.y," + " 2.0 * %s.x * duvdy.x - duvdy.y);", + v.fsIn(), v.fsIn()); + fragBuilder->codeAppendf("edgeAlpha = half(%s.x * %s.x - %s.y);", + v.fsIn(), v.fsIn(), v.fsIn()); + fragBuilder->codeAppend("edgeAlpha = sqrt(edgeAlpha * edgeAlpha / dot(gF, gF));"); + fragBuilder->codeAppend("edgeAlpha = max(1.0 - edgeAlpha, 0.0);"); + // Add line below for smooth cubic ramp + // fragBuilder->codeAppend("edgeAlpha = edgeAlpha*edgeAlpha*(3.0-2.0*edgeAlpha);"); if (0xff != gp.coverageScale()) { const char* coverageScale; @@ -412,8 +319,9 @@ void GrGLQuadEffect::GenKey(const GrGeometryProcessor& gp, const GrQuadEffect& ce = gp.cast(); uint32_t key = ce.isAntiAliased() ? (ce.isFilled() ? 0x0 : 0x1) : 0x2; key |= ce.coverageScale() != 0xff ? 0x8 : 0x0; - key |= ce.usesLocalCoords() && ce.localMatrix().hasPerspective() ? 0x10 : 0x0; - key |= ComputePosKey(ce.viewMatrix()) << 5; + key |= ce.usesLocalCoords()? 0x10 : 0x0; + key = AddMatrixKeys(key, ce.viewMatrix(), ce.usesLocalCoords() ? ce.localMatrix() + : SkMatrix::I()); b->add32(key); } @@ -433,15 +341,13 @@ GrGLSLPrimitiveProcessor* GrQuadEffect::createGLSLInstance(const GrShaderCaps&) } GrQuadEffect::GrQuadEffect(const SkPMColor4f& color, const SkMatrix& viewMatrix, uint8_t coverage, - GrClipEdgeType edgeType, const SkMatrix& localMatrix, - bool usesLocalCoords) + const SkMatrix& localMatrix, bool usesLocalCoords) : INHERITED(kGrQuadEffect_ClassID) , fColor(color) , fViewMatrix(viewMatrix) , fLocalMatrix(localMatrix) , fUsesLocalCoords(usesLocalCoords) - , fCoverageScale(coverage) - , fEdgeType(edgeType) { + , fCoverageScale(coverage) { this->setVertexAttributes(kAttributes, SK_ARRAY_COUNT(kAttributes)); } @@ -451,15 +357,9 @@ GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrQuadEffect); #if GR_TEST_UTILS GrGeometryProcessor* GrQuadEffect::TestCreate(GrProcessorTestData* d) { - GrGeometryProcessor* gp; - do { - GrClipEdgeType edgeType = static_cast( - d->fRandom->nextULessThan(kGrClipEdgeTypeCnt)); - gp = GrQuadEffect::Make(d->allocator(), - SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), - GrTest::TestMatrix(d->fRandom), edgeType, *d->caps(), - GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); - } while (nullptr == gp); - return gp; + return GrQuadEffect::Make(d->allocator(), + SkPMColor4f::FromBytes_RGBA(GrRandomColor(d->fRandom)), + GrTest::TestMatrix(d->fRandom), *d->caps(), + GrTest::TestMatrix(d->fRandom), d->fRandom->nextBool()); } #endif diff --git a/src/gpu/effects/GrBezierEffect.h b/src/gpu/effects/GrBezierEffect.h index c59faebc5b34b..87d3721a120c6 100644 --- a/src/gpu/effects/GrBezierEffect.h +++ b/src/gpu/effects/GrBezierEffect.h @@ -61,25 +61,15 @@ class GrConicEffect : public GrGeometryProcessor { static GrGeometryProcessor* Make(SkArenaAlloc* arena, const SkPMColor4f& color, const SkMatrix& viewMatrix, - const GrClipEdgeType edgeType, const GrCaps& caps, const SkMatrix& localMatrix, bool usesLocalCoords, uint8_t coverage = 0xff) { - switch (edgeType) { - case GrClipEdgeType::kFillAA: // fall through - case GrClipEdgeType::kHairlineAA: - if (!caps.shaderCaps()->shaderDerivativeSupport()) { - return nullptr; - } - break; - case GrClipEdgeType::kFillBW: - break; - default: // kInverseFillBW or kInverseFillAA - return nullptr; + if (!caps.shaderCaps()->shaderDerivativeSupport()) { + return nullptr; } - return arena->make(color, viewMatrix, coverage, edgeType, localMatrix, + return arena->make(color, viewMatrix, coverage, localMatrix, usesLocalCoords); } @@ -89,9 +79,8 @@ class GrConicEffect : public GrGeometryProcessor { inline const Attribute& inPosition() const { return kAttributes[0]; } inline const Attribute& inConicCoeffs() const { return kAttributes[1]; } - inline bool isAntiAliased() const { return GrProcessorEdgeTypeIsAA(fEdgeType); } - inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); } - inline GrClipEdgeType getEdgeType() const { return fEdgeType; } + inline bool isAntiAliased() const { return true; } + inline bool isFilled() const { return false; } const SkPMColor4f& color() const { return fColor; } const SkMatrix& viewMatrix() const { return fViewMatrix; } const SkMatrix& localMatrix() const { return fLocalMatrix; } @@ -105,7 +94,7 @@ class GrConicEffect : public GrGeometryProcessor { private: friend class ::SkArenaAlloc; // for access to ctor - GrConicEffect(const SkPMColor4f&, const SkMatrix& viewMatrix, uint8_t coverage, GrClipEdgeType, + GrConicEffect(const SkPMColor4f&, const SkMatrix& viewMatrix, uint8_t coverage, const SkMatrix& localMatrix, bool usesLocalCoords); SkPMColor4f fColor; @@ -113,7 +102,6 @@ class GrConicEffect : public GrGeometryProcessor { SkMatrix fLocalMatrix; bool fUsesLocalCoords; uint8_t fCoverageScale; - GrClipEdgeType fEdgeType; static constexpr Attribute kAttributes[] = { {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}, {"inConicCoeffs", kFloat4_GrVertexAttribType, kHalf4_GrSLType} @@ -140,26 +128,15 @@ class GrQuadEffect : public GrGeometryProcessor { static GrGeometryProcessor* Make(SkArenaAlloc* arena, const SkPMColor4f& color, const SkMatrix& viewMatrix, - const GrClipEdgeType edgeType, const GrCaps& caps, const SkMatrix& localMatrix, bool usesLocalCoords, uint8_t coverage = 0xff) { - switch (edgeType) { - case GrClipEdgeType::kFillAA: // fall through - case GrClipEdgeType::kHairlineAA: - if (!caps.shaderCaps()->shaderDerivativeSupport()) { - return nullptr; - } - break; - case GrClipEdgeType::kFillBW: - break; - default: // kInverseFillBW and kInverseFillAA - return nullptr; + if (!caps.shaderCaps()->shaderDerivativeSupport()) { + return nullptr; } - return arena->make(color, viewMatrix, coverage, edgeType, - localMatrix, usesLocalCoords); + return arena->make(color, viewMatrix, coverage, localMatrix, usesLocalCoords); } ~GrQuadEffect() override; @@ -168,9 +145,8 @@ class GrQuadEffect : public GrGeometryProcessor { inline const Attribute& inPosition() const { return kAttributes[0]; } inline const Attribute& inHairQuadEdge() const { return kAttributes[1]; } - inline bool isAntiAliased() const { return GrProcessorEdgeTypeIsAA(fEdgeType); } - inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); } - inline GrClipEdgeType getEdgeType() const { return fEdgeType; } + inline bool isAntiAliased() const { return true; } + inline bool isFilled() const { return false; } const SkPMColor4f& color() const { return fColor; } const SkMatrix& viewMatrix() const { return fViewMatrix; } const SkMatrix& localMatrix() const { return fLocalMatrix; } @@ -184,7 +160,7 @@ class GrQuadEffect : public GrGeometryProcessor { private: friend class ::SkArenaAlloc; // for access to ctor - GrQuadEffect(const SkPMColor4f&, const SkMatrix& viewMatrix, uint8_t coverage, GrClipEdgeType, + GrQuadEffect(const SkPMColor4f&, const SkMatrix& viewMatrix, uint8_t coverage, const SkMatrix& localMatrix, bool usesLocalCoords); SkPMColor4f fColor; @@ -192,7 +168,6 @@ class GrQuadEffect : public GrGeometryProcessor { SkMatrix fLocalMatrix; bool fUsesLocalCoords; uint8_t fCoverageScale; - GrClipEdgeType fEdgeType; static constexpr Attribute kAttributes[] = { {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}, diff --git a/src/gpu/effects/GrBicubicEffect.cpp b/src/gpu/effects/GrBicubicEffect.cpp index ef9560e57e856..1df80066308c8 100644 --- a/src/gpu/effects/GrBicubicEffect.cpp +++ b/src/gpu/effects/GrBicubicEffect.cpp @@ -9,6 +9,7 @@ #include "src/core/SkMatrixPriv.h" #include "src/gpu/GrTexture.h" +#include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/effects/GrTextureEffect.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLProgramDataManager.h" @@ -26,45 +27,62 @@ void GrBicubicEffect::Impl::emitCode(EmitArgs& args) { const GrBicubicEffect& bicubicEffect = args.fFp.cast(); GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - SkString coords2D = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - bicubicEffect.sampleMatrix()); - /* - * Filter weights come from Don Mitchell & Arun Netravali's 'Reconstruction Filters in Computer - * Graphics', ACM SIGGRAPH Computer Graphics 22, 4 (Aug. 1988). - * ACM DL: http://dl.acm.org/citation.cfm?id=378514 - * Free : http://www.cs.utexas.edu/users/fussell/courses/cs384g/lectures/mitchell/Mitchell.pdf - * - * The authors define a family of cubic filters with two free parameters (B and C): - * - * { (12 - 9B - 6C)|x|^3 + (-18 + 12B + 6C)|x|^2 + (6 - 2B) if |x| < 1 - * k(x) = 1/6 { (-B - 6C)|x|^3 + (6B + 30C)|x|^2 + (-12B - 48C)|x| + (8B + 24C) if 1 <= |x| < 2 - * { 0 otherwise - * - * Various well-known cubic splines can be generated, and the authors select (1/3, 1/3) as their - * favorite overall spline - this is now commonly known as the Mitchell filter, and is the - * source of the specific weights below. - * - * This is SkSL, so the matrix is column-major (transposed from standard matrix notation). - */ - fragBuilder->codeAppend("half4x4 kMitchellCoefficients = half4x4(" - " 1.0 / 18.0, 16.0 / 18.0, 1.0 / 18.0, 0.0 / 18.0," - "-9.0 / 18.0, 0.0 / 18.0, 9.0 / 18.0, 0.0 / 18.0," - "15.0 / 18.0, -36.0 / 18.0, 27.0 / 18.0, -6.0 / 18.0," - "-7.0 / 18.0, 21.0 / 18.0, -21.0 / 18.0, 7.0 / 18.0);"); + if (bicubicEffect.fKernel == GrBicubicEffect::Kernel::kMitchell) { + /* + * Filter weights come from Don Mitchell & Arun Netravali's 'Reconstruction Filters in\ + * Computer * Graphics', ACM SIGGRAPH Computer Graphics 22, 4 (Aug. 1988). + * ACM DL: http://dl.acm.org/citation.cfm?id=378514 + * Free: + * http://www.cs.utexas.edu/users/fussell/courses/cs384g/lectures/mitchell/Mitchell.pdf + * + * The authors define a family of cubic filters with two free parameters (B and C): + * + * { (12 - 9B - 6C)|x|^3 + (-18 + 12B + 6C)|x|^2 + (6 - 2B) |x| < 1 + * k(x) = 1/6 { (-B - 6C)|x|^3 + (6B + 30C)|x|^2 + (-12B - 48C)|x| + (8B + 24C) 1 <= |x| < 2 + * { 0 otherwise + * + * Various well-known cubic splines can be generated, and the authors select (1/3, 1/3) as + * their favorite overall spline - this is now commonly known as the Mitchell filter, and + * is the source of the specific weights below. + * + * This is SkSL, so the matrix is column-major (transposed from standard matrix notation). + */ + fragBuilder->codeAppend( + "half4x4 kCoefficients = half4x4(" + " 1.0 / 18.0, 16.0 / 18.0, 1.0 / 18.0, 0.0 / 18.0," + "-9.0 / 18.0, 0.0 / 18.0, 9.0 / 18.0, 0.0 / 18.0," + "15.0 / 18.0, -36.0 / 18.0, 27.0 / 18.0, -6.0 / 18.0," + "-7.0 / 18.0, 21.0 / 18.0, -21.0 / 18.0, 7.0 / 18.0);"); + } else { + /* + * Centripetal variant of the Catmull-Rom spline. + * + * Catmull, Edwin; Rom, Raphael (1974). "A class of local interpolating splines". In + * Barnhill, Robert E.; Riesenfeld, Richard F. (eds.). Computer Aided Geometric Design. + * pp. 317–326. + */ + SkASSERT(bicubicEffect.fKernel == GrBicubicEffect::Kernel::kCatmullRom); + fragBuilder->codeAppend( + "half4x4 kCoefficients = 0.5 * half4x4(" + " 0, 2, 0, 0," + "-1, 0, 1, 0," + " 2, -5, 4, -1," + "-1, 3, -3, 1);"); + } // We determine our fractional offset (f) within the texel. We then snap coord to a texel // center. The snap prevents cases where the starting coords are near a texel boundary and // offsets with imperfect precision would cause us to skip/double hit a texel. // The use of "texel" above is somewhat abstract as we're sampling a child processor. It is // assumed the child processor represents something akin to a nearest neighbor sampled texture. if (bicubicEffect.fDirection == GrBicubicEffect::Direction::kXY) { - fragBuilder->codeAppendf("float2 coord = %s - float2(0.5);", coords2D.c_str()); + fragBuilder->codeAppendf("float2 coord = %s - float2(0.5);", args.fSampleCoord); fragBuilder->codeAppend("half2 f = half2(fract(coord));"); fragBuilder->codeAppend("coord += 0.5 - f;"); fragBuilder->codeAppend( - "half4 wx = kMitchellCoefficients * half4(1.0, f.x, f.x * f.x, f.x * f.x * f.x);"); + "half4 wx = kCoefficients * half4(1.0, f.x, f.x * f.x, f.x * f.x * f.x);"); fragBuilder->codeAppend( - "half4 wy = kMitchellCoefficients * half4(1.0, f.y, f.y * f.y, f.y * f.y * f.y);"); + "half4 wy = kCoefficients * half4(1.0, f.y, f.y * f.y, f.y * f.y * f.y);"); fragBuilder->codeAppend("half4 rowColors[4];"); for (int y = 0; y < 4; ++y) { for (int x = 0; x < 4; ++x) { @@ -83,18 +101,18 @@ void GrBicubicEffect::Impl::emitCode(EmitArgs& args) { "half4 bicubicColor = wy.x * s0 + wy.y * s1 + wy.z * s2 + wy.w * s3;"); } else { const char* d = bicubicEffect.fDirection == Direction::kX ? "x" : "y"; - fragBuilder->codeAppendf("float coord = %s.%s - 0.5;", coords2D.c_str(), d); + fragBuilder->codeAppendf("float coord = %s.%s - 0.5;", args.fSampleCoord, d); fragBuilder->codeAppend("half f = half(fract(coord));"); fragBuilder->codeAppend("coord += 0.5 - f;"); fragBuilder->codeAppend("half f2 = f * f;"); - fragBuilder->codeAppend("half4 w = kMitchellCoefficients * half4(1.0, f, f2, f2 * f);"); + fragBuilder->codeAppend("half4 w = kCoefficients * half4(1.0, f, f2, f2 * f);"); fragBuilder->codeAppend("half4 c[4];"); for (int i = 0; i < 4; ++i) { SkString coord; if (bicubicEffect.fDirection == Direction::kX) { - coord.printf("float2(coord + %d, %s.y)", i - 1, coords2D.c_str()); + coord.printf("float2(coord + %d, %s.y)", i - 1, args.fSampleCoord); } else { - coord.printf("float2(%s.x, coord + %d)", coords2D.c_str(), i - 1); + coord.printf("float2(%s.x, coord + %d)", args.fSampleCoord, i - 1); } auto childStr = this->invokeChild(0, args, SkSL::String(coord.c_str(), coord.size())); fragBuilder->codeAppendf("c[%d] = %s;", i, childStr.c_str()); @@ -119,11 +137,12 @@ void GrBicubicEffect::Impl::emitCode(EmitArgs& args) { std::unique_ptr GrBicubicEffect::Make(GrSurfaceProxyView view, SkAlphaType alphaType, const SkMatrix& matrix, + Kernel kernel, Direction direction) { auto fp = GrTextureEffect::Make(std::move(view), alphaType, SkMatrix::I()); auto clamp = kPremul_SkAlphaType == alphaType ? Clamp::kPremul : Clamp::kUnpremul; - return std::unique_ptr( - new GrBicubicEffect(std::move(fp), matrix, direction, clamp)); + return GrMatrixEffect::Make(matrix, std::unique_ptr( + new GrBicubicEffect(std::move(fp), kernel, direction, clamp))); } std::unique_ptr GrBicubicEffect::Make(GrSurfaceProxyView view, @@ -131,14 +150,15 @@ std::unique_ptr GrBicubicEffect::Make(GrSurfaceProxyView vi const SkMatrix& matrix, const GrSamplerState::WrapMode wrapX, const GrSamplerState::WrapMode wrapY, + Kernel kernel, Direction direction, const GrCaps& caps) { GrSamplerState sampler(wrapX, wrapY, GrSamplerState::Filter::kNearest); std::unique_ptr fp; fp = GrTextureEffect::Make(std::move(view), alphaType, SkMatrix::I(), sampler, caps); auto clamp = kPremul_SkAlphaType == alphaType ? Clamp::kPremul : Clamp::kUnpremul; - return std::unique_ptr( - new GrBicubicEffect(std::move(fp), matrix, direction, clamp)); + return GrMatrixEffect::Make(matrix, std::unique_ptr( + new GrBicubicEffect(std::move(fp), kernel, direction, clamp))); } std::unique_ptr GrBicubicEffect::MakeSubset( @@ -148,6 +168,7 @@ std::unique_ptr GrBicubicEffect::MakeSubset( const GrSamplerState::WrapMode wrapX, const GrSamplerState::WrapMode wrapY, const SkRect& subset, + Kernel kernel, Direction direction, const GrCaps& caps) { GrSamplerState sampler(wrapX, wrapY, GrSamplerState::Filter::kNearest); @@ -155,46 +176,46 @@ std::unique_ptr GrBicubicEffect::MakeSubset( fp = GrTextureEffect::MakeSubset( std::move(view), alphaType, SkMatrix::I(), sampler, subset, caps); auto clamp = kPremul_SkAlphaType == alphaType ? Clamp::kPremul : Clamp::kUnpremul; - return std::unique_ptr( - new GrBicubicEffect(std::move(fp), matrix, direction, clamp)); + return GrMatrixEffect::Make(matrix, std::unique_ptr( + new GrBicubicEffect(std::move(fp), kernel, direction, clamp))); } std::unique_ptr GrBicubicEffect::Make(std::unique_ptr fp, SkAlphaType alphaType, const SkMatrix& matrix, + Kernel kernel, Direction direction) { auto clamp = kPremul_SkAlphaType == alphaType ? Clamp::kPremul : Clamp::kUnpremul; - return std::unique_ptr( - new GrBicubicEffect(std::move(fp), matrix, direction, clamp)); + return GrMatrixEffect::Make(matrix, std::unique_ptr( + new GrBicubicEffect(std::move(fp), kernel, direction, clamp))); } GrBicubicEffect::GrBicubicEffect(std::unique_ptr fp, - const SkMatrix& matrix, + Kernel kernel, Direction direction, Clamp clamp) : INHERITED(kGrBicubicEffect_ClassID, ProcessorOptimizationFlags(fp.get())) - , fCoordTransform(matrix) + , fKernel(kernel) , fDirection(direction) , fClamp(clamp) { - fp->setSampledWithExplicitCoords(); - this->addCoordTransform(&fCoordTransform); - this->registerChildProcessor(std::move(fp)); + this->setUsesSampleCoordsDirectly(); + this->registerChild(std::move(fp), SkSL::SampleUsage::Explicit()); } GrBicubicEffect::GrBicubicEffect(const GrBicubicEffect& that) : INHERITED(kGrBicubicEffect_ClassID, that.optimizationFlags()) - , fCoordTransform(that.fCoordTransform) + , fKernel(that.fKernel) , fDirection(that.fDirection) , fClamp(that.fClamp) { - this->addCoordTransform(&fCoordTransform); - auto child = that.childProcessor(0).clone(); - child->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); + this->setUsesSampleCoordsDirectly(); + this->cloneAndRegisterAllChildProcessors(that); } void GrBicubicEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const { - uint32_t key = static_cast(fDirection) | (static_cast(fClamp) << 2); + uint32_t key = (static_cast(fKernel) << 0) + | (static_cast(fDirection) << 1) + | (static_cast(fClamp) << 3); b->add32(key); } @@ -225,6 +246,8 @@ std::unique_ptr GrBicubicEffect::TestCreate(GrProcessorTest direction = Direction::kXY; break; } + auto kernel = d->fRandom->nextBool() ? GrBicubicEffect::Kernel::kMitchell + : GrBicubicEffect::Kernel::kCatmullRom; auto m = GrTest::TestMatrix(d->fRandom); switch (d->fRandom->nextULessThan(3)) { case 0: { @@ -239,27 +262,28 @@ std::unique_ptr GrBicubicEffect::TestCreate(GrProcessorTest subset.fRight = d->fRandom->nextSScalar1() * view.width(); subset.fBottom = d->fRandom->nextSScalar1() * view.height(); subset.sort(); - return MakeSubset( - std::move(view), at, m, wm[0], wm[1], subset, direction, *d->caps()); + return MakeSubset(std::move(view), + at, + m, + wm[0], + wm[1], + subset, + kernel, + direction, + *d->caps()); } - return Make(std::move(view), at, m, wm[0], wm[1], direction, *d->caps()); + return Make(std::move(view), at, m, wm[0], wm[1], kernel, direction, *d->caps()); } case 1: { auto [view, ct, at] = d->randomView(); - return Make(std::move(view), at, m, direction); + return Make(std::move(view), at, m, kernel, direction); } default: { SkAlphaType at; do { at = static_cast(d->fRandom->nextULessThan(kLastEnum_SkAlphaType + 1)); - } while (at != kUnknown_SkAlphaType); - std::unique_ptr fp; - // We have a restriction that explicit coords only work for FPs with zero or one - // coord transform. - do { - fp = GrProcessorUnitTest::MakeChildFP(d); - } while (fp->numCoordTransforms() > 1); - return Make(std::move(fp), at, m, direction); + } while (at == kUnknown_SkAlphaType); + return Make(GrProcessorUnitTest::MakeChildFP(d), at, m, kernel, direction); } } } diff --git a/src/gpu/effects/GrBicubicEffect.h b/src/gpu/effects/GrBicubicEffect.h index d719ef9280057..b9b420caebe48 100644 --- a/src/gpu/effects/GrBicubicEffect.h +++ b/src/gpu/effects/GrBicubicEffect.h @@ -19,6 +19,11 @@ class GrBicubicEffect : public GrFragmentProcessor { // surrounding texels are needed by the kernel in x and y. }; + enum class Kernel { + kMitchell, + kCatmullRom, + }; + enum class Direction { /** Apply bicubic kernel in local coord x, nearest neighbor in y. */ kX, @@ -35,26 +40,28 @@ class GrBicubicEffect : public GrFragmentProcessor { } /** - * Create a Mitchell filter effect with specified texture matrix with clamp wrap mode. + * Create a bicubic filter effect with specified texture matrix with clamp wrap mode. */ static std::unique_ptr Make(GrSurfaceProxyView view, SkAlphaType, const SkMatrix&, - Direction direction); + Kernel, + Direction); /** - * Create a Mitchell filter effect for a texture with arbitrary wrap modes. + * Create a bicubic filter effect for a texture with arbitrary wrap modes. */ static std::unique_ptr Make(GrSurfaceProxyView view, SkAlphaType, const SkMatrix&, const GrSamplerState::WrapMode wrapX, const GrSamplerState::WrapMode wrapY, + Kernel, Direction, const GrCaps&); /** - * Create a Mitchell filter effect for a subset of a texture, specified by a texture coordinate + * Create a bicubic filter effect for a subset of a texture, specified by a texture coordinate * rectangle subset. The WrapModes apply to the subset. */ static std::unique_ptr MakeSubset(GrSurfaceProxyView view, @@ -63,16 +70,18 @@ class GrBicubicEffect : public GrFragmentProcessor { const GrSamplerState::WrapMode wrapX, const GrSamplerState::WrapMode wrapY, const SkRect& subset, + Kernel, Direction, const GrCaps&); /** - * Make a Mitchell filter of a another fragment processor. The bicubic filter assumes that the + * Make a bicubic filter of a another fragment processor. The bicubic filter assumes that the * discrete samples of the provided processor are at half-integer coords. */ static std::unique_ptr Make(std::unique_ptr, SkAlphaType, const SkMatrix&, + Kernel, Direction); /** @@ -93,7 +102,10 @@ class GrBicubicEffect : public GrFragmentProcessor { kPremul, // clamps a to 0..1 and rgb to 0..a }; - GrBicubicEffect(std::unique_ptr, const SkMatrix&, Direction, Clamp); + GrBicubicEffect(std::unique_ptr, + Kernel, + Direction, + Clamp); explicit GrBicubicEffect(const GrBicubicEffect&); @@ -105,7 +117,7 @@ class GrBicubicEffect : public GrFragmentProcessor { SkPMColor4f constantOutputForConstantInput(const SkPMColor4f&) const override; - GrCoordTransform fCoordTransform; + Kernel fKernel; Direction fDirection; Clamp fClamp; diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp index 87612127b20c0..11768d00d61df 100644 --- a/src/gpu/effects/GrBitmapTextGeoProc.cpp +++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp @@ -20,7 +20,10 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { public: - GrGLBitmapTextGeoProc() : fColor(SK_PMColor4fILLEGAL), fAtlasDimensions{0,0} {} + GrGLBitmapTextGeoProc() + : fColor(SK_PMColor4fILLEGAL) + , fAtlasDimensions{0,0} + , fLocalMatrix(SkMatrix::InvalidMatrix()) {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override { const GrBitmapTextGeoProc& btgp = args.fGP.cast(); @@ -53,14 +56,8 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { // Setup position gpArgs->fPositionVar = btgp.inPosition().asShaderVar(); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - btgp.inPosition().asShaderVar(), - btgp.localMatrix(), - args.fFPCoordTransformHandler); + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, btgp.inPosition().asShaderVar(), + btgp.localMatrix(), &fLocalMatrixUniform); fragBuilder->codeAppend("half4 texColor;"); append_multitexture_lookup(args, btgp.numTextureSamplers(), @@ -75,8 +72,7 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { } } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp) override { const GrBitmapTextGeoProc& btgp = gp.cast(); if (btgp.color() != fColor && !btgp.hasVertexColor()) { pdman.set4fv(fColorUniform, 1, btgp.color().vec()); @@ -92,7 +88,8 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { 1.0f / atlasDimensions.fHeight); fAtlasDimensions = atlasDimensions; } - this->setTransformDataHelper(btgp.localMatrix(), pdman, transformRange); + + this->setTransform(pdman, fLocalMatrixUniform, btgp.localMatrix(), &fLocalMatrix); } static inline void GenKey(const GrGeometryProcessor& proc, @@ -102,6 +99,7 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { uint32_t key = 0; key |= btgp.usesW() ? 0x1 : 0x0; key |= btgp.maskFormat() << 1; + key |= ComputeMatrixKey(btgp.localMatrix()) << 2; b->add32(key); b->add32(btgp.numTextureSamplers()); } @@ -113,6 +111,9 @@ class GrGLBitmapTextGeoProc : public GrGLSLGeometryProcessor { SkISize fAtlasDimensions; UniformHandle fAtlasDimensionsInvUniform; + SkMatrix fLocalMatrix; + UniformHandle fLocalMatrixUniform; + typedef GrGLSLGeometryProcessor INHERITED; }; diff --git a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.fp b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.fp index 6126c7d5f6e7d..f5fde01854412 100644 --- a/src/gpu/effects/GrBlurredEdgeFragmentProcessor.fp +++ b/src/gpu/effects/GrBlurredEdgeFragmentProcessor.fp @@ -10,10 +10,12 @@ enum class Mode { kSmoothStep = 1 }; +in fragmentProcessor? inputFP; layout(key) in Mode mode; void main() { - half factor = 1.0 - sk_InColor.a; + half inputAlpha = sample(inputFP, sk_InColor).a; + half factor = 1.0 - inputAlpha; @switch (mode) { case Mode::kGaussian: factor = half(exp(-factor * factor * 4.0) - 0.018); diff --git a/src/gpu/effects/GrCircleBlurFragmentProcessor.fp b/src/gpu/effects/GrCircleBlurFragmentProcessor.fp index 12eaeb6e24a67..3c9e8f861ce3c 100644 --- a/src/gpu/effects/GrCircleBlurFragmentProcessor.fp +++ b/src/gpu/effects/GrCircleBlurFragmentProcessor.fp @@ -5,10 +5,15 @@ * found in the LICENSE file. */ +in fragmentProcessor? inputFP; in half4 circleRect; -in half textureRadius; in half solidRadius; -in uniform sampler2D blurProfileSampler; +in half textureRadius; +in fragmentProcessor blurProfile; + +@header { + #include "src/gpu/effects/GrTextureEffect.h" +}; // The data is formatted as: // x, y - the center of the circle @@ -17,12 +22,14 @@ in uniform sampler2D blurProfileSampler; uniform half4 circleData; @optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & kCompatibleWithCoverageAsAlpha_OptimizationFlag } @make { - static std::unique_ptr Make(GrRecordingContext*, - const SkRect& circle, float sigma); + static std::unique_ptr Make(std::unique_ptr inputFP, + GrRecordingContext*, const SkRect& circle, + float sigma); } @setData(data) { @@ -32,7 +39,7 @@ uniform half4 circleData; @cpp { #include "include/gpu/GrContext.h" - #include "include/private/GrRecordingContext.h" + #include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -188,13 +195,14 @@ uniform half4 circleData; profile[profileWidth - 1] = 0; } - static GrSurfaceProxyView create_profile_texture(GrRecordingContext* context, + static std::unique_ptr create_profile_effect(GrRecordingContext* context, const SkRect& circle, float sigma, - float* solidRadius, float* textureRadius) { + float* solidRadius, + float* textureRadius) { float circleR = circle.width() / 2.0f; if (circleR < SK_ScalarNearlyZero) { - return {}; + return nullptr; } // Profile textures are cached by the ratio of sigma to circle radius and by the size of the // profile texture (binned by powers of 2). @@ -224,6 +232,12 @@ uniform half4 circleData; *textureRadius = circleR + 3 * sigma; } + static constexpr int kProfileTextureWidth = 512; + // This would be kProfileTextureWidth/textureRadius if it weren't for the fact that we do + // the calculation of the profile coord in a coord space that has already been scaled by + // 1 / textureRadius. This is done to avoid overflow in length(). + SkMatrix texM = SkMatrix::Scale(kProfileTextureWidth, 1.f); + static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); GrUniqueKey key; GrUniqueKey::Builder builder(&key, kDomain, 1, "1-D Circular Blur"); @@ -234,14 +248,14 @@ uniform half4 circleData; if (sk_sp blurProfile = proxyProvider->findOrCreateProxyByUniqueKey(key)) { GrSwizzle swizzle = context->priv().caps()->getReadSwizzle(blurProfile->backendFormat(), GrColorType::kAlpha_8); - return {std::move(blurProfile), kTopLeft_GrSurfaceOrigin, swizzle}; + GrSurfaceProxyView profileView{std::move(blurProfile), kTopLeft_GrSurfaceOrigin, + swizzle}; + return GrTextureEffect::Make(std::move(profileView), kPremul_SkAlphaType, texM); } - static constexpr int kProfileTextureWidth = 512; - SkBitmap bm; if (!bm.tryAllocPixels(SkImageInfo::MakeA8(kProfileTextureWidth, 1))) { - return {}; + return nullptr; } if (useHalfPlaneApprox) { @@ -256,40 +270,42 @@ uniform half4 circleData; bm.setImmutable(); GrBitmapTextureMaker maker(context, bm, GrImageTexGenPolicy::kNew_Uncached_Budgeted); - auto blurView = maker.view(GrMipMapped::kNo); - if (!blurView) { - return {}; + auto profileView = maker.view(GrMipMapped::kNo); + if (!profileView) { + return nullptr; } - proxyProvider->assignUniqueKeyToProxy(key, blurView.asTextureProxy()); - return blurView; + proxyProvider->assignUniqueKeyToProxy(key, profileView.asTextureProxy()); + return GrTextureEffect::Make(std::move(profileView), kPremul_SkAlphaType, texM); } std::unique_ptr GrCircleBlurFragmentProcessor::Make( - GrRecordingContext* context, const SkRect& circle, float sigma) { + std::unique_ptr inputFP, GrRecordingContext* context, + const SkRect& circle, float sigma) { float solidRadius; float textureRadius; - GrSurfaceProxyView profile = create_profile_texture(context, circle, sigma, + std::unique_ptr profile = create_profile_effect(context, circle, sigma, &solidRadius, &textureRadius); if (!profile) { return nullptr; } return std::unique_ptr(new GrCircleBlurFragmentProcessor( - circle, textureRadius, solidRadius, std::move(profile))); + std::move(inputFP), circle, solidRadius, textureRadius, std::move(profile))); } } void main() { // We just want to compute "(length(vec) - circleData.z + 0.5) * circleData.w" but need to - // rearrange for precision. - half2 vec = half2(half((sk_FragCoord.x - circleData.x) * circleData.w), - half((sk_FragCoord.y - circleData.y) * circleData.w)); + // rearrange to avoid passing large values to length() that would overflow. + half2 vec = half2((sk_FragCoord.xy - circleData.xy) * circleData.w); half dist = length(vec) + (0.5 - circleData.z) * circleData.w; - sk_OutColor = sk_InColor * sample(blurProfileSampler, half2(dist, 0.5)).a; + half4 inputColor = sample(inputFP, sk_InColor); + sk_OutColor = inputColor * sample(blurProfile, half2(dist, 0.5)).a; } @test(testData) { SkScalar wh = testData->fRandom->nextRangeScalar(100.f, 1000.f); - SkScalar sigma = testData->fRandom->nextRangeF(1.f,10.f); + SkScalar sigma = testData->fRandom->nextRangeF(1.f, 10.f); SkRect circle = SkRect::MakeWH(wh, wh); - return GrCircleBlurFragmentProcessor::Make(testData->context(), circle, sigma); + return GrCircleBlurFragmentProcessor::Make(/*inputFP=*/nullptr, testData->context(), + circle, sigma); } diff --git a/src/gpu/effects/GrCircleEffect.fp b/src/gpu/effects/GrCircleEffect.fp index ac06c7c47bac0..00c6733a7134c 100644 --- a/src/gpu/effects/GrCircleEffect.fp +++ b/src/gpu/effects/GrCircleEffect.fp @@ -5,6 +5,7 @@ * found in the LICENSE file. */ +in fragmentProcessor? inputFP; layout(key) in GrClipEdgeType edgeType; in float2 center; in float radius; @@ -16,18 +17,22 @@ float prevRadius = -1; uniform float4 circle; @make { - static std::unique_ptr Make(GrClipEdgeType edgeType, SkPoint center, - float radius) { + static GrFPResult Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, SkPoint center, float radius) { // A radius below half causes the implicit insetting done by this processor to become // inverted. We could handle this case by making the processor code more complicated. if (radius < .5f && GrProcessorEdgeTypeIsInverseFill(edgeType)) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } - return std::unique_ptr(new GrCircleEffect(edgeType, center, radius)); + return GrFPSuccess(std::unique_ptr( + new GrCircleEffect(std::move(inputFP), edgeType, center, radius))); } } -@optimizationFlags { kCompatibleWithCoverageAsAlpha_OptimizationFlag } +@optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag +} @setData(pdman) { if (radius != prevRadius || center != prevCenter) { @@ -57,12 +62,12 @@ void main() { } else { d = half((1.0 - length((circle.xy - sk_FragCoord.xy) * circle.w)) * circle.z); } + half4 inputColor = sample(inputFP, sk_InColor); @if (edgeType == GrClipEdgeType::kFillAA || - edgeType == GrClipEdgeType::kInverseFillAA || - edgeType == GrClipEdgeType::kHairlineAA) { - sk_OutColor = sk_InColor * saturate(d); + edgeType == GrClipEdgeType::kInverseFillAA) { + sk_OutColor = inputColor * saturate(d); } else { - sk_OutColor = d > 0.5 ? sk_InColor : half4(0); + sk_OutColor = d > 0.5 ? inputColor : half4(0); } } @@ -71,9 +76,11 @@ void main() { center.fX = testData->fRandom->nextRangeScalar(0.f, 1000.f); center.fY = testData->fRandom->nextRangeScalar(0.f, 1000.f); SkScalar radius = testData->fRandom->nextRangeF(1.f, 1000.f); - GrClipEdgeType et; + bool success; + std::unique_ptr fp; do { - et = (GrClipEdgeType) testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt); - } while (GrClipEdgeType::kHairlineAA == et); - return GrCircleEffect::Make(et, center, radius); + GrClipEdgeType et = (GrClipEdgeType)testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt); + std::tie(success, fp) = GrCircleEffect::Make(/*inputFP=*/nullptr, et, center, radius); + } while (!success); + return fp; } diff --git a/src/gpu/effects/GrClampFragmentProcessor.fp b/src/gpu/effects/GrClampFragmentProcessor.fp index f81fe08de7ef3..ed6771cbb5d2b 100644 --- a/src/gpu/effects/GrClampFragmentProcessor.fp +++ b/src/gpu/effects/GrClampFragmentProcessor.fp @@ -5,24 +5,30 @@ * found in the LICENSE file. */ +in fragmentProcessor? inputFP; layout(key) in bool clampToPremul; @optimizationFlags { - kConstantOutputForConstantInput_OptimizationFlag | - kPreservesOpaqueInput_OptimizationFlag + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + (kConstantOutputForConstantInput_OptimizationFlag | + kPreservesOpaqueInput_OptimizationFlag) } void main() { + half4 inputColor = sample(inputFP, sk_InColor); @if (clampToPremul) { - half alpha = saturate(sk_InColor.a); - sk_OutColor = half4(clamp(sk_InColor.rgb, 0, alpha), alpha); + half alpha = saturate(inputColor.a); + sk_OutColor = half4(clamp(inputColor.rgb, 0, alpha), alpha); } else { - sk_OutColor = saturate(sk_InColor); + sk_OutColor = saturate(inputColor); } } @class { - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f input = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(0), inColor) + : inColor; float clampedAlpha = SkTPin(input.fA, 0.f, 1.f); float clampVal = clampToPremul ? clampedAlpha : 1.f; return {SkTPin(input.fR, 0.f, clampVal), @@ -33,5 +39,5 @@ void main() { } @test(d) { - return GrClampFragmentProcessor::Make(d->fRandom->nextBool()); + return GrClampFragmentProcessor::Make(/*inputFP=*/nullptr, d->fRandom->nextBool()); } diff --git a/src/gpu/effects/GrColorMatrixFragmentProcessor.fp b/src/gpu/effects/GrColorMatrixFragmentProcessor.fp index dfe4906ff5cd8..5e07a1485951d 100644 --- a/src/gpu/effects/GrColorMatrixFragmentProcessor.fp +++ b/src/gpu/effects/GrColorMatrixFragmentProcessor.fp @@ -5,6 +5,7 @@ * found in the LICENSE file. */ +in fragmentProcessor? inputFP; layout(ctype=SkM44, tracked) in uniform half4x4 m; layout(ctype=SkV4, tracked) in uniform half4 v; layout(key) in bool unpremulInput; @@ -12,11 +13,12 @@ layout(key) in bool clampRGBOutput; layout(key) in bool premulOutput; @optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & kConstantOutputForConstantInput_OptimizationFlag } void main() { - half4 inputColor = sk_InColor; + half4 inputColor = sample(inputFP, sk_InColor); @if (unpremulInput) { inputColor = unpremul(inputColor); } @@ -32,7 +34,10 @@ void main() { } @class { - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f input = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(0), inColor) + : inColor; SkColor4f color; if (unpremulInput) { color = input.unpremul(); @@ -59,7 +64,9 @@ void main() { } @make { - static std::unique_ptr Make(const float matrix[20], bool unpremulInput, bool clampRGBOutput, bool premulOutput) { + static std::unique_ptr Make(std::unique_ptr inputFP, + const float matrix[20], bool unpremulInput, + bool clampRGBOutput, bool premulOutput) { SkM44 m44( matrix[ 0], matrix[ 1], matrix[ 2], matrix[ 3], matrix[ 5], matrix[ 6], matrix[ 7], matrix[ 8], @@ -67,7 +74,8 @@ void main() { matrix[15], matrix[16], matrix[17], matrix[18] ); SkV4 v4 = {matrix[4], matrix[9], matrix[14], matrix[19]}; - return std::unique_ptr(new GrColorMatrixFragmentProcessor(m44, v4, unpremulInput, clampRGBOutput, premulOutput)); + return std::unique_ptr(new GrColorMatrixFragmentProcessor( + std::move(inputFP), m44, v4, unpremulInput, clampRGBOutput, premulOutput)); } } @@ -79,5 +87,5 @@ void main() { bool unpremul = d->fRandom->nextBool(); bool clampRGB = d->fRandom->nextBool(); bool premul = d->fRandom->nextBool(); - return Make(m, unpremul, clampRGB, premul); + return Make(/*inputFP=*/nullptr, m, unpremul, clampRGB, premul); } diff --git a/src/gpu/effects/GrConstColorProcessor.fp b/src/gpu/effects/GrConstColorProcessor.fp index 18cc91a4b12d7..950705c4f0a83 100644 --- a/src/gpu/effects/GrConstColorProcessor.fp +++ b/src/gpu/effects/GrConstColorProcessor.fp @@ -13,51 +13,60 @@ enum class InputMode { kLast = kModulateA }; +in fragmentProcessor? inputFP; layout(ctype=SkPMColor4f, tracked) in uniform half4 color; layout(key) in InputMode mode; @optimizationFlags { - OptFlags(color, mode) + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + (kConstantOutputForConstantInput_OptimizationFlag | + ((mode != InputMode::kIgnore) ? kCompatibleWithCoverageAsAlpha_OptimizationFlag + : kNone_OptimizationFlags) | + ((color.isOpaque()) ? kPreservesOpaqueInput_OptimizationFlag + : kNone_OptimizationFlags)) } void main() { @switch (mode) { - case InputMode::kIgnore: + case InputMode::kIgnore: { sk_OutColor = color; break; - case InputMode::kModulateRGBA: - sk_OutColor = sk_InColor * color; + } + case InputMode::kModulateRGBA: { + half4 inputColor = sample(inputFP, sk_InColor); + sk_OutColor = inputColor * color; break; - case InputMode::kModulateA: - sk_OutColor = sk_InColor.a * color; + } + case InputMode::kModulateA: { + half inputAlpha = sample(inputFP, sk_InColor).a; + sk_OutColor = inputAlpha * color; break; + } } } @class { static const int kInputModeCnt = (int) InputMode::kLast + 1; - static OptimizationFlags OptFlags(const SkPMColor4f& color, InputMode mode) { - OptimizationFlags flags = kConstantOutputForConstantInput_OptimizationFlag; - if (mode != InputMode::kIgnore) { - flags |= kCompatibleWithCoverageAsAlpha_OptimizationFlag; - } - if (color.isOpaque()) { - flags |= kPreservesOpaqueInput_OptimizationFlag; - } - return flags; - } - - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { switch (mode) { - case InputMode::kIgnore: + case InputMode::kIgnore: { return color; - case InputMode::kModulateA: + } + case InputMode::kModulateA: { + SkPMColor4f input = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(inputFP_index), inColor) + : inColor; return color * input.fA; - case InputMode::kModulateRGBA: + } + case InputMode::kModulateRGBA: { + SkPMColor4f input = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(inputFP_index), inColor) + : inColor; return color * input; + } } - SK_ABORT("Unexpected mode"); + SkUNREACHABLE; } } @@ -82,5 +91,5 @@ void main() { break; } InputMode mode = static_cast(d->fRandom->nextULessThan(kInputModeCnt)); - return GrConstColorProcessor::Make(color, mode); + return GrConstColorProcessor::Make(/*inputFP=*/nullptr, color, mode); } diff --git a/src/gpu/effects/GrConvexPolyEffect.cpp b/src/gpu/effects/GrConvexPolyEffect.cpp index 82de90ec6db98..70f2fe443f2b1 100644 --- a/src/gpu/effects/GrConvexPolyEffect.cpp +++ b/src/gpu/effects/GrConvexPolyEffect.cpp @@ -66,7 +66,12 @@ void GrGLConvexPolyEffect::emitCode(EmitArgs& args) { if (GrProcessorEdgeTypeIsInverseFill(cpe.getEdgeType())) { fragBuilder->codeAppend("\talpha = 1.0 - alpha;\n"); } - fragBuilder->codeAppendf("\t%s = %s * alpha;\n", args.fOutputColor, args.fInputColor); + + SkString inputSample = cpe.hasInputFP() + ? this->invokeChild(/*childIndex=*/0, args.fInputColor, args) + : SkString(args.fInputColor); + + fragBuilder->codeAppendf("\t%s = %s * alpha;\n", args.fOutputColor, inputSample.c_str()); } void GrGLConvexPolyEffect::onSetData(const GrGLSLProgramDataManager& pdman, @@ -89,14 +94,10 @@ void GrGLConvexPolyEffect::GenKey(const GrProcessor& processor, const GrShaderCa ////////////////////////////////////////////////////////////////////////////// -std::unique_ptr GrConvexPolyEffect::Make(GrClipEdgeType type, - const SkPath& path) { - if (GrClipEdgeType::kHairlineAA == type) { - return nullptr; - } - if (path.getSegmentMasks() != SkPath::kLine_SegmentMask || - !path.isConvex()) { - return nullptr; +GrFPResult GrConvexPolyEffect::Make(std::unique_ptr inputFP, + GrClipEdgeType type, const SkPath& path) { + if (path.getSegmentMasks() != SkPath::kLine_SegmentMask || !path.isConvex()) { + return GrFPFailure(std::move(inputFP)); } SkPathPriv::FirstDirection dir; @@ -105,15 +106,17 @@ std::unique_ptr GrConvexPolyEffect::Make(GrClipEdgeType typ // skip the draw or omit the clip element. if (!SkPathPriv::CheapComputeFirstDirection(path, &dir)) { if (GrProcessorEdgeTypeIsInverseFill(type)) { - return GrConstColorProcessor::Make(SK_PMColor4fWHITE, - GrConstColorProcessor::InputMode::kModulateRGBA); + return GrFPSuccess( + GrConstColorProcessor::Make(std::move(inputFP), SK_PMColor4fWHITE, + GrConstColorProcessor::InputMode::kModulateRGBA)); } // This could use kIgnore instead of kModulateRGBA but it would trigger a debug print // about a coverage processor not being compatible with the alpha-as-coverage optimization. // We don't really care about this unlikely case so we just use kModulateRGBA to suppress // the print. - return GrConstColorProcessor::Make(SK_PMColor4fTRANSPARENT, - GrConstColorProcessor::InputMode::kModulateRGBA); + return GrFPSuccess( + GrConstColorProcessor::Make(std::move(inputFP), SK_PMColor4fTRANSPARENT, + GrConstColorProcessor::InputMode::kModulateRGBA)); } SkScalar edges[3 * kMaxEdges]; @@ -130,11 +133,12 @@ std::unique_ptr GrConvexPolyEffect::Make(GrClipEdgeType typ switch (verb) { case SkPath::kMove_Verb: SkASSERT(n == 0); + break; case SkPath::kClose_Verb: break; case SkPath::kLine_Verb: { if (n >= kMaxEdges) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } if (pts[0] != pts[1]) { SkVector v = pts[1] - pts[0]; @@ -152,22 +156,20 @@ std::unique_ptr GrConvexPolyEffect::Make(GrClipEdgeType typ break; } default: - return nullptr; + return GrFPFailure(std::move(inputFP)); } } if (path.isInverseFillType()) { type = GrInvertProcessorEdgeType(type); } - return Make(type, n, edges); + return GrConvexPolyEffect::Make(std::move(inputFP), type, n, edges); } -std::unique_ptr GrConvexPolyEffect::Make(GrClipEdgeType edgeType, - const SkRect& rect) { - if (GrClipEdgeType::kHairlineAA == edgeType){ - return nullptr; - } - return GrAARectEffect::Make(edgeType, rect); +GrFPResult GrConvexPolyEffect::Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, const SkRect& rect) { + // TODO: Replace calls to this method with calling GrAARectEffect::Make directly + return GrFPSuccess(GrAARectEffect::Make(std::move(inputFP), edgeType, rect)); } GrConvexPolyEffect::~GrConvexPolyEffect() {} @@ -181,7 +183,8 @@ GrGLSLFragmentProcessor* GrConvexPolyEffect::onCreateGLSLInstance() const { return new GrGLConvexPolyEffect; } -GrConvexPolyEffect::GrConvexPolyEffect(GrClipEdgeType edgeType, int n, const SkScalar edges[]) +GrConvexPolyEffect::GrConvexPolyEffect(std::unique_ptr inputFP, + GrClipEdgeType edgeType, int n, const SkScalar edges[]) : INHERITED(kGrConvexPolyEffect_ClassID, kCompatibleWithCoverageAsAlpha_OptimizationFlag) , fEdgeType(edgeType) , fEdgeCount(n) { @@ -193,12 +196,17 @@ GrConvexPolyEffect::GrConvexPolyEffect(GrClipEdgeType edgeType, int n, const SkS for (int i = 0; i < n; ++i) { fEdges[3 * i + 2] += SK_ScalarHalf; } + + if (inputFP != nullptr) { + this->registerChild(std::move(inputFP)); + } } GrConvexPolyEffect::GrConvexPolyEffect(const GrConvexPolyEffect& that) : INHERITED(kGrConvexPolyEffect_ClassID, kCompatibleWithCoverageAsAlpha_OptimizationFlag) , fEdgeType(that.fEdgeType) , fEdgeCount(that.fEdgeCount) { + this->cloneAndRegisterAllChildProcessors(that); memcpy(fEdges, that.fEdges, 3 * that.fEdgeCount * sizeof(SkScalar)); } @@ -229,7 +237,11 @@ std::unique_ptr GrConvexPolyEffect::TestCreate(GrProcessorT do { GrClipEdgeType edgeType = static_cast( d->fRandom->nextULessThan(kGrClipEdgeTypeCnt)); - fp = GrConvexPolyEffect::Make(edgeType, count, edges); + auto [success, convexPolyFP] = GrConvexPolyEffect::Make(/*inputFP=*/nullptr, edgeType, + count, edges); + if (success) { + fp = std::move(convexPolyFP); + } } while (nullptr == fp); return fp; } diff --git a/src/gpu/effects/GrConvexPolyEffect.h b/src/gpu/effects/GrConvexPolyEffect.h index 2bb33736f819e..36fbc73f0e0ed 100644 --- a/src/gpu/effects/GrConvexPolyEffect.h +++ b/src/gpu/effects/GrConvexPolyEffect.h @@ -23,9 +23,7 @@ class SkPath; */ class GrConvexPolyEffect : public GrFragmentProcessor { public: - enum { - kMaxEdges = 8, - }; + static constexpr int kMaxEdges = 8; /** * edges is a set of n edge equations where n is limited to kMaxEdges. It contains 3*n values. @@ -38,24 +36,26 @@ class GrConvexPolyEffect : public GrFragmentProcessor { * have to modify the effect/shaderbuilder interface to make it possible (e.g. give access * to the view matrix or untransformed positions in the fragment shader). */ - static std::unique_ptr Make(GrClipEdgeType edgeType, int n, - const SkScalar edges[]) { - if (n <= 0 || n > kMaxEdges || GrClipEdgeType::kHairlineAA == edgeType) { - return nullptr; + static GrFPResult Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, int n, const SkScalar edges[]) { + if (n <= 0 || n > kMaxEdges) { + return GrFPFailure(std::move(inputFP)); } - return std::unique_ptr(new GrConvexPolyEffect(edgeType, n, edges)); + + return GrFPSuccess(std::unique_ptr( + new GrConvexPolyEffect(std::move(inputFP), edgeType, n, edges))); } /** * Creates an effect that clips against the path. If the path is not a convex polygon, is - * inverse filled, or has too many edges, this will return nullptr. + * inverse filled, or has too many edges, creation will fail. */ - static std::unique_ptr Make(GrClipEdgeType, const SkPath&); + static GrFPResult Make(std::unique_ptr, GrClipEdgeType, const SkPath&); /** * Creates an effect that fills inside the rect with AA edges.. */ - static std::unique_ptr Make(GrClipEdgeType, const SkRect&); + static GrFPResult Make(std::unique_ptr, GrClipEdgeType, const SkRect&); ~GrConvexPolyEffect() override; @@ -69,8 +69,12 @@ class GrConvexPolyEffect : public GrFragmentProcessor { const SkScalar* getEdges() const { return fEdges; } + bool hasInputFP() const { return numChildProcessors() > 0; } + private: - GrConvexPolyEffect(GrClipEdgeType edgeType, int n, const SkScalar edges[]); + GrConvexPolyEffect(std::unique_ptr inputFP, + GrClipEdgeType edgeType, + int n, const SkScalar edges[]); GrConvexPolyEffect(const GrConvexPolyEffect&); GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; diff --git a/src/gpu/effects/GrCustomXfermode.cpp b/src/gpu/effects/GrCustomXfermode.cpp index f7ecbf13998d5..06ee04caa34ac 100644 --- a/src/gpu/effects/GrCustomXfermode.cpp +++ b/src/gpu/effects/GrCustomXfermode.cpp @@ -8,7 +8,6 @@ #include "src/gpu/effects/GrCustomXfermode.h" #include "src/gpu/GrCaps.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" #include "src/gpu/GrPipeline.h" #include "src/gpu/GrProcessor.h" diff --git a/src/gpu/effects/GrDeviceSpaceEffect.fp b/src/gpu/effects/GrDeviceSpaceEffect.fp index 879c7c4d7c302..a64feb04dbbb3 100644 --- a/src/gpu/effects/GrDeviceSpaceEffect.fp +++ b/src/gpu/effects/GrDeviceSpaceEffect.fp @@ -8,15 +8,25 @@ in fragmentProcessor fp; void main() { - sk_OutColor = sample(fp, sk_InColor, sk_FragCoord.xy); + sk_OutColor = sample(fp, sk_InColor, sk_FragCoord.xy); +} + +@optimizationFlags { + ProcessorOptimizationFlags(fp.get()) +} + +@class { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + return ConstantOutputForConstantInput(this->childProcessor(0), inColor); + } +} + +@make{ + static std::unique_ptr Make(std::unique_ptr fp) { + return std::unique_ptr(new GrDeviceSpaceEffect(std::move(fp))); + } } @test(d) { - std::unique_ptr fp; - // We have a restriction that explicit coords only work for FPs with zero or one - // coord transform. - do { - fp = GrProcessorUnitTest::MakeChildFP(d); - } while (fp->numCoordTransforms() > 1); - return GrDeviceSpaceEffect::Make(std::move(fp)); + return GrDeviceSpaceEffect::Make(GrProcessorUnitTest::MakeChildFP(d)); } diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp index 3bf74e11fba73..6809bdffa8f96 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp +++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp @@ -57,14 +57,8 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { // Setup position gpArgs->fPositionVar = dfTexEffect.inPosition().asShaderVar(); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - dfTexEffect.inPosition().asShaderVar(), - dfTexEffect.localMatrix(), - args.fFPCoordTransformHandler); + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, gpArgs->fPositionVar, + dfTexEffect.localMatrix(), &fLocalMatrixUniform); // add varyings GrGLSLVarying uv(kFloat2_GrSLType); @@ -164,8 +158,7 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { fragBuilder->codeAppendf("%s = half4(val);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc) override { const GrDistanceFieldA8TextGeoProc& dfa8gp = proc.cast(); #ifdef SK_GAMMA_APPLY_TO_A8 @@ -185,7 +178,7 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { 1.0f / atlasDimensions.fHeight); fAtlasDimensions = atlasDimensions; } - this->setTransformDataHelper(dfa8gp.localMatrix(), pdman, transformRange); + this->setTransform(pdman, fLocalMatrixUniform, dfa8gp.localMatrix(), &fLocalMatrix); } static inline void GenKey(const GrGeometryProcessor& gp, @@ -193,6 +186,7 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { GrProcessorKeyBuilder* b) { const GrDistanceFieldA8TextGeoProc& dfTexEffect = gp.cast(); uint32_t key = dfTexEffect.getFlags(); + key |= ComputeMatrixKey(dfTexEffect.localMatrix()) << 16; b->add32(key); b->add32(dfTexEffect.numTextureSamplers()); } @@ -202,9 +196,12 @@ class GrGLDistanceFieldA8TextGeoProc : public GrGLSLGeometryProcessor { float fDistanceAdjust = -1.f; UniformHandle fDistanceAdjustUni; #endif - SkISize fAtlasDimensions = {0, 0}; + SkISize fAtlasDimensions = {0, 0}; UniformHandle fAtlasDimensionsInvUniform; + SkMatrix fLocalMatrix = SkMatrix::InvalidMatrix(); + UniformHandle fLocalMatrixUniform; + typedef GrGLSLGeometryProcessor INHERITED; }; @@ -354,31 +351,20 @@ class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { varyingHandler->addPassThroughAttribute(dfPathEffect.inColor(), args.fOutputColor); if (dfPathEffect.matrix().hasPerspective()) { - // Setup position + // Setup position (output position is transformed, local coords are pass through) this->writeOutputPosition(vertBuilder, uniformHandler, gpArgs, dfPathEffect.inPosition().name(), dfPathEffect.matrix(), &fMatrixUniform); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - dfPathEffect.inPosition().asShaderVar(), - args.fFPCoordTransformHandler); + gpArgs->fLocalCoordVar = dfPathEffect.inPosition().asShaderVar(); } else { - // Setup position + // Setup position (output position is pass through, local coords are transformed) this->writeOutputPosition(vertBuilder, gpArgs, dfPathEffect.inPosition().name()); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - dfPathEffect.inPosition().asShaderVar(), - dfPathEffect.matrix(), - args.fFPCoordTransformHandler); + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, + dfPathEffect.inPosition().asShaderVar(), dfPathEffect.matrix(), + &fMatrixUniform); } // Use highp to work around aliasing issues @@ -459,14 +445,12 @@ class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { fragBuilder->codeAppendf("%s = half4(val);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc) override { const GrDistanceFieldPathGeoProc& dfpgp = proc.cast(); - if (dfpgp.matrix().hasPerspective() && !SkMatrixPriv::CheapEqual(fMatrix, dfpgp.matrix())) { - fMatrix = dfpgp.matrix(); - pdman.setSkMatrix(fMatrixUniform, fMatrix); - } + // We always set the matrix uniform; it's either used to transform from local to device + // for the output position, or from device to local for the local coord variable. + this->setTransform(pdman, fMatrixUniform, dfpgp.matrix(), &fMatrix); const SkISize& atlasDimensions = dfpgp.atlasDimensions(); SkASSERT(SkIsPow2(atlasDimensions.fWidth) && SkIsPow2(atlasDimensions.fHeight)); @@ -476,12 +460,6 @@ class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { 1.0f / atlasDimensions.fHeight); fAtlasDimensions = atlasDimensions; } - - if (dfpgp.matrix().hasPerspective()) { - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); - } else { - this->setTransformDataHelper(dfpgp.matrix(), pdman, transformRange); - } } static inline void GenKey(const GrGeometryProcessor& gp, @@ -490,7 +468,7 @@ class GrGLDistanceFieldPathGeoProc : public GrGLSLGeometryProcessor { const GrDistanceFieldPathGeoProc& dfTexEffect = gp.cast(); uint32_t key = dfTexEffect.getFlags(); - key |= ComputePosKey(dfTexEffect.matrix()) << 16; + key |= ComputeMatrixKey(dfTexEffect.matrix()) << 16; b->add32(key); b->add32(dfTexEffect.matrix().hasPerspective()); b->add32(dfTexEffect.numTextureSamplers()); @@ -605,7 +583,9 @@ GrGeometryProcessor* GrDistanceFieldPathGeoProc::TestCreate(GrProcessorTestData* class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { public: - GrGLDistanceFieldLCDTextGeoProc() : fAtlasDimensions({0, 0}) { + GrGLDistanceFieldLCDTextGeoProc() + : fAtlasDimensions({0, 0}) + , fLocalMatrix(SkMatrix::InvalidMatrix()) { fDistanceAdjust = GrDistanceFieldLCDTextGeoProc::DistanceAdjust::Make(1.0f, 1.0f, 1.0f); } @@ -634,14 +614,9 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { // Setup position gpArgs->fPositionVar = dfTexEffect.inPosition().asShaderVar(); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - dfTexEffect.inPosition().asShaderVar(), - dfTexEffect.localMatrix(), - args.fFPCoordTransformHandler); + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, + dfTexEffect.inPosition().asShaderVar(), dfTexEffect.localMatrix(), + &fLocalMatrixUniform); // set up varyings GrGLSLVarying uv(kFloat2_GrSLType); @@ -779,8 +754,8 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { } } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& processor, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& processor) override { SkASSERT(fDistanceAdjustUni.isValid()); const GrDistanceFieldLCDTextGeoProc& dflcd = processor.cast(); @@ -801,7 +776,7 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { 1.0f / atlasDimensions.fHeight); fAtlasDimensions = atlasDimensions; } - this->setTransformDataHelper(dflcd.localMatrix(), pdman, transformRange); + this->setTransform(pdman, fLocalMatrixUniform, dflcd.localMatrix(), &fLocalMatrix); } static inline void GenKey(const GrGeometryProcessor& gp, @@ -809,7 +784,8 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { GrProcessorKeyBuilder* b) { const GrDistanceFieldLCDTextGeoProc& dfTexEffect = gp.cast(); - uint32_t key = dfTexEffect.getFlags(); + uint32_t key = (dfTexEffect.getFlags() << 16) | + ComputeMatrixKey(dfTexEffect.localMatrix()); b->add32(key); b->add32(dfTexEffect.numTextureSamplers()); } @@ -821,6 +797,9 @@ class GrGLDistanceFieldLCDTextGeoProc : public GrGLSLGeometryProcessor { SkISize fAtlasDimensions; UniformHandle fAtlasDimensionsInvUniform; + SkMatrix fLocalMatrix; + UniformHandle fLocalMatrixUniform; + typedef GrGLSLGeometryProcessor INHERITED; }; diff --git a/src/gpu/effects/GrEllipseEffect.fp b/src/gpu/effects/GrEllipseEffect.fp index 8e8c766d0f22e..918dcbece1d88 100644 --- a/src/gpu/effects/GrEllipseEffect.fp +++ b/src/gpu/effects/GrEllipseEffect.fp @@ -9,6 +9,7 @@ #include "src/gpu/GrShaderCaps.h" } +in fragmentProcessor? inputFP; layout(key) in GrClipEdgeType edgeType; in float2 center; in float2 radii; @@ -23,25 +24,29 @@ bool medPrecision = !sk_Caps.floatIs32Bits; layout(when=medPrecision) uniform float2 scale; @make { - static std::unique_ptr Make(GrClipEdgeType edgeType, SkPoint center, - SkPoint radii, const GrShaderCaps& caps) { + static GrFPResult Make(std::unique_ptr inputFP, GrClipEdgeType edgeType, + SkPoint center, SkPoint radii, const GrShaderCaps& caps) { // Small radii produce bad results on devices without full float. if (!caps.floatIs32Bits() && (radii.fX < 0.5f || radii.fY < 0.5f)) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } // Very narrow ellipses produce bad results on devices without full float if (!caps.floatIs32Bits() && (radii.fX > 255*radii.fY || radii.fY > 255*radii.fX)) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } // Very large ellipses produce bad results on devices without full float if (!caps.floatIs32Bits() && (radii.fX > 16384 || radii.fY > 16384)) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } - return std::unique_ptr(new GrEllipseEffect(edgeType, center, radii)); + return GrFPSuccess(std::unique_ptr( + new GrEllipseEffect(std::move(inputFP), edgeType, center, radii))); } } -@optimizationFlags { kCompatibleWithCoverageAsAlpha_OptimizationFlag } +@optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag +} @setData(pdman) { if (radii != prevRadii || center != prevCenter) { @@ -114,7 +119,8 @@ void main() { // hairline not supported discard; } - sk_OutColor = sk_InColor * alpha; + half4 inputColor = sample(inputFP, sk_InColor); + sk_OutColor = inputColor * alpha; } @test(testData) { @@ -123,10 +129,13 @@ void main() { center.fY = testData->fRandom->nextRangeScalar(0.f, 1000.f); SkScalar rx = testData->fRandom->nextRangeF(0.f, 1000.f); SkScalar ry = testData->fRandom->nextRangeF(0.f, 1000.f); - GrClipEdgeType et; + bool success; + std::unique_ptr fp; do { - et = (GrClipEdgeType) testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt); - } while (GrClipEdgeType::kHairlineAA == et); - return GrEllipseEffect::Make(et, center, SkPoint::Make(rx, ry), - *testData->caps()->shaderCaps()); + GrClipEdgeType et = (GrClipEdgeType)testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt); + std::tie(success, fp) = GrEllipseEffect::Make(/*inputFP=*/nullptr, et, center, + SkPoint::Make(rx, ry), + *testData->caps()->shaderCaps()); + } while (!success); + return fp; } diff --git a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp index 8437d54133679..55fe39375cdd4 100644 --- a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp +++ b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.cpp @@ -57,12 +57,10 @@ void GrGaussianConvolutionFragmentProcessor::Impl::emitCode(EmitArgs& args) { "Kernel", arrayCount, &kernel); GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - auto coords2D = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - ce.sampleMatrix()); fragBuilder->codeAppendf("%s = half4(0, 0, 0, 0);", args.fOutputColor); - fragBuilder->codeAppendf("float2 coord = %s - %d.0 * %s;", coords2D.c_str(), ce.fRadius, inc); + fragBuilder->codeAppendf("float2 coord = %s - %d.0 * %s;", args.fSampleCoord, ce.fRadius, inc); fragBuilder->codeAppend("float2 coordSampled = half2(0, 0);"); // Manually unroll loop because some drivers don't; yields 20-30% speedup. @@ -171,11 +169,10 @@ GrGaussianConvolutionFragmentProcessor::GrGaussianConvolutionFragmentProcessor( ProcessorOptimizationFlags(child.get())) , fRadius(radius) , fDirection(direction) { - child->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); + this->registerChild(std::move(child), SkSL::SampleUsage::Explicit()); SkASSERT(radius <= kMaxKernelRadius); fill_in_1D_gaussian_kernel(fKernel, gaussianSigma, fRadius); - this->addCoordTransform(&fCoordTransform); + this->setUsesSampleCoordsDirectly(); } GrGaussianConvolutionFragmentProcessor::GrGaussianConvolutionFragmentProcessor( @@ -183,11 +180,9 @@ GrGaussianConvolutionFragmentProcessor::GrGaussianConvolutionFragmentProcessor( : INHERITED(kGrGaussianConvolutionFragmentProcessor_ClassID, that.optimizationFlags()) , fRadius(that.fRadius) , fDirection(that.fDirection) { - auto child = that.childProcessor(0).clone(); - child->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); + this->cloneAndRegisterAllChildProcessors(that); memcpy(fKernel, that.fKernel, radius_to_width(fRadius) * sizeof(float)); - this->addCoordTransform(&fCoordTransform); + this->setUsesSampleCoordsDirectly(); } void GrGaussianConvolutionFragmentProcessor::onGetGLSLProcessorKey(const GrShaderCaps& caps, diff --git a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h index 61f6e4e323134..5eb05160735a1 100644 --- a/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h +++ b/src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h @@ -8,7 +8,6 @@ #ifndef GrGaussianConvolutionFragmentProcessor_DEFINED #define GrGaussianConvolutionFragmentProcessor_DEFINED -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" /** @@ -78,9 +77,6 @@ class GrGaussianConvolutionFragmentProcessor : public GrFragmentProcessor { static constexpr int kMaxKernelWidth = 2*kMaxKernelRadius + 1; - // We really just want the unaltered local coords, but the only way to get that right now is - // an identity coord transform. - GrCoordTransform fCoordTransform = {}; // The array size must be a multiple of 4 because we pass it as an array of float4 uniform // values. float fKernel[SkAlign4(kMaxKernelWidth)]; diff --git a/src/gpu/effects/GrHSLToRGBFilterEffect.fp b/src/gpu/effects/GrHSLToRGBFilterEffect.fp index 02125f8e70911..029f7b2adf7ad 100644 --- a/src/gpu/effects/GrHSLToRGBFilterEffect.fp +++ b/src/gpu/effects/GrHSLToRGBFilterEffect.fp @@ -13,19 +13,23 @@ // [2] http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl // [3] http://www.chilliant.com/rgb2hsv.html +in fragmentProcessor? inputFP; + void main() { - half3 hsl = sk_InColor.rgb; + half4 inputColor = sample(inputFP, sk_InColor); + half3 hsl = inputColor.rgb; half C = (1 - abs(2 * hsl.z - 1)) * hsl.y; half3 p = hsl.xxx + half3(0, 2/3.0, 1/3.0); half3 q = saturate(abs(fract(p) * 6 - 3) - 1); half3 rgb = (q - 0.5) * C + hsl.z; - sk_OutColor = saturate(half4(rgb, sk_InColor.a)); + sk_OutColor = saturate(half4(rgb, inputColor.a)); sk_OutColor.rgb *= sk_OutColor.a; } @optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & (kConstantOutputForConstantInput_OptimizationFlag | kPreservesOpaqueInput_OptimizationFlag) } @@ -33,7 +37,10 @@ void main() { #include "include/private/SkColorData.h" #include "include/private/SkNx.h" - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& c) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f c = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(0), inColor) + : inColor; const auto H = c[0], S = c[1], L = c[2], diff --git a/src/gpu/effects/GrLumaColorFilterEffect.fp b/src/gpu/effects/GrLumaColorFilterEffect.fp index 1548b26e0bf49..67188459df802 100644 --- a/src/gpu/effects/GrLumaColorFilterEffect.fp +++ b/src/gpu/effects/GrLumaColorFilterEffect.fp @@ -5,14 +5,20 @@ * found in the LICENSE file. */ +in fragmentProcessor? inputFP; + @optimizationFlags { - kConstantOutputForConstantInput_OptimizationFlag + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + kConstantOutputForConstantInput_OptimizationFlag } @class { #include "include/private/SkColorData.h" - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f input = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(inputFP_index), inColor) + : inColor; float luma = SK_ITU_BT709_LUM_COEFF_R * input.fR + SK_ITU_BT709_LUM_COEFF_G * input.fG + SK_ITU_BT709_LUM_COEFF_B * input.fB; @@ -21,7 +27,8 @@ } void main() { + half4 inputColor = sample(inputFP, sk_InColor); const half3 SK_ITU_BT709_LUM_COEFF = half3(0.2126, 0.7152, 0.0722); - half luma = saturate(dot(SK_ITU_BT709_LUM_COEFF, sk_InColor.rgb)); + half luma = saturate(dot(SK_ITU_BT709_LUM_COEFF, inputColor.rgb)); sk_OutColor = half4(0, 0, 0, luma); } diff --git a/src/gpu/effects/GrMagnifierEffect.fp b/src/gpu/effects/GrMagnifierEffect.fp index 582fc4bb2980c..22f53b08c6f94 100644 --- a/src/gpu/effects/GrMagnifierEffect.fp +++ b/src/gpu/effects/GrMagnifierEffect.fp @@ -5,7 +5,7 @@ * found in the LICENSE file. */ -in uniform sampler2D src; +in fragmentProcessor src; layout(ctype=SkIRect) in int4 bounds; uniform float4 boundsUniform; layout(ctype=SkRect) in float4 srcRect; @@ -16,12 +16,7 @@ in uniform float yInvInset; uniform half2 offset; -@coordTransform(src) { - SkMatrix::I() -} - -void main() { - float2 coord = sk_TransformedCoords2D[0]; +void main(float2 coord) { float2 zoom_coord = offset + coord * float2(xInvZoom, yInvZoom); float2 delta = (coord - boundsUniform.xy) * boundsUniform.zw; delta = min(delta, half2(1.0, 1.0) - delta); @@ -42,36 +37,11 @@ void main() { } @setData(pdman) { - SkScalar invW = 1.0f / src.width(); - SkScalar invH = 1.0f / src.height(); - - { - SkScalar y = srcRect.y() * invH; - if (srcView.origin() != kTopLeft_GrSurfaceOrigin) { - y = 1.0f - (srcRect.height() / bounds.height()) - y; - } - - pdman.set2f(offset, srcRect.x() * invW, y); - } - - { - SkScalar y = bounds.y() * invH; - SkScalar hSign = 1.f; - if (srcView.origin() != kTopLeft_GrSurfaceOrigin) { - y = 1.0f - bounds.y() * invH; - hSign = -1.f; - } - - pdman.set4f(boundsUniform, - bounds.x() * invW, - y, - SkIntToScalar(src.width()) / bounds.width(), - hSign * SkIntToScalar(src.height()) / bounds.height()); - } + pdman.set2f(offset, srcRect.x(), srcRect.y()); + pdman.set4f(boundsUniform, bounds.x(), bounds.y(), 1.f/ bounds.width(), 1.f / bounds.height()); } @test(d) { - auto [view, ct, at] = d->randomView(); const int kMaxWidth = 200; const int kMaxHeight = 200; const SkScalar kMaxInset = 20.0f; @@ -82,7 +52,8 @@ void main() { SkIRect bounds = SkIRect::MakeWH(SkIntToScalar(kMaxWidth), SkIntToScalar(kMaxHeight)); SkRect srcRect = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height)); - auto effect = GrMagnifierEffect::Make(std::move(view), + auto src = GrProcessorUnitTest::MakeChildFP(d); + auto effect = GrMagnifierEffect::Make(std::move(src), bounds, srcRect, srcRect.width() / bounds.width(), diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.cpp b/src/gpu/effects/GrMatrixConvolutionEffect.cpp index ed96861d298c1..6fb6b42e1b973 100644 --- a/src/gpu/effects/GrMatrixConvolutionEffect.cpp +++ b/src/gpu/effects/GrMatrixConvolutionEffect.cpp @@ -42,9 +42,12 @@ class GrGLMatrixConvolutionEffect : public GrGLSLFragmentProcessor { typedef GrGLSLFragmentProcessor INHERITED; }; -GrMatrixConvolutionEffect::KernelWrapper GrMatrixConvolutionEffect::KernelWrapper::Make( - GrRecordingContext* context, SkISize size, const GrCaps& caps, const SkScalar* values) { - if (nullptr == context || nullptr == values || size.isEmpty()) { +GrMatrixConvolutionEffect::KernelWrapper::MakeResult +GrMatrixConvolutionEffect::KernelWrapper::Make(GrRecordingContext* context, + SkISize size, + const GrCaps& caps, + const SkScalar* values) { + if (!context || !values || size.isEmpty()) { return {}; } const int length = size.area(); @@ -54,10 +57,10 @@ GrMatrixConvolutionEffect::KernelWrapper GrMatrixConvolutionEffect::KernelWrappe for (int i = 0; i < length; i++) { result.fArray[i] = SkScalarToFloat(values[i]); } - return result; + return {result, nullptr}; } - ScalableSampler& scalableSampler = result.fScalableSampler; + BiasAndGain& scalableSampler = result.fBiasAndGain; bool useA16 = context->defaultBackendFormat(kA16_float_SkColorType, GrRenderable::kNo).isValid(); SkScalar min = values[0]; @@ -108,8 +111,7 @@ GrMatrixConvolutionEffect::KernelWrapper GrMatrixConvolutionEffect::KernelWrappe view = {std::move(cachedKernel), kTopLeft_GrSurfaceOrigin, swizzle}; } else { SkBitmap bm; - auto info = SkImageInfo::Make({(int)GrNextPow2(length), 1}, colorType, - kPremul_SkAlphaType, nullptr); + auto info = SkImageInfo::Make({length, 1}, colorType, kPremul_SkAlphaType, nullptr); if (!bm.tryAllocPixels(info)) { return {}; } @@ -131,23 +133,23 @@ GrMatrixConvolutionEffect::KernelWrapper GrMatrixConvolutionEffect::KernelWrappe proxyProvider->assignUniqueKeyToProxy(key, view.asTextureProxy()); } } - scalableSampler.fSampler = { std::move(view) }; - return result; + auto kernelFP = GrTextureEffect::Make(std::move(view), kUnknown_SkAlphaType); + return {result, std::move(kernelFP)}; } bool GrMatrixConvolutionEffect::KernelWrapper::operator==(const KernelWrapper& k) const { if (fSize != k.fSize) { return false; } else if (this->isSampled()) { - return fScalableSampler == k.fScalableSampler; + return fBiasAndGain == k.fBiasAndGain; } else { return std::equal(fArray.begin(), fArray.begin() + fSize.area(), k.fArray.begin()); } } -bool GrMatrixConvolutionEffect::KernelWrapper::ScalableSampler::operator==( - const ScalableSampler& k) const { - return fSampler == k.fSampler && fGain == k.fGain && fBias == k.fBias; +bool GrMatrixConvolutionEffect::KernelWrapper::BiasAndGain::operator==( + const BiasAndGain& k) const { + return fGain == k.fGain && fBias == k.fBias; } // For sampled kernels, emit a for loop that does all the kernel accumulation. @@ -162,7 +164,6 @@ void GrGLMatrixConvolutionEffect::emitKernelBlock(EmitArgs& args, SkIPoint loc) int kernelArea = kernelWidth * kernelHeight; if (mce.kernelIsSampled()) { - fragBuilder->codeAppendf("half2 kernelCoord = half2(0, 0);"); fragBuilder->codeAppendf("for (int i = 0; i < %d; ++i)", (int)kernelArea); } @@ -172,13 +173,11 @@ void GrGLMatrixConvolutionEffect::emitKernelBlock(EmitArgs& args, SkIPoint loc) fragBuilder->codeAppend("half2 sourceOffset;"); if (mce.kernelIsSampled()) { const char* kernelBias = uniformHandler->getUniformCStr(fKernelBiasUni); - fragBuilder->codeAppend("k = "); - fragBuilder->appendTextureLookup(args.fTexSamplers[0], "kernelCoord"); - fragBuilder->codeAppendf(".w + %s;", kernelBias); + SkString kernelCoord = SkStringPrintf("float2(float(i) + 0.5, 0.5)"); + SkString kernelSample = this->invokeChild(1, args, kernelCoord.c_str()); + fragBuilder->codeAppendf("k = %s.w + %s;", kernelSample.c_str(), kernelBias); fragBuilder->codeAppendf("sourceOffset.y = floor(i / %d);", kernelWidth); fragBuilder->codeAppendf("sourceOffset.x = i - sourceOffset.y * %d;", kernelWidth); - float kernelStride = 1.0f / (float)GrNextPow2(kernelArea); - fragBuilder->codeAppendf("kernelCoord.x += %f;", kernelStride); } else { fragBuilder->codeAppendf("sourceOffset = half2(%d, %d);", loc.x(), loc.y()); int offset = loc.y() * kernelWidth + loc.x(); @@ -224,10 +223,8 @@ void GrGLMatrixConvolutionEffect::emitCode(EmitArgs& args) { const char* bias = uniformHandler->getUniformCStr(fBiasUni); GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - SkString coords2D = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - mce.sampleMatrix()); fragBuilder->codeAppend("half4 sum = half4(0, 0, 0, 0);"); - fragBuilder->codeAppendf("float2 coord = %s - %s;", coords2D.c_str(), kernelOffset); + fragBuilder->codeAppendf("float2 coord = %s - %s;", args.fSampleCoord, kernelOffset); if (mce.kernelIsSampled()) { this->emitKernelBlock(args, {}); @@ -245,7 +242,7 @@ void GrGLMatrixConvolutionEffect::emitCode(EmitArgs& args) { fragBuilder->codeAppendf("%s.rgb = clamp(%s.rgb, 0.0, %s.a);", args.fOutputColor, args.fOutputColor, args.fOutputColor); } else { - auto sample = this->invokeChild(0, args, coords2D.c_str()); + auto sample = this->invokeChild(0, args); fragBuilder->codeAppendf("half4 c = %s;", sample.c_str()); fragBuilder->codeAppendf("%s.a = c.a;", args.fOutputColor); fragBuilder->codeAppendf("%s.rgb = saturate(sum.rgb * %s + %s);", args.fOutputColor, gain, bias); @@ -266,7 +263,7 @@ void GrGLMatrixConvolutionEffect::GenKey(const GrProcessor& processor, void GrGLMatrixConvolutionEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& processor) { const GrMatrixConvolutionEffect& conv = processor.cast(); - pdman.set2fv(fKernelOffsetUni, 1, conv.kernelOffset().ptr()); + pdman.set2f(fKernelOffsetUni, conv.kernelOffset().fX, conv.kernelOffset().fY); float totalGain = conv.gain(); if (conv.kernelIsSampled()) { totalGain *= conv.kernelSampleGain(); @@ -282,7 +279,8 @@ void GrGLMatrixConvolutionEffect::onSetData(const GrGLSLProgramDataManager& pdma } GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(std::unique_ptr child, - KernelWrapper kernel, + const KernelWrapper& kernel, + std::unique_ptr kernelFP, SkScalar gain, SkScalar bias, const SkIPoint& kernelOffset, @@ -290,18 +288,17 @@ GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(std::unique_ptrsetSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); - if (fKernel.isSampled()) { - this->setTextureSamplerCnt(1); + this->registerChild(std::move(child), SkSL::SampleUsage::Explicit()); + if (kernelFP) { + this->registerChild(std::move(kernelFP), SkSL::SampleUsage::Explicit()); } fKernelOffset = {static_cast(kernelOffset.x()), static_cast(kernelOffset.y())}; - this->addCoordTransform(&fCoordTransform); + this->setUsesSampleCoordsDirectly(); } GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(const GrMatrixConvolutionEffect& that) @@ -311,13 +308,8 @@ GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(const GrMatrixConvolutionEf , fBias(that.fBias) , fKernelOffset(that.fKernelOffset) , fConvolveAlpha(that.fConvolveAlpha) { - auto child = that.childProcessor(0).clone(); - child->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); - if (fKernel.isSampled()) { - this->setTextureSamplerCnt(1); - } - this->addCoordTransform(&fCoordTransform); + this->cloneAndRegisterAllChildProcessors(that); + this->setUsesSampleCoordsDirectly(); } std::unique_ptr GrMatrixConvolutionEffect::clone() const { @@ -342,11 +334,6 @@ bool GrMatrixConvolutionEffect::onIsEqual(const GrFragmentProcessor& sBase) cons fConvolveAlpha == s.convolveAlpha(); } -const GrFragmentProcessor::TextureSampler& GrMatrixConvolutionEffect::onTextureSampler( - int index) const { - return IthTextureSampler(index, fKernel.scalableSampler().fSampler); -} - static void fill_in_1D_gaussian_kernel_with_stride(float* kernel, int size, int stride, float twoSigmaSqrd) { SkASSERT(!SkScalarNearlyZero(twoSigmaSqrd, SK_ScalarNearlyZero)); @@ -437,15 +424,16 @@ std::unique_ptr GrMatrixConvolutionEffect::Make(GrRecording GrSamplerState::WrapMode wm, bool convolveAlpha, const GrCaps& caps) { - auto kw = KernelWrapper::Make(context, kernelSize, caps, kernel); - if (!kw.isValid()) { + auto [kernelWrapper, kernelFP] = KernelWrapper::Make(context, kernelSize, caps, kernel); + if (!kernelWrapper.isValid()) { return nullptr; } GrSamplerState sampler(wm, GrSamplerState::Filter::kNearest); auto child = GrTextureEffect::MakeSubset(std::move(srcView), kPremul_SkAlphaType, SkMatrix::I(), sampler, SkRect::Make(srcBounds), caps); - return std::unique_ptr(new GrMatrixConvolutionEffect( - std::move(child), std::move(kw), gain, bias, kernelOffset, convolveAlpha)); + return std::unique_ptr( + new GrMatrixConvolutionEffect(std::move(child), kernelWrapper, std::move(kernelFP), + gain, bias, kernelOffset, convolveAlpha)); } std::unique_ptr GrMatrixConvolutionEffect::MakeGaussian( diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.h b/src/gpu/effects/GrMatrixConvolutionEffect.h index 4a5627bdec355..f4d0ae1302d78 100644 --- a/src/gpu/effects/GrMatrixConvolutionEffect.h +++ b/src/gpu/effects/GrMatrixConvolutionEffect.h @@ -46,11 +46,11 @@ class GrMatrixConvolutionEffect : public GrFragmentProcessor { const SkIRect& bounds() const { return fBounds; } SkISize kernelSize() const { return fKernel.size(); } - const SkV2 kernelOffset() const { return fKernelOffset; } + const SkVector kernelOffset() const { return fKernelOffset; } bool kernelIsSampled() const { return fKernel.isSampled(); } const float *kernel() const { return fKernel.array().data(); } - float kernelSampleGain() const { return fKernel.scalableSampler().fGain; } - float kernelSampleBias() const { return fKernel.scalableSampler().fBias; } + float kernelSampleGain() const { return fKernel.biasAndGain().fGain; } + float kernelSampleBias() const { return fKernel.biasAndGain().fBias; } float gain() const { return fGain; } float bias() const { return fBias; } bool convolveAlpha() const { return fConvolveAlpha; } @@ -67,36 +67,24 @@ class GrMatrixConvolutionEffect : public GrFragmentProcessor { */ class KernelWrapper { public: - struct ScalableSampler { - TextureSampler fSampler; + struct BiasAndGain { // Only used in A8 mode. Applied before any other math. - float fBias = 0.0f; + float fBias; // Only used in A8 mode. Premultiplied in with user gain to save time. - float fGain = 1.0f; - bool operator==(const ScalableSampler&) const; + float fGain; + bool operator==(const BiasAndGain&) const; }; - static KernelWrapper Make(GrRecordingContext*, SkISize, - const GrCaps&, const float* values); + using MakeResult = std::tuple>; + static MakeResult Make(GrRecordingContext*, SkISize, const GrCaps&, const float* values); - KernelWrapper(KernelWrapper&& that) : fSize(that.fSize) { - if (that.isSampled()) { - new (&fScalableSampler) ScalableSampler(std::move(that.fScalableSampler)); - } else { - new (&fArray) std::array(std::move(that.fArray)); - } - } + KernelWrapper() = default; KernelWrapper(const KernelWrapper& that) : fSize(that.fSize) { if (that.isSampled()) { - new (&fScalableSampler) ScalableSampler(that.fScalableSampler); + fBiasAndGain = that.fBiasAndGain; } else { new (&fArray) std::array(that.fArray); } } - ~KernelWrapper() { - if (this->isSampled()) { - fScalableSampler.~ScalableSampler(); - } - } bool isValid() const { return !fSize.isEmpty(); } SkISize size() const { return fSize; } @@ -105,29 +93,29 @@ class GrMatrixConvolutionEffect : public GrFragmentProcessor { SkASSERT(!this->isSampled()); return fArray; } - const ScalableSampler& scalableSampler() const { + const BiasAndGain& biasAndGain() const { SkASSERT(this->isSampled()); - return fScalableSampler; + return fBiasAndGain; } bool operator==(const KernelWrapper&) const; private: - KernelWrapper() : fSize({}) {} KernelWrapper(SkISize size) : fSize(size) { if (this->isSampled()) { - new (&fScalableSampler) ScalableSampler; + fBiasAndGain = {0.f , 1.f}; } } - SkISize fSize; + SkISize fSize = {}; union { std::array fArray; - ScalableSampler fScalableSampler; + BiasAndGain fBiasAndGain; }; }; GrMatrixConvolutionEffect(std::unique_ptr child, - KernelWrapper kernel, + const KernelWrapper& kernel, + std::unique_ptr kernelFP, SkScalar gain, SkScalar bias, const SkIPoint& kernelOffset, @@ -141,16 +129,11 @@ class GrMatrixConvolutionEffect : public GrFragmentProcessor { bool onIsEqual(const GrFragmentProcessor&) const override; - const GrFragmentProcessor::TextureSampler& onTextureSampler(int index) const override; - - // We really just want the unaltered local coords, but the only way to get that right now is - // an identity coord transform. - GrCoordTransform fCoordTransform = {}; SkIRect fBounds; KernelWrapper fKernel; float fGain; float fBias; - SkV2 fKernelOffset; + SkVector fKernelOffset; bool fConvolveAlpha; GR_DECLARE_FRAGMENT_PROCESSOR_TEST diff --git a/src/gpu/effects/GrMatrixEffect.cpp b/src/gpu/effects/GrMatrixEffect.cpp index 20613ed6ad169..e147ff473fa9c 100644 --- a/src/gpu/effects/GrMatrixEffect.cpp +++ b/src/gpu/effects/GrMatrixEffect.cpp @@ -21,7 +21,7 @@ class GrGLSLMatrixEffect : public GrGLSLFragmentProcessor { void emitCode(EmitArgs& args) override { fMatrixVar = args.fUniformHandler->addUniform(&args.fFp, kFragment_GrShaderFlag, kFloat3x3_GrSLType, "matrix"); - SkString child = this->invokeChild(0, args.fInputColor, args); + SkString child = this->invokeChildWithMatrix(0, args.fInputColor, args); args.fFragBuilder->codeAppendf("%s = %s;\n", args.fOutputColor, child.c_str()); } @@ -51,11 +51,7 @@ bool GrMatrixEffect::onIsEqual(const GrFragmentProcessor& other) const { GrMatrixEffect::GrMatrixEffect(const GrMatrixEffect& src) : INHERITED(kGrMatrixEffect_ClassID, src.optimizationFlags()) , fMatrix(src.fMatrix) { - auto child = src.childProcessor(0).clone(); - if (src.childProcessor(0).isSampledWithExplicitCoords()) { - child->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(child)); + this->cloneAndRegisterAllChildProcessors(src); } std::unique_ptr GrMatrixEffect::clone() const { diff --git a/src/gpu/effects/GrMatrixEffect.h b/src/gpu/effects/GrMatrixEffect.h index 18c35e91d368f..0e6bba0b23e8f 100644 --- a/src/gpu/effects/GrMatrixEffect.h +++ b/src/gpu/effects/GrMatrixEffect.h @@ -11,7 +11,6 @@ #include "include/core/SkM44.h" #include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" class GrMatrixEffect : public GrFragmentProcessor { @@ -21,10 +20,7 @@ class GrMatrixEffect : public GrFragmentProcessor { if (matrix.isIdentity()) { return child; } - SkASSERT(!child->isSampledWithExplicitCoords()); - SkASSERT(child->sampleMatrix().fKind == SkSL::SampleMatrix::Kind::kNone); - return std::unique_ptr( - new GrMatrixEffect(matrix, std::move(child))); + return std::unique_ptr(new GrMatrixEffect(matrix, std::move(child))); } std::unique_ptr clone() const override; @@ -35,17 +31,20 @@ class GrMatrixEffect : public GrFragmentProcessor { GrMatrixEffect(const GrMatrixEffect& src); GrMatrixEffect(SkMatrix matrix, std::unique_ptr child) - : INHERITED(kGrMatrixEffect_ClassID, kNone_OptimizationFlags) + : INHERITED(kGrMatrixEffect_ClassID, ProcessorOptimizationFlags(child.get())) , fMatrix(matrix) { SkASSERT(child); - child->setSampleMatrix( - SkSL::SampleMatrix(SkSL::SampleMatrix::Kind::kConstantOrUniform, this, "matrix")); - this->registerChildProcessor(std::move(child)); + this->registerChild(std::move(child), + SkSL::SampleUsage::UniformMatrix( + "matrix", matrix.hasPerspective())); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inputColor) const override { + return ConstantOutputForConstantInput(this->childProcessor(0), inputColor); + } SkMatrix fMatrix; diff --git a/src/gpu/effects/GrMixerEffect.fp b/src/gpu/effects/GrMixerEffect.fp index f2bf79ec982b6..4963c50a5e681 100644 --- a/src/gpu/effects/GrMixerEffect.fp +++ b/src/gpu/effects/GrMixerEffect.fp @@ -39,8 +39,5 @@ in uniform half weight; @optimizationFlags { OptFlags(fp0, fp1) } void main() { - half4 in0 = sample(fp0, sk_InColor); - half4 in1 = (fp1 != null) ? sample(fp1, sk_InColor) : sk_InColor; - - sk_OutColor = mix(in0, in1, weight); + sk_OutColor = mix(sample(fp0, sk_InColor), sample(fp1, sk_InColor), weight); } diff --git a/src/gpu/effects/GrOvalEffect.cpp b/src/gpu/effects/GrOvalEffect.cpp index b7c001cd54b52..a84e6c2c73753 100644 --- a/src/gpu/effects/GrOvalEffect.cpp +++ b/src/gpu/effects/GrOvalEffect.cpp @@ -11,23 +11,20 @@ #include "src/gpu/effects/generated/GrCircleEffect.h" #include "src/gpu/effects/generated/GrEllipseEffect.h" -std::unique_ptr GrOvalEffect::Make(GrClipEdgeType edgeType, const SkRect& oval, - const GrShaderCaps& caps) { - if (GrClipEdgeType::kHairlineAA == edgeType) { - return nullptr; - } +GrFPResult GrOvalEffect::Make(std::unique_ptr inputFP, GrClipEdgeType edgeType, + const SkRect& oval, const GrShaderCaps& caps) { SkScalar w = oval.width(); SkScalar h = oval.height(); if (SkScalarNearlyEqual(w, h)) { w /= 2; - return GrCircleEffect::Make(edgeType, SkPoint::Make(oval.fLeft + w, oval.fTop + w), - w); + return GrCircleEffect::Make(std::move(inputFP), edgeType, + SkPoint::Make(oval.fLeft + w, oval.fTop + w), w); } else { w /= 2; h /= 2; - return GrEllipseEffect::Make(edgeType, SkPoint::Make(oval.fLeft + w, oval.fTop + h), + return GrEllipseEffect::Make(std::move(inputFP), edgeType, + SkPoint::Make(oval.fLeft + w, oval.fTop + h), SkPoint::Make(w, h), caps); } - - return nullptr; + SkUNREACHABLE; } diff --git a/src/gpu/effects/GrOvalEffect.h b/src/gpu/effects/GrOvalEffect.h index 8b4c95d71b1e6..955c1949566cb 100644 --- a/src/gpu/effects/GrOvalEffect.h +++ b/src/gpu/effects/GrOvalEffect.h @@ -11,8 +11,8 @@ #include "include/core/SkRefCnt.h" #include "include/gpu/GrTypes.h" #include "include/private/GrTypesPriv.h" +#include "src/gpu/GrFragmentProcessor.h" -class GrFragmentProcessor; class GrShaderCaps; struct SkRect; @@ -21,7 +21,8 @@ namespace GrOvalEffect { /** * Creates an effect that performs clipping against an oval. */ -std::unique_ptr Make(GrClipEdgeType, const SkRect&, const GrShaderCaps&); +GrFPResult Make(std::unique_ptr, GrClipEdgeType, const SkRect&, + const GrShaderCaps&); }; #endif diff --git a/src/gpu/effects/GrPremulInputFragmentProcessor.fp b/src/gpu/effects/GrPremulInputFragmentProcessor.fp deleted file mode 100644 index cbba607074023..0000000000000 --- a/src/gpu/effects/GrPremulInputFragmentProcessor.fp +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -@optimizationFlags { - kPreservesOpaqueInput_OptimizationFlag | kConstantOutputForConstantInput_OptimizationFlag -} - -void main() { - sk_OutColor = sk_InColor; - sk_OutColor.rgb *= sk_InColor.a; -} - -@class { - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { - return SkColor4f { input.fR, input.fG, input.fB, input.fA }.premul(); - } -} diff --git a/src/gpu/effects/GrRGBToHSLFilterEffect.fp b/src/gpu/effects/GrRGBToHSLFilterEffect.fp index 443fd1ae395ff..b30d798ebbbe4 100644 --- a/src/gpu/effects/GrRGBToHSLFilterEffect.fp +++ b/src/gpu/effects/GrRGBToHSLFilterEffect.fp @@ -25,8 +25,10 @@ // [2] http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl // [3] http://www.chilliant.com/rgb2hsv.html +in fragmentProcessor? inputFP; + void main() { - half4 c = sk_InColor; + half4 c = sample(inputFP, sk_InColor); half4 p = (c.g < c.b) ? half4(c.bg, -1, 2/3.0) : half4(c.gb, 0, -1/3.0); half4 q = (c.r < p.x) ? half4(p.x, c.r, p.yw) @@ -48,13 +50,17 @@ void main() { } @optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & (kConstantOutputForConstantInput_OptimizationFlag | kPreservesOpaqueInput_OptimizationFlag) } @class { #include "include/private/SkColorData.h" - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& c) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f c = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(0), inColor) + : inColor; const auto p = (c.fG < c.fB) ? SkPMColor4f{ c.fB, c.fG, -1, 2/3.f } : SkPMColor4f{ c.fG, c.fB, 0, -1/3.f }, q = (c.fR < p[0]) ? SkPMColor4f{ p[0], c.fR, p[1], p[3] } diff --git a/src/gpu/effects/GrRRectBlurEffect.fp b/src/gpu/effects/GrRRectBlurEffect.fp index 8a66bc2e9aa02..88b2c3b8f9edf 100644 --- a/src/gpu/effects/GrRRectBlurEffect.fp +++ b/src/gpu/effects/GrRRectBlurEffect.fp @@ -5,16 +5,17 @@ * found in the LICENSE file. */ +in fragmentProcessor? inputFP; in float sigma; layout(ctype=SkRect) in float4 rect; in uniform half cornerRadius; -in uniform sampler2D ninePatchSampler; +in fragmentProcessor ninePatchFP; layout(ctype=SkRect) uniform float4 proxyRect; uniform half blurRadius; @header { #include "include/gpu/GrContext.h" - #include "include/private/GrRecordingContext.h" + #include "include/gpu/GrRecordingContext.h" #include "src/core/SkBlurPriv.h" #include "src/core/SkGpuBlurUtils.h" #include "src/core/SkRRectPriv.h" @@ -24,13 +25,15 @@ uniform half blurRadius; #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrStyle.h" + #include "src/gpu/effects/GrTextureEffect.h" } @class { - static GrSurfaceProxyView find_or_create_rrect_blur_mask(GrRecordingContext* context, - const SkRRect& rrectToDraw, - const SkISize& dimensions, - float xformedSigma) { + static std::unique_ptr find_or_create_rrect_blur_mask_fp( + GrRecordingContext* context, + const SkRRect& rrectToDraw, + const SkISize& dimensions, + float xformedSigma) { static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); GrUniqueKey key; GrUniqueKey::Builder builder(&key, kDomain, 9, "RoundRect Blur Mask"); @@ -46,19 +49,26 @@ uniform half blurRadius; } builder.finish(); + // It seems like we could omit this matrix and modify the shader code to not normalize + // the coords used to sample the texture effect. However, the "proxyDims" value in the + // shader is not always the actual the proxy dimensions. This is because 'dimensions' here + // was computed using integer corner radii as determined in + // SkComputeBlurredRRectParams whereas the shader code uses the float radius to compute + // 'proxyDims'. Why it draws correctly with these unequal values is a mystery for the ages. + auto m = SkMatrix::Scale(dimensions.width(), dimensions.height()); static constexpr auto kMaskOrigin = kBottomLeft_GrSurfaceOrigin; GrProxyProvider* proxyProvider = context->priv().proxyProvider(); if (auto view = proxyProvider->findCachedProxyWithColorTypeFallback( key, kMaskOrigin, GrColorType::kAlpha_8, 1)) { - return view; + return GrTextureEffect::Make(std::move(view), kPremul_SkAlphaType, m); } auto rtc = GrRenderTargetContext::MakeWithFallback( context, GrColorType::kAlpha_8, nullptr, SkBackingFit::kExact, dimensions, 1, GrMipMapped::kNo, GrProtected::kNo, kMaskOrigin); if (!rtc) { - return {}; + return nullptr; } GrPaint paint; @@ -69,7 +79,7 @@ uniform half blurRadius; GrSurfaceProxyView srcView = rtc->readSurfaceView(); if (!srcView) { - return {}; + return nullptr; } SkASSERT(srcView.asTextureProxy()); auto rtc2 = SkGpuBlurUtils::GaussianBlur(context, @@ -84,27 +94,28 @@ uniform half blurRadius; SkTileMode::kClamp, SkBackingFit::kExact); if (!rtc2) { - return {}; + return nullptr; } GrSurfaceProxyView mask = rtc2->readSurfaceView(); if (!mask) { - return {}; + return nullptr; } SkASSERT(mask.asTextureProxy()); SkASSERT(mask.origin() == kMaskOrigin); proxyProvider->assignUniqueKeyToProxy(key, mask.asTextureProxy()); - - return mask; + return GrTextureEffect::Make(std::move(mask), kPremul_SkAlphaType, m); } } @optimizationFlags { - kCompatibleWithCoverageAsAlpha_OptimizationFlag + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag } @make { - static std::unique_ptr Make(GrRecordingContext* context, + static std::unique_ptr Make(std::unique_ptr inputFP, + GrRecordingContext* context, float sigma, float xformedSigma, const SkRRect& srcRRect, @@ -112,11 +123,13 @@ uniform half blurRadius; } @cpp { - std::unique_ptr GrRRectBlurEffect::Make(GrRecordingContext* context, - float sigma, - float xformedSigma, - const SkRRect& srcRRect, - const SkRRect& devRRect) { + std::unique_ptr GrRRectBlurEffect::Make( + std::unique_ptr inputFP, + GrRecordingContext* context, + float sigma, + float xformedSigma, + const SkRRect& srcRRect, + const SkRRect& devRRect) { SkASSERT(!SkRRectPriv::IsCircle(devRRect) && !devRRect.isRect()); // Should've been caught up-stream // TODO: loosen this up @@ -145,15 +158,15 @@ uniform half blurRadius; return nullptr; } - GrSurfaceProxyView mask = find_or_create_rrect_blur_mask(context, rrectToDraw, dimensions, - xformedSigma); - if (!mask) { + std::unique_ptr maskFP = find_or_create_rrect_blur_mask_fp( + context, rrectToDraw, dimensions, xformedSigma); + if (!maskFP) { return nullptr; } return std::unique_ptr( - new GrRRectBlurEffect(xformedSigma, devRRect.getBounds(), - SkRRectPriv::GetSimpleRadii(devRRect).fX, std::move(mask))); + new GrRRectBlurEffect(std::move(inputFP), xformedSigma, devRRect.getBounds(), + SkRRectPriv::GetSimpleRadii(devRRect).fX, std::move(maskFP))); } } @@ -164,33 +177,46 @@ uniform half blurRadius; SkScalar sigma = d->fRandom->nextRangeF(1.f,10.f); SkRRect rrect; rrect.setRectXY(SkRect::MakeWH(w, h), r, r); - return GrRRectBlurEffect::Make(d->context(), sigma, sigma, rrect, rrect); + return GrRRectBlurEffect::Make(/*inputFP=*/nullptr, d->context(), sigma, sigma, rrect, rrect); } void main() { - // warp the fragment position to the appropriate part of the 9patch blur texture - - half2 rectCenter = half2((proxyRect.xy + proxyRect.zw) / 2.0); - half2 translatedFragPos = half2(sk_FragCoord.xy - proxyRect.xy); - half threshold = cornerRadius + 2.0 * blurRadius; - half2 middle = half2(proxyRect.zw - proxyRect.xy - 2.0 * threshold); - - if (translatedFragPos.x >= threshold && translatedFragPos.x < (middle.x + threshold)) { - translatedFragPos.x = threshold; - } else if (translatedFragPos.x >= (middle.x + threshold)) { - translatedFragPos.x -= middle.x - 1.0; - } - - if (translatedFragPos.y > threshold && translatedFragPos.y < (middle.y+threshold)) { - translatedFragPos.y = threshold; - } else if (translatedFragPos.y >= (middle.y + threshold)) { - translatedFragPos.y -= middle.y - 1.0; - } - - half2 proxyDims = half2(2.0 * threshold + 1.0); + // Warp the fragment position to the appropriate part of the 9-patch blur texture by snipping + // out the middle section of the proxy rect. + half2 translatedFragPos = half2(sk_FragCoord.xy - proxyRect.LT); + half2 proxyCenter = half2((proxyRect.RB - proxyRect.LT) * 0.5); + half edgeSize = 2.0 * blurRadius + cornerRadius + 0.5; + + // Position the fragment so that (0, 0) marks the center of the proxy rectangle. + // Negative coordinates are on the left/top side and positive numbers are on the right/bottom. + translatedFragPos -= proxyCenter; + + // Temporarily strip off the fragment's sign. x/y are now strictly increasing as we move away + // from the center. + half2 fragDirection = sign(translatedFragPos); + translatedFragPos = abs(translatedFragPos); + + // Our goal is to snip out the "middle section" of the proxy rect (everything but the edge). + // We've repositioned our fragment position so that (0, 0) is the centerpoint and x/y are always + // positive, so we can subtract here and interpret negative results as being within the middle + // section. + translatedFragPos -= proxyCenter - edgeSize; + + // Remove the middle section by clamping to zero. + translatedFragPos = max(translatedFragPos, 0); + + // Reapply the fragment's sign, so that negative coordinates once again mean left/top side and + // positive means bottom/right side. + translatedFragPos *= fragDirection; + + // Offset the fragment so that (0, 0) marks the upper-left again, instead of the center point. + translatedFragPos += half2(edgeSize); + + half2 proxyDims = half2(2.0 * edgeSize); half2 texCoord = translatedFragPos / proxyDims; - sk_OutColor = sk_InColor * sample(ninePatchSampler, texCoord); + half4 inputColor = sample(inputFP, sk_InColor); + sk_OutColor = inputColor * sample(ninePatchFP, texCoord); } @setData(pdman) { diff --git a/src/gpu/effects/GrRRectEffect.cpp b/src/gpu/effects/GrRRectEffect.cpp index f444034e42680..a5f8538f86ad6 100644 --- a/src/gpu/effects/GrRRectEffect.cpp +++ b/src/gpu/effects/GrRRectEffect.cpp @@ -45,8 +45,8 @@ class CircularRRectEffect : public GrFragmentProcessor { // The flags are used to indicate which corners are circluar (unflagged corners are assumed to // be square). - static std::unique_ptr Make(GrClipEdgeType, - uint32_t circularCornerFlags, const SkRRect&); + static GrFPResult Make(std::unique_ptr, GrClipEdgeType, + uint32_t circularCornerFlags, const SkRRect&); ~CircularRRectEffect() override {} @@ -60,8 +60,14 @@ class CircularRRectEffect : public GrFragmentProcessor { GrClipEdgeType getEdgeType() const { return fEdgeType; } + bool hasInputFP() const { + return this->numChildProcessors() > 0; + } + private: - CircularRRectEffect(GrClipEdgeType, uint32_t circularCornerFlags, const SkRRect&); + CircularRRectEffect(std::unique_ptr inputFP, + GrClipEdgeType, uint32_t circularCornerFlags, const SkRRect&); + CircularRRectEffect(const CircularRRectEffect& that); GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; @@ -69,36 +75,50 @@ class CircularRRectEffect : public GrFragmentProcessor { bool onIsEqual(const GrFragmentProcessor& other) const override; - SkRRect fRRect; + SkRRect fRRect; GrClipEdgeType fEdgeType; - uint32_t fCircularCornerFlags; + uint32_t fCircularCornerFlags; GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; }; -std::unique_ptr CircularRRectEffect::Make(GrClipEdgeType edgeType, - uint32_t circularCornerFlags, - const SkRRect& rrect) { +GrFPResult CircularRRectEffect::Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, + uint32_t circularCornerFlags, const SkRRect& rrect) { if (GrClipEdgeType::kFillAA != edgeType && GrClipEdgeType::kInverseFillAA != edgeType) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } - return std::unique_ptr( - new CircularRRectEffect(edgeType, circularCornerFlags, rrect)); + return GrFPSuccess(std::unique_ptr( + new CircularRRectEffect(std::move(inputFP), edgeType, circularCornerFlags, rrect))); } -CircularRRectEffect::CircularRRectEffect(GrClipEdgeType edgeType, uint32_t circularCornerFlags, +CircularRRectEffect::CircularRRectEffect(std::unique_ptr inputFP, + GrClipEdgeType edgeType, uint32_t circularCornerFlags, const SkRRect& rrect) - : INHERITED(kCircularRRectEffect_ClassID, kCompatibleWithCoverageAsAlpha_OptimizationFlag) + : INHERITED( + kCircularRRectEffect_ClassID, + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag) , fRRect(rrect) , fEdgeType(edgeType) , fCircularCornerFlags(circularCornerFlags) { + if (inputFP != nullptr) { + this->registerChild(std::move(inputFP)); + } +} + +CircularRRectEffect::CircularRRectEffect(const CircularRRectEffect& that) + : INHERITED(kCircularRRectEffect_ClassID, that.optimizationFlags()) + , fRRect(that.fRRect) + , fEdgeType(that.fEdgeType) + , fCircularCornerFlags(that.fCircularCornerFlags) { + this->cloneAndRegisterAllChildProcessors(that); } std::unique_ptr CircularRRectEffect::clone() const { - return std::unique_ptr( - new CircularRRectEffect(fEdgeType, fCircularCornerFlags, fRRect)); + return std::unique_ptr(new CircularRRectEffect(*this)); } bool CircularRRectEffect::onIsEqual(const GrFragmentProcessor& other) const { @@ -119,11 +139,13 @@ std::unique_ptr CircularRRectEffect::TestCreate(GrProcessor SkRRect rrect; rrect.setRectXY(SkRect::MakeWH(w, h), r, r); std::unique_ptr fp; + bool success; do { GrClipEdgeType et = (GrClipEdgeType)d->fRandom->nextULessThan(kGrClipEdgeTypeCnt); - fp = GrRRectEffect::Make(et, rrect, *d->caps()->shaderCaps()); - } while (nullptr == fp); + std::tie(success, fp) = GrRRectEffect::Make(/*inputFP=*/nullptr, et, rrect, + *d->caps()->shaderCaps()); + } while (!success); return fp; } #endif @@ -191,85 +213,85 @@ void GLCircularRRectEffect::emitCode(EmitArgs& args) { // alphas together. switch (crre.getCircularCornerFlags()) { case CircularRRectEffect::kAll_CornerFlags: - fragBuilder->codeAppendf("float2 dxy0 = %s.xy - sk_FragCoord.xy;", rectName); - fragBuilder->codeAppendf("float2 dxy1 = sk_FragCoord.xy - %s.zw;", rectName); + fragBuilder->codeAppendf("float2 dxy0 = %s.LT - sk_FragCoord.xy;", rectName); + fragBuilder->codeAppendf("float2 dxy1 = sk_FragCoord.xy - %s.RB;", rectName); fragBuilder->codeAppend("float2 dxy = max(max(dxy0, dxy1), 0.0);"); fragBuilder->codeAppendf("half alpha = half(%s);", clampedCircleDistance.c_str()); break; case CircularRRectEffect::kTopLeft_CornerFlag: - fragBuilder->codeAppendf("float2 dxy = max(%s.xy - sk_FragCoord.xy, 0.0);", + fragBuilder->codeAppendf("float2 dxy = max(%s.LT - sk_FragCoord.xy, 0.0);", rectName); - fragBuilder->codeAppendf("half rightAlpha = half(saturate(%s.z - sk_FragCoord.x));", + fragBuilder->codeAppendf("half rightAlpha = half(saturate(%s.R - sk_FragCoord.x));", rectName); - fragBuilder->codeAppendf("half bottomAlpha = half(saturate(%s.w - sk_FragCoord.y));", + fragBuilder->codeAppendf("half bottomAlpha = half(saturate(%s.B - sk_FragCoord.y));", rectName); fragBuilder->codeAppendf("half alpha = bottomAlpha * rightAlpha * half(%s);", clampedCircleDistance.c_str()); break; case CircularRRectEffect::kTopRight_CornerFlag: - fragBuilder->codeAppendf("float2 dxy = max(float2(sk_FragCoord.x - %s.z, " - "%s.y - sk_FragCoord.y), 0.0);", + fragBuilder->codeAppendf("float2 dxy = max(float2(sk_FragCoord.x - %s.R, " + "%s.T - sk_FragCoord.y), 0.0);", rectName, rectName); - fragBuilder->codeAppendf("half leftAlpha = half(saturate(sk_FragCoord.x - %s.x));", + fragBuilder->codeAppendf("half leftAlpha = half(saturate(sk_FragCoord.x - %s.L));", rectName); - fragBuilder->codeAppendf("half bottomAlpha = half(saturate(%s.w - sk_FragCoord.y));", + fragBuilder->codeAppendf("half bottomAlpha = half(saturate(%s.B - sk_FragCoord.y));", rectName); fragBuilder->codeAppendf("half alpha = bottomAlpha * leftAlpha * half(%s);", clampedCircleDistance.c_str()); break; case CircularRRectEffect::kBottomRight_CornerFlag: - fragBuilder->codeAppendf("float2 dxy = max(sk_FragCoord.xy - %s.zw, 0.0);", + fragBuilder->codeAppendf("float2 dxy = max(sk_FragCoord.xy - %s.RB, 0.0);", rectName); - fragBuilder->codeAppendf("half leftAlpha = half(saturate(sk_FragCoord.x - %s.x));", + fragBuilder->codeAppendf("half leftAlpha = half(saturate(sk_FragCoord.x - %s.L));", rectName); - fragBuilder->codeAppendf("half topAlpha = half(saturate(sk_FragCoord.y - %s.y));", + fragBuilder->codeAppendf("half topAlpha = half(saturate(sk_FragCoord.y - %s.T));", rectName); fragBuilder->codeAppendf("half alpha = topAlpha * leftAlpha * half(%s);", clampedCircleDistance.c_str()); break; case CircularRRectEffect::kBottomLeft_CornerFlag: - fragBuilder->codeAppendf("float2 dxy = max(float2(%s.x - sk_FragCoord.x, " - "sk_FragCoord.y - %s.w), 0.0);", + fragBuilder->codeAppendf("float2 dxy = max(float2(%s.L - sk_FragCoord.x, " + "sk_FragCoord.y - %s.B), 0.0);", rectName, rectName); - fragBuilder->codeAppendf("half rightAlpha = half(saturate(%s.z - sk_FragCoord.x));", + fragBuilder->codeAppendf("half rightAlpha = half(saturate(%s.R - sk_FragCoord.x));", rectName); - fragBuilder->codeAppendf("half topAlpha = half(saturate(sk_FragCoord.y - %s.y));", + fragBuilder->codeAppendf("half topAlpha = half(saturate(sk_FragCoord.y - %s.T));", rectName); fragBuilder->codeAppendf("half alpha = topAlpha * rightAlpha * half(%s);", clampedCircleDistance.c_str()); break; case CircularRRectEffect::kLeft_CornerFlags: - fragBuilder->codeAppendf("float2 dxy0 = %s.xy - sk_FragCoord.xy;", rectName); - fragBuilder->codeAppendf("float dy1 = sk_FragCoord.y - %s.w;", rectName); + fragBuilder->codeAppendf("float2 dxy0 = %s.LT - sk_FragCoord.xy;", rectName); + fragBuilder->codeAppendf("float dy1 = sk_FragCoord.y - %s.B;", rectName); fragBuilder->codeAppend("float2 dxy = max(float2(dxy0.x, max(dxy0.y, dy1)), 0.0);"); - fragBuilder->codeAppendf("half rightAlpha = half(saturate(%s.z - sk_FragCoord.x));", + fragBuilder->codeAppendf("half rightAlpha = half(saturate(%s.R - sk_FragCoord.x));", rectName); fragBuilder->codeAppendf("half alpha = rightAlpha * half(%s);", clampedCircleDistance.c_str()); break; case CircularRRectEffect::kTop_CornerFlags: - fragBuilder->codeAppendf("float2 dxy0 = %s.xy - sk_FragCoord.xy;", rectName); - fragBuilder->codeAppendf("float dx1 = sk_FragCoord.x - %s.z;", rectName); + fragBuilder->codeAppendf("float2 dxy0 = %s.LT - sk_FragCoord.xy;", rectName); + fragBuilder->codeAppendf("float dx1 = sk_FragCoord.x - %s.R;", rectName); fragBuilder->codeAppend("float2 dxy = max(float2(max(dxy0.x, dx1), dxy0.y), 0.0);"); - fragBuilder->codeAppendf("half bottomAlpha = half(saturate(%s.w - sk_FragCoord.y));", + fragBuilder->codeAppendf("half bottomAlpha = half(saturate(%s.B - sk_FragCoord.y));", rectName); fragBuilder->codeAppendf("half alpha = bottomAlpha * half(%s);", clampedCircleDistance.c_str()); break; case CircularRRectEffect::kRight_CornerFlags: - fragBuilder->codeAppendf("float dy0 = %s.y - sk_FragCoord.y;", rectName); - fragBuilder->codeAppendf("float2 dxy1 = sk_FragCoord.xy - %s.zw;", rectName); + fragBuilder->codeAppendf("float dy0 = %s.T - sk_FragCoord.y;", rectName); + fragBuilder->codeAppendf("float2 dxy1 = sk_FragCoord.xy - %s.RB;", rectName); fragBuilder->codeAppend("float2 dxy = max(float2(dxy1.x, max(dy0, dxy1.y)), 0.0);"); - fragBuilder->codeAppendf("half leftAlpha = half(saturate(sk_FragCoord.x - %s.x));", + fragBuilder->codeAppendf("half leftAlpha = half(saturate(sk_FragCoord.x - %s.L));", rectName); fragBuilder->codeAppendf("half alpha = leftAlpha * half(%s);", clampedCircleDistance.c_str()); break; case CircularRRectEffect::kBottom_CornerFlags: - fragBuilder->codeAppendf("float dx0 = %s.x - sk_FragCoord.x;", rectName); - fragBuilder->codeAppendf("float2 dxy1 = sk_FragCoord.xy - %s.zw;", rectName); + fragBuilder->codeAppendf("float dx0 = %s.L - sk_FragCoord.x;", rectName); + fragBuilder->codeAppendf("float2 dxy1 = sk_FragCoord.xy - %s.RB;", rectName); fragBuilder->codeAppend("float2 dxy = max(float2(max(dx0, dxy1.x), dxy1.y), 0.0);"); - fragBuilder->codeAppendf("half topAlpha = half(saturate(sk_FragCoord.y - %s.y));", + fragBuilder->codeAppendf("half topAlpha = half(saturate(sk_FragCoord.y - %s.T));", rectName); fragBuilder->codeAppendf("half alpha = topAlpha * half(%s);", clampedCircleDistance.c_str()); @@ -280,7 +302,11 @@ void GLCircularRRectEffect::emitCode(EmitArgs& args) { fragBuilder->codeAppend("alpha = 1.0 - alpha;"); } - fragBuilder->codeAppendf("%s = %s * alpha;", args.fOutputColor, args.fInputColor); + SkString inputSample = crre.hasInputFP() + ? this->invokeChild(/*childIndex=*/0, args.fInputColor, args) + : SkString(args.fInputColor); + + fragBuilder->codeAppendf("%s = %s * alpha;", args.fOutputColor, inputSample.c_str()); } void GLCircularRRectEffect::GenKey(const GrProcessor& processor, const GrShaderCaps&, @@ -385,7 +411,7 @@ GrGLSLFragmentProcessor* CircularRRectEffect::onCreateGLSLInstance() const { class EllipticalRRectEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(GrClipEdgeType, const SkRRect&); + static GrFPResult Make(std::unique_ptr, GrClipEdgeType, const SkRRect&); ~EllipticalRRectEffect() override {} @@ -397,8 +423,13 @@ class EllipticalRRectEffect : public GrFragmentProcessor { GrClipEdgeType getEdgeType() const { return fEdgeType; } + bool hasInputFP() const { + return this->numChildProcessors() > 0; + } + private: - EllipticalRRectEffect(GrClipEdgeType, const SkRRect&); + EllipticalRRectEffect(std::unique_ptr, GrClipEdgeType, const SkRRect&); + EllipticalRRectEffect(const EllipticalRRectEffect& that); GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; @@ -414,22 +445,37 @@ class EllipticalRRectEffect : public GrFragmentProcessor { typedef GrFragmentProcessor INHERITED; }; -std::unique_ptr EllipticalRRectEffect::Make(GrClipEdgeType edgeType, - const SkRRect& rrect) { +GrFPResult EllipticalRRectEffect::Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, const SkRRect& rrect) { if (GrClipEdgeType::kFillAA != edgeType && GrClipEdgeType::kInverseFillAA != edgeType) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } - return std::unique_ptr(new EllipticalRRectEffect(edgeType, rrect)); + return GrFPSuccess(std::unique_ptr( + new EllipticalRRectEffect(std::move(inputFP), edgeType, rrect))); } -EllipticalRRectEffect::EllipticalRRectEffect(GrClipEdgeType edgeType, const SkRRect& rrect) - : INHERITED(kEllipticalRRectEffect_ClassID, kCompatibleWithCoverageAsAlpha_OptimizationFlag) +EllipticalRRectEffect::EllipticalRRectEffect(std::unique_ptr inputFP, + GrClipEdgeType edgeType, const SkRRect& rrect) + : INHERITED( + kEllipticalRRectEffect_ClassID, + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag) , fRRect(rrect) , fEdgeType(edgeType) { + if (inputFP != nullptr) { + this->registerChild(std::move(inputFP)); + } +} + +EllipticalRRectEffect::EllipticalRRectEffect(const EllipticalRRectEffect& that) + : INHERITED(kEllipticalRRectEffect_ClassID, that.optimizationFlags()) + , fRRect(that.fRRect) + , fEdgeType(that.fEdgeType) { + this->cloneAndRegisterAllChildProcessors(that); } std::unique_ptr EllipticalRRectEffect::clone() const { - return std::unique_ptr(new EllipticalRRectEffect(fEdgeType, fRRect)); + return std::unique_ptr(new EllipticalRRectEffect(*this)); } bool EllipticalRRectEffect::onIsEqual(const GrFragmentProcessor& other) const { @@ -470,10 +516,12 @@ std::unique_ptr EllipticalRRectEffect::TestCreate(GrProcess r[SkRRect::kUpperLeft_Corner].fY); } std::unique_ptr fp; + bool success; do { GrClipEdgeType et = (GrClipEdgeType)d->fRandom->nextULessThan(kGrClipEdgeTypeCnt); - fp = GrRRectEffect::Make(et, rrect, *d->caps()->shaderCaps()); - } while (nullptr == fp); + std::tie(success, fp) = GrRRectEffect::Make(/*inputFP=*/nullptr, et, rrect, + *d->caps()->shaderCaps()); + } while (!success); return fp; } #endif @@ -520,8 +568,8 @@ void GLEllipticalRRectEffect::emitCode(EmitArgs& args) { // The code below is a simplified version of the above that performs maxs on the vector // components before computing distances and alpha values so that only one distance computation // need be computed to determine the min alpha. - fragBuilder->codeAppendf("float2 dxy0 = %s.xy - sk_FragCoord.xy;", rectName); - fragBuilder->codeAppendf("float2 dxy1 = sk_FragCoord.xy - %s.zw;", rectName); + fragBuilder->codeAppendf("float2 dxy0 = %s.LT - sk_FragCoord.xy;", rectName); + fragBuilder->codeAppendf("float2 dxy1 = sk_FragCoord.xy - %s.RB;", rectName); // If we're on a device where float != fp32 then we'll do the distance computation in a space // that is normalized by the largest radius. The scale uniform will be scale, 1/scale. The @@ -589,7 +637,11 @@ void GLEllipticalRRectEffect::emitCode(EmitArgs& args) { fragBuilder->codeAppend("half alpha = clamp(0.5 + approx_dist, 0.0, 1.0);"); } - fragBuilder->codeAppendf("%s = %s * alpha;", args.fOutputColor, args.fInputColor); + SkString inputSample = erre.hasInputFP() + ? this->invokeChild(/*childIndex=*/0, args.fInputColor, args) + : SkString(args.fInputColor); + + fragBuilder->codeAppendf("%s = %s * alpha;", args.fOutputColor, inputSample.c_str()); } void GLEllipticalRRectEffect::GenKey(const GrProcessor& effect, const GrShaderCaps&, @@ -671,15 +723,15 @@ GrGLSLFragmentProcessor* EllipticalRRectEffect::onCreateGLSLInstance() const { ////////////////////////////////////////////////////////////////////////////// -std::unique_ptr GrRRectEffect::Make(GrClipEdgeType edgeType, - const SkRRect& rrect, - const GrShaderCaps& caps) { +GrFPResult GrRRectEffect::Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, const SkRRect& rrect, + const GrShaderCaps& caps) { if (rrect.isRect()) { - return GrConvexPolyEffect::Make(edgeType, rrect.getBounds()); + return GrConvexPolyEffect::Make(std::move(inputFP), edgeType, rrect.getBounds()); } if (rrect.isOval()) { - return GrOvalEffect::Make(edgeType, rrect.getBounds(), caps); + return GrOvalEffect::Make(std::move(inputFP), edgeType, rrect.getBounds(), caps); } if (rrect.isSimple()) { @@ -687,13 +739,13 @@ std::unique_ptr GrRRectEffect::Make(GrClipEdgeType edgeType SkRRectPriv::GetSimpleRadii(rrect).fY < kRadiusMin) { // In this case the corners are extremely close to rectangular and we collapse the // clip to a rectangular clip. - return GrConvexPolyEffect::Make(edgeType, rrect.getBounds()); + return GrConvexPolyEffect::Make(std::move(inputFP), edgeType, rrect.getBounds()); } if (SkRRectPriv::GetSimpleRadii(rrect).fX == SkRRectPriv::GetSimpleRadii(rrect).fY) { - return CircularRRectEffect::Make(edgeType, CircularRRectEffect::kAll_CornerFlags, - rrect); + return CircularRRectEffect::Make(std::move(inputFP), edgeType, + CircularRRectEffect::kAll_CornerFlags, rrect); } else { - return EllipticalRRectEffect::Make(edgeType, rrect); + return EllipticalRRectEffect::Make(std::move(inputFP), edgeType, rrect); } } @@ -737,6 +789,7 @@ std::unique_ptr GrRRectEffect::Make(GrClipEdgeType edgeType // This rrect should have been caught in the simple case above. Though, it would // be correctly handled in the fallthrough code. SkASSERT(false); + [[fallthrough]]; case CircularRRectEffect::kTopLeft_CornerFlag: case CircularRRectEffect::kTopRight_CornerFlag: case CircularRRectEffect::kBottomRight_CornerFlag: @@ -749,24 +802,24 @@ std::unique_ptr GrRRectEffect::Make(GrClipEdgeType edgeType if (squashedRadii) { rr.writable()->setRectRadii(rrect.getBounds(), radii); } - return CircularRRectEffect::Make(edgeType, cornerFlags, *rr); + return CircularRRectEffect::Make(std::move(inputFP), edgeType, cornerFlags, *rr); + } + case CircularRRectEffect::kNone_CornerFlags: { + return GrConvexPolyEffect::Make(std::move(inputFP), edgeType, rrect.getBounds()); } - case CircularRRectEffect::kNone_CornerFlags: - return GrConvexPolyEffect::Make(edgeType, rrect.getBounds()); default: { if (squashedRadii) { // If we got here then we squashed some but not all the radii to zero. (If all // had been squashed cornerFlags would be 0.) The elliptical effect doesn't // support some rounded and some square corners. - return nullptr; + return GrFPFailure(std::move(inputFP)); } if (rrect.isNinePatch()) { - return EllipticalRRectEffect::Make(edgeType, rrect); + return EllipticalRRectEffect::Make(std::move(inputFP), edgeType, rrect); } - return nullptr; + return GrFPFailure(std::move(inputFP)); } } } - - return nullptr; + return GrFPFailure(std::move(inputFP)); } diff --git a/src/gpu/effects/GrRRectEffect.h b/src/gpu/effects/GrRRectEffect.h index 426cb8f3c2c81..e61246fdd94dc 100644 --- a/src/gpu/effects/GrRRectEffect.h +++ b/src/gpu/effects/GrRRectEffect.h @@ -11,8 +11,8 @@ #include "include/core/SkRefCnt.h" #include "include/gpu/GrTypes.h" #include "include/private/GrTypesPriv.h" +#include "src/gpu/GrFragmentProcessor.h" -class GrFragmentProcessor; class GrShaderCaps; class GrProcessor; class SkRRect; @@ -21,9 +21,11 @@ namespace GrRRectEffect { /** * Creates an effect that performs anti-aliased clipping against a SkRRect. It doesn't support - * all varieties of SkRRect so the caller must check for a nullptr return. + * all varieties of SkRRect, so the caller must check `success` in the GrFPResult. */ -std::unique_ptr Make(GrClipEdgeType, const SkRRect&, const GrShaderCaps&); +GrFPResult Make(std::unique_ptr, GrClipEdgeType, const SkRRect&, + const GrShaderCaps&); + }; #endif diff --git a/src/gpu/effects/GrRectBlurEffect.fp b/src/gpu/effects/GrRectBlurEffect.fp index ec11611dda973..22c08b2cdb6fd 100644 --- a/src/gpu/effects/GrRectBlurEffect.fp +++ b/src/gpu/effects/GrRectBlurEffect.fp @@ -10,15 +10,17 @@ #include "include/core/SkRect.h" #include "include/core/SkScalar.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkBlurMask.h" #include "src/core/SkMathPriv.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrShaderCaps.h" +#include "src/gpu/effects/GrTextureEffect.h" } +in fragmentProcessor? inputFP; in float4 rect; layout(key) bool highp = abs(rect.x) > 16000 || abs(rect.y) > 16000 || @@ -27,17 +29,20 @@ layout(key) bool highp = abs(rect.x) > 16000 || abs(rect.y) > 16000 || layout(when= highp) uniform float4 rectF; layout(when=!highp) uniform half4 rectH; -// Texture that is a LUT for integral of normal distribution. The value at x (where x is a texture -// coord between 0 and 1) is the integral from -inf to (3 * sigma * (-2 * x - 1)). I.e. x is mapped -// 0 3*sigma to -3 sigma. The flip saves a reversal in the shader. -in uniform sampler2D integral; -// Used to produce normalized texture coords for lookups in 'integral' -in uniform half invSixSigma; +// Effect that is a LUT for integral of normal distribution. The value at x:[0,6*sigma] is the +// integral from -inf to (3*sigma - x). I.e. x is mapped from [0, 6*sigma] to [3*sigma to -3*sigma]. +// The flip saves a reversal in the shader. +in fragmentProcessor integral; // There is a fast variant of the effect that does 2 texture lookups and a more general one for // wider blurs relative to rect sizes that does 4. layout(key) in bool isFast; +@optimizationFlags { + (inputFP ? ProcessorOptimizationFlags(inputFP.get()) : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag +} + @constructorParams { GrSamplerState samplerParams } @@ -45,8 +50,10 @@ layout(key) in bool isFast; @samplerParams(integral) { samplerParams } + @class { -static GrSurfaceProxyView CreateIntegralTexture(GrRecordingContext* context, float sixSigma) { +static std::unique_ptr MakeIntegralFP(GrRecordingContext* context, + float sixSigma) { // The texture we're producing represents the integral of a normal distribution over a six-sigma // range centered at zero. We want enough resolution so that the linear interpolation done in // texture lookup doesn't introduce noticeable artifacts. We conservatively choose to have 2 @@ -61,11 +68,15 @@ static GrSurfaceProxyView CreateIntegralTexture(GrRecordingContext* context, flo builder[0] = width; builder.finish(); + SkMatrix m = SkMatrix::Scale(width/sixSigma, 1.f); + GrProxyProvider* proxyProvider = context->priv().proxyProvider(); if (sk_sp proxy = proxyProvider->findOrCreateProxyByUniqueKey(key)) { GrSwizzle swizzle = context->priv().caps()->getReadSwizzle(proxy->backendFormat(), GrColorType::kAlpha_8); - return {std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle}; + GrSurfaceProxyView view{std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle}; + return GrTextureEffect::Make( + std::move(view), kPremul_SkAlphaType, m, GrSamplerState::Filter::kBilerp); } SkBitmap bitmap; @@ -90,12 +101,14 @@ static GrSurfaceProxyView CreateIntegralTexture(GrRecordingContext* context, flo } SkASSERT(view.origin() == kTopLeft_GrSurfaceOrigin); proxyProvider->assignUniqueKeyToProxy(key, view.asTextureProxy()); - return view; + return GrTextureEffect::Make( + std::move(view), kPremul_SkAlphaType, m, GrSamplerState::Filter::kBilerp); } } @make { - static std::unique_ptr Make(GrRecordingContext* context, + static std::unique_ptr Make(std::unique_ptr inputFP, + GrRecordingContext* context, const GrShaderCaps& caps, const SkRect& rect, float sigma) { SkASSERT(rect.isSorted()); @@ -110,7 +123,7 @@ static GrSurfaceProxyView CreateIntegralTexture(GrRecordingContext* context, flo } const float sixSigma = 6 * sigma; - GrSurfaceProxyView integral = CreateIntegralTexture(context, sixSigma); + std::unique_ptr integral = MakeIntegralFP(context, sixSigma); if (!integral) { return nullptr; } @@ -130,71 +143,61 @@ static GrSurfaceProxyView CreateIntegralTexture(GrRecordingContext* context, flo // less than 6 sigma wide then things aren't so simple and we have to consider both the // left and right edge of the rectangle (and similar in y). bool isFast = insetRect.isSorted(); - // 1 / (6 * sigma) is the domain of the integral texture. We use the inverse to produce - // normalized texture coords from frag coord distances. - float invSixSigma = 1.f / sixSigma; - return std::unique_ptr(new GrRectBlurEffect(insetRect, - std::move(integral), invSixSigma, isFast, GrSamplerState::Filter::kBilerp)); + return std::unique_ptr(new GrRectBlurEffect( + std::move(inputFP), insetRect, std::move(integral), + isFast, GrSamplerState::Filter::kBilerp)); } } void main() { - half xCoverage, yCoverage; - @if (isFast) { - // Get the smaller of the signed distance from the frag coord to the left and right - // edges and similar for y. - // The integral texture goes "backwards" (from 3*sigma to -3*sigma), So, the below - // computations align the left edge of the integral texture with the inset rect's edge - // extending outward 6 * sigma from the inset rect. - half x, y; - @if (highp) { - x = max(half(rectF.x - sk_FragCoord.x), half(sk_FragCoord.x - rectF.z)); - y = max(half(rectF.y - sk_FragCoord.y), half(sk_FragCoord.y - rectF.w)); - } else { - x = max(half(rectH.x - sk_FragCoord.x), half(sk_FragCoord.x - rectH.z)); - y = max(half(rectH.y - sk_FragCoord.y), half(sk_FragCoord.y - rectH.w)); - } - xCoverage = sample(integral, half2(x * invSixSigma, 0.5)).a; - yCoverage = sample(integral, half2(y * invSixSigma, 0.5)).a; - sk_OutColor = sk_InColor * xCoverage * yCoverage; + half xCoverage, yCoverage; + @if (isFast) { + // Get the smaller of the signed distance from the frag coord to the left and right + // edges and similar for y. + // The integral texture goes "backwards" (from 3*sigma to -3*sigma), So, the below + // computations align the left edge of the integral texture with the inset rect's edge + // extending outward 6 * sigma from the inset rect. + half2 xy; + @if (highp) { + xy = max(half2(rectF.LT - sk_FragCoord.xy), + half2(sk_FragCoord.xy - rectF.RB)); + } else { + xy = max(half2(rectH.LT - sk_FragCoord.xy), + half2(sk_FragCoord.xy - rectH.RB)); + } + xCoverage = sample(integral, half2(xy.x, 0.5)).a; + yCoverage = sample(integral, half2(xy.y, 0.5)).a; + } else { + // We just consider just the x direction here. In practice we compute x and y separately + // and multiply them together. + // We define our coord system so that the point at which we're evaluating a kernel + // defined by the normal distribution (K) at 0. In this coord system let L be left + // edge and R be the right edge of the rectangle. + // We can calculate C by integrating K with the half infinite ranges outside the L to R + // range and subtracting from 1: + // C = 1 - - + // K is symmetric about x=0 so: + // C = 1 - - + + // The integral texture goes "backwards" (from 3*sigma to -3*sigma) which is factored + // in to the below calculations. + // Also, our rect uniform was pre-inset by 3 sigma from the actual rect being blurred, + // also factored in. + half4 rect; + @if (highp) { + rect.LT = half2(rectF.LT - sk_FragCoord.xy); + rect.RB = half2(sk_FragCoord.xy - rectF.RB); } else { - // We just consider just the x direction here. In practice we compute x and y separately - // and multiply them together. - // We define our coord system so that the point at which we're evaluating a kernel - // defined by the normal distribution (K) as 0. In this coord system let L be left - // edge and R be the right edge of the rectangle. - // We can calculate C by integrating K with the half infinite ranges outside the L to R - // range and subtracting from 1: - // C = 1 - - - // K is symmetric about x=0 so: - // C = 1 - - - - // The integral texture goes "backwards" (from 3*sigma to -3*sigma) which is factored - // in to the below calculations. - // Also, our rect uniform was pre-inset by 3 sigma from the actual rect being blurred, - // also factored in. - half l, r, t, b; - @if (highp) { - l = half(sk_FragCoord.x - rectF.x); - r = half(rectF.z - sk_FragCoord.x); - t = half(sk_FragCoord.y - rectF.y); - b = half(rectF.w - sk_FragCoord.y); - } else { - l = half(sk_FragCoord.x - rectH.x); - r = half(rectH.z - sk_FragCoord.x); - t = half(sk_FragCoord.y - rectH.y); - b = half(rectH.w - sk_FragCoord.y); - } - half il = 1 + l * invSixSigma; - half ir = 1 + r * invSixSigma; - half it = 1 + t * invSixSigma; - half ib = 1 + b * invSixSigma; - xCoverage = 1 - sample(integral, half2(il, 0.5)).a - - sample(integral, half2(ir, 0.5)).a; - yCoverage = 1 - sample(integral, half2(it, 0.5)).a - - sample(integral, half2(ib, 0.5)).a; + rect.LT = half2(rectH.LT - sk_FragCoord.xy); + rect.RB = half2(sk_FragCoord.xy - rectH.RB); } - sk_OutColor = sk_InColor * xCoverage * yCoverage; + xCoverage = 1 - sample(integral, half2(rect.L, 0.5)).a + - sample(integral, half2(rect.R, 0.5)).a; + yCoverage = 1 - sample(integral, half2(rect.T, 0.5)).a + - sample(integral, half2(rect.B, 0.5)).a; + } + half4 inputColor = sample(inputFP, sk_InColor); + sk_OutColor = inputColor * xCoverage * yCoverage; } @setData(pdman) { @@ -202,12 +205,10 @@ void main() { pdman.set4fv(highp ? rectF : rectH, 1, r); } -@optimizationFlags { kCompatibleWithCoverageAsAlpha_OptimizationFlag } - @test(data) { float sigma = data->fRandom->nextRangeF(3,8); float width = data->fRandom->nextRangeF(200,300); float height = data->fRandom->nextRangeF(200,300); - return GrRectBlurEffect::Make(data->context(), *data->caps()->shaderCaps(), + return GrRectBlurEffect::Make(/*inputFP=*/nullptr, data->context(), *data->caps()->shaderCaps(), SkRect::MakeWH(width, height), sigma); } diff --git a/src/gpu/effects/GrShadowGeoProc.cpp b/src/gpu/effects/GrShadowGeoProc.cpp index de6db266441b3..189f550bab6a8 100644 --- a/src/gpu/effects/GrShadowGeoProc.cpp +++ b/src/gpu/effects/GrShadowGeoProc.cpp @@ -22,7 +22,6 @@ class GrGLSLRRectShadowGeoProc : public GrGLSLGeometryProcessor { const GrRRectShadowGeoProc& rsgp = args.fGP.cast(); GrGLSLVertexBuilder* vertBuilder = args.fVertBuilder; GrGLSLVaryingHandler* varyingHandler = args.fVaryingHandler; - GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; // emit attributes @@ -35,13 +34,7 @@ class GrGLSLRRectShadowGeoProc : public GrGLSLGeometryProcessor { // Setup position this->writeOutputPosition(vertBuilder, gpArgs, rsgp.inPosition().name()); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - rsgp.inPosition().asShaderVar(), - args.fFPCoordTransformHandler); + // No need for local coordinates, this GP does not combine with fragment processors fragBuilder->codeAppend("half d = length(shadowParams.xy);"); fragBuilder->codeAppend("float2 uv = float2(shadowParams.z * (1.0 - d), 0.5);"); @@ -51,9 +44,7 @@ class GrGLSLRRectShadowGeoProc : public GrGLSLGeometryProcessor { fragBuilder->codeAppendf("%s = half4(factor);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - const CoordTransformRange& transformRange) override { - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc) override { } private: diff --git a/src/gpu/effects/GrSkSLFP.cpp b/src/gpu/effects/GrSkSLFP.cpp index 407d61af499bc..1f9f429b16663 100644 --- a/src/gpu/effects/GrSkSLFP.cpp +++ b/src/gpu/effects/GrSkSLFP.cpp @@ -23,49 +23,51 @@ class GrGLSLSkSLFP : public GrGLSLFragmentProcessor { SkSL::String expandFormatArgs(const SkSL::String& raw, EmitArgs& args, - std::vector::const_iterator& fmtArg, - const char* coordsName) { + std::vector::const_iterator& fmtArg) { SkSL::String result; int substringStartIndex = 0; for (size_t i = 0; i < raw.length(); ++i) { char c = raw[i]; - if (c == '%') { + if (c == SkSL::Compiler::kFormatArgPlaceholder) { result += SkSL::StringFragment(raw.c_str() + substringStartIndex, i - substringStartIndex); - ++i; - c = raw[i]; - switch (c) { - case 's': { - const SkSL::Compiler::FormatArg& arg = *fmtArg++; - switch (arg.fKind) { - case SkSL::Compiler::FormatArg::Kind::kInput: - result += args.fInputColor; - break; - case SkSL::Compiler::FormatArg::Kind::kOutput: - result += args.fOutputColor; - break; - case SkSL::Compiler::FormatArg::Kind::kCoords: - result += coordsName; - break; - case SkSL::Compiler::FormatArg::Kind::kUniform: - result += args.fUniformHandler->getUniformCStr( - fUniformHandles[arg.fIndex]); - break; - case SkSL::Compiler::FormatArg::Kind::kChildProcessor: { - SkSL::String coords = this->expandFormatArgs(arg.fCoords, args, - fmtArg, coordsName); - result += this->invokeChild(arg.fIndex, args, coords).c_str(); - break; - } - case SkSL::Compiler::FormatArg::Kind::kFunctionName: - SkASSERT((int) fFunctionNames.size() > arg.fIndex); - result += fFunctionNames[arg.fIndex].c_str(); - break; - } + const SkSL::Compiler::FormatArg& arg = *fmtArg++; + switch (arg.fKind) { + case SkSL::Compiler::FormatArg::Kind::kInput: + result += args.fInputColor; + break; + case SkSL::Compiler::FormatArg::Kind::kOutput: + result += args.fOutputColor; + break; + case SkSL::Compiler::FormatArg::Kind::kCoords: + result += args.fSampleCoord; + break; + case SkSL::Compiler::FormatArg::Kind::kUniform: + result += args.fUniformHandler->getUniformCStr(fUniformHandles[arg.fIndex]); + break; + case SkSL::Compiler::FormatArg::Kind::kChildProcessor: { + SkSL::String coords = this->expandFormatArgs(arg.fCoords, args, fmtArg); + result += this->invokeChild(arg.fIndex, args, coords).c_str(); + break; + } + case SkSL::Compiler::FormatArg::Kind::kChildProcessorWithMatrix: { + const auto& fp(args.fFp.cast()); + const auto& sampleUsages(fp.fEffect->fSampleUsages); + + SkASSERT((size_t)arg.fIndex < sampleUsages.size()); + const SkSL::SampleUsage& sampleUsage(sampleUsages[arg.fIndex]); + + SkSL::String coords = this->expandFormatArgs(arg.fCoords, args, fmtArg); + result += this->invokeChildWithMatrix( + arg.fIndex, args, + sampleUsage.hasUniformMatrix() ? "" : coords) + .c_str(); break; } - default: - result += c; + case SkSL::Compiler::FormatArg::Kind::kFunctionName: + SkASSERT((int) fFunctionNames.size() > arg.fIndex); + result += fFunctionNames[arg.fIndex].c_str(); + break; } substringStartIndex = i + 1; } @@ -88,20 +90,16 @@ class GrGLSLSkSLFP : public GrGLSLFragmentProcessor { } } GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - SkASSERT(args.fTransformedCoords.count() == 1); - SkString coords = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - fp.sampleMatrix()); std::vector childNames; - // We need to ensure that we call invokeChild on each child FP at least once. + // We need to ensure that we emit each child's helper function at least once. // Any child FP that isn't sampled won't trigger a call otherwise, leading to asserts later. for (int i = 0; i < this->numChildProcessors(); ++i) { - (void)this->invokeChild(i, args, SkSL::String("_coords")); + this->emitChildFunction(i, args); } for (const auto& f : fArgs.fFunctions) { fFunctionNames.emplace_back(); auto fmtArgIter = f.fFormatArgs.cbegin(); - SkSL::String body = - this->expandFormatArgs(f.fBody.c_str(), args, fmtArgIter, coords.c_str()); + SkSL::String body = this->expandFormatArgs(f.fBody, args, fmtArgIter); SkASSERT(fmtArgIter == f.fFormatArgs.cend()); fragBuilder->emitFunction(f.fReturnType, f.fName.c_str(), @@ -111,8 +109,7 @@ class GrGLSLSkSLFP : public GrGLSLFragmentProcessor { &fFunctionNames.back()); } auto fmtArgIter = fArgs.fFormatArgs.cbegin(); - fragBuilder->codeAppend(this->expandFormatArgs(fArgs.fCode.c_str(), args, fmtArgIter, - coords.c_str()).c_str()); + fragBuilder->codeAppend(this->expandFormatArgs(fArgs.fCode, args, fmtArgIter).c_str()); SkASSERT(fmtArgIter == fArgs.fFormatArgs.cend()); } @@ -164,9 +161,6 @@ class GrGLSLSkSLFP : public GrGLSLFragmentProcessor { std::unique_ptr GrSkSLFP::Make(GrContext_Base* context, sk_sp effect, const char* name, sk_sp inputs) { - if (!inputs) { - inputs = SkData::MakeEmpty(); - } if (inputs->size() != effect->inputSize()) { return nullptr; } @@ -183,7 +177,9 @@ GrSkSLFP::GrSkSLFP(sk_sp shaderCaps, ShaderErrorHandler* sha , fEffect(std::move(effect)) , fName(name) , fInputs(std::move(inputs)) { - this->addCoordTransform(&fCoordTransform); + if (fEffect->usesSampleCoords()) { + this->setUsesSampleCoordsDirectly(); + } } GrSkSLFP::GrSkSLFP(const GrSkSLFP& other) @@ -193,7 +189,9 @@ GrSkSLFP::GrSkSLFP(const GrSkSLFP& other) , fEffect(other.fEffect) , fName(other.fName) , fInputs(other.fInputs) { - this->addCoordTransform(&fCoordTransform); + if (fEffect->usesSampleCoords()) { + this->setUsesSampleCoordsDirectly(); + } } const char* GrSkSLFP::name() const { @@ -201,8 +199,9 @@ const char* GrSkSLFP::name() const { } void GrSkSLFP::addChild(std::unique_ptr child) { - child->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(child)); + int childIndex = this->numChildProcessors(); + SkASSERT((size_t)childIndex < fEffect->fSampleUsages.size()); + this->registerChild(std::move(child), fEffect->fSampleUsages[childIndex]); } GrGLSLFragmentProcessor* GrSkSLFP::onCreateGLSLInstance() const { @@ -262,6 +261,7 @@ GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrSkSLFP); #include "include/effects/SkArithmeticImageFilter.h" #include "include/effects/SkOverdrawColorFilter.h" #include "include/gpu/GrContext.h" +#include "src/core/SkColorFilterBase.h" #include "src/gpu/effects/generated/GrConstColorProcessor.h" extern const char* SKSL_ARITHMETIC_SRC; @@ -287,7 +287,7 @@ std::unique_ptr GrSkSLFP::TestCreate(GrProcessorTestData* d auto result = GrSkSLFP::Make(d->context(), effect, "Arithmetic", SkData::MakeWithCopy(&inputs, sizeof(inputs))); result->addChild(GrConstColorProcessor::Make( - SK_PMColor4fWHITE, GrConstColorProcessor::InputMode::kIgnore)); + /*inputFP=*/nullptr, SK_PMColor4fWHITE, GrConstColorProcessor::InputMode::kIgnore)); return std::unique_ptr(result.release()); } case 2: { @@ -295,8 +295,8 @@ std::unique_ptr GrSkSLFP::TestCreate(GrProcessorTestData* d for (SkColor& c : colors) { c = d->fRandom->nextU(); } - return SkOverdrawColorFilter::MakeWithSkColors(colors) - ->asFragmentProcessor(d->context(), GrColorInfo{}); + auto filter = SkOverdrawColorFilter::MakeWithSkColors(colors); + return as_CFB(filter)->asFragmentProcessor(d->context(), GrColorInfo{}); } } SK_ABORT("unreachable"); diff --git a/src/gpu/effects/GrSkSLFP.h b/src/gpu/effects/GrSkSLFP.h index 8dc9e302fcb74..12b3f2dc14c42 100644 --- a/src/gpu/effects/GrSkSLFP.h +++ b/src/gpu/effects/GrSkSLFP.h @@ -11,7 +11,6 @@ #include "include/core/SkRefCnt.h" #include "include/gpu/GrContextOptions.h" #include "src/gpu/GrCaps.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" #include "src/sksl/SkSLCompiler.h" #include "src/sksl/SkSLPipelineStageCodeGenerator.h" @@ -98,8 +97,6 @@ class GrSkSLFP : public GrFragmentProcessor { const char* fName; sk_sp fInputs; - GrCoordTransform fCoordTransform; - GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; diff --git a/src/gpu/effects/GrTextureEffect.cpp b/src/gpu/effects/GrTextureEffect.cpp index 68196771738fa..fe7792a407be5 100644 --- a/src/gpu/effects/GrTextureEffect.cpp +++ b/src/gpu/effects/GrTextureEffect.cpp @@ -7,6 +7,7 @@ #include "src/gpu/effects/GrTextureEffect.h" +#include "src/core/SkMatrixPriv.h" #include "src/gpu/GrTexture.h" #include "src/gpu/GrTexturePriv.h" #include "src/gpu/effects/GrMatrixEffect.h" @@ -31,7 +32,8 @@ struct GrTextureEffect::Sampling { const SkRect&, const SkRect*, const float border[4], - const GrCaps&); + const GrCaps&, + SkVector bilerpInset = {0.5f, 0.5f}); inline bool hasBorderAlpha() const; }; @@ -40,7 +42,8 @@ GrTextureEffect::Sampling::Sampling(const GrSurfaceProxy& proxy, const SkRect& subset, const SkRect* domain, const float border[4], - const GrCaps& caps) { + const GrCaps& caps, + SkVector bilerpInset) { struct Span { float fA = 0.f, fB = 0.f; @@ -64,7 +67,7 @@ GrTextureEffect::Sampling::Sampling(const GrSurfaceProxy& proxy, auto type = proxy.asTextureProxy()->textureType(); auto filter = sampler.filter(); - auto resolve = [type, &caps, filter, &border](int size, Mode mode, Span subset, Span domain) { + auto resolve = [&](int size, Mode mode, Span subset, Span domain, float bilerpInset) { Result1D r; bool canDoModeInHW = true; // TODO: Use HW border color when available. @@ -96,7 +99,7 @@ GrTextureEffect::Sampling::Sampling(const GrSurfaceProxy& proxy, // and GPU-specific snapping at the boundary). r.fShaderClamp = isubset.makeInset(0.5f); } else { - r.fShaderClamp = subset.makeInset(0.5f); + r.fShaderClamp = subset.makeInset(bilerpInset); if (r.fShaderClamp.contains(domain)) { domainIsSafe = true; } @@ -110,7 +113,7 @@ GrTextureEffect::Sampling::Sampling(const GrSurfaceProxy& proxy, r.fShaderSubset = r.fShaderClamp = {0, 0}; return r; } - r.fShaderMode = static_cast(mode); + r.fShaderMode = GetShaderMode(mode, filter); r.fHWMode = Mode::kClamp; return r; }; @@ -120,12 +123,12 @@ GrTextureEffect::Sampling::Sampling(const GrSurfaceProxy& proxy, Span subsetX{subset.fLeft, subset.fRight}; auto domainX = domain ? Span{domain->fLeft, domain->fRight} : Span{SK_FloatNegativeInfinity, SK_FloatInfinity}; - auto x = resolve(dim.width(), sampler.wrapModeX(), subsetX, domainX); + auto x = resolve(dim.width(), sampler.wrapModeX(), subsetX, domainX, bilerpInset.fX); Span subsetY{subset.fTop, subset.fBottom}; auto domainY = domain ? Span{domain->fTop, domain->fBottom} : Span{SK_FloatNegativeInfinity, SK_FloatInfinity}; - auto y = resolve(dim.height(), sampler.wrapModeY(), subsetY, domainY); + auto y = resolve(dim.height(), sampler.wrapModeY(), subsetY, domainY, bilerpInset.fY); fHWSampler = {x.fHWMode, y.fHWMode, filter}; fShaderModes[0] = x.fShaderMode; @@ -142,8 +145,7 @@ bool GrTextureEffect::Sampling::hasBorderAlpha() const { fHWSampler.wrapModeY() == GrSamplerState::WrapMode::kClampToBorder) { return true; } - if (fShaderModes[0] == ShaderMode::kClampToBorder || - fShaderModes[1] == ShaderMode::kClampToBorder) { + if (ShaderModeIsClampToBorder(fShaderModes[0]) || ShaderModeIsClampToBorder(fShaderModes[1])) { return fBorder[3] < 1.f; } return false; @@ -258,30 +260,54 @@ std::unique_ptr GrTextureEffect::MakeSubset(GrSurfaceProxyV lazyProxyNormalization))); } -GrTextureEffect::FilterLogic GrTextureEffect::GetFilterLogic(ShaderMode mode, - GrSamplerState::Filter filter) { +std::unique_ptr GrTextureEffect::MakeBilerpWithInset( + GrSurfaceProxyView view, + SkAlphaType alphaType, + const SkMatrix& matrix, + GrSamplerState::WrapMode wx, + GrSamplerState::WrapMode wy, + const SkRect& subset, + SkVector inset, + const GrCaps& caps, + const float border[4]) { + GrSamplerState sampler(wx, wy, GrSamplerState::Filter::kBilerp); + Sampling sampling(*view.proxy(), sampler, subset, nullptr, border, caps, inset); + SkMatrix final; + bool lazyProxyNormalization; + get_matrix(matrix, view, &final, &lazyProxyNormalization); + return GrMatrixEffect::Make( + final, std::unique_ptr(new GrTextureEffect( + std::move(view), alphaType, sampling, lazyProxyNormalization))); +} + +GrTextureEffect::ShaderMode GrTextureEffect::GetShaderMode(GrSamplerState::WrapMode mode, + GrSamplerState::Filter filter) { switch (mode) { - case ShaderMode::kMirrorRepeat: - case ShaderMode::kNone: - case ShaderMode::kClamp: - return FilterLogic::kNone; - case ShaderMode::kRepeat: + case GrSamplerState::WrapMode::kMirrorRepeat: + return ShaderMode::kMirrorRepeat; + case GrSamplerState::WrapMode::kClamp: + return ShaderMode::kClamp; + case GrSamplerState::WrapMode::kRepeat: switch (filter) { case GrSamplerState::Filter::kNearest: - return FilterLogic::kNone; + return ShaderMode::kRepeatNearest; case GrSamplerState::Filter::kBilerp: - return FilterLogic::kRepeatBilerp; + return ShaderMode::kRepeatBilerp; case GrSamplerState::Filter::kMipMap: - return FilterLogic::kRepeatMipMap; + return ShaderMode::kRepeatMipMap; } SkUNREACHABLE; - case ShaderMode::kClampToBorder: - return filter > GrSamplerState::Filter::kNearest ? FilterLogic::kClampToBorderFilter - : FilterLogic::kClampToBorderNearest; + case GrSamplerState::WrapMode::kClampToBorder: + return filter == GrSamplerState::Filter::kNearest ? ShaderMode::kClampToBorderNearest + : ShaderMode::kClampToBorderFilter; } SkUNREACHABLE; } +inline bool GrTextureEffect::ShaderModeIsClampToBorder(ShaderMode m) { + return m == ShaderMode::kClampToBorderNearest || m == ShaderMode::kClampToBorderFilter; +} + GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { class Impl : public GrGLSLFragmentProcessor { UniformHandle fSubsetUni; @@ -292,27 +318,8 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { public: void emitCode(EmitArgs& args) override { auto& te = args.fFp.cast(); - SkString coords; - if (args.fFp.isSampledWithExplicitCoords()) { - coords = "_coords"; - } else { - coords = args.fTransformedCoords[0].fVaryingPoint.c_str(); - } auto* fb = args.fFragBuilder; - if (te.sampleMatrix().fKind == SkSL::SampleMatrix::Kind::kMixed) { - // FIXME this is very similar to the extra logic in - // GrGLSLFragmentShaderBuilder::ensureCoords2D - args.fUniformHandler->writeUniformMappings(te.sampleMatrix().fOwner, fb); - SkString coords2D; - coords2D.printf("%s_teSample", coords.c_str()); - - fb->codeAppendf("float3 %s_3d = %s * _matrix * %s.xy1;\n", - coords2D.c_str(), te.sampleMatrix().fExpression.c_str(), - coords.c_str()); - fb->codeAppendf("float2 %s = %s_3d.xy / %s_3d.z;\n", - coords2D.c_str(), coords2D.c_str(), coords2D.c_str()); - coords = coords2D; - } + if (te.fShaderModes[0] == ShaderMode::kNone && te.fShaderModes[1] == ShaderMode::kNone) { fb->codeAppendf("%s = ", args.fOutputColor); @@ -322,11 +329,11 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { kFloat4_GrSLType, "norm", &norm); fb->appendTextureLookupAndBlend(args.fInputColor, SkBlendMode::kModulate, args.fTexSamplers[0], - SkStringPrintf("%s * %s.zw", coords.c_str(), + SkStringPrintf("%s * %s.zw", args.fSampleCoord, norm).c_str()); } else { fb->appendTextureLookupAndBlend(args.fInputColor, SkBlendMode::kModulate, - args.fTexSamplers[0], coords.c_str()); + args.fTexSamplers[0], args.fSampleCoord); } fb->codeAppendf(";"); } else { @@ -354,32 +361,60 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { // filtering do a hard less than/greater than test with the subset rect. // Convert possible projective texture coordinates into non-homogeneous half2. - fb->codeAppendf( - "float2 inCoord = %s;", - fb->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - te.sampleMatrix()).c_str()); + fb->codeAppendf("float2 inCoord = %s;", args.fSampleCoord); const auto& m = te.fShaderModes; GrTextureType textureType = te.fSampler.proxy()->backendFormat().textureType(); bool normCoords = textureType != GrTextureType::kRectangle; - auto filter = te.fSampler.samplerState().filter(); - FilterLogic filterLogic[2] = {GetFilterLogic(m[0], filter), - GetFilterLogic(m[1], filter)}; const char* borderName = nullptr; - if (te.fShaderModes[0] == ShaderMode::kClampToBorder || - te.fShaderModes[1] == ShaderMode::kClampToBorder) { + if (te.hasClampToBorderShaderMode()) { fBorderUni = args.fUniformHandler->addUniform( &te, kFragment_GrShaderFlag, kHalf4_GrSLType, "border", &borderName); } auto modeUsesSubset = [](ShaderMode m) { - return m == ShaderMode::kRepeat || m == ShaderMode::kMirrorRepeat || - m == ShaderMode::kClampToBorder; + switch (m) { + case ShaderMode::kNone: return false; + case ShaderMode::kClamp: return false; + case ShaderMode::kRepeatNearest: return true; + case ShaderMode::kRepeatBilerp: return true; + case ShaderMode::kRepeatMipMap: return true; + case ShaderMode::kMirrorRepeat: return true; + case ShaderMode::kClampToBorderNearest: return true; + case ShaderMode::kClampToBorderFilter: return true; + } + SkUNREACHABLE; }; - auto modeUsesClamp = [filter](ShaderMode m) { - return m != ShaderMode::kNone && - (m != ShaderMode::kClampToBorder || filter > Filter::kNearest); + auto modeUsesClamp = [](ShaderMode m) { + switch (m) { + case ShaderMode::kNone: return false; + case ShaderMode::kClamp: return true; + case ShaderMode::kRepeatNearest: return true; + case ShaderMode::kRepeatBilerp: return true; + case ShaderMode::kRepeatMipMap: return true; + case ShaderMode::kMirrorRepeat: return true; + case ShaderMode::kClampToBorderNearest: return false; + case ShaderMode::kClampToBorderFilter: return true; + } + SkUNREACHABLE; + }; + + // To keep things a little simpler, when we have filtering logic in the shader we + // operate on unnormalized texture coordinates. We will add a uniform that stores + // {w, h, 1/w, 1/h} in a float4 below. + auto modeRequiresUnormCoords = [](ShaderMode m) { + switch (m) { + case ShaderMode::kNone: return false; + case ShaderMode::kClamp: return false; + case ShaderMode::kRepeatNearest: return false; + case ShaderMode::kRepeatBilerp: return true; + case ShaderMode::kRepeatMipMap: return true; + case ShaderMode::kMirrorRepeat: return false; + case ShaderMode::kClampToBorderNearest: return true; + case ShaderMode::kClampToBorderFilter: return true; + } + SkUNREACHABLE; }; bool useSubset[2] = {modeUsesSubset(m[0]), modeUsesSubset(m[1])}; @@ -397,12 +432,9 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { &te, kFragment_GrShaderFlag, kFloat4_GrSLType, "clamp", &clampName); } - // To keep things a little simpler, when we have filtering logic in the shader we - // operate on unnormalized texture coordinates. We add a uniform that stores - // {w, h, 1/w, 1/h} in a float4. const char* norm = nullptr; - if (normCoords && (filterLogic[0] != FilterLogic::kNone || - filterLogic[1] != FilterLogic::kNone)) { + if (normCoords && (modeRequiresUnormCoords(m[0]) || + modeRequiresUnormCoords(m[1]))) { // TODO: Detect support for textureSize() or polyfill textureSize() in SkSL and // always use? fNormUni = args.fUniformHandler->addUniform(&te, kFragment_GrShaderFlag, @@ -436,55 +468,56 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { // These modes either don't use the subset rect or don't need to map the // coords to be within the subset. case ShaderMode::kNone: - case ShaderMode::kClampToBorder: + case ShaderMode::kClampToBorderNearest: + case ShaderMode::kClampToBorderFilter: case ShaderMode::kClamp: fb->codeAppendf("subsetCoord.%s = inCoord.%s;", coordSwizzle, coordSwizzle); break; - case ShaderMode::kRepeat: - if (filter == Filter::kMipMap) { - // The approach here is to generate two sets of texture coords that - // are both "moving" at the same speed (if not direction) as - // inCoords. We accomplish that by using two out of phase mirror - // repeat coords. We will always sample using both coords but the - // read from the upward sloping one is selected using a weight - // that transitions from one set to the other near the reflection - // point. Like the coords, the weight is a saw-tooth function, - // phase-shifted, vertically translated, and then clamped to 0..1. - // TODO: Skip this and use textureGrad() when available. - SkASSERT(extraCoord); - SkASSERT(coordWeight); - fb->codeAppend("{"); - fb->codeAppendf("float w = %s.%s - %s.%s;", subsetName, - subsetStopSwizzle, subsetName, subsetStartSwizzle); - fb->codeAppendf("float w2 = 2 * w;"); - fb->codeAppendf("float d = inCoord.%s - %s.%s;", coordSwizzle, - subsetName, subsetStartSwizzle); - fb->codeAppend("float m = mod(d, w2);"); - fb->codeAppend("float o = mix(m, w2 - m, step(w, m));"); - fb->codeAppendf("subsetCoord.%s = o + %s.%s;", coordSwizzle, - subsetName, subsetStartSwizzle); - fb->codeAppendf("%s = w - o + %s.%s;", extraCoord, subsetName, - subsetStartSwizzle); - // coordWeight is used as the third param of mix() to blend between a - // sample taken using subsetCoord and a sample at extraCoord. - fb->codeAppend("float hw = w/2;"); - fb->codeAppend("float n = mod(d - hw, w2);"); - fb->codeAppendf( - "%s = saturate(half(mix(n, w2 - n, step(w, n)) - hw + " - "0.5));", - coordWeight); - fb->codeAppend("}"); - } else { - fb->codeAppendf( - "subsetCoord.%s = mod(inCoord.%s - %s.%s, %s.%s - %s.%s) + " - "%s.%s;", - coordSwizzle, coordSwizzle, subsetName, subsetStartSwizzle, - subsetName, subsetStopSwizzle, subsetName, - subsetStartSwizzle, subsetName, subsetStartSwizzle); - } + case ShaderMode::kRepeatNearest: + case ShaderMode::kRepeatBilerp: + fb->codeAppendf( + "subsetCoord.%s = mod(inCoord.%s - %s.%s, %s.%s - %s.%s) + " + "%s.%s;", + coordSwizzle, coordSwizzle, subsetName, subsetStartSwizzle, + subsetName, subsetStopSwizzle, subsetName, subsetStartSwizzle, + subsetName, subsetStartSwizzle); + break; + case ShaderMode::kRepeatMipMap: + // The approach here is to generate two sets of texture coords that + // are both "moving" at the same speed (if not direction) as + // inCoords. We accomplish that by using two out of phase mirror + // repeat coords. We will always sample using both coords but the + // read from the upward sloping one is selected using a weight + // that transitions from one set to the other near the reflection + // point. Like the coords, the weight is a saw-tooth function, + // phase-shifted, vertically translated, and then clamped to 0..1. + // TODO: Skip this and use textureGrad() when available. + SkASSERT(extraCoord); + SkASSERT(coordWeight); + fb->codeAppend("{"); + fb->codeAppendf("float w = %s.%s - %s.%s;", subsetName, + subsetStopSwizzle, subsetName, subsetStartSwizzle); + fb->codeAppendf("float w2 = 2 * w;"); + fb->codeAppendf("float d = inCoord.%s - %s.%s;", coordSwizzle, + subsetName, subsetStartSwizzle); + fb->codeAppend("float m = mod(d, w2);"); + fb->codeAppend("float o = mix(m, w2 - m, step(w, m));"); + fb->codeAppendf("subsetCoord.%s = o + %s.%s;", coordSwizzle, subsetName, + subsetStartSwizzle); + fb->codeAppendf("%s = w - o + %s.%s;", extraCoord, subsetName, + subsetStartSwizzle); + // coordWeight is used as the third param of mix() to blend between a + // sample taken using subsetCoord and a sample at extraCoord. + fb->codeAppend("float hw = w/2;"); + fb->codeAppend("float n = mod(d - hw, w2);"); + fb->codeAppendf( + "%s = saturate(half(mix(n, w2 - n, step(w, n)) - hw + " + "0.5));", + coordWeight); + fb->codeAppend("}"); break; - case ShaderMode::kMirrorRepeat: { + case ShaderMode::kMirrorRepeat: fb->codeAppend("{"); fb->codeAppendf("float w = %s.%s - %s.%s;", subsetName, subsetStopSwizzle, subsetName, subsetStartSwizzle); @@ -495,7 +528,6 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { coordSwizzle, subsetName, subsetStartSwizzle); fb->codeAppend("}"); break; - } } }; @@ -518,12 +550,12 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { const char* repeatCoordWeightX = nullptr; const char* extraRepeatCoordY = nullptr; const char* repeatCoordWeightY = nullptr; - if (filterLogic[0] == FilterLogic::kRepeatMipMap) { + if (m[0] == ShaderMode::kRepeatMipMap) { fb->codeAppend("float extraRepeatCoordX; half repeatCoordWeightX;"); extraRepeatCoordX = "extraRepeatCoordX"; repeatCoordWeightX = "repeatCoordWeightX"; } - if (filterLogic[1] == FilterLogic::kRepeatMipMap) { + if (m[1] == ShaderMode::kRepeatMipMap) { fb->codeAppend("float extraRepeatCoordY; half repeatCoordWeightY;"); extraRepeatCoordY = "extraRepeatCoordY"; repeatCoordWeightY = "repeatCoordWeightY"; @@ -540,11 +572,11 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { clampCoord(useClamp[1], "y", "y", "w"); // Additional clamping for the extra coords for kRepeatMipMap. - if (filterLogic[0] == FilterLogic::kRepeatMipMap) { + if (m[0] == ShaderMode::kRepeatMipMap) { fb->codeAppendf("extraRepeatCoordX = clamp(extraRepeatCoordX, %s.x, %s.z);", clampName, clampName); } - if (filterLogic[1] == FilterLogic::kRepeatMipMap) { + if (m[1] == ShaderMode::kRepeatMipMap) { fb->codeAppendf("extraRepeatCoordY = clamp(extraRepeatCoordY, %s.y, %s.w);", clampName, clampName); } @@ -552,8 +584,7 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { // Do the 2 or 4 texture reads for kRepeatMipMap and then apply the weight(s) // to blend between them. If neither direction is kRepeatMipMap do a single // read at clampedCoord. - if (filterLogic[0] == FilterLogic::kRepeatMipMap && - filterLogic[1] == FilterLogic::kRepeatMipMap) { + if (m[0] == ShaderMode::kRepeatMipMap && m[1] == ShaderMode::kRepeatMipMap) { fb->codeAppendf( "half4 textureColor =" " mix(mix(%s, %s, repeatCoordWeightX)," @@ -564,11 +595,11 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { read("float2(clampedCoord.x, extraRepeatCoordY)").c_str(), read("float2(extraRepeatCoordX, extraRepeatCoordY)").c_str()); - } else if (filterLogic[0] == FilterLogic::kRepeatMipMap) { + } else if (m[0] == ShaderMode::kRepeatMipMap) { fb->codeAppendf("half4 textureColor = mix(%s, %s, repeatCoordWeightX);", read("clampedCoord").c_str(), read("float2(extraRepeatCoordX, clampedCoord.y)").c_str()); - } else if (filterLogic[1] == FilterLogic::kRepeatMipMap) { + } else if (m[1] == ShaderMode::kRepeatMipMap) { fb->codeAppendf("half4 textureColor = mix(%s, %s, repeatCoordWeightY);", read("clampedCoord").c_str(), read("float2(clampedCoord.x, extraRepeatCoordY)").c_str()); @@ -583,15 +614,13 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { // Calculate the amount the coord moved for clamping. This will be used // to implement shader-based filtering for kClampToBorder and kRepeat. - if (filterLogic[0] == FilterLogic::kRepeatBilerp || - filterLogic[0] == FilterLogic::kClampToBorderFilter) { + if (m[0] == ShaderMode::kRepeatBilerp || m[0] == ShaderMode::kClampToBorderFilter) { fb->codeAppend("half errX = half(subsetCoord.x - clampedCoord.x);"); fb->codeAppendf("float repeatCoordX = errX > 0 ? %s.x : %s.z;", clampName, clampName); repeatBilerpReadX = read("float2(repeatCoordX, clampedCoord.y)"); } - if (filterLogic[1] == FilterLogic::kRepeatBilerp || - filterLogic[1] == FilterLogic::kClampToBorderFilter) { + if (m[1] == ShaderMode::kRepeatBilerp || m[1] == ShaderMode::kClampToBorderFilter) { fb->codeAppend("half errY = half(subsetCoord.y - clampedCoord.y);"); fb->codeAppendf("float repeatCoordY = errY > 0 ? %s.y : %s.w;", clampName, clampName); @@ -603,8 +632,7 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { // or a corner. Then blend the multiple reads using the err values calculated // above. const char* ifStr = "if"; - if (filterLogic[0] == FilterLogic::kRepeatBilerp && - filterLogic[1] == FilterLogic::kRepeatBilerp) { + if (m[0] == ShaderMode::kRepeatBilerp && m[1] == ShaderMode::kRepeatBilerp) { auto repeatBilerpReadXY = read("float2(repeatCoordX, repeatCoordY)"); fb->codeAppendf( "if (errX != 0 && errY != 0) {" @@ -617,14 +645,14 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { repeatBilerpReadXY.c_str()); ifStr = "else if"; } - if (filterLogic[0] == FilterLogic::kRepeatBilerp) { + if (m[0] == ShaderMode::kRepeatBilerp) { fb->codeAppendf( "%s (errX != 0) {" " textureColor = mix(textureColor, %s, abs(errX));" "}", ifStr, repeatBilerpReadX.c_str()); } - if (filterLogic[1] == FilterLogic::kRepeatBilerp) { + if (m[1] == ShaderMode::kRepeatBilerp) { fb->codeAppendf( "%s (errY != 0) {" " textureColor = mix(textureColor, %s, abs(errY));" @@ -634,27 +662,30 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { // Do soft edge shader filtering against border color for kClampToBorderFilter using // the err values calculated above. - if (filterLogic[0] == FilterLogic::kClampToBorderFilter) { + if (m[0] == ShaderMode::kClampToBorderFilter) { fb->codeAppendf("textureColor = mix(textureColor, %s, min(abs(errX), 1));", borderName); } - if (filterLogic[1] == FilterLogic::kClampToBorderFilter) { + if (m[1] == ShaderMode::kClampToBorderFilter) { fb->codeAppendf("textureColor = mix(textureColor, %s, min(abs(errY), 1));", borderName); } // Do hard-edge shader transition to border color for kClampToBorderNearest at the - // subset boundaries. - if (filterLogic[0] == FilterLogic::kClampToBorderNearest) { + // subset boundaries. Snap the input coordinates to nearest neighbor (with an + // epsilon) before comparing to the subset rect to avoid GPU interpolation errors + if (m[0] == ShaderMode::kClampToBorderNearest) { fb->codeAppendf( - "if (inCoord.x < %s.x || inCoord.x > %s.z) {" + "float snappedX = floor(inCoord.x + 0.001) + 0.5;" + "if (snappedX < %s.x || snappedX > %s.z) {" " textureColor = %s;" "}", subsetName, subsetName, borderName); } - if (filterLogic[1] == FilterLogic::kClampToBorderNearest) { + if (m[1] == ShaderMode::kClampToBorderNearest) { fb->codeAppendf( - "if (inCoord.y < %s.y || inCoord.y > %s.w) {" + "float snappedY = floor(inCoord.y + 0.001) + 0.5;" + "if (snappedY < %s.y || snappedY > %s.w) {" " textureColor = %s;" "}", subsetName, subsetName, borderName); @@ -716,10 +747,7 @@ GrGLSLFragmentProcessor* GrTextureEffect::onCreateGLSLInstance() const { void GrTextureEffect::onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const { auto m0 = static_cast(fShaderModes[0]); auto m1 = static_cast(fShaderModes[1]); - auto filter = fSampler.samplerState().filter(); - auto l0 = static_cast(GetFilterLogic(fShaderModes[0], filter)); - auto l1 = static_cast(GetFilterLogic(fShaderModes[1], filter)); - b->add32((l0 << 24) | (l1 << 16) | (m0 << 8) | m1); + b->add32((m0 << 16) | m1); } bool GrTextureEffect::onIsEqual(const GrFragmentProcessor& other) const { @@ -730,9 +758,7 @@ bool GrTextureEffect::onIsEqual(const GrFragmentProcessor& other) const { if (fSubset != that.fSubset) { return false; } - if ((fShaderModes[0] == ShaderMode::kClampToBorder || - fShaderModes[1] == ShaderMode::kClampToBorder) && - !std::equal(fBorder, fBorder + 4, that.fBorder)) { + if (this->hasClampToBorderShaderMode() && !std::equal(fBorder, fBorder + 4, that.fBorder)) { return false; } return true; @@ -742,7 +768,6 @@ GrTextureEffect::GrTextureEffect(GrSurfaceProxyView view, SkAlphaType alphaType, const Sampling& sampling, bool lazyProxyNormalization) : GrFragmentProcessor(kGrTextureEffect_ClassID, ModulateForSamplerOptFlags(alphaType, sampling.hasBorderAlpha())) - , fCoordTransform(SkMatrix::I()) , fSampler(std::move(view), sampling.fHWSampler) , fSubset(sampling.fShaderSubset) , fClamp(sampling.fShaderClamp) @@ -753,13 +778,12 @@ GrTextureEffect::GrTextureEffect(GrSurfaceProxyView view, SkAlphaType alphaType, SkASSERT(fShaderModes[0] != ShaderMode::kNone || (fSubset.fLeft == 0 && fSubset.fRight == 0)); SkASSERT(fShaderModes[1] != ShaderMode::kNone || (fSubset.fTop == 0 && fSubset.fBottom == 0)); this->setTextureSamplerCnt(1); - this->addCoordTransform(&fCoordTransform); + this->setUsesSampleCoordsDirectly(); std::copy_n(sampling.fBorder, 4, fBorder); } GrTextureEffect::GrTextureEffect(const GrTextureEffect& src) : INHERITED(kGrTextureEffect_ClassID, src.optimizationFlags()) - , fCoordTransform(src.fCoordTransform) , fSampler(src.fSampler) , fSubset(src.fSubset) , fClamp(src.fClamp) @@ -767,7 +791,7 @@ GrTextureEffect::GrTextureEffect(const GrTextureEffect& src) , fLazyProxyNormalization(src.fLazyProxyNormalization) { std::copy_n(src.fBorder, 4, fBorder); this->setTextureSamplerCnt(1); - this->addCoordTransform(&fCoordTransform); + this->setUsesSampleCoordsDirectly(); } std::unique_ptr GrTextureEffect::clone() const { diff --git a/src/gpu/effects/GrTextureEffect.h b/src/gpu/effects/GrTextureEffect.h index c808bfb30187d..511cdb630e553 100644 --- a/src/gpu/effects/GrTextureEffect.h +++ b/src/gpu/effects/GrTextureEffect.h @@ -10,7 +10,6 @@ #include "include/core/SkImageInfo.h" #include "include/core/SkMatrix.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" class GrTextureEffect : public GrFragmentProcessor { @@ -66,35 +65,50 @@ class GrTextureEffect : public GrFragmentProcessor { const GrCaps& caps, const float border[4] = kDefaultBorder); + /** + * Like MakeSubset() but always uses kBilerp filtering. MakeSubset() uses the subset rect + * dimensions to determine the period of the wrap mode (for repeat and mirror). Once it computes + * the wrapped texture coordinate inside subset rect it further clamps it to a 0.5 inset rect of + * subset. When subset is an integer rectangle this clamping avoids the hw bilerp filtering from + * reading texels just outside the subset rect. This factory allows a custom inset clamping + * distance rather than 0.5, allowing those neighboring texels to influence the bilerped sample + * result. + */ + static std::unique_ptr MakeBilerpWithInset( + GrSurfaceProxyView, + SkAlphaType, + const SkMatrix&, + GrSamplerState::WrapMode wx, + GrSamplerState::WrapMode wy, + const SkRect& subset, + SkVector inset, + const GrCaps& caps, + const float border[4] = kDefaultBorder); + std::unique_ptr clone() const override; const char* name() const override { return "TextureEffect"; } private: - enum class ShaderMode : uint16_t { - kClamp = static_cast(GrSamplerState::WrapMode::kClamp), - kRepeat = static_cast(GrSamplerState::WrapMode::kRepeat), - kMirrorRepeat = static_cast(GrSamplerState::WrapMode::kMirrorRepeat), - kClampToBorder = static_cast(GrSamplerState::WrapMode::kClampToBorder), - kNone, - }; - struct Sampling; /** - * Sometimes the implementation of a ShaderMode depends on which GrSamplerState::Filter is - * used. + * Possible implementation of wrap mode in shader code. Some modes are specialized by + * filter. */ - enum class FilterLogic { - kNone, // The shader isn't specialized for the filter. + enum class ShaderMode : uint16_t { + kNone, // Using HW mode + kClamp, // Shader based clamp, no filter specialization + kRepeatNearest, // Simple repeat for nearest sampling kRepeatBilerp, // Filter across the subset boundary for kRepeat mode kRepeatMipMap, // Logic for LOD selection with kRepeat mode. - kClampToBorderFilter, // Logic for fading to border color when filtering. + kMirrorRepeat, // Mirror repeat (doesn't depend on filter)) kClampToBorderNearest, // Logic for hard transition to border color when not filtering. + kClampToBorderFilter, // Logic for fading to border color when filtering. }; - static FilterLogic GetFilterLogic(ShaderMode mode, GrSamplerState::Filter filter); + static ShaderMode GetShaderMode(GrSamplerState::WrapMode, GrSamplerState::Filter); + static bool ShaderModeIsClampToBorder(ShaderMode); - GrCoordTransform fCoordTransform; TextureSampler fSampler; float fBorder[4]; SkRect fSubset; @@ -115,6 +129,11 @@ class GrTextureEffect : public GrFragmentProcessor { const TextureSampler& onTextureSampler(int) const override; + bool hasClampToBorderShaderMode() const { + return ShaderModeIsClampToBorder(fShaderModes[0]) || + ShaderModeIsClampToBorder(fShaderModes[1]); + } + GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; diff --git a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp index 3d060a69fa984..f9941074d732c 100644 --- a/src/gpu/effects/GrXfermodeFragmentProcessor.cpp +++ b/src/gpu/effects/GrXfermodeFragmentProcessor.cpp @@ -15,6 +15,8 @@ #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" +using GrXfermodeFragmentProcessor::ComposeBehavior; + // Some of the cpu implementations of blend modes differ too much from the GPU enough that // we can't use the cpu implementation to implement constantOutputForConstantInput. static inline bool does_cpu_blend_impl_match_gpu(SkBlendMode mode) { @@ -25,18 +27,30 @@ static inline bool does_cpu_blend_impl_match_gpu(SkBlendMode mode) { mode != SkBlendMode::kColorBurn; } +static const char* ComposeBehavior_Name(ComposeBehavior behavior) { + SkASSERT(unsigned(behavior) <= unsigned(ComposeBehavior::kLastComposeBehavior)); + static constexpr const char* gStrings[] = { + "Default", + "Compose-One", + "Compose-Two", + "SkMode", + }; + static_assert(SK_ARRAY_COUNT(gStrings) == size_t(ComposeBehavior::kLastComposeBehavior) + 1); + return gStrings[int(behavior)]; +} + ////////////////////////////////////////////////////////////////////////////// -class ComposeTwoFragmentProcessor : public GrFragmentProcessor { +class ComposeFragmentProcessor : public GrFragmentProcessor { public: static std::unique_ptr Make(std::unique_ptr src, std::unique_ptr dst, - SkBlendMode mode) { + SkBlendMode mode, ComposeBehavior behavior) { return std::unique_ptr( - new ComposeTwoFragmentProcessor(std::move(src), std::move(dst), mode)); + new ComposeFragmentProcessor(std::move(src), std::move(dst), mode, behavior)); } - const char* name() const override { return "ComposeTwo"; } + const char* name() const override { return "Compose"; } #ifdef SK_DEBUG SkString dumpInfo() const override { @@ -55,17 +69,36 @@ class ComposeTwoFragmentProcessor : public GrFragmentProcessor { std::unique_ptr clone() const override; SkBlendMode getMode() const { return fMode; } + ComposeBehavior composeBehavior() const { return fComposeBehavior; } + int srcFPIndex() const { return fSrcFPIndex; } + int dstFPIndex() const { return fDstFPIndex; } private: - ComposeTwoFragmentProcessor(std::unique_ptr src, - std::unique_ptr dst, - SkBlendMode mode) - : INHERITED(kComposeTwoFragmentProcessor_ClassID, OptFlags(src.get(), dst.get(), mode)) - , fMode(mode) { - SkDEBUGCODE(int shaderAChildIndex = )this->registerChildProcessor(std::move(src)); - SkDEBUGCODE(int shaderBChildIndex = )this->registerChildProcessor(std::move(dst)); - SkASSERT(0 == shaderAChildIndex); - SkASSERT(1 == shaderBChildIndex); + ComposeFragmentProcessor(std::unique_ptr src, + std::unique_ptr dst, + SkBlendMode mode, ComposeBehavior behavior) + : INHERITED(kComposeFragmentProcessor_ClassID, OptFlags(src.get(), dst.get(), mode)) + , fMode(mode) + , fComposeBehavior(behavior) { + if (fComposeBehavior == ComposeBehavior::kDefault) { + fComposeBehavior = (src && dst) ? ComposeBehavior::kComposeTwoBehavior + : ComposeBehavior::kComposeOneBehavior; + } + if (src != nullptr) { + fSrcFPIndex = this->registerChild(std::move(src)); + } + if (dst != nullptr) { + fDstFPIndex = this->registerChild(std::move(dst)); + } + } + + ComposeFragmentProcessor(const ComposeFragmentProcessor& that) + : INHERITED(kComposeFragmentProcessor_ClassID, ProcessorOptimizationFlags(&that)) + , fMode(that.fMode) + , fComposeBehavior(that.fComposeBehavior) + , fSrcFPIndex(that.fSrcFPIndex) + , fDstFPIndex(that.fDstFPIndex) { + this->cloneAndRegisterAllChildProcessors(that); } static OptimizationFlags OptFlags(const GrFragmentProcessor* src, @@ -75,17 +108,28 @@ class ComposeTwoFragmentProcessor : public GrFragmentProcessor { case SkBlendMode::kClear: case SkBlendMode::kSrc: case SkBlendMode::kDst: - SK_ABORT("Should never create clear, src, or dst compose two FP."); + SK_ABORT("Shouldn't have created a Compose FP as 'clear', 'src', or 'dst'."); flags = kNone_OptimizationFlags; break; - // Produces opaque if both src and dst are opaque. + // Produces opaque if both src and dst are opaque. These also will modulate the child's + // output by either the input color or alpha. However, if the child is not compatible + // with the coverage as alpha then it may produce a color that is not valid premul. case SkBlendMode::kSrcIn: case SkBlendMode::kDstIn: case SkBlendMode::kModulate: - flags = src->preservesOpaqueInput() && dst->preservesOpaqueInput() - ? kPreservesOpaqueInput_OptimizationFlag - : kNone_OptimizationFlags; + if (src && dst) { + flags = ProcessorOptimizationFlags(src) & ProcessorOptimizationFlags(dst) & + kPreservesOpaqueInput_OptimizationFlag; + } else if (src) { + flags = ProcessorOptimizationFlags(src) & + ~kConstantOutputForConstantInput_OptimizationFlag; + } else if (dst) { + flags = ProcessorOptimizationFlags(dst) & + ~kConstantOutputForConstantInput_OptimizationFlag; + } else { + flags = kNone_OptimizationFlags; + } break; // Produces zero when both are opaque, indeterminate if one is opaque. @@ -97,15 +141,15 @@ class ComposeTwoFragmentProcessor : public GrFragmentProcessor { // Is opaque if the dst is opaque. case SkBlendMode::kSrcATop: - flags = dst->preservesOpaqueInput() ? kPreservesOpaqueInput_OptimizationFlag - : kNone_OptimizationFlags; + flags = (dst ? ProcessorOptimizationFlags(dst) : kAll_OptimizationFlags) & + kPreservesOpaqueInput_OptimizationFlag; break; // DstATop is the converse of kSrcATop. Screen is also opaque if the src is a opaque. case SkBlendMode::kDstATop: case SkBlendMode::kScreen: - flags = src->preservesOpaqueInput() ? kPreservesOpaqueInput_OptimizationFlag - : kNone_OptimizationFlags; + flags = (src ? ProcessorOptimizationFlags(src) : kAll_OptimizationFlags) & + kPreservesOpaqueInput_OptimizationFlag; break; // These modes are all opaque if either src or dst is opaque. All the advanced modes @@ -127,13 +171,14 @@ class ComposeTwoFragmentProcessor : public GrFragmentProcessor { case SkBlendMode::kSaturation: case SkBlendMode::kColor: case SkBlendMode::kLuminosity: - flags = src->preservesOpaqueInput() || dst->preservesOpaqueInput() - ? kPreservesOpaqueInput_OptimizationFlag - : kNone_OptimizationFlags; + flags = ((src ? ProcessorOptimizationFlags(src) : kAll_OptimizationFlags) | + (dst ? ProcessorOptimizationFlags(dst) : kAll_OptimizationFlags)) & + kPreservesOpaqueInput_OptimizationFlag; break; } - if (does_cpu_blend_impl_match_gpu(mode) && src->hasConstantOutputForConstantInput() && - dst->hasConstantOutputForConstantInput()) { + if (does_cpu_blend_impl_match_gpu(mode) && + (src ? src->hasConstantOutputForConstantInput() : true) && + (dst ? dst->hasConstantOutputForConstantInput() : true)) { flags |= kConstantOutputForConstantInput_OptimizationFlag; } return flags; @@ -144,21 +189,51 @@ class ComposeTwoFragmentProcessor : public GrFragmentProcessor { } bool onIsEqual(const GrFragmentProcessor& other) const override { - const ComposeTwoFragmentProcessor& cs = other.cast(); + const ComposeFragmentProcessor& cs = other.cast(); return fMode == cs.fMode; } SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { - SkPMColor4f opaqueInput = { input.fR, input.fG, input.fB, 1 }; - SkPMColor4f src = ConstantOutputForConstantInput(this->childProcessor(0), opaqueInput); - SkPMColor4f dst = ConstantOutputForConstantInput(this->childProcessor(1), opaqueInput); - SkPMColor4f res = SkBlendMode_Apply(fMode, src, dst); - return res * input.fA; + const auto* src = (fSrcFPIndex >= 0) ? &this->childProcessor(fSrcFPIndex) : nullptr; + const auto* dst = (fDstFPIndex >= 0) ? &this->childProcessor(fDstFPIndex) : nullptr; + + switch (fComposeBehavior) { + case ComposeBehavior::kComposeOneBehavior: { + SkPMColor4f srcColor = src ? ConstantOutputForConstantInput(*src, SK_PMColor4fWHITE) + : input; + SkPMColor4f dstColor = dst ? ConstantOutputForConstantInput(*dst, SK_PMColor4fWHITE) + : input; + return SkBlendMode_Apply(fMode, srcColor, dstColor); + } + + case ComposeBehavior::kComposeTwoBehavior: { + SkPMColor4f opaqueInput = { input.fR, input.fG, input.fB, 1 }; + SkPMColor4f srcColor = ConstantOutputForConstantInput(*src, opaqueInput); + SkPMColor4f dstColor = ConstantOutputForConstantInput(*dst, opaqueInput); + SkPMColor4f result = SkBlendMode_Apply(fMode, srcColor, dstColor); + return result * input.fA; + } + + case ComposeBehavior::kSkModeBehavior: { + SkPMColor4f srcColor = src ? ConstantOutputForConstantInput(*src, SK_PMColor4fWHITE) + : input; + SkPMColor4f dstColor = dst ? ConstantOutputForConstantInput(*dst, input) + : input; + return SkBlendMode_Apply(fMode, srcColor, dstColor); + } + + default: + SK_ABORT("unrecognized compose behavior"); + return input; + } } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; SkBlendMode fMode; + ComposeBehavior fComposeBehavior; + int fSrcFPIndex = -1; + int fDstFPIndex = -1; GR_DECLARE_FRAGMENT_PROCESSOR_TEST @@ -167,7 +242,7 @@ class ComposeTwoFragmentProcessor : public GrFragmentProcessor { ///////////////////////////////////////////////////////////////////// -class GLComposeTwoFragmentProcessor : public GrGLSLFragmentProcessor { +class GLComposeFragmentProcessor : public GrGLSLFragmentProcessor { public: void emitCode(EmitArgs&) override; @@ -177,345 +252,106 @@ class GLComposeTwoFragmentProcessor : public GrGLSLFragmentProcessor { ///////////////////////////////////////////////////////////////////// -GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeTwoFragmentProcessor); +GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeFragmentProcessor); #if GR_TEST_UTILS -std::unique_ptr ComposeTwoFragmentProcessor::TestCreate( - GrProcessorTestData* d) { +std::unique_ptr ComposeFragmentProcessor::TestCreate(GrProcessorTestData* d) { // Create two random frag procs. std::unique_ptr fpA(GrProcessorUnitTest::MakeChildFP(d)); std::unique_ptr fpB(GrProcessorUnitTest::MakeChildFP(d)); SkBlendMode mode; + ComposeBehavior behavior; do { mode = static_cast(d->fRandom->nextRangeU(0, (int)SkBlendMode::kLastMode)); + behavior = static_cast( + d->fRandom->nextRangeU(0, (int)ComposeBehavior::kLastComposeBehavior)); } while (SkBlendMode::kClear == mode || SkBlendMode::kSrc == mode || SkBlendMode::kDst == mode); return std::unique_ptr( - new ComposeTwoFragmentProcessor(std::move(fpA), std::move(fpB), mode)); + new ComposeFragmentProcessor(std::move(fpA), std::move(fpB), mode, behavior)); } #endif -std::unique_ptr ComposeTwoFragmentProcessor::clone() const { - auto src = this->childProcessor(0).clone(); - auto dst = this->childProcessor(1).clone(); - return std::unique_ptr( - new ComposeTwoFragmentProcessor(std::move(src), std::move(dst), fMode)); +std::unique_ptr ComposeFragmentProcessor::clone() const { + return std::unique_ptr(new ComposeFragmentProcessor(*this)); } -GrGLSLFragmentProcessor* ComposeTwoFragmentProcessor::onCreateGLSLInstance() const{ - return new GLComposeTwoFragmentProcessor; +GrGLSLFragmentProcessor* ComposeFragmentProcessor::onCreateGLSLInstance() const{ + return new GLComposeFragmentProcessor; } ///////////////////////////////////////////////////////////////////// -void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { +void GLComposeFragmentProcessor::emitCode(EmitArgs& args) { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - const ComposeTwoFragmentProcessor& cs = args.fFp.cast(); - - const char* inputColor = nullptr; - if (args.fInputColor) { - inputColor = "inputColor"; - fragBuilder->codeAppendf("half4 inputColor = half4(%s.rgb, 1.0);", args.fInputColor); - } - - // declare outputColor and emit the code for each of the two children - SkString srcColor = this->invokeChild(0, inputColor, args); - - SkString dstColor = this->invokeChild(1, inputColor, args); - - // emit blend code + const ComposeFragmentProcessor& cs = args.fFp.cast(); SkBlendMode mode = cs.getMode(); - fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkBlendMode_Name(mode)); - GrGLSLBlend::AppendMode(fragBuilder, - srcColor.c_str(), - dstColor.c_str(), - args.fOutputColor, - mode); - - // re-multiply the output color by the input color's alpha - if (args.fInputColor) { - fragBuilder->codeAppendf("%s *= %s.a;", args.fOutputColor, args.fInputColor); - } -} + ComposeBehavior behavior = cs.composeBehavior(); + int srcFPIndex = cs.srcFPIndex(); + int dstFPIndex = cs.dstFPIndex(); + + // Load the input color and make an opaque copy if needed. + fragBuilder->codeAppendf("// %s Xfer Mode: %s\n", + ComposeBehavior_Name(behavior), SkBlendMode_Name(mode)); + + SkString srcColor, dstColor; + switch (behavior) { + case ComposeBehavior::kComposeOneBehavior: + // Compose-one operations historically leave the alpha on the input color. + srcColor = (srcFPIndex >= 0) ? this->invokeChild(srcFPIndex, args) + : SkString(args.fInputColor); + dstColor = (dstFPIndex >= 0) ? this->invokeChild(dstFPIndex, args) + : SkString(args.fInputColor); + break; + + case ComposeBehavior::kComposeTwoBehavior: + // Compose-two operations historically have forced the input color to opaque. + fragBuilder->codeAppendf("half4 inputOpaque = %s.rgb1;\n", args.fInputColor); + srcColor = this->invokeChild(srcFPIndex, "inputOpaque", args); + dstColor = this->invokeChild(dstFPIndex, "inputOpaque", args); + break; + + case ComposeBehavior::kSkModeBehavior: + // SkModeColorFilter operations act like ComposeOne, but pass the input color to dst. + srcColor = (srcFPIndex >= 0) ? this->invokeChild(srcFPIndex, args) + : SkString(args.fInputColor); + dstColor = (dstFPIndex >= 0) ? this->invokeChild(dstFPIndex, args.fInputColor, args) + : SkString(args.fInputColor); + break; -std::unique_ptr GrXfermodeFragmentProcessor::MakeFromTwoProcessors( - std::unique_ptr src, - std::unique_ptr dst, - SkBlendMode mode) { - switch (mode) { - case SkBlendMode::kClear: - return GrConstColorProcessor::Make(SK_PMColor4fTRANSPARENT, - GrConstColorProcessor::InputMode::kIgnore); - case SkBlendMode::kSrc: - return src; - case SkBlendMode::kDst: - return dst; default: - return ComposeTwoFragmentProcessor::Make(std::move(src), std::move(dst), mode); - } -} - -////////////////////////////////////////////////////////////////////////////// - -class ComposeOneFragmentProcessor : public GrFragmentProcessor { -public: - enum Child { - kDst_Child, - kSrc_Child, - }; - - static std::unique_ptr Make(std::unique_ptr fp, - SkBlendMode mode, Child child) { - if (!fp) { - return nullptr; - } - return std::unique_ptr( - new ComposeOneFragmentProcessor(std::move(fp), mode, child)); + SK_ABORT("unrecognized compose behavior"); + break; } - const char* name() const override { return "ComposeOne"; } - -#ifdef SK_DEBUG - SkString dumpInfo() const override { - SkString str; - - str.appendf("Mode: %s, Child: %s", - SkBlendMode_Name(fMode), kDst_Child == fChild ? "Dst" : "Src"); + // Blend src and dst colors together. + GrGLSLBlend::AppendMode(fragBuilder, srcColor.c_str(), dstColor.c_str(), + args.fOutputColor, mode); - for (int i = 0; i < this->numChildProcessors(); ++i) { - str.appendf(" [%s %s]", - this->childProcessor(i).name(), this->childProcessor(i).dumpInfo().c_str()); - } - return str; + // Reapply alpha from input color if we are doing a compose-two. + if (behavior == ComposeBehavior::kComposeTwoBehavior) { + fragBuilder->codeAppendf("%s *= %s.a;\n", args.fOutputColor, args.fInputColor); } -#endif - - std::unique_ptr clone() const override; - - SkBlendMode mode() const { return fMode; } - - Child child() const { return fChild; } - -private: - OptimizationFlags OptFlags(const GrFragmentProcessor* fp, SkBlendMode mode, Child child) { - OptimizationFlags flags; - switch (mode) { - case SkBlendMode::kClear: - SK_ABORT("Should never create clear compose one FP."); - flags = kNone_OptimizationFlags; - break; - - case SkBlendMode::kSrc: - SkASSERT(child == kSrc_Child); - flags = fp->preservesOpaqueInput() ? kPreservesOpaqueInput_OptimizationFlag - : kNone_OptimizationFlags; - break; - - case SkBlendMode::kDst: - SkASSERT(child == kDst_Child); - flags = fp->preservesOpaqueInput() ? kPreservesOpaqueInput_OptimizationFlag - : kNone_OptimizationFlags; - break; - - // Produces opaque if both src and dst are opaque. These also will modulate the child's - // output by either the input color or alpha. However, if the child is not compatible - // with the coverage as alpha then it may produce a color that is not valid premul. - case SkBlendMode::kSrcIn: - case SkBlendMode::kDstIn: - case SkBlendMode::kModulate: - flags = ProcessorOptimizationFlags(fp) & - ~kConstantOutputForConstantInput_OptimizationFlag; - break; - - // Produces zero when both are opaque, indeterminate if one is opaque. - case SkBlendMode::kSrcOut: - case SkBlendMode::kDstOut: - case SkBlendMode::kXor: - flags = kNone_OptimizationFlags; - break; - - // Is opaque if the dst is opaque. - case SkBlendMode::kSrcATop: - if (child == kDst_Child) { - flags = fp->preservesOpaqueInput() ? kPreservesOpaqueInput_OptimizationFlag - : kNone_OptimizationFlags; - } else { - flags = kPreservesOpaqueInput_OptimizationFlag; - } - break; - - // DstATop is the converse of kSrcATop. Screen is also opaque if the src is a opaque. - case SkBlendMode::kDstATop: - case SkBlendMode::kScreen: - if (child == kSrc_Child) { - flags = fp->preservesOpaqueInput() ? kPreservesOpaqueInput_OptimizationFlag - : kNone_OptimizationFlags; - } else { - flags = kPreservesOpaqueInput_OptimizationFlag; - } - break; - - // These modes are all opaque if either src or dst is opaque. All the advanced modes - // compute alpha as src-over. - case SkBlendMode::kSrcOver: - case SkBlendMode::kDstOver: - case SkBlendMode::kPlus: - case SkBlendMode::kOverlay: - case SkBlendMode::kDarken: - case SkBlendMode::kLighten: - case SkBlendMode::kColorDodge: - case SkBlendMode::kColorBurn: - case SkBlendMode::kHardLight: - case SkBlendMode::kSoftLight: - case SkBlendMode::kDifference: - case SkBlendMode::kExclusion: - case SkBlendMode::kMultiply: - case SkBlendMode::kHue: - case SkBlendMode::kSaturation: - case SkBlendMode::kColor: - case SkBlendMode::kLuminosity: - flags = kPreservesOpaqueInput_OptimizationFlag; - break; - } - if (does_cpu_blend_impl_match_gpu(mode) && fp->hasConstantOutputForConstantInput()) { - flags |= kConstantOutputForConstantInput_OptimizationFlag; - } - return flags; - } - - void onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override { - static_assert(((int)SkBlendMode::kLastMode & UINT16_MAX) == (int)SkBlendMode::kLastMode); - b->add32((int)fMode | (fChild << 16)); - } - - bool onIsEqual(const GrFragmentProcessor& that) const override { - return fMode == that.cast().fMode; - } - - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inputColor) const override { - SkPMColor4f childColor = ConstantOutputForConstantInput(this->childProcessor(0), - SK_PMColor4fWHITE); - SkPMColor4f src, dst; - if (kSrc_Child == fChild) { - src = childColor; - dst = inputColor; - } else { - src = inputColor; - dst = childColor; - } - return SkBlendMode_Apply(fMode, src, dst); - } - -private: - ComposeOneFragmentProcessor(std::unique_ptr fp, SkBlendMode mode, - Child child) - : INHERITED(kComposeOneFragmentProcessor_ClassID, OptFlags(fp.get(), mode, child)) - , fMode(mode) - , fChild(child) { - SkDEBUGCODE(int dstIndex =) this->registerChildProcessor(std::move(fp)); - SkASSERT(0 == dstIndex); - } - - GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; - - SkBlendMode fMode; - Child fChild; - - GR_DECLARE_FRAGMENT_PROCESSOR_TEST - - typedef GrFragmentProcessor INHERITED; -}; - -////////////////////////////////////////////////////////////////////////////// - -class GLComposeOneFragmentProcessor : public GrGLSLFragmentProcessor { -public: - void emitCode(EmitArgs& args) override { - GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - SkBlendMode mode = args.fFp.cast().mode(); - ComposeOneFragmentProcessor::Child child = - args.fFp.cast().child(); - SkString childColor = this->invokeChild(0, args); - - // emit blend code - fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkBlendMode_Name(mode)); - const char* childStr = childColor.c_str(); - if (ComposeOneFragmentProcessor::kDst_Child == child) { - GrGLSLBlend::AppendMode(fragBuilder, args.fInputColor, childStr, args.fOutputColor, mode); - } else { - GrGLSLBlend::AppendMode(fragBuilder, childStr, args.fInputColor, args.fOutputColor, mode); - } - } - -private: - typedef GrGLSLFragmentProcessor INHERITED; -}; - -///////////////////////////////////////////////////////////////////// - -GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeOneFragmentProcessor); - -#if GR_TEST_UTILS -std::unique_ptr ComposeOneFragmentProcessor::TestCreate( - GrProcessorTestData* d) { - // Create one random frag procs. - // For now, we'll prevent either children from being a shader with children to prevent the - // possibility of an arbitrarily large tree of procs. - std::unique_ptr dst(GrProcessorUnitTest::MakeChildFP(d)); - SkBlendMode mode; - ComposeOneFragmentProcessor::Child child; - do { - mode = static_cast(d->fRandom->nextRangeU(0, (int)SkBlendMode::kLastMode)); - child = d->fRandom->nextBool() ? kDst_Child : kSrc_Child; - } while (SkBlendMode::kClear == mode || (SkBlendMode::kDst == mode && child == kSrc_Child) || - (SkBlendMode::kSrc == mode && child == kDst_Child)); - return std::unique_ptr( - new ComposeOneFragmentProcessor(std::move(dst), mode, child)); -} -#endif - -GrGLSLFragmentProcessor* ComposeOneFragmentProcessor::onCreateGLSLInstance() const { - return new GLComposeOneFragmentProcessor; -} - -std::unique_ptr ComposeOneFragmentProcessor::clone() const { - return std::unique_ptr( - new ComposeOneFragmentProcessor(this->childProcessor(0).clone(), fMode, fChild)); } ////////////////////////////////////////////////////////////////////////////// -// It may seems as though when the input FP is the dst and the mode is kDst (or same for src/kSrc) -// that these factories could simply return the input FP. However, that doesn't have quite -// the same effect as the returned compose FP will replace the FP's input with solid white and -// ignore the original input. This could be implemented as: -// RunInSeries(ConstColor(WHITE, kIgnoreInput), inputFP). - -std::unique_ptr GrXfermodeFragmentProcessor::MakeFromDstProcessor( - std::unique_ptr dst, SkBlendMode mode) { +std::unique_ptr GrXfermodeFragmentProcessor::Make( + std::unique_ptr src, + std::unique_ptr dst, + SkBlendMode mode, ComposeBehavior behavior) { switch (mode) { case SkBlendMode::kClear: - return GrConstColorProcessor::Make(SK_PMColor4fTRANSPARENT, + return GrConstColorProcessor::Make(/*inputFP=*/nullptr, SK_PMColor4fTRANSPARENT, GrConstColorProcessor::InputMode::kIgnore); case SkBlendMode::kSrc: - return nullptr; - default: - return ComposeOneFragmentProcessor::Make(std::move(dst), mode, - ComposeOneFragmentProcessor::kDst_Child); - } -} - -std::unique_ptr GrXfermodeFragmentProcessor::MakeFromSrcProcessor( - std::unique_ptr src, SkBlendMode mode) { - switch (mode) { - case SkBlendMode::kClear: - return GrConstColorProcessor::Make(SK_PMColor4fTRANSPARENT, - GrConstColorProcessor::InputMode::kIgnore); + return GrFragmentProcessor::OverrideInput(std::move(src), SK_PMColor4fWHITE, + /*useUniform=*/false); case SkBlendMode::kDst: - return nullptr; + return GrFragmentProcessor::OverrideInput(std::move(dst), SK_PMColor4fWHITE, + /*useUniform=*/false); default: - return ComposeOneFragmentProcessor::Make(std::move(src), mode, - ComposeOneFragmentProcessor::kSrc_Child); + return ComposeFragmentProcessor::Make(std::move(src), std::move(dst), mode, behavior); } } diff --git a/src/gpu/effects/GrXfermodeFragmentProcessor.h b/src/gpu/effects/GrXfermodeFragmentProcessor.h index 01003391544cf..5801163c21065 100644 --- a/src/gpu/effects/GrXfermodeFragmentProcessor.h +++ b/src/gpu/effects/GrXfermodeFragmentProcessor.h @@ -15,22 +15,29 @@ class GrFragmentProcessor; namespace GrXfermodeFragmentProcessor { -/** The color input to the returned processor is treated as the src and the passed in processor is - the dst. */ -std::unique_ptr MakeFromDstProcessor(std::unique_ptr dst, - SkBlendMode mode); - -/** The color input to the returned processor is treated as the dst and the passed in processor is - the src. */ -std::unique_ptr MakeFromSrcProcessor(std::unique_ptr src, - SkBlendMode mode); - -/** Takes the input color, which is assumed to be unpremultiplied, passes it as an opaque color - to both src and dst. The outputs of a src and dst are blended using mode and the original - input's alpha is applied to the blended color to produce a premul output. */ -std::unique_ptr MakeFromTwoProcessors(std::unique_ptr src, - std::unique_ptr dst, - SkBlendMode mode); +enum class ComposeBehavior { + // Picks "ComposeOne" or "ComposeTwo" automatically depending on presence of src/dst FPs. + kDefault = 0, + + // half(1) is passed as the input color to child FPs. No alpha channel trickery. + kComposeOneBehavior, + + // sk_InColor.rgb1 is passed as the input color to child FPs. Alpha is manually blended. + kComposeTwoBehavior, + + // half(1) is passed to src; sk_InColor.rgba is passed to dst. No alpha channel trickery. + kSkModeBehavior, + + kLastComposeBehavior = kSkModeBehavior, +}; + +/** Blends src and dst inputs according to the blend mode. + * If either input is null, the input color (sk_InColor) is used instead. + */ +std::unique_ptr Make(std::unique_ptr src, + std::unique_ptr dst, + SkBlendMode mode, + ComposeBehavior behavior = ComposeBehavior::kDefault); }; diff --git a/src/gpu/effects/GrYUVtoRGBEffect.cpp b/src/gpu/effects/GrYUVtoRGBEffect.cpp index 6e70b20ae3697..c453a3d5fdce9 100644 --- a/src/gpu/effects/GrYUVtoRGBEffect.cpp +++ b/src/gpu/effects/GrYUVtoRGBEffect.cpp @@ -9,6 +9,7 @@ #include "src/core/SkYUVMath.h" #include "src/gpu/GrTexture.h" +#include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLProgramBuilder.h" @@ -42,11 +43,6 @@ std::unique_ptr GrYUVtoRGBEffect::Make(GrSurfaceProxyView v const SkISize yDimensions = views[yuvaIndices[SkYUVAIndex::kY_Index].fIndex].proxy()->dimensions(); - // This promotion of nearest to bilinear for UV planes exists to mimic libjpeg[-turbo]'s - // do_fancy_upsampling option. However, skbug.com/9693. - GrSamplerState::Filter subsampledPlaneFilterMode = - std::max(samplerState.filter(), GrSamplerState::Filter::kBilerp); - bool usesBorder = samplerState.wrapModeX() == GrSamplerState::WrapMode::kClampToBorder || samplerState.wrapModeY() == GrSamplerState::WrapMode::kClampToBorder; float planeBorders[4][4] = {}; @@ -54,19 +50,22 @@ std::unique_ptr GrYUVtoRGBEffect::Make(GrSurfaceProxyView v border_colors(yuvColorSpace, yuvaIndices, planeBorders); } + bool snap[2] = {false, false}; std::unique_ptr planeFPs[4]; for (int i = 0; i < numPlanes; ++i) { SkISize dimensions = views[i].proxy()->dimensions(); - SkTCopyOnFirstWrite planeMatrix(&localMatrix); - GrSamplerState::Filter planeFilter = samplerState.filter(); - SkRect planeDomain; + SkTCopyOnFirstWrite planeMatrix(&SkMatrix::I()); + SkRect planeSubset; + bool makeBilerpWithSnap = false; + float sx = 1.f, + sy = 1.f; if (dimensions != yDimensions) { // JPEG chroma subsampling of odd dimensions produces U and V planes with the ceiling of // the image size divided by the subsampling factor (2). Our API for creating YUVA // doesn't capture the intended subsampling (and we should fix that). This fixes up 2x // subsampling for images with odd widths/heights (e.g. JPEG 420 or 422). - float sx = (float)dimensions.width() / yDimensions.width(); - float sy = (float)dimensions.height() / yDimensions.height(); + sx = (float)dimensions.width() / yDimensions.width(); + sy = (float)dimensions.height() / yDimensions.height(); if ((yDimensions.width() & 0b1) && dimensions.width() == yDimensions.width() / 2 + 1) { sx = 0.5f; } @@ -74,47 +73,87 @@ std::unique_ptr GrYUVtoRGBEffect::Make(GrSurfaceProxyView v dimensions.height() == yDimensions.height() / 2 + 1) { sy = 0.5f; } + // This promotion of nearest to bilinear for UV planes exists to mimic libjpeg[-turbo]'s + // do_fancy_upsampling option. We will filter the subsampled plane, however we want to + // filter at a fixed point for each logical image pixel to simulate nearest neighbor. + if (samplerState.filter() == GrSamplerState::Filter::kNearest) { + bool snapX = (sx != 1.f), + snapY = (sy != 1.f); + makeBilerpWithSnap = snapX || snapY; + snap[0] |= snapX; + snap[1] |= snapY; + } *planeMatrix.writable() = SkMatrix::Scale(sx, sy); - planeMatrix.writable()->preConcat(localMatrix); - planeFilter = subsampledPlaneFilterMode; if (subset) { - planeDomain = {subset->fLeft * sx, + planeSubset = {subset->fLeft * sx, subset->fTop * sy, subset->fRight * sx, subset->fBottom * sy}; } } else if (subset) { - planeDomain = *subset; + planeSubset = *subset; } - samplerState.setFilterMode(planeFilter); if (subset) { - SkASSERT(planeFilter != GrSamplerState::Filter::kMipMap); - planeFPs[i] = - GrTextureEffect::MakeSubset(views[i], kUnknown_SkAlphaType, *planeMatrix, - samplerState, planeDomain, caps, planeBorders[i]); + if (makeBilerpWithSnap) { + // The plane is subsampled and we have an overall subset on the image. We're + // emulating do_fancy_upsampling using bilerp but snapping look ups to the y-plane + // pixel centers. Consider a logical image pixel at the edge of the subset. When + // computing the logical pixel color value we should use a 50/50 blend of two values + // from the subsampled plane. Depending on where the subset edge falls in actual + // subsampled plane, one of those values may come from outside the subset. Hence, + // we use this custom inset factory which applies the wrap mode to planeSubset but + // allows the bilerp sampling to read pixels from the plane that are just outside + // planeSubset. + planeFPs[i] = GrTextureEffect::MakeBilerpWithInset( + views[i], kUnknown_SkAlphaType, *planeMatrix, samplerState.wrapModeX(), + samplerState.wrapModeY(), planeSubset, {sx/2.f, sy/2.f}, caps, + planeBorders[i]); + } else { + SkASSERT(samplerState.filter() != GrSamplerState::Filter::kMipMap); + planeFPs[i] = GrTextureEffect::MakeSubset(views[i], kUnknown_SkAlphaType, + *planeMatrix, samplerState, planeSubset, + caps, planeBorders[i]); + } } else { + GrSamplerState planeSampler = samplerState; + if (makeBilerpWithSnap) { + planeSampler.setFilterMode(GrSamplerState::Filter::kBilerp); + } planeFPs[i] = GrTextureEffect::Make(views[i], kUnknown_SkAlphaType, *planeMatrix, - samplerState, caps, planeBorders[i]); + planeSampler, caps, planeBorders[i]); } } - - return std::unique_ptr( - new GrYUVtoRGBEffect(planeFPs, numPlanes, yuvaIndices, yuvColorSpace)); + auto fp = std::unique_ptr( + new GrYUVtoRGBEffect(planeFPs, numPlanes, yuvaIndices, snap, yuvColorSpace)); + return GrMatrixEffect::Make(localMatrix, std::move(fp)); } static SkAlphaType alpha_type(const SkYUVAIndex yuvaIndices[4]) { return yuvaIndices[3].fIndex >= 0 ? kPremul_SkAlphaType : kOpaque_SkAlphaType; } -GrYUVtoRGBEffect::GrYUVtoRGBEffect(std::unique_ptr planeFPs[4], int numPlanes, - const SkYUVAIndex yuvaIndices[4], SkYUVColorSpace yuvColorSpace) +GrYUVtoRGBEffect::GrYUVtoRGBEffect(std::unique_ptr planeFPs[4], + int numPlanes, + const SkYUVAIndex yuvaIndices[4], + const bool snap[2], + SkYUVColorSpace yuvColorSpace) : GrFragmentProcessor(kGrYUVtoRGBEffect_ClassID, ModulateForClampedSamplerOptFlags(alpha_type(yuvaIndices))) , fYUVColorSpace(yuvColorSpace) { - for (int i = 0; i < numPlanes; ++i) { - this->registerChildProcessor(std::move(planeFPs[i])); - } std::copy_n(yuvaIndices, 4, fYUVAIndices); + std::copy_n(snap, 2, fSnap); + + if (fSnap[0] || fSnap[1]) { + // Need this so that we can access coords in SKSL to perform snapping. + this->setUsesSampleCoordsDirectly(); + for (int i = 0; i < numPlanes; ++i) { + this->registerChild(std::move(planeFPs[i]), SkSL::SampleUsage::Explicit()); + } + } else { + for (int i = 0; i < numPlanes; ++i) { + this->registerChild(std::move(planeFPs[i])); + } + } } #ifdef SK_DEBUG @@ -142,10 +181,21 @@ GrGLSLFragmentProcessor* GrYUVtoRGBEffect::onCreateGLSLInstance() const { int numPlanes = yuvEffect.numChildProcessors(); - SkString coords[4]; + const char* sampleCoords = ""; + if (yuvEffect.fSnap[0] || yuvEffect.fSnap[1]) { + fragBuilder->codeAppendf("float2 snappedCoords = %s;", args.fSampleCoord); + if (yuvEffect.fSnap[0]) { + fragBuilder->codeAppend("snappedCoords.x = floor(snappedCoords.x) + 0.5;"); + } + if (yuvEffect.fSnap[1]) { + fragBuilder->codeAppend("snappedCoords.y = floor(snappedCoords.y) + 0.5;"); + } + sampleCoords = "snappedCoords"; + } + fragBuilder->codeAppendf("half4 planes[%d];", numPlanes); for (int i = 0; i < numPlanes; ++i) { - SkString tempVar = this->invokeChild(i, args); + SkString tempVar = this->invokeChild(i, args, sampleCoords); fragBuilder->codeAppendf("planes[%d] = %s;", i, tempVar.c_str()); } @@ -227,7 +277,13 @@ void GrYUVtoRGBEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, packed |= (index | (chann << 2)) << (i * 4); } if (fYUVColorSpace == kIdentity_SkYUVColorSpace) { - packed |= 0x1 << 16; + packed |= 1 << 16; + } + if (fSnap[0]) { + packed |= 1 << 17; + } + if (fSnap[1]) { + packed |= 1 << 18; } b->add32(packed); } @@ -235,27 +291,20 @@ void GrYUVtoRGBEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, bool GrYUVtoRGBEffect::onIsEqual(const GrFragmentProcessor& other) const { const GrYUVtoRGBEffect& that = other.cast(); - for (int i = 0; i < 4; ++i) { - if (fYUVAIndices[i] != that.fYUVAIndices[i]) { - return false; - } - } - - if (fYUVColorSpace != that.fYUVColorSpace) { - return false; - } - - return true; + return std::equal(fYUVAIndices, fYUVAIndices + 4, that.fYUVAIndices) && + std::equal(fSnap, fSnap + 2, that.fSnap) && + fYUVColorSpace == that.fYUVColorSpace; } GrYUVtoRGBEffect::GrYUVtoRGBEffect(const GrYUVtoRGBEffect& src) : GrFragmentProcessor(kGrYUVtoRGBEffect_ClassID, src.optimizationFlags()) , fYUVColorSpace(src.fYUVColorSpace) { - int numPlanes = src.numChildProcessors(); - for (int i = 0; i < numPlanes; ++i) { - this->registerChildProcessor(this->childProcessor(i).clone()); + this->cloneAndRegisterAllChildProcessors(src); + if (src.fSnap[0] || src.fSnap[1]) { + this->setUsesSampleCoordsDirectly(); } std::copy_n(src.fYUVAIndices, this->numChildProcessors(), fYUVAIndices); + std::copy_n(src.fSnap, 2, fSnap); } std::unique_ptr GrYUVtoRGBEffect::clone() const { diff --git a/src/gpu/effects/GrYUVtoRGBEffect.h b/src/gpu/effects/GrYUVtoRGBEffect.h index 112a828a6d036..d92dce7820997 100644 --- a/src/gpu/effects/GrYUVtoRGBEffect.h +++ b/src/gpu/effects/GrYUVtoRGBEffect.h @@ -11,7 +11,6 @@ #include "include/core/SkTypes.h" #include "include/core/SkYUVAIndex.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" class GrYUVtoRGBEffect : public GrFragmentProcessor { @@ -32,8 +31,11 @@ class GrYUVtoRGBEffect : public GrFragmentProcessor { const char* name() const override { return "YUVtoRGBEffect"; } private: - GrYUVtoRGBEffect(std::unique_ptr planeFPs[4], int numPlanes, - const SkYUVAIndex yuvaIndices[4], SkYUVColorSpace yuvColorSpace); + GrYUVtoRGBEffect(std::unique_ptr planeFPs[4], + int numPlanes, + const SkYUVAIndex yuvaIndices[4], + const bool snap[2], + SkYUVColorSpace yuvColorSpace); GrYUVtoRGBEffect(const GrYUVtoRGBEffect& src); @@ -47,5 +49,6 @@ class GrYUVtoRGBEffect : public GrFragmentProcessor { SkYUVAIndex fYUVAIndices[4]; SkYUVColorSpace fYUVColorSpace; + bool fSnap[2]; }; #endif diff --git a/src/gpu/effects/generated/GrAARectEffect.cpp b/src/gpu/effects/generated/GrAARectEffect.cpp index 63f3a67364ac4..233c42a7d0e29 100644 --- a/src/gpu/effects/generated/GrAARectEffect.cpp +++ b/src/gpu/effects/generated/GrAARectEffect.cpp @@ -28,34 +28,48 @@ class GrGLSLAARectEffect : public GrGLSLFragmentProcessor { auto rect = _outer.rect; (void)rect; prevRect = float4(-1.0); - rectUniformVar = args.fUniformHandler->addUniform( - &_outer, kFragment_GrShaderFlag, kFloat4_GrSLType, "rectUniform"); + rectUniformVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, + kFloat4_GrSLType, "rectUniform"); fragBuilder->codeAppendf( - "float4 prevRect = float4(%f, %f, %f, %f);\nhalf alpha;\n@switch (%d) {\n case " - "0:\n case 2:\n alpha = half(all(greaterThan(float4(sk_FragCoord.xy, " - "%s.zw), float4(%s.xy, sk_FragCoord.xy))) ? 1 : 0);\n break;\n " - "default:\n half xSub, ySub;\n xSub = min(half(sk_FragCoord.x - " - "%s.x), 0.0);\n xSub += min(half(%s.z - sk_FragCoord.x), 0.0);\n " - "ySub = min(half(sk_FragCoord.y - %s.y), 0.0);\n ySub += min(half(%s.w - " - "sk_FragCoord.y), 0.0);\n alpha = (1.0 + ", - prevRect.left(), - prevRect.top(), - prevRect.right(), - prevRect.bottom(), - (int)_outer.edgeType, - args.fUniformHandler->getUniformCStr(rectUniformVar), + R"SkSL(float4 prevRect = float4(%f, %f, %f, %f); +half alpha; +@switch (%d) { + case 0: + case 2: + alpha = half(all(greaterThan(float4(sk_FragCoord.xy, %s.zw), float4(%s.xy, sk_FragCoord.xy))) ? 1 : 0); + break; + default: + half xSub, ySub; + xSub = min(half(sk_FragCoord.x - %s.x), 0.0); + xSub += min(half(%s.z - sk_FragCoord.x), 0.0); + ySub = min(half(sk_FragCoord.y - %s.y), 0.0); + ySub += min(half(%s.w - sk_FragCoord.y), 0.0); + alpha = (1.0 + max(xSub, -1.0)) * (1.0 + max(ySub, -1.0)); +} +@if (%d == 2 || %d == 3) { + alpha = 1.0 - alpha; +})SkSL", + prevRect.left(), prevRect.top(), prevRect.right(), prevRect.bottom(), + (int)_outer.edgeType, args.fUniformHandler->getUniformCStr(rectUniformVar), args.fUniformHandler->getUniformCStr(rectUniformVar), args.fUniformHandler->getUniformCStr(rectUniformVar), args.fUniformHandler->getUniformCStr(rectUniformVar), args.fUniformHandler->getUniformCStr(rectUniformVar), - args.fUniformHandler->getUniformCStr(rectUniformVar)); + args.fUniformHandler->getUniformCStr(rectUniformVar), (int)_outer.edgeType, + (int)_outer.edgeType); + SkString _input1677(args.fInputColor); + SkString _sample1677; + if (_outer.inputFP_index >= 0) { + _sample1677 = this->invokeChild(_outer.inputFP_index, _input1677.c_str(), args); + } else { + _sample1677.swap(_input1677); + } fragBuilder->codeAppendf( - "max(xSub, -1.0)) * (1.0 + max(ySub, -1.0));\n}\n@if (%d == 2 || %d == 3) {\n " - "alpha = 1.0 - alpha;\n}\n%s = %s * alpha;\n", - (int)_outer.edgeType, - (int)_outer.edgeType, - args.fOutputColor, - args.fInputColor); + R"SkSL( +half4 inputColor = %s; +%s = inputColor * alpha; +)SkSL", + _sample1677.c_str(), args.fOutputColor); } private: @@ -95,7 +109,11 @@ bool GrAARectEffect::onIsEqual(const GrFragmentProcessor& other) const { GrAARectEffect::GrAARectEffect(const GrAARectEffect& src) : INHERITED(kGrAARectEffect_ClassID, src.optimizationFlags()) , edgeType(src.edgeType) - , rect(src.rect) {} + , rect(src.rect) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrAARectEffect::clone() const { return std::unique_ptr(new GrAARectEffect(*this)); } @@ -111,7 +129,7 @@ std::unique_ptr GrAARectEffect::TestCreate(GrProcessorTestD GrClipEdgeType edgeType = static_cast(d->fRandom->nextULessThan(kGrClipEdgeTypeCnt)); - fp = GrAARectEffect::Make(edgeType, rect); + fp = GrAARectEffect::Make(/*inputFP=*/nullptr, edgeType, rect); } while (nullptr == fp); return fp; } diff --git a/src/gpu/effects/generated/GrAARectEffect.h b/src/gpu/effects/generated/GrAARectEffect.h index 42324b4c6dcdf..a3f0085e0fa82 100644 --- a/src/gpu/effects/generated/GrAARectEffect.h +++ b/src/gpu/effects/generated/GrAARectEffect.h @@ -10,28 +10,42 @@ **************************************************************************************************/ #ifndef GrAARectEffect_DEFINED #define GrAARectEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrAARectEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(GrClipEdgeType edgeType, SkRect rect) { - return std::unique_ptr(new GrAARectEffect(edgeType, rect)); + static std::unique_ptr Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, + SkRect rect) { + return std::unique_ptr( + new GrAARectEffect(std::move(inputFP), edgeType, rect)); } GrAARectEffect(const GrAARectEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "AARectEffect"; } + int inputFP_index = -1; GrClipEdgeType edgeType; SkRect rect; private: - GrAARectEffect(GrClipEdgeType edgeType, SkRect rect) + GrAARectEffect(std::unique_ptr inputFP, + GrClipEdgeType edgeType, + SkRect rect) : INHERITED(kGrAARectEffect_ClassID, - (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag) , edgeType(edgeType) - , rect(rect) {} + , rect(rect) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp b/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp index 915684f12226d..c9f7c7bf634bd 100644 --- a/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp +++ b/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.cpp @@ -10,15 +10,6 @@ **************************************************************************************************/ #include "GrAlphaThresholdFragmentProcessor.h" -inline GrFragmentProcessor::OptimizationFlags GrAlphaThresholdFragmentProcessor::optFlags( - float outerThreshold) { - if (outerThreshold >= 1.0) { - return kPreservesOpaqueInput_OptimizationFlag | - kCompatibleWithCoverageAsAlpha_OptimizationFlag; - } else { - return kCompatibleWithCoverageAsAlpha_OptimizationFlag; - } -} #include "src/gpu/GrTexture.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" @@ -41,22 +32,34 @@ class GrGLSLAlphaThresholdFragmentProcessor : public GrGLSLFragmentProcessor { kHalf_GrSLType, "innerThreshold"); outerThresholdVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf_GrSLType, "outerThreshold"); - SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D( - args.fTransformedCoords[0].fVaryingPoint, _outer.sampleMatrix()); + SkString _input515(args.fInputColor); + SkString _sample515; + if (_outer.inputFP_index >= 0) { + _sample515 = this->invokeChild(_outer.inputFP_index, _input515.c_str(), args); + } else { + _sample515.swap(_input515); + } fragBuilder->codeAppendf( - "half4 color = %s;\nhalf4 mask_color = sample(%s, %s).%s;\nif (mask_color.w < 0.5) " - "{\n if (color.w > %s) {\n half scale = %s / color.w;\n color.xyz " - "*= scale;\n color.w = %s;\n }\n} else if (color.w < %s) {\n half " - "scale = %s / max(0.0010000000474974513, color.w);\n color.xyz *= scale;\n " - "color.w = %s;\n}\n%s = color;\n", - args.fInputColor, - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - sk_TransformedCoords2D_0.c_str(), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str(), - args.fUniformHandler->getUniformCStr(outerThresholdVar), + R"SkSL(half4 color = %s;)SkSL", _sample515.c_str()); + SkString _sample567; + _sample567 = this->invokeChild(_outer.maskFP_index, args); + fragBuilder->codeAppendf( + R"SkSL( +half4 mask_color = %s; +if (mask_color.w < 0.5) { + if (color.w > %s) { + half scale = %s / color.w; + color.xyz *= scale; + color.w = %s; + } +} else if (color.w < %s) { + half scale = %s / max(0.0010000000474974513, color.w); + color.xyz *= scale; + color.w = %s; +} +%s = color; +)SkSL", + _sample567.c_str(), args.fUniformHandler->getUniformCStr(outerThresholdVar), args.fUniformHandler->getUniformCStr(outerThresholdVar), args.fUniformHandler->getUniformCStr(outerThresholdVar), args.fUniformHandler->getUniformCStr(innerThresholdVar), @@ -85,7 +88,6 @@ void GrAlphaThresholdFragmentProcessor::onGetGLSLProcessorKey(const GrShaderCaps bool GrAlphaThresholdFragmentProcessor::onIsEqual(const GrFragmentProcessor& other) const { const GrAlphaThresholdFragmentProcessor& that = other.cast(); (void)that; - if (mask != that.mask) return false; if (innerThreshold != that.innerThreshold) return false; if (outerThreshold != that.outerThreshold) return false; return true; @@ -93,37 +95,30 @@ bool GrAlphaThresholdFragmentProcessor::onIsEqual(const GrFragmentProcessor& oth GrAlphaThresholdFragmentProcessor::GrAlphaThresholdFragmentProcessor( const GrAlphaThresholdFragmentProcessor& src) : INHERITED(kGrAlphaThresholdFragmentProcessor_ClassID, src.optimizationFlags()) - , maskCoordTransform(src.maskCoordTransform) - , mask(src.mask) , innerThreshold(src.innerThreshold) , outerThreshold(src.outerThreshold) { - this->setTextureSamplerCnt(1); - this->addCoordTransform(&maskCoordTransform); + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } + { maskFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.maskFP_index)); } } std::unique_ptr GrAlphaThresholdFragmentProcessor::clone() const { return std::unique_ptr(new GrAlphaThresholdFragmentProcessor(*this)); } -const GrFragmentProcessor::TextureSampler& GrAlphaThresholdFragmentProcessor::onTextureSampler( - int index) const { - return IthTextureSampler(index, mask); -} GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrAlphaThresholdFragmentProcessor); #if GR_TEST_UTILS std::unique_ptr GrAlphaThresholdFragmentProcessor::TestCreate( GrProcessorTestData* testData) { - auto[maskView, ct, at] = testData->randomAlphaOnlyView(); - // Make the inner and outer thresholds be in (0, 1) exclusive and be sorted correctly. - float innerThresh = testData->fRandom->nextUScalar1() * .99f + 0.005f; - float outerThresh = testData->fRandom->nextUScalar1() * .99f + 0.005f; - const int kMaxWidth = 1000; - const int kMaxHeight = 1000; - uint32_t width = testData->fRandom->nextULessThan(kMaxWidth); - uint32_t height = testData->fRandom->nextULessThan(kMaxHeight); - uint32_t x = testData->fRandom->nextULessThan(kMaxWidth - width); - uint32_t y = testData->fRandom->nextULessThan(kMaxHeight - height); - SkIRect bounds = SkIRect::MakeXYWH(x, y, width, height); + // Make the inner and outer thresholds be in [0, 1]. + float outerThresh = testData->fRandom->nextUScalar1(); + float innerThresh = testData->fRandom->nextUScalar1(); + std::unique_ptr inputChild, maskChild; + if (testData->fRandom->nextBool()) { + inputChild = GrProcessorUnitTest::MakeChildFP(testData); + } + maskChild = GrProcessorUnitTest::MakeChildFP(testData); - return GrAlphaThresholdFragmentProcessor::Make(std::move(maskView), innerThresh, outerThresh, - bounds); + return GrAlphaThresholdFragmentProcessor::Make(std::move(inputChild), std::move(maskChild), + innerThresh, outerThresh); } #endif diff --git a/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h b/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h index 68e9465e4b6f1..780914c3e68ba 100644 --- a/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h +++ b/src/gpu/effects/generated/GrAlphaThresholdFragmentProcessor.h @@ -10,50 +10,51 @@ **************************************************************************************************/ #ifndef GrAlphaThresholdFragmentProcessor_DEFINED #define GrAlphaThresholdFragmentProcessor_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrAlphaThresholdFragmentProcessor : public GrFragmentProcessor { public: - inline OptimizationFlags optFlags(float outerThreshold); - - static std::unique_ptr Make(GrSurfaceProxyView mask, + static std::unique_ptr Make(std::unique_ptr inputFP, + std::unique_ptr maskFP, float innerThreshold, - float outerThreshold, - const SkIRect& bounds) { + float outerThreshold) { return std::unique_ptr(new GrAlphaThresholdFragmentProcessor( - std::move(mask), innerThreshold, outerThreshold, bounds)); + std::move(inputFP), std::move(maskFP), innerThreshold, outerThreshold)); } GrAlphaThresholdFragmentProcessor(const GrAlphaThresholdFragmentProcessor& src); std::unique_ptr clone() const override; const char* name() const override { return "AlphaThresholdFragmentProcessor"; } - GrCoordTransform maskCoordTransform; - TextureSampler mask; + int inputFP_index = -1; + int maskFP_index = -1; float innerThreshold; float outerThreshold; private: - GrAlphaThresholdFragmentProcessor(GrSurfaceProxyView mask, + GrAlphaThresholdFragmentProcessor(std::unique_ptr inputFP, + std::unique_ptr maskFP, float innerThreshold, - float outerThreshold, - const SkIRect& bounds) - : INHERITED(kGrAlphaThresholdFragmentProcessor_ClassID, kNone_OptimizationFlags) - , maskCoordTransform( - SkMatrix::Translate(SkIntToScalar(-bounds.x()), SkIntToScalar(-bounds.y())), - mask.proxy(), - mask.origin()) - , mask(std::move(mask)) + float outerThreshold) + : INHERITED(kGrAlphaThresholdFragmentProcessor_ClassID, + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + ((outerThreshold >= 1.0) ? kPreservesOpaqueInput_OptimizationFlag + : kNone_OptimizationFlags)) , innerThreshold(innerThreshold) , outerThreshold(outerThreshold) { - this->setTextureSamplerCnt(1); - this->addCoordTransform(&maskCoordTransform); + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + SkASSERT(maskFP); + maskFP_index = this->registerChild(std::move(maskFP), SkSL::SampleUsage::PassThrough()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; - const TextureSampler& onTextureSampler(int) const override; GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; }; diff --git a/src/gpu/effects/generated/GrBlurredEdgeFragmentProcessor.cpp b/src/gpu/effects/generated/GrBlurredEdgeFragmentProcessor.cpp index 5c6dbc3db6fd1..3d5b7b123808c 100644 --- a/src/gpu/effects/generated/GrBlurredEdgeFragmentProcessor.cpp +++ b/src/gpu/effects/generated/GrBlurredEdgeFragmentProcessor.cpp @@ -26,12 +26,27 @@ class GrGLSLBlurredEdgeFragmentProcessor : public GrGLSLFragmentProcessor { (void)_outer; auto mode = _outer.mode; (void)mode; + SkString _input308(args.fInputColor); + SkString _sample308; + if (_outer.inputFP_index >= 0) { + _sample308 = this->invokeChild(_outer.inputFP_index, _input308.c_str(), args); + } else { + _sample308.swap(_input308); + } fragBuilder->codeAppendf( - "half factor = 1.0 - %s.w;\n@switch (%d) {\n case 0:\n factor = " - "exp((-factor * factor) * 4.0) - 0.017999999225139618;\n break;\n case " - "1:\n factor = smoothstep(1.0, 0.0, factor);\n break;\n}\n%s = " - "half4(factor);\n", - args.fInputColor, (int)_outer.mode, args.fOutputColor); + R"SkSL(half inputAlpha = %s.w; +half factor = 1.0 - inputAlpha; +@switch (%d) { + case 0: + factor = exp((-factor * factor) * 4.0) - 0.017999999225139618; + break; + case 1: + factor = smoothstep(1.0, 0.0, factor); + break; +} +%s = half4(factor); +)SkSL", + _sample308.c_str(), (int)_outer.mode, args.fOutputColor); } private: @@ -54,7 +69,11 @@ bool GrBlurredEdgeFragmentProcessor::onIsEqual(const GrFragmentProcessor& other) GrBlurredEdgeFragmentProcessor::GrBlurredEdgeFragmentProcessor( const GrBlurredEdgeFragmentProcessor& src) : INHERITED(kGrBlurredEdgeFragmentProcessor_ClassID, src.optimizationFlags()) - , mode(src.mode) {} + , mode(src.mode) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrBlurredEdgeFragmentProcessor::clone() const { return std::unique_ptr(new GrBlurredEdgeFragmentProcessor(*this)); } diff --git a/src/gpu/effects/generated/GrBlurredEdgeFragmentProcessor.h b/src/gpu/effects/generated/GrBlurredEdgeFragmentProcessor.h index 188280327a925..2fdc7e783ce34 100644 --- a/src/gpu/effects/generated/GrBlurredEdgeFragmentProcessor.h +++ b/src/gpu/effects/generated/GrBlurredEdgeFragmentProcessor.h @@ -10,26 +10,35 @@ **************************************************************************************************/ #ifndef GrBlurredEdgeFragmentProcessor_DEFINED #define GrBlurredEdgeFragmentProcessor_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrBlurredEdgeFragmentProcessor : public GrFragmentProcessor { public: enum class Mode { kGaussian = 0, kSmoothStep = 1 }; - static std::unique_ptr Make(Mode mode) { - return std::unique_ptr(new GrBlurredEdgeFragmentProcessor(mode)); + static std::unique_ptr Make(std::unique_ptr inputFP, + Mode mode) { + return std::unique_ptr( + new GrBlurredEdgeFragmentProcessor(std::move(inputFP), mode)); } GrBlurredEdgeFragmentProcessor(const GrBlurredEdgeFragmentProcessor& src); std::unique_ptr clone() const override; const char* name() const override { return "BlurredEdgeFragmentProcessor"; } + int inputFP_index = -1; Mode mode; private: - GrBlurredEdgeFragmentProcessor(Mode mode) + GrBlurredEdgeFragmentProcessor(std::unique_ptr inputFP, Mode mode) : INHERITED(kGrBlurredEdgeFragmentProcessor_ClassID, kNone_OptimizationFlags) - , mode(mode) {} + , mode(mode) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp b/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp index 451dd98d0d4fe..269dfdc0e5baf 100644 --- a/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp +++ b/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.cpp @@ -11,7 +11,7 @@ #include "GrCircleBlurFragmentProcessor.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" @@ -177,14 +177,14 @@ static void create_half_plane_profile(uint8_t* profile, int profileWidth) { profile[profileWidth - 1] = 0; } -static GrSurfaceProxyView create_profile_texture(GrRecordingContext* context, - const SkRect& circle, - float sigma, - float* solidRadius, - float* textureRadius) { +static std::unique_ptr create_profile_effect(GrRecordingContext* context, + const SkRect& circle, + float sigma, + float* solidRadius, + float* textureRadius) { float circleR = circle.width() / 2.0f; if (circleR < SK_ScalarNearlyZero) { - return {}; + return nullptr; } // Profile textures are cached by the ratio of sigma to circle radius and by the size of the // profile texture (binned by powers of 2). @@ -214,6 +214,12 @@ static GrSurfaceProxyView create_profile_texture(GrRecordingContext* context, *textureRadius = circleR + 3 * sigma; } + static constexpr int kProfileTextureWidth = 512; + // This would be kProfileTextureWidth/textureRadius if it weren't for the fact that we do + // the calculation of the profile coord in a coord space that has already been scaled by + // 1 / textureRadius. This is done to avoid overflow in length(). + SkMatrix texM = SkMatrix::Scale(kProfileTextureWidth, 1.f); + static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); GrUniqueKey key; GrUniqueKey::Builder builder(&key, kDomain, 1, "1-D Circular Blur"); @@ -224,14 +230,13 @@ static GrSurfaceProxyView create_profile_texture(GrRecordingContext* context, if (sk_sp blurProfile = proxyProvider->findOrCreateProxyByUniqueKey(key)) { GrSwizzle swizzle = context->priv().caps()->getReadSwizzle(blurProfile->backendFormat(), GrColorType::kAlpha_8); - return {std::move(blurProfile), kTopLeft_GrSurfaceOrigin, swizzle}; + GrSurfaceProxyView profileView{std::move(blurProfile), kTopLeft_GrSurfaceOrigin, swizzle}; + return GrTextureEffect::Make(std::move(profileView), kPremul_SkAlphaType, texM); } - static constexpr int kProfileTextureWidth = 512; - SkBitmap bm; if (!bm.tryAllocPixels(SkImageInfo::MakeA8(kProfileTextureWidth, 1))) { - return {}; + return nullptr; } if (useHalfPlaneApprox) { @@ -246,25 +251,28 @@ static GrSurfaceProxyView create_profile_texture(GrRecordingContext* context, bm.setImmutable(); GrBitmapTextureMaker maker(context, bm, GrImageTexGenPolicy::kNew_Uncached_Budgeted); - auto blurView = maker.view(GrMipMapped::kNo); - if (!blurView) { - return {}; + auto profileView = maker.view(GrMipMapped::kNo); + if (!profileView) { + return nullptr; } - proxyProvider->assignUniqueKeyToProxy(key, blurView.asTextureProxy()); - return blurView; + proxyProvider->assignUniqueKeyToProxy(key, profileView.asTextureProxy()); + return GrTextureEffect::Make(std::move(profileView), kPremul_SkAlphaType, texM); } std::unique_ptr GrCircleBlurFragmentProcessor::Make( - GrRecordingContext* context, const SkRect& circle, float sigma) { + std::unique_ptr inputFP, + GrRecordingContext* context, + const SkRect& circle, + float sigma) { float solidRadius; float textureRadius; - GrSurfaceProxyView profile = - create_profile_texture(context, circle, sigma, &solidRadius, &textureRadius); + std::unique_ptr profile = + create_profile_effect(context, circle, sigma, &solidRadius, &textureRadius); if (!profile) { return nullptr; } return std::unique_ptr(new GrCircleBlurFragmentProcessor( - circle, textureRadius, solidRadius, std::move(profile))); + std::move(inputFP), circle, solidRadius, textureRadius, std::move(profile))); } #include "src/gpu/GrTexture.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" @@ -282,28 +290,39 @@ class GrGLSLCircleBlurFragmentProcessor : public GrGLSLFragmentProcessor { (void)_outer; auto circleRect = _outer.circleRect; (void)circleRect; - auto textureRadius = _outer.textureRadius; - (void)textureRadius; auto solidRadius = _outer.solidRadius; (void)solidRadius; + auto textureRadius = _outer.textureRadius; + (void)textureRadius; circleDataVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "circleData"); fragBuilder->codeAppendf( - "half2 vec = half2(half((sk_FragCoord.x - float(%s.x)) * float(%s.w)), " - "half((sk_FragCoord.y - float(%s.y)) * float(%s.w)));\nhalf dist = length(vec) + " - "(0.5 - %s.z) * %s.w;\n%s = %s * sample(%s, float2(half2(dist, 0.5))).%s.w;\n", - args.fUniformHandler->getUniformCStr(circleDataVar), - args.fUniformHandler->getUniformCStr(circleDataVar), + R"SkSL(; +half2 vec = half2((sk_FragCoord.xy - float2(%s.xy)) * float(%s.w)); +half dist = length(vec) + (0.5 - %s.z) * %s.w;)SkSL", args.fUniformHandler->getUniformCStr(circleDataVar), args.fUniformHandler->getUniformCStr(circleDataVar), args.fUniformHandler->getUniformCStr(circleDataVar), - args.fUniformHandler->getUniformCStr(circleDataVar), args.fOutputColor, - args.fInputColor, - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str()); + args.fUniformHandler->getUniformCStr(circleDataVar)); + SkString _input13941(args.fInputColor); + SkString _sample13941; + if (_outer.inputFP_index >= 0) { + _sample13941 = this->invokeChild(_outer.inputFP_index, _input13941.c_str(), args); + } else { + _sample13941.swap(_input13941); + } + fragBuilder->codeAppendf( + R"SkSL( +half4 inputColor = %s;)SkSL", + _sample13941.c_str()); + SkString _coords14001("float2(half2(dist, 0.5))"); + SkString _sample14001; + _sample14001 = this->invokeChild(_outer.blurProfile_index, args, _coords14001.c_str()); + fragBuilder->codeAppendf( + R"SkSL( +%s = inputColor * %s.w; +)SkSL", + args.fOutputColor, _sample14001.c_str()); } private: @@ -312,13 +331,10 @@ class GrGLSLCircleBlurFragmentProcessor : public GrGLSLFragmentProcessor { const GrCircleBlurFragmentProcessor& _outer = _proc.cast(); auto circleRect = _outer.circleRect; (void)circleRect; - auto textureRadius = _outer.textureRadius; - (void)textureRadius; auto solidRadius = _outer.solidRadius; (void)solidRadius; - const GrSurfaceProxyView& blurProfileSamplerView = _outer.textureSampler(0).view(); - GrTexture& blurProfileSampler = *blurProfileSamplerView.proxy()->peekTexture(); - (void)blurProfileSampler; + auto textureRadius = _outer.textureRadius; + (void)textureRadius; UniformHandle& circleData = circleDataVar; (void)circleData; @@ -336,27 +352,27 @@ bool GrCircleBlurFragmentProcessor::onIsEqual(const GrFragmentProcessor& other) const GrCircleBlurFragmentProcessor& that = other.cast(); (void)that; if (circleRect != that.circleRect) return false; - if (textureRadius != that.textureRadius) return false; if (solidRadius != that.solidRadius) return false; - if (blurProfileSampler != that.blurProfileSampler) return false; + if (textureRadius != that.textureRadius) return false; return true; } GrCircleBlurFragmentProcessor::GrCircleBlurFragmentProcessor( const GrCircleBlurFragmentProcessor& src) : INHERITED(kGrCircleBlurFragmentProcessor_ClassID, src.optimizationFlags()) , circleRect(src.circleRect) - , textureRadius(src.textureRadius) , solidRadius(src.solidRadius) - , blurProfileSampler(src.blurProfileSampler) { - this->setTextureSamplerCnt(1); + , textureRadius(src.textureRadius) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } + { + blurProfile_index = + this->cloneAndRegisterChildProcessor(src.childProcessor(src.blurProfile_index)); + } } std::unique_ptr GrCircleBlurFragmentProcessor::clone() const { return std::unique_ptr(new GrCircleBlurFragmentProcessor(*this)); } -const GrFragmentProcessor::TextureSampler& GrCircleBlurFragmentProcessor::onTextureSampler( - int index) const { - return IthTextureSampler(index, blurProfileSampler); -} GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrCircleBlurFragmentProcessor); #if GR_TEST_UTILS std::unique_ptr GrCircleBlurFragmentProcessor::TestCreate( @@ -364,6 +380,7 @@ std::unique_ptr GrCircleBlurFragmentProcessor::TestCreate( SkScalar wh = testData->fRandom->nextRangeScalar(100.f, 1000.f); SkScalar sigma = testData->fRandom->nextRangeF(1.f, 10.f); SkRect circle = SkRect::MakeWH(wh, wh); - return GrCircleBlurFragmentProcessor::Make(testData->context(), circle, sigma); + return GrCircleBlurFragmentProcessor::Make(/*inputFP=*/nullptr, testData->context(), circle, + sigma); } #endif diff --git a/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.h b/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.h index b61315ac53315..c306382c5e628 100644 --- a/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.h +++ b/src/gpu/effects/generated/GrCircleBlurFragmentProcessor.h @@ -10,41 +10,53 @@ **************************************************************************************************/ #ifndef GrCircleBlurFragmentProcessor_DEFINED #define GrCircleBlurFragmentProcessor_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" + +#include "src/gpu/effects/GrTextureEffect.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrCircleBlurFragmentProcessor : public GrFragmentProcessor { public: - static std::unique_ptr Make(GrRecordingContext*, + static std::unique_ptr Make(std::unique_ptr inputFP, + GrRecordingContext*, const SkRect& circle, float sigma); GrCircleBlurFragmentProcessor(const GrCircleBlurFragmentProcessor& src); std::unique_ptr clone() const override; const char* name() const override { return "CircleBlurFragmentProcessor"; } + int inputFP_index = -1; SkRect circleRect; - float textureRadius; float solidRadius; - TextureSampler blurProfileSampler; + float textureRadius; + int blurProfile_index = -1; private: - GrCircleBlurFragmentProcessor(SkRect circleRect, - float textureRadius, + GrCircleBlurFragmentProcessor(std::unique_ptr inputFP, + SkRect circleRect, float solidRadius, - GrSurfaceProxyView blurProfileSampler) + float textureRadius, + std::unique_ptr blurProfile) : INHERITED(kGrCircleBlurFragmentProcessor_ClassID, - (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag) , circleRect(circleRect) - , textureRadius(textureRadius) , solidRadius(solidRadius) - , blurProfileSampler(std::move(blurProfileSampler)) { - this->setTextureSamplerCnt(1); + , textureRadius(textureRadius) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + SkASSERT(blurProfile); + blurProfile_index = + this->registerChild(std::move(blurProfile), SkSL::SampleUsage::Explicit()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; - const TextureSampler& onTextureSampler(int) const override; GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; }; diff --git a/src/gpu/effects/generated/GrCircleEffect.cpp b/src/gpu/effects/generated/GrCircleEffect.cpp index 272d33234a5a7..f9df3c9fdcb7c 100644 --- a/src/gpu/effects/generated/GrCircleEffect.cpp +++ b/src/gpu/effects/generated/GrCircleEffect.cpp @@ -33,20 +33,39 @@ class GrGLSLCircleEffect : public GrGLSLFragmentProcessor { circleVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kFloat4_GrSLType, "circle"); fragBuilder->codeAppendf( - "float2 prevCenter;\nfloat prevRadius = %f;\nhalf d;\n@if (%d == 2 || %d == 3) {\n " - " d = half((length((%s.xy - sk_FragCoord.xy) * %s.w) - 1.0) * %s.z);\n} else {\n " - " d = half((1.0 - length((%s.xy - sk_FragCoord.xy) * %s.w)) * %s.z);\n}\n@if " - "((%d == 1 || %d == 3) || %d == 4) {\n %s = %s * clamp(d, 0.0, 1.0);\n} else " - "{\n %s = d > 0.5 ? %s : half4(0.0);\n}\n", + R"SkSL(float2 prevCenter; +float prevRadius = %f; +half d; +@if (%d == 2 || %d == 3) { + d = half((length((%s.xy - sk_FragCoord.xy) * %s.w) - 1.0) * %s.z); +} else { + d = half((1.0 - length((%s.xy - sk_FragCoord.xy) * %s.w)) * %s.z); +})SkSL", prevRadius, (int)_outer.edgeType, (int)_outer.edgeType, args.fUniformHandler->getUniformCStr(circleVar), args.fUniformHandler->getUniformCStr(circleVar), args.fUniformHandler->getUniformCStr(circleVar), args.fUniformHandler->getUniformCStr(circleVar), args.fUniformHandler->getUniformCStr(circleVar), - args.fUniformHandler->getUniformCStr(circleVar), (int)_outer.edgeType, - (int)_outer.edgeType, (int)_outer.edgeType, args.fOutputColor, args.fInputColor, - args.fOutputColor, args.fInputColor); + args.fUniformHandler->getUniformCStr(circleVar)); + SkString _input2509(args.fInputColor); + SkString _sample2509; + if (_outer.inputFP_index >= 0) { + _sample2509 = this->invokeChild(_outer.inputFP_index, _input2509.c_str(), args); + } else { + _sample2509.swap(_input2509); + } + fragBuilder->codeAppendf( + R"SkSL( +half4 inputColor = %s; +@if (%d == 1 || %d == 3) { + %s = inputColor * clamp(d, 0.0, 1.0); +} else { + %s = d > 0.5 ? inputColor : half4(0.0); +} +)SkSL", + _sample2509.c_str(), (int)_outer.edgeType, (int)_outer.edgeType, args.fOutputColor, + args.fOutputColor); } private: @@ -101,7 +120,11 @@ GrCircleEffect::GrCircleEffect(const GrCircleEffect& src) : INHERITED(kGrCircleEffect_ClassID, src.optimizationFlags()) , edgeType(src.edgeType) , center(src.center) - , radius(src.radius) {} + , radius(src.radius) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrCircleEffect::clone() const { return std::unique_ptr(new GrCircleEffect(*this)); } @@ -112,10 +135,12 @@ std::unique_ptr GrCircleEffect::TestCreate(GrProcessorTestD center.fX = testData->fRandom->nextRangeScalar(0.f, 1000.f); center.fY = testData->fRandom->nextRangeScalar(0.f, 1000.f); SkScalar radius = testData->fRandom->nextRangeF(1.f, 1000.f); - GrClipEdgeType et; + bool success; + std::unique_ptr fp; do { - et = (GrClipEdgeType)testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt); - } while (GrClipEdgeType::kHairlineAA == et); - return GrCircleEffect::Make(et, center, radius); + GrClipEdgeType et = (GrClipEdgeType)testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt); + std::tie(success, fp) = GrCircleEffect::Make(/*inputFP=*/nullptr, et, center, radius); + } while (!success); + return fp; } #endif diff --git a/src/gpu/effects/generated/GrCircleEffect.h b/src/gpu/effects/generated/GrCircleEffect.h index b20412c70aee0..0fc1de7bf2778 100644 --- a/src/gpu/effects/generated/GrCircleEffect.h +++ b/src/gpu/effects/generated/GrCircleEffect.h @@ -10,37 +10,51 @@ **************************************************************************************************/ #ifndef GrCircleEffect_DEFINED #define GrCircleEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrCircleEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(GrClipEdgeType edgeType, - SkPoint center, - float radius) { + static GrFPResult Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, + SkPoint center, + float radius) { // A radius below half causes the implicit insetting done by this processor to become // inverted. We could handle this case by making the processor code more complicated. if (radius < .5f && GrProcessorEdgeTypeIsInverseFill(edgeType)) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } - return std::unique_ptr(new GrCircleEffect(edgeType, center, radius)); + return GrFPSuccess(std::unique_ptr( + new GrCircleEffect(std::move(inputFP), edgeType, center, radius))); } GrCircleEffect(const GrCircleEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "CircleEffect"; } + int inputFP_index = -1; GrClipEdgeType edgeType; SkPoint center; float radius; private: - GrCircleEffect(GrClipEdgeType edgeType, SkPoint center, float radius) + GrCircleEffect(std::unique_ptr inputFP, + GrClipEdgeType edgeType, + SkPoint center, + float radius) : INHERITED(kGrCircleEffect_ClassID, - (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag) , edgeType(edgeType) , center(center) - , radius(radius) {} + , radius(radius) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrClampFragmentProcessor.cpp b/src/gpu/effects/generated/GrClampFragmentProcessor.cpp index 7d692b52de2a1..f218bf889db37 100644 --- a/src/gpu/effects/generated/GrClampFragmentProcessor.cpp +++ b/src/gpu/effects/generated/GrClampFragmentProcessor.cpp @@ -25,11 +25,24 @@ class GrGLSLClampFragmentProcessor : public GrGLSLFragmentProcessor { (void)_outer; auto clampToPremul = _outer.clampToPremul; (void)clampToPremul; + SkString _input464(args.fInputColor); + SkString _sample464; + if (_outer.inputFP_index >= 0) { + _sample464 = this->invokeChild(_outer.inputFP_index, _input464.c_str(), args); + } else { + _sample464.swap(_input464); + } fragBuilder->codeAppendf( - "@if (%s) {\n half alpha = clamp(%s.w, 0.0, 1.0);\n %s = half4(clamp(%s.xyz, " - "0.0, alpha), alpha);\n} else {\n %s = clamp(%s, 0.0, 1.0);\n}\n", - (_outer.clampToPremul ? "true" : "false"), args.fInputColor, args.fOutputColor, - args.fInputColor, args.fOutputColor, args.fInputColor); + R"SkSL(half4 inputColor = %s; +@if (%s) { + half alpha = clamp(inputColor.w, 0.0, 1.0); + %s = half4(clamp(inputColor.xyz, 0.0, alpha), alpha); +} else { + %s = clamp(inputColor, 0.0, 1.0); +} +)SkSL", + _sample464.c_str(), (_outer.clampToPremul ? "true" : "false"), args.fOutputColor, + args.fOutputColor); } private: @@ -51,13 +64,17 @@ bool GrClampFragmentProcessor::onIsEqual(const GrFragmentProcessor& other) const } GrClampFragmentProcessor::GrClampFragmentProcessor(const GrClampFragmentProcessor& src) : INHERITED(kGrClampFragmentProcessor_ClassID, src.optimizationFlags()) - , clampToPremul(src.clampToPremul) {} + , clampToPremul(src.clampToPremul) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrClampFragmentProcessor::clone() const { return std::unique_ptr(new GrClampFragmentProcessor(*this)); } GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrClampFragmentProcessor); #if GR_TEST_UTILS std::unique_ptr GrClampFragmentProcessor::TestCreate(GrProcessorTestData* d) { - return GrClampFragmentProcessor::Make(d->fRandom->nextBool()); + return GrClampFragmentProcessor::Make(/*inputFP=*/nullptr, d->fRandom->nextBool()); } #endif diff --git a/src/gpu/effects/generated/GrClampFragmentProcessor.h b/src/gpu/effects/generated/GrClampFragmentProcessor.h index 61dc3a03d602e..e6e2d58c07a65 100644 --- a/src/gpu/effects/generated/GrClampFragmentProcessor.h +++ b/src/gpu/effects/generated/GrClampFragmentProcessor.h @@ -10,33 +10,47 @@ **************************************************************************************************/ #ifndef GrClampFragmentProcessor_DEFINED #define GrClampFragmentProcessor_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrClampFragmentProcessor : public GrFragmentProcessor { public: - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f input = this->numChildProcessors() ? ConstantOutputForConstantInput( + this->childProcessor(0), inColor) + : inColor; float clampedAlpha = SkTPin(input.fA, 0.f, 1.f); float clampVal = clampToPremul ? clampedAlpha : 1.f; return {SkTPin(input.fR, 0.f, clampVal), SkTPin(input.fG, 0.f, clampVal), SkTPin(input.fB, 0.f, clampVal), clampedAlpha}; } - static std::unique_ptr Make(bool clampToPremul) { - return std::unique_ptr(new GrClampFragmentProcessor(clampToPremul)); + static std::unique_ptr Make(std::unique_ptr inputFP, + bool clampToPremul) { + return std::unique_ptr( + new GrClampFragmentProcessor(std::move(inputFP), clampToPremul)); } GrClampFragmentProcessor(const GrClampFragmentProcessor& src); std::unique_ptr clone() const override; const char* name() const override { return "ClampFragmentProcessor"; } + int inputFP_index = -1; bool clampToPremul; private: - GrClampFragmentProcessor(bool clampToPremul) + GrClampFragmentProcessor(std::unique_ptr inputFP, bool clampToPremul) : INHERITED(kGrClampFragmentProcessor_ClassID, - (OptimizationFlags)kConstantOutputForConstantInput_OptimizationFlag | - kPreservesOpaqueInput_OptimizationFlag) - , clampToPremul(clampToPremul) {} + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + (kConstantOutputForConstantInput_OptimizationFlag | + kPreservesOpaqueInput_OptimizationFlag)) + , clampToPremul(clampToPremul) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrColorMatrixFragmentProcessor.cpp b/src/gpu/effects/generated/GrColorMatrixFragmentProcessor.cpp index 0abe9fb80c6b9..ad8eca849ca3b 100644 --- a/src/gpu/effects/generated/GrColorMatrixFragmentProcessor.cpp +++ b/src/gpu/effects/generated/GrColorMatrixFragmentProcessor.cpp @@ -38,14 +38,35 @@ class GrGLSLColorMatrixFragmentProcessor : public GrGLSLFragmentProcessor { "m"); vVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "v"); + SkString _input585(args.fInputColor); + SkString _sample585; + if (_outer.inputFP_index >= 0) { + _sample585 = this->invokeChild(_outer.inputFP_index, _input585.c_str(), args); + } else { + _sample585.swap(_input585); + } fragBuilder->codeAppendf( - "half4 inputColor = %s;\n@if (%s) {\n half4 inlineResult530;\n half4 " - "inlineArg530_0 = inputColor;\n {\n inlineResult530 = " - "half4(inlineArg530_0.xyz / max(inlineArg530_0.w, 9.9999997473787516e-05), " - "inlineArg530_0.w);\n }\n inputColor = inlineResult530;\n\n}\n%s = %s * " - "inputColor + %s;\n@if (%s) {\n %s = clamp(%s, 0.0, 1.0);\n} else {\n %s.w = " - "clamp(%s.w, 0.0, 1.0);\n}\n@if (%s) {\n %s.xyz *= %s.w;\n}\n", - args.fInputColor, (_outer.unpremulInput ? "true" : "false"), args.fOutputColor, + R"SkSL(half4 inputColor = %s; +@if (%s) { + half4 inlineResult0; + half4 inlineArg1_0 = inputColor; + { + inlineResult0 = half4(inlineArg1_0.xyz / max(inlineArg1_0.w, 9.9999997473787516e-05), inlineArg1_0.w); + } + inputColor = inlineResult0; + +} +%s = %s * inputColor + %s; +@if (%s) { + %s = clamp(%s, 0.0, 1.0); +} else { + %s.w = clamp(%s.w, 0.0, 1.0); +} +@if (%s) { + %s.xyz *= %s.w; +} +)SkSL", + _sample585.c_str(), (_outer.unpremulInput ? "true" : "false"), args.fOutputColor, args.fUniformHandler->getUniformCStr(mVar), args.fUniformHandler->getUniformCStr(vVar), (_outer.clampRGBOutput ? "true" : "false"), args.fOutputColor, args.fOutputColor, @@ -101,7 +122,11 @@ GrColorMatrixFragmentProcessor::GrColorMatrixFragmentProcessor( , v(src.v) , unpremulInput(src.unpremulInput) , clampRGBOutput(src.clampRGBOutput) - , premulOutput(src.premulOutput) {} + , premulOutput(src.premulOutput) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrColorMatrixFragmentProcessor::clone() const { return std::unique_ptr(new GrColorMatrixFragmentProcessor(*this)); } @@ -116,6 +141,6 @@ std::unique_ptr GrColorMatrixFragmentProcessor::TestCreate( bool unpremul = d->fRandom->nextBool(); bool clampRGB = d->fRandom->nextBool(); bool premul = d->fRandom->nextBool(); - return Make(m, unpremul, clampRGB, premul); + return Make(/*inputFP=*/nullptr, m, unpremul, clampRGB, premul); } #endif diff --git a/src/gpu/effects/generated/GrColorMatrixFragmentProcessor.h b/src/gpu/effects/generated/GrColorMatrixFragmentProcessor.h index e8fa784cabf5c..15d0c88d355dd 100644 --- a/src/gpu/effects/generated/GrColorMatrixFragmentProcessor.h +++ b/src/gpu/effects/generated/GrColorMatrixFragmentProcessor.h @@ -10,14 +10,18 @@ **************************************************************************************************/ #ifndef GrColorMatrixFragmentProcessor_DEFINED #define GrColorMatrixFragmentProcessor_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrColorMatrixFragmentProcessor : public GrFragmentProcessor { public: - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f input = this->numChildProcessors() ? ConstantOutputForConstantInput( + this->childProcessor(0), inColor) + : inColor; SkColor4f color; if (unpremulInput) { color = input.unpremul(); @@ -42,7 +46,8 @@ class GrColorMatrixFragmentProcessor : public GrFragmentProcessor { } } - static std::unique_ptr Make(const float matrix[20], + static std::unique_ptr Make(std::unique_ptr inputFP, + const float matrix[20], bool unpremulInput, bool clampRGBOutput, bool premulOutput) { @@ -51,11 +56,12 @@ class GrColorMatrixFragmentProcessor : public GrFragmentProcessor { matrix[17], matrix[18]); SkV4 v4 = {matrix[4], matrix[9], matrix[14], matrix[19]}; return std::unique_ptr(new GrColorMatrixFragmentProcessor( - m44, v4, unpremulInput, clampRGBOutput, premulOutput)); + std::move(inputFP), m44, v4, unpremulInput, clampRGBOutput, premulOutput)); } GrColorMatrixFragmentProcessor(const GrColorMatrixFragmentProcessor& src); std::unique_ptr clone() const override; const char* name() const override { return "ColorMatrixFragmentProcessor"; } + int inputFP_index = -1; SkM44 m; SkV4 v; bool unpremulInput; @@ -63,15 +69,26 @@ class GrColorMatrixFragmentProcessor : public GrFragmentProcessor { bool premulOutput; private: - GrColorMatrixFragmentProcessor( - SkM44 m, SkV4 v, bool unpremulInput, bool clampRGBOutput, bool premulOutput) + GrColorMatrixFragmentProcessor(std::unique_ptr inputFP, + SkM44 m, + SkV4 v, + bool unpremulInput, + bool clampRGBOutput, + bool premulOutput) : INHERITED(kGrColorMatrixFragmentProcessor_ClassID, - (OptimizationFlags)kConstantOutputForConstantInput_OptimizationFlag) + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + kConstantOutputForConstantInput_OptimizationFlag) , m(m) , v(v) , unpremulInput(unpremulInput) , clampRGBOutput(clampRGBOutput) - , premulOutput(premulOutput) {} + , premulOutput(premulOutput) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrComposeLerpEffect.cpp b/src/gpu/effects/generated/GrComposeLerpEffect.cpp index 78aabacb90dad..3a4a323672d47 100644 --- a/src/gpu/effects/generated/GrComposeLerpEffect.cpp +++ b/src/gpu/effects/generated/GrComposeLerpEffect.cpp @@ -39,11 +39,12 @@ class GrGLSLComposeLerpEffect : public GrGLSLFragmentProcessor { } else { _sample358 = "half4(1)"; } - fragBuilder->codeAppendf("%s = mix(%s ? %s : %s, %s ? %s : %s, half(%s));\n", - args.fOutputColor, _outer.child1_index >= 0 ? "true" : "false", - _sample290.c_str(), args.fInputColor, - _outer.child2_index >= 0 ? "true" : "false", _sample358.c_str(), - args.fInputColor, args.fUniformHandler->getUniformCStr(weightVar)); + fragBuilder->codeAppendf( + R"SkSL(%s = mix(%s ? %s : %s, %s ? %s : %s, half(%s)); +)SkSL", + args.fOutputColor, _outer.child1_index >= 0 ? "true" : "false", _sample290.c_str(), + args.fInputColor, _outer.child2_index >= 0 ? "true" : "false", _sample358.c_str(), + args.fInputColor, args.fUniformHandler->getUniformCStr(weightVar)); } private: @@ -66,23 +67,12 @@ bool GrComposeLerpEffect::onIsEqual(const GrFragmentProcessor& other) const { return true; } GrComposeLerpEffect::GrComposeLerpEffect(const GrComposeLerpEffect& src) - : INHERITED(kGrComposeLerpEffect_ClassID, src.optimizationFlags()) - , child1_index(src.child1_index) - , child2_index(src.child2_index) - , weight(src.weight) { - if (child1_index >= 0) { - auto clone = src.childProcessor(child1_index).clone(); - if (src.childProcessor(child1_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); + : INHERITED(kGrComposeLerpEffect_ClassID, src.optimizationFlags()), weight(src.weight) { + if (src.child1_index >= 0) { + child1_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child1_index)); } - if (child2_index >= 0) { - auto clone = src.childProcessor(child2_index).clone(); - if (src.childProcessor(child2_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); + if (src.child2_index >= 0) { + child2_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child2_index)); } } std::unique_ptr GrComposeLerpEffect::clone() const { diff --git a/src/gpu/effects/generated/GrComposeLerpEffect.h b/src/gpu/effects/generated/GrComposeLerpEffect.h index d1fb0ff42cb32..1a7fdf61f947e 100644 --- a/src/gpu/effects/generated/GrComposeLerpEffect.h +++ b/src/gpu/effects/generated/GrComposeLerpEffect.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrComposeLerpEffect_DEFINED #define GrComposeLerpEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrComposeLerpEffect : public GrFragmentProcessor { public: static std::unique_ptr Make(std::unique_ptr child1, @@ -36,12 +37,10 @@ class GrComposeLerpEffect : public GrFragmentProcessor { float weight) : INHERITED(kGrComposeLerpEffect_ClassID, kNone_OptimizationFlags), weight(weight) { if (child1) { - child1_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(child1)); + child1_index = this->registerChild(std::move(child1), SkSL::SampleUsage::PassThrough()); } if (child2) { - child2_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(child2)); + child2_index = this->registerChild(std::move(child2), SkSL::SampleUsage::PassThrough()); } } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; diff --git a/src/gpu/effects/generated/GrConfigConversionEffect.cpp b/src/gpu/effects/generated/GrConfigConversionEffect.cpp index 9a3e9877d3139..0ec66fd31d04b 100644 --- a/src/gpu/effects/generated/GrConfigConversionEffect.cpp +++ b/src/gpu/effects/generated/GrConfigConversionEffect.cpp @@ -28,10 +28,16 @@ class GrGLSLConfigConversionEffect : public GrGLSLFragmentProcessor { fragBuilder->forceHighPrecision(); fragBuilder->codeAppendf( - "%s = floor(%s * 255.0 + 0.5) / 255.0;\n@switch (%d) {\n case 0:\n " - "%s.xyz = floor((%s.xyz * %s.w) * 255.0 + 0.5) / 255.0;\n break;\n case " - "1:\n %s.xyz = %s.w <= 0.0 ? half3(0.0) : floor((%s.xyz / %s.w) * 255.0 + " - "0.5) / 255.0;\n break;\n}\n", + R"SkSL(%s = floor(%s * 255.0 + 0.5) / 255.0; +@switch (%d) { + case 0: + %s.xyz = floor((%s.xyz * %s.w) * 255.0 + 0.5) / 255.0; + break; + case 1: + %s.xyz = %s.w <= 0.0 ? half3(0.0) : floor((%s.xyz / %s.w) * 255.0 + 0.5) / 255.0; + break; +} +)SkSL", args.fOutputColor, args.fInputColor, (int)_outer.pmConversion, args.fOutputColor, args.fOutputColor, args.fOutputColor, args.fOutputColor, args.fOutputColor, args.fOutputColor, args.fOutputColor); diff --git a/src/gpu/effects/generated/GrConfigConversionEffect.h b/src/gpu/effects/generated/GrConfigConversionEffect.h index 1c8c1b6f511d0..202a7f5a1ab72 100644 --- a/src/gpu/effects/generated/GrConfigConversionEffect.h +++ b/src/gpu/effects/generated/GrConfigConversionEffect.h @@ -10,8 +10,9 @@ **************************************************************************************************/ #ifndef GrConfigConversionEffect_DEFINED #define GrConfigConversionEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" #include "include/gpu/GrContext.h" #include "src/gpu/GrBitmapTextureMaker.h" @@ -19,8 +20,8 @@ #include "src/gpu/GrImageInfo.h" #include "src/gpu/GrRenderTargetContext.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrConfigConversionEffect : public GrFragmentProcessor { public: static bool TestForPreservingPMConversions(GrContext* context) { diff --git a/src/gpu/effects/generated/GrConstColorProcessor.cpp b/src/gpu/effects/generated/GrConstColorProcessor.cpp index 22079b65a2148..50b4b749e2397 100644 --- a/src/gpu/effects/generated/GrConstColorProcessor.cpp +++ b/src/gpu/effects/generated/GrConstColorProcessor.cpp @@ -30,12 +30,49 @@ class GrGLSLConstColorProcessor : public GrGLSLFragmentProcessor { colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "color"); fragBuilder->codeAppendf( - "@switch (%d) {\n case 0:\n %s = %s;\n break;\n case 1:\n " - " %s = %s * %s;\n break;\n case 2:\n %s = %s.w * %s;\n " - "break;\n}\n", - (int)_outer.mode, args.fOutputColor, args.fUniformHandler->getUniformCStr(colorVar), - args.fOutputColor, args.fInputColor, args.fUniformHandler->getUniformCStr(colorVar), - args.fOutputColor, args.fInputColor, + R"SkSL(@switch (%d) { + case 0: + { + %s = %s; + break; + } + case 1: + {)SkSL", + (int)_outer.mode, args.fOutputColor, + args.fUniformHandler->getUniformCStr(colorVar)); + SkString _input1009(args.fInputColor); + SkString _sample1009; + if (_outer.inputFP_index >= 0) { + _sample1009 = this->invokeChild(_outer.inputFP_index, _input1009.c_str(), args); + } else { + _sample1009.swap(_input1009); + } + fragBuilder->codeAppendf( + R"SkSL( + half4 inputColor = %s; + %s = inputColor * %s; + break; + } + case 2: + {)SkSL", + _sample1009.c_str(), args.fOutputColor, + args.fUniformHandler->getUniformCStr(colorVar)); + SkString _input1181(args.fInputColor); + SkString _sample1181; + if (_outer.inputFP_index >= 0) { + _sample1181 = this->invokeChild(_outer.inputFP_index, _input1181.c_str(), args); + } else { + _sample1181.swap(_input1181); + } + fragBuilder->codeAppendf( + R"SkSL( + half inputAlpha = %s.w; + %s = inputAlpha * %s; + break; + } +} +)SkSL", + _sample1181.c_str(), args.fOutputColor, args.fUniformHandler->getUniformCStr(colorVar)); } @@ -71,7 +108,11 @@ bool GrConstColorProcessor::onIsEqual(const GrFragmentProcessor& other) const { GrConstColorProcessor::GrConstColorProcessor(const GrConstColorProcessor& src) : INHERITED(kGrConstColorProcessor_ClassID, src.optimizationFlags()) , color(src.color) - , mode(src.mode) {} + , mode(src.mode) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrConstColorProcessor::clone() const { return std::unique_ptr(new GrConstColorProcessor(*this)); } @@ -98,6 +139,6 @@ std::unique_ptr GrConstColorProcessor::TestCreate(GrProcess break; } InputMode mode = static_cast(d->fRandom->nextULessThan(kInputModeCnt)); - return GrConstColorProcessor::Make(color, mode); + return GrConstColorProcessor::Make(/*inputFP=*/nullptr, color, mode); } #endif diff --git a/src/gpu/effects/generated/GrConstColorProcessor.h b/src/gpu/effects/generated/GrConstColorProcessor.h index 6d84f836cf264..0e3d6ea2a5e2c 100644 --- a/src/gpu/effects/generated/GrConstColorProcessor.h +++ b/src/gpu/effects/generated/GrConstColorProcessor.h @@ -10,53 +10,73 @@ **************************************************************************************************/ #ifndef GrConstColorProcessor_DEFINED #define GrConstColorProcessor_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrConstColorProcessor : public GrFragmentProcessor { public: enum class InputMode { kIgnore = 0, kLast = 2, kModulateA = 2, kModulateRGBA = 1 }; static const int kInputModeCnt = (int)InputMode::kLast + 1; - static OptimizationFlags OptFlags(const SkPMColor4f& color, InputMode mode) { - OptimizationFlags flags = kConstantOutputForConstantInput_OptimizationFlag; - if (mode != InputMode::kIgnore) { - flags |= kCompatibleWithCoverageAsAlpha_OptimizationFlag; - } - if (color.isOpaque()) { - flags |= kPreservesOpaqueInput_OptimizationFlag; - } - return flags; - } - - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { switch (mode) { - case InputMode::kIgnore: + case InputMode::kIgnore: { return color; - case InputMode::kModulateA: + } + case InputMode::kModulateA: { + SkPMColor4f input = this->numChildProcessors() + ? ConstantOutputForConstantInput( + this->childProcessor(inputFP_index), inColor) + : inColor; return color * input.fA; - case InputMode::kModulateRGBA: + } + case InputMode::kModulateRGBA: { + SkPMColor4f input = this->numChildProcessors() + ? ConstantOutputForConstantInput( + this->childProcessor(inputFP_index), inColor) + : inColor; return color * input; + } } - SK_ABORT("Unexpected mode"); + SkUNREACHABLE; } - static std::unique_ptr Make(SkPMColor4f color, InputMode mode) { - return std::unique_ptr(new GrConstColorProcessor(color, mode)); + static std::unique_ptr Make(std::unique_ptr inputFP, + SkPMColor4f color, + InputMode mode) { + return std::unique_ptr( + new GrConstColorProcessor(std::move(inputFP), color, mode)); } GrConstColorProcessor(const GrConstColorProcessor& src); std::unique_ptr clone() const override; const char* name() const override { return "ConstColorProcessor"; } + int inputFP_index = -1; SkPMColor4f color; InputMode mode; private: - GrConstColorProcessor(SkPMColor4f color, InputMode mode) - : INHERITED(kGrConstColorProcessor_ClassID, (OptimizationFlags)OptFlags(color, mode)) + GrConstColorProcessor(std::unique_ptr inputFP, + SkPMColor4f color, + InputMode mode) + : INHERITED(kGrConstColorProcessor_ClassID, + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + (kConstantOutputForConstantInput_OptimizationFlag | + ((mode != InputMode::kIgnore) + ? kCompatibleWithCoverageAsAlpha_OptimizationFlag + : kNone_OptimizationFlags) | + ((color.isOpaque()) ? kPreservesOpaqueInput_OptimizationFlag + : kNone_OptimizationFlags))) , color(color) - , mode(mode) {} + , mode(mode) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrDeviceSpaceEffect.cpp b/src/gpu/effects/generated/GrDeviceSpaceEffect.cpp index be9e92c6ecf62..915479cf70b78 100644 --- a/src/gpu/effects/generated/GrDeviceSpaceEffect.cpp +++ b/src/gpu/effects/generated/GrDeviceSpaceEffect.cpp @@ -23,12 +23,15 @@ class GrGLSLDeviceSpaceEffect : public GrGLSLFragmentProcessor { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrDeviceSpaceEffect& _outer = args.fFp.cast(); (void)_outer; - SkString _input204 = SkStringPrintf("%s", args.fInputColor); - SkString _sample204; - SkString _coords204("sk_FragCoord.xy"); - _sample204 = - this->invokeChild(_outer.fp_index, _input204.c_str(), args, _coords204.c_str()); - fragBuilder->codeAppendf("%s = %s;\n", args.fOutputColor, _sample204.c_str()); + SkString _input203(args.fInputColor); + SkString _coords203("sk_FragCoord.xy"); + SkString _sample203; + _sample203 = + this->invokeChild(_outer.fp_index, _input203.c_str(), args, _coords203.c_str()); + fragBuilder->codeAppendf( + R"SkSL(%s = %s; +)SkSL", + args.fOutputColor, _sample203.c_str()); } private: @@ -46,14 +49,8 @@ bool GrDeviceSpaceEffect::onIsEqual(const GrFragmentProcessor& other) const { return true; } GrDeviceSpaceEffect::GrDeviceSpaceEffect(const GrDeviceSpaceEffect& src) - : INHERITED(kGrDeviceSpaceEffect_ClassID, src.optimizationFlags()), fp_index(src.fp_index) { - { - auto clone = src.childProcessor(fp_index).clone(); - if (src.childProcessor(fp_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); - } + : INHERITED(kGrDeviceSpaceEffect_ClassID, src.optimizationFlags()) { + { fp_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.fp_index)); } } std::unique_ptr GrDeviceSpaceEffect::clone() const { return std::unique_ptr(new GrDeviceSpaceEffect(*this)); @@ -61,12 +58,6 @@ std::unique_ptr GrDeviceSpaceEffect::clone() const { GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrDeviceSpaceEffect); #if GR_TEST_UTILS std::unique_ptr GrDeviceSpaceEffect::TestCreate(GrProcessorTestData* d) { - std::unique_ptr fp; - // We have a restriction that explicit coords only work for FPs with zero or one - // coord transform. - do { - fp = GrProcessorUnitTest::MakeChildFP(d); - } while (fp->numCoordTransforms() > 1); - return GrDeviceSpaceEffect::Make(std::move(fp)); + return GrDeviceSpaceEffect::Make(GrProcessorUnitTest::MakeChildFP(d)); } #endif diff --git a/src/gpu/effects/generated/GrDeviceSpaceEffect.h b/src/gpu/effects/generated/GrDeviceSpaceEffect.h index e08d29d892d56..bd40d383f2a8f 100644 --- a/src/gpu/effects/generated/GrDeviceSpaceEffect.h +++ b/src/gpu/effects/generated/GrDeviceSpaceEffect.h @@ -10,13 +10,18 @@ **************************************************************************************************/ #ifndef GrDeviceSpaceEffect_DEFINED #define GrDeviceSpaceEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrDeviceSpaceEffect : public GrFragmentProcessor { public: + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + return ConstantOutputForConstantInput(this->childProcessor(0), inColor); + } + static std::unique_ptr Make(std::unique_ptr fp) { return std::unique_ptr(new GrDeviceSpaceEffect(std::move(fp))); } @@ -27,11 +32,10 @@ class GrDeviceSpaceEffect : public GrFragmentProcessor { private: GrDeviceSpaceEffect(std::unique_ptr fp) - : INHERITED(kGrDeviceSpaceEffect_ClassID, kNone_OptimizationFlags) { + : INHERITED(kGrDeviceSpaceEffect_ClassID, + (OptimizationFlags)ProcessorOptimizationFlags(fp.get())) { SkASSERT(fp); - fp_index = this->numChildProcessors(); - fp->setSampledWithExplicitCoords(); - this->registerChildProcessor(std::move(fp)); + fp_index = this->registerChild(std::move(fp), SkSL::SampleUsage::Explicit()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; diff --git a/src/gpu/effects/generated/GrEllipseEffect.cpp b/src/gpu/effects/generated/GrEllipseEffect.cpp index fa34903258915..0a75b96dd8ede 100644 --- a/src/gpu/effects/generated/GrEllipseEffect.cpp +++ b/src/gpu/effects/generated/GrEllipseEffect.cpp @@ -38,26 +38,61 @@ class GrGLSLEllipseEffect : public GrGLSLFragmentProcessor { kFloat2_GrSLType, "scale"); } fragBuilder->codeAppendf( - "float2 prevCenter;\nfloat2 prevRadii = float2(%f, %f);\nbool medPrecision = " - "%s;\nfloat2 d = sk_FragCoord.xy - %s.xy;\n@if (medPrecision) {\n d *= " - "%s.y;\n}\nfloat2 Z = d * %s.zw;\nfloat implicit = dot(Z, d) - 1.0;\nfloat " - "grad_dot = 4.0 * dot(Z, Z);\n@if (medPrecision) {\n grad_dot = max(grad_dot, " - "6.1036000261083245e-05);\n} else {\n grad_dot = max(grad_dot, " - "1.1754999560161448e-38);\n}\nfloat approx_dist = implicit * " - "inversesqrt(grad_dot);\n@if (medPrecision) {\n approx_dist *= %s.x;\n}\nhalf " - "alph", + R"SkSL(float2 prevCenter; +float2 prevRadii = float2(%f, %f); +bool medPrecision = %s; +float2 d = sk_FragCoord.xy - %s.xy; +@if (medPrecision) { + d *= %s.y; +} +float2 Z = d * %s.zw; +float implicit = dot(Z, d) - 1.0; +float grad_dot = 4.0 * dot(Z, Z); +@if (medPrecision) { + grad_dot = max(grad_dot, 6.1036000261083245e-05); +} else { + grad_dot = max(grad_dot, 1.1754999560161448e-38); +} +float approx_dist = implicit * inversesqrt(grad_dot); +@if (medPrecision) { + approx_dist *= %s.x; +} +half alpha; +@switch (%d) { + case 0: + alpha = approx_dist > 0.0 ? 0.0 : 1.0; + break; + case 1: + alpha = clamp(0.5 - half(approx_dist), 0.0, 1.0); + break; + case 2: + alpha = approx_dist > 0.0 ? 1.0 : 0.0; + break; + case 3: + alpha = clamp(0.5 + half(approx_dist), 0.0, 1.0); + break; + default: + discard; +})SkSL", prevRadii.fX, prevRadii.fY, (medPrecision ? "true" : "false"), args.fUniformHandler->getUniformCStr(ellipseVar), scaleVar.isValid() ? args.fUniformHandler->getUniformCStr(scaleVar) : "float2(0)", args.fUniformHandler->getUniformCStr(ellipseVar), - scaleVar.isValid() ? args.fUniformHandler->getUniformCStr(scaleVar) : "float2(0)"); + scaleVar.isValid() ? args.fUniformHandler->getUniformCStr(scaleVar) : "float2(0)", + (int)_outer.edgeType); + SkString _input4481(args.fInputColor); + SkString _sample4481; + if (_outer.inputFP_index >= 0) { + _sample4481 = this->invokeChild(_outer.inputFP_index, _input4481.c_str(), args); + } else { + _sample4481.swap(_input4481); + } fragBuilder->codeAppendf( - "a;\n@switch (%d) {\n case 0:\n alpha = approx_dist > 0.0 ? 0.0 : 1.0;\n " - " break;\n case 1:\n alpha = clamp(0.5 - half(approx_dist), 0.0, " - "1.0);\n break;\n case 2:\n alpha = approx_dist > 0.0 ? 1.0 : " - "0.0;\n break;\n case 3:\n alpha = clamp(0.5 + half(approx_dist), " - "0.0, 1.0);\n break;\n default:\n discard;\n}\n%s = %s * alpha;\n", - (int)_outer.edgeType, args.fOutputColor, args.fInputColor); + R"SkSL( +half4 inputColor = %s; +%s = inputColor * alpha; +)SkSL", + _sample4481.c_str(), args.fOutputColor); } private: @@ -125,7 +160,11 @@ GrEllipseEffect::GrEllipseEffect(const GrEllipseEffect& src) : INHERITED(kGrEllipseEffect_ClassID, src.optimizationFlags()) , edgeType(src.edgeType) , center(src.center) - , radii(src.radii) {} + , radii(src.radii) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrEllipseEffect::clone() const { return std::unique_ptr(new GrEllipseEffect(*this)); } @@ -137,11 +176,14 @@ std::unique_ptr GrEllipseEffect::TestCreate(GrProcessorTest center.fY = testData->fRandom->nextRangeScalar(0.f, 1000.f); SkScalar rx = testData->fRandom->nextRangeF(0.f, 1000.f); SkScalar ry = testData->fRandom->nextRangeF(0.f, 1000.f); - GrClipEdgeType et; + bool success; + std::unique_ptr fp; do { - et = (GrClipEdgeType)testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt); - } while (GrClipEdgeType::kHairlineAA == et); - return GrEllipseEffect::Make(et, center, SkPoint::Make(rx, ry), - *testData->caps()->shaderCaps()); + GrClipEdgeType et = (GrClipEdgeType)testData->fRandom->nextULessThan(kGrClipEdgeTypeCnt); + std::tie(success, fp) = + GrEllipseEffect::Make(/*inputFP=*/nullptr, et, center, SkPoint::Make(rx, ry), + *testData->caps()->shaderCaps()); + } while (!success); + return fp; } #endif diff --git a/src/gpu/effects/generated/GrEllipseEffect.h b/src/gpu/effects/generated/GrEllipseEffect.h index fb746b36c883d..87266512c3348 100644 --- a/src/gpu/effects/generated/GrEllipseEffect.h +++ b/src/gpu/effects/generated/GrEllipseEffect.h @@ -10,47 +10,61 @@ **************************************************************************************************/ #ifndef GrEllipseEffect_DEFINED #define GrEllipseEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" #include "src/gpu/GrShaderCaps.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrEllipseEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(GrClipEdgeType edgeType, - SkPoint center, - SkPoint radii, - const GrShaderCaps& caps) { + static GrFPResult Make(std::unique_ptr inputFP, + GrClipEdgeType edgeType, + SkPoint center, + SkPoint radii, + const GrShaderCaps& caps) { // Small radii produce bad results on devices without full float. if (!caps.floatIs32Bits() && (radii.fX < 0.5f || radii.fY < 0.5f)) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } // Very narrow ellipses produce bad results on devices without full float if (!caps.floatIs32Bits() && (radii.fX > 255 * radii.fY || radii.fY > 255 * radii.fX)) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } // Very large ellipses produce bad results on devices without full float if (!caps.floatIs32Bits() && (radii.fX > 16384 || radii.fY > 16384)) { - return nullptr; + return GrFPFailure(std::move(inputFP)); } - return std::unique_ptr(new GrEllipseEffect(edgeType, center, radii)); + return GrFPSuccess(std::unique_ptr( + new GrEllipseEffect(std::move(inputFP), edgeType, center, radii))); } GrEllipseEffect(const GrEllipseEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "EllipseEffect"; } + int inputFP_index = -1; GrClipEdgeType edgeType; SkPoint center; SkPoint radii; private: - GrEllipseEffect(GrClipEdgeType edgeType, SkPoint center, SkPoint radii) + GrEllipseEffect(std::unique_ptr inputFP, + GrClipEdgeType edgeType, + SkPoint center, + SkPoint radii) : INHERITED(kGrEllipseEffect_ClassID, - (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag) , edgeType(edgeType) , center(center) - , radii(radii) {} + , radii(radii) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrHSLToRGBFilterEffect.cpp b/src/gpu/effects/generated/GrHSLToRGBFilterEffect.cpp index 11effd21a3e31..91796e1f0d788 100644 --- a/src/gpu/effects/generated/GrHSLToRGBFilterEffect.cpp +++ b/src/gpu/effects/generated/GrHSLToRGBFilterEffect.cpp @@ -23,13 +23,24 @@ class GrGLSLHSLToRGBFilterEffect : public GrGLSLFragmentProcessor { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrHSLToRGBFilterEffect& _outer = args.fFp.cast(); (void)_outer; + SkString _input523(args.fInputColor); + SkString _sample523; + if (_outer.inputFP_index >= 0) { + _sample523 = this->invokeChild(_outer.inputFP_index, _input523.c_str(), args); + } else { + _sample523.swap(_input523); + } fragBuilder->codeAppendf( - "half3 hsl = %s.xyz;\nhalf C = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y;\nhalf3 p = " - "hsl.xxx + half3(0.0, 0.66666666666666663, 0.33333333333333331);\nhalf3 q = " - "clamp(abs(fract(p) * 6.0 - 3.0) - 1.0, 0.0, 1.0);\nhalf3 rgb = (q - 0.5) * C + " - "hsl.z;\n%s = clamp(half4(rgb, %s.w), 0.0, 1.0);\n%s.xyz *= %s.w;\n", - args.fInputColor, args.fOutputColor, args.fInputColor, args.fOutputColor, - args.fOutputColor); + R"SkSL(half4 inputColor = %s; +half3 hsl = inputColor.xyz; +half C = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y; +half3 p = hsl.xxx + half3(0.0, 0.66666666666666663, 0.33333333333333331); +half3 q = clamp(abs(fract(p) * 6.0 - 3.0) - 1.0, 0.0, 1.0); +half3 rgb = (q - 0.5) * C + hsl.z; +%s = clamp(half4(rgb, inputColor.w), 0.0, 1.0); +%s.xyz *= %s.w; +)SkSL", + _sample523.c_str(), args.fOutputColor, args.fOutputColor, args.fOutputColor); } private: @@ -47,7 +58,11 @@ bool GrHSLToRGBFilterEffect::onIsEqual(const GrFragmentProcessor& other) const { return true; } GrHSLToRGBFilterEffect::GrHSLToRGBFilterEffect(const GrHSLToRGBFilterEffect& src) - : INHERITED(kGrHSLToRGBFilterEffect_ClassID, src.optimizationFlags()) {} + : INHERITED(kGrHSLToRGBFilterEffect_ClassID, src.optimizationFlags()) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrHSLToRGBFilterEffect::clone() const { return std::unique_ptr(new GrHSLToRGBFilterEffect(*this)); } diff --git a/src/gpu/effects/generated/GrHSLToRGBFilterEffect.h b/src/gpu/effects/generated/GrHSLToRGBFilterEffect.h index a86c4af046499..f346a4d5e6664 100644 --- a/src/gpu/effects/generated/GrHSLToRGBFilterEffect.h +++ b/src/gpu/effects/generated/GrHSLToRGBFilterEffect.h @@ -10,17 +10,21 @@ **************************************************************************************************/ #ifndef GrHSLToRGBFilterEffect_DEFINED #define GrHSLToRGBFilterEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrHSLToRGBFilterEffect : public GrFragmentProcessor { public: #include "include/private/SkColorData.h" #include "include/private/SkNx.h" - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& c) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f c = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(0), inColor) + : inColor; const auto H = c[0], S = c[1], L = c[2], C = (1 - std::abs(2 * L - 1)) * S; const auto p = H + Sk4f(0, 2 / 3.f, 1 / 3.f, 0), @@ -30,18 +34,26 @@ class GrHSLToRGBFilterEffect : public GrFragmentProcessor { return SkColor4f{rgba[0], rgba[1], rgba[2], rgba[3]}.premul(); } - static std::unique_ptr Make() { - return std::unique_ptr(new GrHSLToRGBFilterEffect()); + static std::unique_ptr Make(std::unique_ptr inputFP) { + return std::unique_ptr(new GrHSLToRGBFilterEffect(std::move(inputFP))); } GrHSLToRGBFilterEffect(const GrHSLToRGBFilterEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "HSLToRGBFilterEffect"; } + int inputFP_index = -1; private: - GrHSLToRGBFilterEffect() + GrHSLToRGBFilterEffect(std::unique_ptr inputFP) : INHERITED(kGrHSLToRGBFilterEffect_ClassID, - (OptimizationFlags)(kConstantOutputForConstantInput_OptimizationFlag | - kPreservesOpaqueInput_OptimizationFlag)) {} + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + (kConstantOutputForConstantInput_OptimizationFlag | + kPreservesOpaqueInput_OptimizationFlag)) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrLumaColorFilterEffect.cpp b/src/gpu/effects/generated/GrLumaColorFilterEffect.cpp index c85bc65069b5e..ec9045b93241b 100644 --- a/src/gpu/effects/generated/GrLumaColorFilterEffect.cpp +++ b/src/gpu/effects/generated/GrLumaColorFilterEffect.cpp @@ -23,10 +23,20 @@ class GrGLSLLumaColorFilterEffect : public GrGLSLFragmentProcessor { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrLumaColorFilterEffect& _outer = args.fFp.cast(); (void)_outer; + SkString _input953(args.fInputColor); + SkString _sample953; + if (_outer.inputFP_index >= 0) { + _sample953 = this->invokeChild(_outer.inputFP_index, _input953.c_str(), args); + } else { + _sample953.swap(_input953); + } fragBuilder->codeAppendf( - "\nhalf luma = clamp(dot(half3(0.2125999927520752, 0.71520000696182251, " - "0.072200000286102295), %s.xyz), 0.0, 1.0);\n%s = half4(0.0, 0.0, 0.0, luma);\n", - args.fInputColor, args.fOutputColor); + R"SkSL(half4 inputColor = %s; + +half luma = clamp(dot(half3(0.2125999927520752, 0.71520000696182251, 0.072200000286102295), inputColor.xyz), 0.0, 1.0); +%s = half4(0.0, 0.0, 0.0, luma); +)SkSL", + _sample953.c_str(), args.fOutputColor); } private: @@ -44,7 +54,11 @@ bool GrLumaColorFilterEffect::onIsEqual(const GrFragmentProcessor& other) const return true; } GrLumaColorFilterEffect::GrLumaColorFilterEffect(const GrLumaColorFilterEffect& src) - : INHERITED(kGrLumaColorFilterEffect_ClassID, src.optimizationFlags()) {} + : INHERITED(kGrLumaColorFilterEffect_ClassID, src.optimizationFlags()) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrLumaColorFilterEffect::clone() const { return std::unique_ptr(new GrLumaColorFilterEffect(*this)); } diff --git a/src/gpu/effects/generated/GrLumaColorFilterEffect.h b/src/gpu/effects/generated/GrLumaColorFilterEffect.h index 3ee5c06aede8f..301df9c1f0048 100644 --- a/src/gpu/effects/generated/GrLumaColorFilterEffect.h +++ b/src/gpu/effects/generated/GrLumaColorFilterEffect.h @@ -10,31 +10,45 @@ **************************************************************************************************/ #ifndef GrLumaColorFilterEffect_DEFINED #define GrLumaColorFilterEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrLumaColorFilterEffect : public GrFragmentProcessor { public: #include "include/private/SkColorData.h" - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f input = this->numChildProcessors() + ? ConstantOutputForConstantInput( + this->childProcessor(inputFP_index), inColor) + : inColor; float luma = SK_ITU_BT709_LUM_COEFF_R * input.fR + SK_ITU_BT709_LUM_COEFF_G * input.fG + SK_ITU_BT709_LUM_COEFF_B * input.fB; return {0, 0, 0, SkTPin(luma, 0.0f, 1.0f)}; } - static std::unique_ptr Make() { - return std::unique_ptr(new GrLumaColorFilterEffect()); + static std::unique_ptr Make(std::unique_ptr inputFP) { + return std::unique_ptr( + new GrLumaColorFilterEffect(std::move(inputFP))); } GrLumaColorFilterEffect(const GrLumaColorFilterEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "LumaColorFilterEffect"; } + int inputFP_index = -1; private: - GrLumaColorFilterEffect() + GrLumaColorFilterEffect(std::unique_ptr inputFP) : INHERITED(kGrLumaColorFilterEffect_ClassID, - (OptimizationFlags)kConstantOutputForConstantInput_OptimizationFlag) {} + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + kConstantOutputForConstantInput_OptimizationFlag) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrMagnifierEffect.cpp b/src/gpu/effects/generated/GrMagnifierEffect.cpp index 0746fbf6c60a9..118e1b679935c 100644 --- a/src/gpu/effects/generated/GrMagnifierEffect.cpp +++ b/src/gpu/effects/generated/GrMagnifierEffect.cpp @@ -35,44 +35,48 @@ class GrGLSLMagnifierEffect : public GrGLSLFragmentProcessor { (void)xInvInset; auto yInvInset = _outer.yInvInset; (void)yInvInset; - boundsUniformVar = args.fUniformHandler->addUniform( - &_outer, kFragment_GrShaderFlag, kFloat4_GrSLType, "boundsUniform"); - xInvZoomVar = args.fUniformHandler->addUniform( - &_outer, kFragment_GrShaderFlag, kFloat_GrSLType, "xInvZoom"); - yInvZoomVar = args.fUniformHandler->addUniform( - &_outer, kFragment_GrShaderFlag, kFloat_GrSLType, "yInvZoom"); - xInvInsetVar = args.fUniformHandler->addUniform( - &_outer, kFragment_GrShaderFlag, kFloat_GrSLType, "xInvInset"); - yInvInsetVar = args.fUniformHandler->addUniform( - &_outer, kFragment_GrShaderFlag, kFloat_GrSLType, "yInvInset"); - offsetVar = args.fUniformHandler->addUniform( - &_outer, kFragment_GrShaderFlag, kHalf2_GrSLType, "offset"); - SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D( - args.fTransformedCoords[0].fVaryingPoint, _outer.sampleMatrix()); + boundsUniformVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, + kFloat4_GrSLType, "boundsUniform"); + xInvZoomVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, + kFloat_GrSLType, "xInvZoom"); + yInvZoomVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, + kFloat_GrSLType, "yInvZoom"); + xInvInsetVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, + kFloat_GrSLType, "xInvInset"); + yInvInsetVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, + kFloat_GrSLType, "yInvInset"); + offsetVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, + kHalf2_GrSLType, "offset"); fragBuilder->codeAppendf( - "float2 coord = %s;\nfloat2 zoom_coord = float2(%s) + coord * float2(%s, " - "%s);\nfloat2 delta = (coord - %s.xy) * %s.zw;\ndelta = min(delta, " - "float2(half2(1.0, 1.0)) - delta);\ndelta *= float2(%s, %s);\nfloat weight = " - "0.0;\nif (delta.x < 2.0 && delta.y < 2.0) {\n delta = float2(half2(2.0, 2.0)) " - "- delta;\n float dist = length(delta);\n dist = max(2.0 - dist, 0.0);\n " - "weight = min(dist * dist, 1.0);\n} else {\n float2 delta_squared = delta * " - "delta;\n weight = min(min(delta_squared.x, delta_square", - sk_TransformedCoords2D_0.c_str(), - args.fUniformHandler->getUniformCStr(offsetVar), + R"SkSL(float2 zoom_coord = float2(%s) + %s * float2(%s, %s); +float2 delta = (%s - %s.xy) * %s.zw; +delta = min(delta, float2(half2(1.0, 1.0)) - delta); +delta *= float2(%s, %s); +float weight = 0.0; +if (delta.x < 2.0 && delta.y < 2.0) { + delta = float2(half2(2.0, 2.0)) - delta; + float dist = length(delta); + dist = max(2.0 - dist, 0.0); + weight = min(dist * dist, 1.0); +} else { + float2 delta_squared = delta * delta; + weight = min(min(delta_squared.x, delta_squared.y), 1.0); +})SkSL", + args.fUniformHandler->getUniformCStr(offsetVar), args.fSampleCoord, args.fUniformHandler->getUniformCStr(xInvZoomVar), - args.fUniformHandler->getUniformCStr(yInvZoomVar), + args.fUniformHandler->getUniformCStr(yInvZoomVar), args.fSampleCoord, args.fUniformHandler->getUniformCStr(boundsUniformVar), args.fUniformHandler->getUniformCStr(boundsUniformVar), args.fUniformHandler->getUniformCStr(xInvInsetVar), args.fUniformHandler->getUniformCStr(yInvInsetVar)); + SkString _coords1043 = SkStringPrintf("mix(%s, zoom_coord, weight)", args.fSampleCoord); + SkString _sample1043; + _sample1043 = this->invokeChild(_outer.src_index, args, _coords1043.c_str()); fragBuilder->codeAppendf( - "d.y), 1.0);\n}\n%s = sample(%s, mix(coord, zoom_coord, weight)).%s;\n", - args.fOutputColor, - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str()); + R"SkSL( +%s = %s; +)SkSL", + args.fOutputColor, _sample1043.c_str()); } private: @@ -85,9 +89,6 @@ class GrGLSLMagnifierEffect : public GrGLSLFragmentProcessor { pdman.set1f(xInvInsetVar, (_outer.xInvInset)); pdman.set1f(yInvInsetVar, (_outer.yInvInset)); } - const GrSurfaceProxyView& srcView = _outer.textureSampler(0).view(); - GrTexture& src = *srcView.proxy()->peekTexture(); - (void)src; auto bounds = _outer.bounds; (void)bounds; UniformHandle& boundsUniform = boundsUniformVar; @@ -105,32 +106,9 @@ class GrGLSLMagnifierEffect : public GrGLSLFragmentProcessor { UniformHandle& offset = offsetVar; (void)offset; - SkScalar invW = 1.0f / src.width(); - SkScalar invH = 1.0f / src.height(); - - { - SkScalar y = srcRect.y() * invH; - if (srcView.origin() != kTopLeft_GrSurfaceOrigin) { - y = 1.0f - (srcRect.height() / bounds.height()) - y; - } - - pdman.set2f(offset, srcRect.x() * invW, y); - } - - { - SkScalar y = bounds.y() * invH; - SkScalar hSign = 1.f; - if (srcView.origin() != kTopLeft_GrSurfaceOrigin) { - y = 1.0f - bounds.y() * invH; - hSign = -1.f; - } - - pdman.set4f(boundsUniform, - bounds.x() * invW, - y, - SkIntToScalar(src.width()) / bounds.width(), - hSign * SkIntToScalar(src.height()) / bounds.height()); - } + pdman.set2f(offset, srcRect.x(), srcRect.y()); + pdman.set4f(boundsUniform, bounds.x(), bounds.y(), 1.f / bounds.width(), + 1.f / bounds.height()); } UniformHandle boundsUniformVar; UniformHandle offsetVar; @@ -147,7 +125,6 @@ void GrMagnifierEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps, bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& other) const { const GrMagnifierEffect& that = other.cast(); (void)that; - if (src != that.src) return false; if (bounds != that.bounds) return false; if (srcRect != that.srcRect) return false; if (xInvZoom != that.xInvZoom) return false; @@ -158,27 +135,21 @@ bool GrMagnifierEffect::onIsEqual(const GrFragmentProcessor& other) const { } GrMagnifierEffect::GrMagnifierEffect(const GrMagnifierEffect& src) : INHERITED(kGrMagnifierEffect_ClassID, src.optimizationFlags()) - , srcCoordTransform(src.srcCoordTransform) - , src(src.src) , bounds(src.bounds) , srcRect(src.srcRect) , xInvZoom(src.xInvZoom) , yInvZoom(src.yInvZoom) , xInvInset(src.xInvInset) , yInvInset(src.yInvInset) { - this->setTextureSamplerCnt(1); - this->addCoordTransform(&srcCoordTransform); + { src_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.src_index)); } + this->setUsesSampleCoordsDirectly(); } std::unique_ptr GrMagnifierEffect::clone() const { return std::unique_ptr(new GrMagnifierEffect(*this)); } -const GrFragmentProcessor::TextureSampler& GrMagnifierEffect::onTextureSampler(int index) const { - return IthTextureSampler(index, src); -} GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrMagnifierEffect); #if GR_TEST_UTILS std::unique_ptr GrMagnifierEffect::TestCreate(GrProcessorTestData* d) { - auto[view, ct, at] = d->randomView(); const int kMaxWidth = 200; const int kMaxHeight = 200; const SkScalar kMaxInset = 20.0f; @@ -189,7 +160,8 @@ std::unique_ptr GrMagnifierEffect::TestCreate(GrProcessorTe SkIRect bounds = SkIRect::MakeWH(SkIntToScalar(kMaxWidth), SkIntToScalar(kMaxHeight)); SkRect srcRect = SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height)); - auto effect = GrMagnifierEffect::Make(std::move(view), + auto src = GrProcessorUnitTest::MakeChildFP(d); + auto effect = GrMagnifierEffect::Make(std::move(src), bounds, srcRect, srcRect.width() / bounds.width(), diff --git a/src/gpu/effects/generated/GrMagnifierEffect.h b/src/gpu/effects/generated/GrMagnifierEffect.h index ab930d9cdb36b..86f6ecc5a7705 100644 --- a/src/gpu/effects/generated/GrMagnifierEffect.h +++ b/src/gpu/effects/generated/GrMagnifierEffect.h @@ -10,14 +10,15 @@ **************************************************************************************************/ #ifndef GrMagnifierEffect_DEFINED #define GrMagnifierEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrMagnifierEffect : public GrFragmentProcessor { public: - static std::unique_ptr Make(GrSurfaceProxyView src, + static std::unique_ptr Make(std::unique_ptr src, SkIRect bounds, SkRect srcRect, float xInvZoom, @@ -30,8 +31,7 @@ class GrMagnifierEffect : public GrFragmentProcessor { GrMagnifierEffect(const GrMagnifierEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "MagnifierEffect"; } - GrCoordTransform srcCoordTransform; - TextureSampler src; + int src_index = -1; SkIRect bounds; SkRect srcRect; float xInvZoom; @@ -40,7 +40,7 @@ class GrMagnifierEffect : public GrFragmentProcessor { float yInvInset; private: - GrMagnifierEffect(GrSurfaceProxyView src, + GrMagnifierEffect(std::unique_ptr src, SkIRect bounds, SkRect srcRect, float xInvZoom, @@ -48,21 +48,19 @@ class GrMagnifierEffect : public GrFragmentProcessor { float xInvInset, float yInvInset) : INHERITED(kGrMagnifierEffect_ClassID, kNone_OptimizationFlags) - , srcCoordTransform(SkMatrix::I(), src.proxy(), src.origin()) - , src(std::move(src)) , bounds(bounds) , srcRect(srcRect) , xInvZoom(xInvZoom) , yInvZoom(yInvZoom) , xInvInset(xInvInset) , yInvInset(yInvInset) { - this->setTextureSamplerCnt(1); - this->addCoordTransform(&srcCoordTransform); + this->setUsesSampleCoordsDirectly(); + SkASSERT(src); + src_index = this->registerChild(std::move(src), SkSL::SampleUsage::Explicit()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; - const TextureSampler& onTextureSampler(int) const override; GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; }; diff --git a/src/gpu/effects/generated/GrMixerEffect.cpp b/src/gpu/effects/generated/GrMixerEffect.cpp index fea85f413a598..20c43f2331805 100644 --- a/src/gpu/effects/generated/GrMixerEffect.cpp +++ b/src/gpu/effects/generated/GrMixerEffect.cpp @@ -27,21 +27,21 @@ class GrGLSLMixerEffect : public GrGLSLFragmentProcessor { (void)weight; weightVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf_GrSLType, "weight"); - SkString _input1278 = SkStringPrintf("%s", args.fInputColor); - SkString _sample1278; - _sample1278 = this->invokeChild(_outer.fp0_index, _input1278.c_str(), args); - fragBuilder->codeAppendf("half4 in0 = %s;", _sample1278.c_str()); - SkString _input1335 = SkStringPrintf("%s", args.fInputColor); - SkString _sample1335; + SkString _input1284(args.fInputColor); + SkString _sample1284; + _sample1284 = this->invokeChild(_outer.fp0_index, _input1284.c_str(), args); + SkString _input1309(args.fInputColor); + SkString _sample1309; if (_outer.fp1_index >= 0) { - _sample1335 = this->invokeChild(_outer.fp1_index, _input1335.c_str(), args); + _sample1309 = this->invokeChild(_outer.fp1_index, _input1309.c_str(), args); } else { - _sample1335 = "half4(1)"; + _sample1309.swap(_input1309); } - fragBuilder->codeAppendf("\nhalf4 in1 = %s ? %s : %s;\n%s = mix(in0, in1, %s);\n", - _outer.fp1_index >= 0 ? "true" : "false", _sample1335.c_str(), - args.fInputColor, args.fOutputColor, - args.fUniformHandler->getUniformCStr(weightVar)); + fragBuilder->codeAppendf( + R"SkSL(%s = mix(%s, %s, %s); +)SkSL", + args.fOutputColor, _sample1284.c_str(), _sample1309.c_str(), + args.fUniformHandler->getUniformCStr(weightVar)); } private: @@ -64,23 +64,10 @@ bool GrMixerEffect::onIsEqual(const GrFragmentProcessor& other) const { return true; } GrMixerEffect::GrMixerEffect(const GrMixerEffect& src) - : INHERITED(kGrMixerEffect_ClassID, src.optimizationFlags()) - , fp0_index(src.fp0_index) - , fp1_index(src.fp1_index) - , weight(src.weight) { - { - auto clone = src.childProcessor(fp0_index).clone(); - if (src.childProcessor(fp0_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); - } - if (fp1_index >= 0) { - auto clone = src.childProcessor(fp1_index).clone(); - if (src.childProcessor(fp1_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); + : INHERITED(kGrMixerEffect_ClassID, src.optimizationFlags()), weight(src.weight) { + { fp0_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.fp0_index)); } + if (src.fp1_index >= 0) { + fp1_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.fp1_index)); } } std::unique_ptr GrMixerEffect::clone() const { diff --git a/src/gpu/effects/generated/GrMixerEffect.h b/src/gpu/effects/generated/GrMixerEffect.h index a9e3717f88532..24c4d34c7f759 100644 --- a/src/gpu/effects/generated/GrMixerEffect.h +++ b/src/gpu/effects/generated/GrMixerEffect.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrMixerEffect_DEFINED #define GrMixerEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrMixerEffect : public GrFragmentProcessor { public: static OptimizationFlags OptFlags(const std::unique_ptr& fp0, @@ -54,11 +55,9 @@ class GrMixerEffect : public GrFragmentProcessor { : INHERITED(kGrMixerEffect_ClassID, (OptimizationFlags)OptFlags(fp0, fp1)) , weight(weight) { SkASSERT(fp0); - fp0_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(fp0)); + fp0_index = this->registerChild(std::move(fp0), SkSL::SampleUsage::PassThrough()); if (fp1) { - fp1_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(fp1)); + fp1_index = this->registerChild(std::move(fp1), SkSL::SampleUsage::PassThrough()); } } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; diff --git a/src/gpu/effects/generated/GrOverrideInputFragmentProcessor.cpp b/src/gpu/effects/generated/GrOverrideInputFragmentProcessor.cpp index 0e34b5300037a..deae796c1b146 100644 --- a/src/gpu/effects/generated/GrOverrideInputFragmentProcessor.cpp +++ b/src/gpu/effects/generated/GrOverrideInputFragmentProcessor.cpp @@ -35,8 +35,12 @@ class GrGLSLOverrideInputFragmentProcessor : public GrGLSLFragmentProcessor { kHalf4_GrSLType, "uniformColor"); } fragBuilder->codeAppendf( - "half4 constColor;\n@if (%s) {\n constColor = %s;\n} else {\n constColor = " - "half4(%f, %f, %f, %f);\n}", + R"SkSL(half4 constColor; +@if (%s) { + constColor = %s; +} else { + constColor = half4(%f, %f, %f, %f); +})SkSL", (_outer.useUniform ? "true" : "false"), uniformColorVar.isValid() ? args.fUniformHandler->getUniformCStr(uniformColorVar) : "half4(0)", @@ -45,7 +49,11 @@ class GrGLSLOverrideInputFragmentProcessor : public GrGLSLFragmentProcessor { SkString _input1992("constColor"); SkString _sample1992; _sample1992 = this->invokeChild(_outer.fp_index, _input1992.c_str(), args); - fragBuilder->codeAppendf("\n%s = %s;\n", args.fOutputColor, _sample1992.c_str()); + fragBuilder->codeAppendf( + R"SkSL( +%s = %s; +)SkSL", + args.fOutputColor, _sample1992.c_str()); } private: @@ -87,17 +95,10 @@ bool GrOverrideInputFragmentProcessor::onIsEqual(const GrFragmentProcessor& othe GrOverrideInputFragmentProcessor::GrOverrideInputFragmentProcessor( const GrOverrideInputFragmentProcessor& src) : INHERITED(kGrOverrideInputFragmentProcessor_ClassID, src.optimizationFlags()) - , fp_index(src.fp_index) , useUniform(src.useUniform) , uniformColor(src.uniformColor) , literalColor(src.literalColor) { - { - auto clone = src.childProcessor(fp_index).clone(); - if (src.childProcessor(fp_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); - } + { fp_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.fp_index)); } } std::unique_ptr GrOverrideInputFragmentProcessor::clone() const { return std::unique_ptr(new GrOverrideInputFragmentProcessor(*this)); diff --git a/src/gpu/effects/generated/GrOverrideInputFragmentProcessor.h b/src/gpu/effects/generated/GrOverrideInputFragmentProcessor.h index d69c16ebbbe7b..e5c1280100f58 100644 --- a/src/gpu/effects/generated/GrOverrideInputFragmentProcessor.h +++ b/src/gpu/effects/generated/GrOverrideInputFragmentProcessor.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrOverrideInputFragmentProcessor_DEFINED #define GrOverrideInputFragmentProcessor_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrOverrideInputFragmentProcessor : public GrFragmentProcessor { public: static OptimizationFlags OptFlags(const std::unique_ptr& fp, @@ -59,8 +60,7 @@ class GrOverrideInputFragmentProcessor : public GrFragmentProcessor { , uniformColor(uniformColor) , literalColor(literalColor) { SkASSERT(fp); - fp_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(fp)); + fp_index = this->registerChild(std::move(fp), SkSL::SampleUsage::PassThrough()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; diff --git a/src/gpu/effects/generated/GrPremulInputFragmentProcessor.cpp b/src/gpu/effects/generated/GrPremulInputFragmentProcessor.cpp deleted file mode 100644 index f327850bdb981..0000000000000 --- a/src/gpu/effects/generated/GrPremulInputFragmentProcessor.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/************************************************************************************************** - *** This file was autogenerated from GrPremulInputFragmentProcessor.fp; do not modify. - **************************************************************************************************/ -#include "GrPremulInputFragmentProcessor.h" - -#include "src/gpu/GrTexture.h" -#include "src/gpu/glsl/GrGLSLFragmentProcessor.h" -#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" -#include "src/gpu/glsl/GrGLSLProgramBuilder.h" -#include "src/sksl/SkSLCPP.h" -#include "src/sksl/SkSLUtil.h" -class GrGLSLPremulInputFragmentProcessor : public GrGLSLFragmentProcessor { -public: - GrGLSLPremulInputFragmentProcessor() {} - void emitCode(EmitArgs& args) override { - GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - const GrPremulInputFragmentProcessor& _outer = - args.fFp.cast(); - (void)_outer; - fragBuilder->codeAppendf("%s = %s;\n%s.xyz *= %s.w;\n", args.fOutputColor, args.fInputColor, - args.fOutputColor, args.fInputColor); - } - -private: - void onSetData(const GrGLSLProgramDataManager& pdman, - const GrFragmentProcessor& _proc) override {} -}; -GrGLSLFragmentProcessor* GrPremulInputFragmentProcessor::onCreateGLSLInstance() const { - return new GrGLSLPremulInputFragmentProcessor(); -} -void GrPremulInputFragmentProcessor::onGetGLSLProcessorKey(const GrShaderCaps& caps, - GrProcessorKeyBuilder* b) const {} -bool GrPremulInputFragmentProcessor::onIsEqual(const GrFragmentProcessor& other) const { - const GrPremulInputFragmentProcessor& that = other.cast(); - (void)that; - return true; -} -GrPremulInputFragmentProcessor::GrPremulInputFragmentProcessor( - const GrPremulInputFragmentProcessor& src) - : INHERITED(kGrPremulInputFragmentProcessor_ClassID, src.optimizationFlags()) {} -std::unique_ptr GrPremulInputFragmentProcessor::clone() const { - return std::unique_ptr(new GrPremulInputFragmentProcessor(*this)); -} diff --git a/src/gpu/effects/generated/GrPremulInputFragmentProcessor.h b/src/gpu/effects/generated/GrPremulInputFragmentProcessor.h deleted file mode 100644 index ae093ca6daf10..0000000000000 --- a/src/gpu/effects/generated/GrPremulInputFragmentProcessor.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/************************************************************************************************** - *** This file was autogenerated from GrPremulInputFragmentProcessor.fp; do not modify. - **************************************************************************************************/ -#ifndef GrPremulInputFragmentProcessor_DEFINED -#define GrPremulInputFragmentProcessor_DEFINED -#include "include/core/SkTypes.h" -#include "include/core/SkM44.h" - -#include "src/gpu/GrCoordTransform.h" -#include "src/gpu/GrFragmentProcessor.h" -class GrPremulInputFragmentProcessor : public GrFragmentProcessor { -public: - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& input) const override { - return SkColor4f{input.fR, input.fG, input.fB, input.fA}.premul(); - } - static std::unique_ptr Make() { - return std::unique_ptr(new GrPremulInputFragmentProcessor()); - } - GrPremulInputFragmentProcessor(const GrPremulInputFragmentProcessor& src); - std::unique_ptr clone() const override; - const char* name() const override { return "PremulInputFragmentProcessor"; } - -private: - GrPremulInputFragmentProcessor() - : INHERITED(kGrPremulInputFragmentProcessor_ClassID, - (OptimizationFlags)kPreservesOpaqueInput_OptimizationFlag | - kConstantOutputForConstantInput_OptimizationFlag) {} - GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; - void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; - bool onIsEqual(const GrFragmentProcessor&) const override; - GR_DECLARE_FRAGMENT_PROCESSOR_TEST - typedef GrFragmentProcessor INHERITED; -}; -#endif diff --git a/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp b/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp index 6d93aa9ad2f36..a2acd52219533 100644 --- a/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp +++ b/src/gpu/effects/generated/GrRGBToHSLFilterEffect.cpp @@ -23,15 +23,27 @@ class GrGLSLRGBToHSLFilterEffect : public GrGLSLFragmentProcessor { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrRGBToHSLFilterEffect& _outer = args.fFp.cast(); (void)_outer; + SkString _input1173(args.fInputColor); + SkString _sample1173; + if (_outer.inputFP_index >= 0) { + _sample1173 = this->invokeChild(_outer.inputFP_index, _input1173.c_str(), args); + } else { + _sample1173.swap(_input1173); + } fragBuilder->codeAppendf( - "half4 c = %s;\nhalf4 p = c.y < c.z ? half4(c.zy, -1.0, 0.66666666666666663) : " - "half4(c.yz, 0.0, -0.33333333333333331);\nhalf4 q = c.x < p.x ? half4(p.x, c.x, " - "p.yw) : half4(c.x, p.x, p.yz);\n\nhalf pmV = q.x;\nhalf pmC = pmV - min(q.y, " - "q.z);\nhalf pmL = pmV - pmC * 0.5;\nhalf H = abs(q.w + (q.y - q.z) / (pmC * 6.0 + " - "9.9999997473787516e-05));\nhalf S = pmC / ((c.w + 9.9999997473787516e-05) - " - "abs(pmL * 2.0 - c.w));\nhalf L = pmL / (c.w + 9.9999997473787516e-05);\n%s = " - "half4(H, S, L, c.w);\n", - args.fInputColor, args.fOutputColor); + R"SkSL(half4 c = %s; +half4 p = c.y < c.z ? half4(c.zy, -1.0, 0.66666666666666663) : half4(c.yz, 0.0, -0.33333333333333331); +half4 q = c.x < p.x ? half4(p.x, c.x, p.yw) : half4(c.x, p.x, p.yz); + +half pmV = q.x; +half pmC = pmV - min(q.y, q.z); +half pmL = pmV - pmC * 0.5; +half H = abs(q.w + (q.y - q.z) / (pmC * 6.0 + 9.9999997473787516e-05)); +half S = pmC / ((c.w + 9.9999997473787516e-05) - abs(pmL * 2.0 - c.w)); +half L = pmL / (c.w + 9.9999997473787516e-05); +%s = half4(H, S, L, c.w); +)SkSL", + _sample1173.c_str(), args.fOutputColor); } private: @@ -49,7 +61,11 @@ bool GrRGBToHSLFilterEffect::onIsEqual(const GrFragmentProcessor& other) const { return true; } GrRGBToHSLFilterEffect::GrRGBToHSLFilterEffect(const GrRGBToHSLFilterEffect& src) - : INHERITED(kGrRGBToHSLFilterEffect_ClassID, src.optimizationFlags()) {} + : INHERITED(kGrRGBToHSLFilterEffect_ClassID, src.optimizationFlags()) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } +} std::unique_ptr GrRGBToHSLFilterEffect::clone() const { return std::unique_ptr(new GrRGBToHSLFilterEffect(*this)); } diff --git a/src/gpu/effects/generated/GrRGBToHSLFilterEffect.h b/src/gpu/effects/generated/GrRGBToHSLFilterEffect.h index e8e0bba75619b..cafb605c36cda 100644 --- a/src/gpu/effects/generated/GrRGBToHSLFilterEffect.h +++ b/src/gpu/effects/generated/GrRGBToHSLFilterEffect.h @@ -10,16 +10,20 @@ **************************************************************************************************/ #ifndef GrRGBToHSLFilterEffect_DEFINED #define GrRGBToHSLFilterEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrRGBToHSLFilterEffect : public GrFragmentProcessor { public: #include "include/private/SkColorData.h" - SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& c) const override { + SkPMColor4f constantOutputForConstantInput(const SkPMColor4f& inColor) const override { + SkPMColor4f c = this->numChildProcessors() + ? ConstantOutputForConstantInput(this->childProcessor(0), inColor) + : inColor; const auto p = (c.fG < c.fB) ? SkPMColor4f{c.fB, c.fG, -1, 2 / 3.f} : SkPMColor4f{c.fG, c.fB, 0, -1 / 3.f}, q = (c.fR < p[0]) ? SkPMColor4f{p[0], c.fR, p[1], p[3]} @@ -32,18 +36,26 @@ class GrRGBToHSLFilterEffect : public GrFragmentProcessor { return {H, S, L, c.fA}; } - static std::unique_ptr Make() { - return std::unique_ptr(new GrRGBToHSLFilterEffect()); + static std::unique_ptr Make(std::unique_ptr inputFP) { + return std::unique_ptr(new GrRGBToHSLFilterEffect(std::move(inputFP))); } GrRGBToHSLFilterEffect(const GrRGBToHSLFilterEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "RGBToHSLFilterEffect"; } + int inputFP_index = -1; private: - GrRGBToHSLFilterEffect() + GrRGBToHSLFilterEffect(std::unique_ptr inputFP) : INHERITED(kGrRGBToHSLFilterEffect_ClassID, - (OptimizationFlags)(kConstantOutputForConstantInput_OptimizationFlag | - kPreservesOpaqueInput_OptimizationFlag)) {} + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + (kConstantOutputForConstantInput_OptimizationFlag | + kPreservesOpaqueInput_OptimizationFlag)) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; diff --git a/src/gpu/effects/generated/GrRRectBlurEffect.cpp b/src/gpu/effects/generated/GrRRectBlurEffect.cpp index 74a49b102e0d7..6ef1e2589657c 100644 --- a/src/gpu/effects/generated/GrRRectBlurEffect.cpp +++ b/src/gpu/effects/generated/GrRRectBlurEffect.cpp @@ -10,11 +10,13 @@ **************************************************************************************************/ #include "GrRRectBlurEffect.h" -std::unique_ptr GrRRectBlurEffect::Make(GrRecordingContext* context, - float sigma, - float xformedSigma, - const SkRRect& srcRRect, - const SkRRect& devRRect) { +std::unique_ptr GrRRectBlurEffect::Make( + std::unique_ptr inputFP, + GrRecordingContext* context, + float sigma, + float xformedSigma, + const SkRRect& srcRRect, + const SkRRect& devRRect) { SkASSERT(!SkRRectPriv::IsCircle(devRRect) && !devRRect.isRect()); // Should've been caught up-stream @@ -39,15 +41,15 @@ std::unique_ptr GrRRectBlurEffect::Make(GrRecordingContext* return nullptr; } - GrSurfaceProxyView mask = - find_or_create_rrect_blur_mask(context, rrectToDraw, dimensions, xformedSigma); - if (!mask) { + std::unique_ptr maskFP = + find_or_create_rrect_blur_mask_fp(context, rrectToDraw, dimensions, xformedSigma); + if (!maskFP) { return nullptr; } return std::unique_ptr( - new GrRRectBlurEffect(xformedSigma, devRRect.getBounds(), - SkRRectPriv::GetSimpleRadii(devRRect).fX, std::move(mask))); + new GrRRectBlurEffect(std::move(inputFP), xformedSigma, devRRect.getBounds(), + SkRRectPriv::GetSimpleRadii(devRRect).fX, std::move(maskFP))); } #include "src/gpu/GrTexture.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" @@ -75,29 +77,42 @@ class GrGLSLRRectBlurEffect : public GrGLSLFragmentProcessor { blurRadiusVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf_GrSLType, "blurRadius"); fragBuilder->codeAppendf( - "\nhalf2 translatedFragPos = half2(sk_FragCoord.xy - %s.xy);\nhalf threshold = %s " - "+ 2.0 * %s;\nhalf2 middle = half2((%s.zw - %s.xy) - float(2.0 * threshold));\nif " - "(translatedFragPos.x >= threshold && translatedFragPos.x < middle.x + threshold) " - "{\n translatedFragPos.x = threshold;\n} else if (translatedFragPos.x >= " - "middle.x + threshold) {\n translatedFragPos.x -= middle.x - 1.0;\n}\nif " - "(translatedFragPos.y > threshold && translatedFragPos.y < middle.y + threshold) " - "{\n translatedFragPos.y = threshold;", + R"SkSL(half2 translatedFragPos = half2(sk_FragCoord.xy - %s.xy); +half2 proxyCenter = half2((%s.zw - %s.xy) * 0.5); +half edgeSize = (2.0 * %s + %s) + 0.5; +translatedFragPos -= proxyCenter; +half2 fragDirection = sign(translatedFragPos); +translatedFragPos = abs(translatedFragPos); +translatedFragPos -= proxyCenter - edgeSize; +translatedFragPos = max(translatedFragPos, 0.0); +translatedFragPos *= fragDirection; +translatedFragPos += half2(edgeSize); +half2 proxyDims = half2(2.0 * edgeSize); +half2 texCoord = translatedFragPos / proxyDims;)SkSL", + args.fUniformHandler->getUniformCStr(proxyRectVar), args.fUniformHandler->getUniformCStr(proxyRectVar), - args.fUniformHandler->getUniformCStr(cornerRadiusVar), - args.fUniformHandler->getUniformCStr(blurRadiusVar), args.fUniformHandler->getUniformCStr(proxyRectVar), - args.fUniformHandler->getUniformCStr(proxyRectVar)); + args.fUniformHandler->getUniformCStr(blurRadiusVar), + args.fUniformHandler->getUniformCStr(cornerRadiusVar)); + SkString _input9600(args.fInputColor); + SkString _sample9600; + if (_outer.inputFP_index >= 0) { + _sample9600 = this->invokeChild(_outer.inputFP_index, _input9600.c_str(), args); + } else { + _sample9600.swap(_input9600); + } + fragBuilder->codeAppendf( + R"SkSL( +half4 inputColor = %s;)SkSL", + _sample9600.c_str()); + SkString _coords9660("float2(texCoord)"); + SkString _sample9660; + _sample9660 = this->invokeChild(_outer.ninePatchFP_index, args, _coords9660.c_str()); fragBuilder->codeAppendf( - "\n} else if (translatedFragPos.y >= middle.y + threshold) {\n " - "translatedFragPos.y -= middle.y - 1.0;\n}\nhalf2 proxyDims = half2(2.0 * " - "threshold + 1.0);\nhalf2 texCoord = translatedFragPos / proxyDims;\n%s = %s * " - "sample(%s, float2(texCoord)).%s;\n", - args.fOutputColor, args.fInputColor, - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str()); + R"SkSL( +%s = inputColor * %s; +)SkSL", + args.fOutputColor, _sample9660.c_str()); } private: @@ -111,9 +126,6 @@ class GrGLSLRRectBlurEffect : public GrGLSLFragmentProcessor { (void)rect; UniformHandle& cornerRadius = cornerRadiusVar; (void)cornerRadius; - const GrSurfaceProxyView& ninePatchSamplerView = _outer.textureSampler(0).view(); - GrTexture& ninePatchSampler = *ninePatchSamplerView.proxy()->peekTexture(); - (void)ninePatchSampler; UniformHandle& proxyRect = proxyRectVar; (void)proxyRect; UniformHandle& blurRadius = blurRadiusVar; @@ -141,23 +153,24 @@ bool GrRRectBlurEffect::onIsEqual(const GrFragmentProcessor& other) const { if (sigma != that.sigma) return false; if (rect != that.rect) return false; if (cornerRadius != that.cornerRadius) return false; - if (ninePatchSampler != that.ninePatchSampler) return false; return true; } GrRRectBlurEffect::GrRRectBlurEffect(const GrRRectBlurEffect& src) : INHERITED(kGrRRectBlurEffect_ClassID, src.optimizationFlags()) , sigma(src.sigma) , rect(src.rect) - , cornerRadius(src.cornerRadius) - , ninePatchSampler(src.ninePatchSampler) { - this->setTextureSamplerCnt(1); + , cornerRadius(src.cornerRadius) { + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } + { + ninePatchFP_index = + this->cloneAndRegisterChildProcessor(src.childProcessor(src.ninePatchFP_index)); + } } std::unique_ptr GrRRectBlurEffect::clone() const { return std::unique_ptr(new GrRRectBlurEffect(*this)); } -const GrFragmentProcessor::TextureSampler& GrRRectBlurEffect::onTextureSampler(int index) const { - return IthTextureSampler(index, ninePatchSampler); -} GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRRectBlurEffect); #if GR_TEST_UTILS std::unique_ptr GrRRectBlurEffect::TestCreate(GrProcessorTestData* d) { @@ -167,6 +180,6 @@ std::unique_ptr GrRRectBlurEffect::TestCreate(GrProcessorTe SkScalar sigma = d->fRandom->nextRangeF(1.f, 10.f); SkRRect rrect; rrect.setRectXY(SkRect::MakeWH(w, h), r, r); - return GrRRectBlurEffect::Make(d->context(), sigma, sigma, rrect, rrect); + return GrRRectBlurEffect::Make(/*inputFP=*/nullptr, d->context(), sigma, sigma, rrect, rrect); } #endif diff --git a/src/gpu/effects/generated/GrRRectBlurEffect.h b/src/gpu/effects/generated/GrRRectBlurEffect.h index bf19d5ca4d590..25037d6ea02f2 100644 --- a/src/gpu/effects/generated/GrRRectBlurEffect.h +++ b/src/gpu/effects/generated/GrRRectBlurEffect.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrRRectBlurEffect_DEFINED #define GrRRectBlurEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkBlurPriv.h" #include "src/core/SkGpuBlurUtils.h" #include "src/core/SkRRectPriv.h" @@ -24,15 +25,17 @@ #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrStyle.h" +#include "src/gpu/effects/GrTextureEffect.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrRRectBlurEffect : public GrFragmentProcessor { public: - static GrSurfaceProxyView find_or_create_rrect_blur_mask(GrRecordingContext* context, - const SkRRect& rrectToDraw, - const SkISize& dimensions, - float xformedSigma) { + static std::unique_ptr find_or_create_rrect_blur_mask_fp( + GrRecordingContext* context, + const SkRRect& rrectToDraw, + const SkISize& dimensions, + float xformedSigma) { static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain(); GrUniqueKey key; GrUniqueKey::Builder builder(&key, kDomain, 9, "RoundRect Blur Mask"); @@ -48,19 +51,26 @@ class GrRRectBlurEffect : public GrFragmentProcessor { } builder.finish(); + // It seems like we could omit this matrix and modify the shader code to not normalize + // the coords used to sample the texture effect. However, the "proxyDims" value in the + // shader is not always the actual the proxy dimensions. This is because 'dimensions' here + // was computed using integer corner radii as determined in + // SkComputeBlurredRRectParams whereas the shader code uses the float radius to compute + // 'proxyDims'. Why it draws correctly with these unequal values is a mystery for the ages. + auto m = SkMatrix::Scale(dimensions.width(), dimensions.height()); static constexpr auto kMaskOrigin = kBottomLeft_GrSurfaceOrigin; GrProxyProvider* proxyProvider = context->priv().proxyProvider(); if (auto view = proxyProvider->findCachedProxyWithColorTypeFallback( key, kMaskOrigin, GrColorType::kAlpha_8, 1)) { - return view; + return GrTextureEffect::Make(std::move(view), kPremul_SkAlphaType, m); } auto rtc = GrRenderTargetContext::MakeWithFallback( context, GrColorType::kAlpha_8, nullptr, SkBackingFit::kExact, dimensions, 1, GrMipMapped::kNo, GrProtected::kNo, kMaskOrigin); if (!rtc) { - return {}; + return nullptr; } GrPaint paint; @@ -71,7 +81,7 @@ class GrRRectBlurEffect : public GrFragmentProcessor { GrSurfaceProxyView srcView = rtc->readSurfaceView(); if (!srcView) { - return {}; + return nullptr; } SkASSERT(srcView.asTextureProxy()); auto rtc2 = SkGpuBlurUtils::GaussianBlur(context, @@ -86,21 +96,21 @@ class GrRRectBlurEffect : public GrFragmentProcessor { SkTileMode::kClamp, SkBackingFit::kExact); if (!rtc2) { - return {}; + return nullptr; } GrSurfaceProxyView mask = rtc2->readSurfaceView(); if (!mask) { - return {}; + return nullptr; } SkASSERT(mask.asTextureProxy()); SkASSERT(mask.origin() == kMaskOrigin); proxyProvider->assignUniqueKeyToProxy(key, mask.asTextureProxy()); - - return mask; + return GrTextureEffect::Make(std::move(mask), kPremul_SkAlphaType, m); } - static std::unique_ptr Make(GrRecordingContext* context, + static std::unique_ptr Make(std::unique_ptr inputFP, + GrRecordingContext* context, float sigma, float xformedSigma, const SkRRect& srcRRect, @@ -108,28 +118,36 @@ class GrRRectBlurEffect : public GrFragmentProcessor { GrRRectBlurEffect(const GrRRectBlurEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "RRectBlurEffect"; } + int inputFP_index = -1; float sigma; SkRect rect; float cornerRadius; - TextureSampler ninePatchSampler; + int ninePatchFP_index = -1; private: - GrRRectBlurEffect(float sigma, + GrRRectBlurEffect(std::unique_ptr inputFP, + float sigma, SkRect rect, float cornerRadius, - GrSurfaceProxyView ninePatchSampler) + std::unique_ptr ninePatchFP) : INHERITED(kGrRRectBlurEffect_ClassID, - (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag) , sigma(sigma) , rect(rect) - , cornerRadius(cornerRadius) - , ninePatchSampler(std::move(ninePatchSampler)) { - this->setTextureSamplerCnt(1); + , cornerRadius(cornerRadius) { + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + SkASSERT(ninePatchFP); + ninePatchFP_index = + this->registerChild(std::move(ninePatchFP), SkSL::SampleUsage::Explicit()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; - const TextureSampler& onTextureSampler(int) const override; GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; }; diff --git a/src/gpu/effects/generated/GrRectBlurEffect.cpp b/src/gpu/effects/generated/GrRectBlurEffect.cpp index 111806959423e..e55c300106065 100644 --- a/src/gpu/effects/generated/GrRectBlurEffect.cpp +++ b/src/gpu/effects/generated/GrRectBlurEffect.cpp @@ -25,8 +25,6 @@ class GrGLSLRectBlurEffect : public GrGLSLFragmentProcessor { (void)_outer; auto rect = _outer.rect; (void)rect; - auto invSixSigma = _outer.invSixSigma; - (void)invSixSigma; auto isFast = _outer.isFast; (void)isFast; highp = ((abs(rect.left()) > 16000.0 || abs(rect.top()) > 16000.0) || @@ -40,103 +38,94 @@ class GrGLSLRectBlurEffect : public GrGLSLFragmentProcessor { rectHVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "rectH"); } - invSixSigmaVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, - kHalf_GrSLType, "invSixSigma"); fragBuilder->codeAppendf( - "/* key */ bool highp = %s;\nhalf xCoverage, yCoverage;\n@if (%s) {\n half x, " - "y;\n @if (highp) {\n x = max(half(%s.x - sk_FragCoord.x), " - "half(sk_FragCoord.x - %s.z));\n y = max(half(%s.y - sk_FragCoord.y), " - "half(sk_FragCoord.y - %s.w));\n } else {\n x = max(half(float(%s.x) - " - "sk_FragCoord.x), half(sk_FragCoord.x - float(%s.z)));\n y = " - "max(half(float(%s.y) - sk_FragCoord.y), half(sk_FragCoord.y - float(%s.w)));\n " - "}\n xCoverage = sample(%s, float2(half2(x * %s, 0.5))).", + R"SkSL(/* key */ bool highp = %s; +half xCoverage, yCoverage; +@if (%s) { + half2 xy; + @if (highp) { + xy = max(half2(%s.xy - sk_FragCoord.xy), half2(sk_FragCoord.xy - %s.zw)); + } else { + xy = max(half2(float2(%s.xy) - sk_FragCoord.xy), half2(sk_FragCoord.xy - float2(%s.zw))); + })SkSL", (highp ? "true" : "false"), (_outer.isFast ? "true" : "false"), rectFVar.isValid() ? args.fUniformHandler->getUniformCStr(rectFVar) : "float4(0)", rectFVar.isValid() ? args.fUniformHandler->getUniformCStr(rectFVar) : "float4(0)", - rectFVar.isValid() ? args.fUniformHandler->getUniformCStr(rectFVar) : "float4(0)", - rectFVar.isValid() ? args.fUniformHandler->getUniformCStr(rectFVar) : "float4(0)", - rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)", - rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)", - rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)", rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)", - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - args.fUniformHandler->getUniformCStr(invSixSigmaVar)); + rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)"); + SkString _coords7211("float2(half2(xy.x, 0.5))"); + SkString _sample7211; + _sample7211 = this->invokeChild(_outer.integral_index, args, _coords7211.c_str()); fragBuilder->codeAppendf( - "%s.w;\n yCoverage = sample(%s, float2(half2(y * %s, 0.5))).%s.w;\n %s = (%s " - "* xCoverage) * yCoverage;\n} else {\n half l, r, t, b;\n @if (highp) {\n " - " l = half(sk_FragCoord.x - %s.x);\n r = half(%s.z - sk_FragCoord.x);\n " - " t = half(sk_FragCoord.y - %s.y);\n b = half(%s.w - " - "sk_FragCoord.y);\n } else {\n l = half(sk_FragCoord.x - float(%s.x));\n " - " r = half(float(%s.z) - sk_FragCoord.x);\n t = half(sk_FragCoord.y - " - "float(%s.y));\n b = half(float(", - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str(), - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - args.fUniformHandler->getUniformCStr(invSixSigmaVar), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str(), - args.fOutputColor, args.fInputColor, - rectFVar.isValid() ? args.fUniformHandler->getUniformCStr(rectFVar) : "float4(0)", - rectFVar.isValid() ? args.fUniformHandler->getUniformCStr(rectFVar) : "float4(0)", + R"SkSL( + xCoverage = %s.w;)SkSL", + _sample7211.c_str()); + SkString _coords7269("float2(half2(xy.y, 0.5))"); + SkString _sample7269; + _sample7269 = this->invokeChild(_outer.integral_index, args, _coords7269.c_str()); + fragBuilder->codeAppendf( + R"SkSL( + yCoverage = %s.w; +} else { + half4 rect; + @if (highp) { + rect.xy = half2(%s.xy - sk_FragCoord.xy); + rect.zw = half2(sk_FragCoord.xy - %s.zw); + } else { + rect.xy = half2(float2(%s.xy) - sk_FragCoord.xy); + rect.zw = half2(sk_FragCoord.xy - float2(%s.zw)); + })SkSL", + _sample7269.c_str(), rectFVar.isValid() ? args.fUniformHandler->getUniformCStr(rectFVar) : "float4(0)", rectFVar.isValid() ? args.fUniformHandler->getUniformCStr(rectFVar) : "float4(0)", rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)", - rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)", rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)"); + SkString _coords8636("float2(half2(rect.x, 0.5))"); + SkString _sample8636; + _sample8636 = this->invokeChild(_outer.integral_index, args, _coords8636.c_str()); + SkString _coords8699("float2(half2(rect.z, 0.5))"); + SkString _sample8699; + _sample8699 = this->invokeChild(_outer.integral_index, args, _coords8699.c_str()); fragBuilder->codeAppendf( - "%s.w) - sk_FragCoord.y);\n }\n half il = 1.0 + l * %s;\n half ir = 1.0 + " - "r * %s;\n half it = 1.0 + t * %s;\n half ib = 1.0 + b * %s;\n xCoverage " - "= (1.0 - sample(%s, float2(half2(il, 0.5))).%s.w) - sample(%s, float2(half2(ir, " - "0.5))).%s.w;\n yCoverage = (1.0 - sample(%s, float2(half2(it, 0.5))).%s.w) - " - "sample(%s, float2(half2(ib, 0.5))).%s.w;\n}\n%s = (%s * xCoverage) * yCoverage;\n", - rectHVar.isValid() ? args.fUniformHandler->getUniformCStr(rectHVar) : "half4(0)", - args.fUniformHandler->getUniformCStr(invSixSigmaVar), - args.fUniformHandler->getUniformCStr(invSixSigmaVar), - args.fUniformHandler->getUniformCStr(invSixSigmaVar), - args.fUniformHandler->getUniformCStr(invSixSigmaVar), - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str(), - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str(), - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str(), - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str(), - args.fOutputColor, args.fInputColor); + R"SkSL( + xCoverage = (1.0 - %s.w) - %s.w;)SkSL", + _sample8636.c_str(), _sample8699.c_str()); + SkString _coords8763("float2(half2(rect.y, 0.5))"); + SkString _sample8763; + _sample8763 = this->invokeChild(_outer.integral_index, args, _coords8763.c_str()); + SkString _coords8826("float2(half2(rect.w, 0.5))"); + SkString _sample8826; + _sample8826 = this->invokeChild(_outer.integral_index, args, _coords8826.c_str()); + fragBuilder->codeAppendf( + R"SkSL( + yCoverage = (1.0 - %s.w) - %s.w; +})SkSL", + _sample8763.c_str(), _sample8826.c_str()); + SkString _input8895(args.fInputColor); + SkString _sample8895; + if (_outer.inputFP_index >= 0) { + _sample8895 = this->invokeChild(_outer.inputFP_index, _input8895.c_str(), args); + } else { + _sample8895.swap(_input8895); + } + fragBuilder->codeAppendf( + R"SkSL( +half4 inputColor = %s; +%s = (inputColor * xCoverage) * yCoverage; +)SkSL", + _sample8895.c_str(), args.fOutputColor); } private: void onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& _proc) override { const GrRectBlurEffect& _outer = _proc.cast(); - { pdman.set1f(invSixSigmaVar, (_outer.invSixSigma)); } auto rect = _outer.rect; (void)rect; UniformHandle& rectF = rectFVar; (void)rectF; UniformHandle& rectH = rectHVar; (void)rectH; - const GrSurfaceProxyView& integralView = _outer.textureSampler(0).view(); - GrTexture& integral = *integralView.proxy()->peekTexture(); - (void)integral; - UniformHandle& invSixSigma = invSixSigmaVar; - (void)invSixSigma; auto isFast = _outer.isFast; (void)isFast; @@ -146,7 +135,6 @@ class GrGLSLRectBlurEffect : public GrGLSLFragmentProcessor { bool highp = false; UniformHandle rectFVar; UniformHandle rectHVar; - UniformHandle invSixSigmaVar; }; GrGLSLFragmentProcessor* GrRectBlurEffect::onCreateGLSLInstance() const { return new GrGLSLRectBlurEffect(); @@ -163,32 +151,31 @@ bool GrRectBlurEffect::onIsEqual(const GrFragmentProcessor& other) const { const GrRectBlurEffect& that = other.cast(); (void)that; if (rect != that.rect) return false; - if (integral != that.integral) return false; - if (invSixSigma != that.invSixSigma) return false; if (isFast != that.isFast) return false; return true; } GrRectBlurEffect::GrRectBlurEffect(const GrRectBlurEffect& src) : INHERITED(kGrRectBlurEffect_ClassID, src.optimizationFlags()) , rect(src.rect) - , integral(src.integral) - , invSixSigma(src.invSixSigma) , isFast(src.isFast) { - this->setTextureSamplerCnt(1); + if (src.inputFP_index >= 0) { + inputFP_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.inputFP_index)); + } + { + integral_index = + this->cloneAndRegisterChildProcessor(src.childProcessor(src.integral_index)); + } } std::unique_ptr GrRectBlurEffect::clone() const { return std::unique_ptr(new GrRectBlurEffect(*this)); } -const GrFragmentProcessor::TextureSampler& GrRectBlurEffect::onTextureSampler(int index) const { - return IthTextureSampler(index, integral); -} GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrRectBlurEffect); #if GR_TEST_UTILS std::unique_ptr GrRectBlurEffect::TestCreate(GrProcessorTestData* data) { float sigma = data->fRandom->nextRangeF(3, 8); float width = data->fRandom->nextRangeF(200, 300); float height = data->fRandom->nextRangeF(200, 300); - return GrRectBlurEffect::Make(data->context(), *data->caps()->shaderCaps(), + return GrRectBlurEffect::Make(/*inputFP=*/nullptr, data->context(), *data->caps()->shaderCaps(), SkRect::MakeWH(width, height), sigma); } #endif diff --git a/src/gpu/effects/generated/GrRectBlurEffect.h b/src/gpu/effects/generated/GrRectBlurEffect.h index 37727a96d38a9..aee409ff95bff 100644 --- a/src/gpu/effects/generated/GrRectBlurEffect.h +++ b/src/gpu/effects/generated/GrRectBlurEffect.h @@ -10,26 +10,29 @@ **************************************************************************************************/ #ifndef GrRectBlurEffect_DEFINED #define GrRectBlurEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" #include #include "include/core/SkRect.h" #include "include/core/SkScalar.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkBlurMask.h" #include "src/core/SkMathPriv.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrShaderCaps.h" +#include "src/gpu/effects/GrTextureEffect.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrRectBlurEffect : public GrFragmentProcessor { public: - static GrSurfaceProxyView CreateIntegralTexture(GrRecordingContext* context, float sixSigma) { + static std::unique_ptr MakeIntegralFP(GrRecordingContext* context, + float sixSigma) { // The texture we're producing represents the integral of a normal distribution over a // six-sigma range centered at zero. We want enough resolution so that the linear // interpolation done in texture lookup doesn't introduce noticeable artifacts. We @@ -44,11 +47,15 @@ class GrRectBlurEffect : public GrFragmentProcessor { builder[0] = width; builder.finish(); + SkMatrix m = SkMatrix::Scale(width / sixSigma, 1.f); + GrProxyProvider* proxyProvider = context->priv().proxyProvider(); if (sk_sp proxy = proxyProvider->findOrCreateProxyByUniqueKey(key)) { GrSwizzle swizzle = context->priv().caps()->getReadSwizzle(proxy->backendFormat(), GrColorType::kAlpha_8); - return {std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle}; + GrSurfaceProxyView view{std::move(proxy), kTopLeft_GrSurfaceOrigin, swizzle}; + return GrTextureEffect::Make(std::move(view), kPremul_SkAlphaType, m, + GrSamplerState::Filter::kBilerp); } SkBitmap bitmap; @@ -73,10 +80,12 @@ class GrRectBlurEffect : public GrFragmentProcessor { } SkASSERT(view.origin() == kTopLeft_GrSurfaceOrigin); proxyProvider->assignUniqueKeyToProxy(key, view.asTextureProxy()); - return view; + return GrTextureEffect::Make(std::move(view), kPremul_SkAlphaType, m, + GrSamplerState::Filter::kBilerp); } - static std::unique_ptr Make(GrRecordingContext* context, + static std::unique_ptr Make(std::unique_ptr inputFP, + GrRecordingContext* context, const GrShaderCaps& caps, const SkRect& rect, float sigma) { @@ -92,7 +101,7 @@ class GrRectBlurEffect : public GrFragmentProcessor { } const float sixSigma = 6 * sigma; - GrSurfaceProxyView integral = CreateIntegralTexture(context, sixSigma); + std::unique_ptr integral = MakeIntegralFP(context, sixSigma); if (!integral) { return nullptr; } @@ -110,39 +119,40 @@ class GrRectBlurEffect : public GrFragmentProcessor { // less than 6 sigma wide then things aren't so simple and we have to consider both the // left and right edge of the rectangle (and similar in y). bool isFast = insetRect.isSorted(); - // 1 / (6 * sigma) is the domain of the integral texture. We use the inverse to produce - // normalized texture coords from frag coord distances. - float invSixSigma = 1.f / sixSigma; return std::unique_ptr( - new GrRectBlurEffect(insetRect, std::move(integral), invSixSigma, isFast, + new GrRectBlurEffect(std::move(inputFP), insetRect, std::move(integral), isFast, GrSamplerState::Filter::kBilerp)); } GrRectBlurEffect(const GrRectBlurEffect& src); std::unique_ptr clone() const override; const char* name() const override { return "RectBlurEffect"; } + int inputFP_index = -1; SkRect rect; - TextureSampler integral; - float invSixSigma; + int integral_index = -1; bool isFast; private: - GrRectBlurEffect(SkRect rect, - GrSurfaceProxyView integral, - float invSixSigma, + GrRectBlurEffect(std::unique_ptr inputFP, + SkRect rect, + std::unique_ptr integral, bool isFast, GrSamplerState samplerParams) : INHERITED(kGrRectBlurEffect_ClassID, - (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag) + (OptimizationFlags)(inputFP ? ProcessorOptimizationFlags(inputFP.get()) + : kAll_OptimizationFlags) & + kCompatibleWithCoverageAsAlpha_OptimizationFlag) , rect(rect) - , integral(std::move(integral), samplerParams) - , invSixSigma(invSixSigma) , isFast(isFast) { - this->setTextureSamplerCnt(1); + if (inputFP) { + inputFP_index = + this->registerChild(std::move(inputFP), SkSL::SampleUsage::PassThrough()); + } + SkASSERT(integral); + integral_index = this->registerChild(std::move(integral), SkSL::SampleUsage::Explicit()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; - const TextureSampler& onTextureSampler(int) const override; GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; }; diff --git a/src/gpu/geometry/GrPathUtils.cpp b/src/gpu/geometry/GrPathUtils.cpp index 625b9d6756f9e..55d1207c4ca57 100644 --- a/src/gpu/geometry/GrPathUtils.cpp +++ b/src/gpu/geometry/GrPathUtils.cpp @@ -188,6 +188,7 @@ int GrPathUtils::worstCasePointCount(const SkPath& path, int* subpaths, SkScalar for (int i = 0; i < converter.countQuads(); ++i) { pointCount += quadraticPointCount(quadPts + 2*i, tol); } + [[fallthrough]]; } case SkPath::kQuad_Verb: pointCount += quadraticPointCount(pts, tol); @@ -806,7 +807,7 @@ SkCubicType GrPathUtils::getCubicKLM(const SkPoint src[4], SkMatrix* klm, double switch (type) { case SkCubicType::kCuspAtInfinity: SkASSERT(1 == t1 && 0 == s1); // Infinity. - // fallthru. + [[fallthrough]]; case SkCubicType::kLocalCusp: case SkCubicType::kSerpentine: calc_serp_kcoeffs(t0, s0, t1, s1, skipTerm, &klmCoeffs[0]); diff --git a/src/gpu/gl/GrGLBuffer.cpp b/src/gpu/gl/GrGLBuffer.cpp index fc11731b736ed..0ac421d116dad 100644 --- a/src/gpu/gl/GrGLBuffer.cpp +++ b/src/gpu/gl/GrGLBuffer.cpp @@ -14,15 +14,17 @@ #define GL_CALL(X) GR_GL_CALL(this->glGpu()->glInterface(), X) #define GL_CALL_RET(RET, X) GR_GL_CALL_RET(this->glGpu()->glInterface(), RET, X) -#if GR_GL_CHECK_ALLOC_WITH_GET_ERROR - #define CLEAR_ERROR_BEFORE_ALLOC(iface) GrGLClearErr(iface) - #define GL_ALLOC_CALL(iface, call) GR_GL_CALL_NOERRCHECK(iface, call) - #define CHECK_ALLOC_ERROR(iface) GR_GL_GET_ERROR(iface) -#else - #define CLEAR_ERROR_BEFORE_ALLOC(iface) - #define GL_ALLOC_CALL(iface, call) GR_GL_CALL(iface, call) - #define CHECK_ALLOC_ERROR(iface) GR_GL_NO_ERROR -#endif +#define GL_ALLOC_CALL(call) \ + [&] { \ + if (this->glGpu()->glCaps().skipErrorChecks()) { \ + GR_GL_CALL(this->glGpu()->glInterface(), call); \ + return static_cast(GR_GL_NO_ERROR); \ + } else { \ + this->glGpu()->clearErrorsAndCheckForOOM(); \ + GR_GL_CALL_NOERRCHECK(this->glGpu()->glInterface(), call); \ + return this->glGpu()->getErrorAndCheckForOOM(); \ + } \ + }() #ifdef SK_DEBUG #define VALIDATE() this->validate() @@ -109,13 +111,8 @@ GrGLBuffer::GrGLBuffer(GrGLGpu* gpu, size_t size, GrGpuBufferType intendedType, GL_CALL(GenBuffers(1, &fBufferID)); if (fBufferID) { GrGLenum target = gpu->bindBuffer(fIntendedType, this); - CLEAR_ERROR_BEFORE_ALLOC(gpu->glInterface()); - // make sure driver can allocate memory for this buffer - GL_ALLOC_CALL(gpu->glInterface(), BufferData(target, - (GrGLsizeiptr) size, - data, - fUsage)); - if (CHECK_ALLOC_ERROR(gpu->glInterface()) != GR_GL_NO_ERROR) { + GrGLenum error = GL_ALLOC_CALL(BufferData(target, (GrGLsizeiptr)size, data, fUsage)); + if (error != GR_GL_NO_ERROR) { GL_CALL(DeleteBuffers(1, &fBufferID)); fBufferID = 0; } else { @@ -182,7 +179,11 @@ void GrGLBuffer::onMap() { if (!readOnly) { // Let driver know it can discard the old data if (this->glCaps().useBufferDataNullHint() || fGLSizeInBytes != this->size()) { - GL_CALL(BufferData(target, this->size(), nullptr, fUsage)); + GrGLenum error = + GL_ALLOC_CALL(BufferData(target, this->size(), nullptr, fUsage)); + if (error != GR_GL_NO_ERROR) { + return; + } } } GL_CALL_RET(fMapPtr, MapBuffer(target, readOnly ? GR_GL_READ_ONLY : GR_GL_WRITE_ONLY)); @@ -192,7 +193,10 @@ void GrGLBuffer::onMap() { GrGLenum target = this->glGpu()->bindBuffer(fIntendedType, this); // Make sure the GL buffer size agrees with fDesc before mapping. if (fGLSizeInBytes != this->size()) { - GL_CALL(BufferData(target, this->size(), nullptr, fUsage)); + GrGLenum error = GL_ALLOC_CALL(BufferData(target, this->size(), nullptr, fUsage)); + if (error != GR_GL_NO_ERROR) { + return; + } } GrGLbitfield access; if (readOnly) { @@ -211,7 +215,10 @@ void GrGLBuffer::onMap() { GrGLenum target = this->glGpu()->bindBuffer(fIntendedType, this); // Make sure the GL buffer size agrees with fDesc before mapping. if (fGLSizeInBytes != this->size()) { - GL_CALL(BufferData(target, this->size(), nullptr, fUsage)); + GrGLenum error = GL_ALLOC_CALL(BufferData(target, this->size(), nullptr, fUsage)); + if (error != GR_GL_NO_ERROR) { + return; + } } GL_CALL_RET(fMapPtr, MapBufferSubData(target, 0, this->size(), readOnly ? GR_GL_READ_ONLY : GR_GL_WRITE_ONLY)); @@ -266,7 +273,11 @@ bool GrGLBuffer::onUpdateData(const void* src, size_t srcSizeInBytes) { if (this->glCaps().useBufferDataNullHint()) { if (this->size() == srcSizeInBytes) { - GL_CALL(BufferData(target, (GrGLsizeiptr) srcSizeInBytes, src, fUsage)); + GrGLenum error = + GL_ALLOC_CALL(BufferData(target, (GrGLsizeiptr)srcSizeInBytes, src, fUsage)); + if (error != GR_GL_NO_ERROR) { + return false; + } } else { // Before we call glBufferSubData we give the driver a hint using // glBufferData with nullptr. This makes the old buffer contents @@ -275,7 +286,11 @@ bool GrGLBuffer::onUpdateData(const void* src, size_t srcSizeInBytes) { // assign a different allocation for the new contents to avoid // flushing the gpu past draws consuming the old contents. // TODO I think we actually want to try calling bufferData here - GL_CALL(BufferData(target, this->size(), nullptr, fUsage)); + GrGLenum error = + GL_ALLOC_CALL(BufferData(target, (GrGLsizeiptr)this->size(), nullptr, fUsage)); + if (error != GR_GL_NO_ERROR) { + return false; + } GL_CALL(BufferSubData(target, 0, (GrGLsizeiptr) srcSizeInBytes, src)); } fGLSizeInBytes = this->size(); @@ -283,7 +298,11 @@ bool GrGLBuffer::onUpdateData(const void* src, size_t srcSizeInBytes) { // Note that we're cheating on the size here. Currently no methods // allow a partial update that preserves contents of non-updated // portions of the buffer (map() does a glBufferData(..size, nullptr..)) - GL_CALL(BufferData(target, srcSizeInBytes, src, fUsage)); + GrGLenum error = + GL_ALLOC_CALL(BufferData(target, (GrGLsizeiptr)srcSizeInBytes, src, fUsage)); + if (error != GR_GL_NO_ERROR) { + return false; + } fGLSizeInBytes = srcSizeInBytes; } VALIDATE(); diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index 2630173c102c1..dd4e89b084e5f 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -11,6 +11,7 @@ #include "src/core/SkCompressedDataUtils.h" #include "src/core/SkTSearch.h" #include "src/core/SkTSort.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrRenderTargetProxyPriv.h" #include "src/gpu/GrShaderCaps.h" @@ -886,17 +887,21 @@ void GrGLCaps::initGLSL(const GrGLContextInfo& ctxInfo, const GrGLInterface* gli } } + bool hasTessellationSupport = false; if (GR_IS_GR_GL(standard)) { - shaderCaps->fTessellationSupport = - version >= GR_GL_VER(4,0) || - ctxInfo.hasExtension("GL_ARB_tessellation_shader"); - } else { - if (version >= GR_GL_VER(3,2)) { - shaderCaps->fTessellationSupport = true; - } else if (ctxInfo.hasExtension("GL_OES_tessellation_shader")) { - shaderCaps->fTessellationSupport = true; - shaderCaps->fTessellationExtensionString = "GL_OES_tessellation_shader"; - } + hasTessellationSupport = version >= GR_GL_VER(4,0) || + ctxInfo.hasExtension("GL_ARB_tessellation_shader"); + } else if (version >= GR_GL_VER(3,2)) { + hasTessellationSupport = true; + } else if (ctxInfo.hasExtension("GL_OES_tessellation_shader")) { + hasTessellationSupport = true; + shaderCaps->fTessellationExtensionString = "GL_OES_tessellation_shader"; + } + if (hasTessellationSupport) { + GR_GL_GetIntegerv(gli, GR_GL_MAX_TESS_GEN_LEVEL_OES, + &shaderCaps->fMaxTessellationSegments); + // Just in case a driver returns a negative number? + shaderCaps->fMaxTessellationSegments = std::max(0, shaderCaps->fMaxTessellationSegments); } shaderCaps->fVersionDeclString = get_glsl_version_decl_string(standard, @@ -3850,14 +3855,14 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, if (ctxInfo.version() >= GR_GL_VER(4,2)) { fRequiresManualFBBarrierAfterTessellatedStencilDraw = true; } else { - shaderCaps->fTessellationSupport = false; + shaderCaps->fMaxTessellationSegments = 0; } } else { // glMemoryBarrier wasn't around until es version 3.1. if (ctxInfo.version() >= GR_GL_VER(3,1)) { fRequiresManualFBBarrierAfterTessellatedStencilDraw = true; } else { - shaderCaps->fTessellationSupport = false; + shaderCaps->fMaxTessellationSegments = 0; } } } @@ -3865,7 +3870,7 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, if (kQualcomm_GrGLDriver == ctxInfo.driver()) { // Qualcomm fails to link programs with tessellation and does not give an error message. // http://skbug.com/9740 - shaderCaps->fTessellationSupport = false; + shaderCaps->fMaxTessellationSegments = 0; } #ifdef SK_BUILD_FOR_WIN @@ -4002,6 +4007,12 @@ void GrGLCaps::applyDriverCorrectnessWorkarounds(const GrGLContextInfo& ctxInfo, if (kANGLE_GrGLDriver == ctxInfo.driver()) { shaderCaps->fCanUseDoLoops = false; } + + // ANGLE's D3D9 backend + AMD GPUs are flaky with program binary caching (skbug.com/10395) + if (ctxInfo.angleBackend() == GrGLANGLEBackend::kD3D9 && + ctxInfo.angleVendor() == GrGLANGLEVendor::kAMD) { + fProgramBinarySupport = false; + } } void GrGLCaps::onApplyOptionsOverrides(const GrContextOptions& options) { @@ -4110,7 +4121,7 @@ GrCaps::SupportedRead GrGLCaps::onSupportedReadPixelsColorType( GrColorType srcColorType, const GrBackendFormat& srcBackendFormat, GrColorType dstColorType) const { - SkImage::CompressionType compression = this->compressionType(srcBackendFormat); + SkImage::CompressionType compression = GrBackendFormatToCompressionType(srcBackendFormat); if (compression != SkImage::CompressionType::kNone) { return { SkCompressionTypeIsOpaque(compression) ? GrColorType::kRGB_888x : GrColorType::kRGBA_8888, @@ -4190,25 +4201,10 @@ bool GrGLCaps::isFormatSRGB(const GrBackendFormat& format) const { return format.asGLFormat() == GrGLFormat::kSRGB8_ALPHA8; } -SkImage::CompressionType GrGLCaps::compressionType(const GrBackendFormat& format) const { - auto fmt = format.asGLFormat(); - - switch (fmt) { - case GrGLFormat::kCOMPRESSED_ETC1_RGB8: // same compression layout as ETC2_RGB8_UNORM - case GrGLFormat::kCOMPRESSED_RGB8_ETC2: - return SkImage::CompressionType::kETC2_RGB8_UNORM; - case GrGLFormat::kCOMPRESSED_RGB8_BC1: - return SkImage::CompressionType::kBC1_RGB8_UNORM; - case GrGLFormat::kCOMPRESSED_RGBA8_BC1: - return SkImage::CompressionType::kBC1_RGBA8_UNORM; - default: - return SkImage::CompressionType::kNone; - } - - SkUNREACHABLE; -} - bool GrGLCaps::isFormatTexturable(const GrBackendFormat& format) const { + if (format.textureType() == GrTextureType::kRectangle && !this->rectangleTextureSupport()) { + return false; + } return this->isFormatTexturable(format.asGLFormat()); } @@ -4219,6 +4215,12 @@ bool GrGLCaps::isFormatTexturable(GrGLFormat format) const { bool GrGLCaps::isFormatAsColorTypeRenderable(GrColorType ct, const GrBackendFormat& format, int sampleCount) const { + if (format.textureType() == GrTextureType::kRectangle && !this->rectangleTextureSupport()) { + return false; + } + if (format.textureType() == GrTextureType::kExternal) { + return false; + } auto f = format.asGLFormat(); const FormatInfo& info = this->getFormatInfo(f); if (!SkToBool(info.colorTypeFlags(ct) & ColorTypeInfo::kRenderable_Flag)) { @@ -4229,6 +4231,12 @@ bool GrGLCaps::isFormatAsColorTypeRenderable(GrColorType ct, const GrBackendForm } bool GrGLCaps::isFormatRenderable(const GrBackendFormat& format, int sampleCount) const { + if (format.textureType() == GrTextureType::kRectangle && !this->rectangleTextureSupport()) { + return false; + } + if (format.textureType() == GrTextureType::kExternal) { + return false; + } return this->isFormatRenderable(format.asGLFormat(), sampleCount); } @@ -4340,13 +4348,6 @@ void GrGLCaps::didQueryImplementationReadSupport(GrGLFormat format, bool GrGLCaps::onAreColorTypeAndFormatCompatible(GrColorType ct, const GrBackendFormat& format) const { GrGLFormat glFormat = format.asGLFormat(); - - SkImage::CompressionType compression = GrGLFormatToCompressionType(glFormat); - if (compression != SkImage::CompressionType::kNone) { - return ct == (SkCompressionTypeIsOpaque(compression) ? GrColorType::kRGB_888x - : GrColorType::kRGBA_8888); - } - const auto& info = this->getFormatInfo(glFormat); for (int i = 0; i < info.fColorTypeInfoCount; ++i) { if (info.fColorTypeInfos[i].fColorType == ct) { @@ -4395,8 +4396,9 @@ GrBackendFormat GrGLCaps::getBackendFormatFromCompressionType( SkUNREACHABLE; } -GrSwizzle GrGLCaps::getReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { - const auto& info = this->getFormatInfo(format.asGLFormat()); +GrSwizzle GrGLCaps::onGetReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { + GrGLFormat glFormat = format.asGLFormat(); + const auto& info = this->getFormatInfo(glFormat); for (int i = 0; i < info.fColorTypeInfoCount; ++i) { const auto& ctInfo = info.fColorTypeInfos[i]; if (ctInfo.fColorType == colorType) { @@ -4404,7 +4406,7 @@ GrSwizzle GrGLCaps::getReadSwizzle(const GrBackendFormat& format, GrColorType co } } SkDEBUGFAILF("Illegal color type (%d) and format (%d) combination.", colorType, - format.asGLFormat()); + glFormat); return {}; } @@ -4497,7 +4499,15 @@ std::vector GrGLCaps::getTestingCombinat combos.push_back({ GrColorType::kBGRA_8888, GrBackendFormat::MakeGL(GR_GL_BGRA8, GR_GL_TEXTURE_2D) }); } - + if (this->rectangleTextureSupport()) { + size_t count2D = combos.size(); + for (size_t i = 0; i < count2D; ++i) { + auto combo2D = combos[i]; + GrGLenum formatEnum = GrGLFormatToEnum(combo2D.fFormat.asGLFormat()); + combos.push_back({combo2D.fColorType, + GrBackendFormat::MakeGL(formatEnum, GR_GL_TEXTURE_RECTANGLE)}); + } + } return combos; } #endif diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h index 1371b26c28bc4..8ee8e9b84b5b6 100644 --- a/src/gpu/gl/GrGLCaps.h +++ b/src/gpu/gl/GrGLCaps.h @@ -114,7 +114,6 @@ class GrGLCaps : public GrCaps { const GrGLInterface* glInterface); bool isFormatSRGB(const GrBackendFormat&) const override; - SkImage::CompressionType compressionType(const GrBackendFormat&) const override; bool isFormatTexturable(const GrBackendFormat&) const override; bool isFormatTexturable(GrGLFormat) const; @@ -441,7 +440,6 @@ class GrGLCaps : public GrCaps { GrBackendFormat getBackendFormatFromCompressionType(SkImage::CompressionType) const override; - GrSwizzle getReadSwizzle(const GrBackendFormat&, GrColorType) const override; GrSwizzle getWriteSwizzle(const GrBackendFormat&, GrColorType) const override; uint64_t computeFormatKey(const GrBackendFormat&) const override; @@ -502,6 +500,8 @@ class GrGLCaps : public GrCaps { SupportedRead onSupportedReadPixelsColorType(GrColorType, const GrBackendFormat&, GrColorType) const override; + GrSwizzle onGetReadSwizzle(const GrBackendFormat&, GrColorType) const override; + GrGLStandard fStandard = kNone_GrGLStandard; SkTArray fStencilFormats; diff --git a/src/gpu/gl/GrGLDefines.h b/src/gpu/gl/GrGLDefines.h index a2ac31561c512..8fde6be2ebb82 100644 --- a/src/gpu/gl/GrGLDefines.h +++ b/src/gpu/gl/GrGLDefines.h @@ -1140,4 +1140,7 @@ /** GL_NV_fence_sync */ #define GR_GL_ALL_COMPLETED 0x84F2 +/* Tessellation */ +#define GR_GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E + #endif diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp index a63db97ee12a2..24d4318d6ada3 100644 --- a/src/gpu/gl/GrGLGpu.cpp +++ b/src/gpu/gl/GrGLGpu.cpp @@ -19,10 +19,10 @@ #include "src/core/SkConvertPixels.h" #include "src/core/SkMipMap.h" #include "src/core/SkTraceEvent.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrCpuBuffer.h" #include "src/gpu/GrDataUtils.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrGpuResourcePriv.h" #include "src/gpu/GrPipeline.h" #include "src/gpu/GrProgramInfo.h" @@ -50,9 +50,9 @@ GR_GL_CALL(this->glInterface(), call); \ return static_cast(GR_GL_NO_ERROR); \ } else { \ - GrGLClearErr(this->glInterface()); \ + this->clearErrorsAndCheckForOOM(); \ GR_GL_CALL_NOERRCHECK(this->glInterface(), call); \ - return GR_GL_GET_ERROR(this->glInterface()); \ + return this->getErrorAndCheckForOOM(); \ } \ }() @@ -333,7 +333,11 @@ GrGLGpu::GrGLGpu(std::unique_ptr ctx, GrContext* context) , fStencilClearFBOID(0) , fFinishCallbacks(this) { SkASSERT(fGLContext); - GrGLClearErr(this->glInterface()); + // Clear errors so we don't get confused whether we caused an error. + this->clearErrorsAndCheckForOOM(); + // Toss out any pre-existing OOM that was hanging around before we got started. + this->checkAndResetOOMed(); + fCaps = sk_ref_sp(fGLContext->caps()); fHWTextureUnitBindings.reset(this->numTextureUnits()); @@ -1047,7 +1051,8 @@ void GrGLGpu::uploadTexData(SkISize texDims, } } -bool GrGLGpu::uploadCompressedTexData(GrGLFormat format, +bool GrGLGpu::uploadCompressedTexData(SkImage::CompressionType compressionType, + GrGLFormat format, SkISize dimensions, GrMipMapped mipMapped, GrGLenum target, @@ -1061,7 +1066,6 @@ bool GrGLGpu::uploadCompressedTexData(GrGLFormat format, return false; } - SkImage::CompressionType compressionType = GrGLFormatToCompressionType(format); SkASSERT(compressionType != SkImage::CompressionType::kNone); bool useTexStorage = caps.formatSupportsTexStorage(format); @@ -1286,14 +1290,27 @@ sk_sp GrGLGpu::onCreateTexture(SkISize dimensions, GrGLTextureParameters::SamplerOverriddenState initialState; GrGLTexture::Desc texDesc; texDesc.fSize = dimensions; - texDesc.fTarget = GR_GL_TEXTURE_2D; + switch (format.textureType()) { + case GrTextureType::kExternal: + case GrTextureType::kNone: + return nullptr; + case GrTextureType::k2D: + texDesc.fTarget = GR_GL_TEXTURE_2D; + break; + case GrTextureType::kRectangle: + if (mipLevelCount > 1 || !this->glCaps().rectangleTextureSupport()) { + return nullptr; + } + texDesc.fTarget = GR_GL_TEXTURE_RECTANGLE; + break; + } texDesc.fFormat = format.asGLFormat(); texDesc.fOwnership = GrBackendObjectOwnership::kOwned; SkASSERT(texDesc.fFormat != GrGLFormat::kUnknown); SkASSERT(!GrGLFormatIsCompressed(texDesc.fFormat)); - texDesc.fID = this->createTexture2D(dimensions, texDesc.fFormat, renderable, &initialState, - mipLevelCount); + texDesc.fID = this->createTexture(dimensions, texDesc.fFormat, texDesc.fTarget, renderable, + &initialState, mipLevelCount); if (!texDesc.fID) { return return_null_texture(); @@ -1346,9 +1363,9 @@ sk_sp GrGLGpu::onCreateTexture(SkISize dimensions, } fHWBoundRenderTargetUniqueID.makeInvalid(); } else { - this->bindTextureToScratchUnit(GR_GL_TEXTURE_2D, tex->textureID()); + this->bindTextureToScratchUnit(texDesc.fTarget, tex->textureID()); static constexpr SkColor4f kZeroColor = {0, 0, 0, 0}; - this->uploadColorToTex(texDesc.fFormat, texDesc.fSize, GR_GL_TEXTURE_2D, kZeroColor, + this->uploadColorToTex(texDesc.fFormat, texDesc.fSize, texDesc.fTarget, kZeroColor, levelClearMask); } } @@ -1365,13 +1382,15 @@ sk_sp GrGLGpu::onCreateCompressedTexture(SkISize dimensions, if (isProtected == GrProtected::kYes) { return nullptr; } + SkImage::CompressionType compression = GrBackendFormatToCompressionType(format); + GrGLTextureParameters::SamplerOverriddenState initialState; GrGLTexture::Desc desc; desc.fSize = dimensions; desc.fTarget = GR_GL_TEXTURE_2D; desc.fOwnership = GrBackendObjectOwnership::kOwned; desc.fFormat = format.asGLFormat(); - desc.fID = this->createCompressedTexture2D(desc.fSize, desc.fFormat, + desc.fID = this->createCompressedTexture2D(desc.fSize, compression, desc.fFormat, mipMapped, &initialState, data, dataSize); if (!desc.fID) { @@ -1408,16 +1427,16 @@ GrBackendTexture GrGLGpu::onCreateCompressedBackendTexture( return {}; } + SkImage::CompressionType compression = GrBackendFormatToCompressionType(format); + const char* rawData = nullptr; size_t rawDataSize = 0; SkAutoMalloc am; - SkASSERT(!data || data->type() != BackendTextureData::Type::kPixmaps); if (data && data->type() == BackendTextureData::Type::kCompressed) { rawData = (const char*) data->compressedData(); rawDataSize = data->compressedSize(); } else if (data && data->type() == BackendTextureData::Type::kColor) { - SkImage::CompressionType compression = GrGLFormatToCompressionType(glFormat); SkASSERT(compression != SkImage::CompressionType::kNone); rawDataSize = SkCompressedDataSize(compression, dimensions, nullptr, @@ -1435,7 +1454,7 @@ GrBackendTexture GrGLGpu::onCreateCompressedBackendTexture( info.fTarget = GR_GL_TEXTURE_2D; info.fFormat = GrGLFormatToEnum(glFormat); - info.fID = this->createCompressedTexture2D(dimensions, glFormat, + info.fID = this->createCompressedTexture2D(dimensions, compression, glFormat, mipMapped, &initialState, rawData, rawDataSize); if (!info.fID) { @@ -1488,8 +1507,8 @@ int GrGLGpu::getCompatibleStencilIndex(GrGLFormat format) { // Default to unsupported, set this if we find a stencil format that works. int firstWorkingStencilFormatIndex = -1; - GrGLuint colorID = - this->createTexture2D({kSize, kSize}, format, GrRenderable::kYes, nullptr, 1); + GrGLuint colorID = this->createTexture({kSize, kSize}, format, GR_GL_TEXTURE_2D, + GrRenderable::kYes, nullptr, 1); if (!colorID) { return -1; } @@ -1558,6 +1577,7 @@ int GrGLGpu::getCompatibleStencilIndex(GrGLFormat format) { GrGLuint GrGLGpu::createCompressedTexture2D( SkISize dimensions, + SkImage::CompressionType compression, GrGLFormat format, GrMipMapped mipMapped, GrGLTextureParameters::SamplerOverriddenState* initialState, @@ -1576,7 +1596,7 @@ GrGLuint GrGLGpu::createCompressedTexture2D( *initialState = set_initial_texture_params(this->glInterface(), GR_GL_TEXTURE_2D); if (data) { - if (!this->uploadCompressedTexData(format, dimensions, mipMapped, + if (!this->uploadCompressedTexData(compression, format, dimensions, mipMapped, GR_GL_TEXTURE_2D, data, dataSize)) { GL_CALL(DeleteTextures(1, &id)); return 0; @@ -1586,11 +1606,12 @@ GrGLuint GrGLGpu::createCompressedTexture2D( return id; } -GrGLuint GrGLGpu::createTexture2D(SkISize dimensions, - GrGLFormat format, - GrRenderable renderable, - GrGLTextureParameters::SamplerOverriddenState* initialState, - int mipLevelCount) { +GrGLuint GrGLGpu::createTexture(SkISize dimensions, + GrGLFormat format, + GrGLenum target, + GrRenderable renderable, + GrGLTextureParameters::SamplerOverriddenState* initialState, + int mipLevelCount) { SkASSERT(format != GrGLFormat::kUnknown); SkASSERT(!GrGLFormatIsCompressed(format)); @@ -1601,17 +1622,17 @@ GrGLuint GrGLGpu::createTexture2D(SkISize dimensions, return 0; } - this->bindTextureToScratchUnit(GR_GL_TEXTURE_2D, id); + this->bindTextureToScratchUnit(target, id); if (GrRenderable::kYes == renderable && this->glCaps().textureUsageSupport()) { // provides a hint about how this texture will be used - GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_USAGE, GR_GL_FRAMEBUFFER_ATTACHMENT)); + GL_CALL(TexParameteri(target, GR_GL_TEXTURE_USAGE, GR_GL_FRAMEBUFFER_ATTACHMENT)); } if (initialState) { - *initialState = set_initial_texture_params(this->glInterface(), GR_GL_TEXTURE_2D); + *initialState = set_initial_texture_params(this->glInterface(), target); } else { - set_initial_texture_params(this->glInterface(), GR_GL_TEXTURE_2D); + set_initial_texture_params(this->glInterface(), target); } GrGLenum internalFormat = this->glCaps().getTexImageOrStorageInternalFormat(format); @@ -1620,9 +1641,8 @@ GrGLuint GrGLGpu::createTexture2D(SkISize dimensions, if (internalFormat) { if (this->glCaps().formatSupportsTexStorage(format)) { auto levelCount = std::max(mipLevelCount, 1); - GrGLenum error = - GL_ALLOC_CALL(TexStorage2D(GR_GL_TEXTURE_2D, levelCount, internalFormat, - dimensions.width(), dimensions.height())); + GrGLenum error = GL_ALLOC_CALL(TexStorage2D(target, levelCount, internalFormat, + dimensions.width(), dimensions.height())); success = (error == GR_GL_NO_ERROR); } else { GrGLenum externalFormat, externalType; @@ -1633,9 +1653,9 @@ GrGLuint GrGLGpu::createTexture2D(SkISize dimensions, const int twoToTheMipLevel = 1 << level; const int currentWidth = std::max(1, dimensions.width() / twoToTheMipLevel); const int currentHeight = std::max(1, dimensions.height() / twoToTheMipLevel); - error = GL_ALLOC_CALL(TexImage2D(GR_GL_TEXTURE_2D, level, internalFormat, - currentWidth, currentHeight, 0, externalFormat, - externalType, nullptr)); + error = GL_ALLOC_CALL(TexImage2D(target, level, internalFormat, currentWidth, + currentHeight, 0, externalFormat, externalType, + nullptr)); } success = (error == GR_GL_NO_ERROR); } @@ -2260,8 +2280,9 @@ void GrGLGpu::onResolveRenderTarget(GrRenderTarget* target, const SkIRect& resol // Apple's extension uses the scissor as the blit bounds. // Passing in kTopLeft_GrSurfaceOrigin will make sure no transformation of the rect // happens inside flushScissor since resolveRect is already in native device coordinates. - this->flushScissor(GrScissorState(resolveRect), rt->width(), rt->height(), - kTopLeft_GrSurfaceOrigin); + GrScissorState scissor(rt->dimensions()); + SkAssertResult(scissor.set(resolveRect)); + this->flushScissor(scissor, rt->width(), rt->height(), kTopLeft_GrSurfaceOrigin); this->disableWindowRectangles(); GL_CALL(ResolveMultisampleFramebuffer()); } else { @@ -3546,16 +3567,29 @@ GrBackendTexture GrGLGpu::onCreateBackendTexture(SkISize dimensions, if (glFormat == GrGLFormat::kUnknown) { return {}; } - - info.fTarget = GR_GL_TEXTURE_2D; + switch (format.textureType()) { + case GrTextureType::kNone: + case GrTextureType::kExternal: + return {}; + case GrTextureType::k2D: + info.fTarget = GR_GL_TEXTURE_2D; + break; + case GrTextureType::kRectangle: + if (!this->glCaps().rectangleTextureSupport() || mipMapped == GrMipMapped::kYes) { + return {}; + } + info.fTarget = GR_GL_TEXTURE_RECTANGLE; + break; + } info.fFormat = GrGLFormatToEnum(glFormat); - info.fID = this->createTexture2D(dimensions, glFormat, renderable, &initialState, numMipLevels); + info.fID = this->createTexture(dimensions, glFormat, info.fTarget, renderable, &initialState, + numMipLevels); if (!info.fID) { return {}; } // Unbind this texture from the scratch texture unit. - this->bindTextureToScratchUnit(GR_GL_TEXTURE_2D, 0); + this->bindTextureToScratchUnit(info.fTarget, 0); auto parameters = sk_make_sp(); // The non-sampler params are still at their default values. @@ -3715,7 +3749,8 @@ GrBackendRenderTarget GrGLGpu::createTestingOnlyBackendRenderTarget(int w, int h this->bindFramebuffer(GR_GL_FRAMEBUFFER, info.fFBOID); if (useTexture) { GrGLTextureParameters::SamplerOverriddenState initialState; - colorID = this->createTexture2D({w, h}, format, GrRenderable::kYes, &initialState, 1); + colorID = this->createTexture({w, h}, format, GR_GL_TEXTURE_2D, GrRenderable::kYes, + &initialState, 1); if (!colorID) { deleteIDs(); return {}; @@ -3831,6 +3866,9 @@ bool GrGLGpu::onSubmitToGpu(bool syncCpu) { // See if any previously inserted finish procs are good to go. fFinishCallbacks.check(); } + if (!this->glCaps().skipErrorChecks()) { + this->clearErrorsAndCheckForOOM(); + } return true; } @@ -3910,6 +3948,7 @@ std::unique_ptr GrGLGpu::wrapBackendSemaphore( } void GrGLGpu::insertSemaphore(GrSemaphore* semaphore) { + SkASSERT(semaphore); GrGLSemaphore* glSem = static_cast(semaphore); GrGLsync sync; @@ -3919,6 +3958,7 @@ void GrGLGpu::insertSemaphore(GrSemaphore* semaphore) { } void GrGLGpu::waitSemaphore(GrSemaphore* semaphore) { + SkASSERT(semaphore); GrGLSemaphore* glSem = static_cast(semaphore); GL_CALL(WaitSync(glSem->sync(), 0, GR_GL_TIMEOUT_IGNORED)); @@ -3928,6 +3968,23 @@ void GrGLGpu::checkFinishProcs() { fFinishCallbacks.check(); } +void GrGLGpu::clearErrorsAndCheckForOOM() { + while (this->getErrorAndCheckForOOM() != GR_GL_NO_ERROR) {} +} + +GrGLenum GrGLGpu::getErrorAndCheckForOOM() { +#if GR_GL_CHECK_ERROR + if (this->glInterface()->checkAndResetOOMed()) { + this->setOOMed(); + } +#endif + GrGLenum error = this->fGLContext->glInterface()->fFunctions.fGetError(); + if (error == GR_GL_OUT_OF_MEMORY) { + this->setOOMed(); + } + return error; +} + void GrGLGpu::deleteSync(GrGLsync sync) const { if (this->glCaps().fenceType() == GrGLCaps::FenceType::kNVFence) { GrGLuint nvFence = SkToUInt(reinterpret_cast(sync)); diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h index c91f9839d7913..0a40333c531e0 100644 --- a/src/gpu/gl/GrGLGpu.h +++ b/src/gpu/gl/GrGLGpu.h @@ -169,6 +169,11 @@ class GrGLGpu final : public GrGpu { void checkFinishProcs() override; + // Calls glGetError() until no errors are reported. Also looks for OOMs. + void clearErrorsAndCheckForOOM(); + // Calls glGetError() once and returns the result. Also looks for an OOM. + GrGLenum getErrorAndCheckForOOM(); + std::unique_ptr prepareTextureForCrossContextUsage(GrTexture*) override; void deleteSync(GrGLsync) const; @@ -255,13 +260,15 @@ class GrGLGpu final : public GrGpu { // returned. On failure, zero is returned. // The texture is populated with |texels|, if it is non-null. // The texture parameters are cached in |initialTexParams|. - GrGLuint createTexture2D(SkISize dimensions, - GrGLFormat, - GrRenderable, - GrGLTextureParameters::SamplerOverriddenState*, - int mipLevelCount); + GrGLuint createTexture(SkISize dimensions, + GrGLFormat, + GrGLenum target, + GrRenderable, + GrGLTextureParameters::SamplerOverriddenState*, + int mipLevelCount); GrGLuint createCompressedTexture2D(SkISize dimensions, + SkImage::CompressionType compression, GrGLFormat, GrMipMapped, GrGLTextureParameters::SamplerOverriddenState*, @@ -445,7 +452,8 @@ class GrGLGpu final : public GrGpu { // Helper for onCreateCompressedTexture. Compressed textures are read-only so we only use this // to populate a new texture. Returns false if we failed to create and upload the texture. - bool uploadCompressedTexData(GrGLFormat, + bool uploadCompressedTexData(SkImage::CompressionType compressionType, + GrGLFormat, SkISize dimensions, GrMipMapped, GrGLenum target, diff --git a/src/gpu/gl/GrGLInterfaceAutogen.cpp b/src/gpu/gl/GrGLInterfaceAutogen.cpp index c465fe618c0b5..c4f61ffe9f734 100644 --- a/src/gpu/gl/GrGLInterfaceAutogen.cpp +++ b/src/gpu/gl/GrGLInterfaceAutogen.cpp @@ -19,6 +19,54 @@ GrGLInterface::GrGLInterface() { fStandard = kNone_GrGLStandard; } +#if GR_GL_CHECK_ERROR +static const char* get_error_string(GrGLenum err) { + switch (err) { + case GR_GL_NO_ERROR: + return ""; + case GR_GL_INVALID_ENUM: + return "Invalid Enum"; + case GR_GL_INVALID_VALUE: + return "Invalid Value"; + case GR_GL_INVALID_OPERATION: + return "Invalid Operation"; + case GR_GL_OUT_OF_MEMORY: + return "Out of Memory"; + case GR_GL_CONTEXT_LOST: + return "Context Lost"; + } + return "Unknown"; +} + +GrGLenum GrGLInterface::checkError(const char* location, const char* call) const { + GrGLenum error = fFunctions.fGetError(); + if (error != GR_GL_NO_ERROR && !fSuppressErrorLogging) { + SkDebugf("---- glGetError 0x%x(%s)", error, get_error_string(error)); + if (location) { + SkDebugf(" at\n\t%s", location); + } + if (call) { + SkDebugf("\n\t\t%s", call); + } + SkDebugf("\n"); + if (error == GR_GL_OUT_OF_MEMORY) { + fOOMed = true; + } + } + return error; +} + +bool GrGLInterface::checkAndResetOOMed() const { + if (fOOMed) { + fOOMed = false; + return true; + } + return false; +} + +void GrGLInterface::suppressErrorLogging() { fSuppressErrorLogging = true; } +#endif + #define RETURN_FALSE_INTERFACE \ SkDEBUGF("%s:%d GrGLInterface::validate() failed.\n", __FILE__, __LINE__); \ return false diff --git a/src/gpu/gl/GrGLOpsRenderPass.cpp b/src/gpu/gl/GrGLOpsRenderPass.cpp index 737d69b8ca4b8..0d2a801ed908d 100644 --- a/src/gpu/gl/GrGLOpsRenderPass.cpp +++ b/src/gpu/gl/GrGLOpsRenderPass.cpp @@ -8,7 +8,6 @@ #include "src/gpu/gl/GrGLOpsRenderPass.h" #include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrProgramInfo.h" #include "src/gpu/GrRenderTargetPriv.h" diff --git a/src/gpu/gl/GrGLPathRendering.cpp b/src/gpu/gl/GrGLPathRendering.cpp index a787b8d0d4ed9..8beb34b5b6bd6 100644 --- a/src/gpu/gl/GrGLPathRendering.cpp +++ b/src/gpu/gl/GrGLPathRendering.cpp @@ -7,6 +7,7 @@ #include "include/core/SkStream.h" #include "include/core/SkTypeface.h" +#include "src/core/SkMatrixPriv.h" #include "src/gpu/GrProgramInfo.h" #include "src/gpu/GrRenderTargetProxy.h" #include "src/gpu/gl/GrGLGpu.h" diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp index 17938d42a99b4..55a91208d9c10 100644 --- a/src/gpu/gl/GrGLProgram.cpp +++ b/src/gpu/gl/GrGLProgram.cpp @@ -5,7 +5,6 @@ * found in the LICENSE file. */ -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrPathProcessor.h" #include "src/gpu/GrPipeline.h" #include "src/gpu/GrProcessor.h" @@ -117,8 +116,7 @@ void GrGLProgram::updateUniforms(const GrRenderTarget* renderTarget, // We must bind to texture units in the same order in which we set the uniforms in // GrGLProgramDataManager. That is, we bind textures for processors in this order: // primProc, fragProcs, XP. - GrFragmentProcessor::PipelineCoordTransformRange range(programInfo.pipeline()); - fPrimitiveProcessor->setData(fProgramDataManager, programInfo.primProc(), range); + fPrimitiveProcessor->setData(fProgramDataManager, programInfo.primProc()); GrFragmentProcessor::CIter fpIter(programInfo.pipeline()); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); diff --git a/src/gpu/gl/GrGLUniformHandler.h b/src/gpu/gl/GrGLUniformHandler.h index 9263cab39abb0..607835b3f75be 100644 --- a/src/gpu/gl/GrGLUniformHandler.h +++ b/src/gpu/gl/GrGLUniformHandler.h @@ -34,6 +34,9 @@ class GrGLUniformHandler : public GrGLSLUniformHandler { UniformInfo& uniform(int idx) override { return fUniforms.item(idx); } + const UniformInfo& uniform(int idx) const override { + return fUniforms.item(idx); + } private: explicit GrGLUniformHandler(GrGLSLProgramBuilder* program) diff --git a/src/gpu/gl/GrGLUtil.cpp b/src/gpu/gl/GrGLUtil.cpp index 04ce205096cb6..fc4781d281410 100644 --- a/src/gpu/gl/GrGLUtil.cpp +++ b/src/gpu/gl/GrGLUtil.cpp @@ -12,46 +12,6 @@ #include "src/gpu/gl/GrGLUtil.h" #include -void GrGLClearErr(const GrGLInterface* gl) { - while (GR_GL_NO_ERROR != gl->fFunctions.fGetError()) {} -} - -namespace { -const char *get_error_string(uint32_t err) { - switch (err) { - case GR_GL_NO_ERROR: - return ""; - case GR_GL_INVALID_ENUM: - return "Invalid Enum"; - case GR_GL_INVALID_VALUE: - return "Invalid Value"; - case GR_GL_INVALID_OPERATION: - return "Invalid Operation"; - case GR_GL_OUT_OF_MEMORY: - return "Out of Memory"; - case GR_GL_CONTEXT_LOST: - return "Context Lost"; - } - return "Unknown"; -} -} - -void GrGLCheckErr(const GrGLInterface* gl, - const char* location, - const char* call) { - uint32_t err = GR_GL_GET_ERROR(gl); - if (GR_GL_NO_ERROR != err) { - SkDebugf("---- glGetError 0x%x(%s)", err, get_error_string(err)); - if (location) { - SkDebugf(" at\n\t%s", location); - } - if (call) { - SkDebugf("\n\t\t%s", call); - } - SkDebugf("\n"); - } -} - /////////////////////////////////////////////////////////////////////////////// #if GR_GL_LOG_CALLS @@ -584,6 +544,8 @@ std::tuple GrGLGetANGLEInf } } else if (strstr(rendererString, "NVIDIA")) { vendor = GrGLANGLEVendor::kNVIDIA; + } else if (strstr(rendererString, "Radeon")) { + vendor = GrGLANGLEVendor::kAMD; } if (strstr(rendererString, "Direct3D11")) { backend = GrGLANGLEBackend::kD3D11; @@ -683,37 +645,3 @@ bool GrGLFormatIsCompressed(GrGLFormat format) { SkUNREACHABLE; } -SkImage::CompressionType GrGLFormatToCompressionType(GrGLFormat format) { - switch (format) { - case GrGLFormat::kCOMPRESSED_ETC1_RGB8: - case GrGLFormat::kCOMPRESSED_RGB8_ETC2: - return SkImage::CompressionType::kETC2_RGB8_UNORM; - case GrGLFormat::kCOMPRESSED_RGB8_BC1: - return SkImage::CompressionType::kBC1_RGB8_UNORM; - case GrGLFormat::kCOMPRESSED_RGBA8_BC1: - return SkImage::CompressionType::kBC1_RGBA8_UNORM; - - case GrGLFormat::kRGBA8: - case GrGLFormat::kR8: - case GrGLFormat::kALPHA8: - case GrGLFormat::kLUMINANCE8: - case GrGLFormat::kBGRA8: - case GrGLFormat::kRGB565: - case GrGLFormat::kRGBA16F: - case GrGLFormat::kR16F: - case GrGLFormat::kLUMINANCE16F: - case GrGLFormat::kRGB8: - case GrGLFormat::kRG8: - case GrGLFormat::kRGB10_A2: - case GrGLFormat::kRGBA4: - case GrGLFormat::kSRGB8_ALPHA8: - case GrGLFormat::kR16: - case GrGLFormat::kRG16: - case GrGLFormat::kRGBA16: - case GrGLFormat::kRG16F: - case GrGLFormat::kUnknown: - return SkImage::CompressionType::kNone; - } - SkUNREACHABLE; -} - diff --git a/src/gpu/gl/GrGLUtil.h b/src/gpu/gl/GrGLUtil.h index bbe9fb3a854cf..08435d0a1ab3c 100644 --- a/src/gpu/gl/GrGLUtil.h +++ b/src/gpu/gl/GrGLUtil.h @@ -158,7 +158,8 @@ enum class GrGLANGLEBackend { enum class GrGLANGLEVendor { kUnknown, kIntel, - kNVIDIA + kNVIDIA, + kAMD }; enum class GrGLANGLERenderer { @@ -256,23 +257,25 @@ void GrGLCheckErr(const GrGLInterface* gl, const char* location, const char* call); -void GrGLClearErr(const GrGLInterface* gl); - //////////////////////////////////////////////////////////////////////////////// /** * Macros for using GrGLInterface to make GL calls */ -// internal macro to conditionally call glGetError based on compile-time and -// run-time flags. +// Conditionally checks glGetError based on compile-time and run-time flags. #if GR_GL_CHECK_ERROR extern bool gCheckErrorGL; - #define GR_GL_CHECK_ERROR_IMPL(IFACE, X) \ - if (gCheckErrorGL) \ - GrGLCheckErr(IFACE, GR_FILE_AND_LINE_STR, #X) +#define GR_GL_CHECK_ERROR_IMPL(IFACE, X) \ + do { \ + if (gCheckErrorGL) { \ + IFACE->checkError(GR_FILE_AND_LINE_STR, #X); \ + } \ + } while (false) #else - #define GR_GL_CHECK_ERROR_IMPL(IFACE, X) +#define GR_GL_CHECK_ERROR_IMPL(IFACE, X) \ + do { \ + } while (false) #endif // internal macro to conditionally log the gl call using SkDebugf based on @@ -315,9 +318,6 @@ void GrGLClearErr(const GrGLInterface* gl); GR_GL_LOG_CALLS_IMPL(X); \ } while (false) -// call glGetError without doing a redundant error check or logging. -#define GR_GL_GET_ERROR(IFACE) (IFACE)->fFunctions.fGetError() - static constexpr GrGLFormat GrGLFormatFromGLEnum(GrGLenum glFormat) { switch (glFormat) { case GR_GL_RGBA8: return GrGLFormat::kRGBA8; @@ -416,9 +416,4 @@ GrGLenum GrToGLStencilFunc(GrStencilTest test); */ bool GrGLFormatIsCompressed(GrGLFormat); -/** - * This will return CompressionType::kNone if the format is uncompressed. - */ -SkImage::CompressionType GrGLFormatToCompressionType(GrGLFormat); - #endif diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.cpp b/src/gpu/gl/builders/GrGLProgramBuilder.cpp index 54535b791d679..5973b89bee06c 100644 --- a/src/gpu/gl/builders/GrGLProgramBuilder.cpp +++ b/src/gpu/gl/builders/GrGLProgramBuilder.cpp @@ -10,12 +10,11 @@ #include "include/gpu/GrContext.h" #include "src/core/SkATrace.h" #include "src/core/SkAutoMalloc.h" -#include "src/core/SkReader32.h" +#include "src/core/SkReadBuffer.h" #include "src/core/SkTraceEvent.h" -#include "src/core/SkWriter32.h" +#include "src/core/SkWriteBuffer.h" #include "src/gpu/GrAutoLocaleSetter.h" #include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrPersistentCacheUtils.h" #include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrShaderCaps.h" @@ -166,16 +165,19 @@ void GrGLProgramBuilder::storeShaderInCache(const SkSL::Program::Inputs& inputs, GrGLsizei length = 0; GL_CALL(GetProgramiv(programID, GL_PROGRAM_BINARY_LENGTH, &length)); if (length > 0) { - SkWriter32 writer; - writer.write32(kGLPB_Tag); + SkBinaryWriteBuffer writer; + writer.writeInt(GrPersistentCacheUtils::kCurrentVersion); + writer.writeUInt(kGLPB_Tag); - writer.writePad(&inputs, sizeof(inputs)); - writer.write32(length); + writer.writePad32(&inputs, sizeof(inputs)); - void* binary = writer.reservePad(length); + SkAutoSMalloc<2048> binary(length); GrGLenum binaryFormat; - GL_CALL(GetProgramBinary(programID, length, &length, &binaryFormat, binary)); - writer.write32(binaryFormat); + GL_CALL(GetProgramBinary(programID, length, &length, &binaryFormat, binary.get())); + + writer.writeUInt(binaryFormat); + writer.writeInt(length); + writer.writePad32(binary.get(), length); auto data = writer.snapshotAsData(); this->gpu()->getContext()->priv().getPersistentCache()->store(*key, *data); @@ -254,7 +256,7 @@ sk_sp GrGLProgramBuilder::finalize(const GrGLPrecompiledProgram* pr usedProgramBinaries = true; } else if (cached) { ATRACE_ANDROID_FRAMEWORK_ALWAYS("cache_hit"); - SkReader32 reader(fCached->data(), fCached->size()); + SkReadBuffer reader(fCached->data(), fCached->size()); SkFourByteTag shaderType = GrPersistentCacheUtils::GetType(&reader); switch (shaderType) { @@ -265,15 +267,18 @@ sk_sp GrGLProgramBuilder::finalize(const GrGLPrecompiledProgram* pr cached = false; break; } - reader.read(&inputs, sizeof(inputs)); - GrGLsizei length = reader.readInt(); + reader.readPad32(&inputs, sizeof(inputs)); + GrGLenum binaryFormat = reader.readUInt(); + GrGLsizei length = reader.readInt(); const void* binary = reader.skip(length); - GrGLenum binaryFormat = reader.readU32(); - GrGLClearErr(this->gpu()->glInterface()); + if (!reader.isValid()) { + break; + } + this->gpu()->clearErrorsAndCheckForOOM(); GR_GL_CALL_NOERRCHECK(this->gpu()->glInterface(), ProgramBinary(programID, binaryFormat, const_cast(binary), length)); - if (GR_GL_GET_ERROR(this->gpu()->glInterface()) == GR_GL_NO_ERROR) { + if (this->gpu()->getErrorAndCheckForOOM() == GR_GL_NO_ERROR) { if (checkLinked) { cached = this->checkLinkStatus(programID, errorHandler, nullptr, nullptr); } @@ -295,11 +300,20 @@ sk_sp GrGLProgramBuilder::finalize(const GrGLPrecompiledProgram* pr case kSKSL_Tag: // SkSL cache hit, this should only happen in tools overriding the generated SkSL - GrPersistentCacheUtils::UnpackCachedShaders(&reader, cached_sksl, &inputs, 1); - for (int i = 0; i < kGrShaderTypeCount; ++i) { - sksl[i] = &cached_sksl[i]; + if (GrPersistentCacheUtils::UnpackCachedShaders(&reader, cached_sksl, &inputs, 1)) { + for (int i = 0; i < kGrShaderTypeCount; ++i) { + sksl[i] = &cached_sksl[i]; + } } break; + + default: + // We got something invalid, so pretend it wasn't there + reader.validate(false); + break; + } + if (!reader.isValid()) { + cached = false; } } if (!usedProgramBinaries) { @@ -376,7 +390,8 @@ sk_sp GrGLProgramBuilder::finalize(const GrGLPrecompiledProgram* pr } SkString tessControlShader = primProc.getTessControlShaderGLSL( - versionAndExtensionDecls.c_str(), *this->shaderCaps()); + fGeometryProcessor.get(), versionAndExtensionDecls.c_str(), fUniformHandler, + *this->shaderCaps()); if (!this->compileAndAttachShaders(tessControlShader.c_str(), programID, GR_GL_TESS_CONTROL_SHADER, &shadersToDelete, errorHandler)) { @@ -385,7 +400,8 @@ sk_sp GrGLProgramBuilder::finalize(const GrGLPrecompiledProgram* pr } SkString tessEvaluationShader = primProc.getTessEvaluationShaderGLSL( - versionAndExtensionDecls.c_str(), *this->shaderCaps()); + fGeometryProcessor.get(), versionAndExtensionDecls.c_str(), fUniformHandler, + *this->shaderCaps()); if (!this->compileAndAttachShaders(tessEvaluationShader.c_str(), programID, GR_GL_TESS_EVALUATION_SHADER, &shadersToDelete, errorHandler)) { @@ -554,7 +570,7 @@ sk_sp GrGLProgramBuilder::createProgram(GrGLuint programID) { bool GrGLProgramBuilder::PrecompileProgram(GrGLPrecompiledProgram* precompiledProgram, GrGLGpu* gpu, const SkData& cachedData) { - SkReader32 reader(cachedData.data(), cachedData.size()); + SkReadBuffer reader(cachedData.data(), cachedData.size()); SkFourByteTag shaderType = GrPersistentCacheUtils::GetType(&reader); if (shaderType != kSKSL_Tag) { // TODO: Support GLSL, and maybe even program binaries, too? @@ -563,13 +579,6 @@ bool GrGLProgramBuilder::PrecompileProgram(GrGLPrecompiledProgram* precompiledPr const GrGLInterface* gl = gpu->glInterface(); auto errorHandler = gpu->getContext()->priv().getShaderErrorHandler(); - GrGLuint programID; - GR_GL_CALL_RET(gl, programID, CreateProgram()); - if (0 == programID) { - return false; - } - - SkTDArray shadersToDelete; SkSL::Program::Settings settings; const GrGLCaps& caps = gpu->glCaps(); @@ -580,7 +589,17 @@ bool GrGLProgramBuilder::PrecompileProgram(GrGLPrecompiledProgram* precompiledPr SkSL::String shaders[kGrShaderTypeCount]; SkSL::Program::Inputs inputs; - GrPersistentCacheUtils::UnpackCachedShaders(&reader, shaders, &inputs, 1, &meta); + if (!GrPersistentCacheUtils::UnpackCachedShaders(&reader, shaders, &inputs, 1, &meta)) { + return false; + } + + GrGLuint programID; + GR_GL_CALL_RET(gl, programID, CreateProgram()); + if (0 == programID) { + return false; + } + + SkTDArray shadersToDelete; auto compileShader = [&](SkSL::Program::Kind kind, const SkSL::String& sksl, GrGLenum type) { SkSL::String glsl; diff --git a/src/gpu/glsl/GrGLSLBlend.cpp b/src/gpu/glsl/GrGLSLBlend.cpp index 645448b0852f6..54921232c781d 100644 --- a/src/gpu/glsl/GrGLSLBlend.cpp +++ b/src/gpu/glsl/GrGLSLBlend.cpp @@ -46,7 +46,7 @@ const char* BlendFuncName(SkBlendMode mode) { SkUNREACHABLE; } -void AppendMode(GrGLSLFragmentBuilder* fsBuilder, +void AppendMode(GrGLSLShaderBuilder* fsBuilder, const char* srcColor, const char* dstColor, const char* outColor, diff --git a/src/gpu/glsl/GrGLSLBlend.h b/src/gpu/glsl/GrGLSLBlend.h index d090e74b57dc8..2b8ecb122b050 100644 --- a/src/gpu/glsl/GrGLSLBlend.h +++ b/src/gpu/glsl/GrGLSLBlend.h @@ -10,7 +10,7 @@ #include "include/core/SkBlendMode.h" -class GrGLSLFragmentBuilder; +class GrGLSLShaderBuilder; namespace GrGLSLBlend { /* @@ -25,7 +25,7 @@ const char* BlendFuncName(SkBlendMode mode); * Appends GLSL code to fsBuilder that assigns a specified blend of the srcColor and dstColor * variables to the outColor variable. */ -void AppendMode(GrGLSLFragmentBuilder* fsBuilder, +void AppendMode(GrGLSLShaderBuilder* fsBuilder, const char* srcColor, const char* dstColor, const char* outColor, diff --git a/src/gpu/glsl/GrGLSLFragmentProcessor.cpp b/src/gpu/glsl/GrGLSLFragmentProcessor.cpp index 90f50c2ef3825..ad9b5ba92d3b9 100644 --- a/src/gpu/glsl/GrGLSLFragmentProcessor.cpp +++ b/src/gpu/glsl/GrGLSLFragmentProcessor.cpp @@ -5,7 +5,6 @@ * found in the LICENSE file. */ -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" #include "src/gpu/GrProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" @@ -17,40 +16,13 @@ void GrGLSLFragmentProcessor::setData(const GrGLSLProgramDataManager& pdman, this->onSetData(pdman, processor); } -SkString GrGLSLFragmentProcessor::invokeChild(int childIndex, const char* inputColor, - EmitArgs& args, SkSL::String skslCoords) { +void GrGLSLFragmentProcessor::emitChildFunction(int childIndex, EmitArgs& args) { + SkASSERT(childIndex >= 0); GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; while (childIndex >= (int) fFunctionNames.size()) { fFunctionNames.emplace_back(); } - // Subtle bug workaround: If an FP (this) has a child, and wishes to sample it, but does not - // want to *force* explicit coord sampling, then the obvious solution is to call it with - // invokeChild and no coords. However, if this FP is then adopted as a child of another FP that - // does want to sample with explicit coords, that property is propagated (recursively) to all - // children, and we need to supply explicit coords. So we propagate our own "_coords" (this is - // the name of our explicit coords parameter generated in the helper function). - if (args.fFp.isSampledWithExplicitCoords() && skslCoords.length() == 0) { - skslCoords = "_coords"; - } - - const GrFragmentProcessor& childProc = args.fFp.childProcessor(childIndex); - - // If the fragment processor is invoked with overridden coordinates, it must *always* be invoked - // with overridden coords. - SkASSERT(childProc.isSampledWithExplicitCoords() == !skslCoords.empty()); - - if (skslCoords.length() == 0) { - switch (childProc.sampleMatrix().fKind) { - case SkSL::SampleMatrix::Kind::kMixed: - case SkSL::SampleMatrix::Kind::kVariable: - skslCoords = "_matrix"; - break; - default: - break; - } - } - // Emit the child's helper function if this is the first time we've seen a call if (fFunctionNames[childIndex].size() == 0) { TransformedCoordVars coordVars = args.fTransformedCoords.childInputs(childIndex); @@ -59,56 +31,109 @@ SkString GrGLSLFragmentProcessor::invokeChild(int childIndex, const char* inputC EmitArgs childArgs(fragBuilder, args.fUniformHandler, args.fShaderCaps, - childProc, + args.fFp.childProcessor(childIndex), "_output", "_input", + "_coords", coordVars, textureSamplers); fFunctionNames[childIndex] = fragBuilder->writeProcessorFunction(this->childProcessor(childIndex), childArgs); } +} - // Produce a string containing the call to the helper function - SkString result = SkStringPrintf("%s(%s", fFunctionNames[childIndex].c_str(), - inputColor ? inputColor : "half4(1)"); - if (skslCoords.length()) { - result.appendf(", %s", skslCoords.c_str()); +SkString GrGLSLFragmentProcessor::invokeChild(int childIndex, const char* inputColor, + EmitArgs& args, SkSL::String skslCoords) { + SkASSERT(childIndex >= 0); + this->emitChildFunction(childIndex, args); + + if (skslCoords.empty()) { + // Empty coords means passing through the coords of the parent + skslCoords = args.fSampleCoord; + } + + const GrFragmentProcessor& childProc = args.fFp.childProcessor(childIndex); + + if (childProc.isSampledWithExplicitCoords()) { + // The child's function takes a half4 color and a float2 coordinate + return SkStringPrintf("%s(%s, %s)", fFunctionNames[childIndex].c_str(), + inputColor ? inputColor : "half4(1)", + skslCoords.c_str()); + } else { + // The child's function just takes a color. We should only get here for a call to sample + // without explicit coordinates. Assert that the child has no sample matrix and skslCoords + // is _coords (a uniform matrix sample call would go through invokeChildWithMatrix, and if + // a child was sampled with sample(matrix) and sample(), it should have been flagged as + // variable and hit the branch above). + SkASSERT(skslCoords == args.fSampleCoord && !childProc.sampleUsage().hasMatrix()); + return SkStringPrintf("%s(%s)", fFunctionNames[childIndex].c_str(), + inputColor ? inputColor : "half4(1)"); } - result.append(")"); - return result; } SkString GrGLSLFragmentProcessor::invokeChildWithMatrix(int childIndex, const char* inputColor, EmitArgs& args, SkSL::String skslMatrix) { - GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - while (childIndex >= (int) fFunctionNames.size()) { - fFunctionNames.emplace_back(); - } + SkASSERT(childIndex >= 0); + this->emitChildFunction(childIndex, args); const GrFragmentProcessor& childProc = args.fFp.childProcessor(childIndex); + SkASSERT(childProc.sampleUsage().hasMatrix()); + + // Since this is uniform, the provided sksl expression should exactly match the expression + // stored on the FP, or it should match the mangled uniform name. + if (skslMatrix.empty()) { + // Empty matrix expression replaces with the sample matrix expression stored on the FP, but + // that is only valid for uniform sampled FPs + SkASSERT(childProc.sampleUsage().hasUniformMatrix()); + skslMatrix.assign(childProc.sampleUsage().fExpression); + } - // Emit the child's helper function if this is the first time we've seen a call - if (fFunctionNames[childIndex].size() == 0) { - TransformedCoordVars coordVars = args.fTransformedCoords.childInputs(childIndex); - TextureSamplers textureSamplers = args.fTexSamplers.childInputs(childIndex); - - EmitArgs childArgs(fragBuilder, - args.fUniformHandler, - args.fShaderCaps, - childProc, - "_output", - "_input", - coordVars, - textureSamplers); - fFunctionNames[childIndex] = - fragBuilder->writeProcessorFunction(this->childProcessor(childIndex), childArgs); + if (childProc.sampleUsage().hasUniformMatrix()) { + // Attempt to resolve the uniform name from the raw name stored in the sample usage. + // Since this is uniform, the provided expression better match what was given to the FP. + SkASSERT(childProc.sampleUsage().fExpression == skslMatrix); + GrShaderVar uniform = args.fUniformHandler->getUniformMapping( + args.fFp, SkString(childProc.sampleUsage().fExpression)); + if (uniform.getType() != kVoid_GrSLType) { + // Found the uniform, so replace the expression with the actual uniform name + SkASSERT(uniform.getType() == kFloat3x3_GrSLType); + skslMatrix = uniform.getName().c_str(); + } // else assume it's a constant expression } - // Produce a string containing the call to the helper function - return SkStringPrintf("%s(%s, %s)", fFunctionNames[childIndex].c_str(), - inputColor ? inputColor : "half4(1)", - skslMatrix.c_str()); + // Produce a string containing the call to the helper function. sample(matrix) is special where + // the provided skslMatrix expression means that the child FP should be invoked with coords + // equal to matrix * parent coords. However, if matrix is a uniform expression AND the parent + // coords were produced by uniform transforms, then this expression is lifted to a vertex + // shader and is stored in a varying. In that case, childProc will not have a variable sample + // matrix and will not be sampled explicitly, so its function signature will not take in coords. + // + // In all other cases, we need to insert sksl to compute matrix * parent coords and then invoke + // the function. + if (childProc.isSampledWithExplicitCoords()) { + // Only check perspective for this specific matrix transform, not the aggregate FP property. + // Any parent perspective will have already been applied when evaluated in the FS. + if (childProc.sampleUsage().fHasPerspective) { + return SkStringPrintf("%s(%s, proj((%s) * %s.xy1))", fFunctionNames[childIndex].c_str(), + inputColor ? inputColor : "half4(1)", skslMatrix.c_str(), + args.fSampleCoord); + } else { + return SkStringPrintf("%s(%s, ((%s) * %s.xy1).xy)", + fFunctionNames[childIndex].c_str(), + inputColor ? inputColor : "half4(1)", + skslMatrix.c_str(), args.fSampleCoord); + } + } else { + // A variable matrix expression should mark the child as explicitly sampled. A no-op + // matrix should match sample(color), not sample(color, matrix). + SkASSERT(childProc.sampleUsage().hasUniformMatrix()); + + // Since this is uniform and not explicitly sampled, it's transform has been promoted to + // the vertex shader and the signature doesn't take a float2 coord. + return SkStringPrintf("%s(%s)", fFunctionNames[childIndex].c_str(), + inputColor ? inputColor : "half4(1)"); + } } ////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/glsl/GrGLSLFragmentProcessor.h b/src/gpu/glsl/GrGLSLFragmentProcessor.h index 88f3fa7c85428..3408809f7db9b 100644 --- a/src/gpu/glsl/GrGLSLFragmentProcessor.h +++ b/src/gpu/glsl/GrGLSLFragmentProcessor.h @@ -93,6 +93,7 @@ class GrGLSLFragmentProcessor { (e.g. input color is solid white, trans black, known to be opaque, etc.) that allows the processor to communicate back similar known info about its output. + @param localCoord The name of a local coord reference to a float2 variable. @param transformedCoords Fragment shader variables containing the coords computed using each of the GrFragmentProcessor's GrCoordTransforms. @param texSamplers Contains one entry for each TextureSampler of the GrProcessor. @@ -106,6 +107,7 @@ class GrGLSLFragmentProcessor { const GrFragmentProcessor& fp, const char* outputColor, const char* inputColor, + const char* sampleCoord, const TransformedCoordVars& transformedCoordVars, const TextureSamplers& textureSamplers) : fFragBuilder(fragBuilder) @@ -114,6 +116,7 @@ class GrGLSLFragmentProcessor { , fFp(fp) , fOutputColor(outputColor) , fInputColor(inputColor ? inputColor : "half4(1.0)") + , fSampleCoord(sampleCoord) , fTransformedCoords(transformedCoordVars) , fTexSamplers(textureSamplers) {} GrGLSLFPFragmentBuilder* fFragBuilder; @@ -122,6 +125,7 @@ class GrGLSLFragmentProcessor { const GrFragmentProcessor& fFp; const char* fOutputColor; const char* fInputColor; + const char* fSampleCoord; const TransformedCoordVars& fTransformedCoords; const TextureSamplers& fTexSamplers; }; @@ -136,6 +140,8 @@ class GrGLSLFragmentProcessor { GrGLSLFragmentProcessor* childProcessor(int index) const { return fChildProcessors[index]; } + void emitChildFunction(int childIndex, EmitArgs& parentArgs); + // Invoke the child with the default input color (solid white) inline SkString invokeChild(int childIndex, EmitArgs& parentArgs, SkSL::String skslCoords = "") { @@ -143,7 +149,7 @@ class GrGLSLFragmentProcessor { } inline SkString invokeChildWithMatrix(int childIndex, EmitArgs& parentArgs, - SkSL::String skslMatrix) { + SkSL::String skslMatrix = "") { return this->invokeChildWithMatrix(childIndex, nullptr, parentArgs, skslMatrix); } @@ -153,16 +159,28 @@ class GrGLSLFragmentProcessor { * mangled to prevent redefinitions. The returned string contains the output color (as a call * to the child's helper function). It is legal to pass nullptr as inputColor, since all * fragment processors are required to work without an input color. + * + * When skslCoords is empty, invokeChild corresponds to a call to "sample(child, color)" + * in SkSL. When skslCoords is not empty, invokeChild corresponds to a call to + * "sample(child, color, float2)", where skslCoords is an SkSL expression that evaluates to a + * float2 and is passed in as the 3rd argument. */ SkString invokeChild(int childIndex, const char* inputColor, EmitArgs& parentArgs, SkSL::String skslCoords = ""); /** - * As invokeChild, but transforms the coordinates according to the provided matrix. The matrix - * must be a snippet of SkSL code which evaluates to a float3x3. + * As invokeChild, but transforms the coordinates according to the provided matrix. This variant + * corresponds to a call of "sample(child, color, matrix)" in SkSL, where skslMatrix is an SkSL + * expression that evaluates to a float3x3 and is passed in as the 3rd argument. + * + * If skslMatrix is the empty string, then it is automatically replaced with the expression + * attached to the child's SampleUsage object. This is only valid if the child is sampled with + * a const-uniform matrix. If the sample matrix is const-or-uniform, the expression will be + * automatically resolved to the mangled uniform name. */ SkString invokeChildWithMatrix(int childIndex, const char* inputColor, EmitArgs& parentArgs, - SkSL::String skslMatrix); + SkSL::String skslMatrix = ""); + /** * Pre-order traversal of a GLSLFP hierarchy, or of multiple trees with roots in an array of * GLSLFPS. If initialized with an array color followed by coverage processors installed in a diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp index 68ba303dc33c3..c57735d1f0734 100644 --- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp +++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp @@ -67,43 +67,10 @@ uint8_t GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin(GrSurfaceOrigin origin) } GrGLSLFragmentShaderBuilder::GrGLSLFragmentShaderBuilder(GrGLSLProgramBuilder* program) - : GrGLSLFragmentBuilder(program) { + : GrGLSLShaderBuilder(program) { fSubstageIndices.push_back(0); } -SkString GrGLSLFragmentShaderBuilder::ensureCoords2D(const GrShaderVar& coords, - const SkSL::SampleMatrix& matrix) { - SkString result; - if (!coords.getName().size()) { - result = "_coords"; - } else if (kFloat3_GrSLType != coords.getType() && kHalf3_GrSLType != coords.getType()) { - SkASSERT(kFloat2_GrSLType == coords.getType() || kHalf2_GrSLType == coords.getType()); - result = coords.getName(); - } else { - SkString coords2D; - coords2D.printf("%s_ensure2D", coords.c_str()); - this->codeAppendf("\tfloat2 %s = %s.xy / %s.z;", coords2D.c_str(), coords.c_str(), - coords.c_str()); - result = coords2D; - } - switch (matrix.fKind) { - case SkSL::SampleMatrix::Kind::kMixed: - case SkSL::SampleMatrix::Kind::kVariable: { - SkString sampleCoords2D; - sampleCoords2D.printf("%s_sample", coords.c_str()); - this->codeAppendf("\tfloat3 %s_3d = _matrix * %s.xy1;\n", - sampleCoords2D.c_str(), result.c_str()); - this->codeAppendf("\tfloat2 %s = %s_3d.xy / %s_3d.z;\n", - sampleCoords2D.c_str(), sampleCoords2D.c_str(), - sampleCoords2D.c_str()); - result = sampleCoords2D; - break; } - default: - break; - } - return result; -} - const char* GrGLSLFragmentShaderBuilder::sampleOffsets() { SkASSERT(CustomFeatures::kSampleLocations & fProgramBuilder->processorFeatures()); SkDEBUGCODE(fUsedProcessorFeaturesThisStage_DebugOnly |= CustomFeatures::kSampleLocations); @@ -180,56 +147,54 @@ SkString GrGLSLFPFragmentBuilder::writeProcessorFunction(GrGLSLFragmentProcessor GrGLSLFragmentProcessor::EmitArgs& args) { this->onBeforeChildProcEmitCode(); this->nextStage(); - bool hasVariableMatrix = args.fFp.sampleMatrix().fKind == SkSL::SampleMatrix::Kind::kVariable || - args.fFp.sampleMatrix().fKind == SkSL::SampleMatrix::Kind::kMixed; - if (args.fFp.isSampledWithExplicitCoords() && args.fTransformedCoords.count() > 0) { - // we currently only support overriding a single coordinate pair - SkASSERT(args.fTransformedCoords.count() == 1); - const GrShaderVar& transform = args.fTransformedCoords[0].fTransform; - switch (transform.getType()) { - case kFloat4_GrSLType: - // This is a scale+translate, so there's no perspective division needed - this->codeAppendf("_coords = _coords * %s.xz + %s.yw;\n", transform.c_str(), - transform.c_str()); - break; - case kFloat3x3_GrSLType: - this->codeAppend("{\n"); - this->codeAppendf("float3 _coords3 = (%s * _coords.xy1);\n", transform.c_str()); - this->codeAppend("_coords = _coords3.xy / _coords3.z;\n"); - this->codeAppend("}\n"); - break; - default: - SkASSERT(transform.getType() == kVoid_GrSLType); - break; - } - if (args.fFp.sampleMatrix().fKind != SkSL::SampleMatrix::Kind::kNone) { - SkASSERT(!hasVariableMatrix); - this->codeAppend("{\n"); - args.fUniformHandler->writeUniformMappings(args.fFp.sampleMatrix().fOwner, this); - // FIXME This is not a variable matrix, we could key on the matrix type and skip - // perspective division; it may also be worth detecting if it was scale+translate and - // evaluating this similarly to the kFloat4 explicit coord case. - this->codeAppendf("float3 _coords3 = (%s * _coords.xy1);\n", - args.fFp.sampleMatrix().fExpression.c_str()); - this->codeAppend("_coords = _coords3.xy / _coords3.z;\n"); - this->codeAppend("}\n"); + + // An FP's function signature is theoretically always main(half4 color, float2 _coords). + // However, if it is only sampled by a chain of uniform matrix expressions (or legacy coord + // transforms), the value that would have been passed to _coords is lifted to the vertex shader + // and stored in a unique varying. In that case it uses that variable and does not have a + // second actual argument for _coords. + // FIXME: An alternative would be to have all FP functions have a float2 argument, and the + // parent FP invokes it with the varying reference when it's been lifted to the vertex shader. + int paramCount = 2; + GrShaderVar params[] = { GrShaderVar(args.fInputColor, kHalf4_GrSLType), + GrShaderVar(args.fSampleCoord, kFloat2_GrSLType) }; + + if (!args.fFp.isSampledWithExplicitCoords()) { + // Sampled with a uniform matrix expression and/or a legacy coord transform. The actual + // transformation code is emitted in the vertex shader, so this only has to access it. + // Add a float2 _coords variable that maps to the associated varying and replaces the + // absent 2nd argument to the fp's function. + paramCount = 1; + + if (args.fFp.referencesSampleCoords()) { + const GrShaderVar& varying = args.fTransformedCoords[0].fVaryingPoint; + switch(varying.getType()) { + case kFloat2_GrSLType: + // Just point the local coords to the varying + args.fSampleCoord = varying.getName().c_str(); + break; + case kFloat3_GrSLType: + // Must perform the perspective divide in the frag shader based on the varying, + // and since we won't actually have a function parameter for local coords, add + // it as a local variable. + this->codeAppendf("float2 %s = %s.xy / %s.z;\n", args.fSampleCoord, + varying.getName().c_str(), varying.getName().c_str()); + break; + default: + SkDEBUGFAILF("Unexpected varying type for coord: %s %d\n", + varying.getName().c_str(), (int) varying.getType()); + break; + } } - } + } // else the function keeps its two arguments this->codeAppendf("half4 %s;\n", args.fOutputColor); fp->emitCode(args); this->codeAppendf("return %s;\n", args.fOutputColor); - GrShaderVar params[] = { GrShaderVar(args.fInputColor, kHalf4_GrSLType), - hasVariableMatrix ? GrShaderVar("_matrix", kFloat3x3_GrSLType) - : GrShaderVar("_coords", kFloat2_GrSLType) }; + SkString result; - this->emitFunction(kHalf4_GrSLType, - args.fFp.name(), - args.fFp.isSampledWithExplicitCoords() || hasVariableMatrix ? 2 - : 1, - params, - this->code().c_str(), - &result); + this->emitFunction(kHalf4_GrSLType, args.fFp.name(), paramCount, params, + this->code().c_str(), &result); this->deleteStage(); this->onAfterChildProcEmitCode(); return result; @@ -311,13 +276,6 @@ bool GrGLSLFragmentShaderBuilder::primaryColorOutputIsInOut() const { fCustomColorOutput->getTypeModifier() == GrShaderVar::TypeModifier::InOut; } -void GrGLSLFragmentBuilder::declAppendf(const char* fmt, ...) { - va_list argp; - va_start(argp, fmt); - inputs().appendVAList(fmt, argp); - va_end(argp); -} - const char* GrGLSLFragmentShaderBuilder::getSecondaryColorOutputName() const { if (this->hasSecondaryOutput()) { return (fProgramBuilder->shaderCaps()->mustDeclareFragmentShaderOutput()) diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.h b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.h index dedfee1d92cbe..36de7a1be0f41 100644 --- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.h +++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.h @@ -16,37 +16,13 @@ class GrRenderTarget; class GrGLSLVarying; -/* - * This base class encapsulates the common functionality which all processors use to build fragment - * shaders. - */ -class GrGLSLFragmentBuilder : public GrGLSLShaderBuilder { -public: - GrGLSLFragmentBuilder(GrGLSLProgramBuilder* program) : INHERITED(program) {} - virtual ~GrGLSLFragmentBuilder() {} - - /** - * This returns a variable name to access the 2D, perspective correct version of the coords in - * the fragment shader. The passed in coordinates must either be of type kHalf2 or kHalf3. If - * the coordinates are 3-dimensional, it a perspective divide into is emitted into the - * fragment shader (xy / z) to convert them to 2D. - */ - virtual SkString ensureCoords2D(const GrShaderVar&, const SkSL::SampleMatrix& matrix) = 0; - - // TODO: remove this method. - void declAppendf(const char* fmt, ...); - -private: - typedef GrGLSLShaderBuilder INHERITED; -}; - /* * This class is used by fragment processors to build their fragment code. */ -class GrGLSLFPFragmentBuilder : virtual public GrGLSLFragmentBuilder { +class GrGLSLFPFragmentBuilder : virtual public GrGLSLShaderBuilder { public: - /** Appease the compiler; the derived class initializes GrGLSLFragmentBuilder. */ - GrGLSLFPFragmentBuilder() : GrGLSLFragmentBuilder(nullptr) { + /** Appease the compiler; the derived class initializes GrGLSLShaderBuilder. */ + GrGLSLFPFragmentBuilder() : GrGLSLShaderBuilder(nullptr) { // Suppress unused warning error (void) fDummyPadding; } @@ -113,7 +89,7 @@ class GrGLSLFPFragmentBuilder : virtual public GrGLSLFragmentBuilder { // to start aligned, even though clang is already correctly offsetting the individual fields // that require the larger alignment. In the current world, this extra padding is sufficient to // correctly initialize GrGLSLXPFragmentBuilder second. - char fDummyPadding[4]; + char fDummyPadding[4] = {}; }; GR_MAKE_BITFIELD_CLASS_OPS(GrGLSLFPFragmentBuilder::ScopeFlags); @@ -121,10 +97,10 @@ GR_MAKE_BITFIELD_CLASS_OPS(GrGLSLFPFragmentBuilder::ScopeFlags); /* * This class is used by Xfer processors to build their fragment code. */ -class GrGLSLXPFragmentBuilder : virtual public GrGLSLFragmentBuilder { +class GrGLSLXPFragmentBuilder : virtual public GrGLSLShaderBuilder { public: - /** Appease the compiler; the derived class initializes GrGLSLFragmentBuilder. */ - GrGLSLXPFragmentBuilder() : GrGLSLFragmentBuilder(nullptr) {} + /** Appease the compiler; the derived class initializes GrGLSLShaderBuilder. */ + GrGLSLXPFragmentBuilder() : GrGLSLShaderBuilder(nullptr) {} virtual bool hasCustomColorOutput() const = 0; virtual bool hasSecondaryOutput() const = 0; @@ -150,10 +126,6 @@ class GrGLSLFragmentShaderBuilder : public GrGLSLFPFragmentBuilder, public GrGLS GrGLSLFragmentShaderBuilder(GrGLSLProgramBuilder* program); - // Shared GrGLSLFragmentBuilder interface. - virtual SkString ensureCoords2D(const GrShaderVar&, - const SkSL::SampleMatrix& matrix) override; - // GrGLSLFPFragmentBuilder interface. const char* sampleOffsets() override; void maskOffMultisampleCoverage(const char* mask, ScopeFlags) override; diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp index d4eb2af46edda..77c846a2f0e83 100644 --- a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp +++ b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp @@ -7,7 +7,7 @@ #include "src/gpu/glsl/GrGLSLGeometryProcessor.h" -#include "src/gpu/GrCoordTransform.h" +#include "src/core/SkMatrixPriv.h" #include "src/gpu/GrPipeline.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLUniformHandler.h" @@ -20,6 +20,11 @@ void GrGLSLGeometryProcessor::emitCode(EmitArgs& args) { GrGPArgs gpArgs; this->onEmitCode(args, &gpArgs); + if (gpArgs.fLocalCoordVar.getType() != kVoid_GrSLType) { + this->collectTransforms(args.fVertBuilder, args.fVaryingHandler, args.fUniformHandler, + gpArgs.fLocalCoordVar, args.fFPCoordTransformHandler); + } + if (args.fGP.willUseTessellationShaders()) { // Tessellation shaders are temporarily responsible for integrating their own code strings // while we work out full support. @@ -44,11 +49,14 @@ void GrGLSLGeometryProcessor::emitCode(EmitArgs& args) { vBuilder->codeAppendf("sk_Position = float4(%s", gpArgs.fPositionVar.c_str()); switch (gpArgs.fPositionVar.getType()) { case kFloat_GrSLType: - vBuilder->codeAppend(", 0"); // fallthru. + vBuilder->codeAppend(", 0"); + [[fallthrough]]; case kFloat2_GrSLType: - vBuilder->codeAppend(", 0"); // fallthru. + vBuilder->codeAppend(", 0"); + [[fallthrough]]; case kFloat3_GrSLType: - vBuilder->codeAppend(", 1"); // fallthru. + vBuilder->codeAppend(", 1"); + [[fallthrough]]; case kFloat4_GrSLType: vBuilder->codeAppend(");"); break; @@ -59,161 +67,282 @@ void GrGLSLGeometryProcessor::emitCode(EmitArgs& args) { } } -void GrGLSLGeometryProcessor::emitTransforms(GrGLSLVertexBuilder* vb, - GrGLSLVaryingHandler* varyingHandler, - GrGLSLUniformHandler* uniformHandler, - const GrShaderVar& localCoordsVar, - const SkMatrix& localMatrix, - FPCoordTransformHandler* handler) { - // We only require localCoordsVar to be valid if there is a coord transform that needs - // it. CTs on FPs called with explicit coords do not require a local coord. - auto getLocalCoords = [&localCoordsVar, - localCoords = SkString(), - localCoordLength = int()]() mutable { - if (localCoords.isEmpty()) { - localCoordLength = GrSLTypeVecLength(localCoordsVar.getType()); - SkASSERT(GrSLTypeIsFloatType(localCoordsVar.getType())); - SkASSERT(localCoordLength == 2 || localCoordLength == 3); - if (localCoordLength == 3) { - localCoords = localCoordsVar.getName(); - } else { - localCoords.printf("float3(%s, 1)", localCoordsVar.c_str()); - } +void GrGLSLGeometryProcessor::collectTransforms(GrGLSLVertexBuilder* vb, + GrGLSLVaryingHandler* varyingHandler, + GrGLSLUniformHandler* uniformHandler, + const GrShaderVar& localCoordsVar, + FPCoordTransformHandler* handler) { + SkASSERT(localCoordsVar.getType() == kFloat2_GrSLType || + localCoordsVar.getType() == kFloat3_GrSLType); + // Cached varyings produced by parent FPs. If parent FPs introduce transformations, but all + // subsequent children are not transformed, they should share the same varying. + std::unordered_map localCoordsMap; + + GrGLSLVarying baseLocalCoord; + auto getBaseLocalCoord = [&baseLocalCoord, &localCoordsVar, vb, varyingHandler]() { + SkASSERT(GrSLTypeIsFloatType(localCoordsVar.getType())); + if (baseLocalCoord.type() == kVoid_GrSLType) { + // Initialize to the GP provided coordinate + SkString baseLocalCoordName = SkStringPrintf("LocalCoord"); + baseLocalCoord = GrGLSLVarying(localCoordsVar.getType()); + varyingHandler->addVarying(baseLocalCoordName.c_str(), &baseLocalCoord); + vb->codeAppendf("%s = %s;\n", baseLocalCoord.vsOut(), + localCoordsVar.getName().c_str()); } - return std::make_tuple(localCoords, localCoordLength); + return GrShaderVar(SkString(baseLocalCoord.fsIn()), baseLocalCoord.type(), + GrShaderVar::TypeModifier::In); }; - GrShaderVar transformVar; for (int i = 0; *handler; ++*handler, ++i) { - auto [coordTransform, fp] = handler->get(); - // Add uniform for coord transform matrix. - SkString matrix; - if (!fp.isSampledWithExplicitCoords() || !coordTransform.isNoOp()) { - SkString strUniName; - strUniName.printf("CoordTransformMatrix_%d", i); - auto flag = fp.isSampledWithExplicitCoords() ? kFragment_GrShaderFlag - : kVertex_GrShaderFlag; - auto& uni = fInstalledTransforms.push_back(); - if (fp.isSampledWithExplicitCoords() && coordTransform.matrix().isScaleTranslate()) { - uni.fType = kFloat4_GrSLType; + const auto& fp = handler->get(); + // FIXME: GrCoordTransform is used solely as a vehicle for iterating over all FPs that + // require sample coordinates directly. We should make this iteration lighter weight. + + // FPs that use local coordinates need a varying to convey the coordinate. This may be the + // base GP's local coord if transforms have to be computed in the FS, or it may be a unique + // varying that computes the equivalent transformation hierarchy in the VS. + GrShaderVar varyingVar; + + // If the FP references local coords, we need to make sure the vertex shader sets up the + // right transforms or pass-through variables for the FP to evaluate in the fragment shader + if (fp.referencesSampleCoords()) { + if (fp.isSampledWithExplicitCoords()) { + // If the FP local coords are evaluated in the fragment shader, we only need to + // produce the original local coordinate to pass into the root; any other situation, + // the FP will have a 2nd parameter to its function and the caller sends the coords + if (!fp.parent()) { + varyingVar = getBaseLocalCoord(); + } } else { - uni.fType = kFloat3x3_GrSLType; - } - const char* matrixName; - uni.fHandle = - uniformHandler->addUniform(&fp, flag, uni.fType, strUniName.c_str(), - &matrixName); - matrix = matrixName; - transformVar = uniformHandler->getUniformVariable(uni.fHandle); - } else { - // Install a coord transform that will be skipped. - fInstalledTransforms.push_back(); - handler->omitCoordsForCurrCoordTransform(); - continue; - } + // The FP's local coordinates are determined by the uniform transform hierarchy + // from this FP to the root, and can be computed in the vertex shader. + // If this hierarchy would be the identity transform, then we should use the + // original local coordinate. + // NOTE: The actual transform logic is handled in emitTransformCode(), this just + // needs to determine if a unique varying should be added for the FP. + GrShaderVar transformedLocalCoord; + const GrFragmentProcessor* coordOwner = nullptr; - GrShaderVar fsVar; - // Add varying if required and register varying and matrix uniform. - if (!fp.isSampledWithExplicitCoords()) { - auto [localCoordsStr, localCoordLength] = getLocalCoords(); - GrGLSLVarying v(kFloat2_GrSLType); - if (localMatrix.hasPerspective() || coordTransform.matrix().hasPerspective() || - localCoordLength == 3) { - v = GrGLSLVarying(kFloat3_GrSLType); - } - SkString strVaryingName; - strVaryingName.printf("TransformedCoords_%d", i); - varyingHandler->addVarying(strVaryingName.c_str(), &v); - - SkASSERT(fInstalledTransforms.back().fType == kFloat3x3_GrSLType); - if (fp.sampleMatrix().fKind != SkSL::SampleMatrix::Kind::kConstantOrUniform) { - if (v.type() == kFloat2_GrSLType) { - vb->codeAppendf("%s = (%s * %s).xy;", v.vsOut(), matrix.c_str(), - localCoordsStr.c_str()); + const GrFragmentProcessor* node = &fp; + while(node) { + SkASSERT(!node->isSampledWithExplicitCoords() && + !node->sampleUsage().hasVariableMatrix()); + + if (node->sampleUsage().hasUniformMatrix()) { + // We can stop once we hit an FP that adds transforms; this FP can reuse + // that FPs varying (possibly vivifying it if this was the first use). + transformedLocalCoord = localCoordsMap[node]; + coordOwner = node; + break; + } // else intervening FP is an identity transform so skip past it + + node = node->parent(); + } + + if (coordOwner) { + // The FP will use coordOwner's varying; add varying if this was the first use + if (transformedLocalCoord.getType() == kVoid_GrSLType) { + GrGLSLVarying v(kFloat2_GrSLType); + if (GrSLTypeVecLength(localCoordsVar.getType()) == 3 || + coordOwner->hasPerspectiveTransform()) { + v = GrGLSLVarying(kFloat3_GrSLType); + } + SkString strVaryingName; + strVaryingName.printf("TransformedCoords_%d", i); + varyingHandler->addVarying(strVaryingName.c_str(), &v); + + fTransformInfos.push_back({GrShaderVar(v.vsOut(), v.type()), + localCoordsVar, + coordOwner}); + transformedLocalCoord = GrShaderVar(SkString(v.fsIn()), v.type(), + GrShaderVar::TypeModifier::In); + localCoordsMap[coordOwner] = transformedLocalCoord; + } + + varyingVar = transformedLocalCoord; } else { - vb->codeAppendf("%s = %s * %s;", v.vsOut(), matrix.c_str(), - localCoordsStr.c_str()); + // The FP transform hierarchy is the identity, so use the original local coord + varyingVar = getBaseLocalCoord(); } } - fsVar = GrShaderVar(SkString(v.fsIn()), v.type(), GrShaderVar::TypeModifier::In); - fTransformInfos.push_back({ v.vsOut(), v.type(), matrix, localCoordsStr, &fp }); } - handler->specifyCoordsForCurrCoordTransform(transformVar, fsVar); + + if (varyingVar.getType() != kVoid_GrSLType) { + handler->specifyCoordsForCurrCoordTransform(GrShaderVar(), varyingVar); + } else { + handler->omitCoordsForCurrCoordTransform(); + } } } void GrGLSLGeometryProcessor::emitTransformCode(GrGLSLVertexBuilder* vb, GrGLSLUniformHandler* uniformHandler) { - std::unordered_map localCoordsMap; + std::unordered_map localCoordsMap; for (const auto& tr : fTransformInfos) { - switch (tr.fFP->sampleMatrix().fKind) { - case SkSL::SampleMatrix::Kind::kConstantOrUniform: { - SkString localCoords; - localCoordsMap.insert({ tr.fFP, tr.fName }); - if (tr.fFP->sampleMatrix().fBase) { - SkASSERT(localCoordsMap[tr.fFP->sampleMatrix().fBase]); - localCoords = SkStringPrintf("float3(%s, 1)", - localCoordsMap[tr.fFP->sampleMatrix().fBase]); + // If we recorded a transform info, its sample matrix must be uniform + SkASSERT(tr.fFP->sampleUsage().hasUniformMatrix()); + + SkString localCoords; + // Build a concatenated matrix expression that we apply to the root local coord. + // If we have an expression cached from an early FP in the hierarchy chain, we can stop + // there instead of going all the way to the GP. + SkString transformExpression; + + const auto* base = tr.fFP; + while(base) { + GrShaderVar cachedBaseCoord = localCoordsMap[base]; + if (cachedBaseCoord.getType() != kVoid_GrSLType) { + // Can stop here, as this varying already holds all transforms from higher FPs + if (cachedBaseCoord.getType() == kFloat3_GrSLType) { + localCoords = cachedBaseCoord.getName(); } else { - localCoords = tr.fLocalCoords.c_str(); + localCoords = SkStringPrintf("%s.xy1", cachedBaseCoord.getName().c_str()); } - vb->codeAppend("{\n"); - uniformHandler->writeUniformMappings(tr.fFP->sampleMatrix().fOwner, vb); - if (tr.fType == kFloat2_GrSLType) { - vb->codeAppendf("%s = (%s * %s * %s).xy", tr.fName, - tr.fFP->sampleMatrix().fExpression.c_str(), tr.fMatrix.c_str(), - localCoords.c_str()); + break; + } else if (base->sampleUsage().hasUniformMatrix()) { + // The FP knows the matrix expression it's sampled with, but its parent defined + // the uniform (when the expression is not a constant). + GrShaderVar uniform = uniformHandler->liftUniformToVertexShader( + *base->parent(), SkString(base->sampleUsage().fExpression)); + + // Accumulate the base matrix expression as a preConcat + SkString matrix; + if (uniform.getType() != kVoid_GrSLType) { + SkASSERT(uniform.getType() == kFloat3x3_GrSLType); + matrix = uniform.getName(); } else { - SkASSERT(tr.fType == kFloat3_GrSLType); - vb->codeAppendf("%s = %s * %s * %s", tr.fName, - tr.fFP->sampleMatrix().fExpression.c_str(), tr.fMatrix.c_str(), - localCoords.c_str()); + // No uniform found, so presumably this is a constant + matrix = SkString(base->sampleUsage().fExpression); + } + + if (!transformExpression.isEmpty()) { + transformExpression.append(" * "); } - vb->codeAppend(";\n"); - vb->codeAppend("}\n"); + transformExpression.appendf("(%s)", matrix.c_str()); + } else { + // This intermediate FP is just a pass through and doesn't need to be built + // in to the expression, but must visit its parents in case they add transforms + SkASSERT(!base->sampleUsage().hasMatrix() && !base->sampleUsage().fExplicitCoords); } - default: - break; + + base = base->parent(); + } + + if (localCoords.isEmpty()) { + // Must use GP's local coords + if (tr.fLocalCoords.getType() == kFloat3_GrSLType) { + localCoords = tr.fLocalCoords.getName(); + } else { + localCoords = SkStringPrintf("%s.xy1", tr.fLocalCoords.getName().c_str()); + } + } + + vb->codeAppend("{\n"); + if (tr.fOutputCoords.getType() == kFloat2_GrSLType) { + vb->codeAppendf("%s = ((%s) * %s).xy", tr.fOutputCoords.getName().c_str(), + transformExpression.c_str(), + localCoords.c_str()); + } else { + SkASSERT(tr.fOutputCoords.getType() == kFloat3_GrSLType); + vb->codeAppendf("%s = (%s) * %s", tr.fOutputCoords.getName().c_str(), + transformExpression.c_str(), + localCoords.c_str()); } + vb->codeAppend(";\n"); + vb->codeAppend("}\n"); + + localCoordsMap.insert({ tr.fFP, tr.fOutputCoords }); } } -void GrGLSLGeometryProcessor::setTransformDataHelper(const SkMatrix& localMatrix, - const GrGLSLProgramDataManager& pdman, - const CoordTransformRange& transformRange) { - int i = 0; - for (auto [transform, fp] : transformRange) { - if (fInstalledTransforms[i].fHandle.isValid()) { - SkMatrix m; - if (fp.isSampledWithExplicitCoords()) { - m = GetTransformMatrix(transform, SkMatrix::I()); +void GrGLSLGeometryProcessor::setTransform(const GrGLSLProgramDataManager& pdman, + const UniformHandle& uniform, + const SkMatrix& matrix, + SkMatrix* state) const { + if (!uniform.isValid() || (state && SkMatrixPriv::CheapEqual(*state, matrix))) { + // No update needed + return; + } + if (state) { + *state = matrix; + } + if (matrix.isScaleTranslate()) { + // ComputeMatrixKey and writeX() assume the uniform is a float4 (can't assert since nothing + // is exposed on a handle, but should be caught lower down). + float values[4] = {matrix.getScaleX(), matrix.getTranslateX(), + matrix.getScaleY(), matrix.getTranslateY()}; + pdman.set4fv(uniform, 1, values); + } else { + pdman.setSkMatrix(uniform, matrix); + } +} + +static void write_vertex_position(GrGLSLVertexBuilder* vertBuilder, + GrGLSLUniformHandler* uniformHandler, + const GrShaderVar& inPos, + const SkMatrix& matrix, + const char* matrixName, + GrShaderVar* outPos, + GrGLSLGeometryProcessor::UniformHandle* matrixUniform) { + SkASSERT(inPos.getType() == kFloat3_GrSLType || inPos.getType() == kFloat2_GrSLType); + SkString outName = vertBuilder->newTmpVarName(inPos.getName().c_str()); + + if (matrix.isIdentity()) { + // Direct assignment, we won't use a uniform for the matrix. + outPos->set(inPos.getType(), outName.c_str()); + vertBuilder->codeAppendf("float%d %s = %s;", GrSLTypeVecLength(inPos.getType()), + outName.c_str(), inPos.getName().c_str()); + } else { + SkASSERT(matrixUniform); + + bool useCompactTransform = matrix.isScaleTranslate(); + const char* mangledMatrixName; + *matrixUniform = uniformHandler->addUniform(nullptr, + kVertex_GrShaderFlag, + useCompactTransform ? kFloat4_GrSLType + : kFloat3x3_GrSLType, + matrixName, + &mangledMatrixName); + + if (inPos.getType() == kFloat3_GrSLType) { + // A float3 stays a float3 whether or not the matrix adds perspective + if (useCompactTransform) { + vertBuilder->codeAppendf("float3 %s = %s.xz1 * %s + %s.yw0;\n", + outName.c_str(), mangledMatrixName, + inPos.getName().c_str(), mangledMatrixName); } else { - m = GetTransformMatrix(transform, localMatrix); + vertBuilder->codeAppendf("float3 %s = %s * %s;\n", outName.c_str(), + mangledMatrixName, inPos.getName().c_str()); } - if (!SkMatrixPriv::CheapEqual(fInstalledTransforms[i].fCurrentValue, m)) { - if (fInstalledTransforms[i].fType == kFloat4_GrSLType) { - float values[4] = {m.getScaleX(), m.getTranslateX(), - m.getScaleY(), m.getTranslateY()}; - SkASSERT(m.isScaleTranslate()); - pdman.set4fv(fInstalledTransforms[i].fHandle.toIndex(), 1, values); - } else { - SkASSERT(!m.isScaleTranslate() || !fp.isSampledWithExplicitCoords()); - SkASSERT(fInstalledTransforms[i].fType == kFloat3x3_GrSLType); - pdman.setSkMatrix(fInstalledTransforms[i].fHandle.toIndex(), m); - } - fInstalledTransforms[i].fCurrentValue = m; + outPos->set(kFloat3_GrSLType, outName.c_str()); + } else if (matrix.hasPerspective()) { + // A float2 is promoted to a float3 if we add perspective via the matrix + SkASSERT(!useCompactTransform); + vertBuilder->codeAppendf("float3 %s = (%s * %s.xy1);", + outName.c_str(), mangledMatrixName, inPos.getName().c_str()); + outPos->set(kFloat3_GrSLType, outName.c_str()); + } else { + if (useCompactTransform) { + vertBuilder->codeAppendf("float2 %s = %s.xz * %s + %s.yw;\n", + outName.c_str(), mangledMatrixName, + inPos.getName().c_str(), mangledMatrixName); + } else { + vertBuilder->codeAppendf("float2 %s = (%s * %s.xy1).xy;\n", + outName.c_str(), mangledMatrixName, + inPos.getName().c_str()); } + outPos->set(kFloat2_GrSLType, outName.c_str()); } - ++i; } - SkASSERT(i == fInstalledTransforms.count()); } void GrGLSLGeometryProcessor::writeOutputPosition(GrGLSLVertexBuilder* vertBuilder, GrGPArgs* gpArgs, const char* posName) { - gpArgs->fPositionVar.set(kFloat2_GrSLType, "pos2"); - vertBuilder->codeAppendf("float2 %s = %s;", gpArgs->fPositionVar.c_str(), posName); + // writeOutputPosition assumes the incoming pos name points to a float2 variable + GrShaderVar inPos(posName, kFloat2_GrSLType); + write_vertex_position(vertBuilder, nullptr, inPos, SkMatrix::I(), "viewMatrix", + &gpArgs->fPositionVar, nullptr); } void GrGLSLGeometryProcessor::writeOutputPosition(GrGLSLVertexBuilder* vertBuilder, @@ -222,24 +351,17 @@ void GrGLSLGeometryProcessor::writeOutputPosition(GrGLSLVertexBuilder* vertBuild const char* posName, const SkMatrix& mat, UniformHandle* viewMatrixUniform) { - if (mat.isIdentity()) { - gpArgs->fPositionVar.set(kFloat2_GrSLType, "pos2"); - vertBuilder->codeAppendf("float2 %s = %s;", gpArgs->fPositionVar.c_str(), posName); - } else { - const char* viewMatrixName; - *viewMatrixUniform = uniformHandler->addUniform(nullptr, - kVertex_GrShaderFlag, - kFloat3x3_GrSLType, - "uViewM", - &viewMatrixName); - if (!mat.hasPerspective()) { - gpArgs->fPositionVar.set(kFloat2_GrSLType, "pos2"); - vertBuilder->codeAppendf("float2 %s = (%s * float3(%s, 1)).xy;", - gpArgs->fPositionVar.c_str(), viewMatrixName, posName); - } else { - gpArgs->fPositionVar.set(kFloat3_GrSLType, "pos3"); - vertBuilder->codeAppendf("float3 %s = %s * float3(%s, 1);", - gpArgs->fPositionVar.c_str(), viewMatrixName, posName); - } - } + GrShaderVar inPos(posName, kFloat2_GrSLType); + write_vertex_position(vertBuilder, uniformHandler, inPos, mat, "viewMatrix", + &gpArgs->fPositionVar, viewMatrixUniform); +} + +void GrGLSLGeometryProcessor::writeLocalCoord(GrGLSLVertexBuilder* vertBuilder, + GrGLSLUniformHandler* uniformHandler, + GrGPArgs* gpArgs, + GrShaderVar localVar, + const SkMatrix& localMatrix, + UniformHandle* localMatrixUniform) { + write_vertex_position(vertBuilder, uniformHandler, localVar, localMatrix, "localMatrix", + &gpArgs->fLocalCoordVar, localMatrixUniform); } diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.h b/src/gpu/glsl/GrGLSLGeometryProcessor.h index f23bd0e800d70..37e7dc4e28291 100644 --- a/src/gpu/glsl/GrGLSLGeometryProcessor.h +++ b/src/gpu/glsl/GrGLSLGeometryProcessor.h @@ -22,41 +22,29 @@ class GrGLSLGeometryProcessor : public GrGLSLPrimitiveProcessor { /* Any general emit code goes in the base class emitCode. Subclasses override onEmitCode */ void emitCode(EmitArgs&) final; -protected: - // A helper which subclasses can use to upload coord transform matrices in setData(). - void setTransformDataHelper(const SkMatrix& localMatrix, - const GrGLSLProgramDataManager& pdman, - const CoordTransformRange&); - - // Emit transformed local coords from the vertex shader as a uniform matrix and varying per - // coord-transform. localCoordsVar must be a 2- or 3-component vector. If it is 3 then it is - // assumed to be a 2D homogeneous coordinate. - void emitTransforms(GrGLSLVertexBuilder*, - GrGLSLVaryingHandler*, - GrGLSLUniformHandler*, - const GrShaderVar& localCoordsVar, - const SkMatrix& localMatrix, - FPCoordTransformHandler*); - - // Version of above that assumes identity for the local matrix. - void emitTransforms(GrGLSLVertexBuilder* vb, - GrGLSLVaryingHandler* varyingHandler, - GrGLSLUniformHandler* uniformHandler, - const GrShaderVar& localCoordsVar, - FPCoordTransformHandler* handler) { - this->emitTransforms(vb, varyingHandler, uniformHandler, localCoordsVar, SkMatrix::I(), - handler); - } - - // TODO: doc + // Generate the final code for assigning transformed coordinates to the varyings recorded in + // the call to collectTransforms(). This must happen after FP code emission so that it has + // access to any uniforms the FPs registered for uniform sample matrix invocations. void emitTransformCode(GrGLSLVertexBuilder* vb, GrGLSLUniformHandler* uniformHandler) override; +protected: + // A helper for setting the matrix on a uniform handle initialized through + // writeOutputPosition or writeLocalCoord. Automatically handles elided uniforms, + // scale+translate matrices, and state tracking (if provided state pointer is non-null). + void setTransform(const GrGLSLProgramDataManager& pdman, const UniformHandle& uniform, + const SkMatrix& matrix, SkMatrix* state=nullptr) const; + struct GrGPArgs { // Used to specify the output variable used by the GP to store its device position. It can // either be a float2 or a float3 (in order to handle perspective). The subclass sets this // in its onEmitCode(). GrShaderVar fPositionVar; + // Used to specify the variable storing the draw's local coordinates. It can be either a + // float2, float3, or void. It can only be void when no FP needs local coordinates. This + // variable can be an attribute or local variable, but should not itself be a varying. + // GrGLSLGeometryProcessor automatically determines if this must be passed to a FS. + GrShaderVar fLocalCoordVar; }; // Helpers for adding code to write the transformed vertex position. The first simple version @@ -73,32 +61,62 @@ class GrGLSLGeometryProcessor : public GrGLSLPrimitiveProcessor { const SkMatrix& mat, UniformHandle* viewMatrixUniform); - static uint32_t ComputePosKey(const SkMatrix& mat) { + // Helper to transform an existing variable by a given local matrix (e.g. the inverse view + // matrix). It will declare the transformed local coord variable and will set + // GrGPArgs::fLocalCoordVar. + void writeLocalCoord(GrGLSLVertexBuilder*, GrGLSLUniformHandler*, GrGPArgs*, + GrShaderVar localVar, const SkMatrix& localMatrix, + UniformHandle* localMatrixUniform); + + // GPs that use writeOutputPosition and/or writeLocalCoord must incorporate the matrix type + // into their key, and should use this function or one of the other related helpers. + static uint32_t ComputeMatrixKey(const SkMatrix& mat) { if (mat.isIdentity()) { - return 0x0; + return 0b00; + } else if (mat.isScaleTranslate()) { + return 0b01; } else if (!mat.hasPerspective()) { - return 0x01; + return 0b10; } else { - return 0x02; + return 0b11; } } + static uint32_t ComputeMatrixKeys(const SkMatrix& viewMatrix, const SkMatrix& localMatrix) { + return (ComputeMatrixKey(viewMatrix) << kMatrixKeyBits) | ComputeMatrixKey(localMatrix); + } + static uint32_t AddMatrixKeys(uint32_t flags, const SkMatrix& viewMatrix, + const SkMatrix& localMatrix) { + // Shifting to make room for the matrix keys shouldn't lose bits + SkASSERT(((flags << (2 * kMatrixKeyBits)) >> (2 * kMatrixKeyBits)) == flags); + return (flags << (2 * kMatrixKeyBits)) | ComputeMatrixKeys(viewMatrix, localMatrix); + } + static constexpr int kMatrixKeyBits = 2; private: virtual void onEmitCode(EmitArgs&, GrGPArgs*) = 0; - struct TransformUniform { - UniformHandle fHandle; - GrSLType fType = kVoid_GrSLType; - SkMatrix fCurrentValue = SkMatrix::InvalidMatrix(); - }; - - SkTArray fInstalledTransforms; + // Iterates over the FPs in 'handler' to register additional varyings and uniforms to support + // VS-promoted local coord evaluation for the FPs. Subclasses must call this with + // 'localCoordsVar' set to an SkSL variable expression of type 'float2' or 'float3' representing + // the original local coordinates of the draw. + // + // This must happen before FP code emission so that the FPs can find the appropriate varying + // handles they use in place of explicit coord sampling; it is automatically called after + // onEmitCode() returns using the value stored in GpArgs::fLocalCoordVar. + void collectTransforms(GrGLSLVertexBuilder* vb, + GrGLSLVaryingHandler* varyingHandler, + GrGLSLUniformHandler* uniformHandler, + const GrShaderVar& localCoordsVar, + FPCoordTransformHandler* handler); struct TransformInfo { - const char* fName; - GrSLType fType; - SkString fMatrix; - SkString fLocalCoords; + // The vertex-shader output variable to assign the transformed coordinates to + GrShaderVar fOutputCoords; + // The coordinate to be transformed + GrShaderVar fLocalCoords; + // The leaf FP of a transform hierarchy to be evaluated in the vertex shader; + // this FP will be const-uniform sampled, and all of its parents will have a sample matrix + // type of none or const-uniform. const GrFragmentProcessor* fFP; }; SkTArray fTransformInfos; diff --git a/src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp b/src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp index 1a21506502654..7b1264c857945 100644 --- a/src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp +++ b/src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp @@ -7,47 +7,12 @@ #include "src/gpu/glsl/GrGLSLPrimitiveProcessor.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrTexture.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" #include "src/gpu/glsl/GrGLSLProgramBuilder.h" #include "src/gpu/glsl/GrGLSLUniformHandler.h" #include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" -SkMatrix GrGLSLPrimitiveProcessor::GetTransformMatrix(const GrCoordTransform& coordTransform, - const SkMatrix& preMatrix) { - SkMatrix combined; - combined.setConcat(coordTransform.matrix(), preMatrix); - if (coordTransform.normalize()) { - SkMatrixPriv::PostIDiv(&combined, coordTransform.peekTexture()->width(), - coordTransform.peekTexture()->height()); - } - - if (coordTransform.reverseY()) { - if (coordTransform.normalize()) { - // combined.postScale(1,-1); - // combined.postTranslate(0,1); - combined.set(SkMatrix::kMSkewY, - combined[SkMatrix::kMPersp0] - combined[SkMatrix::kMSkewY]); - combined.set(SkMatrix::kMScaleY, - combined[SkMatrix::kMPersp1] - combined[SkMatrix::kMScaleY]); - combined.set(SkMatrix::kMTransY, - combined[SkMatrix::kMPersp2] - combined[SkMatrix::kMTransY]); - } else { - // combined.postScale(1, -1); - // combined.postTranslate(0,1); - SkScalar h = coordTransform.peekTexture()->height(); - combined.set(SkMatrix::kMSkewY, - h * combined[SkMatrix::kMPersp0] - combined[SkMatrix::kMSkewY]); - combined.set(SkMatrix::kMScaleY, - h * combined[SkMatrix::kMPersp1] - combined[SkMatrix::kMScaleY]); - combined.set(SkMatrix::kMTransY, - h * combined[SkMatrix::kMPersp2] - combined[SkMatrix::kMTransY]); - } - } - return combined; -} - void GrGLSLPrimitiveProcessor::setupUniformColor(GrGLSLFPFragmentBuilder* fragBuilder, GrGLSLUniformHandler* uniformHandler, const char* outputName, @@ -71,9 +36,8 @@ GrGLSLPrimitiveProcessor::FPCoordTransformHandler::FPCoordTransformHandler( const GrPipeline& pipeline, SkTArray* transformedCoordVars) : fIter(pipeline), fTransformedCoordVars(transformedCoordVars) {} -std::pair -GrGLSLPrimitiveProcessor::FPCoordTransformHandler::get() const { - return *fIter; +const GrFragmentProcessor& GrGLSLPrimitiveProcessor::FPCoordTransformHandler::get() const { + return (*fIter).second; } GrGLSLPrimitiveProcessor::FPCoordTransformHandler& diff --git a/src/gpu/glsl/GrGLSLPrimitiveProcessor.h b/src/gpu/glsl/GrGLSLPrimitiveProcessor.h index 853b75246dad9..e429d6400089d 100644 --- a/src/gpu/glsl/GrGLSLPrimitiveProcessor.h +++ b/src/gpu/glsl/GrGLSLPrimitiveProcessor.h @@ -25,7 +25,6 @@ class GrGLSLPrimitiveProcessor { public: using UniformHandle = GrGLSLProgramDataManager::UniformHandle; using SamplerHandle = GrGLSLUniformHandler::SamplerHandle; - using CoordTransformRange = GrFragmentProcessor::PipelineCoordTransformRange; struct TransformVar { // The transform as a variable. This may be a kFloat3x3 matrix or a kFloat4 representing @@ -55,7 +54,7 @@ class GrGLSLPrimitiveProcessor { operator bool() const { return (bool)fIter; } // Gets the current coord transform and its owning GrFragmentProcessor. - std::pair get() const; + const GrFragmentProcessor& get() const; FPCoordTransformHandler& operator++(); @@ -141,10 +140,7 @@ class GrGLSLPrimitiveProcessor { * The range will iterate over the transforms in the same order as the TransformHandler passed * to emitCode. */ - virtual void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - const CoordTransformRange&) = 0; - - static SkMatrix GetTransformMatrix(const GrCoordTransform&, const SkMatrix& preMatrix); + virtual void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) = 0; protected: void setupUniformColor(GrGLSLFPFragmentBuilder* fragBuilder, diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp index 851bf4d12ef56..5965514e60e72 100644 --- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp +++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp @@ -195,9 +195,34 @@ SkString GrGLSLProgramBuilder::emitAndInstallFragProc( fp, output.c_str(), input.c_str(), + "_coords", coords, textureSamplers); + if (fp.referencesSampleCoords()) { + // The fp's generated code expects a _coords variable, but we're a the root so _coords + // is just the local coordinates produced by the primitive processor. + SkASSERT(coords.count() > 0); + + const GrShaderVar& varying = coordVars[0].fVaryingPoint; + switch(varying.getType()) { + case kFloat2_GrSLType: + fFS.codeAppendf("float2 %s = %s.xy;\n", + args.fSampleCoord, varying.getName().c_str()); + break; + case kFloat3_GrSLType: + fFS.codeAppendf("float2 %s = %s.xy / %s.z;\n", + args.fSampleCoord, + varying.getName().c_str(), + varying.getName().c_str()); + break; + default: + SkDEBUGFAILF("Unexpected type for varying: %d named %s\n", + (int) varying.getType(), varying.getName().c_str()); + break; + } + } + fragProc->emitCode(args); // We have to check that effects and the code they emit are consistent, ie if an effect diff --git a/src/gpu/glsl/GrGLSLShaderBuilder.cpp b/src/gpu/glsl/GrGLSLShaderBuilder.cpp index 5b274310ff595..e5a9c1448ff29 100644 --- a/src/gpu/glsl/GrGLSLShaderBuilder.cpp +++ b/src/gpu/glsl/GrGLSLShaderBuilder.cpp @@ -20,7 +20,8 @@ GrGLSLShaderBuilder::GrGLSLShaderBuilder(GrGLSLProgramBuilder* program) , fOutputs(GrGLSLProgramBuilder::kVarsPerBlock) , fFeaturesAddedMask(0) , fCodeIndex(kCode) - , fFinalized(false) { + , fFinalized(false) + , fTmpVariableCounter(0) { // We push back some dummy pointers which will later become our header for (int i = 0; i <= kCode; i++) { fShaderStrings.push_back(); diff --git a/src/gpu/glsl/GrGLSLShaderBuilder.h b/src/gpu/glsl/GrGLSLShaderBuilder.h index b69abe89442d3..b766280d23aaa 100644 --- a/src/gpu/glsl/GrGLSLShaderBuilder.h +++ b/src/gpu/glsl/GrGLSLShaderBuilder.h @@ -84,6 +84,13 @@ class GrGLSLShaderBuilder { void declareGlobal(const GrShaderVar&); + // Generates a unique variable name for holding the result of a temporary expression when it's + // not reasonable to just add a new block for scoping. Does not declare anything. + SkString newTmpVarName(const char* suffix) { + int tmpIdx = fTmpVariableCounter++; + return SkStringPrintf("_tmp_%d_%s", tmpIdx, suffix); + } + /** * Called by GrGLSLProcessors to add code to one of the shaders. */ @@ -238,6 +245,9 @@ class GrGLSLShaderBuilder { int fCodeIndex; bool fFinalized; + // Counter for generating unique scratch variable names in a shader. + int fTmpVariableCounter; + friend class GrCCCoverageProcessor; // to access code(). friend class GrGLSLProgramBuilder; friend class GrGLProgramBuilder; diff --git a/src/gpu/glsl/GrGLSLUniformHandler.cpp b/src/gpu/glsl/GrGLSLUniformHandler.cpp index ace0311922fb9..0ceb88345b1f0 100644 --- a/src/gpu/glsl/GrGLSLUniformHandler.cpp +++ b/src/gpu/glsl/GrGLSLUniformHandler.cpp @@ -10,14 +10,28 @@ #include "src/gpu/glsl/GrGLSL.h" #include "src/gpu/glsl/GrGLSLShaderBuilder.h" -void GrGLSLUniformHandler::writeUniformMappings(GrFragmentProcessor* owner, - GrGLSLShaderBuilder* b) { +GrShaderVar GrGLSLUniformHandler::getUniformMapping(const GrFragmentProcessor& owner, + SkString rawName) const { + for (int i = this->numUniforms() - 1; i >= 0; i--) { + const UniformInfo& u = this->uniform(i); + if (u.fOwner == &owner && u.fRawName == rawName) { + return u.fVariable; + } + } + return GrShaderVar(); +} + +GrShaderVar GrGLSLUniformHandler::liftUniformToVertexShader(const GrFragmentProcessor& owner, + SkString rawName) { for (int i = this->numUniforms() - 1; i >= 0; i--) { UniformInfo& u = this->uniform(i); - if (u.fOwner == owner) { + if (u.fOwner == &owner && u.fRawName == rawName) { u.fVisibility |= kVertex_GrShaderFlag; - b->codeAppendf("%s %s = %s;\n", GrGLSLTypeString(u.fVariable.getType()), - u.fRawName.c_str(), u.fVariable.getName().c_str()); + return u.fVariable; } } + // Uniform not found; it's better to return a void variable than to assert because sample + // matrices that are uniform are treated the same for most of the code. When the sample + // matrix expression can't be found as a uniform, we can infer it's a constant. + return GrShaderVar(); } diff --git a/src/gpu/glsl/GrGLSLUniformHandler.h b/src/gpu/glsl/GrGLSLUniformHandler.h index 15fbec98daae7..1cd8d562b3ccf 100644 --- a/src/gpu/glsl/GrGLSLUniformHandler.h +++ b/src/gpu/glsl/GrGLSLUniformHandler.h @@ -82,8 +82,15 @@ class GrGLSLUniformHandler { virtual int numUniforms() const = 0; virtual UniformInfo& uniform(int idx) = 0; + virtual const UniformInfo& uniform(int idx) const = 0; - void writeUniformMappings(GrFragmentProcessor* owner, GrGLSLShaderBuilder* b); + // Looks up a uniform that was added by 'owner' with the given 'rawName' (pre-mangling). + // If there is no such uniform, a variable with type kVoid is returned. + GrShaderVar getUniformMapping(const GrFragmentProcessor& owner, SkString rawName) const; + + // Like getUniformMapping(), but if the uniform is found it also marks it as accessible in + // the vertex shader. + GrShaderVar liftUniformToVertexShader(const GrFragmentProcessor& owner, SkString rawName); protected: struct UniformMapping { diff --git a/src/gpu/glsl/GrGLSLVarying.cpp b/src/gpu/glsl/GrGLSLVarying.cpp index 69ffd6bc3ced4..53687b9bcdfce 100644 --- a/src/gpu/glsl/GrGLSLVarying.cpp +++ b/src/gpu/glsl/GrGLSLVarying.cpp @@ -91,7 +91,7 @@ void GrGLSLVaryingHandler::setNoPerspective() { return; } if (const char* extension = caps.noperspectiveInterpolationExtensionString()) { - int bit = 1 << GrGLSLFragmentBuilder::kNoPerspectiveInterpolation_GLSLPrivateFeature; + int bit = 1 << GrGLSLShaderBuilder::kNoPerspectiveInterpolation_GLSLPrivateFeature; fProgramBuilder->fVS.addFeature(bit, extension); if (fProgramBuilder->primitiveProcessor().willUseGeoShader()) { fProgramBuilder->fGS.addFeature(bit, extension); diff --git a/src/gpu/gradients/GrGradientShader.cpp b/src/gpu/gradients/GrGradientShader.cpp index 59624f2bb7f34..80163e582b074 100644 --- a/src/gpu/gradients/GrGradientShader.cpp +++ b/src/gpu/gradients/GrGradientShader.cpp @@ -21,12 +21,13 @@ #include "src/gpu/gradients/generated/GrTextureGradientColorizer.h" #include "src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColor.h" #include "src/gpu/GrColorInfo.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/SkGr.h" +#include "src/gpu/effects/GrTextureEffect.h" // Intervals smaller than this (that aren't hard stops) on low-precision-only devices force us to // use the textured gradient @@ -64,8 +65,11 @@ static std::unique_ptr make_textured_colorizer(const SkPMCo SkDebugf("Gradient won't draw. Could not create texture."); return nullptr; } - - return GrTextureGradientColorizer::Make(std::move(view)); + // TODO: When we start sampling colorizers with explicit coords rather than using sk_InColor + // the GrTextureEffect can simply be the colorizer. + auto m = SkMatrix::Scale(view.width(), 1.f); + auto te = GrTextureEffect::Make(std::move(view), alphaType, m, GrSamplerState::Filter::kBilerp); + return GrTextureGradientColorizer::Make(std::move(te)); } // Analyze the shader's color stops and positions and chooses an appropriate colorizer to represent diff --git a/src/gpu/gradients/GrLinearGradientLayout.fp b/src/gpu/gradients/GrLinearGradientLayout.fp index ab425a1d2bc1b..758344e2555af 100644 --- a/src/gpu/gradients/GrLinearGradientLayout.fp +++ b/src/gpu/gradients/GrLinearGradientLayout.fp @@ -5,13 +5,7 @@ * found in the LICENSE file. */ -in half3x3 gradientMatrix; - -@coordTransform { - gradientMatrix -} - -void main() { +void main(float2 coord) { // We add a tiny delta to t. When gradient stops are set up so that a hard stop in a vertically // or horizontally oriented gradient falls exactly at a column or row of pixel centers we can // we can get slightly different interpolated t values along the column/row. By adding the delta @@ -19,13 +13,14 @@ void main() { // falls at X.5 - delta then we still could get inconsistent results, but that is much less // likely. crbug.com/938592 // If/when we add filtering of the gradient this can be removed. - half t = half(sk_TransformedCoords2D[0].x) + 0.00001; + half t = half(coord.x) + 0.00001; sk_OutColor = half4(t, 1, 0, 0); // y = 1 for always valid } ////////////////////////////////////////////////////////////////////////////// @header { + #include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/gradients/GrGradientShader.h" #include "src/shaders/gradients/SkLinearGradient.h" } @@ -48,7 +43,8 @@ void main() { return nullptr; } matrix.postConcat(grad.getGradientMatrix()); - return std::unique_ptr(new GrLinearGradientLayout(matrix)); + return GrMatrixEffect::Make( + matrix, std::unique_ptr(new GrLinearGradientLayout())); } } diff --git a/src/gpu/gradients/GrRadialGradientLayout.fp b/src/gpu/gradients/GrRadialGradientLayout.fp index 986a511f51f98..ab521c5e8510a 100644 --- a/src/gpu/gradients/GrRadialGradientLayout.fp +++ b/src/gpu/gradients/GrRadialGradientLayout.fp @@ -5,20 +5,15 @@ * found in the LICENSE file. */ -in half3x3 gradientMatrix; - -@coordTransform { - gradientMatrix -} - -void main() { - half t = half(length(sk_TransformedCoords2D[0])); +void main(float2 coord) { + half t = half(length(coord)); sk_OutColor = half4(t, 1, 0, 0); // y = 1 for always valid } ////////////////////////////////////////////////////////////////////////////// @header { + #include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/gradients/GrGradientShader.h" #include "src/shaders/gradients/SkRadialGradient.h" } @@ -41,7 +36,8 @@ void main() { return nullptr; } matrix.postConcat(grad.getGradientMatrix()); - return std::unique_ptr(new GrRadialGradientLayout(matrix)); + return GrMatrixEffect::Make( + matrix, std::unique_ptr(new GrRadialGradientLayout())); } } diff --git a/src/gpu/gradients/GrSweepGradientLayout.fp b/src/gpu/gradients/GrSweepGradientLayout.fp index 0af99da39fbf9..24b95dd353166 100644 --- a/src/gpu/gradients/GrSweepGradientLayout.fp +++ b/src/gpu/gradients/GrSweepGradientLayout.fp @@ -5,16 +5,10 @@ * found in the LICENSE file. */ -in half3x3 gradientMatrix; - layout(tracked) in uniform half bias; layout(tracked) in uniform half scale; -@coordTransform { - gradientMatrix -} - -void main() { +void main(float2 coord) { // On some devices they incorrectly implement atan2(y,x) as atan(y/x). In actuality it is // atan2(y,x) = 2 * atan(y / (sqrt(x^2 + y^2) + x)). So to work around this we pass in (sqrt(x^2 // + y^2) + x) as the second parameter to atan2 in these cases. We let the device handle the @@ -22,10 +16,9 @@ void main() { // using atan instead. half angle; if (sk_Caps.atan2ImplementedAsAtanYOverX) { - angle = half(2 * atan(-sk_TransformedCoords2D[0].y, - length(sk_TransformedCoords2D[0]) - sk_TransformedCoords2D[0].x)); + angle = half(2 * atan(-coord.y, length(coord) - coord.x)); } else { - angle = half(atan(-sk_TransformedCoords2D[0].y, -sk_TransformedCoords2D[0].x)); + angle = half(atan(-coord.y, -coord.x)); } // 0.1591549430918 is 1/(2*pi), used since atan returns values [-pi, pi] @@ -36,6 +29,7 @@ void main() { ////////////////////////////////////////////////////////////////////////////// @header { + #include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/gradients/GrGradientShader.h" #include "src/shaders/gradients/SkSweepGradient.h" } @@ -58,8 +52,9 @@ void main() { return nullptr; } matrix.postConcat(grad.getGradientMatrix()); - return std::unique_ptr(new GrSweepGradientLayout( - matrix, grad.getTBias(), grad.getTScale())); + return GrMatrixEffect::Make( + matrix, std::unique_ptr(new GrSweepGradientLayout( + grad.getTBias(), grad.getTScale()))); } } diff --git a/src/gpu/gradients/GrTextureGradientColorizer.fp b/src/gpu/gradients/GrTextureGradientColorizer.fp index c2146459f3e84..b8dba025808fa 100644 --- a/src/gpu/gradients/GrTextureGradientColorizer.fp +++ b/src/gpu/gradients/GrTextureGradientColorizer.fp @@ -6,13 +6,9 @@ */ // Should have height = 1px, horizontal axis represents t = 0 to 1 -in uniform sampler2D gradient; - -@samplerParams(gradient) { - GrSamplerState::Filter::kBilerp -} +in fragmentProcessor textureFP; void main() { half2 coord = half2(sk_InColor.x, 0.5); - sk_OutColor = sample(gradient, coord); + sk_OutColor = sample(textureFP, coord); } diff --git a/src/gpu/gradients/GrTwoPointConicalGradientLayout.fp b/src/gpu/gradients/GrTwoPointConicalGradientLayout.fp index 84c2a6f241854..9517e4fbd80a1 100644 --- a/src/gpu/gradients/GrTwoPointConicalGradientLayout.fp +++ b/src/gpu/gradients/GrTwoPointConicalGradientLayout.fp @@ -10,8 +10,6 @@ enum class Type { kRadial, kStrip, kFocal }; -in half3x3 gradientMatrix; - layout(key) in Type type; layout(key) in bool isRadiusIncreasing; @@ -27,18 +25,7 @@ layout(key) in bool isNativelyFocal; // each FP layout(tracked) in uniform half2 focalParams; -@coordTransform { - gradientMatrix -} - -void main() { - // p typed as a float2 is intentional; while a half2 is adequate for most normal cases in the - // two point conic gradient's coordinate system, when the gradient is composed with a local - // perspective matrix, certain out-of-bounds regions become ill behaved on mobile devices. - // On desktops, they are properly clamped after the fact, but on many Adreno GPUs the - // calculations of t and x_t below overflow and produce an incorrect interpolant (which then - // renders the wrong border color sporadically). Increasing precition alleviates that issue. - float2 p = sk_TransformedCoords2D[0]; +void main(float2 p) { float t = -1; half v = 1; // validation flag, set to negative to discard fragment later @@ -125,6 +112,7 @@ void main() { ////////////////////////////////////////////////////////////////////////////// @header { + #include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/gradients/GrGradientShader.h" #include "src/shaders/gradients/SkTwoPointConicalGradient.h" } @@ -216,9 +204,10 @@ void main() { } - return std::unique_ptr(new GrTwoPointConicalGradientLayout( - matrix, grType, isRadiusIncreasing, isFocalOnCircle, isWellBehaved, - isSwapped, isNativelyFocal, focalParams)); + return GrMatrixEffect::Make( + matrix, std::unique_ptr(new GrTwoPointConicalGradientLayout( + grType, isRadiusIncreasing, isFocalOnCircle, isWellBehaved, + isSwapped, isNativelyFocal, focalParams))); } } diff --git a/src/gpu/gradients/generated/GrClampedGradientEffect.cpp b/src/gpu/gradients/generated/GrClampedGradientEffect.cpp index 044165365d9e6..7e309c35b7ed4 100644 --- a/src/gpu/gradients/generated/GrClampedGradientEffect.cpp +++ b/src/gpu/gradients/generated/GrClampedGradientEffect.cpp @@ -38,8 +38,14 @@ class GrGLSLClampedGradientEffect : public GrGLSLFragmentProcessor { SkString _sample1099; _sample1099 = this->invokeChild(_outer.gradLayout_index, args); fragBuilder->codeAppendf( - "half4 t = %s;\nif (!%s && t.y < 0.0) {\n %s = half4(0.0);\n} else if (t.x < " - "0.0) {\n %s = %s;\n} else if (t.x > 1.0) {\n %s = %s;\n} else {", + R"SkSL(half4 t = %s; +if (!%s && t.y < 0.0) { + %s = half4(0.0); +} else if (t.x < 0.0) { + %s = %s; +} else if (t.x > 1.0) { + %s = %s; +} else {)SkSL", _sample1099.c_str(), (_outer.childProcessor(_outer.gradLayout_index).preservesOpaqueInput() ? "true" : "false"), @@ -49,10 +55,16 @@ class GrGLSLClampedGradientEffect : public GrGLSLFragmentProcessor { SkString _input1767("t"); SkString _sample1767; _sample1767 = this->invokeChild(_outer.colorizer_index, _input1767.c_str(), args); - fragBuilder->codeAppendf("\n %s = %s;\n}\n@if (%s) {\n %s.xyz *= %s.w;\n}\n", - args.fOutputColor, _sample1767.c_str(), - (_outer.makePremul ? "true" : "false"), args.fOutputColor, - args.fOutputColor); + fragBuilder->codeAppendf( + R"SkSL( + %s = %s; +} +@if (%s) { + %s.xyz *= %s.w; +} +)SkSL", + args.fOutputColor, _sample1767.c_str(), (_outer.makePremul ? "true" : "false"), + args.fOutputColor, args.fOutputColor); } private: @@ -95,25 +107,17 @@ bool GrClampedGradientEffect::onIsEqual(const GrFragmentProcessor& other) const } GrClampedGradientEffect::GrClampedGradientEffect(const GrClampedGradientEffect& src) : INHERITED(kGrClampedGradientEffect_ClassID, src.optimizationFlags()) - , colorizer_index(src.colorizer_index) - , gradLayout_index(src.gradLayout_index) , leftBorderColor(src.leftBorderColor) , rightBorderColor(src.rightBorderColor) , makePremul(src.makePremul) , colorsAreOpaque(src.colorsAreOpaque) { { - auto clone = src.childProcessor(colorizer_index).clone(); - if (src.childProcessor(colorizer_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); + colorizer_index = + this->cloneAndRegisterChildProcessor(src.childProcessor(src.colorizer_index)); } { - auto clone = src.childProcessor(gradLayout_index).clone(); - if (src.childProcessor(gradLayout_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); + gradLayout_index = + this->cloneAndRegisterChildProcessor(src.childProcessor(src.gradLayout_index)); } } std::unique_ptr GrClampedGradientEffect::clone() const { diff --git a/src/gpu/gradients/generated/GrClampedGradientEffect.h b/src/gpu/gradients/generated/GrClampedGradientEffect.h index 4779cdbb61f8f..c2cc784ce76fe 100644 --- a/src/gpu/gradients/generated/GrClampedGradientEffect.h +++ b/src/gpu/gradients/generated/GrClampedGradientEffect.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrClampedGradientEffect_DEFINED #define GrClampedGradientEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrClampedGradientEffect : public GrFragmentProcessor { public: static std::unique_ptr Make( @@ -55,11 +56,11 @@ class GrClampedGradientEffect : public GrFragmentProcessor { , makePremul(makePremul) , colorsAreOpaque(colorsAreOpaque) { SkASSERT(colorizer); - colorizer_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(colorizer)); + colorizer_index = + this->registerChild(std::move(colorizer), SkSL::SampleUsage::PassThrough()); SkASSERT(gradLayout); - gradLayout_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(gradLayout)); + gradLayout_index = + this->registerChild(std::move(gradLayout), SkSL::SampleUsage::PassThrough()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; diff --git a/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.cpp b/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.cpp index 88b50df48f0d6..323fec5e1bb68 100644 --- a/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.cpp +++ b/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.cpp @@ -45,9 +45,17 @@ class GrGLSLDualIntervalGradientColorizer : public GrGLSLFragmentProcessor { thresholdVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf_GrSLType, "threshold"); fragBuilder->codeAppendf( - "half t = %s.x;\nfloat4 scale, bias;\nif (t < %s) {\n scale = %s;\n bias = " - "%s;\n} else {\n scale = %s;\n bias = %s;\n}\n%s = half4(float(t) * scale + " - "bias);\n", + R"SkSL(half t = %s.x; +float4 scale, bias; +if (t < %s) { + scale = %s; + bias = %s; +} else { + scale = %s; + bias = %s; +} +%s = half4(float(t) * scale + bias); +)SkSL", args.fInputColor, args.fUniformHandler->getUniformCStr(thresholdVar), args.fUniformHandler->getUniformCStr(scale01Var), args.fUniformHandler->getUniformCStr(bias01Var), diff --git a/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.h b/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.h index d8ebc1ef29b1e..a8696618b4feb 100644 --- a/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.h +++ b/src/gpu/gradients/generated/GrDualIntervalGradientColorizer.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrDualIntervalGradientColorizer_DEFINED #define GrDualIntervalGradientColorizer_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrDualIntervalGradientColorizer : public GrFragmentProcessor { public: static std::unique_ptr Make(const SkPMColor4f& c0, diff --git a/src/gpu/gradients/generated/GrLinearGradientLayout.cpp b/src/gpu/gradients/generated/GrLinearGradientLayout.cpp index 2d28b92df0841..69f391f68e303 100644 --- a/src/gpu/gradients/generated/GrLinearGradientLayout.cpp +++ b/src/gpu/gradients/generated/GrLinearGradientLayout.cpp @@ -23,13 +23,11 @@ class GrGLSLLinearGradientLayout : public GrGLSLFragmentProcessor { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrLinearGradientLayout& _outer = args.fFp.cast(); (void)_outer; - auto gradientMatrix = _outer.gradientMatrix; - (void)gradientMatrix; - SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D( - args.fTransformedCoords[0].fVaryingPoint, _outer.sampleMatrix()); fragBuilder->codeAppendf( - "half t = half(%s.x) + 9.9999997473787516e-06;\n%s = half4(t, 1.0, 0.0, 0.0);\n", - sk_TransformedCoords2D_0.c_str(), args.fOutputColor); + R"SkSL(half t = half(%s.x) + 9.9999997473787516e-06; +%s = half4(t, 1.0, 0.0, 0.0); +)SkSL", + args.fSampleCoord, args.fOutputColor); } private: @@ -44,14 +42,11 @@ void GrLinearGradientLayout::onGetGLSLProcessorKey(const GrShaderCaps& caps, bool GrLinearGradientLayout::onIsEqual(const GrFragmentProcessor& other) const { const GrLinearGradientLayout& that = other.cast(); (void)that; - if (gradientMatrix != that.gradientMatrix) return false; return true; } GrLinearGradientLayout::GrLinearGradientLayout(const GrLinearGradientLayout& src) - : INHERITED(kGrLinearGradientLayout_ClassID, src.optimizationFlags()) - , fCoordTransform0(src.fCoordTransform0) - , gradientMatrix(src.gradientMatrix) { - this->addCoordTransform(&fCoordTransform0); + : INHERITED(kGrLinearGradientLayout_ClassID, src.optimizationFlags()) { + this->setUsesSampleCoordsDirectly(); } std::unique_ptr GrLinearGradientLayout::clone() const { return std::unique_ptr(new GrLinearGradientLayout(*this)); @@ -85,5 +80,6 @@ std::unique_ptr GrLinearGradientLayout::Make(const SkLinear return nullptr; } matrix.postConcat(grad.getGradientMatrix()); - return std::unique_ptr(new GrLinearGradientLayout(matrix)); + return GrMatrixEffect::Make(matrix, + std::unique_ptr(new GrLinearGradientLayout())); } diff --git a/src/gpu/gradients/generated/GrLinearGradientLayout.h b/src/gpu/gradients/generated/GrLinearGradientLayout.h index 6ecbeee850c9b..21d68eb8dbdc7 100644 --- a/src/gpu/gradients/generated/GrLinearGradientLayout.h +++ b/src/gpu/gradients/generated/GrLinearGradientLayout.h @@ -10,14 +10,16 @@ **************************************************************************************************/ #ifndef GrLinearGradientLayout_DEFINED #define GrLinearGradientLayout_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" +#include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/gradients/GrGradientShader.h" #include "src/shaders/gradients/SkLinearGradient.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrLinearGradientLayout : public GrFragmentProcessor { public: static std::unique_ptr Make(const SkLinearGradient& gradient, @@ -25,16 +27,12 @@ class GrLinearGradientLayout : public GrFragmentProcessor { GrLinearGradientLayout(const GrLinearGradientLayout& src); std::unique_ptr clone() const override; const char* name() const override { return "LinearGradientLayout"; } - GrCoordTransform fCoordTransform0; - SkMatrix gradientMatrix; private: - GrLinearGradientLayout(SkMatrix gradientMatrix) + GrLinearGradientLayout() : INHERITED(kGrLinearGradientLayout_ClassID, - (OptimizationFlags)kPreservesOpaqueInput_OptimizationFlag) - , fCoordTransform0(gradientMatrix) - , gradientMatrix(gradientMatrix) { - this->addCoordTransform(&fCoordTransform0); + (OptimizationFlags)kPreservesOpaqueInput_OptimizationFlag) { + this->setUsesSampleCoordsDirectly(); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; diff --git a/src/gpu/gradients/generated/GrRadialGradientLayout.cpp b/src/gpu/gradients/generated/GrRadialGradientLayout.cpp index ecf6e742233f0..602a64878cf8d 100644 --- a/src/gpu/gradients/generated/GrRadialGradientLayout.cpp +++ b/src/gpu/gradients/generated/GrRadialGradientLayout.cpp @@ -23,12 +23,11 @@ class GrGLSLRadialGradientLayout : public GrGLSLFragmentProcessor { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrRadialGradientLayout& _outer = args.fFp.cast(); (void)_outer; - auto gradientMatrix = _outer.gradientMatrix; - (void)gradientMatrix; - SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D( - args.fTransformedCoords[0].fVaryingPoint, _outer.sampleMatrix()); - fragBuilder->codeAppendf("half t = half(length(%s));\n%s = half4(t, 1.0, 0.0, 0.0);\n", - sk_TransformedCoords2D_0.c_str(), args.fOutputColor); + fragBuilder->codeAppendf( + R"SkSL(half t = half(length(%s)); +%s = half4(t, 1.0, 0.0, 0.0); +)SkSL", + args.fSampleCoord, args.fOutputColor); } private: @@ -43,14 +42,11 @@ void GrRadialGradientLayout::onGetGLSLProcessorKey(const GrShaderCaps& caps, bool GrRadialGradientLayout::onIsEqual(const GrFragmentProcessor& other) const { const GrRadialGradientLayout& that = other.cast(); (void)that; - if (gradientMatrix != that.gradientMatrix) return false; return true; } GrRadialGradientLayout::GrRadialGradientLayout(const GrRadialGradientLayout& src) - : INHERITED(kGrRadialGradientLayout_ClassID, src.optimizationFlags()) - , fCoordTransform0(src.fCoordTransform0) - , gradientMatrix(src.gradientMatrix) { - this->addCoordTransform(&fCoordTransform0); + : INHERITED(kGrRadialGradientLayout_ClassID, src.optimizationFlags()) { + this->setUsesSampleCoordsDirectly(); } std::unique_ptr GrRadialGradientLayout::clone() const { return std::unique_ptr(new GrRadialGradientLayout(*this)); @@ -88,5 +84,6 @@ std::unique_ptr GrRadialGradientLayout::Make(const SkRadial return nullptr; } matrix.postConcat(grad.getGradientMatrix()); - return std::unique_ptr(new GrRadialGradientLayout(matrix)); + return GrMatrixEffect::Make(matrix, + std::unique_ptr(new GrRadialGradientLayout())); } diff --git a/src/gpu/gradients/generated/GrRadialGradientLayout.h b/src/gpu/gradients/generated/GrRadialGradientLayout.h index 44be21202e456..0584879d0efde 100644 --- a/src/gpu/gradients/generated/GrRadialGradientLayout.h +++ b/src/gpu/gradients/generated/GrRadialGradientLayout.h @@ -10,14 +10,16 @@ **************************************************************************************************/ #ifndef GrRadialGradientLayout_DEFINED #define GrRadialGradientLayout_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" +#include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/gradients/GrGradientShader.h" #include "src/shaders/gradients/SkRadialGradient.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrRadialGradientLayout : public GrFragmentProcessor { public: static std::unique_ptr Make(const SkRadialGradient& gradient, @@ -25,16 +27,12 @@ class GrRadialGradientLayout : public GrFragmentProcessor { GrRadialGradientLayout(const GrRadialGradientLayout& src); std::unique_ptr clone() const override; const char* name() const override { return "RadialGradientLayout"; } - GrCoordTransform fCoordTransform0; - SkMatrix gradientMatrix; private: - GrRadialGradientLayout(SkMatrix gradientMatrix) + GrRadialGradientLayout() : INHERITED(kGrRadialGradientLayout_ClassID, - (OptimizationFlags)kPreservesOpaqueInput_OptimizationFlag) - , fCoordTransform0(gradientMatrix) - , gradientMatrix(gradientMatrix) { - this->addCoordTransform(&fCoordTransform0); + (OptimizationFlags)kPreservesOpaqueInput_OptimizationFlag) { + this->setUsesSampleCoordsDirectly(); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; diff --git a/src/gpu/gradients/generated/GrSingleIntervalGradientColorizer.cpp b/src/gpu/gradients/generated/GrSingleIntervalGradientColorizer.cpp index cc4c82289d07c..4a524a11f965d 100644 --- a/src/gpu/gradients/generated/GrSingleIntervalGradientColorizer.cpp +++ b/src/gpu/gradients/generated/GrSingleIntervalGradientColorizer.cpp @@ -32,10 +32,12 @@ class GrGLSLSingleIntervalGradientColorizer : public GrGLSLFragmentProcessor { kHalf4_GrSLType, "start"); endVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "end"); - fragBuilder->codeAppendf("half t = %s.x;\n%s = (1.0 - t) * %s + t * %s;\n", - args.fInputColor, args.fOutputColor, - args.fUniformHandler->getUniformCStr(startVar), - args.fUniformHandler->getUniformCStr(endVar)); + fragBuilder->codeAppendf( + R"SkSL(half t = %s.x; +%s = (1.0 - t) * %s + t * %s; +)SkSL", + args.fInputColor, args.fOutputColor, args.fUniformHandler->getUniformCStr(startVar), + args.fUniformHandler->getUniformCStr(endVar)); } private: diff --git a/src/gpu/gradients/generated/GrSingleIntervalGradientColorizer.h b/src/gpu/gradients/generated/GrSingleIntervalGradientColorizer.h index 2c808102c9d68..0f01b7ea487f6 100644 --- a/src/gpu/gradients/generated/GrSingleIntervalGradientColorizer.h +++ b/src/gpu/gradients/generated/GrSingleIntervalGradientColorizer.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrSingleIntervalGradientColorizer_DEFINED #define GrSingleIntervalGradientColorizer_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrSingleIntervalGradientColorizer : public GrFragmentProcessor { public: static std::unique_ptr Make(SkPMColor4f start, SkPMColor4f end) { diff --git a/src/gpu/gradients/generated/GrSweepGradientLayout.cpp b/src/gpu/gradients/generated/GrSweepGradientLayout.cpp index cd4653a75ea7d..2f07145385734 100644 --- a/src/gpu/gradients/generated/GrSweepGradientLayout.cpp +++ b/src/gpu/gradients/generated/GrSweepGradientLayout.cpp @@ -23,8 +23,6 @@ class GrGLSLSweepGradientLayout : public GrGLSLFragmentProcessor { GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; const GrSweepGradientLayout& _outer = args.fFp.cast(); (void)_outer; - auto gradientMatrix = _outer.gradientMatrix; - (void)gradientMatrix; auto bias = _outer.bias; (void)bias; auto scale = _outer.scale; @@ -33,16 +31,18 @@ class GrGLSLSweepGradientLayout : public GrGLSLFragmentProcessor { "bias"); scaleVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf_GrSLType, "scale"); - SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D( - args.fTransformedCoords[0].fVaryingPoint, _outer.sampleMatrix()); fragBuilder->codeAppendf( - "half angle;\nif (sk_Caps.atan2ImplementedAsAtanYOverX) {\n angle = half(2.0 * " - "atan(-%s.y, length(%s) - %s.x));\n} else {\n angle = half(atan(-%s.y, " - "-%s.x));\n}\nhalf t = ((angle * 0.15915493667125702 + 0.5) + %s) * %s;\n%s = " - "half4(t, 1.0, 0.0, 0.0);\n", - sk_TransformedCoords2D_0.c_str(), sk_TransformedCoords2D_0.c_str(), - sk_TransformedCoords2D_0.c_str(), sk_TransformedCoords2D_0.c_str(), - sk_TransformedCoords2D_0.c_str(), args.fUniformHandler->getUniformCStr(biasVar), + R"SkSL(half angle; +if (sk_Caps.atan2ImplementedAsAtanYOverX) { + angle = half(2.0 * atan(-%s.y, length(%s) - %s.x)); +} else { + angle = half(atan(-%s.y, -%s.x)); +} +half t = ((angle * 0.15915493667125702 + 0.5) + %s) * %s; +%s = half4(t, 1.0, 0.0, 0.0); +)SkSL", + args.fSampleCoord, args.fSampleCoord, args.fSampleCoord, args.fSampleCoord, + args.fSampleCoord, args.fUniformHandler->getUniformCStr(biasVar), args.fUniformHandler->getUniformCStr(scaleVar), args.fOutputColor); } @@ -76,18 +76,15 @@ void GrSweepGradientLayout::onGetGLSLProcessorKey(const GrShaderCaps& caps, bool GrSweepGradientLayout::onIsEqual(const GrFragmentProcessor& other) const { const GrSweepGradientLayout& that = other.cast(); (void)that; - if (gradientMatrix != that.gradientMatrix) return false; if (bias != that.bias) return false; if (scale != that.scale) return false; return true; } GrSweepGradientLayout::GrSweepGradientLayout(const GrSweepGradientLayout& src) : INHERITED(kGrSweepGradientLayout_ClassID, src.optimizationFlags()) - , fCoordTransform0(src.fCoordTransform0) - , gradientMatrix(src.gradientMatrix) , bias(src.bias) , scale(src.scale) { - this->addCoordTransform(&fCoordTransform0); + this->setUsesSampleCoordsDirectly(); } std::unique_ptr GrSweepGradientLayout::clone() const { return std::unique_ptr(new GrSweepGradientLayout(*this)); @@ -120,6 +117,7 @@ std::unique_ptr GrSweepGradientLayout::Make(const SkSweepGr return nullptr; } matrix.postConcat(grad.getGradientMatrix()); - return std::unique_ptr( - new GrSweepGradientLayout(matrix, grad.getTBias(), grad.getTScale())); + return GrMatrixEffect::Make( + matrix, std::unique_ptr( + new GrSweepGradientLayout(grad.getTBias(), grad.getTScale()))); } diff --git a/src/gpu/gradients/generated/GrSweepGradientLayout.h b/src/gpu/gradients/generated/GrSweepGradientLayout.h index ef7a2ea4918ac..1e4179dee0b21 100644 --- a/src/gpu/gradients/generated/GrSweepGradientLayout.h +++ b/src/gpu/gradients/generated/GrSweepGradientLayout.h @@ -10,14 +10,16 @@ **************************************************************************************************/ #ifndef GrSweepGradientLayout_DEFINED #define GrSweepGradientLayout_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" +#include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/gradients/GrGradientShader.h" #include "src/shaders/gradients/SkSweepGradient.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrSweepGradientLayout : public GrFragmentProcessor { public: static std::unique_ptr Make(const SkSweepGradient& gradient, @@ -25,20 +27,16 @@ class GrSweepGradientLayout : public GrFragmentProcessor { GrSweepGradientLayout(const GrSweepGradientLayout& src); std::unique_ptr clone() const override; const char* name() const override { return "SweepGradientLayout"; } - GrCoordTransform fCoordTransform0; - SkMatrix gradientMatrix; float bias; float scale; private: - GrSweepGradientLayout(SkMatrix gradientMatrix, float bias, float scale) + GrSweepGradientLayout(float bias, float scale) : INHERITED(kGrSweepGradientLayout_ClassID, (OptimizationFlags)kPreservesOpaqueInput_OptimizationFlag) - , fCoordTransform0(gradientMatrix) - , gradientMatrix(gradientMatrix) , bias(bias) , scale(scale) { - this->addCoordTransform(&fCoordTransform0); + this->setUsesSampleCoordsDirectly(); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; diff --git a/src/gpu/gradients/generated/GrTextureGradientColorizer.cpp b/src/gpu/gradients/generated/GrTextureGradientColorizer.cpp index f2b079145de20..cef854eb8c646 100644 --- a/src/gpu/gradients/generated/GrTextureGradientColorizer.cpp +++ b/src/gpu/gradients/generated/GrTextureGradientColorizer.cpp @@ -24,13 +24,15 @@ class GrGLSLTextureGradientColorizer : public GrGLSLFragmentProcessor { const GrTextureGradientColorizer& _outer = args.fFp.cast(); (void)_outer; fragBuilder->codeAppendf( - "half2 coord = half2(%s.x, 0.5);\n%s = sample(%s, float2(coord)).%s;\n", - args.fInputColor, args.fOutputColor, - fragBuilder->getProgramBuilder()->samplerVariable(args.fTexSamplers[0]), - fragBuilder->getProgramBuilder() - ->samplerSwizzle(args.fTexSamplers[0]) - .asString() - .c_str()); + R"SkSL(half2 coord = half2(%s.x, 0.5);)SkSL", args.fInputColor); + SkString _coords327("float2(coord)"); + SkString _sample327; + _sample327 = this->invokeChild(_outer.textureFP_index, args, _coords327.c_str()); + fragBuilder->codeAppendf( + R"SkSL( +%s = %s; +)SkSL", + args.fOutputColor, _sample327.c_str()); } private: @@ -45,18 +47,15 @@ void GrTextureGradientColorizer::onGetGLSLProcessorKey(const GrShaderCaps& caps, bool GrTextureGradientColorizer::onIsEqual(const GrFragmentProcessor& other) const { const GrTextureGradientColorizer& that = other.cast(); (void)that; - if (gradient != that.gradient) return false; return true; } GrTextureGradientColorizer::GrTextureGradientColorizer(const GrTextureGradientColorizer& src) - : INHERITED(kGrTextureGradientColorizer_ClassID, src.optimizationFlags()) - , gradient(src.gradient) { - this->setTextureSamplerCnt(1); + : INHERITED(kGrTextureGradientColorizer_ClassID, src.optimizationFlags()) { + { + textureFP_index = + this->cloneAndRegisterChildProcessor(src.childProcessor(src.textureFP_index)); + } } std::unique_ptr GrTextureGradientColorizer::clone() const { return std::unique_ptr(new GrTextureGradientColorizer(*this)); } -const GrFragmentProcessor::TextureSampler& GrTextureGradientColorizer::onTextureSampler( - int index) const { - return IthTextureSampler(index, gradient); -} diff --git a/src/gpu/gradients/generated/GrTextureGradientColorizer.h b/src/gpu/gradients/generated/GrTextureGradientColorizer.h index 0672b9fdf0d74..507e1a7894016 100644 --- a/src/gpu/gradients/generated/GrTextureGradientColorizer.h +++ b/src/gpu/gradients/generated/GrTextureGradientColorizer.h @@ -10,32 +10,33 @@ **************************************************************************************************/ #ifndef GrTextureGradientColorizer_DEFINED #define GrTextureGradientColorizer_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrTextureGradientColorizer : public GrFragmentProcessor { public: - static std::unique_ptr Make(GrSurfaceProxyView gradient) { + static std::unique_ptr Make( + std::unique_ptr textureFP) { return std::unique_ptr( - new GrTextureGradientColorizer(std::move(gradient))); + new GrTextureGradientColorizer(std::move(textureFP))); } GrTextureGradientColorizer(const GrTextureGradientColorizer& src); std::unique_ptr clone() const override; const char* name() const override { return "TextureGradientColorizer"; } - TextureSampler gradient; + int textureFP_index = -1; private: - GrTextureGradientColorizer(GrSurfaceProxyView gradient) - : INHERITED(kGrTextureGradientColorizer_ClassID, kNone_OptimizationFlags) - , gradient(std::move(gradient), GrSamplerState::Filter::kBilerp) { - this->setTextureSamplerCnt(1); + GrTextureGradientColorizer(std::unique_ptr textureFP) + : INHERITED(kGrTextureGradientColorizer_ClassID, kNone_OptimizationFlags) { + SkASSERT(textureFP); + textureFP_index = this->registerChild(std::move(textureFP), SkSL::SampleUsage::Explicit()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; bool onIsEqual(const GrFragmentProcessor&) const override; - const TextureSampler& onTextureSampler(int) const override; GR_DECLARE_FRAGMENT_PROCESSOR_TEST typedef GrFragmentProcessor INHERITED; }; diff --git a/src/gpu/gradients/generated/GrTiledGradientEffect.cpp b/src/gpu/gradients/generated/GrTiledGradientEffect.cpp index 248e7f9303d31..3d9dc96d92c0d 100644 --- a/src/gpu/gradients/generated/GrTiledGradientEffect.cpp +++ b/src/gpu/gradients/generated/GrTiledGradientEffect.cpp @@ -32,11 +32,20 @@ class GrGLSLTiledGradientEffect : public GrGLSLFragmentProcessor { SkString _sample453; _sample453 = this->invokeChild(_outer.gradLayout_index, args); fragBuilder->codeAppendf( - "half4 t = %s;\nif (!%s && t.y < 0.0) {\n %s = half4(0.0);\n} else {\n @if " - "(%s) {\n half t_1 = t.x - 1.0;\n half tiled_t = (t_1 - 2.0 * " - "floor(t_1 * 0.5)) - 1.0;\n if (sk_Caps.mustDoOpBetweenFloorAndAbs) {\n " - " tiled_t = clamp(tiled_t, -1.0, 1.0);\n }\n t.x = " - "abs(tiled_t);\n } else {\n t.x = fract(t.x);\n }", + R"SkSL(half4 t = %s; +if (!%s && t.y < 0.0) { + %s = half4(0.0); +} else { + @if (%s) { + half t_1 = t.x - 1.0; + half tiled_t = (t_1 - 2.0 * floor(t_1 * 0.5)) - 1.0; + if (sk_Caps.mustDoOpBetweenFloorAndAbs) { + tiled_t = clamp(tiled_t, -1.0, 1.0); + } + t.x = abs(tiled_t); + } else { + t.x = fract(t.x); + })SkSL", _sample453.c_str(), (_outer.childProcessor(_outer.gradLayout_index).preservesOpaqueInput() ? "true" : "false"), @@ -44,10 +53,16 @@ class GrGLSLTiledGradientEffect : public GrGLSLFragmentProcessor { SkString _input1464("t"); SkString _sample1464; _sample1464 = this->invokeChild(_outer.colorizer_index, _input1464.c_str(), args); - fragBuilder->codeAppendf("\n %s = %s;\n}\n@if (%s) {\n %s.xyz *= %s.w;\n}\n", - args.fOutputColor, _sample1464.c_str(), - (_outer.makePremul ? "true" : "false"), args.fOutputColor, - args.fOutputColor); + fragBuilder->codeAppendf( + R"SkSL( + %s = %s; +} +@if (%s) { + %s.xyz *= %s.w; +} +)SkSL", + args.fOutputColor, _sample1464.c_str(), (_outer.makePremul ? "true" : "false"), + args.fOutputColor, args.fOutputColor); } private: @@ -72,24 +87,16 @@ bool GrTiledGradientEffect::onIsEqual(const GrFragmentProcessor& other) const { } GrTiledGradientEffect::GrTiledGradientEffect(const GrTiledGradientEffect& src) : INHERITED(kGrTiledGradientEffect_ClassID, src.optimizationFlags()) - , colorizer_index(src.colorizer_index) - , gradLayout_index(src.gradLayout_index) , mirror(src.mirror) , makePremul(src.makePremul) , colorsAreOpaque(src.colorsAreOpaque) { { - auto clone = src.childProcessor(colorizer_index).clone(); - if (src.childProcessor(colorizer_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); + colorizer_index = + this->cloneAndRegisterChildProcessor(src.childProcessor(src.colorizer_index)); } { - auto clone = src.childProcessor(gradLayout_index).clone(); - if (src.childProcessor(gradLayout_index).isSampledWithExplicitCoords()) { - clone->setSampledWithExplicitCoords(); - } - this->registerChildProcessor(std::move(clone)); + gradLayout_index = + this->cloneAndRegisterChildProcessor(src.childProcessor(src.gradLayout_index)); } } std::unique_ptr GrTiledGradientEffect::clone() const { diff --git a/src/gpu/gradients/generated/GrTiledGradientEffect.h b/src/gpu/gradients/generated/GrTiledGradientEffect.h index d22d1c61106e2..561712d02831a 100644 --- a/src/gpu/gradients/generated/GrTiledGradientEffect.h +++ b/src/gpu/gradients/generated/GrTiledGradientEffect.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrTiledGradientEffect_DEFINED #define GrTiledGradientEffect_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrTiledGradientEffect : public GrFragmentProcessor { public: static std::unique_ptr Make( @@ -50,11 +51,11 @@ class GrTiledGradientEffect : public GrFragmentProcessor { , makePremul(makePremul) , colorsAreOpaque(colorsAreOpaque) { SkASSERT(colorizer); - colorizer_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(colorizer)); + colorizer_index = + this->registerChild(std::move(colorizer), SkSL::SampleUsage::PassThrough()); SkASSERT(gradLayout); - gradLayout_index = this->numChildProcessors(); - this->registerChildProcessor(std::move(gradLayout)); + gradLayout_index = + this->registerChild(std::move(gradLayout), SkSL::SampleUsage::PassThrough()); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; diff --git a/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp b/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp index 2f80228e6a155..2dda47f602566 100644 --- a/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp +++ b/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.cpp @@ -24,8 +24,6 @@ class GrGLSLTwoPointConicalGradientLayout : public GrGLSLFragmentProcessor { const GrTwoPointConicalGradientLayout& _outer = args.fFp.cast(); (void)_outer; - auto gradientMatrix = _outer.gradientMatrix; - (void)gradientMatrix; auto type = _outer.type; (void)type; auto isRadiusIncreasing = _outer.isRadiusIncreasing; @@ -42,51 +40,92 @@ class GrGLSLTwoPointConicalGradientLayout : public GrGLSLFragmentProcessor { (void)focalParams; focalParamsVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf2_GrSLType, "focalParams"); - SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D( - args.fTransformedCoords[0].fVaryingPoint, _outer.sampleMatrix()); fragBuilder->codeAppendf( - "float2 p = %s;\nfloat t = -1.0;\nhalf v = 1.0;\n@switch (%d) {\n case 1:\n " - " {\n half r0_2 = %s.y;\n t = float(r0_2) - p.y * p.y;\n " - " if (t >= 0.0) {\n t = p.x + sqrt(t);\n } else " - "{\n v = -1.0;\n }\n }\n break;\n case " - "0:\n {\n half r0 = %s.x;\n @if (%s) {\n " - " t = length(p) - float(r0);\n } else {\n t = " - "-length(p) - float(r0);\n ", - sk_TransformedCoords2D_0.c_str(), (int)_outer.type, - args.fUniformHandler->getUniformCStr(focalParamsVar), - args.fUniformHandler->getUniformCStr(focalParamsVar), - (_outer.isRadiusIncreasing ? "true" : "false")); - fragBuilder->codeAppendf( - " }\n }\n break;\n case 2:\n {\n half invR1 " - "= %s.x;\n half fx = %s.y;\n float x_t = -1.0;\n " - "@if (%s) {\n x_t = dot(p, p) / p.x;\n } else if (%s) " - "{\n x_t = length(p) - p.x * float(invR1);\n } else {\n " - " float temp = p.x * p.x - p.y * p.y;\n if (temp >= " - "0.0) {\n @if (%s || !%s) {\n x_t = " - "-sqrt(temp) - p.x * float(invR1)", + R"SkSL(float t = -1.0; +half v = 1.0; +@switch (%d) { + case 1: + { + half r0_2 = %s.y; + t = float(r0_2) - %s.y * %s.y; + if (t >= 0.0) { + t = %s.x + sqrt(t); + } else { + v = -1.0; + } + } + break; + case 0: + { + half r0 = %s.x; + @if (%s) { + t = length(%s) - float(r0); + } else { + t = -length(%s) - float(r0); + } + } + break; + case 2: + { + half invR1 = %s.x; + half fx = %s.y; + float x_t = -1.0; + @if (%s) { + x_t = dot(%s, %s) / %s.x; + } else if (%s) { + x_t = length(%s) - %s.x * float(invR1); + } else { + float temp = %s.x * %s.x - %s.y * %s.y; + if (temp >= 0.0) { + @if (%s || !%s) { + x_t = -sqrt(temp) - %s.x * float(invR1); + } else { + x_t = sqrt(temp) - %s.x * float(invR1); + } + } + } + @if (!%s) { + if (x_t <= 0.0) { + v = -1.0; + } + } + @if (%s) { + @if (%s) { + t = x_t; + } else { + t = x_t + float(fx); + } + } else { + @if (%s) { + t = -x_t; + } else { + t = -x_t + float(fx); + } + } + @if (%s) { + t = 1.0 - t; + } + } + break; +} +%s = half4(half(t), v, 0.0, 0.0); +)SkSL", + (int)_outer.type, args.fUniformHandler->getUniformCStr(focalParamsVar), + args.fSampleCoord, args.fSampleCoord, args.fSampleCoord, args.fUniformHandler->getUniformCStr(focalParamsVar), + (_outer.isRadiusIncreasing ? "true" : "false"), args.fSampleCoord, + args.fSampleCoord, args.fUniformHandler->getUniformCStr(focalParamsVar), args.fUniformHandler->getUniformCStr(focalParamsVar), - (_outer.isFocalOnCircle ? "true" : "false"), - (_outer.isWellBehaved ? "true" : "false"), (_outer.isSwapped ? "true" : "false"), - (_outer.isRadiusIncreasing ? "true" : "false")); - fragBuilder->codeAppendf( - ";\n } else {\n x_t = sqrt(temp) - p.x * " - "float(invR1);\n }\n }\n }\n " - " @if (!%s) {\n if (x_t <= 0.0) {\n v = -1.0;\n " - " }\n }\n @if (%s) {\n @if (%s) " - "{\n t = x_t;\n } else {\n t " - "= x_t + float(fx);\n }\n } else {\n @if " - "(%s) {\n ", - (_outer.isWellBehaved ? "true" : "false"), + (_outer.isFocalOnCircle ? "true" : "false"), args.fSampleCoord, args.fSampleCoord, + args.fSampleCoord, (_outer.isWellBehaved ? "true" : "false"), args.fSampleCoord, + args.fSampleCoord, args.fSampleCoord, args.fSampleCoord, args.fSampleCoord, + args.fSampleCoord, (_outer.isSwapped ? "true" : "false"), + (_outer.isRadiusIncreasing ? "true" : "false"), args.fSampleCoord, + args.fSampleCoord, (_outer.isWellBehaved ? "true" : "false"), (_outer.isRadiusIncreasing ? "true" : "false"), (_outer.isNativelyFocal ? "true" : "false"), - (_outer.isNativelyFocal ? "true" : "false")); - fragBuilder->codeAppendf( - " t = -x_t;\n } else {\n t = -x_t + " - "float(fx);\n }\n }\n @if (%s) {\n " - " t = 1.0 - t;\n }\n }\n break;\n}\n%s = " - "half4(half(t), v, 0.0, 0.0);\n", - (_outer.isSwapped ? "true" : "false"), args.fOutputColor); + (_outer.isNativelyFocal ? "true" : "false"), (_outer.isSwapped ? "true" : "false"), + args.fOutputColor); } private: @@ -120,7 +159,6 @@ void GrTwoPointConicalGradientLayout::onGetGLSLProcessorKey(const GrShaderCaps& bool GrTwoPointConicalGradientLayout::onIsEqual(const GrFragmentProcessor& other) const { const GrTwoPointConicalGradientLayout& that = other.cast(); (void)that; - if (gradientMatrix != that.gradientMatrix) return false; if (type != that.type) return false; if (isRadiusIncreasing != that.isRadiusIncreasing) return false; if (isFocalOnCircle != that.isFocalOnCircle) return false; @@ -133,8 +171,6 @@ bool GrTwoPointConicalGradientLayout::onIsEqual(const GrFragmentProcessor& other GrTwoPointConicalGradientLayout::GrTwoPointConicalGradientLayout( const GrTwoPointConicalGradientLayout& src) : INHERITED(kGrTwoPointConicalGradientLayout_ClassID, src.optimizationFlags()) - , fCoordTransform0(src.fCoordTransform0) - , gradientMatrix(src.gradientMatrix) , type(src.type) , isRadiusIncreasing(src.isRadiusIncreasing) , isFocalOnCircle(src.isFocalOnCircle) @@ -142,7 +178,7 @@ GrTwoPointConicalGradientLayout::GrTwoPointConicalGradientLayout( , isSwapped(src.isSwapped) , isNativelyFocal(src.isNativelyFocal) , focalParams(src.focalParams) { - this->addCoordTransform(&fCoordTransform0); + this->setUsesSampleCoordsDirectly(); } std::unique_ptr GrTwoPointConicalGradientLayout::clone() const { return std::unique_ptr(new GrTwoPointConicalGradientLayout(*this)); @@ -298,7 +334,8 @@ std::unique_ptr GrTwoPointConicalGradientLayout::Make( matrix.postConcat(grad.getGradientMatrix()); } - return std::unique_ptr(new GrTwoPointConicalGradientLayout( - matrix, grType, isRadiusIncreasing, isFocalOnCircle, isWellBehaved, isSwapped, - isNativelyFocal, focalParams)); + return GrMatrixEffect::Make( + matrix, std::unique_ptr(new GrTwoPointConicalGradientLayout( + grType, isRadiusIncreasing, isFocalOnCircle, isWellBehaved, isSwapped, + isNativelyFocal, focalParams))); } diff --git a/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.h b/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.h index 4a08aea9831b5..25defb960cfc5 100644 --- a/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.h +++ b/src/gpu/gradients/generated/GrTwoPointConicalGradientLayout.h @@ -10,14 +10,16 @@ **************************************************************************************************/ #ifndef GrTwoPointConicalGradientLayout_DEFINED #define GrTwoPointConicalGradientLayout_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" +#include "src/gpu/effects/GrMatrixEffect.h" #include "src/gpu/gradients/GrGradientShader.h" #include "src/shaders/gradients/SkTwoPointConicalGradient.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrTwoPointConicalGradientLayout : public GrFragmentProcessor { public: enum class Type { kFocal = 2, kRadial = 0, kStrip = 1 }; @@ -27,8 +29,6 @@ class GrTwoPointConicalGradientLayout : public GrFragmentProcessor { GrTwoPointConicalGradientLayout(const GrTwoPointConicalGradientLayout& src); std::unique_ptr clone() const override; const char* name() const override { return "TwoPointConicalGradientLayout"; } - GrCoordTransform fCoordTransform0; - SkMatrix gradientMatrix; Type type; bool isRadiusIncreasing; bool isFocalOnCircle; @@ -38,8 +38,7 @@ class GrTwoPointConicalGradientLayout : public GrFragmentProcessor { SkPoint focalParams; private: - GrTwoPointConicalGradientLayout(SkMatrix gradientMatrix, - Type type, + GrTwoPointConicalGradientLayout(Type type, bool isRadiusIncreasing, bool isFocalOnCircle, bool isWellBehaved, @@ -48,8 +47,6 @@ class GrTwoPointConicalGradientLayout : public GrFragmentProcessor { SkPoint focalParams) : INHERITED(kGrTwoPointConicalGradientLayout_ClassID, (OptimizationFlags)kNone_OptimizationFlags) - , fCoordTransform0(gradientMatrix) - , gradientMatrix(gradientMatrix) , type(type) , isRadiusIncreasing(isRadiusIncreasing) , isFocalOnCircle(isFocalOnCircle) @@ -57,7 +54,7 @@ class GrTwoPointConicalGradientLayout : public GrFragmentProcessor { , isSwapped(isSwapped) , isNativelyFocal(isNativelyFocal) , focalParams(focalParams) { - this->addCoordTransform(&fCoordTransform0); + this->setUsesSampleCoordsDirectly(); } GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override; diff --git a/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.cpp b/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.cpp index 3f5c5aca95d50..38368dbb50503 100644 --- a/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.cpp +++ b/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.cpp @@ -127,13 +127,47 @@ class GrGLSLUnrolledBinaryGradientColorizer : public GrGLSLFragmentProcessor { thresholds9_13Var = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, kHalf4_GrSLType, "thresholds9_13"); fragBuilder->codeAppendf( - "half t = %s.x;\nfloat4 scale, bias;\nif (%d <= 4 || t < %s.w) {\n if (%d <= 2 " - "|| t < %s.y) {\n if (%d <= 1 || t < %s.x) {\n scale = %s;\n " - " bias = %s;\n } else {\n scale = %s;\n bias = " - "%s;\n }\n } else {\n if (%d <= 3 || t < %s.z) {\n " - "scale = %s;\n bias = %s;\n } else {\n scale = %s;\n " - " bias = %s;\n }\n }\n} else {\n if (%d <= 6 || t < %s.y) " - "{\n if (%d <= 5 || t <", + R"SkSL(half t = %s.x; +float4 scale, bias; +if (%d <= 4 || t < %s.w) { + if (%d <= 2 || t < %s.y) { + if (%d <= 1 || t < %s.x) { + scale = %s; + bias = %s; + } else { + scale = %s; + bias = %s; + } + } else { + if (%d <= 3 || t < %s.z) { + scale = %s; + bias = %s; + } else { + scale = %s; + bias = %s; + } + } +} else { + if (%d <= 6 || t < %s.y) { + if (%d <= 5 || t < %s.x) { + scale = %s; + bias = %s; + } else { + scale = %s; + bias = %s; + } + } else { + if (%d <= 7 || t < %s.z) { + scale = %s; + bias = %s; + } else { + scale = %s; + bias = %s; + } + } +} +%s = half4(float(t) * scale + bias); +)SkSL", args.fInputColor, _outer.intervalCount, args.fUniformHandler->getUniformCStr(thresholds1_7Var), _outer.intervalCount, args.fUniformHandler->getUniformCStr(thresholds1_7Var), _outer.intervalCount, @@ -154,14 +188,7 @@ class GrGLSLUnrolledBinaryGradientColorizer : public GrGLSLFragmentProcessor { bias6_7Var.isValid() ? args.fUniformHandler->getUniformCStr(bias6_7Var) : "float4(0)", _outer.intervalCount, args.fUniformHandler->getUniformCStr(thresholds9_13Var), - _outer.intervalCount); - fragBuilder->codeAppendf( - " %s.x) {\n scale = %s;\n bias = %s;\n } else {\n " - " scale = %s;\n bias = %s;\n }\n } else {\n if " - "(%d <= 7 || t < %s.z) {\n scale = %s;\n bias = %s;\n " - "} else {\n scale = %s;\n bias = %s;\n }\n " - "}\n}\n%s = half4(float(t) * scale + bias);\n", - args.fUniformHandler->getUniformCStr(thresholds9_13Var), + _outer.intervalCount, args.fUniformHandler->getUniformCStr(thresholds9_13Var), scale8_9Var.isValid() ? args.fUniformHandler->getUniformCStr(scale8_9Var) : "float4(0)", bias8_9Var.isValid() ? args.fUniformHandler->getUniformCStr(bias8_9Var) diff --git a/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.h b/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.h index 9c9ecea611fbd..5d9e6f3bf1f25 100644 --- a/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.h +++ b/src/gpu/gradients/generated/GrUnrolledBinaryGradientColorizer.h @@ -10,11 +10,12 @@ **************************************************************************************************/ #ifndef GrUnrolledBinaryGradientColorizer_DEFINED #define GrUnrolledBinaryGradientColorizer_DEFINED -#include "include/core/SkTypes.h" + #include "include/core/SkM44.h" +#include "include/core/SkTypes.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrFragmentProcessor.h" + class GrUnrolledBinaryGradientColorizer : public GrFragmentProcessor { public: static const int kMaxColorCount = 16; diff --git a/src/gpu/mock/GrMockCaps.h b/src/gpu/mock/GrMockCaps.h index 42a97144593b6..6548aa634bacb 100644 --- a/src/gpu/mock/GrMockCaps.h +++ b/src/gpu/mock/GrMockCaps.h @@ -35,7 +35,7 @@ class GrMockCaps : public GrCaps { fShaderCaps->fShaderDerivativeSupport = options.fShaderDerivativeSupport; fShaderCaps->fDualSourceBlendingSupport = options.fDualSourceBlendingSupport; fShaderCaps->fSampleMaskSupport = true; - fShaderCaps->fTessellationSupport = options.fTessellationSupport; + fShaderCaps->fMaxTessellationSegments = options.fMaxTessellationSegments; this->finishInitialization(contextOptions); } @@ -50,10 +50,6 @@ class GrMockCaps : public GrCaps { return GrGetColorTypeDesc(ct).encoding() == GrColorTypeEncoding::kSRGBUnorm; } - SkImage::CompressionType compressionType(const GrBackendFormat& format) const override { - return format.asMockCompressionType(); - } - bool isFormatTexturable(const GrBackendFormat& format) const override { SkImage::CompressionType compression = format.asMockCompressionType(); if (compression != SkImage::CompressionType::kNone) { @@ -155,10 +151,6 @@ class GrMockCaps : public GrCaps { return {}; } - GrSwizzle getReadSwizzle(const GrBackendFormat& format, GrColorType ct) const override { - SkASSERT(this->areColorTypeAndFormatCompatible(ct, format)); - return GrSwizzle("rgba"); - } GrSwizzle getWriteSwizzle(const GrBackendFormat& format, GrColorType ct) const override { SkASSERT(this->areColorTypeAndFormatCompatible(ct, format)); return GrSwizzle("rgba"); @@ -205,6 +197,11 @@ class GrMockCaps : public GrCaps { return SupportedRead{srcColorType, 1}; } + GrSwizzle onGetReadSwizzle(const GrBackendFormat& format, GrColorType ct) const override { + SkASSERT(this->areColorTypeAndFormatCompatible(ct, format)); + return GrSwizzle("rgba"); + } + static const int kMaxSampleCnt = 16; GrMockOptions fOptions; diff --git a/src/gpu/mtl/GrMtlCaps.h b/src/gpu/mtl/GrMtlCaps.h index 09ae534a9b6fa..0650c5a9b61f5 100644 --- a/src/gpu/mtl/GrMtlCaps.h +++ b/src/gpu/mtl/GrMtlCaps.h @@ -27,7 +27,6 @@ class GrMtlCaps : public GrCaps { MTLFeatureSet featureSet); bool isFormatSRGB(const GrBackendFormat&) const override; - SkImage::CompressionType compressionType(const GrBackendFormat&) const override; bool isFormatTexturable(const GrBackendFormat&) const override; bool isFormatTexturable(MTLPixelFormat) const; @@ -82,7 +81,6 @@ class GrMtlCaps : public GrCaps { return fColorTypeToFormatTable[idx]; } - GrSwizzle getReadSwizzle(const GrBackendFormat&, GrColorType) const override; GrSwizzle getWriteSwizzle(const GrBackendFormat&, GrColorType) const override; uint64_t computeFormatKey(const GrBackendFormat&) const override; @@ -113,6 +111,8 @@ class GrMtlCaps : public GrCaps { SupportedRead onSupportedReadPixelsColorType(GrColorType, const GrBackendFormat&, GrColorType) const override; + GrSwizzle onGetReadSwizzle(const GrBackendFormat&, GrColorType) const override; + // ColorTypeInfo for a specific format struct ColorTypeInfo { GrColorType fColorType = GrColorType::kUnknown; diff --git a/src/gpu/mtl/GrMtlCaps.mm b/src/gpu/mtl/GrMtlCaps.mm index 4b28bf7034b76..2fb81021f4e3f 100644 --- a/src/gpu/mtl/GrMtlCaps.mm +++ b/src/gpu/mtl/GrMtlCaps.mm @@ -10,6 +10,7 @@ #include "include/core/SkRect.h" #include "include/gpu/GrBackendSurface.h" #include "src/core/SkCompressedDataUtils.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrProcessor.h" #include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrProgramInfo.h" @@ -318,24 +319,6 @@ static bool format_is_srgb(MTLPixelFormat format) { return format_is_srgb(GrBackendFormatAsMTLPixelFormat(format)); } -SkImage::CompressionType GrMtlCaps::compressionType(const GrBackendFormat& format) const { - - switch (GrBackendFormatAsMTLPixelFormat(format)) { -#ifdef SK_BUILD_FOR_IOS - case MTLPixelFormatETC2_RGB8: - // ETC2 uses the same compression layout as ETC1 - return SkImage::CompressionType::kETC2_RGB8_UNORM; -#else - case MTLPixelFormatBC1_RGBA: - return SkImage::CompressionType::kBC1_RGBA8_UNORM; -#endif - default: - return SkImage::CompressionType::kNone; - } - - SkUNREACHABLE; -} - bool GrMtlCaps::isFormatTexturable(const GrBackendFormat& format) const { MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(format); return this->isFormatTexturable(mtlFormat); @@ -900,12 +883,6 @@ static bool format_is_srgb(MTLPixelFormat format) { const GrBackendFormat& format) const { MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(format); - SkImage::CompressionType compression = GrMtlFormatToCompressionType(mtlFormat); - if (compression != SkImage::CompressionType::kNone) { - return ct == (SkCompressionTypeIsOpaque(compression) ? GrColorType::kRGB_888x - : GrColorType::kRGBA_8888); - } - const auto& info = this->getFormatInfo(mtlFormat); for (int i = 0; i < info.fColorTypeInfoCount; ++i) { if (info.fColorTypeInfos[i].fColorType == ct) { @@ -948,7 +925,7 @@ static bool format_is_srgb(MTLPixelFormat format) { SK_ABORT("Invalid compression type"); } -GrSwizzle GrMtlCaps::getReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { +GrSwizzle GrMtlCaps::onGetReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(format); SkASSERT(mtlFormat != MTLPixelFormatInvalid); const auto& info = this->getFormatInfo(mtlFormat); @@ -1008,9 +985,7 @@ static bool format_is_srgb(MTLPixelFormat format) { GrCaps::SupportedRead GrMtlCaps::onSupportedReadPixelsColorType( GrColorType srcColorType, const GrBackendFormat& srcBackendFormat, GrColorType dstColorType) const { - MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(srcBackendFormat); - - SkImage::CompressionType compression = GrMtlFormatToCompressionType(mtlFormat); + SkImage::CompressionType compression = GrBackendFormatToCompressionType(srcBackendFormat); if (compression != SkImage::CompressionType::kNone) { #ifdef SK_BUILD_FOR_IOS // Reading back to kRGB_888x doesn't work on Metal/iOS (skbug.com/9839) @@ -1024,6 +999,7 @@ static bool format_is_srgb(MTLPixelFormat format) { // Metal requires the destination offset for copyFromTexture to be a multiple of the textures // pixels size. size_t offsetAlignment = GrColorTypeBytesPerPixel(srcColorType); + MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(srcBackendFormat); const auto& info = this->getFormatInfo(mtlFormat); for (int i = 0; i < info.fColorTypeInfoCount; ++i) { diff --git a/src/gpu/mtl/GrMtlCppUtil.h b/src/gpu/mtl/GrMtlCppUtil.h index f431ec8107691..bcbdbdd4b1412 100644 --- a/src/gpu/mtl/GrMtlCppUtil.h +++ b/src/gpu/mtl/GrMtlCppUtil.h @@ -8,14 +8,19 @@ #ifndef GrMtlCppUtil_DEFINED #define GrMtlCppUtil_DEFINED +#include "include/core/SkImage.h" #include "include/gpu/mtl/GrMtlTypes.h" +class GrBackendFormat; + // Utilities that can be used from cpp files (rather than .mm). GrMTLPixelFormat GrGetMTLPixelFormatFromMtlTextureInfo(const GrMtlTextureInfo&); uint32_t GrMtlFormatChannels(GrMTLPixelFormat); +SkImage::CompressionType GrMtlBackendFormatToCompressionType(const GrBackendFormat& format); + #if GR_TEST_UTILS const char* GrMtlFormatToStr(GrMTLPixelFormat mtlFormat); bool GrMtlFormatIsBGRA8(GrMTLPixelFormat mtlFormat); diff --git a/src/gpu/mtl/GrMtlGpu.h b/src/gpu/mtl/GrMtlGpu.h index 431a04dbdeab6..16bd0fe844210 100644 --- a/src/gpu/mtl/GrMtlGpu.h +++ b/src/gpu/mtl/GrMtlGpu.h @@ -68,6 +68,10 @@ class GrMtlGpu : public GrGpu { void deleteTestingOnlyBackendRenderTarget(const GrBackendRenderTarget&) override; void testingOnly_flushGpuAndSync() override; + + void resetShaderCacheForTesting() const override { + fResourceProvider.resetShaderCacheForTesting(); + } #endif void copySurfaceAsResolve(GrSurface* dst, GrSurface* src); diff --git a/src/gpu/mtl/GrMtlGpu.mm b/src/gpu/mtl/GrMtlGpu.mm index af90ffc5bfbfc..dced04f7b58e4 100644 --- a/src/gpu/mtl/GrMtlGpu.mm +++ b/src/gpu/mtl/GrMtlGpu.mm @@ -11,6 +11,7 @@ #include "src/core/SkCompressedDataUtils.h" #include "src/core/SkConvertPixels.h" #include "src/core/SkMipMap.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrDataUtils.h" #include "src/gpu/GrRenderTargetPriv.h" #include "src/gpu/GrTexturePriv.h" @@ -546,7 +547,7 @@ static bool check_max_blit_width(int widthInPixels) { id mtlTexture = tex->mtlTexture(); SkASSERT(mtlTexture); - auto compressionType = GrMtlFormatToCompressionType(mtlTexture.pixelFormat); + auto compressionType = GrBackendFormatToCompressionType(format); SkASSERT(compressionType != SkImage::CompressionType::kNone); SkTArray individualMipOffsets(numMipLevels); @@ -845,7 +846,8 @@ void copy_src_data(char* dst, size_t bytesPerPixel, const SkTArray& indi int numMipLevels = mtlTexture.mipmapLevelCount; GrMipMapped mipMapped = numMipLevels > 1 ? GrMipMapped::kYes : GrMipMapped::kNo; - SkImage::CompressionType compression = GrMtlFormatToCompressionType(mtlFormat); + SkImage::CompressionType compression = GrBackendFormatToCompressionType( + backendTexture.getBackendFormat()); // Create a transfer buffer and fill with data. SkSTArray<16, size_t> individualMipOffsets; @@ -1350,6 +1352,7 @@ static int get_surface_sample_cnt(GrSurface* surf) { void GrMtlGpu::insertSemaphore(GrSemaphore* semaphore) { if (@available(macOS 10.14, iOS 12.0, *)) { + SkASSERT(semaphore); GrMtlSemaphore* mtlSem = static_cast(semaphore); this->commandBuffer()->encodeSignalEvent(mtlSem->event(), mtlSem->value()); @@ -1358,6 +1361,7 @@ static int get_surface_sample_cnt(GrSurface* surf) { void GrMtlGpu::waitSemaphore(GrSemaphore* semaphore) { if (@available(macOS 10.14, iOS 12.0, *)) { + SkASSERT(semaphore); GrMtlSemaphore* mtlSem = static_cast(semaphore); this->commandBuffer()->encodeWaitForEvent(mtlSem->event(), mtlSem->value()); diff --git a/src/gpu/mtl/GrMtlOpsRenderPass.mm b/src/gpu/mtl/GrMtlOpsRenderPass.mm index aaa394f9d6d5c..13ef3a3bce894 100644 --- a/src/gpu/mtl/GrMtlOpsRenderPass.mm +++ b/src/gpu/mtl/GrMtlOpsRenderPass.mm @@ -8,7 +8,6 @@ #include "src/gpu/mtl/GrMtlOpsRenderPass.h" #include "src/gpu/GrColor.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrRenderTargetPriv.h" #include "src/gpu/mtl/GrMtlCommandBuffer.h" #include "src/gpu/mtl/GrMtlPipelineState.h" diff --git a/src/gpu/mtl/GrMtlPipelineState.mm b/src/gpu/mtl/GrMtlPipelineState.mm index 614b8b7d939d9..0415418496d6a 100644 --- a/src/gpu/mtl/GrMtlPipelineState.mm +++ b/src/gpu/mtl/GrMtlPipelineState.mm @@ -59,8 +59,7 @@ void GrMtlPipelineState::setData(const GrRenderTarget* renderTarget, const GrProgramInfo& programInfo) { this->setRenderTargetState(renderTarget, programInfo.origin()); - GrFragmentProcessor::PipelineCoordTransformRange transformRange(programInfo.pipeline()); - fGeometryProcessor->setData(fDataManager, programInfo.primProc(), transformRange); + fGeometryProcessor->setData(fDataManager, programInfo.primProc()); GrFragmentProcessor::CIter fpIter(programInfo.pipeline()); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); diff --git a/src/gpu/mtl/GrMtlPipelineStateBuilder.h b/src/gpu/mtl/GrMtlPipelineStateBuilder.h index cd1d10215230b..eed06eb2c5403 100644 --- a/src/gpu/mtl/GrMtlPipelineStateBuilder.h +++ b/src/gpu/mtl/GrMtlPipelineStateBuilder.h @@ -21,7 +21,7 @@ class GrProgramInfo; class GrMtlCaps; class GrMtlGpu; class GrMtlPipelineState; -class SkReader32; +class SkReadBuffer; class GrMtlPipelineStateBuilder : public GrGLSLProgramBuilder { public: @@ -58,7 +58,7 @@ class GrMtlPipelineStateBuilder : public GrGLSLProgramBuilder { SkSL::Program::Inputs inputs); void storeShadersInCache(const SkSL::String shaders[], const SkSL::Program::Inputs inputs[], bool isSkSL); - void loadShadersFromCache(SkReader32* cached, __strong id outLibraries[]); + bool loadShadersFromCache(SkReadBuffer* cached, __strong id outLibraries[]); GrGLSLUniformHandler* uniformHandler() override { return &fUniformHandler; } const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; } diff --git a/src/gpu/mtl/GrMtlPipelineStateBuilder.mm b/src/gpu/mtl/GrMtlPipelineStateBuilder.mm index 3c2c91bb0398d..0bfd4ee797605 100644 --- a/src/gpu/mtl/GrMtlPipelineStateBuilder.mm +++ b/src/gpu/mtl/GrMtlPipelineStateBuilder.mm @@ -8,7 +8,7 @@ #include "src/gpu/mtl/GrMtlPipelineStateBuilder.h" #include "include/gpu/GrContext.h" -#include "src/core/SkReader32.h" +#include "src/core/SkReadBuffer.h" #include "src/core/SkTraceEvent.h" #include "src/gpu/GrAutoLocaleSetter.h" #include "src/gpu/GrContextPriv.h" @@ -66,12 +66,14 @@ static constexpr SkFourByteTag kSKSL_Tag = SkSetFourByteTag('S', 'K', 'S', 'L'); -void GrMtlPipelineStateBuilder::loadShadersFromCache(SkReader32* cached, +bool GrMtlPipelineStateBuilder::loadShadersFromCache(SkReadBuffer* cached, __strong id outLibraries[]) { SkSL::String shaders[kGrShaderTypeCount]; SkSL::Program::Inputs inputs[kGrShaderTypeCount]; - GrPersistentCacheUtils::UnpackCachedShaders(cached, shaders, inputs, kGrShaderTypeCount); + if (!GrPersistentCacheUtils::UnpackCachedShaders(cached, shaders, inputs, kGrShaderTypeCount)) { + return false; + } outLibraries[kVertex_GrShaderType] = this->compileMtlShaderLibrary( shaders[kVertex_GrShaderType], @@ -80,11 +82,9 @@ shaders[kFragment_GrShaderType], inputs[kFragment_GrShaderType]); - // Geometry shaders are not supported - SkASSERT(shaders[kGeometry_GrShaderType].empty()); - - SkASSERT(outLibraries[kVertex_GrShaderType]); - SkASSERT(outLibraries[kFragment_GrShaderType]); + return outLibraries[kVertex_GrShaderType] && + outLibraries[kFragment_GrShaderType] && + shaders[kGeometry_GrShaderType].empty(); // Geometry shaders are not supported } void GrMtlPipelineStateBuilder::storeShadersInCache(const SkSL::String shaders[], @@ -399,7 +399,7 @@ uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment) { SkASSERT(!this->fragColorIsInOut()); sk_sp cached; - SkReader32 reader; + SkReadBuffer reader; SkFourByteTag shaderType = 0; auto persistentCache = fGpu->getContext()->priv().getPersistentCache(); if (persistentCache) { @@ -414,10 +414,10 @@ uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment) { } } - SkSL::String shaders[kGrShaderTypeCount]; - if (kMSL_Tag == shaderType) { - this->loadShadersFromCache(&reader, shaderLibraries); + if (kMSL_Tag == shaderType && this->loadShadersFromCache(&reader, shaderLibraries)) { + // We successfully loaded and compiled MSL } else { + SkSL::String shaders[kGrShaderTypeCount]; SkSL::Program::Inputs inputs[kGrShaderTypeCount]; SkSL::String* sksl[kGrShaderTypeCount] = { @@ -427,10 +427,11 @@ uint32_t buffer_size(uint32_t offset, uint32_t maxAlignment) { }; SkSL::String cached_sksl[kGrShaderTypeCount]; if (kSKSL_Tag == shaderType) { - GrPersistentCacheUtils::UnpackCachedShaders(&reader, cached_sksl, inputs, - kGrShaderTypeCount); - for (int i = 0; i < kGrShaderTypeCount; ++i) { - sksl[i] = &cached_sksl[i]; + if (GrPersistentCacheUtils::UnpackCachedShaders(&reader, cached_sksl, inputs, + kGrShaderTypeCount)) { + for (int i = 0; i < kGrShaderTypeCount; ++i) { + sksl[i] = &cached_sksl[i]; + } } } diff --git a/src/gpu/mtl/GrMtlResourceProvider.h b/src/gpu/mtl/GrMtlResourceProvider.h index 5d1f213b154b8..20e6eb29aa1c6 100644 --- a/src/gpu/mtl/GrMtlResourceProvider.h +++ b/src/gpu/mtl/GrMtlResourceProvider.h @@ -41,6 +41,10 @@ class GrMtlResourceProvider { // Destroy any cached resources. To be called before releasing the MtlDevice. void destroyResources(); +#if GR_TEST_UTILS + void resetShaderCacheForTesting() const { fPipelineStateCache->release(); } +#endif + private: #ifdef SK_DEBUG #define GR_PIPELINE_STATE_CACHE_STATS diff --git a/src/gpu/mtl/GrMtlUniformHandler.h b/src/gpu/mtl/GrMtlUniformHandler.h index 719fa1e16a778..eb8f751d54a34 100644 --- a/src/gpu/mtl/GrMtlUniformHandler.h +++ b/src/gpu/mtl/GrMtlUniformHandler.h @@ -48,6 +48,9 @@ class GrMtlUniformHandler : public GrGLSLUniformHandler { UniformInfo& uniform(int idx) override { return fUniforms.item(idx); } + const UniformInfo& uniform(int idx) const override { + return fUniforms.item(idx); + } private: explicit GrMtlUniformHandler(GrGLSLProgramBuilder* program) diff --git a/src/gpu/mtl/GrMtlUtil.mm b/src/gpu/mtl/GrMtlUtil.mm index c890e4b89919f..df519b3037a4d 100644 --- a/src/gpu/mtl/GrMtlUtil.mm +++ b/src/gpu/mtl/GrMtlUtil.mm @@ -7,6 +7,7 @@ #include "src/gpu/mtl/GrMtlUtil.h" +#include "include/gpu/GrBackendSurface.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkMutex.h" #include "src/gpu/GrSurface.h" @@ -269,6 +270,12 @@ uint32_t GrMtlFormatChannels(GrMTLPixelFormat mtlFormat) { } } +SkImage::CompressionType GrMtlBackendFormatToCompressionType(const GrBackendFormat& format) { + MTLPixelFormat mtlFormat = GrBackendFormatAsMTLPixelFormat(format); + return GrMtlFormatToCompressionType(mtlFormat); +} + + bool GrMtlFormatIsCompressed(MTLPixelFormat mtlFormat) { switch (mtlFormat) { #ifdef SK_BUILD_FOR_IOS diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp index 70eb0baaf7e95..834e8daa7b70c 100644 --- a/src/gpu/ops/GrAAConvexPathRenderer.cpp +++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp @@ -8,6 +8,7 @@ #include "include/core/SkString.h" #include "include/core/SkTypes.h" #include "src/core/SkGeometry.h" +#include "src/core/SkMatrixPriv.h" #include "src/core/SkPathPriv.h" #include "src/core/SkPointPriv.h" #include "src/gpu/GrAuditTrail.h" @@ -213,6 +214,7 @@ static void update_degenerate_test(DegenerateTestData* data, const SkPoint& pt) if (SkScalarAbs(data->fLineNormal.dot(pt) + data->fLineC) > kClose) { data->fStage = DegenerateTestData::kNonDegenerate; } + break; case DegenerateTestData::kNonDegenerate: break; default: @@ -576,14 +578,11 @@ class QuadEdgeEffect : public GrGeometryProcessor { // Setup position this->writeOutputPosition(vertBuilder, gpArgs, qe.fInPosition.name()); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - qe.fInPosition.asShaderVar(), - qe.fLocalMatrix, - args.fFPCoordTransformHandler); + if (qe.fUsesLocalCoords) { + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, + qe.fInPosition.asShaderVar(), qe.fLocalMatrix, + &fLocalMatrixUniform); + } fragBuilder->codeAppendf("half edgeAlpha;"); @@ -610,18 +609,22 @@ class QuadEdgeEffect : public GrGeometryProcessor { const GrShaderCaps&, GrProcessorKeyBuilder* b) { const QuadEdgeEffect& qee = gp.cast(); - b->add32(SkToBool(qee.fUsesLocalCoords && qee.fLocalMatrix.hasPerspective())); + uint32_t key = (uint32_t) qee.fUsesLocalCoords; + key |= ComputeMatrixKey(qee.fLocalMatrix) << 1; + b->add32(key); } void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& gp, - const CoordTransformRange& transformRange) override { + const GrPrimitiveProcessor& gp) override { const QuadEdgeEffect& qe = gp.cast(); - this->setTransformDataHelper(qe.fLocalMatrix, pdman, transformRange); + this->setTransform(pdman, fLocalMatrixUniform, qe.fLocalMatrix, &fLocalMatrix); } private: typedef GrGLSLGeometryProcessor INHERITED; + + SkMatrix fLocalMatrix = SkMatrix::InvalidMatrix(); + UniformHandle fLocalMatrixUniform; }; void getGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override { diff --git a/src/gpu/ops/GrAAHairLinePathRenderer.cpp b/src/gpu/ops/GrAAHairLinePathRenderer.cpp index 8a0a1b8dded10..b87d2f6a8d655 100644 --- a/src/gpu/ops/GrAAHairLinePathRenderer.cpp +++ b/src/gpu/ops/GrAAHairLinePathRenderer.cpp @@ -1011,7 +1011,6 @@ void AAHairlineOp::makeQuadProgramInfo(const GrCaps& caps, SkArenaAlloc* arena, GrGeometryProcessor* quadGP = GrQuadEffect::Make(arena, this->color(), *geometryProcessorViewM, - GrClipEdgeType::kHairlineAA, caps, *geometryProcessorLocalM, fHelper.usesLocalCoords(), @@ -1034,7 +1033,6 @@ void AAHairlineOp::makeConicProgramInfo(const GrCaps& caps, SkArenaAlloc* arena, GrGeometryProcessor* conicGP = GrConicEffect::Make(arena, this->color(), *geometryProcessorViewM, - GrClipEdgeType::kHairlineAA, caps, *geometryProcessorLocalM, fHelper.usesLocalCoords(), @@ -1117,7 +1115,7 @@ void AAHairlineOp::onPrePrepareDraws(GrRecordingContext* context, const GrCaps* caps = context->priv().caps(); // This is equivalent to a GrOpFlushState::detachAppliedClip - GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip::Disabled(); // Conservatively predict which programs will be required fCharacterization = this->predictPrograms(caps); diff --git a/src/gpu/ops/GrAtlasTextOp.cpp b/src/gpu/ops/GrAtlasTextOp.cpp index 8bfda875e8ac7..13823a4649268 100644 --- a/src/gpu/ops/GrAtlasTextOp.cpp +++ b/src/gpu/ops/GrAtlasTextOp.cpp @@ -8,7 +8,7 @@ #include "src/gpu/ops/GrAtlasTextOp.h" #include "include/core/SkPoint3.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkMathPriv.h" #include "src/core/SkMatrixPriv.h" #include "src/core/SkStrikeCache.h" @@ -16,6 +16,7 @@ #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrRecordingContextPriv.h" +#include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrResourceProvider.h" #include "src/gpu/effects/GrBitmapTextGeoProc.h" #include "src/gpu/effects/GrDistanceFieldGeoProc.h" @@ -23,6 +24,10 @@ #include "src/gpu/text/GrAtlasManager.h" #include "src/gpu/text/GrDistanceFieldAdjustTable.h" +#if GR_TEST_UTILS +#include "src/gpu/GrDrawOpTest.h" +#endif + /////////////////////////////////////////////////////////////////////////////////////////////////// GrAtlasTextOp::GrAtlasTextOp(MaskType maskType, @@ -62,30 +67,19 @@ GrAtlasTextOp::GrAtlasTextOp(MaskType maskType, this->setBounds(bounds, HasAABloat::kNo, IsHairline::kNo); } -// Entry point just for the SkAtlasTextTarget -std::unique_ptr GrAtlasTextOp::Geometry::textTargetCreateVertexData( - int offset, int count) const { - std::unique_ptr data{new GrTextBlob::Mask3DVertex[count][4]}; - - fSubRunPtr->fillTextTargetVertexData(data.get(), offset, count, fColor.toBytes_RGBA(), - fDrawOrigin); - - return data; -} - void GrAtlasTextOp::Geometry::fillVertexData(void *dst, int offset, int count) const { fSubRunPtr->fillVertexData(dst, offset, count, fColor.toBytes_RGBA(), fDrawMatrix, fDrawOrigin, fClipRect); } -std::unique_ptr GrAtlasTextOp::MakeBitmap(GrRecordingContext* context, +std::unique_ptr GrAtlasTextOp::MakeBitmap(GrRenderTargetContext* rtc, GrPaint&& paint, GrTextBlob::SubRun* subrun, const SkMatrix& drawMatrix, SkPoint drawOrigin, const SkIRect& clipRect, const SkPMColor4f& filteredColor) { - GrOpMemoryPool* pool = context->priv().opMemoryPool(); + GrOpMemoryPool* pool = rtc->fContext->priv().opMemoryPool(); MaskType maskType = [&]() { switch (subrun->maskFormat()) { @@ -110,17 +104,17 @@ std::unique_ptr GrAtlasTextOp::MakeBitmap(GrRecordingContext* con } std::unique_ptr GrAtlasTextOp::MakeDistanceField( - GrRecordingContext* context, - GrPaint&& paint, - GrTextBlob::SubRun* subrun, - const SkMatrix& drawMatrix, - SkPoint drawOrigin, - const SkIRect& clipRect, - const SkPMColor4f& filteredColor, - bool useGammaCorrectDistanceTable, - SkColor luminanceColor, - const SkSurfaceProps& props) { - GrOpMemoryPool* pool = context->priv().opMemoryPool(); + GrRenderTargetContext* rtc, + GrPaint&& paint, + GrTextBlob::SubRun* subrun, + const SkMatrix& drawMatrix, + SkPoint drawOrigin, + const SkIRect& clipRect, + const SkPMColor4f& filteredColor, + bool useGammaCorrectDistanceTable, + SkColor luminanceColor, + const SkSurfaceProps& props) { + GrOpMemoryPool* pool = rtc->fContext->priv().opMemoryPool(); bool isBGR = SkPixelGeometryIsBGR(props.pixelGeometry()); bool isLCD = subrun->hasUseLCDText() && SkPixelGeometryIsH(props.pixelGeometry()); MaskType maskType = !subrun->isAntiAliased() ? kAliasedDistanceField_MaskType @@ -497,7 +491,6 @@ GrOp::CombineResult GrAtlasTextOp::onCombineIfPossible(GrOp* t, GrRecordingConte static const int kDistanceAdjustLumShift = 5; // TODO trying to figure out why lcd is so whack -// (see comments in GrTextContext::ComputeCanonicalColor) GrGeometryProcessor* GrAtlasTextOp::setupDfProcessor(SkArenaAlloc* arena, const GrShaderCaps& caps, const GrSurfaceProxyView* views, @@ -550,3 +543,78 @@ GrGeometryProcessor* GrAtlasTextOp::setupDfProcessor(SkArenaAlloc* arena, } } +#if GR_TEST_UTILS +std::unique_ptr GrAtlasTextOp::CreateOpTestingOnly(GrRenderTargetContext* rtc, + const SkPaint& skPaint, + const SkFont& font, + const SkMatrixProvider& mtxProvider, + const char* text, + int x, + int y) { + static SkSurfaceProps surfaceProps(SkSurfaceProps::kLegacyFontHost_InitType); + + size_t textLen = (int)strlen(text); + + const SkMatrix& drawMatrix(mtxProvider.localToDevice()); + + auto drawOrigin = SkPoint::Make(x, y); + SkGlyphRunBuilder builder; + builder.drawTextUTF8(skPaint, font, text, textLen, drawOrigin); + + auto glyphRunList = builder.useGlyphRunList(); + + const GrRecordingContextPriv& contextPriv = rtc->fContext->priv(); + GrSDFTOptions SDFOptions = rtc->fContext->priv().SDFTOptions(); + + if (glyphRunList.empty()) { + return nullptr; + } + sk_sp blob = GrTextBlob::Make(glyphRunList, drawMatrix); + SkGlyphRunListPainter* painter = &rtc->fGlyphPainter; + painter->processGlyphRunList( + glyphRunList, drawMatrix, surfaceProps, + contextPriv.caps()->shaderCaps()->supportsDistanceFieldText(), + SDFOptions, blob.get()); + + return blob->firstSubRun()->makeOp(mtxProvider, + drawOrigin, + SkIRect::MakeEmpty(), + skPaint, + surfaceProps, + rtc->textTarget()); +} + +GR_DRAW_OP_TEST_DEFINE(GrAtlasTextOp) { + // Setup dummy SkPaint / GrPaint / GrRenderTargetContext + auto rtc = GrRenderTargetContext::Make( + context, GrColorType::kRGBA_8888, nullptr, SkBackingFit::kApprox, {1024, 1024}); + + SkSimpleMatrixProvider matrixProvider(GrTest::TestMatrixInvertible(random)); + + SkPaint skPaint; + skPaint.setColor(random->nextU()); + + SkFont font; + if (random->nextBool()) { + font.setEdging(SkFont::Edging::kSubpixelAntiAlias); + } else { + font.setEdging(random->nextBool() ? SkFont::Edging::kAntiAlias : SkFont::Edging::kAlias); + } + font.setSubpixel(random->nextBool()); + + const char* text = "The quick brown fox jumps over the lazy dog."; + + // create some random x/y offsets, including negative offsets + static const int kMaxTrans = 1024; + int xPos = (random->nextU() % 2) * 2 - 1; + int yPos = (random->nextU() % 2) * 2 - 1; + int xInt = (random->nextU() % kMaxTrans) * xPos; + int yInt = (random->nextU() % kMaxTrans) * yPos; + + return GrAtlasTextOp::CreateOpTestingOnly( + rtc.get(), skPaint, font, matrixProvider, text, xInt, yInt); +} + +#endif + + diff --git a/src/gpu/ops/GrAtlasTextOp.h b/src/gpu/ops/GrAtlasTextOp.h index b8fb9e3ffd831..5fc67aa7f5d70 100644 --- a/src/gpu/ops/GrAtlasTextOp.h +++ b/src/gpu/ops/GrAtlasTextOp.h @@ -12,7 +12,6 @@ #include "src/gpu/text/GrTextBlob.h" class GrRecordingContext; -class SkAtlasTextTarget; class GrAtlasTextOp final : public GrMeshDrawOp { public: @@ -34,12 +33,11 @@ class GrAtlasTextOp final : public GrMeshDrawOp { SkPoint fDrawOrigin; GrTextBlob::SubRun* fSubRunPtr; SkPMColor4f fColor; - std::unique_ptr textTargetCreateVertexData( - int offset, int count) const; + void fillVertexData(void* dst, int offset, int count) const; }; - static std::unique_ptr MakeBitmap(GrRecordingContext* context, + static std::unique_ptr MakeBitmap(GrRenderTargetContext* rtc, GrPaint&& paint, GrTextBlob::SubRun* subrun, const SkMatrix& drawMatrix, @@ -48,7 +46,7 @@ class GrAtlasTextOp final : public GrMeshDrawOp { const SkPMColor4f& filteredColor); static std::unique_ptr MakeDistanceField( - GrRecordingContext*, + GrRenderTargetContext*, GrPaint&&, GrTextBlob::SubRun*, const SkMatrix& drawMatrix, @@ -84,8 +82,15 @@ class GrAtlasTextOp final : public GrMeshDrawOp { MaskType maskType() const { return fMaskType; } - void finalizeForTextTarget(uint32_t color, const GrCaps&); - void executeForTextTarget(SkAtlasTextTarget*); +#if GR_TEST_UTILS + static std::unique_ptr CreateOpTestingOnly(GrRenderTargetContext* rtc, + const SkPaint& skPaint, + const SkFont& font, + const SkMatrixProvider& mtxProvider, + const char* text, + int x, + int y); +#endif private: friend class GrOpMemoryPool; // for ctor diff --git a/src/gpu/ops/GrClearOp.cpp b/src/gpu/ops/GrClearOp.cpp index 753f75da41317..821bdaac3014b 100644 --- a/src/gpu/ops/GrClearOp.cpp +++ b/src/gpu/ops/GrClearOp.cpp @@ -7,36 +7,81 @@ #include "src/gpu/ops/GrClearOp.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrOpsRenderPass.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" -std::unique_ptr GrClearOp::Make(GrRecordingContext* context, - const GrScissorState& scissor, - const SkPMColor4f& color, - const GrSurfaceProxy* dstProxy) { - const SkIRect rect = SkIRect::MakeSize(dstProxy->dimensions()); - if (scissor.enabled() && !SkIRect::Intersects(scissor.rect(), rect)) { - return nullptr; - } +static bool contains_scissor(const GrScissorState& a, const GrScissorState& b) { + return !a.enabled() || (b.enabled() && a.rect().contains(b.rect())); +} + +std::unique_ptr GrClearOp::MakeColor(GrRecordingContext* context, + const GrScissorState& scissor, + const SkPMColor4f& color) { + GrOpMemoryPool* pool = context->priv().opMemoryPool(); + return pool->allocate(Buffer::kColor, scissor, color, false); +} +std::unique_ptr GrClearOp::MakeStencilClip(GrRecordingContext* context, + const GrScissorState& scissor, + bool insideMask) { GrOpMemoryPool* pool = context->priv().opMemoryPool(); - return pool->allocate(scissor, color, dstProxy); + return pool->allocate(Buffer::kStencilClip, scissor, SkPMColor4f(), insideMask); } -GrClearOp::GrClearOp(const GrScissorState& scissor, const SkPMColor4f& color, - const GrSurfaceProxy* proxy) +GrClearOp::GrClearOp(Buffer buffer, const GrScissorState& scissor, + const SkPMColor4f& color, bool insideMask) : INHERITED(ClassID()) , fScissor(scissor) - , fColor(color) { - this->setBounds(scissor.enabled() ? SkRect::Make(scissor.rect()) : proxy->getBoundsRect(), - HasAABloat::kNo, IsHairline::kNo); + , fColor(color) + , fStencilInsideMask(insideMask) + , fBuffer(buffer) { + this->setBounds(SkRect::Make(scissor.rect()), HasAABloat::kNo, IsHairline::kNo); +} + +GrOp::CombineResult GrClearOp::onCombineIfPossible(GrOp* t, GrRecordingContext::Arenas*, + const GrCaps& caps) { + GrClearOp* other = t->cast(); + + if (other->fBuffer == fBuffer) { + // This could be much more complicated. Currently we look at cases where the new clear + // contains the old clear, or when the new clear is a subset of the old clear and they clear + // to the same value (color or stencil mask depending on target). + if (contains_scissor(other->fScissor, fScissor)) { + fScissor = other->fScissor; + fColor = other->fColor; + fStencilInsideMask = other->fStencilInsideMask; + return CombineResult::kMerged; + } else if (other->fColor == fColor && other->fStencilInsideMask == fStencilInsideMask && + contains_scissor(fScissor, other->fScissor)) { + return CombineResult::kMerged; + } + } else if (other->fScissor == fScissor) { + // When the scissors are the exact same but the buffers are different, we can combine and + // clear both stencil and clear together in onExecute(). + if (other->fBuffer & Buffer::kColor) { + SkASSERT((fBuffer & Buffer::kStencilClip) && !(fBuffer & Buffer::kColor)); + fColor = other->fColor; + } + if (other->fBuffer & Buffer::kStencilClip) { + SkASSERT(!(fBuffer & Buffer::kStencilClip) && (fBuffer & Buffer::kColor)); + fStencilInsideMask = other->fStencilInsideMask; + } + fBuffer = Buffer::kBoth; + } + return CombineResult::kCannotCombine; } void GrClearOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) { SkASSERT(state->opsRenderPass()); - state->opsRenderPass()->clear(fScissor, fColor); + if (fBuffer & Buffer::kColor) { + state->opsRenderPass()->clear(fScissor, fColor); + } + + if (fBuffer & Buffer::kStencilClip) { + state->opsRenderPass()->clearStencilClip(fScissor, fStencilInsideMask); + } } diff --git a/src/gpu/ops/GrClearOp.h b/src/gpu/ops/GrClearOp.h index 770a7de698183..5eaff4bb19cd0 100644 --- a/src/gpu/ops/GrClearOp.h +++ b/src/gpu/ops/GrClearOp.h @@ -8,6 +8,7 @@ #ifndef GrClearOp_DEFINED #define GrClearOp_DEFINED +#include "include/gpu/GrTypes.h" #include "src/gpu/GrScissorState.h" #include "src/gpu/ops/GrOp.h" @@ -18,10 +19,14 @@ class GrClearOp final : public GrOp { public: DEFINE_OP_CLASS_ID - static std::unique_ptr Make(GrRecordingContext* context, - const GrScissorState& scissor, - const SkPMColor4f& color, - const GrSurfaceProxy* dstProxy); + // A fullscreen or scissored clear, depending on the clip and proxy dimensions + static std::unique_ptr MakeColor(GrRecordingContext* context, + const GrScissorState& scissor, + const SkPMColor4f& color); + + static std::unique_ptr MakeStencilClip(GrRecordingContext* context, + const GrScissorState& scissor, + bool insideMask); const char* name() const override { return "Clear"; } @@ -41,39 +46,23 @@ class GrClearOp final : public GrOp { } #endif - const SkPMColor4f& color() const { return fColor; } - void setColor(const SkPMColor4f& color) { fColor = color; } - private: friend class GrOpMemoryPool; // for ctors - GrClearOp(const GrScissorState& scissor, const SkPMColor4f& color, const GrSurfaceProxy* proxy); + enum class Buffer { + kColor = 0b01, + kStencilClip = 0b10, - CombineResult onCombineIfPossible(GrOp* t, GrRecordingContext::Arenas*, - const GrCaps& caps) override { - // This could be much more complicated. Currently we look at cases where the new clear - // contains the old clear, or when the new clear is a subset of the old clear and is the - // same color. - GrClearOp* cb = t->cast(); - if (cb->contains(this)) { - fScissor = cb->fScissor; - fColor = cb->fColor; - return CombineResult::kMerged; - } else if (cb->fColor == fColor && this->contains(cb)) { - return CombineResult::kMerged; - } - return CombineResult::kCannotCombine; - } + kBoth = 0b11, + }; + GR_DECL_BITFIELD_CLASS_OPS_FRIENDS(Buffer); - bool contains(const GrClearOp* that) const { - // The constructor ensures that scissor gets disabled on any clip that fills the entire RT. - return !fScissor.enabled() || - (that->fScissor.enabled() && fScissor.rect().contains(that->fScissor.rect())); - } + GrClearOp(Buffer buffer, const GrScissorState& scissor, const SkPMColor4f& color, bool stencil); + + CombineResult onCombineIfPossible(GrOp* t, GrRecordingContext::Arenas*, + const GrCaps& caps) override; - void onPrePrepare(GrRecordingContext*, - const GrSurfaceProxyView* writeView, - GrAppliedClip*, + void onPrePrepare(GrRecordingContext*, const GrSurfaceProxyView* writeView, GrAppliedClip*, const GrXferProcessor::DstProxyView&) override {} void onPrepare(GrOpFlushState*) override {} @@ -82,8 +71,12 @@ class GrClearOp final : public GrOp { GrScissorState fScissor; SkPMColor4f fColor; + bool fStencilInsideMask; + Buffer fBuffer; typedef GrOp INHERITED; }; +GR_MAKE_BITFIELD_CLASS_OPS(GrClearOp::Buffer) + #endif diff --git a/src/gpu/ops/GrClearStencilClipOp.cpp b/src/gpu/ops/GrClearStencilClipOp.cpp deleted file mode 100644 index dc26471f1fe91..0000000000000 --- a/src/gpu/ops/GrClearStencilClipOp.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/gpu/ops/GrClearStencilClipOp.h" - -#include "include/private/GrRecordingContext.h" -#include "src/gpu/GrMemoryPool.h" -#include "src/gpu/GrOpFlushState.h" -#include "src/gpu/GrOpsRenderPass.h" -#include "src/gpu/GrRecordingContextPriv.h" - -std::unique_ptr GrClearStencilClipOp::Make(GrRecordingContext* context, - const GrScissorState& scissor, - bool insideStencilMask, - GrRenderTargetProxy* proxy) { - GrOpMemoryPool* pool = context->priv().opMemoryPool(); - - return pool->allocate(scissor, insideStencilMask, proxy); -} - -void GrClearStencilClipOp::onExecute(GrOpFlushState* state, const SkRect& chainBounds) { - SkASSERT(state->opsRenderPass()); - state->opsRenderPass()->clearStencilClip(fScissor, fInsideStencilMask); -} diff --git a/src/gpu/ops/GrClearStencilClipOp.h b/src/gpu/ops/GrClearStencilClipOp.h deleted file mode 100644 index f185cdec69216..0000000000000 --- a/src/gpu/ops/GrClearStencilClipOp.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2016 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef GrClearStencilClipOp_DEFINED -#define GrClearStencilClipOp_DEFINED - -#include "src/gpu/GrRenderTargetProxy.h" -#include "src/gpu/GrScissorState.h" -#include "src/gpu/ops/GrOp.h" - -class GrOpFlushState; -class GrRecordingContext; - -class GrClearStencilClipOp final : public GrOp { -public: - DEFINE_OP_CLASS_ID - - static std::unique_ptr Make(GrRecordingContext* context, - const GrScissorState& scissor, - bool insideStencilMask, - GrRenderTargetProxy* proxy); - - const char* name() const override { return "ClearStencilClip"; } - -#ifdef SK_DEBUG - SkString dumpInfo() const override { - SkString string("Scissor ["); - if (fScissor.enabled()) { - const SkIRect& r = fScissor.rect(); - string.appendf("L: %d, T: %d, R: %d, B: %d", r.fLeft, r.fTop, r.fRight, r.fBottom); - } else { - string.append("disabled"); - } - string.appendf("], insideMask: %s\n", fInsideStencilMask ? "true" : "false"); - string.append(INHERITED::dumpInfo()); - return string; - } -#endif - -private: - friend class GrOpMemoryPool; // for ctor - - GrClearStencilClipOp(const GrScissorState& scissor, bool insideStencilMask, - GrRenderTargetProxy* proxy) - : INHERITED(ClassID()) - , fScissor(scissor) - , fInsideStencilMask(insideStencilMask) { - const SkRect& bounds = - fScissor.enabled() ? SkRect::Make(fScissor.rect()) : proxy->getBoundsRect(); - this->setBounds(bounds, HasAABloat::kNo, IsHairline::kNo); - } - - void onPrePrepare(GrRecordingContext*, - const GrSurfaceProxyView* writeView, - GrAppliedClip*, - const GrXferProcessor::DstProxyView&) override {} - - void onPrepare(GrOpFlushState*) override {} - - void onExecute(GrOpFlushState*, const SkRect& chainBounds) override; - - const GrScissorState fScissor; - const bool fInsideStencilMask; - - typedef GrOp INHERITED; -}; - -#endif diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp index 6f663f6025a06..9d651102e9a03 100644 --- a/src/gpu/ops/GrDashOp.cpp +++ b/src/gpu/ops/GrDashOp.cpp @@ -5,12 +5,11 @@ * found in the LICENSE file. */ -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkMatrixPriv.h" #include "src/core/SkPointPriv.h" #include "src/gpu/GrAppliedClip.h" #include "src/gpu/GrCaps.h" -#include "src/gpu/GrCoordTransform.h" #include "src/gpu/GrDefaultGeoProcFactory.h" #include "src/gpu/GrDrawOpTest.h" #include "src/gpu/GrGeometryProcessor.h" @@ -870,20 +869,24 @@ class GLDashingCircleEffect : public GrGLSLGeometryProcessor { const GrShaderCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - const CoordTransformRange& transformRange) override; + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override; private: UniformHandle fParamUniform; UniformHandle fColorUniform; + UniformHandle fLocalMatrixUniform; + + SkMatrix fLocalMatrix; SkPMColor4f fColor; SkScalar fPrevRadius; SkScalar fPrevCenterX; SkScalar fPrevIntervalLength; + typedef GrGLSLGeometryProcessor INHERITED; }; GLDashingCircleEffect::GLDashingCircleEffect() { + fLocalMatrix = SkMatrix::InvalidMatrix(); fColor = SK_PMColor4fILLEGAL; fPrevRadius = SK_ScalarMin; fPrevCenterX = SK_ScalarMin; @@ -915,14 +918,10 @@ void GLDashingCircleEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { // Setup position this->writeOutputPosition(vertBuilder, gpArgs, dce.fInPosition.name()); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - dce.fInPosition.asShaderVar(), - dce.localMatrix(), - args.fFPCoordTransformHandler); + if (dce.usesLocalCoords()) { + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, dce.fInPosition.asShaderVar(), + dce.localMatrix(), &fLocalMatrixUniform); + } // transforms all points so that we can compare them to our test circle fragBuilder->codeAppendf("half xShifted = half(%s.x - floor(%s.x / %s.z) * %s.z);", @@ -944,14 +943,13 @@ void GLDashingCircleEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { } void GLDashingCircleEffect::setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& processor, - const CoordTransformRange& transformRange) { + const GrPrimitiveProcessor& processor) { const DashingCircleEffect& dce = processor.cast(); if (dce.color() != fColor) { pdman.set4fv(fColorUniform, 1, dce.color().vec()); fColor = dce.color(); } - this->setTransformDataHelper(dce.localMatrix(), pdman, transformRange); + this->setTransform(pdman, fLocalMatrixUniform, dce.localMatrix(), &fLocalMatrix); } void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, @@ -959,8 +957,9 @@ void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, GrProcessorKeyBuilder* b) { const DashingCircleEffect& dce = gp.cast(); uint32_t key = 0; - key |= dce.usesLocalCoords() && dce.localMatrix().hasPerspective() ? 0x1 : 0x0; + key |= dce.usesLocalCoords() ? 0x1 : 0x0; key |= static_cast(dce.aaMode()) << 1; + key |= ComputeMatrixKey(dce.localMatrix()) << 3; b->add32(key); } @@ -1080,12 +1079,15 @@ class GLDashingLineEffect : public GrGLSLGeometryProcessor { const GrShaderCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, - const CoordTransformRange&) override; + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override; private: SkPMColor4f fColor; UniformHandle fColorUniform; + + SkMatrix fLocalMatrix; + UniformHandle fLocalMatrixUniform; + typedef GrGLSLGeometryProcessor INHERITED; }; @@ -1118,14 +1120,10 @@ void GLDashingLineEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { // Setup position this->writeOutputPosition(vertBuilder, gpArgs, de.fInPosition.name()); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - de.fInPosition.asShaderVar(), - de.localMatrix(), - args.fFPCoordTransformHandler); + if (de.usesLocalCoords()) { + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, de.fInPosition.asShaderVar(), + de.localMatrix(), &fLocalMatrixUniform); + } // transforms all points so that we can compare them to our test rect fragBuilder->codeAppendf("half xShifted = half(%s.x - floor(%s.x / %s.z) * %s.z);", @@ -1171,14 +1169,13 @@ void GLDashingLineEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { } void GLDashingLineEffect::setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& processor, - const CoordTransformRange& transformRange) { + const GrPrimitiveProcessor& processor) { const DashingLineEffect& de = processor.cast(); if (de.color() != fColor) { pdman.set4fv(fColorUniform, 1, de.color().vec()); fColor = de.color(); } - this->setTransformDataHelper(de.localMatrix(), pdman, transformRange); + this->setTransform(pdman, fLocalMatrixUniform, de.localMatrix(), &fLocalMatrix); } void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, @@ -1186,8 +1183,9 @@ void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, GrProcessorKeyBuilder* b) { const DashingLineEffect& de = gp.cast(); uint32_t key = 0; - key |= de.usesLocalCoords() && de.localMatrix().hasPerspective() ? 0x1 : 0x0; - key |= static_cast(de.aaMode()) << 8; + key |= de.usesLocalCoords() ? 0x1 : 0x0; + key |= static_cast(de.aaMode()) << 1; + key |= ComputeMatrixKey(de.localMatrix()) << 3; b->add32(key); } diff --git a/src/gpu/ops/GrDefaultPathRenderer.cpp b/src/gpu/ops/GrDefaultPathRenderer.cpp index 6b906b6dba522..17ddfa8ff296e 100644 --- a/src/gpu/ops/GrDefaultPathRenderer.cpp +++ b/src/gpu/ops/GrDefaultPathRenderer.cpp @@ -10,13 +10,14 @@ #include "include/core/SkString.h" #include "include/core/SkStrokeRec.h" #include "src/core/SkGeometry.h" +#include "src/core/SkMatrixPriv.h" #include "src/core/SkTLazy.h" #include "src/core/SkTraceEvent.h" #include "src/gpu/GrAuditTrail.h" #include "src/gpu/GrCaps.h" +#include "src/gpu/GrClip.h" #include "src/gpu/GrDefaultGeoProcFactory.h" #include "src/gpu/GrDrawOpTest.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrProgramInfo.h" #include "src/gpu/GrRenderTargetContextPriv.h" @@ -583,7 +584,7 @@ bool GrDefaultPathRenderer::internalDrawPath(GrRenderTargetContext* renderTarget switch (path.getFillType()) { case SkPathFillType::kInverseEvenOdd: reverse = true; - // fallthrough + [[fallthrough]]; case SkPathFillType::kEvenOdd: passes[0] = &gEOStencilPass; if (stencilOnly) { @@ -602,7 +603,7 @@ bool GrDefaultPathRenderer::internalDrawPath(GrRenderTargetContext* renderTarget case SkPathFillType::kInverseWinding: reverse = true; - // fallthrough + [[fallthrough]]; case SkPathFillType::kWinding: passes[0] = &gWindStencilPass; passCount = 2; diff --git a/src/gpu/ops/GrDrawAtlasOp.cpp b/src/gpu/ops/GrDrawAtlasOp.cpp index 186ced55d4286..3248d41258321 100644 --- a/src/gpu/ops/GrDrawAtlasOp.cpp +++ b/src/gpu/ops/GrDrawAtlasOp.cpp @@ -8,8 +8,9 @@ #include "src/gpu/ops/GrDrawAtlasOp.h" #include "include/core/SkRSXform.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/utils/SkRandom.h" +#include "src/core/SkMatrixPriv.h" #include "src/core/SkRectPriv.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrDefaultGeoProcFactory.h" diff --git a/src/gpu/ops/GrDrawPathOp.cpp b/src/gpu/ops/GrDrawPathOp.cpp index 4da6756681db3..30425219d7685 100644 --- a/src/gpu/ops/GrDrawPathOp.cpp +++ b/src/gpu/ops/GrDrawPathOp.cpp @@ -5,7 +5,7 @@ * found in the LICENSE file. */ -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/SkTemplates.h" #include "src/gpu/GrAppliedClip.h" #include "src/gpu/GrMemoryPool.h" diff --git a/src/gpu/ops/GrDrawVerticesOp.cpp b/src/gpu/ops/GrDrawVerticesOp.cpp index d5388053b6396..ea678a2b1d7c1 100644 --- a/src/gpu/ops/GrDrawVerticesOp.cpp +++ b/src/gpu/ops/GrDrawVerticesOp.cpp @@ -9,6 +9,7 @@ #include "include/effects/SkRuntimeEffect.h" #include "src/core/SkArenaAlloc.h" #include "src/core/SkDevice.h" +#include "src/core/SkMatrixPriv.h" #include "src/core/SkVerticesPriv.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrProgramInfo.h" @@ -185,12 +186,7 @@ class VerticesGP : public GrGeometryProcessor { // emit transforms using either explicit local coords or positions const auto& coordsAttr = gp.localCoordsAttr().isInitialized() ? gp.localCoordsAttr() : gp.positionAttr(); - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - coordsAttr.asShaderVar(), - SkMatrix::I(), - args.fFPCoordTransformHandler); + gpArgs->fLocalCoordVar = coordsAttr.asShaderVar(); // Add varyings and globals for all custom attributes using Usage = SkVertices::Attribute::Usage; @@ -306,7 +302,7 @@ class VerticesGP : public GrGeometryProcessor { const VerticesGP& vgp = gp.cast(); uint32_t key = 0; key |= (vgp.fColorArrayType == ColorArrayType::kSkColor) ? 0x1 : 0; - key |= ComputePosKey(vgp.viewMatrix()) << 20; + key |= ComputeMatrixKey(vgp.viewMatrix()) << 20; b->add32(key); b->add32(GrColorSpaceXform::XformKey(vgp.fColorSpaceXform.get())); @@ -319,23 +315,16 @@ class VerticesGP : public GrGeometryProcessor { } void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& gp, - const CoordTransformRange& transformRange) override { + const GrPrimitiveProcessor& gp) override { const VerticesGP& vgp = gp.cast(); - if (!vgp.viewMatrix().isIdentity() && - !SkMatrixPriv::CheapEqual(fViewMatrix, vgp.viewMatrix())) { - fViewMatrix = vgp.viewMatrix(); - pdman.setSkMatrix(fViewMatrixUniform, fViewMatrix); - } + this->setTransform(pdman, fViewMatrixUniform, vgp.viewMatrix(), &fViewMatrix); if (!vgp.colorAttr().isInitialized() && vgp.color() != fColor) { pdman.set4fv(fColorUniform, 1, vgp.color().vec()); fColor = vgp.color(); } - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); - fColorSpaceHelper.setData(pdman, vgp.fColorSpaceXform.get()); for (const auto& matrixUni : fCustomMatrixUniforms) { diff --git a/src/gpu/ops/GrDrawableOp.cpp b/src/gpu/ops/GrDrawableOp.cpp index 19291b80d575d..a8ba5475d9900 100644 --- a/src/gpu/ops/GrDrawableOp.cpp +++ b/src/gpu/ops/GrDrawableOp.cpp @@ -8,7 +8,7 @@ #include "src/gpu/ops/GrDrawableOp.h" #include "include/core/SkDrawable.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrOpsRenderPass.h" diff --git a/src/gpu/ops/GrFillRRectOp.cpp b/src/gpu/ops/GrFillRRectOp.cpp index 76122e576ce35..e458c33574d5d 100644 --- a/src/gpu/ops/GrFillRRectOp.cpp +++ b/src/gpu/ops/GrFillRRectOp.cpp @@ -7,7 +7,7 @@ #include "src/gpu/ops/GrFillRRectOp.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkRRectPriv.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrMemoryPool.h" @@ -680,15 +680,13 @@ class FillRRectOp::Processor::CoverageImpl : public GrGLSLGeometryProcessor { v->codeAppend("float2 aa_outset = aa_bloat_direction.xy * aa_bloatradius;"); v->codeAppend("float2 vertexpos = corner + radius_outset * radii + aa_outset;"); - // Emit transforms. + // Write positions GrShaderVar localCoord("", kFloat2_GrSLType); if (proc.fFlags & ProcessorFlags::kHasLocalCoords) { v->codeAppend("float2 localcoord = (local_rect.xy * (1 - vertexpos) + " "local_rect.zw * (1 + vertexpos)) * .5;"); - localCoord.set(kFloat2_GrSLType, "localcoord"); + gpArgs->fLocalCoordVar.set(kFloat2_GrSLType, "localcoord"); } - this->emitTransforms(v, varyings, args.fUniformHandler, localCoord, - args.fFPCoordTransformHandler); // Transform to device space. SkASSERT(!(proc.fFlags & ProcessorFlags::kHasPerspective)); @@ -741,10 +739,7 @@ class FillRRectOp::Processor::CoverageImpl : public GrGLSLGeometryProcessor { f->codeAppendf("%s = half4(coverage);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - const CoordTransformRange& transformRange) override { - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); - } + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&) override {} }; @@ -781,15 +776,13 @@ class FillRRectOp::Processor::MSAAImpl : public GrGLSLGeometryProcessor { // [-1,-1,+1,+1] space. v->codeAppend("float2 vertexpos = corner + radius_outset * radii;"); - // Emit transforms. + // Write positions GrShaderVar localCoord("", kFloat2_GrSLType); if (hasLocalCoords) { v->codeAppend("float2 localcoord = (local_rect.xy * (1 - vertexpos) + " "local_rect.zw * (1 + vertexpos)) * .5;"); - localCoord.set(kFloat2_GrSLType, "localcoord"); + gpArgs->fLocalCoordVar.set(kFloat2_GrSLType, "localcoord"); } - this->emitTransforms(v, varyings, args.fUniformHandler, localCoord, - args.fFPCoordTransformHandler); // Transform to device space. if (!hasPerspective) { @@ -847,10 +840,7 @@ class FillRRectOp::Processor::MSAAImpl : public GrGLSLGeometryProcessor { f->codeAppendf("}"); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - const CoordTransformRange& transformRange) override { - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); - } + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&) override {} }; GrGLSLPrimitiveProcessor* FillRRectOp::Processor::createGLSLInstance( diff --git a/src/gpu/ops/GrFillRectOp.cpp b/src/gpu/ops/GrFillRectOp.cpp index 645a0f70d3803..5d20400675b5c 100644 --- a/src/gpu/ops/GrFillRectOp.cpp +++ b/src/gpu/ops/GrFillRectOp.cpp @@ -250,7 +250,7 @@ class FillRectOp final : public GrMeshDrawOp { SkArenaAlloc* arena = context->priv().recordTimeAllocator(); // This is equivalent to a GrOpFlushState::detachAppliedClip - GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip::Disabled(); this->createProgramInfo(context->priv().caps(), arena, writeView, std::move(appliedClip), dstProxyView); diff --git a/src/gpu/ops/GrLatticeOp.cpp b/src/gpu/ops/GrLatticeOp.cpp index 7efe3a322faf2..db3a1b9f7cda5 100644 --- a/src/gpu/ops/GrLatticeOp.cpp +++ b/src/gpu/ops/GrLatticeOp.cpp @@ -46,10 +46,9 @@ class LatticeGP : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps& caps) const override { class GLSLProcessor : public GrGLSLGeometryProcessor { public: - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& proc) override { const auto& latticeGP = proc.cast(); - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); fColorSpaceXformHelper.setData(pdman, latticeGP.fColorSpaceXform.get()); } @@ -62,11 +61,8 @@ class LatticeGP : public GrGeometryProcessor { args.fVaryingHandler->emitAttributes(latticeGP); this->writeOutputPosition(args.fVertBuilder, gpArgs, latticeGP.fInPosition.name()); - this->emitTransforms(args.fVertBuilder, - args.fVaryingHandler, - args.fUniformHandler, - latticeGP.fInTextureCoords.asShaderVar(), - args.fFPCoordTransformHandler); + gpArgs->fLocalCoordVar = latticeGP.fInTextureCoords.asShaderVar(); + args.fFragBuilder->codeAppend("float2 textureCoords;"); args.fVaryingHandler->addPassThroughAttribute(latticeGP.fInTextureCoords, "textureCoords"); diff --git a/src/gpu/ops/GrMeshDrawOp.cpp b/src/gpu/ops/GrMeshDrawOp.cpp index f5a8c04047790..809620b91b71f 100644 --- a/src/gpu/ops/GrMeshDrawOp.cpp +++ b/src/gpu/ops/GrMeshDrawOp.cpp @@ -33,7 +33,7 @@ void GrMeshDrawOp::onPrePrepareDraws(GrRecordingContext* context, SkArenaAlloc* arena = context->priv().recordTimeAllocator(); // This is equivalent to a GrOpFlushState::detachAppliedClip - GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip(); + GrAppliedClip appliedClip = clip ? std::move(*clip) : GrAppliedClip::Disabled(); this->createProgramInfo(context->priv().caps(), arena, writeView, std::move(appliedClip), dstProxyView); diff --git a/src/gpu/ops/GrOp.h b/src/gpu/ops/GrOp.h index 292317b183abf..f642a415827b9 100644 --- a/src/gpu/ops/GrOp.h +++ b/src/gpu/ops/GrOp.h @@ -11,7 +11,7 @@ #include "include/core/SkMatrix.h" #include "include/core/SkRect.h" #include "include/core/SkString.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrGpuResource.h" #include "src/gpu/GrNonAtomicRef.h" #include "src/gpu/GrTracing.h" diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp index d85755781bf2e..bf8eca0bb792f 100644 --- a/src/gpu/ops/GrOvalOpFactory.cpp +++ b/src/gpu/ops/GrOvalOpFactory.cpp @@ -6,6 +6,7 @@ */ #include "include/core/SkStrokeRec.h" +#include "src/core/SkMatrixPriv.h" #include "src/core/SkRRectPriv.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrDrawOpTest.h" @@ -155,14 +156,9 @@ class CircleGeometryProcessor : public GrGeometryProcessor { // Setup position this->writeOutputPosition(vertBuilder, gpArgs, cgp.fInPosition.name()); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - cgp.fInPosition.asShaderVar(), - cgp.fLocalMatrix, - args.fFPCoordTransformHandler); + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, + cgp.fInPosition.asShaderVar(), cgp.fLocalMatrix, + &fLocalMatrixUniform); fragBuilder->codeAppend("float d = length(circleEdge.xy);"); fragBuilder->codeAppend("half distanceToOuterEdge = half(circleEdge.z * (1.0 - d));"); @@ -210,24 +206,28 @@ class CircleGeometryProcessor : public GrGeometryProcessor { const GrShaderCaps&, GrProcessorKeyBuilder* b) { const CircleGeometryProcessor& cgp = gp.cast(); - uint16_t key; + uint32_t key; key = cgp.fStroke ? 0x01 : 0x0; - key |= cgp.fLocalMatrix.hasPerspective() ? 0x02 : 0x0; - key |= cgp.fInClipPlane.isInitialized() ? 0x04 : 0x0; - key |= cgp.fInIsectPlane.isInitialized() ? 0x08 : 0x0; - key |= cgp.fInUnionPlane.isInitialized() ? 0x10 : 0x0; - key |= cgp.fInRoundCapCenters.isInitialized() ? 0x20 : 0x0; + key |= cgp.fInClipPlane.isInitialized() ? 0x02 : 0x0; + key |= cgp.fInIsectPlane.isInitialized() ? 0x04 : 0x0; + key |= cgp.fInUnionPlane.isInitialized() ? 0x08 : 0x0; + key |= cgp.fInRoundCapCenters.isInitialized() ? 0x10 : 0x0; + key |= (ComputeMatrixKey(cgp.fLocalMatrix) << 16); b->add32(key); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { - this->setTransformDataHelper(primProc.cast().fLocalMatrix, - pdman, transformRange); + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { + this->setTransform(pdman, fLocalMatrixUniform, + primProc.cast().fLocalMatrix, + &fLocalMatrix); } private: typedef GrGLSLGeometryProcessor INHERITED; + + SkMatrix fLocalMatrix = SkMatrix::InvalidMatrix(); + UniformHandle fLocalMatrixUniform; }; SkMatrix fLocalMatrix; @@ -389,14 +389,10 @@ class ButtCapDashedCircleGeometryProcessor : public GrGeometryProcessor { // Setup position this->writeOutputPosition(vertBuilder, gpArgs, bcscgp.fInPosition.name()); + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, + bcscgp.fInPosition.asShaderVar(), bcscgp.fLocalMatrix, + &fLocalMatrixUniform); - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - bcscgp.fInPosition.asShaderVar(), - bcscgp.fLocalMatrix, - args.fFPCoordTransformHandler); GrShaderVar fnArgs[] = { GrShaderVar("angleToEdge", kFloat_GrSLType), GrShaderVar("diameter", kFloat_GrSLType), @@ -477,18 +473,21 @@ class ButtCapDashedCircleGeometryProcessor : public GrGeometryProcessor { GrProcessorKeyBuilder* b) { const ButtCapDashedCircleGeometryProcessor& bcscgp = gp.cast(); - b->add32(bcscgp.fLocalMatrix.hasPerspective()); + b->add32(ComputeMatrixKey(bcscgp.fLocalMatrix)); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { - this->setTransformDataHelper( - primProc.cast().fLocalMatrix, pdman, - transformRange); + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { + this->setTransform(pdman, fLocalMatrixUniform, + primProc.cast().fLocalMatrix, + &fLocalMatrix); } private: typedef GrGLSLGeometryProcessor INHERITED; + + SkMatrix fLocalMatrix = SkMatrix::InvalidMatrix(); + UniformHandle fLocalMatrixUniform; }; SkMatrix fLocalMatrix; @@ -588,14 +587,10 @@ class EllipseGeometryProcessor : public GrGeometryProcessor { // Setup position this->writeOutputPosition(vertBuilder, gpArgs, egp.fInPosition.name()); + this->writeLocalCoord(vertBuilder, uniformHandler, gpArgs, + egp.fInPosition.asShaderVar(), egp.fLocalMatrix, + &fLocalMatrixUniform); - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - egp.fInPosition.asShaderVar(), - egp.fLocalMatrix, - args.fFPCoordTransformHandler); // For stroked ellipses, we use the full ellipse equation (x^2/a^2 + y^2/b^2 = 1) // to compute both the edges because we need two separate test equations for // the single offset. @@ -666,19 +661,22 @@ class EllipseGeometryProcessor : public GrGeometryProcessor { const GrShaderCaps&, GrProcessorKeyBuilder* b) { const EllipseGeometryProcessor& egp = gp.cast(); - uint16_t key = egp.fStroke ? 0x1 : 0x0; - key |= egp.fLocalMatrix.hasPerspective() ? 0x2 : 0x0; + uint32_t key = egp.fStroke ? 0x1 : 0x0; + key |= ComputeMatrixKey(egp.fLocalMatrix) << 1; b->add32(key); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { const EllipseGeometryProcessor& egp = primProc.cast(); - this->setTransformDataHelper(egp.fLocalMatrix, pdman, transformRange); + this->setTransform(pdman, fLocalMatrixUniform, egp.fLocalMatrix, &fLocalMatrix); } private: typedef GrGLSLGeometryProcessor INHERITED; + + SkMatrix fLocalMatrix = SkMatrix::InvalidMatrix(); + UniformHandle fLocalMatrixUniform; }; Attribute fInPosition; @@ -791,13 +789,7 @@ class DIEllipseGeometryProcessor : public GrGeometryProcessor { diegp.fInPosition.name(), diegp.fViewMatrix, &fViewMatrixUniform); - - // emit transforms - this->emitTransforms(vertBuilder, - varyingHandler, - uniformHandler, - diegp.fInPosition.asShaderVar(), - args.fFPCoordTransformHandler); + gpArgs->fLocalCoordVar = diegp.fInPosition.asShaderVar(); // for outer curve fragBuilder->codeAppendf("float2 scaledOffset = %s.xy;", offsets0.fsIn()); @@ -862,26 +854,20 @@ class DIEllipseGeometryProcessor : public GrGeometryProcessor { const GrShaderCaps&, GrProcessorKeyBuilder* b) { const DIEllipseGeometryProcessor& diegp = gp.cast(); - uint16_t key = static_cast(diegp.fStyle); - key |= ComputePosKey(diegp.fViewMatrix) << 10; + uint32_t key = static_cast(diegp.fStyle); + key |= ComputeMatrixKey(diegp.fViewMatrix) << 10; b->add32(key); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& gp) override { const DIEllipseGeometryProcessor& diegp = gp.cast(); - if (!diegp.fViewMatrix.isIdentity() && - !SkMatrixPriv::CheapEqual(fViewMatrix, diegp.fViewMatrix)) - { - fViewMatrix = diegp.fViewMatrix; - pdman.setSkMatrix(fViewMatrixUniform, fViewMatrix); - } - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); + this->setTransform(pdman, fViewMatrixUniform, diegp.fViewMatrix, &fViewMatrix); } private: - SkMatrix fViewMatrix; + SkMatrix fViewMatrix; UniformHandle fViewMatrixUniform; typedef GrGLSLGeometryProcessor INHERITED; diff --git a/src/gpu/ops/GrQuadPerEdgeAA.cpp b/src/gpu/ops/GrQuadPerEdgeAA.cpp index bc5de24d96852..cabd326c0dfc2 100644 --- a/src/gpu/ops/GrQuadPerEdgeAA.cpp +++ b/src/gpu/ops/GrQuadPerEdgeAA.cpp @@ -568,10 +568,9 @@ class QuadPerEdgeAAGeometryProcessor : public GrGeometryProcessor { GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps& caps) const override { class GLSLProcessor : public GrGLSLGeometryProcessor { public: - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& proc) override { const auto& gp = proc.cast(); - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); fTextureColorSpaceXformHelper.setData(pdman, gp.fTextureColorSpaceXform.get()); } @@ -604,18 +603,10 @@ class QuadPerEdgeAAGeometryProcessor : public GrGeometryProcessor { gpArgs->fPositionVar = gp.fPosition.asShaderVar(); } - // Handle local coordinates if they exist. This is required even when the op - // isn't providing local coords but there are FPs called with explicit coords. - // It installs the uniforms that transform their coordinates in the fragment - // shader. - // NOTE: If the only usage of local coordinates is for the inline texture fetch - // before FPs, then there are no registered FPCoordTransforms and this ends up - // emitting nothing, so there isn't a duplication of local coordinates - this->emitTransforms(args.fVertBuilder, - args.fVaryingHandler, - args.fUniformHandler, - gp.fLocalCoord.asShaderVar(), - args.fFPCoordTransformHandler); + // This attribute will be uninitialized if earlier FP analysis determined no + // local coordinates are needed (and this will not include the inline texture + // fetch this GP does before invoking FPs). + gpArgs->fLocalCoordVar = gp.fLocalCoord.asShaderVar(); // Solid color before any texturing gets modulated in if (gp.fColor.isInitialized()) { diff --git a/src/gpu/ops/GrShadowRRectOp.cpp b/src/gpu/ops/GrShadowRRectOp.cpp index c09cbd7ab7182..d82945a7b2872 100644 --- a/src/gpu/ops/GrShadowRRectOp.cpp +++ b/src/gpu/ops/GrShadowRRectOp.cpp @@ -7,7 +7,7 @@ #include "src/gpu/ops/GrShadowRRectOp.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkRRectPriv.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrDrawOpTest.h" diff --git a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h index 2b830c3c1297f..0f9e46a6c5b85 100644 --- a/src/gpu/ops/GrSimpleMeshDrawOpHelper.h +++ b/src/gpu/ops/GrSimpleMeshDrawOpHelper.h @@ -8,7 +8,7 @@ #ifndef GrSimpleMeshDrawOpHelper_DEFINED #define GrSimpleMeshDrawOpHelper_DEFINED -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrPipeline.h" diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp index 0f3ab8ae4fb8f..9df6ce56ed594 100644 --- a/src/gpu/ops/GrSmallPathRenderer.cpp +++ b/src/gpu/ops/GrSmallPathRenderer.cpp @@ -13,6 +13,7 @@ #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkDistanceFieldGen.h" #include "src/core/SkDraw.h" +#include "src/core/SkMatrixPriv.h" #include "src/core/SkMatrixProvider.h" #include "src/core/SkPointPriv.h" #include "src/core/SkRasterClip.h" diff --git a/src/gpu/ops/GrStencilAndCoverPathRenderer.cpp b/src/gpu/ops/GrStencilAndCoverPathRenderer.cpp index 61f6a11cbadb8..48e5d47e98c5e 100644 --- a/src/gpu/ops/GrStencilAndCoverPathRenderer.cpp +++ b/src/gpu/ops/GrStencilAndCoverPathRenderer.cpp @@ -5,9 +5,8 @@ * found in the LICENSE file. */ -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrPath.h" #include "src/gpu/GrRenderTargetContextPriv.h" @@ -33,7 +32,7 @@ GrStencilAndCoverPathRenderer::GrStencilAndCoverPathRenderer(GrResourceProvider* } static bool has_matrix(const GrFragmentProcessor& fp) { - if (fp.sampleMatrix().fKind != SkSL::SampleMatrix::Kind::kNone) { + if (fp.sampleUsage().hasMatrix()) { return true; } for (int i = fp.numChildProcessors() - 1; i >= 0; --i) { @@ -125,15 +124,16 @@ bool GrStencilAndCoverPathRenderer::onDrawPath(const DrawPathArgs& args) { args.fRenderTargetContext->height()); // Inverse fill. // fake inverse with a stencil and cover - GrAppliedClip appliedClip; - if (args.fClip && !args.fClip->apply( + GrAppliedClip appliedClip(args.fRenderTargetContext->dimensions()); + if (args.fClip && args.fClip->apply( args.fContext, args.fRenderTargetContext, doStencilMSAA, true, &appliedClip, - &devBounds)) { + &devBounds) == GrClip::Effect::kClippedOut) { return true; } - GrStencilClip stencilClip(appliedClip.stencilStackID()); + GrStencilClip stencilClip(args.fRenderTargetContext->dimensions(), + appliedClip.stencilStackID()); if (appliedClip.scissorState().enabled()) { - stencilClip.fixedClip().setScissor(appliedClip.scissorState().rect()); + SkAssertResult(stencilClip.fixedClip().setScissor(appliedClip.scissorState().rect())); } if (appliedClip.windowRectsState().enabled()) { stencilClip.fixedClip().setWindowRectangles(appliedClip.windowRectsState().windows(), diff --git a/src/gpu/ops/GrStencilPathOp.cpp b/src/gpu/ops/GrStencilPathOp.cpp index 50baf5d4d288b..150fbb1833b1f 100644 --- a/src/gpu/ops/GrStencilPathOp.cpp +++ b/src/gpu/ops/GrStencilPathOp.cpp @@ -7,7 +7,7 @@ #include "src/gpu/ops/GrStencilPathOp.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrMemoryPool.h" #include "src/gpu/GrOpFlushState.h" diff --git a/src/gpu/ops/GrStrokeRectOp.cpp b/src/gpu/ops/GrStrokeRectOp.cpp index e3f144029e713..7bbfc0f81e3c6 100644 --- a/src/gpu/ops/GrStrokeRectOp.cpp +++ b/src/gpu/ops/GrStrokeRectOp.cpp @@ -10,6 +10,7 @@ #include "include/core/SkStrokeRec.h" #include "include/private/GrResourceKey.h" #include "include/utils/SkRandom.h" +#include "src/core/SkMatrixPriv.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColor.h" #include "src/gpu/GrDefaultGeoProcFactory.h" diff --git a/src/gpu/ops/GrTextureOp.cpp b/src/gpu/ops/GrTextureOp.cpp index f07148e8a95ca..408f47df57ad7 100644 --- a/src/gpu/ops/GrTextureOp.cpp +++ b/src/gpu/ops/GrTextureOp.cpp @@ -9,7 +9,7 @@ #include "include/core/SkPoint.h" #include "include/core/SkPoint3.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/SkFloatingPoint.h" #include "include/private/SkTo.h" #include "src/core/SkMathPriv.h" @@ -1058,21 +1058,20 @@ std::unique_ptr GrTextureOp::Make(GrRecordingContext* context, const auto& caps = *context->priv().caps(); SkRect localRect; if (quad->fLocal.asRect(&localRect)) { - fp = GrTextureEffect::MakeSubset(std::move(proxyView), alphaType, SkMatrix::I(), filter, - *subset, localRect, caps); + fp = GrTextureEffect::MakeSubset(std::move(proxyView), alphaType, SkMatrix::I(), + filter, *subset, localRect, caps); } else { - fp = GrTextureEffect::MakeSubset(std::move(proxyView), alphaType, SkMatrix::I(), filter, - *subset, caps); + fp = GrTextureEffect::MakeSubset(std::move(proxyView), alphaType, SkMatrix::I(), + filter, *subset, caps); } } else { fp = GrTextureEffect::Make(std::move(proxyView), alphaType, SkMatrix::I(), filter); } fp = GrColorSpaceXformEffect::Make(std::move(fp), std::move(textureXform)); - paint.addColorFragmentProcessor(std::move(fp)); if (saturate == GrTextureOp::Saturate::kYes) { - paint.addColorFragmentProcessor(GrClampFragmentProcessor::Make(false)); + fp = GrClampFragmentProcessor::Make(std::move(fp), /*clampToPremul=*/false); } - + paint.addColorFragmentProcessor(std::move(fp)); return GrFillRectOp::Make(context, std::move(paint), aaType, quad); } } @@ -1261,7 +1260,7 @@ void GrTextureOp::AddTextureSetOps(GrRenderTargetContext* rtc, } #if GR_TEST_UTILS -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRecordingContextPriv.h" diff --git a/src/gpu/tessellate/GrDrawAtlasPathOp.cpp b/src/gpu/tessellate/GrDrawAtlasPathOp.cpp index 2e456f57a2116..90337d6462780 100644 --- a/src/gpu/tessellate/GrDrawAtlasPathOp.cpp +++ b/src/gpu/tessellate/GrDrawAtlasPathOp.cpp @@ -85,26 +85,22 @@ class DrawAtlasPathShader::Impl : public GrGLSLGeometryProcessor { gpArgs->fPositionVar.set(kFloat2_GrSLType, "devcoord"); - GrShaderVar localCoord = gpArgs->fPositionVar; if (shader.fUsesLocalCoords) { args.fVertBuilder->codeAppendf(R"( float2x2 M = float2x2(viewmatrix_scaleskew); float2 localcoord = inverse(M) * (devcoord - viewmatrix_trans);)"); - localCoord.set(kFloat2_GrSLType, "localcoord"); + gpArgs->fLocalCoordVar.set(kFloat2_GrSLType, "localcoord"); } - this->emitTransforms(args.fVertBuilder, args.fVaryingHandler, args.fUniformHandler, - localCoord, args.fFPCoordTransformHandler); args.fFragBuilder->codeAppendf("%s = ", args.fOutputCoverage); args.fFragBuilder->appendTextureLookup(args.fTexSamplers[0], atlasCoord.fsIn()); args.fFragBuilder->codeAppendf(".aaaa;"); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { const SkISize& dimensions = primProc.cast().fAtlasDimensions; pdman.set2f(fAtlasAdjustUniform, 1.f / dimensions.width(), 1.f / dimensions.height()); - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } GrGLSLUniformHandler::UniformHandle fAtlasAdjustUniform; diff --git a/src/gpu/tessellate/GrFillPathShader.cpp b/src/gpu/tessellate/GrFillPathShader.cpp index f87ac4a03cede..3d6005cf7e073 100644 --- a/src/gpu/tessellate/GrFillPathShader.cpp +++ b/src/gpu/tessellate/GrFillPathShader.cpp @@ -26,11 +26,8 @@ class GrFillPathShader::Impl : public GrGLSLGeometryProcessor { args.fVertBuilder->codeAppend("float2 localcoord, vertexpos;"); shader.emitVertexCode(this, args.fVertBuilder, viewMatrix, args.fUniformHandler); - this->emitTransforms(args.fVertBuilder, args.fVaryingHandler, args.fUniformHandler, - GrShaderVar("localcoord", kFloat2_GrSLType), - args.fFPCoordTransformHandler); - gpArgs->fPositionVar.set(kFloat2_GrSLType, "vertexpos"); + gpArgs->fLocalCoordVar.set(kFloat2_GrSLType, "localcoord"); const char* color; fColorUniform = args.fUniformHandler->addUniform( @@ -40,8 +37,8 @@ class GrFillPathShader::Impl : public GrGLSLGeometryProcessor { args.fFragBuilder->codeAppendf("%s = half4(1);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { const GrFillPathShader& shader = primProc.cast(); pdman.setSkMatrix(fViewMatrixUniform, shader.viewMatrix()); @@ -52,8 +49,6 @@ class GrFillPathShader::Impl : public GrGLSLGeometryProcessor { const SkRect& b = primProc.cast().pathBounds(); pdman.set4f(fPathBoundsUniform, b.left(), b.top(), b.right(), b.bottom()); } - - this->setTransformDataHelper(SkMatrix::I(), pdman, transformRange); } GrGLSLUniformHandler::UniformHandle fViewMatrixUniform; diff --git a/src/gpu/tessellate/GrResolveLevelCounter.h b/src/gpu/tessellate/GrResolveLevelCounter.h index c74f46cbe4f5a..d37ee7a010c3c 100644 --- a/src/gpu/tessellate/GrResolveLevelCounter.h +++ b/src/gpu/tessellate/GrResolveLevelCounter.h @@ -9,7 +9,7 @@ #define GrResolveLevelCounter_DEFINED #include "src/core/SkPathPriv.h" -#include "src/gpu/tessellate/GrStencilPathShader.h" +#include "src/gpu/tessellate/GrTessellationPathRenderer.h" #include "src/gpu/tessellate/GrWangsFormula.h" // This class helps bin cubics by log2 "resolveLevel" when we don't use hardware tessellation. It is @@ -22,7 +22,7 @@ class GrResolveLevelCounter { SkDEBUGCODE(fHasCalledReset = true;) } - int reset(const SkPath& path, const SkMatrix& viewMatrix, float intolerance) { + void reset(const SkPath& path, const SkMatrix& viewMatrix, float intolerance) { this->reset(); GrVectorXform xform(viewMatrix); for (auto [verb, pts, w] : SkPathPriv::Iterate(path)) { @@ -38,7 +38,6 @@ class GrResolveLevelCounter { break; } } - return fTotalCubicInstanceCount; } void countCubic(int resolveLevel) { @@ -48,7 +47,7 @@ class GrResolveLevelCounter { // Cubics with 2^0=1 segments are empty (zero area). We ignore them completely. return; } - resolveLevel = std::min(resolveLevel, GrMiddleOutCubicShader::kMaxResolveLevel); + resolveLevel = std::min(resolveLevel, GrTessellationPathRenderer::kMaxResolveLevel); if (!fInstanceCounts[resolveLevel]++) { ++fTotalCubicIndirectDrawCount; } @@ -58,7 +57,7 @@ class GrResolveLevelCounter { int operator[](int resolveLevel) const { SkASSERT(fHasCalledReset); SkASSERT(resolveLevel > 0); // Empty cubics with 2^0=1 segments do not need to be drawn. - SkASSERT(resolveLevel <= GrMiddleOutCubicShader::kMaxResolveLevel); + SkASSERT(resolveLevel <= GrTessellationPathRenderer::kMaxResolveLevel); return fInstanceCounts[resolveLevel]; } int totalCubicInstanceCount() const { return fTotalCubicInstanceCount; } @@ -66,7 +65,7 @@ class GrResolveLevelCounter { private: SkDEBUGCODE(bool fHasCalledReset = false;) - int fInstanceCounts[GrMiddleOutCubicShader::kMaxResolveLevel + 1]; + int fInstanceCounts[GrTessellationPathRenderer::kMaxResolveLevel + 1]; int fTotalCubicInstanceCount = 0; int fTotalCubicIndirectDrawCount = 0; }; diff --git a/src/gpu/tessellate/GrStencilPathShader.cpp b/src/gpu/tessellate/GrStencilPathShader.cpp index fadc5b16b3ba0..24043d3aff495 100644 --- a/src/gpu/tessellate/GrStencilPathShader.cpp +++ b/src/gpu/tessellate/GrStencilPathShader.cpp @@ -14,7 +14,7 @@ // Wang's formula for cubics (1985) gives us the number of evenly spaced (in the // parametric sense) line segments that are guaranteed to be within a distance of // "MAX_LINEARIZATION_ERROR" from the actual curve. -constexpr char kWangsFormulaCubicFn[] = R"( +constexpr static char kWangsFormulaCubicFn[] = R"( #define MAX_LINEARIZATION_ERROR 0.25 // 1/4 pixel float wangs_formula_cubic(vec2 p0, vec2 p1, vec2 p2, vec2 p3) { float k = (3.0 * 2.0) / (8.0 * MAX_LINEARIZATION_ERROR); @@ -24,7 +24,7 @@ constexpr char kWangsFormulaCubicFn[] = R"( })"; // Evaluate our point of interest using numerically stable mix() operations. -constexpr char kEvalCubicFn[] = R"( +constexpr static char kEvalCubicFn[] = R"( vec2 eval_cubic(mat4x2 P, float T) { vec2 ab = mix(P[0], P[1], T); vec2 bc = mix(P[1], P[2], T); @@ -61,8 +61,8 @@ class GrStencilPathShader::Impl : public GrGLSLGeometryProcessor { // No fragment shader. } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, - const CoordTransformRange& transformRange) override { + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { const auto& shader = primProc.cast(); if (!shader.viewMatrix().isIdentity()) { pdman.setSkMatrix(fViewMatrixUniform, shader.viewMatrix()); @@ -76,7 +76,9 @@ GrGLSLPrimitiveProcessor* GrStencilPathShader::createGLSLInstance(const GrShader return new Impl; } -SkString GrTessellateCubicShader::getTessControlShaderGLSL(const char* versionAndExtensionDecls, +SkString GrTessellateCubicShader::getTessControlShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const { SkString code(versionAndExtensionDecls); code.append(kWangsFormulaCubicFn); @@ -116,8 +118,9 @@ SkString GrTessellateCubicShader::getTessControlShaderGLSL(const char* versionAn return code; } -SkString GrTessellateCubicShader::getTessEvaluationShaderGLSL(const char* versionAndExtensionDecls, - const GrShaderCaps&) const { +SkString GrTessellateCubicShader::getTessEvaluationShaderGLSL( + const GrGLSLPrimitiveProcessor*, const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const { SkString code(versionAndExtensionDecls); code.append(kEvalCubicFn); code.append(R"( @@ -148,7 +151,9 @@ SkString GrTessellateCubicShader::getTessEvaluationShaderGLSL(const char* versio return code; } -SkString GrTessellateWedgeShader::getTessControlShaderGLSL(const char* versionAndExtensionDecls, +SkString GrTessellateWedgeShader::getTessControlShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const { SkString code(versionAndExtensionDecls); code.append(kWangsFormulaCubicFn); @@ -184,8 +189,9 @@ SkString GrTessellateWedgeShader::getTessControlShaderGLSL(const char* versionAn return code; } -SkString GrTessellateWedgeShader::getTessEvaluationShaderGLSL(const char* versionAndExtensionDecls, - const GrShaderCaps&) const { +SkString GrTessellateWedgeShader::getTessEvaluationShaderGLSL( + const GrGLSLPrimitiveProcessor*, const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const { SkString code(versionAndExtensionDecls); code.append(kEvalCubicFn); code.append(R"( @@ -220,6 +226,8 @@ SkString GrTessellateWedgeShader::getTessEvaluationShaderGLSL(const char* versio return code; } +constexpr static int kMaxResolveLevel = GrTessellationPathRenderer::kMaxResolveLevel; + GR_DECLARE_STATIC_UNIQUE_KEY(gMiddleOutIndexBufferKey); sk_sp GrMiddleOutCubicShader::FindOrMakeMiddleOutIndexBuffer( @@ -231,21 +239,21 @@ sk_sp GrMiddleOutCubicShader::FindOrMakeMiddleOutIndexBuffer( // One explicit triangle at index 0, and one middle-out cubic with kMaxResolveLevel line // segments beginning at index 3. - constexpr static int indexCount = 3 + NumVerticesAtResolveLevel(kMaxResolveLevel); + constexpr static int kIndexCount = 3 + NumVerticesAtResolveLevel(kMaxResolveLevel); auto buffer = resourceProvider->createBuffer( - indexCount * sizeof(uint16_t), GrGpuBufferType::kIndex, kStatic_GrAccessPattern); + kIndexCount * sizeof(uint16_t), GrGpuBufferType::kIndex, kStatic_GrAccessPattern); if (!buffer) { return nullptr; } // We shouldn't bin and/or cache static buffers. - SkASSERT(buffer->size() == indexCount * sizeof(uint16_t)); + SkASSERT(buffer->size() == kIndexCount * sizeof(uint16_t)); SkASSERT(!buffer->resourcePriv().getScratchKey().isValid()); auto indexData = static_cast(buffer->map()); SkAutoTMalloc stagingBuffer; if (!indexData) { SkASSERT(!buffer->isMapped()); - indexData = stagingBuffer.reset(indexCount); + indexData = stagingBuffer.reset(kIndexCount); } // Indices 0,1,2 contain special values that emit points P0, P1, and P2 respectively. (When the @@ -268,12 +276,12 @@ sk_sp GrMiddleOutCubicShader::FindOrMakeMiddleOutIndexBuffer( indexData[i++] = (T += advance); } while (T != (1 << kMaxResolveLevel)); } - SkASSERT(i == indexCount); + SkASSERT(i == kIndexCount); if (buffer->isMapped()) { buffer->unmap(); } else { - buffer->updateData(stagingBuffer, indexCount * sizeof(uint16_t)); + buffer->updateData(stagingBuffer, kIndexCount * sizeof(uint16_t)); } buffer->resourcePriv().setUniqueKey(gMiddleOutIndexBufferKey); return std::move(buffer); diff --git a/src/gpu/tessellate/GrStencilPathShader.h b/src/gpu/tessellate/GrStencilPathShader.h index c331726eb9835..ca2c4da3afa08 100644 --- a/src/gpu/tessellate/GrStencilPathShader.h +++ b/src/gpu/tessellate/GrStencilPathShader.h @@ -9,6 +9,7 @@ #define GrStencilPathShader_DEFINED #include "src/gpu/tessellate/GrPathShader.h" +#include "src/gpu/tessellate/GrTessellationPathRenderer.h" // This is the base class for shaders that stencil path elements, namely, triangles, standalone // cubics, and wedges. @@ -51,9 +52,13 @@ class GrTessellateCubicShader : public GrStencilPathShader { const char* name() const override { return "tessellate_GrTessellateCubicShader"; } private: - SkString getTessControlShaderGLSL(const char* versionAndExtensionDecls, + SkString getTessControlShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const override; - SkString getTessEvaluationShaderGLSL(const char* versionAndExtensionDecls, + SkString getTessEvaluationShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const override; }; @@ -70,9 +75,13 @@ class GrTessellateWedgeShader : public GrStencilPathShader { const char* name() const override { return "tessellate_GrTessellateWedgeShader"; } private: - SkString getTessControlShaderGLSL(const char* versionAndExtensionDecls, + SkString getTessControlShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const override; - SkString getTessEvaluationShaderGLSL(const char* versionAndExtensionDecls, + SkString getTessEvaluationShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const override; }; @@ -82,10 +91,6 @@ class GrTessellateWedgeShader : public GrStencilPathShader { // sort the instance buffer by resolveLevel for efficient batching of indirect draws. class GrMiddleOutCubicShader : public GrStencilPathShader { public: - // Each resolveLevel linearizes the curve into 2^resolveLevel line segments. The finest - // supported resolveLevel is therefore 2^12=4096 line segments. - constexpr static int kMaxResolveLevel = 12; - // How many vertices do we need to draw in order to triangulate a cubic with 2^resolveLevel // line segments? constexpr static int NumVerticesAtResolveLevel(int resolveLevel) { @@ -102,7 +107,7 @@ class GrMiddleOutCubicShader : public GrStencilPathShader { static GrDrawIndexedIndirectCommand MakeDrawCubicsIndirectCmd(int resolveLevel, uint32_t instanceCount, uint32_t baseInstance) { - SkASSERT(resolveLevel > 0 && resolveLevel <= kMaxResolveLevel); + SkASSERT(resolveLevel > 0 && resolveLevel <= GrTessellationPathRenderer::kMaxResolveLevel); // Starting at baseIndex=3, the index buffer triangulates a cubic with 2^kMaxResolveLevel // line segments. Each index value corresponds to a parametric T value on the curve. Since // the triangles are arranged in "middle-out" order, we can conveniently control the diff --git a/src/gpu/tessellate/GrStrokeGeometry.cpp b/src/gpu/tessellate/GrStrokeGeometry.cpp new file mode 100644 index 0000000000000..13674ede617d3 --- /dev/null +++ b/src/gpu/tessellate/GrStrokeGeometry.cpp @@ -0,0 +1,484 @@ +/* + * Copyright 2018 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/gpu/tessellate/GrStrokeGeometry.h" + +#include "include/core/SkStrokeRec.h" +#include "include/private/SkNx.h" +#include "src/core/SkGeometry.h" +#include "src/core/SkMathPriv.h" + +// This is the maximum distance in pixels that we can stray from the edge of a stroke when +// converting it to flat line segments. +static constexpr float kMaxErrorFromLinearization = 1/8.f; + +static inline float length(const Sk2f& n) { + Sk2f nn = n*n; + return SkScalarSqrt(nn[0] + nn[1]); +} + +static inline Sk2f normalize(const Sk2f& v) { + Sk2f vv = v*v; + vv += SkNx_shuffle<1,0>(vv); + return v * vv.rsqrt(); +} + +static inline void transpose(const Sk2f& a, const Sk2f& b, Sk2f* X, Sk2f* Y) { + float transpose[4]; + a.store(transpose); + b.store(transpose+2); + Sk2f::Load2(transpose, X, Y); +} + +static inline void normalize2(const Sk2f& v0, const Sk2f& v1, SkPoint out[2]) { + Sk2f X, Y; + transpose(v0, v1, &X, &Y); + Sk2f invlength = (X*X + Y*Y).rsqrt(); + Sk2f::Store2(out, Y * invlength, -X * invlength); +} + +static inline float calc_curvature_costheta(const Sk2f& leftTan, const Sk2f& rightTan) { + Sk2f X, Y; + transpose(leftTan, rightTan, &X, &Y); + Sk2f invlength = (X*X + Y*Y).rsqrt(); + Sk2f dotprod = leftTan * rightTan; + return (dotprod[0] + dotprod[1]) * invlength[0] * invlength[1]; +} + +static GrStrokeGeometry::Verb join_verb_from_join(SkPaint::Join join) { + using Verb = GrStrokeGeometry::Verb; + switch (join) { + case SkPaint::kBevel_Join: + return Verb::kBevelJoin; + case SkPaint::kMiter_Join: + return Verb::kMiterJoin; + case SkPaint::kRound_Join: + return Verb::kRoundJoin; + } + SK_ABORT("Invalid SkPaint::Join."); +} + +void GrStrokeGeometry::beginPath(const SkStrokeRec& stroke, float strokeDevWidth, + InstanceTallies* tallies) { + SkASSERT(!fInsideContour); + // Client should have already converted the stroke to device space (i.e. width=1 for hairline). + SkASSERT(strokeDevWidth > 0); + + fCurrStrokeRadius = strokeDevWidth/2; + fCurrStrokeJoinVerb = join_verb_from_join(stroke.getJoin()); + fCurrStrokeCapType = stroke.getCap(); + fCurrStrokeTallies = tallies; + + if (Verb::kMiterJoin == fCurrStrokeJoinVerb) { + // We implement miters by placing a triangle-shaped cap on top of a bevel join. Convert the + // "miter limit" to how tall that triangle cap can be. + float m = stroke.getMiter(); + fMiterMaxCapHeightOverWidth = .5f * SkScalarSqrt(m*m - 1); + } + + // Find the angle of curvature where the arc height above a simple line from point A to point B + // is equal to kMaxErrorFromLinearization. + float r = std::max(1 - kMaxErrorFromLinearization / fCurrStrokeRadius, 0.f); + fMaxCurvatureCosTheta = 2*r*r - 1; + + fCurrContourFirstPtIdx = -1; + fCurrContourFirstNormalIdx = -1; + + fVerbs.push_back(Verb::kBeginPath); +} + +void GrStrokeGeometry::moveTo(SkPoint pt) { + SkASSERT(!fInsideContour); + fCurrContourFirstPtIdx = fPoints.count(); + fCurrContourFirstNormalIdx = fNormals.count(); + fPoints.push_back(pt); + SkDEBUGCODE(fInsideContour = true); +} + +void GrStrokeGeometry::lineTo(SkPoint pt) { + SkASSERT(fInsideContour); + this->lineTo(fCurrStrokeJoinVerb, pt); +} + +void GrStrokeGeometry::lineTo(Verb leftJoinVerb, SkPoint pt) { + Sk2f tan = Sk2f::Load(&pt) - Sk2f::Load(&fPoints.back()); + if ((tan == 0).allTrue()) { + return; + } + + tan = normalize(tan); + SkVector n = SkVector::Make(tan[1], -tan[0]); + + this->recordLeftJoinIfNotEmpty(leftJoinVerb, n); + fNormals.push_back(n); + + this->recordStroke(Verb::kLinearStroke, 0); + fPoints.push_back(pt); +} + +void GrStrokeGeometry::quadraticTo(const SkPoint P[3]) { + SkASSERT(fInsideContour); + this->quadraticTo(fCurrStrokeJoinVerb, P, SkFindQuadMaxCurvature(P)); +} + +// Wang's formula for quadratics (1985) gives us the number of evenly spaced (in the parametric +// sense) line segments that are guaranteed to be within a distance of "kMaxErrorFromLinearization" +// from the actual curve. +static inline float wangs_formula_quadratic(const Sk2f& p0, const Sk2f& p1, const Sk2f& p2) { + static constexpr float k = 2 / (8 * kMaxErrorFromLinearization); + float f = SkScalarSqrt(k * length(p2 - p1*2 + p0)); + return SkScalarCeilToInt(f); +} + +void GrStrokeGeometry::quadraticTo(Verb leftJoinVerb, const SkPoint P[3], float maxCurvatureT) { + Sk2f p0 = Sk2f::Load(P); + Sk2f p1 = Sk2f::Load(P+1); + Sk2f p2 = Sk2f::Load(P+2); + + Sk2f tan0 = p1 - p0; + Sk2f tan1 = p2 - p1; + + // Snap to a "lineTo" if the control point is so close to an endpoint that FP error will become + // an issue. + if ((tan0.abs() < SK_ScalarNearlyZero).allTrue() || // p0 ~= p1 + (tan1.abs() < SK_ScalarNearlyZero).allTrue()) { // p1 ~= p2 + this->lineTo(leftJoinVerb, P[2]); + return; + } + + SkPoint normals[2]; + normalize2(tan0, tan1, normals); + + // Decide how many flat line segments to chop the curve into. + int numSegments = wangs_formula_quadratic(p0, p1, p2); + numSegments = SkTPin(numSegments, 1, 1 << kMaxNumLinearSegmentsLog2); + + // At + B gives a vector tangent to the quadratic. + Sk2f A = p0 - p1*2 + p2; + Sk2f B = p1 - p0; + + // Find a line segment that crosses max curvature. + float segmentLength = SkScalarInvert(numSegments); + float leftT = maxCurvatureT - segmentLength/2; + float rightT = maxCurvatureT + segmentLength/2; + Sk2f leftTan, rightTan; + if (leftT <= 0) { + leftT = 0; + leftTan = tan0; + rightT = segmentLength; + rightTan = A*rightT + B; + } else if (rightT >= 1) { + leftT = 1 - segmentLength; + leftTan = A*leftT + B; + rightT = 1; + rightTan = tan1; + } else { + leftTan = A*leftT + B; + rightTan = A*rightT + B; + } + + // Check if curvature is too strong for a triangle strip on the line segment that crosses max + // curvature. If it is, we will chop and convert the segment to a "lineTo" with round joins. + // + // FIXME: This is quite costly and the vast majority of curves only have moderate curvature. We + // would benefit significantly from a quick reject that detects curves that don't need special + // treatment for strong curvature. + if (numSegments > 1 && calc_curvature_costheta(leftTan, rightTan) < fMaxCurvatureCosTheta) { + SkPoint ptsBuffer[5]; + const SkPoint* currQuadratic = P; + + if (leftT > 0) { + SkChopQuadAt(currQuadratic, ptsBuffer, leftT); + this->quadraticTo(leftJoinVerb, ptsBuffer, /*maxCurvatureT=*/1); + if (rightT < 1) { + rightT = (rightT - leftT) / (1 - leftT); + } + currQuadratic = ptsBuffer + 2; + } else { + this->rotateTo(leftJoinVerb, normals[0], currQuadratic[1]); + } + + if (rightT < 1) { + SkChopQuadAt(currQuadratic, ptsBuffer, rightT); + this->lineTo(Verb::kInternalRoundJoin, ptsBuffer[2]); + this->quadraticTo(Verb::kInternalRoundJoin, ptsBuffer + 2, /*maxCurvatureT=*/0); + } else { + this->lineTo(Verb::kInternalRoundJoin, currQuadratic[2]); + this->rotateTo(Verb::kInternalRoundJoin, normals[1], + currQuadratic[2]*2 - currQuadratic[1]); + } + return; + } + if (numSegments > fMaxTessellationSegments) { + SkPoint ptsBuffer[5]; + SkChopQuadAt(P, ptsBuffer, 0.5f); + this->quadraticTo(leftJoinVerb, ptsBuffer, 0); + this->quadraticTo(Verb::kInternalRoundJoin, ptsBuffer + 3, 0); + return; + } + + this->recordLeftJoinIfNotEmpty(leftJoinVerb, normals[0]); + fNormals.push_back_n(2, normals); + + this->recordStroke(Verb::kQuadraticStroke, SkNextLog2(numSegments)); + p1.store(&fPoints.push_back()); + p2.store(&fPoints.push_back()); +} + +void GrStrokeGeometry::cubicTo(const SkPoint P[4]) { + SkASSERT(fInsideContour); + float roots[3]; + int numRoots = SkFindCubicMaxCurvature(P, roots); + this->cubicTo(fCurrStrokeJoinVerb, P, + numRoots > 0 ? roots[numRoots/2] : 0, + numRoots > 1 ? roots[0] : kLeftMaxCurvatureNone, + numRoots > 2 ? roots[2] : kRightMaxCurvatureNone); +} + +// Wang's formula for cubics (1985) gives us the number of evenly spaced (in the parametric sense) +// line segments that are guaranteed to be within a distance of "kMaxErrorFromLinearization" +// from the actual curve. +static inline float wangs_formula_cubic(const Sk2f& p0, const Sk2f& p1, const Sk2f& p2, + const Sk2f& p3) { + static constexpr float k = (3 * 2) / (8 * kMaxErrorFromLinearization); + float f = SkScalarSqrt(k * length(Sk2f::Max((p2 - p1*2 + p0).abs(), + (p3 - p2*2 + p1).abs()))); + return SkScalarCeilToInt(f); +} + +void GrStrokeGeometry::cubicTo(Verb leftJoinVerb, const SkPoint P[4], float maxCurvatureT, + float leftMaxCurvatureT, float rightMaxCurvatureT) { + Sk2f p0 = Sk2f::Load(P); + Sk2f p1 = Sk2f::Load(P+1); + Sk2f p2 = Sk2f::Load(P+2); + Sk2f p3 = Sk2f::Load(P+3); + + Sk2f tan0 = p1 - p0; + Sk2f tan1 = p3 - p2; + + // Snap control points to endpoints if they are so close that FP error will become an issue. + if ((tan0.abs() < SK_ScalarNearlyZero).allTrue()) { // p0 ~= p1 + p1 = p0; + tan0 = p2 - p0; + if ((tan0.abs() < SK_ScalarNearlyZero).allTrue()) { // p0 ~= p1 ~= p2 + this->lineTo(leftJoinVerb, P[3]); + return; + } + } + if ((tan1.abs() < SK_ScalarNearlyZero).allTrue()) { // p2 ~= p3 + p2 = p3; + tan1 = p3 - p1; + if ((tan1.abs() < SK_ScalarNearlyZero).allTrue() || // p1 ~= p2 ~= p3 + (p0 == p1).allTrue()) { // p0 ~= p1 AND p2 ~= p3 + this->lineTo(leftJoinVerb, P[3]); + return; + } + } + + SkPoint normals[2]; + normalize2(tan0, tan1, normals); + + // Decide how many flat line segments to chop the curve into. + int numSegments = wangs_formula_cubic(p0, p1, p2, p3); + numSegments = SkTPin(numSegments, 1, 1 << kMaxNumLinearSegmentsLog2); + + // At^2 + Bt + C gives a vector tangent to the cubic. (More specifically, it's the derivative + // minus an irrelevant scale by 3, since all we care about is the direction.) + Sk2f A = p3 + (p1 - p2)*3 - p0; + Sk2f B = (p0 - p1*2 + p2)*2; + Sk2f C = p1 - p0; + + // Find a line segment that crosses max curvature. + float segmentLength = SkScalarInvert(numSegments); + float leftT = maxCurvatureT - segmentLength/2; + float rightT = maxCurvatureT + segmentLength/2; + Sk2f leftTan, rightTan; + if (leftT <= 0) { + leftT = 0; + leftTan = tan0; + rightT = segmentLength; + rightTan = A*rightT*rightT + B*rightT + C; + } else if (rightT >= 1) { + leftT = 1 - segmentLength; + leftTan = A*leftT*leftT + B*leftT + C; + rightT = 1; + rightTan = tan1; + } else { + leftTan = A*leftT*leftT + B*leftT + C; + rightTan = A*rightT*rightT + B*rightT + C; + } + + // Check if curvature is too strong for a triangle strip on the line segment that crosses max + // curvature. If it is, we will chop and convert the segment to a "lineTo" with round joins. + // + // FIXME: This is quite costly and the vast majority of curves only have moderate curvature. We + // would benefit significantly from a quick reject that detects curves that don't need special + // treatment for strong curvature. + if (numSegments > 1 && calc_curvature_costheta(leftTan, rightTan) < fMaxCurvatureCosTheta) { + SkPoint ptsBuffer[7]; + p0.store(ptsBuffer); + p1.store(ptsBuffer + 1); + p2.store(ptsBuffer + 2); + p3.store(ptsBuffer + 3); + const SkPoint* currCubic = ptsBuffer; + + if (leftT > 0) { + SkChopCubicAt(currCubic, ptsBuffer, leftT); + this->cubicTo(leftJoinVerb, ptsBuffer, /*maxCurvatureT=*/1, + (kLeftMaxCurvatureNone != leftMaxCurvatureT) + ? leftMaxCurvatureT/leftT : kLeftMaxCurvatureNone, + kRightMaxCurvatureNone); + if (rightT < 1) { + rightT = (rightT - leftT) / (1 - leftT); + } + if (rightMaxCurvatureT < 1 && kRightMaxCurvatureNone != rightMaxCurvatureT) { + rightMaxCurvatureT = (rightMaxCurvatureT - leftT) / (1 - leftT); + } + currCubic = ptsBuffer + 3; + } else { + SkPoint c1 = (ptsBuffer[1] == ptsBuffer[0]) ? ptsBuffer[2] : ptsBuffer[1]; + this->rotateTo(leftJoinVerb, normals[0], c1); + } + + if (rightT < 1) { + SkChopCubicAt(currCubic, ptsBuffer, rightT); + this->lineTo(Verb::kInternalRoundJoin, ptsBuffer[3]); + currCubic = ptsBuffer + 3; + this->cubicTo(Verb::kInternalRoundJoin, currCubic, /*maxCurvatureT=*/0, + kLeftMaxCurvatureNone, kRightMaxCurvatureNone); + } else { + this->lineTo(Verb::kInternalRoundJoin, currCubic[3]); + SkPoint c2 = (currCubic[2] == currCubic[3]) ? currCubic[1] : currCubic[2]; + this->rotateTo(Verb::kInternalRoundJoin, normals[1], currCubic[3]*2 - c2); + } + return; + } + + // Recurse and check the other two points of max curvature, if any. + if (kRightMaxCurvatureNone != rightMaxCurvatureT) { + this->cubicTo(leftJoinVerb, P, rightMaxCurvatureT, leftMaxCurvatureT, + kRightMaxCurvatureNone); + return; + } + if (kLeftMaxCurvatureNone != leftMaxCurvatureT) { + SkASSERT(kRightMaxCurvatureNone == rightMaxCurvatureT); + this->cubicTo(leftJoinVerb, P, leftMaxCurvatureT, kLeftMaxCurvatureNone, + kRightMaxCurvatureNone); + return; + } + if (numSegments > fMaxTessellationSegments) { + SkPoint ptsBuffer[7]; + SkChopCubicAt(P, ptsBuffer, 0.5f); + this->cubicTo(leftJoinVerb, ptsBuffer, 0, kLeftMaxCurvatureNone, kRightMaxCurvatureNone); + this->cubicTo(Verb::kInternalRoundJoin, ptsBuffer + 3, 0, kLeftMaxCurvatureNone, + kRightMaxCurvatureNone); + return; + } + + this->recordLeftJoinIfNotEmpty(leftJoinVerb, normals[0]); + fNormals.push_back_n(2, normals); + + this->recordStroke(Verb::kCubicStroke, SkNextLog2(numSegments)); + p1.store(&fPoints.push_back()); + p2.store(&fPoints.push_back()); + p3.store(&fPoints.push_back()); +} + +void GrStrokeGeometry::recordStroke(Verb verb, int numSegmentsLog2) { + SkASSERT(Verb::kLinearStroke != verb || 0 == numSegmentsLog2); + fVerbs.push_back(verb); + if (Verb::kLinearStroke != verb) { + fParams.push_back().fNumLinearSegmentsLog2 = numSegmentsLog2; + } + ++fCurrStrokeTallies->fStrokes[numSegmentsLog2]; +} + +void GrStrokeGeometry::rotateTo(Verb leftJoinVerb, SkVector normal, SkPoint controlPoint) { + SkASSERT(fPoints.count() > fCurrContourFirstPtIdx); + this->recordLeftJoinIfNotEmpty(leftJoinVerb, normal); + fVerbs.push_back(Verb::kRotate); + fPoints.push_back(controlPoint); + fPoints.push_back(fPoints[fPoints.count() - 2]); + fNormals.push_back(normal); +} + +void GrStrokeGeometry::recordLeftJoinIfNotEmpty(Verb joinVerb, SkVector nextNormal) { + if (fNormals.count() <= fCurrContourFirstNormalIdx) { + // The contour is empty. Nothing to join with. + SkASSERT(fNormals.count() == fCurrContourFirstNormalIdx); + return; + } + fVerbs.push_back(joinVerb); +} + +void GrStrokeGeometry::closeContour() { + SkASSERT(fInsideContour); + SkASSERT(fPoints.count() > fCurrContourFirstPtIdx); + if (fPoints.back() != fPoints[fCurrContourFirstPtIdx]) { + // Draw a line back to the beginning. + this->lineTo(fCurrStrokeJoinVerb, fPoints[fCurrContourFirstPtIdx]); + } + fVerbs.push_back(fCurrStrokeJoinVerb); + fVerbs.push_back(Verb::kEndContour); + SkDEBUGCODE(fInsideContour = false); +} + +void GrStrokeGeometry::capContourAndExit() { + SkASSERT(fInsideContour); + if (fCurrContourFirstNormalIdx >= fNormals.count()) { + // This contour is empty. Add a normal in the direction that caps orient on empty geometry. + SkASSERT(fNormals.count() == fCurrContourFirstNormalIdx); + fNormals.push_back({1, 0}); + } + + this->recordCapsIfAny(); + fVerbs.push_back(Verb::kEndContour); + + SkDEBUGCODE(fInsideContour = false); +} + +void GrStrokeGeometry::recordCapsIfAny() { + SkASSERT(fInsideContour); + SkASSERT(fCurrContourFirstNormalIdx < fNormals.count()); + + if (SkPaint::kButt_Cap == fCurrStrokeCapType) { + return; + } + + Verb capVerb; + if (SkPaint::kSquare_Cap == fCurrStrokeCapType) { + if (fCurrStrokeRadius * SK_ScalarRoot2Over2 < kMaxErrorFromLinearization) { + return; + } + capVerb = Verb::kSquareCap; + fCurrStrokeTallies->fStrokes[0] += 2; + } else { + SkASSERT(SkPaint::kRound_Cap == fCurrStrokeCapType); + if (fCurrStrokeRadius < kMaxErrorFromLinearization) { + return; + } + capVerb = Verb::kRoundCap; + fCurrStrokeTallies->fTriangles += 2; + fCurrStrokeTallies->fConics += 4; + } + + fVerbs.push_back(capVerb); + fVerbs.push_back(Verb::kEndContour); + + fVerbs.push_back(capVerb); + + // Reserve the space first, since push_back() takes the point by reference and might + // invalidate the reference if the array grows. + fPoints.reserve(fPoints.count() + 1); + fPoints.push_back(fPoints[fCurrContourFirstPtIdx]); + + // Reserve the space first, since push_back() takes the normal by reference and might + // invalidate the reference if the array grows. (Although in this case we should be fine + // since there is a negate operator.) + fNormals.reserve(fNormals.count() + 1); + fNormals.push_back(-fNormals[fCurrContourFirstNormalIdx]); +} diff --git a/src/gpu/tessellate/GrStrokeGeometry.h b/src/gpu/tessellate/GrStrokeGeometry.h new file mode 100644 index 0000000000000..2c4a757366b23 --- /dev/null +++ b/src/gpu/tessellate/GrStrokeGeometry.h @@ -0,0 +1,180 @@ +/* + * Copyright 2018 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrGrStrokeGeometry_DEFINED +#define GrGrStrokeGeometry_DEFINED + +#include "include/core/SkPaint.h" +#include "include/core/SkPoint.h" +#include "include/private/SkTArray.h" + +class SkStrokeRec; + +/** + * This class converts post-transform stroked paths into a set of independent strokes, joins, and + * caps that map directly to GPU instances. + */ +class GrStrokeGeometry { +public: + static constexpr int kMaxNumLinearSegmentsLog2 = 15; + + GrStrokeGeometry(int maxTessellationSegments, int numSkPoints = 0, int numSkVerbs = 0) + : fMaxTessellationSegments(maxTessellationSegments) + , fVerbs(numSkVerbs * 5/2) // Reserve for a 2.5x expansion in verbs. (Joins get their + // own separate verb in our representation.) + , fParams(numSkVerbs * 3) // Somewhere around 1-2 params per verb. + , fPoints(numSkPoints * 5/4) // Reserve for a 1.25x expansion in points and normals. + , fNormals(numSkPoints * 5/4) {} + + // A string of verbs and their corresponding, params, points, and normals are a compact + // representation of what will eventually be independent instances in GPU buffers. + enum class Verb : uint8_t { + kBeginPath, // Instructs the iterator to advance its stroke width, atlas offset, etc. + + // Independent strokes of a single line or curve, with (antialiased) butt caps on the ends. + kLinearStroke, + kQuadraticStroke, + kCubicStroke, + + // Updates the last tangent without moving the current position on the stroke. + kRotate, + + // Joins are a triangles that connect the outer corners of two adjoining strokes. Miters + // have an additional triangle cap on top of the bevel, and round joins have an arc on top. + kBevelJoin, + kMiterJoin, + kRoundJoin, + + // We use internal joins when we have to internally break up a stroke because its curvature + // is too strong for a triangle strip. They are coverage-counted, self-intersecting + // quadrilaterals that tie the four corners of two adjoining strokes together a like a + // shoelace. (Coverage is negative on the inside half.) We place an arc on both ends of an + // internal round join. + kInternalBevelJoin, + kInternalRoundJoin, + + kSquareCap, + kRoundCap, + + kEndContour // Instructs the iterator to advance its internal point and normal ptrs. + }; + static bool IsInternalJoinVerb(Verb verb); + + // Some verbs require additional parameters(s). + union Parameter { + // For cubic and quadratic strokes: How many flat line segments to chop the curve into? + int fNumLinearSegmentsLog2; + // For miter and round joins: How tall should the triangle cap be on top of the join? + // (This triangle is the conic control points for a round join.) + float fMiterCapHeightOverWidth; + float fConicWeight; // Round joins only. + }; + + const SkTArray& verbs() const { SkASSERT(!fInsideContour); return fVerbs; } + const SkTArray& params() const { SkASSERT(!fInsideContour); return fParams; } + const SkTArray& points() const { SkASSERT(!fInsideContour); return fPoints; } + const SkTArray& normals() const { SkASSERT(!fInsideContour); return fNormals; } + + // These track the numbers of instances required to draw all the recorded strokes. + struct InstanceTallies { + int fStrokes[kMaxNumLinearSegmentsLog2 + 1]; + int fTriangles; + int fConics; + + InstanceTallies operator+(const InstanceTallies&) const; + }; + + void beginPath(const SkStrokeRec&, float strokeDevWidth, InstanceTallies*); + void moveTo(SkPoint); + void lineTo(SkPoint); + void quadraticTo(const SkPoint[3]); + void cubicTo(const SkPoint[4]); + void closeContour(); // Connect back to the first point in the contour and exit. + void capContourAndExit(); // Add endcaps (if any) and exit the contour. + +private: + void lineTo(Verb leftJoinVerb, SkPoint); + void quadraticTo(Verb leftJoinVerb, const SkPoint[3], float maxCurvatureT); + + static constexpr float kLeftMaxCurvatureNone = 1; + static constexpr float kRightMaxCurvatureNone = 0; + void cubicTo(Verb leftJoinVerb, const SkPoint[4], float maxCurvatureT, float leftMaxCurvatureT, + float rightMaxCurvatureT); + + // Pushes a new normal to fNormals and records a join, without changing the current position. + void rotateTo(Verb leftJoinVerb, SkVector normal, SkPoint controlPoint); + + // Records a stroke in fElememts. + void recordStroke(Verb, int numSegmentsLog2); + + // Records a join in fElememts with the previous stroke, if the cuurent contour is not empty. + void recordLeftJoinIfNotEmpty(Verb joinType, SkVector nextNormal); + + void recordCapsIfAny(); + + float fCurrStrokeRadius; + Verb fCurrStrokeJoinVerb; + SkPaint::Cap fCurrStrokeCapType; + InstanceTallies* fCurrStrokeTallies = nullptr; + + // We implement miters by placing a triangle-shaped cap on top of a bevel join. This field tells + // us what the miter limit is, restated in terms of how tall that triangle cap can be. + float fMiterMaxCapHeightOverWidth; + + // Any curvature on the original curve gets magnified on the outer edge of the stroke, + // proportional to how thick the stroke radius is. This field tells us the maximum curvature we + // can tolerate using the current stroke radius, before linearization artifacts begin to appear + // on the outer edge. + // + // (Curvature this strong is quite rare in practice, but when it does happen, we decompose the + // section with strong curvature into lineTo's with round joins in between.) + float fMaxCurvatureCosTheta; + + int fCurrContourFirstPtIdx; + int fCurrContourFirstNormalIdx; + + SkDEBUGCODE(bool fInsideContour = false); + + const int fMaxTessellationSegments; + SkSTArray<128, Verb, true> fVerbs; + SkSTArray<128, Parameter, true> fParams; + SkSTArray<128, SkPoint, true> fPoints; + SkSTArray<128, SkVector, true> fNormals; +}; + +inline GrStrokeGeometry::InstanceTallies GrStrokeGeometry::InstanceTallies::operator+( + const InstanceTallies& t) const { + InstanceTallies ret; + for (int i = 0; i <= kMaxNumLinearSegmentsLog2; ++i) { + ret.fStrokes[i] = fStrokes[i] + t.fStrokes[i]; + } + ret.fTriangles = fTriangles + t.fTriangles; + ret.fConics = fConics + t.fConics; + return ret; +} + +inline bool GrStrokeGeometry::IsInternalJoinVerb(Verb verb) { + switch (verb) { + case Verb::kInternalBevelJoin: + case Verb::kInternalRoundJoin: + return true; + case Verb::kBeginPath: + case Verb::kLinearStroke: + case Verb::kQuadraticStroke: + case Verb::kCubicStroke: + case Verb::kRotate: + case Verb::kBevelJoin: + case Verb::kMiterJoin: + case Verb::kRoundJoin: + case Verb::kSquareCap: + case Verb::kRoundCap: + case Verb::kEndContour: + return false; + } + SK_ABORT("Invalid GrStrokeGeometry::Verb."); +} +#endif diff --git a/src/gpu/tessellate/GrTessellatePathOp.cpp b/src/gpu/tessellate/GrTessellatePathOp.cpp index 1889ad2502d95..6477f2519d9da 100644 --- a/src/gpu/tessellate/GrTessellatePathOp.cpp +++ b/src/gpu/tessellate/GrTessellatePathOp.cpp @@ -16,9 +16,14 @@ #include "src/gpu/tessellate/GrMidpointContourParser.h" #include "src/gpu/tessellate/GrResolveLevelCounter.h" #include "src/gpu/tessellate/GrStencilPathShader.h" +#include "src/gpu/tessellate/GrTessellationPathRenderer.h" -constexpr static int kMaxResolveLevel = GrMiddleOutCubicShader::kMaxResolveLevel; -constexpr static float kTessellationIntolerance = 4; // 1/4 of a pixel. +constexpr static float kLinearizationIntolerance = + GrTessellationPathRenderer::kLinearizationIntolerance; + +constexpr static int kMaxResolveLevel = GrTessellationPathRenderer::kMaxResolveLevel; + +using OpFlags = GrTessellationPathRenderer::OpFlags; GrTessellatePathOp::FixedFunctionFlags GrTessellatePathOp::fixedFunctionFlags() const { auto flags = FixedFunctionFlags::kUsesStencil; @@ -61,11 +66,8 @@ void GrTessellatePathOp::onPrepare(GrOpFlushState* flushState) { // mode is to maximize GPU performance, and the middle-out topology used by our indirect // draws is easier on the rasterizer than a tessellated fan. There also seems to be a // small amount of fixed tessellation overhead that this avoids. - // - // NOTE: This will count fewer cubics than above if it discards any for resolveLevel=0. GrResolveLevelCounter resolveLevelCounter; - numCountedCubics = resolveLevelCounter.reset(fPath, fViewMatrix, - kTessellationIntolerance); + resolveLevelCounter.reset(fPath, fViewMatrix, kLinearizationIntolerance); this->prepareIndirectOuterCubics(flushState, resolveLevelCounter); return; } @@ -75,8 +77,7 @@ void GrTessellatePathOp::onPrepare(GrOpFlushState* flushState) { // that contains both the inner triangles and the outer cubics, instead of using hardware // tessellation. Also take this path if tessellation is not supported. bool drawTrianglesAsIndirectCubicDraw = (numVerbs < 50); - if (drawTrianglesAsIndirectCubicDraw || - !flushState->caps().shaderCaps()->tessellationSupport()) { + if (drawTrianglesAsIndirectCubicDraw || (fOpFlags & OpFlags::kDisableHWTessellation)) { // Prepare outer cubics with indirect draws. GrResolveLevelCounter resolveLevelCounter; this->prepareMiddleOutTrianglesAndCubics(flushState, &resolveLevelCounter, @@ -84,6 +85,9 @@ void GrTessellatePathOp::onPrepare(GrOpFlushState* flushState) { return; } + // The caller should have sent Flags::kDisableHWTessellation if it was not supported. + SkASSERT(flushState->caps().shaderCaps()->tessellationSupport()); + // Next see if we can split up the inner triangles and outer cubics into two draw calls. This // allows for a more efficient inner triangle topology that can reduce the rasterizer load by a // large margin on complex paths, but also causes greater CPU overhead due to the extra shader @@ -116,14 +120,15 @@ bool GrTessellatePathOp::prepareNonOverlappingInnerTriangles(GrMeshDrawOp::Targe // simple. return false; } - if (((Flags::kStencilOnly | Flags::kWireframe) & fFlags) || GrAAType::kCoverage == fAAType || + if (((OpFlags::kStencilOnly | OpFlags::kWireframe) & fOpFlags) || + GrAAType::kCoverage == fAAType || (target->appliedClip() && target->appliedClip()->hasStencilClip())) { // If we have certain flags, mixed samples, or a stencil clip then we unfortunately // can't fill the inner polygon directly. Indicate that these triangles need to be // stencilled. fDoStencilTriangleBuffer = true; } - if (!(Flags::kStencilOnly & fFlags)) { + if (!(OpFlags::kStencilOnly & fOpFlags)) { fDoFillTriangleBuffer = true; } return true; @@ -184,7 +189,7 @@ void GrTessellatePathOp::prepareMiddleOutTrianglesAndCubics( if (resolveLevelCounter) { // Quadratics get converted to cubics before rendering. resolveLevelCounter->countCubic(GrWangsFormula::quadratic_log2( - kTessellationIntolerance, pts, xform)); + kLinearizationIntolerance, pts, xform)); break; } ++numCountedCurves; @@ -193,7 +198,7 @@ void GrTessellatePathOp::prepareMiddleOutTrianglesAndCubics( middleOut.pushVertex(pts[3]); if (resolveLevelCounter) { resolveLevelCounter->countCubic(GrWangsFormula::cubic_log2( - kTessellationIntolerance, pts, xform)); + kLinearizationIntolerance, pts, xform)); break; } ++numCountedCurves; @@ -320,12 +325,15 @@ void GrTessellatePathOp::prepareIndirectOuterCubicsAndTriangles( runningInstanceCount = numTrianglesAtBeginningOfData; } for (int resolveLevel = 1; resolveLevel <= kMaxResolveLevel; ++resolveLevel) { - instanceLocations[resolveLevel] = cubicData + runningInstanceCount * 4; - if (int instanceCountAtCurrLevel = resolveLevelCounter[resolveLevel]) { - indirectData[indirectIdx++] = GrMiddleOutCubicShader::MakeDrawCubicsIndirectCmd( - resolveLevel, instanceCountAtCurrLevel, baseInstance + runningInstanceCount); - runningInstanceCount += instanceCountAtCurrLevel; + int instanceCountAtCurrLevel = resolveLevelCounter[resolveLevel]; + if (!instanceCountAtCurrLevel) { + SkDEBUGCODE(instanceLocations[resolveLevel] = nullptr;) + continue; } + instanceLocations[resolveLevel] = cubicData + runningInstanceCount * 4; + indirectData[indirectIdx++] = GrMiddleOutCubicShader::MakeDrawCubicsIndirectCmd( + resolveLevel, instanceCountAtCurrLevel, baseInstance + runningInstanceCount); + runningInstanceCount += instanceCountAtCurrLevel; } #ifdef SK_DEBUG @@ -335,10 +343,18 @@ void GrTessellatePathOp::prepareIndirectOuterCubicsAndTriangles( SkASSERT(fIndirectDrawCount > 0); SkPoint* endLocations[kMaxResolveLevel + 1]; - memcpy(endLocations, instanceLocations + 1, kMaxResolveLevel * sizeof(SkPoint*)); + int lastResolveLevel = 0; + for (int resolveLevel = 1; resolveLevel <= kMaxResolveLevel; ++resolveLevel) { + if (!instanceLocations[resolveLevel]) { + endLocations[resolveLevel] = nullptr; + continue; + } + endLocations[lastResolveLevel] = instanceLocations[resolveLevel]; + lastResolveLevel = resolveLevel; + } int totalInstanceCount = numTrianglesAtBeginningOfData + resolveLevelCounter.totalCubicInstanceCount(); - endLocations[kMaxResolveLevel] = cubicData + totalInstanceCount * 4; + endLocations[lastResolveLevel] = cubicData + totalInstanceCount * 4; #endif fCubicVertexCount = numTrianglesAtBeginningOfData * 4; @@ -351,7 +367,7 @@ void GrTessellatePathOp::prepareIndirectOuterCubicsAndTriangles( default: continue; case SkPathVerb::kQuad: - level = GrWangsFormula::quadratic_log2(kTessellationIntolerance, pts, xform); + level = GrWangsFormula::quadratic_log2(kLinearizationIntolerance, pts, xform); if (level == 0) { continue; } @@ -359,7 +375,7 @@ void GrTessellatePathOp::prepareIndirectOuterCubicsAndTriangles( quad2cubic(pts, instanceLocations[level]); break; case SkPathVerb::kCubic: - level = GrWangsFormula::cubic_log2(kTessellationIntolerance, pts, xform); + level = GrWangsFormula::cubic_log2(kLinearizationIntolerance, pts, xform); if (level == 0) { continue; } @@ -483,7 +499,7 @@ void GrTessellatePathOp::prepareTessellatedCubicWedges(GrMeshDrawOp::Target* tar void GrTessellatePathOp::onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) { this->drawStencilPass(flushState); - if (!(Flags::kStencilOnly & fFlags)) { + if (!(OpFlags::kStencilOnly & fOpFlags)) { this->drawCoverPass(flushState); } } @@ -513,7 +529,7 @@ void GrTessellatePathOp::drawStencilPass(GrOpFlushState* flushState) { if (GrAAType::kNone != fAAType) { initArgs.fInputFlags |= GrPipeline::InputFlags::kHWAntialias; } - if (flushState->caps().wireframeSupport() && (Flags::kWireframe & fFlags)) { + if (flushState->caps().wireframeSupport() && (OpFlags::kWireframe & fOpFlags)) { initArgs.fInputFlags |= GrPipeline::InputFlags::kWireframe; } SkASSERT(SkPathFillType::kWinding == fPath.getFillType() || diff --git a/src/gpu/tessellate/GrTessellatePathOp.h b/src/gpu/tessellate/GrTessellatePathOp.h index cb216a80074b1..c53e194a7f128 100644 --- a/src/gpu/tessellate/GrTessellatePathOp.h +++ b/src/gpu/tessellate/GrTessellatePathOp.h @@ -9,6 +9,7 @@ #define GrTessellatePathOp_DEFINED #include "src/gpu/ops/GrMeshDrawOp.h" +#include "src/gpu/tessellate/GrTessellationPathRenderer.h" class GrAppliedHardClip; class GrStencilPathShader; @@ -18,20 +19,13 @@ class GrResolveLevelCounter; // either GPU tessellation shaders or indirect draws. This Op doesn't apply analytic AA, so it // requires a render target that supports either MSAA or mixed samples if AA is desired. class GrTessellatePathOp : public GrDrawOp { -public: - enum class Flags { - kNone = 0, - kStencilOnly = (1 << 0), - kWireframe = (1 << 1) - }; - private: DEFINE_OP_CLASS_ID GrTessellatePathOp(const SkMatrix& viewMatrix, const SkPath& path, GrPaint&& paint, - GrAAType aaType, Flags flags = Flags::kNone) + GrAAType aaType, GrTessellationPathRenderer::OpFlags opFlags) : GrDrawOp(ClassID()) - , fFlags(flags) + , fOpFlags(opFlags) , fViewMatrix(viewMatrix) , fPath(path) , fAAType(aaType) @@ -115,7 +109,7 @@ class GrTessellatePathOp : public GrDrawOp { void drawStencilPass(GrOpFlushState*); void drawCoverPass(GrOpFlushState*); - const Flags fFlags; + const GrTessellationPathRenderer::OpFlags fOpFlags; const SkMatrix fViewMatrix; const SkPath fPath; const GrAAType fAAType; @@ -169,6 +163,4 @@ class GrTessellatePathOp : public GrDrawOp { class TestingOnly_Benchmark; }; -GR_MAKE_BITFIELD_CLASS_OPS(GrTessellatePathOp::Flags); - #endif diff --git a/src/gpu/tessellate/GrTessellateStrokeOp.cpp b/src/gpu/tessellate/GrTessellateStrokeOp.cpp new file mode 100644 index 0000000000000..19f5023c858b5 --- /dev/null +++ b/src/gpu/tessellate/GrTessellateStrokeOp.cpp @@ -0,0 +1,353 @@ +/* + * Copyright 2019 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/gpu/tessellate/GrTessellateStrokeOp.h" + +#include "src/core/SkPathPriv.h" +#include "src/gpu/tessellate/GrStrokeGeometry.h" +#include "src/gpu/tessellate/GrTessellateStrokeShader.h" + +static SkPath transform_path(const SkMatrix& viewMatrix, const SkPath& path) { + SkPath devPath; + // The provided matrix must be a similarity matrix for the time being. This is so we can + // bootstrap this Op on top of GrStrokeGeometry with minimal modifications. + SkASSERT(viewMatrix.isSimilarity()); + path.transform(viewMatrix, &devPath); + return devPath; +} + +static SkStrokeRec transform_stroke(const SkMatrix& viewMatrix, const SkStrokeRec& stroke) { + SkStrokeRec devStroke = stroke; + // kStrokeAndFill_Style is not yet supported. + SkASSERT(stroke.getStyle() == SkStrokeRec::kStroke_Style || + stroke.getStyle() == SkStrokeRec::kHairline_Style); + float strokeWidth = (stroke.getStyle() == SkStrokeRec::kHairline_Style) ? + 1 : viewMatrix.getMaxScale() * stroke.getWidth(); + devStroke.setStrokeStyle(strokeWidth, /*strokeAndFill=*/false); + return devStroke; +} + +static SkPMColor4f get_paint_constant_blended_color(const GrPaint& paint) { + SkPMColor4f constantColor; + // Patches can overlap, so until a stencil technique is implemented, the provided paints must be + // constant blended colors. + SkAssertResult(paint.isConstantBlendedColor(&constantColor)); + return constantColor; +} + +GrTessellateStrokeOp::GrTessellateStrokeOp(const SkMatrix& viewMatrix, const SkPath& path, + const SkStrokeRec& stroke, GrPaint&& paint, + GrAAType aaType) + : GrDrawOp(ClassID()) + , fPathStrokes(transform_path(viewMatrix, path), transform_stroke(viewMatrix, stroke)) + , fNumVerbs(path.countVerbs()) + , fNumPoints(path.countPoints()) + , fColor(get_paint_constant_blended_color(paint)) + , fAAType(aaType) + , fProcessors(std::move(paint)) { + SkASSERT(fAAType != GrAAType::kCoverage); // No mixed samples support yet. + SkStrokeRec& headStroke = fPathStrokes.head().fStroke; + if (headStroke.getJoin() == SkPaint::kMiter_Join) { + float miter = headStroke.getMiter(); + if (miter <= 0) { + headStroke.setStrokeParams(headStroke.getCap(), SkPaint::kBevel_Join, 0); + } else { + fMiterLimitOrZero = miter; + } + } + SkRect devBounds = fPathStrokes.head().fPath.getBounds(); + float inflationRadius = fPathStrokes.head().fStroke.getInflationRadius(); + devBounds.outset(inflationRadius, inflationRadius); + this->setBounds(devBounds, HasAABloat(GrAAType::kCoverage == fAAType), IsHairline::kNo); +} + +GrDrawOp::FixedFunctionFlags GrTessellateStrokeOp::fixedFunctionFlags() const { + auto flags = FixedFunctionFlags::kNone; + if (GrAAType::kNone != fAAType) { + flags |= FixedFunctionFlags::kUsesHWAA; + } + return flags; +} + +GrProcessorSet::Analysis GrTessellateStrokeOp::finalize(const GrCaps& caps, + const GrAppliedClip* clip, + bool hasMixedSampledCoverage, + GrClampType clampType) { + return fProcessors.finalize(fColor, GrProcessorAnalysisCoverage::kNone, clip, + &GrUserStencilSettings::kUnused, hasMixedSampledCoverage, caps, + clampType, &fColor); +} + +GrOp::CombineResult GrTessellateStrokeOp::onCombineIfPossible(GrOp* grOp, + GrRecordingContext::Arenas* arenas, + const GrCaps&) { + auto* op = grOp->cast(); + if (fColor != op->fColor || + fViewMatrix != op->fViewMatrix || + fAAType != op->fAAType || + ((fMiterLimitOrZero * op->fMiterLimitOrZero != 0) && // Are both non-zero? + fMiterLimitOrZero != op->fMiterLimitOrZero) || + fProcessors != op->fProcessors) { + return CombineResult::kCannotCombine; + } + + fPathStrokes.concat(std::move(op->fPathStrokes), arenas->recordTimeAllocator()); + if (op->fMiterLimitOrZero != 0) { + SkASSERT(fMiterLimitOrZero == 0 || fMiterLimitOrZero == op->fMiterLimitOrZero); + fMiterLimitOrZero = op->fMiterLimitOrZero; + } + fNumVerbs += op->fNumVerbs; + fNumPoints += op->fNumPoints; + + return CombineResult::kMerged; +} + +void GrTessellateStrokeOp::onPrePrepare(GrRecordingContext*, const GrSurfaceProxyView* writeView, + GrAppliedClip*, const GrXferProcessor::DstProxyView&) { +} + +static SkPoint lerp(const SkPoint& a, const SkPoint& b, float T) { + SkASSERT(1 != T); // The below does not guarantee lerp(a, b, 1) === b. + return (b - a) * T + a; +} + +static void write_line(SkPoint* patch, const SkPoint& p0, const SkPoint& p1) { + patch[0] = p0; + patch[1] = lerp(p0, p1, 1/3.f); + patch[2] = lerp(p0, p1, 2/3.f); + patch[3] = p1; +} + +static void write_quadratic(SkPoint* patch, const SkPoint pts[]) { + patch[0] = pts[0]; + patch[1] = lerp(pts[0], pts[1], 2/3.f); + patch[2] = lerp(pts[1], pts[2], 1/3.f); + patch[3] = pts[2]; +} + +static void write_loop(SkPoint* patch, const SkPoint& intersectionPoint, + const SkPoint lastControlPt, const SkPoint& nextControlPt) { + patch[0] = intersectionPoint; + patch[1] = lastControlPt; + patch[2] = nextControlPt; + patch[3] = intersectionPoint; +} + +static void write_square_cap(SkPoint* patch, const SkPoint& endPoint, + const SkPoint controlPoint, float strokeRadius) { + SkVector v = (endPoint - controlPoint); + v.normalize(); + SkPoint capPoint = endPoint + v*strokeRadius; + // Construct a line that incorporates controlPoint so we get a water tight edge with the rest of + // the stroke. The cubic will technically step outside the cap, but we will force it to only + // have one segment, giving edges only at the endpoints. + patch[0] = endPoint; + patch[1] = controlPoint; + // Straddle the midpoint of the cap because the tessellated geometry emits a center point at + // T=.5, and we need to ensure that point stays inside the cap. + patch[2] = endPoint + capPoint - controlPoint; + patch[3] = capPoint; +} + +void GrTessellateStrokeOp::onPrepare(GrOpFlushState* flushState) { + // Rebuild the stroke using GrStrokeGeometry. + GrStrokeGeometry strokeGeometry(flushState->caps().shaderCaps()->maxTessellationSegments(), + fNumPoints, fNumVerbs); + for (auto& [path, stroke] : fPathStrokes) { + float strokeRadius = stroke.getWidth() * .5f; + GrStrokeGeometry::InstanceTallies tallies = GrStrokeGeometry::InstanceTallies(); + strokeGeometry.beginPath(stroke, strokeRadius * 2, &tallies); + SkPathVerb previousVerb = SkPathVerb::kClose; + for (auto [verb, pts, w] : SkPathPriv::Iterate(path)) { + switch (verb) { + case SkPathVerb::kMove: + if (previousVerb != SkPathVerb::kClose) { + strokeGeometry.capContourAndExit(); + } + strokeGeometry.moveTo(pts[0]); + break; + case SkPathVerb::kClose: + strokeGeometry.closeContour(); + break; + case SkPathVerb::kLine: + strokeGeometry.lineTo(pts[1]); + break; + case SkPathVerb::kQuad: + strokeGeometry.quadraticTo(pts); + break; + case SkPathVerb::kCubic: + strokeGeometry.cubicTo(pts); + break; + case SkPathVerb::kConic: + SkUNREACHABLE; + } + previousVerb = verb; + } + if (previousVerb != SkPathVerb::kClose) { + strokeGeometry.capContourAndExit(); + } + } + + auto vertexData = static_cast(flushState->makeVertexSpace( + sizeof(SkPoint), strokeGeometry.verbs().count() * 2 * 5, &fVertexBuffer, &fBaseVertex)); + if (!vertexData) { + return; + } + + using Verb = GrStrokeGeometry::Verb; + + // Dump GrStrokeGeometry into tessellation patches. + // + // This loop is only a temporary adapter for GrStrokeGeometry so we can bootstrap the + // tessellation shaders. Once the shaders are landed and tested, we will overhaul + // GrStrokeGeometry and remove this loop. + int i = 0; + const SkTArray& pathPts = strokeGeometry.points(); + auto pendingJoin = Verb::kEndContour; + SkPoint firstJoinControlPoint = {0, 0}; + SkPoint lastJoinControlPoint = {0, 0}; + bool hasFirstControlPoint = false; + float currStrokeRadius = 0; + auto pathStrokesIter = fPathStrokes.begin(); + for (auto verb : strokeGeometry.verbs()) { + SkPoint patch[4]; + float overrideNumSegments = 0; + switch (verb) { + case Verb::kBeginPath: + SkASSERT(pathStrokesIter != fPathStrokes.end()); + pendingJoin = Verb::kEndContour; + firstJoinControlPoint = {0, 0}; + lastJoinControlPoint = {0, 0}; + hasFirstControlPoint = false; + currStrokeRadius = (*pathStrokesIter).fStroke.getWidth() * .5f; + ++pathStrokesIter; + continue; + case Verb::kRoundJoin: + case Verb::kInternalRoundJoin: + case Verb::kMiterJoin: + case Verb::kBevelJoin: + case Verb::kInternalBevelJoin: + pendingJoin = verb; + continue; + case Verb::kLinearStroke: + write_line(patch, pathPts[i], pathPts[i+1]); + ++i; + break; + case Verb::kQuadraticStroke: + write_quadratic(patch, &pathPts[i]); + i += 2; + break; + case Verb::kCubicStroke: + memcpy(patch, &pathPts[i], sizeof(SkPoint) * 4); + i += 3; + break; + case Verb::kRotate: + write_loop(patch, pathPts[i], pathPts[i+1], pathPts[i]*2 - pathPts[i+1]); + i += 2; + break; + case Verb::kSquareCap: { + SkASSERT(pendingJoin == Verb::kEndContour); + write_square_cap(patch, pathPts[i], lastJoinControlPoint, currStrokeRadius); + // This cubic steps outside the cap, but if we force it to only have one segment, we + // will just get the rectangular cap. + overrideNumSegments = 1; + break; + } + case Verb::kRoundCap: + // A round cap is the same thing as a 180-degree round join. + SkASSERT(pendingJoin == Verb::kEndContour); + pendingJoin = Verb::kRoundJoin; + write_loop(patch, pathPts[i], lastJoinControlPoint, lastJoinControlPoint); + break; + case Verb::kEndContour: + // Final join + write_loop(patch, pathPts[i], firstJoinControlPoint, lastJoinControlPoint); + ++i; + break; + } + + SkPoint c1 = (patch[1] == patch[0]) ? patch[2] : patch[1]; + SkPoint c2 = (patch[2] == patch[3]) ? patch[1] : patch[2]; + + if (pendingJoin != Verb::kEndContour) { + vertexData[0] = patch[0]; + vertexData[1] = lastJoinControlPoint; + vertexData[2] = c1; + vertexData[3] = patch[0]; + switch (pendingJoin) { + case Verb::kBevelJoin: + vertexData[4].set(1, currStrokeRadius); + break; + case Verb::kMiterJoin: + vertexData[4].set(2, currStrokeRadius); + break; + case Verb::kRoundJoin: + vertexData[4].set(3, currStrokeRadius); + break; + case Verb::kInternalRoundJoin: + case Verb::kInternalBevelJoin: + default: + vertexData[4].set(4, currStrokeRadius); + break; + } + vertexData += 5; + fVertexCount += 5; + pendingJoin = Verb::kEndContour; + } + + if (verb != Verb::kRoundCap) { + if (!hasFirstControlPoint) { + firstJoinControlPoint = c1; + hasFirstControlPoint = true; + } + lastJoinControlPoint = c2; + } + + if (verb == Verb::kEndContour) { + // Temporary hack for this adapter in case the next contour is a round cap. + lastJoinControlPoint = firstJoinControlPoint; + hasFirstControlPoint = false; + } else if (verb != Verb::kRotate && verb != Verb::kRoundCap) { + memcpy(vertexData, patch, sizeof(SkPoint) * 4); + vertexData[4].set(-overrideNumSegments, currStrokeRadius); + vertexData += 5; + fVertexCount += 5; + } + } + SkASSERT(pathStrokesIter == fPathStrokes.end()); + + SkASSERT(fVertexCount <= strokeGeometry.verbs().count() * 2 * 5); + flushState->putBackVertices(strokeGeometry.verbs().count() * 2 * 5 - fVertexCount, + sizeof(SkPoint)); +} + +void GrTessellateStrokeOp::onExecute(GrOpFlushState* flushState, const SkRect& chainBounds) { + if (!fVertexBuffer) { + return; + } + + GrPipeline::InitArgs initArgs; + if (GrAAType::kNone != fAAType) { + initArgs.fInputFlags |= GrPipeline::InputFlags::kHWAntialias; + SkASSERT(flushState->proxy()->numSamples() > 1); // No mixed samples yet. + SkASSERT(fAAType != GrAAType::kCoverage); // No mixed samples yet. + } + initArgs.fCaps = &flushState->caps(); + initArgs.fDstProxyView = flushState->drawOpArgs().dstProxyView(); + initArgs.fWriteSwizzle = flushState->drawOpArgs().writeSwizzle(); + GrPipeline pipeline(initArgs, std::move(fProcessors), flushState->detachAppliedClip()); + + SkASSERT(fViewMatrix.isIdentity()); // Only identity matrices supported for now. + GrTessellateStrokeShader strokeShader(fViewMatrix, fColor, fMiterLimitOrZero); + GrPathShader::ProgramInfo programInfo(flushState->writeView(), &pipeline, &strokeShader); + + flushState->bindPipelineAndScissorClip(programInfo, this->bounds() /*chainBounds??*/); + flushState->bindTextures(strokeShader, nullptr, pipeline); + + flushState->bindBuffers(nullptr, nullptr, fVertexBuffer.get()); + flushState->draw(fVertexCount, fBaseVertex); +} diff --git a/src/gpu/tessellate/GrTessellateStrokeOp.h b/src/gpu/tessellate/GrTessellateStrokeOp.h new file mode 100644 index 0000000000000..532616483df0b --- /dev/null +++ b/src/gpu/tessellate/GrTessellateStrokeOp.h @@ -0,0 +1,64 @@ +/* + * Copyright 2020 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrTessellateStrokeOp_DEFINED +#define GrTessellateStrokeOp_DEFINED + +#include "include/core/SkStrokeRec.h" +#include "src/gpu/GrSTArenaList.h" +#include "src/gpu/ops/GrDrawOp.h" + +// Renders opaque, constant-color strokes by decomposing them into standalone tessellation patches. +// Each patch is either a "cubic" (single stroked bezier curve with butt caps) or a "join". Requires +// MSAA if antialiasing is desired. +class GrTessellateStrokeOp : public GrDrawOp { +public: + DEFINE_OP_CLASS_ID + +private: + // The provided matrix must be a similarity matrix for the time being. This is so we can + // bootstrap this Op on top of GrStrokeGeometry with minimal modifications. + // + // Patches can overlap, so until a stencil technique is implemented, the provided paint must be + // a constant blended color. + GrTessellateStrokeOp(const SkMatrix&, const SkPath&, const SkStrokeRec&, GrPaint&&, GrAAType); + + const char* name() const override { return "GrTessellateStrokeOp"; } + void visitProxies(const VisitProxyFunc& fn) const override { fProcessors.visitProxies(fn); } + FixedFunctionFlags fixedFunctionFlags() const override; + GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, + bool hasMixedSampledCoverage, GrClampType) override; + CombineResult onCombineIfPossible(GrOp*, GrRecordingContext::Arenas*, const GrCaps&) override; + void onPrePrepare(GrRecordingContext*, const GrSurfaceProxyView*, GrAppliedClip*, + const GrXferProcessor::DstProxyView&) override; + void onPrepare(GrOpFlushState* state) override; + void onExecute(GrOpFlushState*, const SkRect& chainBounds) override; + + struct PathStroke { + PathStroke(const SkPath& path, const SkStrokeRec& stroke) : fPath(path), fStroke(stroke) {} + SkPath fPath; + SkStrokeRec fStroke; + }; + + GrSTArenaList fPathStrokes; + int fNumVerbs; + int fNumPoints; + + SkPMColor4f fColor; + const SkMatrix fViewMatrix = SkMatrix::I(); + const GrAAType fAAType; + float fMiterLimitOrZero = 0; // Zero if there is not a stroke with a miter join type. + GrProcessorSet fProcessors; + + sk_sp fVertexBuffer; + int fVertexCount = 0; + int fBaseVertex; + + friend class GrOpMemoryPool; // For ctor. +}; + +#endif diff --git a/src/gpu/tessellate/GrTessellateStrokeShader.cpp b/src/gpu/tessellate/GrTessellateStrokeShader.cpp new file mode 100644 index 0000000000000..d24101c618999 --- /dev/null +++ b/src/gpu/tessellate/GrTessellateStrokeShader.cpp @@ -0,0 +1,257 @@ +/* + * Copyright 2020 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/gpu/tessellate/GrTessellateStrokeShader.h" + +#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" +#include "src/gpu/glsl/GrGLSLGeometryProcessor.h" +#include "src/gpu/glsl/GrGLSLVarying.h" +#include "src/gpu/glsl/GrGLSLVertexGeoBuilder.h" +#include "src/gpu/tessellate/GrWangsFormula.h" + +class GrTessellateStrokeShader::Impl : public GrGLSLGeometryProcessor { +public: + const char* getMiterLimitUniformName(const GrGLSLUniformHandler& uniformHandler) const { + return uniformHandler.getUniformCStr(fMiterLimitUniform); + } + +private: + void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) override { + const auto& shader = args.fGP.cast(); + args.fVaryingHandler->emitAttributes(shader); + + fMiterLimitUniform = args.fUniformHandler->addUniform( + nullptr, kTessControl_GrShaderFlag, kFloat_GrSLType, "miterLimit", nullptr); + + const char* colorUniformName; + fColorUniform = args.fUniformHandler->addUniform( + nullptr, kFragment_GrShaderFlag, kHalf4_GrSLType, "color", &colorUniformName); + + // The vertex shader is pure pass-through. Stroke widths and normals are defined in local + // path space, so we don't apply the view matrix until after tessellation. + args.fVertBuilder->declareGlobal(GrShaderVar("P", kFloat2_GrSLType, + GrShaderVar::TypeModifier::Out)); + args.fVertBuilder->codeAppendf("P = inputPoint;"); + + // The fragment shader just outputs a uniform color. + args.fFragBuilder->codeAppendf("%s = %s;", args.fOutputColor, colorUniformName); + args.fFragBuilder->codeAppendf("%s = half4(1);", args.fOutputCoverage); + } + + void setData(const GrGLSLProgramDataManager& pdman, + const GrPrimitiveProcessor& primProc) override { + const auto& shader = primProc.cast(); + + if (shader.fMiterLimitOrZero != 0 && fCachedMiterLimitValue != shader.fMiterLimitOrZero) { + pdman.set1f(fMiterLimitUniform, shader.fMiterLimitOrZero); + fCachedMiterLimitValue = shader.fMiterLimitOrZero; + } + + if (fCachedColorValue != shader.fColor) { + pdman.set4fv(fColorUniform, 1, shader.fColor.vec()); + fCachedColorValue = shader.fColor; + } + } + + GrGLSLUniformHandler::UniformHandle fMiterLimitUniform; + GrGLSLUniformHandler::UniformHandle fColorUniform; + + float fCachedMiterLimitValue = -1; + SkMatrix fCachedViewMatrixValue = SkMatrix::I(); + SkPMColor4f fCachedColorValue = {-1, -1, -1, -1}; +}; + +SkString GrTessellateStrokeShader::getTessControlShaderGLSL( + const GrGLSLPrimitiveProcessor* glslPrimProc, const char* versionAndExtensionDecls, + const GrGLSLUniformHandler& uniformHandler, const GrShaderCaps& shaderCaps) const { + auto impl = static_cast(glslPrimProc); + + SkString code(versionAndExtensionDecls); + code.append("layout(vertices = 1) out;\n"); + + // TODO: CCPR stroking was written with a linearization tolerance of 1/8 pixel. Readdress this + // ASAP to see if we can use GrTessellationPathRenderer::kLinearizationIntolerance (1/4 pixel) + // instead. + constexpr static float kIntolerance = 8; // 1/8 pixel. + code.appendf("const float kTolerance = %f;\n", 1/kIntolerance); + code.appendf("const float kCubicK = %f;\n", GrWangsFormula::cubic_k(kIntolerance)); + + const char* miterLimitName = impl->getMiterLimitUniformName(uniformHandler); + code.appendf("uniform float %s;\n", miterLimitName); + code.appendf("#define uMiterLimit %s\n", miterLimitName); + + code.append(R"( + in vec2 P[]; + + out vec4 X[]; + out vec4 Y[]; + out vec2 fanAngles[]; + out vec2 strokeRadii[]; + out vec2 outsetClamp[]; + + void main() { + // The 5th point contains the patch type and stroke radius. + float strokeRadius = P[4].y; + + X[gl_InvocationID /*== 0*/] = vec4(P[0].x, P[1].x, P[2].x, P[3].x); + Y[gl_InvocationID /*== 0*/] = vec4(P[0].y, P[1].y, P[2].y, P[3].y); + fanAngles[gl_InvocationID /*== 0*/] = vec2(0); + strokeRadii[gl_InvocationID /*== 0*/] = vec2(strokeRadius); + outsetClamp[gl_InvocationID /*== 0*/] = vec2(-1, 1); + + // Calculate how many linear segments to chop this curve into. + // (See GrWangsFormula::cubic().) + float numSegments = sqrt(kCubicK * length(max(abs(P[2] - P[1]*2.0 + P[0]), + abs(P[3] - P[2]*2.0 + P[1])))); + + // A patch can override the number of segments it gets chopped into by passing a + // negative value as P[4].x. (Square caps do this to only draw one segment.) + if (P[4].x < 0) { + numSegments = -P[4].x; + } + + // A positive value in P[4].x means this patch actually represents a join instead + // of a stroked cubic. Joins are implemented as radial fans from the junction point. + if (P[4].x > 0) { + // Start by finding the angle between the tangents coming in and out of the + // join. + vec2 c0 = P[1] - P[0]; + vec2 c1 = P[3] - P[2]; + float theta = atan(determinant(mat2(c0, c1)), dot(c0, c1)); + + // Determine the beginning and end angles of our join. + fanAngles[gl_InvocationID /*== 0*/] = atan(c0.y, c0.x) + vec2(0, theta); + + float joinType = P[4].x; + if (joinType >= 3) { + // Round join. Decide how many fan segments we need in order to be smooth. + numSegments = abs(theta) / (2 * acos(1 - kTolerance/strokeRadius)); + } else if (joinType == 2) { + // Miter join. Draw a fan with 2 segments and lengthen the interior radius + // so it matches the miter point. + // (Or draw a 1-segment fan if we exceed the miter limit.) + float miterRatio = 1.0 / cos(.5 * theta); + strokeRadii[gl_InvocationID /*== 0*/] = strokeRadius * vec2(1, miterRatio); + numSegments = (miterRatio <= uMiterLimit) ? 2.0 : 1.0; + } else { + // Bevel join. Make a fan with only one segment. + numSegments = 1; + } + + if (strokeRadius * abs(theta) < kTolerance) { + // The join angle is too tight to guarantee there won't be gaps on the + // inside of the junction. Just in case our join was supposed to only go on + // the outside, switch to an internal bevel that ties all 4 incoming + // vertices together. The join angle is so tight that bevels, miters, and + // rounds will all look the same anyway. + numSegments = 1; + // Paranoia. The next shader uses "fanAngles.x != fanAngles.y" as the test + // to decide whether it is emitting a cubic or a fan. But if theta is close + // enough to zero, that might fail. Assign arbitrary, nonequal values. This + // is fine because we will only draw one segment with vertices at T=0 and + // T=1, and the shader won't use fanAngles on the two outer vertices. + fanAngles[gl_InvocationID /*== 0*/] = vec2(1, 0); + } else if (joinType != 4) { + // This is a standard join. Restrict it to the outside of the junction. + outsetClamp[gl_InvocationID /*== 0*/] = mix( + vec2(-1, 1), vec2(0), lessThan(vec2(-theta, theta), vec2(0))); + } + } + + // Tessellate a "strip" of numSegments quads. + numSegments = max(1, numSegments); + gl_TessLevelInner[0] = numSegments; + gl_TessLevelInner[1] = 2.0; + gl_TessLevelOuter[0] = 2.0; + gl_TessLevelOuter[1] = numSegments; + gl_TessLevelOuter[2] = 2.0; + gl_TessLevelOuter[3] = numSegments; + } + )"); + + return code; +} + +SkString GrTessellateStrokeShader::getTessEvaluationShaderGLSL( + const GrGLSLPrimitiveProcessor*, const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, const GrShaderCaps&) const { + SkString code(versionAndExtensionDecls); + code.append(R"( + layout(quads, equal_spacing, ccw) in; + + in vec4 X[]; + in vec4 Y[]; + in vec2 fanAngles[]; + in vec2 strokeRadii[]; + in vec2 outsetClamp[]; + + uniform vec4 sk_RTAdjust; + + void main() { + float strokeRadius = strokeRadii[0].x; + + mat4x2 P = transpose(mat2x4(X[0], Y[0])); + float T = gl_TessCoord.x; + + // Evaluate the cubic at T. Use De Casteljau's for its accuracy and stability. + vec2 ab = mix(P[0], P[1], T); + vec2 bc = mix(P[1], P[2], T); + vec2 cd = mix(P[2], P[3], T); + vec2 abc = mix(ab, bc, T); + vec2 bcd = mix(bc, cd, T); + vec2 position = mix(abc, bcd, T); + + // Find the normalized tangent vector at T. + vec2 tangent = bcd - abc; + if (tangent == vec2(0)) { + // We get tangent=0 if (P0 == P1 and T == 0), of if (P2 == P3 and T == 1). + tangent = (T == 0) ? P[2] - P[0] : P[3] - P[1]; + } + tangent = normalize(tangent); + + // If the fanAngles are not equal, it means this patch actually represents a join + // instead of a stroked cubic. Joins are implemented as radial fans from the + // junction point. + // + // The caller carefully sets up the control points on junctions so the above math + // lines up exactly with the incoming stroke vertices at T=0 and T=1, but for + // interior T values we fall back on the fan's arc equation instead. + if (fanAngles[0].x != fanAngles[0].y && T != 0 && T != 1) { + position = P[0]; + float theta = mix(fanAngles[0].x, fanAngles[0].y, T); + tangent = vec2(cos(theta), sin(theta)); + // Miters use a larger radius for the internal vertex. + strokeRadius = strokeRadii[0].y; + } + + // Determine how far to outset our vertex orthogonally from the curve. + float outset = gl_TessCoord.y * 2 - 1; + outset = clamp(outset, outsetClamp[0].x, outsetClamp[0].y); + outset *= strokeRadius; + + vec2 vertexpos = position + vec2(-tangent.y, tangent.x) * outset; + )"); + + // Transform after tessellation. Stroke widths and normals are defined in (pre-transform) local + // path space. + if (!this->viewMatrix().isIdentity()) { + SK_ABORT("Non-identity matrices not supported."); + // TODO: implement. + } + + code.append(R"( + gl_Position = vec4(vertexpos * sk_RTAdjust.xz + sk_RTAdjust.yw, 0.0, 1.0); + } + )"); + + return code; +} + +GrGLSLPrimitiveProcessor* GrTessellateStrokeShader::createGLSLInstance( + const GrShaderCaps&) const { + return new Impl; +} diff --git a/src/gpu/tessellate/GrTessellateStrokeShader.h b/src/gpu/tessellate/GrTessellateStrokeShader.h new file mode 100644 index 0000000000000..262a40d6aa3cb --- /dev/null +++ b/src/gpu/tessellate/GrTessellateStrokeShader.h @@ -0,0 +1,73 @@ +/* + * Copyright 2020 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrTessellateStrokeShader_DEFINED +#define GrTessellateStrokeShader_DEFINED + +#include "src/gpu/tessellate/GrPathShader.h" + +#include "src/gpu/tessellate/GrTessellationPathRenderer.h" + +class GrGLSLUniformHandler; + +// Tessellates a batch of stroke patches directly to the canvas. A patch is either a "cubic" +// (single stroked bezier curve with butt caps) or a "join". A patch is defined by 5 points as +// follows: +// +// P0..P3 : Represent the cubic control points. +// (P4.x == 0) : The patch is a cubic and the shader decides how many linear segments to produce. +// (P4.x < 0) : The patch is still a cubic, but will be linearized into exactly |P4.x| segments. +// (P4.x == 1) : The patch is an outer bevel join. +// (P4.x == 2) : The patch is an outer miter join. +// (NOTE: If miterLimitOrZero == 0, then miter join patches are illegal.) +// (P4.x == 3) : The patch is an outer round join. +// (P4.x == 4) : The patch is an inner and outer round join. +// P4.y : Represents the stroke radius. +// +// If a patch is a join, P0 must equal P3, P1 must equal the control point coming into the junction, +// and P2 must equal the control point going out. It's imperative that a junction's control points +// match the control points of their neighbor cubics exactly, or the rasterization might not be +// water tight. (Also note that if P1==P0 or P2==P3, the junction needs to be given its neighbor's +// opposite cubic control point.) +// +// To use this shader, construct a GrProgramInfo with a primitiveType of "kPatches" and a +// tessellationPatchVertexCount of 5. +class GrTessellateStrokeShader : public GrPathShader { +public: + GrTessellateStrokeShader(const SkMatrix& viewMatrix, SkPMColor4f color, float miterLimitOrZero) + : GrPathShader(kTessellate_GrTessellateStrokeShader_ClassID, viewMatrix, + GrPrimitiveType::kPatches, 5) + , fColor(color) + , fMiterLimitOrZero(miterLimitOrZero) { + constexpr static Attribute kInputPointAttrib{"inputPoint", kFloat2_GrVertexAttribType, + kFloat2_GrSLType}; + this->setVertexAttributes(&kInputPointAttrib, 1); + } + +private: + const char* name() const override { return "GrTessellateStrokeShader"; } + void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const override { + b->add32(this->viewMatrix().isIdentity()); + } + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const final; + + SkString getTessControlShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, + const GrShaderCaps&) const override; + SkString getTessEvaluationShaderGLSL(const GrGLSLPrimitiveProcessor*, + const char* versionAndExtensionDecls, + const GrGLSLUniformHandler&, + const GrShaderCaps&) const override; + + const SkPMColor4f fColor; + const float fMiterLimitOrZero; // Zero if there will not be any miter join patches. + + class Impl; +}; + +#endif diff --git a/src/gpu/tessellate/GrTessellationPathRenderer.cpp b/src/gpu/tessellate/GrTessellationPathRenderer.cpp index 34fcfc04ccc9a..519a83b0a4192 100644 --- a/src/gpu/tessellate/GrTessellationPathRenderer.cpp +++ b/src/gpu/tessellate/GrTessellationPathRenderer.cpp @@ -7,6 +7,7 @@ #include "src/gpu/tessellate/GrTessellationPathRenderer.h" +#include "include/pathops/SkPathOps.h" #include "src/core/SkIPoint16.h" #include "src/core/SkPathPriv.h" #include "src/gpu/GrClip.h" @@ -18,6 +19,8 @@ #include "src/gpu/ops/GrFillRectOp.h" #include "src/gpu/tessellate/GrDrawAtlasPathOp.h" #include "src/gpu/tessellate/GrTessellatePathOp.h" +#include "src/gpu/tessellate/GrTessellateStrokeOp.h" +#include "src/gpu/tessellate/GrWangsFormula.h" constexpr static SkISize kAtlasInitialSize{512, 512}; constexpr static int kMaxAtlasSize = 2048; @@ -30,37 +33,120 @@ constexpr static auto kAtlasAlgorithm = GrDynamicAtlas::RectanizerAlgorithm::kPo // Ensure every path in the atlas falls in or below the 128px high rectanizer band. constexpr static int kMaxAtlasPathHeight = 128; -GrTessellationPathRenderer::GrTessellationPathRenderer(const GrCaps& caps) : fAtlas( - GrColorType::kAlpha_8, GrDynamicAtlas::InternalMultisample::kYes, kAtlasInitialSize, - std::min(kMaxAtlasSize, caps.maxPreferredRenderTargetSize()), caps, kAtlasAlgorithm) { +GrTessellationPathRenderer::GrTessellationPathRenderer(const GrCaps& caps) + : fAtlas(GrColorType::kAlpha_8, GrDynamicAtlas::InternalMultisample::kYes, + kAtlasInitialSize, std::min(kMaxAtlasSize, caps.maxPreferredRenderTargetSize()), + caps, kAtlasAlgorithm) { + this->initAtlasFlags(*caps.shaderCaps()); +} + +void GrTessellationPathRenderer::initAtlasFlags(const GrShaderCaps& shaderCaps) { + fStencilAtlasFlags = OpFlags::kStencilOnly | OpFlags::kDisableHWTessellation; + fMaxAtlasPathWidth = fAtlas.maxAtlasSize() / 2; + // The atlas usually does better with hardware tessellation. If hardware tessellation is + // supported, we choose a max atlas path width that is guaranteed to never require more + // tessellation segments than are supported by the hardware. + if (!shaderCaps.tessellationSupport()) { + return; + } + // Since we limit the area of paths in the atlas to kMaxAtlasPathHeight^2, taller paths can't + // get very wide anyway. Find the tallest path whose width is limited by + // GrWangsFormula::worst_case_cubic() rather than the max area constraint, and use that for our + // max atlas path width. + // + // Solve the following equation for w: + // + // GrWangsFormula::worst_case_cubic(kLinearizationIntolerance, w, kMaxAtlasPathHeight^2 / w) + // == maxTessellationSegments + // + float k = GrWangsFormula::cubic_k(kLinearizationIntolerance); + float h = kMaxAtlasPathHeight; + float s = shaderCaps.maxTessellationSegments(); + // Quadratic formula from Numerical Recipes in C: + // + // q = -1/2 [b + sign(b) sqrt(b*b - 4*a*c)] + // x1 = q/a + // x2 = c/q + // + // float a = 1; // 'a' is always 1 in our specific equation. + float b = -s*s*s*s / (4*k*k); // Always negative. + float c = h*h*h*h; // Always positive. + float det = b*b - 4*1*c; + if (det <= 0) { + // maxTessellationSegments is too small for any path whose area == kMaxAtlasPathHeight^2. + // (This is unexpected because the GL spec mandates a minimum of 64 segments.) + SkDebugf("WARNING: maxTessellationSegments seems too low. (%i)\n", + shaderCaps.maxTessellationSegments()); + return; + } + float q = -.5f * (b - std::sqrt(det)); // Always positive. + // The two roots represent the width^2 and height^2 of the tallest rectangle that is limited by + // GrWangsFormula::worst_case_cubic(). + float r0 = q; // Always positive. + float r1 = c/q; // Always positive. + float worstCaseWidth = std::sqrt(std::max(r0, r1)); +#ifdef SK_DEBUG + float worstCaseHeight = std::sqrt(std::min(r0, r1)); + // Verify the above equation worked as expected. It should have found a width and height whose + // area == kMaxAtlasPathHeight^2. + SkASSERT(SkScalarNearlyEqual(worstCaseHeight * worstCaseWidth, h*h, 1)); + // Verify GrWangsFormula::worst_case_cubic() still works as we expect. The worst case number of + // segments for this bounding box should be maxTessellationSegments. + SkASSERT(SkScalarNearlyEqual(GrWangsFormula::worst_case_cubic( + kLinearizationIntolerance, worstCaseWidth, worstCaseHeight), s, 1)); +#endif + fStencilAtlasFlags &= ~OpFlags::kDisableHWTessellation; + fMaxAtlasPathWidth = std::min(fMaxAtlasPathWidth, (int)worstCaseWidth); } GrPathRenderer::CanDrawPath GrTessellationPathRenderer::onCanDrawPath( const CanDrawPathArgs& args) const { - if (!args.fShape->style().isSimpleFill() || args.fShape->inverseFilled() || + const GrStyledShape& shape = *args.fShape; + if (shape.inverseFilled() || shape.style().hasPathEffect() || args.fViewMatrix->hasPerspective()) { return CanDrawPath::kNo; } + if (GrAAType::kCoverage == args.fAAType) { SkASSERT(1 == args.fProxy->numSamples()); if (!args.fProxy->canUseMixedSamples(*args.fCaps)) { return CanDrawPath::kNo; } } + SkPath path; - args.fShape->asPath(&path); + shape.asPath(&path); if (SkPathPriv::ConicWeightCnt(path)) { return CanDrawPath::kNo; } + + if (!shape.style().isSimpleFill()) { + SkPMColor4f constantColor; + // These are only temporary restrictions while we bootstrap tessellated stroking. Every one + // of them will eventually go away. + if (shape.style().strokeRec().getStyle() == SkStrokeRec::kStrokeAndFill_Style || + !args.fCaps->shaderCaps()->tessellationSupport() || + GrAAType::kCoverage == args.fAAType || !args.fViewMatrix->isSimilarity() || + !args.fPaint->isConstantBlendedColor(&constantColor) || + args.fPaint->numCoverageFragmentProcessors()) { + return CanDrawPath::kNo; + } + } + return CanDrawPath::kYes; } bool GrTessellationPathRenderer::onDrawPath(const DrawPathArgs& args) { GrRenderTargetContext* renderTargetContext = args.fRenderTargetContext; GrOpMemoryPool* pool = args.fContext->priv().opMemoryPool(); + const GrShaderCaps& shaderCaps = *args.fContext->priv().caps()->shaderCaps(); + SkPath path; args.fShape->asPath(&path); + SkRect devBounds; + args.fViewMatrix->mapRect(&devBounds, path.getBounds()); + // See if the path is small and simple enough to atlas instead of drawing directly. // // NOTE: The atlas uses alpha8 coverage even for msaa render targets. We could theoretically @@ -69,8 +155,20 @@ bool GrTessellationPathRenderer::onDrawPath(const DrawPathArgs& args) { SkIRect devIBounds; SkIPoint16 locationInAtlas; bool transposedInAtlas; - if (this->tryAddPathToAtlas(*args.fContext->priv().caps(), *args.fViewMatrix, path, + if (args.fShape->style().isSimpleFill() && + this->tryAddPathToAtlas(*args.fContext->priv().caps(), *args.fViewMatrix, path, devBounds, args.fAAType, &devIBounds, &locationInAtlas, &transposedInAtlas)) { +#ifdef SK_DEBUG + // If using hardware tessellation in the atlas, make sure the max number of segments is + // sufficient for this path. fMaxAtlasPathWidth should have been tuned for this to always be + // the case. + if (!(fStencilAtlasFlags & OpFlags::kDisableHWTessellation)) { + int worstCaseNumSegments = GrWangsFormula::worst_case_cubic(kLinearizationIntolerance, + devIBounds.width(), + devIBounds.height()); + SkASSERT(worstCaseNumSegments <= shaderCaps.maxTessellationSegments()); + } +#endif auto op = pool->allocate( renderTargetContext->numSamples(), sk_ref_sp(fAtlas.textureProxy()), devIBounds, locationInAtlas, transposedInAtlas, *args.fViewMatrix, @@ -79,15 +177,78 @@ bool GrTessellationPathRenderer::onDrawPath(const DrawPathArgs& args) { return true; } - auto op = pool->allocate( - *args.fViewMatrix, path, std::move(args.fPaint), args.fAAType); + // Find the worst-case log2 number of line segments that a curve in this path might need to be + // divided into. + int worstCaseResolveLevel = GrWangsFormula::worst_case_cubic_log2(kLinearizationIntolerance, + devBounds.width(), + devBounds.height()); + if (worstCaseResolveLevel > kMaxResolveLevel) { + // The path is too large for our internal indirect draw shaders. Crop it to the viewport. + auto viewport = SkRect::MakeIWH(renderTargetContext->width(), + renderTargetContext->height()); + float inflationRadius = 1; + const SkStrokeRec& stroke = args.fShape->style().strokeRec(); + if (stroke.getStyle() == SkStrokeRec::kHairline_Style) { + inflationRadius += SkStrokeRec::GetInflationRadius(stroke.getJoin(), stroke.getMiter(), + stroke.getCap(), 1); + } else if (stroke.getStyle() != SkStrokeRec::kFill_Style) { + inflationRadius += stroke.getInflationRadius() * args.fViewMatrix->getMaxScale(); + } + viewport.outset(inflationRadius, inflationRadius); + + SkPath viewportPath; + viewportPath.addRect(viewport); + // Perform the crop in device space so it's a simple rect-path intersection. + path.transform(*args.fViewMatrix); + if (!Op(viewportPath, path, kIntersect_SkPathOp, &path)) { + // The crop can fail if the PathOps encounter NaN or infinities. Return true + // because drawing nothing is acceptable behavior for FP overflow. + return true; + } + + // Transform the path back to its own local space. + SkMatrix inverse; + if (!args.fViewMatrix->invert(&inverse)) { + return true; // Singular view matrix. Nothing would have drawn anyway. Return true. + } + path.transform(inverse); + path.setIsVolatile(true); + args.fViewMatrix->mapRect(&devBounds, path.getBounds()); + worstCaseResolveLevel = GrWangsFormula::worst_case_cubic_log2(kLinearizationIntolerance, + devBounds.width(), + devBounds.height()); + // kMaxResolveLevel should be large enough to tessellate paths the size of any screen we + // might encounter. + SkASSERT(worstCaseResolveLevel <= kMaxResolveLevel); + } + + if (!args.fShape->style().isSimpleFill()) { + const SkStrokeRec& stroke = args.fShape->style().strokeRec(); + SkASSERT(stroke.getStyle() != SkStrokeRec::kStrokeAndFill_Style); + auto op = pool->allocate(*args.fViewMatrix, path, stroke, + std::move(args.fPaint), args.fAAType); + renderTargetContext->addDrawOp(args.fClip, std::move(op)); + return true; + } + + auto drawPathFlags = OpFlags::kNone; + if ((1 << worstCaseResolveLevel) > shaderCaps.maxTessellationSegments()) { + // The path is too large for hardware tessellation; a curve in this bounding box could + // potentially require more segments than are supported by the hardware. Fall back on + // indirect draws. + drawPathFlags |= OpFlags::kDisableHWTessellation; + } + + auto op = pool->allocate(*args.fViewMatrix, path, std::move(args.fPaint), + args.fAAType, drawPathFlags); renderTargetContext->addDrawOp(args.fClip, std::move(op)); return true; } bool GrTessellationPathRenderer::tryAddPathToAtlas( - const GrCaps& caps, const SkMatrix& viewMatrix, const SkPath& path, GrAAType aaType, - SkIRect* devIBounds, SkIPoint16* locationInAtlas, bool* transposedInAtlas) { + const GrCaps& caps, const SkMatrix& viewMatrix, const SkPath& path, const SkRect& devBounds, + GrAAType aaType, SkIRect* devIBounds, SkIPoint16* locationInAtlas, + bool* transposedInAtlas) { if (!caps.multisampleDisableSupport() && GrAAType::kNone == aaType) { return false; } @@ -98,13 +259,10 @@ bool GrTessellationPathRenderer::tryAddPathToAtlas( return false; } - SkRect devBounds; - viewMatrix.mapRect(&devBounds, path.getBounds()); - devBounds.roundOut(devIBounds); - // Transpose tall paths in the atlas. Since we limit ourselves to small-area paths, this // guarantees that every atlas entry has a small height, which lends very well to efficient pow2 // atlas packing. + devBounds.roundOut(devIBounds); int maxDimenstion = devIBounds->width(); int minDimension = devIBounds->height(); *transposedInAtlas = minDimension > maxDimenstion; @@ -115,7 +273,7 @@ bool GrTessellationPathRenderer::tryAddPathToAtlas( // Check if the path is too large for an atlas. Since we use "minDimension" for height in the // atlas, limiting to kMaxAtlasPathHeight^2 pixels guarantees height <= kMaxAtlasPathHeight. if (maxDimenstion * minDimension > kMaxAtlasPathHeight * kMaxAtlasPathHeight || - maxDimenstion > kMaxAtlasSize / 2) { + maxDimenstion > fMaxAtlasPathWidth) { return false; } @@ -149,7 +307,7 @@ void GrTessellationPathRenderer::onStencilPath(const StencilPathArgs& args) { GrAAType aaType = (GrAA::kYes == args.fDoStencilMSAA) ? GrAAType::kMSAA : GrAAType::kNone; auto op = args.fContext->priv().opMemoryPool()->allocate( - *args.fViewMatrix, path, GrPaint(), aaType, GrTessellatePathOp::Flags::kStencilOnly); + *args.fViewMatrix, path, GrPaint(), aaType, OpFlags::kStencilOnly); args.fRenderTargetContext->addDrawOp(args.fClip, std::move(op)); } @@ -198,8 +356,7 @@ void GrTessellationPathRenderer::renderAtlas(GrOnFlushResourceProvider* onFlushR uberPath->setFillType(fillType); GrAAType aaType = (antialias) ? GrAAType::kMSAA : GrAAType::kNone; auto op = onFlushRP->opMemoryPool()->allocate( - SkMatrix::I(), *uberPath, GrPaint(), aaType, - GrTessellatePathOp::Flags::kStencilOnly); + SkMatrix::I(), *uberPath, GrPaint(), aaType, fStencilAtlasFlags); rtc->addDrawOp(nullptr, std::move(op)); } } diff --git a/src/gpu/tessellate/GrTessellationPathRenderer.h b/src/gpu/tessellate/GrTessellationPathRenderer.h index 28f2f1a6cc644..4035a0d7a2fd7 100644 --- a/src/gpu/tessellate/GrTessellationPathRenderer.h +++ b/src/gpu/tessellate/GrTessellationPathRenderer.h @@ -19,9 +19,32 @@ // target that supports either MSAA or mixed samples if AA is desired. class GrTessellationPathRenderer : public GrPathRenderer, public GrOnFlushCallbackObject { public: - const char* name() const final { return "Tess"; } + // Don't allow linearized segments to be off by more than 1/4th of a pixel from the true curve. + constexpr static float kLinearizationIntolerance = 4; + + // This is the maximum resolve level supported by our internal indirect draw shaders. (Indirect + // draws are an alternative to hardware tessellation, and we can use them when hardware support + // is lacking.) + // + // At a given resolveLevel, a curve gets linearized into 2^resolveLevel line segments. So the + // finest resolveLevel supported by our indirect draw shaders is 2^10 == 1024 line segments. + // + // 1024 line segments is enough resolution (with intolerance == 4) to guarantee we can render a + // 123575px x 123575px path. (See GrWangsFormula::worst_case_cubic.) + constexpr static int kMaxResolveLevel = 10; + + // We send these flags to the internal tessellation Ops to control how a path gets rendered. + enum class OpFlags { + kNone = 0, + // Used when tessellation is not supported, or when a path will require more resolution than + // the max number of segments supported by the hardware. + kDisableHWTessellation = (1 << 0), + kStencilOnly = (1 << 1), + kWireframe = (1 << 2) + }; GrTessellationPathRenderer(const GrCaps&); + const char* name() const final { return "GrTessellationPathRenderer"; } StencilSupport onGetStencilSupport(const GrStyledShape& shape) const override { // TODO: Single-pass (e.g., convex) paths can have full support. return kStencilOnly_StencilSupport; @@ -33,19 +56,24 @@ class GrTessellationPathRenderer : public GrPathRenderer, public GrOnFlushCallba int numOpsTaskIDs) override; private: + void initAtlasFlags(const GrShaderCaps& shaderCaps); SkPath* getAtlasUberPath(SkPathFillType fillType, bool antialias) { int idx = (int)antialias << 1; idx |= (int)fillType & 1; return &fAtlasUberPaths[idx]; } // Allocates space in fAtlas if the path is small and simple enough, and if there is room. - bool tryAddPathToAtlas(const GrCaps&, const SkMatrix&, const SkPath&, GrAAType, - SkIRect* devIBounds, SkIPoint16* locationInAtlas, + bool tryAddPathToAtlas(const GrCaps&, const SkMatrix&, const SkPath&, const SkRect& devBounds, + GrAAType, SkIRect* devIBounds, SkIPoint16* locationInAtlas, bool* transposedInAtlas); void renderAtlas(GrOnFlushResourceProvider*); GrDynamicAtlas fAtlas; + OpFlags fStencilAtlasFlags; + int fMaxAtlasPathWidth; SkPath fAtlasUberPaths[4]; // 2 fillTypes * 2 antialias modes. }; +GR_MAKE_BITFIELD_CLASS_OPS(GrTessellationPathRenderer::OpFlags); + #endif diff --git a/src/gpu/tessellate/GrWangsFormula.h b/src/gpu/tessellate/GrWangsFormula.h index 1fa79c6793e71..b9c3264e479c1 100644 --- a/src/gpu/tessellate/GrWangsFormula.h +++ b/src/gpu/tessellate/GrWangsFormula.h @@ -22,6 +22,11 @@ SK_ALWAYS_INLINE static float length(const Sk2f& n) { return std::sqrt(nn[0] + nn[1]); } +// Constant term for the quatratic formula. +constexpr float quadratic_k(float intolerance) { + return .25f * intolerance; +} + // Returns the minimum number of evenly spaced (in the parametric sense) line segments that the // quadratic must be chopped into in order to guarantee all lines stay within a distance of // "1/intolerance" pixels from the true curve. @@ -29,10 +34,15 @@ SK_ALWAYS_INLINE static float quadratic(float intolerance, const SkPoint pts[]) Sk2f p0 = Sk2f::Load(pts); Sk2f p1 = Sk2f::Load(pts + 1); Sk2f p2 = Sk2f::Load(pts + 2); - float k = intolerance * .25f; + float k = quadratic_k(intolerance); return SkScalarSqrt(k * length(p0 - p1*2 + p2)); } +// Constant term for the cubic formula. +constexpr float cubic_k(float intolerance) { + return .75f * intolerance; +} + // Returns the minimum number of evenly spaced (in the parametric sense) line segments that the // cubic must be chopped into in order to guarantee all lines stay within a distance of // "1/intolerance" pixels from the true curve. @@ -41,11 +51,19 @@ SK_ALWAYS_INLINE static float cubic(float intolerance, const SkPoint pts[]) { Sk2f p1 = Sk2f::Load(pts + 1); Sk2f p2 = Sk2f::Load(pts + 2); Sk2f p3 = Sk2f::Load(pts + 3); - float k = intolerance * .75f; + float k = cubic_k(intolerance); return SkScalarSqrt(k * length(Sk2f::Max((p0 - p1*2 + p2).abs(), (p1 - p2*2 + p3).abs()))); } +// Returns the maximum number of line segments a cubic with the given device-space bounding box size +// would ever need to be divided into. This is simply a special case of the cubic formula where we +// maximize its value by placing control points on specific corners of the bounding box. +SK_ALWAYS_INLINE static float worst_case_cubic(float intolerance, float devWidth, float devHeight) { + float k = cubic_k(intolerance); + return SkScalarSqrt(2*k * SkVector::Length(devWidth, devHeight)); +} + // Returns the log2 of the provided value, were that value to be rounded up to the next power of 2. // Returns 0 if value <= 0: // Never returns a negative number, even if value is NaN. @@ -63,6 +81,10 @@ SK_ALWAYS_INLINE static int nextlog2(float value) { return exp & ~(exp >> 31); // Return 0 for negative or denormalized floats, and exponents < 0. } +SK_ALWAYS_INLINE static int ceil_log2_sqrt_sqrt(float f) { + return (nextlog2(f) + 3) >> 2; // i.e., "ceil(log2(sqrt(sqrt(f)))) +} + // Returns the minimum log2 number of evenly spaced (in the parametric sense) line segments that the // transformed quadratic must be chopped into in order to guarantee all lines stay within a distance // of "1/intolerance" pixels from the true curve. @@ -74,9 +96,9 @@ SK_ALWAYS_INLINE static int quadratic_log2(float intolerance, const SkPoint pts[ Sk2f v = p0 + p1*-2 + p2; v = vectorXform(v); Sk2f vv = v*v; - float k = intolerance * .25f; + float k = quadratic_k(intolerance); float f = k*k * (vv[0] + vv[1]); - return (nextlog2(f) + 3) >> 2; // ceil(log2(sqrt(sqrt(f)))) + return ceil_log2_sqrt_sqrt(f); } // Returns the minimum log2 number of evenly spaced (in the parametric sense) line segments that the @@ -91,9 +113,17 @@ SK_ALWAYS_INLINE static int cubic_log2(float intolerance, const SkPoint pts[], v = vectorXform(v); Sk4f vv = v*v; vv = Sk4f::Max(vv, SkNx_shuffle<2,3,0,1>(vv)); - float k = intolerance * .75f; + float k = cubic_k(intolerance); float f = k*k * (vv[0] + vv[1]); - return (nextlog2(f) + 3) >> 2; // ceil(log2(sqrt(sqrt(f)))) + return ceil_log2_sqrt_sqrt(f); +} + +// Returns the maximum log2 number of line segments a cubic with the given device-space bounding box +// size would ever need to be divided into. +SK_ALWAYS_INLINE static int worst_case_cubic_log2(float intolerance, float devWidth, + float devHeight) { + float k = cubic_k(intolerance); + return ceil_log2_sqrt_sqrt(4*k*k * (devWidth * devWidth + devHeight * devHeight)); } } // namespace diff --git a/src/gpu/text/GrAtlasManager.cpp b/src/gpu/text/GrAtlasManager.cpp index efe4a47268309..3120255a7c8d0 100644 --- a/src/gpu/text/GrAtlasManager.cpp +++ b/src/gpu/text/GrAtlasManager.cpp @@ -7,6 +7,8 @@ #include "src/gpu/text/GrAtlasManager.h" +#include "src/codec/SkMasks.h" +#include "src/core/SkAutoMalloc.h" #include "src/gpu/GrGlyph.h" #include "src/gpu/GrImageInfo.h" #include "src/gpu/text/GrStrikeCache.h" @@ -32,6 +34,155 @@ bool GrAtlasManager::hasGlyph(GrMaskFormat format, GrGlyph* glyph) { return this->getAtlas(format)->hasID(glyph->fAtlasLocator.plotLocator()); } +template +static void expand_bits(INT_TYPE* dst, + const uint8_t* src, + int width, + int height, + int dstRowBytes, + int srcRowBytes) { + for (int i = 0; i < height; ++i) { + int rowWritesLeft = width; + const uint8_t* s = src; + INT_TYPE* d = dst; + while (rowWritesLeft > 0) { + unsigned mask = *s++; + for (int i = 7; i >= 0 && rowWritesLeft; --i, --rowWritesLeft) { + *d++ = (mask & (1 << i)) ? (INT_TYPE)(~0UL) : 0; + } + } + dst = reinterpret_cast(reinterpret_cast(dst) + dstRowBytes); + src += srcRowBytes; + } +} + +static void get_packed_glyph_image( + const SkGlyph& glyph, int dstRB, GrMaskFormat expectedMaskFormat, void* dst) { + const int width = glyph.width(); + const int height = glyph.height(); + const void* src = glyph.image(); + SkASSERT(src != nullptr); + + GrMaskFormat grMaskFormat = GrGlyph::FormatFromSkGlyph(glyph.maskFormat()); + if (grMaskFormat == expectedMaskFormat) { + int srcRB = glyph.rowBytes(); + // Notice this comparison is with the glyphs raw mask format, and not its GrMaskFormat. + if (glyph.maskFormat() != SkMask::kBW_Format) { + if (srcRB != dstRB) { + const int bbp = GrMaskFormatBytesPerPixel(expectedMaskFormat); + for (int y = 0; y < height; y++) { + memcpy(dst, src, width * bbp); + src = (const char*) src + srcRB; + dst = (char*) dst + dstRB; + } + } else { + memcpy(dst, src, dstRB * height); + } + } else { + // Handle 8-bit format by expanding the mask to the expected format. + const uint8_t* bits = reinterpret_cast(src); + switch (expectedMaskFormat) { + case kA8_GrMaskFormat: { + uint8_t* bytes = reinterpret_cast(dst); + expand_bits(bytes, bits, width, height, dstRB, srcRB); + break; + } + case kA565_GrMaskFormat: { + uint16_t* rgb565 = reinterpret_cast(dst); + expand_bits(rgb565, bits, width, height, dstRB, srcRB); + break; + } + default: + SK_ABORT("Invalid GrMaskFormat"); + } + } + } else if (grMaskFormat == kA565_GrMaskFormat && expectedMaskFormat == kARGB_GrMaskFormat) { + // Convert if the glyph uses a 565 mask format since it is using LCD text rendering + // but the expected format is 8888 (will happen on macOS with Metal since that + // combination does not support 565). + static constexpr SkMasks masks{ + {0b1111'1000'0000'0000, 11, 5}, // Red + {0b0000'0111'1110'0000, 5, 6}, // Green + {0b0000'0000'0001'1111, 0, 5}, // Blue + {0, 0, 0} // Alpha + }; + constexpr int a565Bpp = GrMaskFormatBytesPerPixel(kA565_GrMaskFormat); + constexpr int argbBpp = GrMaskFormatBytesPerPixel(kARGB_GrMaskFormat); + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + uint16_t color565 = 0; + memcpy(&color565, src, a565Bpp); + uint32_t colorRGBA = GrColorPackRGBA(masks.getRed(color565), + masks.getGreen(color565), + masks.getBlue(color565), + 0xFF); + memcpy(dst, &colorRGBA, argbBpp); + src = (char*)src + a565Bpp; + dst = (char*)dst + argbBpp; + } + } + } else { + // crbug:510931 + // Retrieving the image from the cache can actually change the mask format. This case is + // very uncommon so for now we just draw a clear box for these glyphs. + const int bpp = GrMaskFormatBytesPerPixel(expectedMaskFormat); + for (int y = 0; y < height; y++) { + sk_bzero(dst, width * bpp); + dst = (char*)dst + dstRB; + } + } +} + +// returns true if glyph successfully added to texture atlas, false otherwise. If the glyph's +// mask format has changed, then addGlyphToAtlas will draw a clear box. This will almost never +// happen. +// TODO we can handle some of these cases if we really want to, but the long term solution is to +// get the actual glyph image itself when we get the glyph metrics. +GrDrawOpAtlas::ErrorCode GrAtlasManager::addGlyphToAtlas(const SkGlyph& skGlyph, + int padding, + GrGlyph* grGlyph, + GrResourceProvider* resourceProvider, + GrDeferredUploadTarget* uploadTarget) { + if (skGlyph.image() == nullptr) { + return GrDrawOpAtlas::ErrorCode::kError; + } + SkASSERT(grGlyph != nullptr); + + GrMaskFormat glyphFormat = GrGlyph::FormatFromSkGlyph(skGlyph.maskFormat()); + GrMaskFormat expectedMaskFormat = this->resolveMaskFormat(glyphFormat); + int bytesPerPixel = GrMaskFormatBytesPerPixel(expectedMaskFormat); + + if (padding > 0) { + SkASSERT(skGlyph.maskFormat() != SkMask::kSDF_Format); + } + + SkASSERT(padding == 0 || padding == 1); + // Add 1 pixel padding around grGlyph if needed. + const int width = skGlyph.width() + 2*padding; + const int height = skGlyph.height() + 2*padding; + int rowBytes = width * bytesPerPixel; + size_t size = height * rowBytes; + + // Temporary storage for normalizing grGlyph image. + SkAutoSMalloc<1024> storage(size); + void* dataPtr = storage.get(); + if (padding > 0) { + sk_bzero(dataPtr, size); + // Advance in one row and one column. + dataPtr = (char*)(dataPtr) + rowBytes + bytesPerPixel; + } + + get_packed_glyph_image(skGlyph, rowBytes, expectedMaskFormat, dataPtr); + + return this->addToAtlas(resourceProvider, + uploadTarget, + expectedMaskFormat, + width, + height, + storage.get(), + &grGlyph->fAtlasLocator); +} + // add to texture atlas that matches this format GrDrawOpAtlas::ErrorCode GrAtlasManager::addToAtlas(GrResourceProvider* resourceProvider, GrDeferredUploadTarget* target, diff --git a/src/gpu/text/GrAtlasManager.h b/src/gpu/text/GrAtlasManager.h index 036495fa53b1c..97fcb9a81a827 100644 --- a/src/gpu/text/GrAtlasManager.h +++ b/src/gpu/text/GrAtlasManager.h @@ -28,18 +28,6 @@ class GrAtlasManager : public GrOnFlushCallbackObject, public GrDrawOpAtlas::Gen GrAtlasManager(GrProxyProvider*, size_t maxTextureBytes, GrDrawOpAtlas::AllowMultitexturing); ~GrAtlasManager() override; - // Change an expected 565 mask format to 8888 if 565 is not supported (will happen when using - // Metal on macOS). The actual conversion of the data is handled in get_packed_glyph_image() in - // GrStrikeCache.cpp - GrMaskFormat resolveMaskFormat(GrMaskFormat format) const { - if (kA565_GrMaskFormat == format && - !fProxyProvider->caps()->getDefaultBackendFormat(GrColorType::kBGR_565, - GrRenderable::kNo).isValid()) { - format = kARGB_GrMaskFormat; - } - return format; - } - // if getViews returns nullptr, the client must not try to use other functions on the // GrStrikeCache which use the atlas. This function *must* be called first, before other // functions which use the atlas. Note that we can have proxies available but none active @@ -58,6 +46,12 @@ class GrAtlasManager : public GrOnFlushCallbackObject, public GrDrawOpAtlas::Gen bool hasGlyph(GrMaskFormat, GrGlyph*); + GrDrawOpAtlas::ErrorCode addGlyphToAtlas(const SkGlyph& skGlyph, + int padding, + GrGlyph* grGlyph, + GrResourceProvider* resourceProvider, + GrDeferredUploadTarget* uploadTarget); + // To ensure the GrDrawOpAtlas does not evict the Glyph Mask from its texture backing store, // the client must pass in the current op token along with the GrGlyph. // A BulkUseTokenUpdater is used to manage bulk last use token updating in the Atlas. @@ -118,6 +112,17 @@ class GrAtlasManager : public GrOnFlushCallbackObject, public GrDrawOpAtlas::Gen private: bool initAtlas(GrMaskFormat); + // Change an expected 565 mask format to 8888 if 565 is not supported (will happen when using + // Metal on macOS). The actual conversion of the data is handled in get_packed_glyph_image() in + // GrStrikeCache.cpp + GrMaskFormat resolveMaskFormat(GrMaskFormat format) const { + if (kA565_GrMaskFormat == format && + !fProxyProvider->caps()->getDefaultBackendFormat(GrColorType::kBGR_565, + GrRenderable::kNo).isValid()) { + format = kARGB_GrMaskFormat; + } + return format; + } // There is a 1:1 mapping between GrMaskFormats and atlas indices static int MaskFormatToAtlasIndex(GrMaskFormat format) { return static_cast(format); } diff --git a/src/gpu/text/GrSDFTOptions.cpp b/src/gpu/text/GrSDFTOptions.cpp new file mode 100644 index 0000000000000..e0ed2189e9058 --- /dev/null +++ b/src/gpu/text/GrSDFTOptions.cpp @@ -0,0 +1,167 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/gpu/text/GrSDFTOptions.h" + +#include "include/core/SkFont.h" +#include "include/core/SkMatrix.h" +#include "include/core/SkPaint.h" +#include "include/core/SkScalar.h" +#include "include/core/SkSurfaceProps.h" + +#include + +// DF sizes and thresholds for usage of the small and medium sizes. For example, above +// kSmallDFFontLimit we will use the medium size. The large size is used up until the size at +// which we switch over to drawing as paths as controlled by Options. +static const int kSmallDFFontSize = 32; +static const int kSmallDFFontLimit = 32; +static const int kMediumDFFontSize = 72; +static const int kMediumDFFontLimit = 72; +static const int kLargeDFFontSize = 162; +#ifdef SK_BUILD_FOR_MAC +static const int kLargeDFFontLimit = 162; +static const int kExtraLargeDFFontSize = 256; +#endif + +GrSDFTOptions::GrSDFTOptions(SkScalar min, SkScalar max) + : fMinDistanceFieldFontSize{min} + , fMaxDistanceFieldFontSize{max} { + SkASSERT_RELEASE(min > 0 && max >= min); +} + +bool GrSDFTOptions::canDrawAsDistanceFields(const SkPaint& paint, const SkFont& font, + const SkMatrix& viewMatrix, + const SkSurfaceProps& props, + bool contextSupportsDistanceFieldText) const { + // mask filters modify alpha, which doesn't translate well to distance + if (paint.getMaskFilter() || !contextSupportsDistanceFieldText) { + return false; + } + + // TODO: add some stroking support + if (paint.getStyle() != SkPaint::kFill_Style) { + return false; + } + + if (viewMatrix.hasPerspective()) { + // Don't use SDF for perspective. Paths look better. + return false; + } else { + SkScalar maxScale = viewMatrix.getMaxScale(); + SkScalar scaledTextSize = maxScale * font.getSize(); + // Hinted text looks far better at small resolutions + // Scaling up beyond 2x yields undesirable artifacts + if (scaledTextSize < fMinDistanceFieldFontSize || + scaledTextSize > fMaxDistanceFieldFontSize) { + return false; + } + + bool useDFT = props.isUseDeviceIndependentFonts(); +#if SK_FORCE_DISTANCE_FIELD_TEXT + useDFT = true; +#endif + + if (!useDFT && scaledTextSize < kLargeDFFontSize) { + return false; + } + } + + return true; +} + +SkScalar scaled_text_size(const SkScalar textSize, const SkMatrix& viewMatrix) { + SkScalar scaledTextSize = textSize; + + if (viewMatrix.hasPerspective()) { + // for perspective, we simply force to the medium size + // TODO: compute a size based on approximate screen area + scaledTextSize = kMediumDFFontLimit; + } else { + SkScalar maxScale = viewMatrix.getMaxScale(); + // if we have non-unity scale, we need to choose our base text size + // based on the SkPaint's text size multiplied by the max scale factor + // TODO: do we need to do this if we're scaling down (i.e. maxScale < 1)? + if (maxScale > 0 && !SkScalarNearlyEqual(maxScale, SK_Scalar1)) { + scaledTextSize *= maxScale; + } + } + + return scaledTextSize; +} + +SkFont GrSDFTOptions::getSDFFont(const SkFont& font, + const SkMatrix& viewMatrix, + SkScalar* textRatio) const { + SkScalar textSize = font.getSize(); + SkScalar scaledTextSize = scaled_text_size(textSize, viewMatrix); + + SkFont dfFont{font}; + + if (scaledTextSize <= kSmallDFFontLimit) { + *textRatio = textSize / kSmallDFFontSize; + dfFont.setSize(SkIntToScalar(kSmallDFFontSize)); + } else if (scaledTextSize <= kMediumDFFontLimit) { + *textRatio = textSize / kMediumDFFontSize; + dfFont.setSize(SkIntToScalar(kMediumDFFontSize)); +#ifdef SK_BUILD_FOR_MAC + } else if (scaledTextSize <= kLargeDFFontLimit) { + *textRatio = textSize / kLargeDFFontSize; + dfFont.setSize(SkIntToScalar(kLargeDFFontSize)); + } else { + *textRatio = textSize / kExtraLargeDFFontSize; + dfFont.setSize(SkIntToScalar(kExtraLargeDFFontSize)); + } +#else + } else { + *textRatio = textSize / kLargeDFFontSize; + dfFont.setSize(SkIntToScalar(kLargeDFFontSize)); + } +#endif + + dfFont.setEdging(SkFont::Edging::kAntiAlias); + dfFont.setForceAutoHinting(false); + dfFont.setHinting(SkFontHinting::kNormal); + + // The sub-pixel position will always happen when transforming to the screen. + dfFont.setSubpixel(false); + return dfFont; +} + +std::pair GrSDFTOptions::computeSDFMinMaxScale( + SkScalar textSize, const SkMatrix& viewMatrix) const { + + SkScalar scaledTextSize = scaled_text_size(textSize, viewMatrix); + + // We have three sizes of distance field text, and within each size 'bucket' there is a floor + // and ceiling. A scale outside of this range would require regenerating the distance fields + SkScalar dfMaskScaleFloor; + SkScalar dfMaskScaleCeil; + if (scaledTextSize <= kSmallDFFontLimit) { + dfMaskScaleFloor = fMinDistanceFieldFontSize; + dfMaskScaleCeil = kSmallDFFontLimit; + } else if (scaledTextSize <= kMediumDFFontLimit) { + dfMaskScaleFloor = kSmallDFFontLimit; + dfMaskScaleCeil = kMediumDFFontLimit; + } else { + dfMaskScaleFloor = kMediumDFFontLimit; + dfMaskScaleCeil = fMaxDistanceFieldFontSize; + } + + // Because there can be multiple runs in the blob, we want the overall maxMinScale, and + // minMaxScale to make regeneration decisions. Specifically, we want the maximum minimum scale + // we can tolerate before we'd drop to a lower mip size, and the minimum maximum scale we can + // tolerate before we'd have to move to a large mip size. When we actually test these values + // we look at the delta in scale between the new viewmatrix and the old viewmatrix, and test + // against these values to decide if we can reuse or not(ie, will a given scale change our mip + // level) + SkASSERT(dfMaskScaleFloor <= scaledTextSize && scaledTextSize <= dfMaskScaleCeil); + + return std::make_pair(dfMaskScaleFloor / scaledTextSize, dfMaskScaleCeil / scaledTextSize); +} + + diff --git a/src/gpu/text/GrSDFTOptions.h b/src/gpu/text/GrSDFTOptions.h new file mode 100644 index 0000000000000..33e7b6bd2dbcc --- /dev/null +++ b/src/gpu/text/GrSDFTOptions.h @@ -0,0 +1,38 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef GrSDFTOptions_DEFINED +#define GrSDFTOptions_DEFINED + +#include "include/core/SkFont.h" +#include "include/core/SkScalar.h" + +class SkMatrix; +class SkSurfaceProps; + +class GrSDFTOptions { +public: + GrSDFTOptions(SkScalar min, SkScalar max); + + bool canDrawAsDistanceFields(const SkPaint&, const SkFont&, const SkMatrix& viewMatrix, + const SkSurfaceProps& props, + bool contextSupportsDistanceFieldText) const; + SkFont getSDFFont(const SkFont& font, + const SkMatrix& viewMatrix, + SkScalar* textRatio) const; + std::pair computeSDFMinMaxScale( + SkScalar textSize, const SkMatrix& viewMatrix) const; +private: + // Below this size (in device space) distance field text will not be used. + const SkScalar fMinDistanceFieldFontSize; + + // Above this size (in device space) distance field text will not be used and glyphs will + // be rendered from outline as individual paths. + const SkScalar fMaxDistanceFieldFontSize; +}; + +#endif // GrSDFTOptions_DEFINED diff --git a/src/gpu/text/GrTextBlob.cpp b/src/gpu/text/GrTextBlob.cpp index 38f0a7ca0ccaa..676c072a082db 100644 --- a/src/gpu/text/GrTextBlob.cpp +++ b/src/gpu/text/GrTextBlob.cpp @@ -8,9 +8,8 @@ #include "include/core/SkColorFilter.h" #include "include/gpu/GrContext.h" #include "include/private/SkTemplates.h" -#include "src/codec/SkMasks.h" -#include "src/core/SkAutoMalloc.h" #include "src/core/SkMaskFilterBase.h" +#include "src/core/SkMatrixPriv.h" #include "src/core/SkMatrixProvider.h" #include "src/core/SkPaintPriv.h" #include "src/core/SkStrikeSpec.h" @@ -263,30 +262,6 @@ void GrTextBlob::SubRun::fillVertexData( } } -// Note: this method is only used with SkAtlasTextTarget. The SkAtlasTextTarget only uses SDF, -// and does the rectangle transforms on the GPU. For the normal text execution path see -// fillVertexData. -void GrTextBlob::SubRun::fillTextTargetVertexData( - Mask3DVertex vertexDst[][4], int offset, int count, GrColor color, SkPoint origin) const { - SkScalar strikeToSource = fStrikeSpec.strikeToSourceRatio(); - SkPoint inset = {SK_DistanceFieldInset, SK_DistanceFieldInset}; - for (auto[dst, vertexData] : SkMakeZip(vertexDst, fVertexData.subspan(offset, count))) { - auto[glyph, pos, rect] = vertexData; - auto [l, t, r, b] = rect; - SkPoint sLT = (SkPoint::Make(l, t) + inset) * strikeToSource + pos + origin, - sRB = (SkPoint::Make(r, b) - inset) * strikeToSource + pos + origin; - SkPoint3 lt = SkPoint3{sLT.x(), sLT.y(), 1.f}, - lb = SkPoint3{sLT.x(), sRB.y(), 1.f}, - rt = SkPoint3{sRB.x(), sLT.y(), 1.f}, - rb = SkPoint3{sRB.x(), sRB.y(), 1.f}; - auto[al, at, ar, ab] = glyph.grGlyph->fAtlasLocator.getUVs(SK_DistanceFieldInset); - dst[0] = {lt, color, {al, at}}; // L,T - dst[1] = {lb, color, {al, ab}}; // L,B - dst[2] = {rt, color, {ar, at}}; // R,T - dst[3] = {rb, color, {ar, ab}}; // R,B - } -} - int GrTextBlob::SubRun::glyphCount() const { return fVertexData.count(); } @@ -314,9 +289,7 @@ auto GrTextBlob::SubRun::vertexData() const -> SkSpan { } bool GrTextBlob::SubRun::hasW() const { - if (fType == kTransformedSDFT) { - return fBlob->hasPerspective() || fBlob->forceWForDistanceFields(); - } else if (fType == kTransformedMask || fType == kTransformedPath) { + if (fType == kTransformedSDFT || fType == kTransformedMask || fType == kTransformedPath) { return fBlob->hasPerspective(); } @@ -412,7 +385,6 @@ auto GrTextBlob::SubRun::MakeTransformedMask( void GrTextBlob::SubRun::insertSubRunOpsIntoTarget(GrTextTarget* target, const SkSurfaceProps& props, const SkPaint& paint, - const SkPMColor4f& filteredColor, const GrClip* clip, const SkMatrixProvider& deviceMatrix, SkPoint drawOrigin) { @@ -470,65 +442,82 @@ void GrTextBlob::SubRun::insertSubRunOpsIntoTarget(GrTextTarget* target, bool skipClip = false; SkIRect clipRect = SkIRect::MakeEmpty(); SkRect rtBounds = SkRect::MakeWH(target->width(), target->height()); - SkRRect clipRRect = SkRRect::MakeRect(rtBounds); - GrAA aa; // We can clip geometrically if we're not using SDFs or transformed glyphs, // and we have an axis-aligned rectangular non-AA clip - if (!this->drawAsDistanceFields() && - !this->needsTransform() && - (!clip || (clip->isRRect(rtBounds, &clipRRect, &aa) && - clipRRect.isRect() && GrAA::kNo == aa))) { + if (!this->drawAsDistanceFields() && !this->needsTransform()) { // We only need to do clipping work if the subrun isn't contained by the clip + skipClip = true; SkRect subRunBounds = this->deviceRect(deviceMatrix.localToDevice(), drawOrigin); - if (!clipRRect.getBounds().contains(subRunBounds)) { + if (!clip && !rtBounds.intersects(subRunBounds)) { // If the subrun is completely outside, don't add an op for it - if (!clipRRect.getBounds().intersects(subRunBounds)) { + return; + } else if (clip) { + GrClip::PreClipResult result = clip->preApply(subRunBounds); + if (result.fEffect == GrClip::Effect::kClipped) { + if (result.fIsRRect && result.fRRect.isRect() && result.fAA == GrAA::kNo) { + // Embed non-AA axis-aligned clip into the draw + result.fRRect.getBounds().round(&clipRect); + } else { + // Can't actually skip the regular clipping + skipClip = false; + } + } else if (result.fEffect == GrClip::Effect::kClippedOut) { return; - } else { - clipRRect.getBounds().round(&clipRect); } } - skipClip = true; } - auto op = this->makeOp(deviceMatrix, drawOrigin, clipRect, - paint, filteredColor, props, target); + auto op = this->makeOp(deviceMatrix, drawOrigin, clipRect, paint, props, target); if (op != nullptr) { target->addDrawOp(skipClip ? nullptr : clip, std::move(op)); } } } +SkPMColor4f generate_filtered_color(const SkPaint& paint, const GrColorInfo& colorInfo) { + SkColor4f c = paint.getColor4f(); + if (auto* xform = colorInfo.colorSpaceXformFromSRGB()) { + c = xform->apply(c); + } + if (auto* cf = paint.getColorFilter()) { + c = cf->filterColor4f(c, colorInfo.colorSpace(), colorInfo.colorSpace()); + } + return c.premul(); +} -std::unique_ptr GrTextBlob::SubRun::makeOp(const SkMatrixProvider& matrixProvider, - SkPoint drawOrigin, - const SkIRect& clipRect, - const SkPaint& paint, - const SkPMColor4f& filteredColor, - const SkSurfaceProps& props, - GrTextTarget* target) { +std::unique_ptr GrTextBlob::SubRun::makeOp( + const SkMatrixProvider& matrixProvider, + SkPoint drawOrigin, + const SkIRect& clipRect, + const SkPaint& paint, + const SkSurfaceProps& props, + GrTextTarget* target) { GrPaint grPaint; target->makeGrPaint(this->maskFormat(), paint, matrixProvider, &grPaint); + const GrColorInfo& colorInfo = target->colorInfo(); + // This is the color the op will use to draw. + SkPMColor4f drawingColor = generate_filtered_color(paint, colorInfo); + if (this->drawAsDistanceFields()) { // TODO: Can we be even smarter based on the dest transfer function? - return GrAtlasTextOp::MakeDistanceField(target->getContext(), + return GrAtlasTextOp::MakeDistanceField(target->renderTargetContext(), std::move(grPaint), this, matrixProvider.localToDevice(), drawOrigin, clipRect, - filteredColor, + drawingColor, target->colorInfo().isLinearlyBlended(), SkPaintPriv::ComputeLuminanceColor(paint), props); } else { - return GrAtlasTextOp::MakeBitmap(target->getContext(), + return GrAtlasTextOp::MakeBitmap(target->renderTargetContext(), std::move(grPaint), this, matrixProvider.localToDevice(), drawOrigin, clipRect, - filteredColor); + drawingColor); } } @@ -550,7 +539,8 @@ auto GrTextBlob::SubRun::InitForAtlas(SubRunType type, int16_t b = t + skGlyph->height(); SkPoint lt = SkPoint::Make(l, t) * strikeToSource + pos, rb = SkPoint::Make(r, b) * strikeToSource + pos; - bounds.joinNonEmptyArg(SkRect::MakeLTRB(lt.x(), lt.y(), rb.x(), rb.y())); + + bounds.joinPossiblyEmptyRect(SkRect::MakeLTRB(lt.x(), lt.y(), rb.x(), rb.y())); return Data{{skGlyph->getPackedID()}, pos, {l, t, r, b}}; }; @@ -570,10 +560,7 @@ void* GrTextBlob::operator new(size_t, void* p) { return p; } GrTextBlob::~GrTextBlob() = default; -sk_sp GrTextBlob::Make(const SkGlyphRunList& glyphRunList, - const SkMatrix& drawMatrix, - GrColor color, - bool forceWForDistanceFields) { +sk_sp GrTextBlob::Make(const SkGlyphRunList& glyphRunList, const SkMatrix& drawMatrix) { // The difference in alignment from the storage of VertexData to SubRun; constexpr size_t alignDiff = alignof(SubRun) - alignof(SubRun::VertexData); constexpr size_t vertexDataToSubRunPadding = alignDiff > 0 ? alignDiff : 0; @@ -586,8 +573,7 @@ sk_sp GrTextBlob::Make(const SkGlyphRunList& glyphRunList, SkColor initialLuminance = SkPaintPriv::ComputeLuminanceColor(glyphRunList.paint()); sk_sp blob{new (allocation) GrTextBlob{ - arenaSize, drawMatrix, glyphRunList.origin(), - color, initialLuminance, forceWForDistanceFields}}; + arenaSize, drawMatrix, glyphRunList.origin(), initialLuminance}}; return blob; } @@ -621,30 +607,31 @@ void GrTextBlob::setMinAndMaxScale(SkScalar scaledMin, SkScalar scaledMax) { fMinMaxScale = std::min(scaledMax, fMinMaxScale); } -bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosition, - const SkMaskFilterBase::BlurRec& blurRec, - const SkMatrix& drawMatrix, SkPoint drawOrigin) { +bool GrTextBlob::canReuse(const SkPaint& paint, + const SkMaskFilterBase::BlurRec& blurRec, + const SkMatrix& drawMatrix, + SkPoint drawOrigin) { // If we have LCD text then our canonical color will be set to transparent, in this case we have // to regenerate the blob on any color change // We use the grPaint to get any color filter effects if (fKey.fCanonicalColor == SK_ColorTRANSPARENT && fInitialLuminance != SkPaintPriv::ComputeLuminanceColor(paint)) { - return true; + return false; } if (fInitialMatrix.hasPerspective() != drawMatrix.hasPerspective()) { - return true; + return false; } /** This could be relaxed for blobs with only distance field glyphs. */ if (fInitialMatrix.hasPerspective() && !SkMatrixPriv::CheapEqual(fInitialMatrix, drawMatrix)) { - return true; + return false; } // We only cache one masked version if (fKey.fHasBlur && (fBlurRec.fSigma != blurRec.fSigma || fBlurRec.fStyle != blurRec.fStyle)) { - return true; + return false; } // Similarly, we only cache one version for each style @@ -652,15 +639,14 @@ bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosi (fStrokeInfo.fFrameWidth != paint.getStrokeWidth() || fStrokeInfo.fMiterLimit != paint.getStrokeMiter() || fStrokeInfo.fJoin != paint.getStrokeJoin())) { - return true; + return false; } // Mixed blobs must be regenerated. We could probably figure out a way to do integer scrolls // for mixed blobs if this becomes an issue. if (this->hasBitmap() && this->hasDistanceField()) { // Identical view matrices and we can reuse in all cases - return !(SkMatrixPriv::CheapEqual(fInitialMatrix, drawMatrix) && - drawOrigin == fInitialOrigin); + return SkMatrixPriv::CheapEqual(fInitialMatrix, drawMatrix) && drawOrigin == fInitialOrigin; } if (this->hasBitmap()) { @@ -668,7 +654,7 @@ bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosi fInitialMatrix.getScaleY() != drawMatrix.getScaleY() || fInitialMatrix.getSkewX() != drawMatrix.getSkewX() || fInitialMatrix.getSkewY() != drawMatrix.getSkewY()) { - return true; + return false; } // TODO(herb): this is not needed for full pixel glyph choice, but is needed to adjust @@ -690,7 +676,7 @@ bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosi SkPoint translation = drawDeviceOrigin - initialDeviceOrigin; if (!SkScalarIsInt(translation.x()) || !SkScalarIsInt(translation.y())) { - return true; + return false; } } else if (this->hasDistanceField()) { // A scale outside of [blob.fMaxMinScale, blob.fMinMaxScale] would result in a different @@ -699,26 +685,22 @@ bool GrTextBlob::mustRegenerate(const SkPaint& paint, bool anyRunHasSubpixelPosi SkScalar oldMaxScale = fInitialMatrix.getMaxScale(); SkScalar scaleAdjust = newMaxScale / oldMaxScale; if (scaleAdjust < fMaxMinScale || scaleAdjust > fMinMaxScale) { - return true; + return false; } } - // It is possible that a blob has neither distanceField nor bitmaptext. This is in the case - // when all of the runs inside the blob are drawn as paths. In this case, we always regenerate - // the blob anyways at flush time, so no need to regenerate explicitly - return false; + // If the blob is all paths, there is no reason to regenerate. + return true; } void GrTextBlob::insertOpsIntoTarget(GrTextTarget* target, const SkSurfaceProps& props, const SkPaint& paint, - const SkPMColor4f& filteredColor, const GrClip* clip, const SkMatrixProvider& deviceMatrix, SkPoint drawOrigin) { for (SubRun* subRun = fFirstSubRun; subRun != nullptr; subRun = subRun->fNextSubRun) { - subRun->insertSubRunOpsIntoTarget(target, props, paint, filteredColor, clip, deviceMatrix, - drawOrigin); + subRun->insertSubRunOpsIntoTarget(target, props, paint, clip, deviceMatrix, drawOrigin); } } @@ -756,14 +738,10 @@ void GrTextBlob::addMultiMaskFormat( GrTextBlob::GrTextBlob(size_t allocSize, const SkMatrix& drawMatrix, SkPoint origin, - GrColor color, - SkColor initialLuminance, - bool forceWForDistanceFields) + SkColor initialLuminance) : fSize{allocSize} , fInitialMatrix{drawMatrix} , fInitialOrigin{origin} - , fForceWForDistanceFields{forceWForDistanceFields} - , fColor{color} , fInitialLuminance{initialLuminance} , fAlloc{SkTAddOffset(this, sizeof(GrTextBlob)), allocSize, allocSize/2} { } @@ -809,158 +787,6 @@ void GrTextBlob::processSourceMasks(const SkZip& drawab auto GrTextBlob::firstSubRun() const -> SubRun* { return fFirstSubRun; } -bool GrTextBlob::forceWForDistanceFields() const { return fForceWForDistanceFields; } - -// -- Adding a mask to an atlas ---------------------------------------------------------------- - -// expands each bit in a bitmask to 0 or ~0 of type INT_TYPE. Used to expand a BW glyph mask to -// A8, RGB565, or RGBA8888. -template -static void expand_bits(INT_TYPE* dst, - const uint8_t* src, - int width, - int height, - int dstRowBytes, - int srcRowBytes) { - for (int i = 0; i < height; ++i) { - int rowWritesLeft = width; - const uint8_t* s = src; - INT_TYPE* d = dst; - while (rowWritesLeft > 0) { - unsigned mask = *s++; - for (int i = 7; i >= 0 && rowWritesLeft; --i, --rowWritesLeft) { - *d++ = (mask & (1 << i)) ? (INT_TYPE)(~0UL) : 0; - } - } - dst = reinterpret_cast(reinterpret_cast(dst) + dstRowBytes); - src += srcRowBytes; - } -} - -static void get_packed_glyph_image( - const SkGlyph& glyph, int dstRB, GrMaskFormat expectedMaskFormat, void* dst) { - const int width = glyph.width(); - const int height = glyph.height(); - const void* src = glyph.image(); - SkASSERT(src != nullptr); - - GrMaskFormat grMaskFormat = GrGlyph::FormatFromSkGlyph(glyph.maskFormat()); - if (grMaskFormat == expectedMaskFormat) { - int srcRB = glyph.rowBytes(); - // Notice this comparison is with the glyphs raw mask format, and not its GrMaskFormat. - if (glyph.maskFormat() != SkMask::kBW_Format) { - if (srcRB != dstRB) { - const int bbp = GrMaskFormatBytesPerPixel(expectedMaskFormat); - for (int y = 0; y < height; y++) { - memcpy(dst, src, width * bbp); - src = (const char*) src + srcRB; - dst = (char*) dst + dstRB; - } - } else { - memcpy(dst, src, dstRB * height); - } - } else { - // Handle 8-bit format by expanding the mask to the expected format. - const uint8_t* bits = reinterpret_cast(src); - switch (expectedMaskFormat) { - case kA8_GrMaskFormat: { - uint8_t* bytes = reinterpret_cast(dst); - expand_bits(bytes, bits, width, height, dstRB, srcRB); - break; - } - case kA565_GrMaskFormat: { - uint16_t* rgb565 = reinterpret_cast(dst); - expand_bits(rgb565, bits, width, height, dstRB, srcRB); - break; - } - default: - SK_ABORT("Invalid GrMaskFormat"); - } - } - } else if (grMaskFormat == kA565_GrMaskFormat && expectedMaskFormat == kARGB_GrMaskFormat) { - // Convert if the glyph uses a 565 mask format since it is using LCD text rendering - // but the expected format is 8888 (will happen on macOS with Metal since that - // combination does not support 565). - static constexpr SkMasks masks{ - {0b1111'1000'0000'0000, 11, 5}, // Red - {0b0000'0111'1110'0000, 5, 6}, // Green - {0b0000'0000'0001'1111, 0, 5}, // Blue - {0, 0, 0} // Alpha - }; - const int a565Bpp = GrMaskFormatBytesPerPixel(kA565_GrMaskFormat); - const int argbBpp = GrMaskFormatBytesPerPixel(kARGB_GrMaskFormat); - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - uint16_t color565 = 0; - memcpy(&color565, src, a565Bpp); - uint32_t colorRGBA = GrColorPackRGBA(masks.getRed(color565), - masks.getGreen(color565), - masks.getBlue(color565), - 0xFF); - memcpy(dst, &colorRGBA, argbBpp); - src = (char*)src + a565Bpp; - dst = (char*)dst + argbBpp; - } - } - } else { - // crbug:510931 - // Retrieving the image from the cache can actually change the mask format. This case is - // very uncommon so for now we just draw a clear box for these glyphs. - const int bpp = GrMaskFormatBytesPerPixel(expectedMaskFormat); - for (int y = 0; y < height; y++) { - sk_bzero(dst, width * bpp); - dst = (char*)dst + dstRB; - } - } -} -using VR = GrTextBlob::VertexRegenerator; -// returns true if glyph successfully added to texture atlas, false otherwise. If the glyph's -// mask format has changed, then add_glyph_to_atlas will draw a clear box. This will almost never -// happen. -// TODO we can handle some of these cases if we really want to, but the long term solution is to -// get the actual glyph image itself when we get the glyph metrics. -GrDrawOpAtlas::ErrorCode VR::addGlyphToAtlas( - const SkGlyph& skGlyph, GrGlyph* grGlyph, int padding) { - if (skGlyph.image() == nullptr) { - return GrDrawOpAtlas::ErrorCode::kError; - } - SkASSERT(grGlyph != nullptr); - - GrMaskFormat glyphFormat = GrGlyph::FormatFromSkGlyph(skGlyph.maskFormat()); - GrMaskFormat expectedMaskFormat = fFullAtlasManager->resolveMaskFormat(glyphFormat); - int bytesPerPixel = GrMaskFormatBytesPerPixel(expectedMaskFormat); - - if (padding > 0) { - SkASSERT(skGlyph.maskFormat() != SkMask::kSDF_Format); - } - - SkASSERT(padding == 0 || padding == 1); - // Add 1 pixel padding around grGlyph if needed. - const int width = skGlyph.width() + 2*padding; - const int height = skGlyph.height() + 2*padding; - int rowBytes = width * bytesPerPixel; - size_t size = height * rowBytes; - - // Temporary storage for normalizing grGlyph image. - SkAutoSMalloc<1024> storage(size); - void* dataPtr = storage.get(); - if (padding > 0) { - sk_bzero(dataPtr, size); - // Advance in one row and one column. - dataPtr = (char*)(dataPtr) + rowBytes + bytesPerPixel; - } - - get_packed_glyph_image(skGlyph, rowBytes, expectedMaskFormat, dataPtr); - - return fFullAtlasManager->addToAtlas(fResourceProvider, - fUploadTarget, - expectedMaskFormat, - width, - height, - storage.get(), - &grGlyph->fAtlasLocator); -} - // -- GrTextBlob::VertexRegenerator ---------------------------------------------------------------- GrTextBlob::VertexRegenerator::VertexRegenerator(GrResourceProvider* resourceProvider, GrTextBlob::SubRun* subRun, @@ -988,7 +814,8 @@ std::tuple GrTextBlob::VertexRegenerator::updateTextureCoordinates( if (!fFullAtlasManager->hasGlyph(fSubRun->maskFormat(), grGlyph)) { const SkGlyph& skGlyph = *metricsAndImages.glyph(grGlyph->fPackedID); - auto code = this->addGlyphToAtlas(skGlyph, grGlyph, fSubRun->atlasPadding()); + auto code = fFullAtlasManager->addGlyphToAtlas( + skGlyph, fSubRun->atlasPadding(), grGlyph, fResourceProvider, fUploadTarget); if (code != GrDrawOpAtlas::ErrorCode::kSucceeded) { return {code != GrDrawOpAtlas::ErrorCode::kError, glyphsPlacedInAtlas}; } diff --git a/src/gpu/text/GrTextBlob.h b/src/gpu/text/GrTextBlob.h index 2fb37ac86608d..ab04255c2dacc 100644 --- a/src/gpu/text/GrTextBlob.h +++ b/src/gpu/text/GrTextBlob.h @@ -27,7 +27,7 @@ class GrAtlasTextOp; class GrDeferredUploadTarget; class GrGlyph; class GrStrikeCache; -class GrTextContext; +class GrTextTarget; class SkMatrixProvider; class SkSurfaceProps; @@ -98,9 +98,7 @@ class GrTextBlob final : public SkNVRefCnt, public SkGlyphRunPainter // Make an empty GrTextBlob, with all the invariants set to make the right decisions when // adding SubRuns. static sk_sp Make(const SkGlyphRunList& glyphRunList, - const SkMatrix& drawMatrix, - GrColor color, - bool forceWForDistanceFields); + const SkMatrix& drawMatrix); // Key manipulation functions void setupKey(const GrTextBlob::Key& key, @@ -117,46 +115,16 @@ class GrTextBlob final : public SkNVRefCnt, public SkGlyphRunPainter void setHasBitmap(); void setMinAndMaxScale(SkScalar scaledMin, SkScalar scaledMax); - bool mustRegenerate(const SkPaint&, bool, const SkMaskFilterBase::BlurRec& blurRec, - const SkMatrix& drawMatrix, SkPoint drawOrigin); + bool canReuse(const SkPaint& paint, const SkMaskFilterBase::BlurRec& blurRec, + const SkMatrix& drawMatrix, SkPoint drawOrigin); void insertOpsIntoTarget(GrTextTarget* target, const SkSurfaceProps& props, const SkPaint& paint, - const SkPMColor4f& filteredColor, const GrClip* clip, const SkMatrixProvider& deviceMatrix, SkPoint drawOrigin); - struct AtlasPt { - uint16_t u; - uint16_t v; - }; - - // Normal text mask, SDFT, or color. - struct Mask2DVertex { - SkPoint devicePos; - GrColor color; - AtlasPt atlasPos; - }; - struct ARGB2DVertex { - ARGB2DVertex(SkPoint d, GrColor, AtlasPt a) : devicePos{d}, atlasPos{a} {} - SkPoint devicePos; - AtlasPt atlasPos; - }; - - // Perspective SDFT or SDFT forced to 3D or perspective color. - struct Mask3DVertex { - SkPoint3 devicePos; - GrColor color; - AtlasPt atlasPos; - }; - struct ARGB3DVertex { - ARGB3DVertex(SkPoint3 d, GrColor, AtlasPt a) : devicePos{d}, atlasPos{a} {} - SkPoint3 devicePos; - AtlasPt atlasPos; - }; - static const int kVerticesPerGlyph = 4; const Key& key() const; @@ -187,9 +155,7 @@ class GrTextBlob final : public SkNVRefCnt, public SkGlyphRunPainter GrTextBlob(size_t allocSize, const SkMatrix& drawMatrix, SkPoint origin, - GrColor color, - SkColor initialLuminance, - bool forceWForDistanceFields); + SkColor initialLuminance); void insertSubRun(SubRun* subRun); @@ -220,11 +186,6 @@ class GrTextBlob final : public SkNVRefCnt, public SkGlyphRunPainter // blob. const SkPoint fInitialOrigin; - // From the distance field options to force distance fields to have a W coordinate. - const bool fForceWForDistanceFields; - - // The color of the text to draw for solid colors. - const GrColor fColor; const SkColor fInitialLuminance; SkMaskFilterBase::BlurRec fBlurRec; @@ -269,8 +230,6 @@ class GrTextBlob::VertexRegenerator { // Return {success, number of glyphs regenerated} std::tuple updateTextureCoordinates(int begin, int end); - GrDrawOpAtlas::ErrorCode addGlyphToAtlas(const SkGlyph& skGlyph, GrGlyph* grGlyph, int padding); - GrResourceProvider* fResourceProvider; GrDeferredUploadTarget* fUploadTarget; GrAtlasManager* fFullAtlasManager; @@ -325,13 +284,6 @@ class GrTextBlob::SubRun { GrColor color, const SkMatrix& drawMatrix, SkPoint drawOrigin, SkIRect clip) const; - void fillTextTargetVertexData( - Mask3DVertex vertexDst[][4], - int offset, - int count, - GrColor color, - SkPoint origin) const; - int glyphCount() const; bool drawAsDistanceFields() const; @@ -381,7 +333,6 @@ class GrTextBlob::SubRun { void insertSubRunOpsIntoTarget(GrTextTarget* target, const SkSurfaceProps& props, const SkPaint& paint, - const SkPMColor4f& filteredColor, const GrClip* clip, const SkMatrixProvider& deviceMatrix, SkPoint drawOrigin); @@ -390,7 +341,6 @@ class GrTextBlob::SubRun { SkPoint drawOrigin, const SkIRect& clipRect, const SkPaint& paint, - const SkPMColor4f& filteredColor, const SkSurfaceProps&, GrTextTarget*); @@ -399,6 +349,35 @@ class GrTextBlob::SubRun { uint64_t fAtlasGeneration{GrDrawOpAtlas::kInvalidAtlasGeneration}; private: + struct AtlasPt { + uint16_t u; + uint16_t v; + }; + + // Normal text mask, SDFT, or color. + struct Mask2DVertex { + SkPoint devicePos; + GrColor color; + AtlasPt atlasPos; + }; + struct ARGB2DVertex { + ARGB2DVertex(SkPoint d, GrColor, AtlasPt a) : devicePos{d}, atlasPos{a} {} + SkPoint devicePos; + AtlasPt atlasPos; + }; + + // Perspective SDFT or SDFT forced to 3D or perspective color. + struct Mask3DVertex { + SkPoint3 devicePos; + GrColor color; + AtlasPt atlasPos; + }; + struct ARGB3DVertex { + ARGB3DVertex(SkPoint3 d, GrColor, AtlasPt a) : devicePos{d}, atlasPos{a} {} + SkPoint3 devicePos; + AtlasPt atlasPos; + }; + static SubRun* InitForAtlas(SubRunType type, const SkZip& drawables, const SkStrikeSpec& strikeSpec, diff --git a/src/gpu/text/GrTextBlobCache.cpp b/src/gpu/text/GrTextBlobCache.cpp index b6be2f985f8ff..988ef81c7cc43 100644 --- a/src/gpu/text/GrTextBlobCache.cpp +++ b/src/gpu/text/GrTextBlobCache.cpp @@ -15,33 +15,35 @@ static inline bool SkShouldPostMessageToBus( return msg.fContextID == msgBusUniqueID; } -GrTextBlobCache::GrTextBlobCache(PurgeMore purgeMore, uint32_t messageBusID) - : fPurgeMore(purgeMore) - , fSizeBudget(kDefaultBudget) +GrTextBlobCache::GrTextBlobCache(uint32_t messageBusID) + : fSizeBudget(kDefaultBudget) , fMessageBusID(messageBusID) , fPurgeBlobInbox(messageBusID) { } -GrTextBlobCache::~GrTextBlobCache() { - this->freeAll(); -} - sk_sp GrTextBlobCache::makeCachedBlob(const SkGlyphRunList& glyphRunList, const GrTextBlob::Key& key, const SkMaskFilterBase::BlurRec& blurRec, - const SkMatrix& viewMatrix, GrColor color, bool forceW) { - sk_sp cacheBlob(GrTextBlob::Make(glyphRunList, viewMatrix, color, forceW)); + const SkMatrix& viewMatrix) { + sk_sp cacheBlob(GrTextBlob::Make(glyphRunList, viewMatrix)); cacheBlob->setupKey(key, blurRec, glyphRunList.paint()); - this->add(cacheBlob); + SkAutoMutexExclusive lock{fMutex}; + this->internalAdd(cacheBlob); glyphRunList.temporaryShuntBlobNotifyAddedToCache(fMessageBusID); return cacheBlob; } sk_sp GrTextBlobCache::find(const GrTextBlob::Key& key) const { + SkAutoMutexExclusive lock{fMutex}; const auto* idEntry = fBlobIDCache.find(key.fUniqueID); return idEntry ? idEntry->find(key) : nullptr; } void GrTextBlobCache::remove(GrTextBlob* blob) { + SkAutoMutexExclusive lock{fMutex}; + this->internalRemove(blob); +} + +void GrTextBlobCache::internalRemove(GrTextBlob* blob) { auto id = GrTextBlob::GetKey(*blob).fUniqueID; auto* idEntry = fBlobIDCache.find(id); SkASSERT(idEntry); @@ -55,6 +57,7 @@ void GrTextBlobCache::remove(GrTextBlob* blob) { } void GrTextBlobCache::makeMRU(GrTextBlob* blob) { + SkAutoMutexExclusive lock{fMutex}; if (fBlobList.head() == blob) { return; } @@ -64,23 +67,10 @@ void GrTextBlobCache::makeMRU(GrTextBlob* blob) { } void GrTextBlobCache::freeAll() { - fBlobIDCache.foreach([this](uint32_t, BlobIDCacheEntry* entry) { - for (const auto& blob : entry->fBlobs) { - fBlobList.remove(blob.get()); - } - }); - + SkAutoMutexExclusive lock{fMutex}; fBlobIDCache.reset(); - + fBlobList.reset(); fCurrentSize = 0; - - // There should be no allocations in the memory pool at this point - SkASSERT(fBlobList.isEmpty()); -} - -void GrTextBlobCache::setBudget(size_t budget) { - fSizeBudget = budget; - this->checkPurge(); } void GrTextBlobCache::PostPurgeBlobMessage(uint32_t blobID, uint32_t cacheID) { @@ -89,6 +79,11 @@ void GrTextBlobCache::PostPurgeBlobMessage(uint32_t blobID, uint32_t cacheID) { } void GrTextBlobCache::purgeStaleBlobs() { + SkAutoMutexExclusive lock{fMutex}; + this->internalPurgeStaleBlobs(); +} + +void GrTextBlobCache::internalPurgeStaleBlobs() { SkTArray msgs; fPurgeBlobInbox.poll(&msgs); @@ -110,9 +105,19 @@ void GrTextBlobCache::purgeStaleBlobs() { } } -void GrTextBlobCache::checkPurge(GrTextBlob* blob) { +size_t GrTextBlobCache::usedBytes() const { + SkAutoMutexExclusive lock{fMutex}; + return fCurrentSize; +} + +bool GrTextBlobCache::isOverBudget() const { + SkAutoMutexExclusive lock{fMutex}; + return fCurrentSize > fSizeBudget; +} + +void GrTextBlobCache::internalCheckPurge(GrTextBlob* blob) { // First, purge all stale blob IDs. - this->purgeStaleBlobs(); + this->internalPurgeStaleBlobs(); // If we are still over budget, then unref until we are below budget again if (fCurrentSize > fSizeBudget) { @@ -123,14 +128,7 @@ void GrTextBlobCache::checkPurge(GrTextBlob* blob) { // Backup the iterator before removing and unrefing the blob iter.prev(); - this->remove(lruBlob); - } - - // If we break out of the loop with lruBlob == blob, then we haven't purged enough - // use the call back and try to free some more. If we are still overbudget after this, - // then this single textblob is over our budget - if (blob && lruBlob == blob) { - fPurgeMore(); + this->internalRemove(lruBlob); } #ifdef SPEW_BUDGET_MESSAGE @@ -141,7 +139,7 @@ void GrTextBlobCache::checkPurge(GrTextBlob* blob) { } } -void GrTextBlobCache::add(sk_sp blob) { +void GrTextBlobCache::internalAdd(sk_sp blob) { auto id = GrTextBlob::GetKey(*blob).fUniqueID; auto* idEntry = fBlobIDCache.find(id); if (!idEntry) { @@ -154,7 +152,7 @@ void GrTextBlobCache::add(sk_sp blob) { fCurrentSize += blob->size(); idEntry->addBlob(std::move(blob)); - this->checkPurge(rawBlobPtr); + this->internalCheckPurge(rawBlobPtr); } GrTextBlobCache::BlobIDCacheEntry::BlobIDCacheEntry() : fID(SK_InvalidGenID) {} diff --git a/src/gpu/text/GrTextBlobCache.h b/src/gpu/text/GrTextBlobCache.h index c98ba3dcc3463..3b2588696d44c 100644 --- a/src/gpu/text/GrTextBlobCache.h +++ b/src/gpu/text/GrTextBlobCache.h @@ -9,6 +9,7 @@ #define GrTextBlobCache_DEFINED #include "include/core/SkRefCnt.h" +#include "include/private/SkMutex.h" #include "include/private/SkTArray.h" #include "include/private/SkTHash.h" #include "src/core/SkMessageBus.h" @@ -19,28 +20,20 @@ class GrTextBlobCache { public: - // The callback function used by the cache when it is still over budget after a purge. - using PurgeMore = std::function; - - GrTextBlobCache(PurgeMore purgeMore, uint32_t messageBusID); - ~GrTextBlobCache(); + GrTextBlobCache(uint32_t messageBusID); sk_sp makeCachedBlob(const SkGlyphRunList& glyphRunList, const GrTextBlob::Key& key, const SkMaskFilterBase::BlurRec& blurRec, - const SkMatrix& viewMatrix, - GrColor color, - bool forceW); - - sk_sp find(const GrTextBlob::Key& key) const; + const SkMatrix& viewMatrix) SK_EXCLUDES(fMutex); - void remove(GrTextBlob* blob); + sk_sp find(const GrTextBlob::Key& key) const SK_EXCLUDES(fMutex); - void makeMRU(GrTextBlob* blob); + void remove(GrTextBlob* blob) SK_EXCLUDES(fMutex); - void freeAll(); + void makeMRU(GrTextBlob* blob) SK_EXCLUDES(fMutex); - void setBudget(size_t budget); + void freeAll() SK_EXCLUDES(fMutex); struct PurgeBlobMessage { PurgeBlobMessage(uint32_t blobID, uint32_t contextUniqueID) @@ -52,11 +45,14 @@ class GrTextBlobCache { static void PostPurgeBlobMessage(uint32_t blobID, uint32_t cacheID); - void purgeStaleBlobs(); + void purgeStaleBlobs() SK_EXCLUDES(fMutex); - size_t usedBytes() const { return fCurrentSize; } + size_t usedBytes() const SK_EXCLUDES(fMutex); + + bool isOverBudget() const SK_EXCLUDES(fMutex); private: + friend class GrTextBlobTestingPeer; using TextBlobList = SkTInternalLList; struct BlobIDCacheEntry { @@ -79,21 +75,24 @@ class GrTextBlobCache { SkSTArray<1, sk_sp> fBlobs; }; - void add(sk_sp blob); + void internalPurgeStaleBlobs() SK_REQUIRES(fMutex); + + void internalAdd(sk_sp blob) SK_REQUIRES(fMutex); + void internalRemove(GrTextBlob* blob) SK_REQUIRES(fMutex); - void checkPurge(GrTextBlob* blob = nullptr); + void internalCheckPurge(GrTextBlob* blob = nullptr) SK_REQUIRES(fMutex); static const int kDefaultBudget = 1 << 22; - TextBlobList fBlobList; - SkTHashMap fBlobIDCache; - PurgeMore fPurgeMore; - size_t fSizeBudget; - size_t fCurrentSize{0}; + mutable SkMutex fMutex; + TextBlobList fBlobList SK_GUARDED_BY(fMutex); + SkTHashMap fBlobIDCache SK_GUARDED_BY(fMutex); + size_t fSizeBudget SK_GUARDED_BY(fMutex); + size_t fCurrentSize SK_GUARDED_BY(fMutex) {0}; // In practice 'messageBusID' is always the unique ID of the owning GrContext - uint32_t fMessageBusID; - SkMessageBus::Inbox fPurgeBlobInbox; + const uint32_t fMessageBusID; + SkMessageBus::Inbox fPurgeBlobInbox SK_GUARDED_BY(fMutex); }; #endif diff --git a/src/gpu/text/GrTextContext.cpp b/src/gpu/text/GrTextContext.cpp deleted file mode 100644 index 59a3d46179f3c..0000000000000 --- a/src/gpu/text/GrTextContext.cpp +++ /dev/null @@ -1,284 +0,0 @@ -/* - * Copyright 2015 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/gpu/text/GrTextContext.h" - -#include "include/core/SkGraphics.h" -#include "include/gpu/GrContext.h" -#include "include/private/SkTo.h" -#include "src/core/SkDistanceFieldGen.h" -#include "src/core/SkDraw.h" -#include "src/core/SkDrawProcs.h" -#include "src/core/SkGlyphRun.h" -#include "src/core/SkMaskFilterBase.h" -#include "src/core/SkPaintPriv.h" -#include "src/gpu/GrCaps.h" -#include "src/gpu/GrRecordingContextPriv.h" -#include "src/gpu/SkGr.h" -#include "src/gpu/ops/GrMeshDrawOp.h" -#include "src/gpu/text/GrSDFMaskFilter.h" -#include "src/gpu/text/GrTextBlobCache.h" - -// DF sizes and thresholds for usage of the small and medium sizes. For example, above -// kSmallDFFontLimit we will use the medium size. The large size is used up until the size at -// which we switch over to drawing as paths as controlled by Options. -static const int kSmallDFFontSize = 32; -static const int kSmallDFFontLimit = 32; -static const int kMediumDFFontSize = 72; -static const int kMediumDFFontLimit = 72; -static const int kLargeDFFontSize = 162; -#ifdef SK_BUILD_FOR_MAC -static const int kLargeDFFontLimit = 162; -static const int kExtraLargeDFFontSize = 256; -#endif - -static const int kDefaultMinDistanceFieldFontSize = 18; -#if defined(SK_BUILD_FOR_ANDROID) -static const int kDefaultMaxDistanceFieldFontSize = 384; -#elif defined(SK_BUILD_FOR_MAC) -static const int kDefaultMaxDistanceFieldFontSize = kExtraLargeDFFontSize; -#else -static const int kDefaultMaxDistanceFieldFontSize = 2 * kLargeDFFontSize; -#endif - -GrTextContext::GrTextContext(const Options& options) : fOptions(options) { - SanitizeOptions(&fOptions); -} - -std::unique_ptr GrTextContext::Make(const Options& options) { - return std::unique_ptr(new GrTextContext(options)); -} - -SkColor GrTextContext::ComputeCanonicalColor(const SkPaint& paint, bool lcd) { - SkColor canonicalColor = SkPaintPriv::ComputeLuminanceColor(paint); - if (lcd) { - // This is the correct computation, but there are tons of cases where LCD can be overridden. - // For now we just regenerate if any run in a textblob has LCD. - // TODO figure out where all of these overrides are and see if we can incorporate that logic - // at a higher level *OR* use sRGB - SkASSERT(false); - //canonicalColor = SkMaskGamma::CanonicalColor(canonicalColor); - } else { - // A8, though can have mixed BMP text but it shouldn't matter because BMP text won't have - // gamma corrected masks anyways, nor color - U8CPU lum = SkComputeLuminance(SkColorGetR(canonicalColor), - SkColorGetG(canonicalColor), - SkColorGetB(canonicalColor)); - // reduce to our finite number of bits - canonicalColor = SkMaskGamma::CanonicalColor(SkColorSetRGB(lum, lum, lum)); - } - return canonicalColor; -} - -SkScalerContextFlags GrTextContext::ComputeScalerContextFlags(const GrColorInfo& colorInfo) { - // If we're doing linear blending, then we can disable the gamma hacks. - // Otherwise, leave them on. In either case, we still want the contrast boost: - // TODO: Can we be even smarter about mask gamma based on the dest transfer function? - if (colorInfo.isLinearlyBlended()) { - return SkScalerContextFlags::kBoostContrast; - } else { - return SkScalerContextFlags::kFakeGammaAndBoostContrast; - } -} - -void GrTextContext::SanitizeOptions(Options* options) { - if (options->fMaxDistanceFieldFontSize < 0.f) { - options->fMaxDistanceFieldFontSize = kDefaultMaxDistanceFieldFontSize; - } - if (options->fMinDistanceFieldFontSize < 0.f) { - options->fMinDistanceFieldFontSize = kDefaultMinDistanceFieldFontSize; - } -} - -bool GrTextContext::CanDrawAsDistanceFields(const SkPaint& paint, const SkFont& font, - const SkMatrix& viewMatrix, - const SkSurfaceProps& props, - bool contextSupportsDistanceFieldText, - const Options& options) { - // mask filters modify alpha, which doesn't translate well to distance - if (paint.getMaskFilter() || !contextSupportsDistanceFieldText) { - return false; - } - - // TODO: add some stroking support - if (paint.getStyle() != SkPaint::kFill_Style) { - return false; - } - - if (viewMatrix.hasPerspective()) { - if (!options.fDistanceFieldVerticesAlwaysHaveW) { - return false; - } - } else { - SkScalar maxScale = viewMatrix.getMaxScale(); - SkScalar scaledTextSize = maxScale * font.getSize(); - // Hinted text looks far better at small resolutions - // Scaling up beyond 2x yields undesireable artifacts - if (scaledTextSize < options.fMinDistanceFieldFontSize || - scaledTextSize > options.fMaxDistanceFieldFontSize) { - return false; - } - - bool useDFT = props.isUseDeviceIndependentFonts(); -#if SK_FORCE_DISTANCE_FIELD_TEXT - useDFT = true; -#endif - - if (!useDFT && scaledTextSize < kLargeDFFontSize) { - return false; - } - } - - return true; -} - -SkScalar scaled_text_size(const SkScalar textSize, const SkMatrix& viewMatrix) { - SkScalar scaledTextSize = textSize; - - if (viewMatrix.hasPerspective()) { - // for perspective, we simply force to the medium size - // TODO: compute a size based on approximate screen area - scaledTextSize = kMediumDFFontLimit; - } else { - SkScalar maxScale = viewMatrix.getMaxScale(); - // if we have non-unity scale, we need to choose our base text size - // based on the SkPaint's text size multiplied by the max scale factor - // TODO: do we need to do this if we're scaling down (i.e. maxScale < 1)? - if (maxScale > 0 && !SkScalarNearlyEqual(maxScale, SK_Scalar1)) { - scaledTextSize *= maxScale; - } - } - - return scaledTextSize; -} - -SkFont GrTextContext::InitDistanceFieldFont(const SkFont& font, - const SkMatrix& viewMatrix, - const Options& options, - SkScalar* textRatio) { - SkScalar textSize = font.getSize(); - SkScalar scaledTextSize = scaled_text_size(textSize, viewMatrix); - - SkFont dfFont{font}; - - if (scaledTextSize <= kSmallDFFontLimit) { - *textRatio = textSize / kSmallDFFontSize; - dfFont.setSize(SkIntToScalar(kSmallDFFontSize)); - } else if (scaledTextSize <= kMediumDFFontLimit) { - *textRatio = textSize / kMediumDFFontSize; - dfFont.setSize(SkIntToScalar(kMediumDFFontSize)); -#ifdef SK_BUILD_FOR_MAC - } else if (scaledTextSize <= kLargeDFFontLimit) { - *textRatio = textSize / kLargeDFFontSize; - dfFont.setSize(SkIntToScalar(kLargeDFFontSize)); - } else { - *textRatio = textSize / kExtraLargeDFFontSize; - dfFont.setSize(SkIntToScalar(kExtraLargeDFFontSize)); - } -#else - } else { - *textRatio = textSize / kLargeDFFontSize; - dfFont.setSize(SkIntToScalar(kLargeDFFontSize)); - } -#endif - - dfFont.setEdging(SkFont::Edging::kAntiAlias); - dfFont.setForceAutoHinting(false); - dfFont.setHinting(SkFontHinting::kNormal); - - // The sub-pixel position will always happen when transforming to the screen. - dfFont.setSubpixel(false); - return dfFont; -} - -std::pair GrTextContext::InitDistanceFieldMinMaxScale( - SkScalar textSize, - const SkMatrix& viewMatrix, - const GrTextContext::Options& options) { - - SkScalar scaledTextSize = scaled_text_size(textSize, viewMatrix); - - // We have three sizes of distance field text, and within each size 'bucket' there is a floor - // and ceiling. A scale outside of this range would require regenerating the distance fields - SkScalar dfMaskScaleFloor; - SkScalar dfMaskScaleCeil; - if (scaledTextSize <= kSmallDFFontLimit) { - dfMaskScaleFloor = options.fMinDistanceFieldFontSize; - dfMaskScaleCeil = kSmallDFFontLimit; - } else if (scaledTextSize <= kMediumDFFontLimit) { - dfMaskScaleFloor = kSmallDFFontLimit; - dfMaskScaleCeil = kMediumDFFontLimit; - } else { - dfMaskScaleFloor = kMediumDFFontLimit; - dfMaskScaleCeil = options.fMaxDistanceFieldFontSize; - } - - // Because there can be multiple runs in the blob, we want the overall maxMinScale, and - // minMaxScale to make regeneration decisions. Specifically, we want the maximum minimum scale - // we can tolerate before we'd drop to a lower mip size, and the minimum maximum scale we can - // tolerate before we'd have to move to a large mip size. When we actually test these values - // we look at the delta in scale between the new viewmatrix and the old viewmatrix, and test - // against these values to decide if we can reuse or not(ie, will a given scale change our mip - // level) - SkASSERT(dfMaskScaleFloor <= scaledTextSize && scaledTextSize <= dfMaskScaleCeil); - - return std::make_pair(dfMaskScaleFloor / scaledTextSize, dfMaskScaleCeil / scaledTextSize); -} - -SkPaint GrTextContext::InitDistanceFieldPaint(const SkPaint& paint) { - SkPaint dfPaint{paint}; - dfPaint.setMaskFilter(GrSDFMaskFilter::Make()); - return dfPaint; -} - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -#if GR_TEST_UTILS - -#include "src/gpu/GrRenderTargetContext.h" - -GR_DRAW_OP_TEST_DEFINE(GrAtlasTextOp) { - static uint32_t gContextID = SK_InvalidGenID; - static std::unique_ptr gTextContext; - static SkSurfaceProps gSurfaceProps(SkSurfaceProps::kLegacyFontHost_InitType); - - if (context->priv().contextID() != gContextID) { - gContextID = context->priv().contextID(); - gTextContext = GrTextContext::Make(GrTextContext::Options()); - } - - // Setup dummy SkPaint / GrPaint / GrRenderTargetContext - auto rtc = GrRenderTargetContext::Make( - context, GrColorType::kRGBA_8888, nullptr, SkBackingFit::kApprox, {1024, 1024}); - - SkSimpleMatrixProvider matrixProvider(GrTest::TestMatrixInvertible(random)); - - SkPaint skPaint; - skPaint.setColor(random->nextU()); - - SkFont font; - if (random->nextBool()) { - font.setEdging(SkFont::Edging::kSubpixelAntiAlias); - } else { - font.setEdging(random->nextBool() ? SkFont::Edging::kAntiAlias : SkFont::Edging::kAlias); - } - font.setSubpixel(random->nextBool()); - - const char* text = "The quick brown fox jumps over the lazy dog."; - - // create some random x/y offsets, including negative offsets - static const int kMaxTrans = 1024; - int xPos = (random->nextU() % 2) * 2 - 1; - int yPos = (random->nextU() % 2) * 2 - 1; - int xInt = (random->nextU() % kMaxTrans) * xPos; - int yInt = (random->nextU() % kMaxTrans) * yPos; - - return gTextContext->createOp_TestingOnly(context, gTextContext.get(), rtc.get(), skPaint, font, - matrixProvider, text, xInt, yInt); -} - -#endif diff --git a/src/gpu/text/GrTextContext.h b/src/gpu/text/GrTextContext.h deleted file mode 100644 index d1e557381a659..0000000000000 --- a/src/gpu/text/GrTextContext.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2015 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef GrTextContext_DEFINED -#define GrTextContext_DEFINED - -#include "src/core/SkGlyphRun.h" -#include "src/gpu/GrGeometryProcessor.h" -#include "src/gpu/text/GrTextTarget.h" - -#if GR_TEST_UTILS -#include "src/gpu/GrDrawOpTest.h" -#endif - -class GrDrawOp; -class GrRecordingContext; -class GrRenderTargetContext; -class GrTextBlobCache; -class SkGlyph; -class GrTextBlob; - -/* - * Renders text using some kind of an atlas, ie BitmapText or DistanceField text - */ -class GrTextContext { -public: - struct Options { - /** - * Below this size (in device space) distance field text will not be used. Negative means - * use a default value. - */ - SkScalar fMinDistanceFieldFontSize = -1.f; - /** - * Above this size (in device space) distance field text will not be used and glyphs will - * be rendered from outline as individual paths. Negative means use a default value. - */ - SkScalar fMaxDistanceFieldFontSize = -1.f; - /** Forces all distance field vertices to use 3 components, not just when in perspective. */ - bool fDistanceFieldVerticesAlwaysHaveW = false; - }; - - static std::unique_ptr Make(const Options& options); - - void drawGlyphRunList(GrRecordingContext*, - GrTextTarget*, - const GrClip*, - const SkMatrixProvider&, - const SkSurfaceProps&, - const SkGlyphRunList&) const; - -#if GR_TEST_UTILS - std::unique_ptr createOp_TestingOnly(GrRecordingContext*, - GrTextContext*, - GrRenderTargetContext*, - const SkPaint&, - const SkFont&, - const SkMatrixProvider&, - const char* text, - int x, - int y); -#endif - - static void SanitizeOptions(Options* options); - static bool CanDrawAsDistanceFields(const SkPaint&, const SkFont&, const SkMatrix& viewMatrix, - const SkSurfaceProps& props, - bool contextSupportsDistanceFieldText, - const Options& options); - - static SkFont InitDistanceFieldFont(const SkFont& font, - const SkMatrix& viewMatrix, - const Options& options, - SkScalar* textRatio); - - static SkPaint InitDistanceFieldPaint(const SkPaint& paint); - - static std::pair InitDistanceFieldMinMaxScale(SkScalar textSize, - const SkMatrix& viewMatrix, - const Options& options); - -private: - GrTextContext(const Options& options); - - // sets up the descriptor on the blob and returns a detached cache. Client must attach - static SkColor ComputeCanonicalColor(const SkPaint&, bool lcd); - // Determines if we need to use fake gamma (and contrast boost): - static SkScalerContextFlags ComputeScalerContextFlags(const GrColorInfo&); - - Options fOptions; - -#if GR_TEST_UTILS - static const SkScalerContextFlags kTextBlobOpScalerContextFlags = - SkScalerContextFlags::kFakeGammaAndBoostContrast; - GR_DRAW_OP_TEST_FRIEND(GrAtlasTextOp); -#endif -}; - -#endif // GrTextContext_DEFINED diff --git a/src/gpu/text/GrTextTarget.h b/src/gpu/text/GrTextTarget.h index 7a834ccc5f679..10cc3e9fe7ecd 100644 --- a/src/gpu/text/GrTextTarget.h +++ b/src/gpu/text/GrTextTarget.h @@ -15,6 +15,7 @@ class GrAtlasTextOp; class GrClip; class GrPaint; class GrRecordingContext; +class GrRenderTargetContext; class GrStyledShape; class SkGlyphRunListPainter; class SkMatrix; @@ -45,6 +46,8 @@ class GrTextTarget { virtual GrRecordingContext* getContext() = 0; + virtual GrRenderTargetContext* renderTargetContext() = 0; + virtual SkGlyphRunListPainter* glyphPainter() = 0; protected: diff --git a/src/gpu/vk/GrVkAMDMemoryAllocator.cpp b/src/gpu/vk/GrVkAMDMemoryAllocator.cpp index a1339537d6cca..03467a24af21d 100644 --- a/src/gpu/vk/GrVkAMDMemoryAllocator.cpp +++ b/src/gpu/vk/GrVkAMDMemoryAllocator.cpp @@ -98,8 +98,8 @@ GrVkAMDMemoryAllocator::~GrVkAMDMemoryAllocator() { fAllocator = VK_NULL_HANDLE; } -bool GrVkAMDMemoryAllocator::allocateMemoryForImage(VkImage image, AllocationPropertyFlags flags, - GrVkBackendMemory* backendMemory) { +VkResult GrVkAMDMemoryAllocator::allocateImageMemory(VkImage image, AllocationPropertyFlags flags, + GrVkBackendMemory* backendMemory) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); VmaAllocationCreateInfo info; info.flags = 0; @@ -124,16 +124,15 @@ bool GrVkAMDMemoryAllocator::allocateMemoryForImage(VkImage image, AllocationPro VmaAllocation allocation; VkResult result = vmaAllocateMemoryForImage(fAllocator, image, &info, &allocation, nullptr); - if (VK_SUCCESS != result) { - return false; + if (VK_SUCCESS == result) { + *backendMemory = (GrVkBackendMemory)allocation; } - *backendMemory = (GrVkBackendMemory)allocation; - return true; + return result; } -bool GrVkAMDMemoryAllocator::allocateMemoryForBuffer(VkBuffer buffer, BufferUsage usage, - AllocationPropertyFlags flags, - GrVkBackendMemory* backendMemory) { +VkResult GrVkAMDMemoryAllocator::allocateBufferMemory(VkBuffer buffer, BufferUsage usage, + AllocationPropertyFlags flags, + GrVkBackendMemory* backendMemory) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); VmaAllocationCreateInfo info; info.flags = 0; @@ -187,12 +186,11 @@ bool GrVkAMDMemoryAllocator::allocateMemoryForBuffer(VkBuffer buffer, BufferUsag result = vmaAllocateMemoryForBuffer(fAllocator, buffer, &info, &allocation, nullptr); } } - if (VK_SUCCESS != result) { - return false; + if (VK_SUCCESS == result) { + *backendMemory = (GrVkBackendMemory)allocation; } - *backendMemory = (GrVkBackendMemory)allocation; - return true; + return result; } void GrVkAMDMemoryAllocator::freeMemory(const GrVkBackendMemory& memoryHandle) { @@ -225,12 +223,10 @@ void GrVkAMDMemoryAllocator::getAllocInfo(const GrVkBackendMemory& memoryHandle, alloc->fBackendMemory = memoryHandle; } -void* GrVkAMDMemoryAllocator::mapMemory(const GrVkBackendMemory& memoryHandle) { +VkResult GrVkAMDMemoryAllocator::mapMemory(const GrVkBackendMemory& memoryHandle, void** data) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); const VmaAllocation allocation = (const VmaAllocation)memoryHandle; - void* mapPtr; - vmaMapMemory(fAllocator, allocation, &mapPtr); - return mapPtr; + return vmaMapMemory(fAllocator, allocation, data); } void GrVkAMDMemoryAllocator::unmapMemory(const GrVkBackendMemory& memoryHandle) { @@ -239,18 +235,18 @@ void GrVkAMDMemoryAllocator::unmapMemory(const GrVkBackendMemory& memoryHandle) vmaUnmapMemory(fAllocator, allocation); } -void GrVkAMDMemoryAllocator::flushMappedMemory(const GrVkBackendMemory& memoryHandle, - VkDeviceSize offset, VkDeviceSize size) { +VkResult GrVkAMDMemoryAllocator::flushMemory(const GrVkBackendMemory& memoryHandle, + VkDeviceSize offset, VkDeviceSize size) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); const VmaAllocation allocation = (const VmaAllocation)memoryHandle; - vmaFlushAllocation(fAllocator, allocation, offset, size); + return vmaFlushAllocation(fAllocator, allocation, offset, size); } -void GrVkAMDMemoryAllocator::invalidateMappedMemory(const GrVkBackendMemory& memoryHandle, - VkDeviceSize offset, VkDeviceSize size) { +VkResult GrVkAMDMemoryAllocator::invalidateMemory(const GrVkBackendMemory& memoryHandle, + VkDeviceSize offset, VkDeviceSize size) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); const VmaAllocation allocation = (const VmaAllocation)memoryHandle; - vmaFlushAllocation(fAllocator, allocation, offset, size); + return vmaFlushAllocation(fAllocator, allocation, offset, size); } uint64_t GrVkAMDMemoryAllocator::totalUsedMemory() const { diff --git a/src/gpu/vk/GrVkAMDMemoryAllocator.h b/src/gpu/vk/GrVkAMDMemoryAllocator.h index 5957cd5944f12..82a3e31c29cfa 100644 --- a/src/gpu/vk/GrVkAMDMemoryAllocator.h +++ b/src/gpu/vk/GrVkAMDMemoryAllocator.h @@ -39,23 +39,22 @@ class GrVkAMDMemoryAllocator : public GrVkMemoryAllocator { ~GrVkAMDMemoryAllocator() override; - bool allocateMemoryForImage(VkImage image, AllocationPropertyFlags flags, - GrVkBackendMemory*) override; + VkResult allocateImageMemory(VkImage image, AllocationPropertyFlags flags, + GrVkBackendMemory*) override; - bool allocateMemoryForBuffer(VkBuffer buffer, BufferUsage usage, - AllocationPropertyFlags flags, GrVkBackendMemory*) override; + VkResult allocateBufferMemory(VkBuffer buffer, BufferUsage usage, + AllocationPropertyFlags flags, GrVkBackendMemory*) override; void freeMemory(const GrVkBackendMemory&) override; void getAllocInfo(const GrVkBackendMemory&, GrVkAlloc*) const override; - void* mapMemory(const GrVkBackendMemory&) override; + VkResult mapMemory(const GrVkBackendMemory&, void** data) override; void unmapMemory(const GrVkBackendMemory&) override; - void flushMappedMemory(const GrVkBackendMemory&, VkDeviceSize offset, - VkDeviceSize size) override; - void invalidateMappedMemory(const GrVkBackendMemory&, VkDeviceSize offset, - VkDeviceSize size) override; + VkResult flushMemory(const GrVkBackendMemory&, VkDeviceSize offset, VkDeviceSize size) override; + VkResult invalidateMemory(const GrVkBackendMemory&, VkDeviceSize offset, + VkDeviceSize size) override; uint64_t totalUsedMemory() const override; uint64_t totalAllocatedMemory() const override; diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp index 028c0dc632915..6826cdb80b9c3 100644 --- a/src/gpu/vk/GrVkCaps.cpp +++ b/src/gpu/vk/GrVkCaps.cpp @@ -9,6 +9,7 @@ #include "include/gpu/vk/GrVkBackendContext.h" #include "include/gpu/vk/GrVkExtensions.h" #include "src/core/SkCompressedDataUtils.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrProgramDesc.h" #include "src/gpu/GrRenderTarget.h" #include "src/gpu/GrRenderTargetProxy.h" @@ -516,14 +517,20 @@ void GrVkCaps::initGrCaps(const GrVkInterface* vkInterface, static const uint32_t kMaxVertexAttributes = 64; fMaxVertexAttributes = std::min(properties.limits.maxVertexInputAttributes, kMaxVertexAttributes); + // GrCaps::fSampleLocationsSupport refers to the ability to *query* the sample locations (not + // program them). For now we just set this to true if the device uses standard locations, and + // return the standard locations back when queried. if (properties.limits.standardSampleLocations) { fSampleLocationsSupport = true; } + // See skbug.com/10346 +#if 0 if (extensions.hasExtension(VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, 1)) { // We "disable" multisample by colocating all samples at pixel center. fMultisampleDisableSupport = true; } +#endif if (extensions.hasExtension(VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME, 1)) { fMixedSamplesSupport = true; @@ -1318,22 +1325,6 @@ bool GrVkCaps::isFormatSRGB(const GrBackendFormat& format) const { return format_is_srgb(vkFormat); } -SkImage::CompressionType GrVkCaps::compressionType(const GrBackendFormat& format) const { - VkFormat vkFormat; - if (!format.asVkFormat(&vkFormat)) { - return SkImage::CompressionType::kNone; - } - - switch (vkFormat) { - case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: return SkImage::CompressionType::kETC2_RGB8_UNORM; - case VK_FORMAT_BC1_RGB_UNORM_BLOCK: return SkImage::CompressionType::kBC1_RGB8_UNORM; - case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: return SkImage::CompressionType::kBC1_RGBA8_UNORM; - default: return SkImage::CompressionType::kNone; - } - - SkUNREACHABLE; -} - bool GrVkCaps::isFormatTexturable(const GrBackendFormat& format) const { VkFormat vkFormat; if (!format.asVkFormat(&vkFormat)) { @@ -1531,12 +1522,6 @@ bool GrVkCaps::onAreColorTypeAndFormatCompatible(GrColorType ct, return false; } - SkImage::CompressionType compression = GrVkFormatToCompressionType(vkFormat); - if (compression != SkImage::CompressionType::kNone) { - return ct == (SkCompressionTypeIsOpaque(compression) ? GrColorType::kRGB_888x - : GrColorType::kRGBA_8888); - } - const auto& info = this->getFormatInfo(vkFormat); for (int i = 0; i < info.fColorTypeInfoCount; ++i) { if (info.fColorTypeInfos[i].fColorType == ct) { @@ -1579,7 +1564,7 @@ GrBackendFormat GrVkCaps::getBackendFormatFromCompressionType( SkUNREACHABLE; } -GrSwizzle GrVkCaps::getReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { +GrSwizzle GrVkCaps::onGetReadSwizzle(const GrBackendFormat& format, GrColorType colorType) const { VkFormat vkFormat; SkAssertResult(format.asVkFormat(&vkFormat)); const auto* ycbcrInfo = format.getVkYcbcrConversionInfo(); @@ -1589,6 +1574,7 @@ GrSwizzle GrVkCaps::getReadSwizzle(const GrBackendFormat& format, GrColorType co // onAreColorTypeAndFormatCompatible. return GrSwizzle{"rgba"}; } + const auto& info = this->getFormatInfo(vkFormat); for (int i = 0; i < info.fColorTypeInfoCount; ++i) { const auto& ctInfo = info.fColorTypeInfos[i]; @@ -1641,7 +1627,7 @@ GrCaps::SupportedRead GrVkCaps::onSupportedReadPixelsColorType( return {GrColorType::kUnknown, 0}; } - SkImage::CompressionType compression = GrVkFormatToCompressionType(vkFormat); + SkImage::CompressionType compression = GrBackendFormatToCompressionType(srcBackendFormat); if (compression != SkImage::CompressionType::kNone) { return { SkCompressionTypeIsOpaque(compression) ? GrColorType::kRGB_888x : GrColorType::kRGBA_8888, 0 }; @@ -1715,13 +1701,39 @@ GrProgramDesc GrVkCaps::makeDesc(const GrRenderTarget* rt, const GrProgramInfo& // GrVkPipelineStateBuilder.cpp). b.add32(GrVkGpu::kShader_PersistentCacheKeyType); - GrVkRenderTarget* vkRT = (GrVkRenderTarget*) rt; + if (rt) { + GrVkRenderTarget* vkRT = (GrVkRenderTarget*) rt; + + bool needsStencil = programInfo.numStencilSamples() || programInfo.isStencilEnabled(); + // TODO: support failure in getSimpleRenderPass + const GrVkRenderPass* rp = vkRT->getSimpleRenderPass(needsStencil); + SkASSERT(rp); + rp->genKey(&b); + +#ifdef SK_DEBUG + if (!rp->isExternal()) { + // This is to ensure ReconstructAttachmentsDescriptor keeps matching + // getSimpleRenderPass' result + GrVkRenderPass::AttachmentsDescriptor attachmentsDescriptor; + GrVkRenderPass::AttachmentFlags attachmentFlags; + GrVkRenderTarget::ReconstructAttachmentsDescriptor(*this, programInfo, + &attachmentsDescriptor, + &attachmentFlags); + SkASSERT(rp->isCompatible(attachmentsDescriptor, attachmentFlags)); + } +#endif + } else { + GrVkRenderPass::AttachmentsDescriptor attachmentsDescriptor; + GrVkRenderPass::AttachmentFlags attachmentFlags; + GrVkRenderTarget::ReconstructAttachmentsDescriptor(*this, programInfo, + &attachmentsDescriptor, + &attachmentFlags); - bool needsStencil = programInfo.numStencilSamples() || programInfo.isStencilEnabled(); - // TODO: support failure in getSimpleRenderPass - const GrVkRenderPass* rp = vkRT->getSimpleRenderPass(needsStencil); - SkASSERT(rp); - rp->genKey(&b); + // kExternal_AttachmentFlag is only set for wrapped secondary command buffers - which + // will always go through the above 'rt' path (i.e., we can always pass 0 as the final + // parameter to GenKey). + GrVkRenderPass::GenKey(&b, attachmentFlags, attachmentsDescriptor, 0); + } GrStencilSettings stencil = programInfo.nonGLStencilSettings(); stencil.genKey(&b, true); diff --git a/src/gpu/vk/GrVkCaps.h b/src/gpu/vk/GrVkCaps.h index f136817b2ff98..57787c2db422b 100644 --- a/src/gpu/vk/GrVkCaps.h +++ b/src/gpu/vk/GrVkCaps.h @@ -33,7 +33,6 @@ class GrVkCaps : public GrCaps { const GrVkExtensions& extensions, GrProtected isProtected = GrProtected::kNo); bool isFormatSRGB(const GrBackendFormat&) const override; - SkImage::CompressionType compressionType(const GrBackendFormat&) const override; bool isFormatTexturable(const GrBackendFormat&) const override; bool isVkFormatTexturable(VkFormat) const; @@ -189,7 +188,6 @@ class GrVkCaps : public GrCaps { return fColorTypeToFormatTable[idx]; } - GrSwizzle getReadSwizzle(const GrBackendFormat&, GrColorType) const override; GrSwizzle getWriteSwizzle(const GrBackendFormat&, GrColorType) const override; uint64_t computeFormatKey(const GrBackendFormat&) const override; @@ -243,6 +241,9 @@ class GrVkCaps : public GrCaps { SupportedRead onSupportedReadPixelsColorType(GrColorType, const GrBackendFormat&, GrColorType) const override; + GrSwizzle onGetReadSwizzle(const GrBackendFormat&, GrColorType) const override; + + // ColorTypeInfo for a specific format struct ColorTypeInfo { GrColorType fColorType = GrColorType::kUnknown; diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp index c8ee2c7cbb863..8f9148c0cd5d5 100644 --- a/src/gpu/vk/GrVkGpu.cpp +++ b/src/gpu/vk/GrVkGpu.cpp @@ -14,6 +14,7 @@ #include "src/core/SkCompressedDataUtils.h" #include "src/core/SkConvertPixels.h" #include "src/core/SkMipMap.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDataUtils.h" #include "src/gpu/GrGeometryProcessor.h" @@ -241,7 +242,6 @@ void GrVkGpu::destroyResources() { fMainCmdPool->getPrimaryCommandBuffer()->end(this); fMainCmdPool->close(); } - SkASSERT(!fTempCmdPool); // wait for all commands to finish VkResult res = VK_CALL(QueueWaitIdle(fQueue)); @@ -286,9 +286,11 @@ void GrVkGpu::destroyResources() { GrVkGpu::~GrVkGpu() { if (!fDisconnected) { this->destroyResources(); - fMemoryAllocator.reset(); } delete fCompiler; + // We don't delete the memory allocator until the very end of the GrVkGpu lifetime so that + // clients can continue to delete backend textures even after a context has been abandoned. + fMemoryAllocator.reset(); } @@ -296,12 +298,10 @@ void GrVkGpu::disconnect(DisconnectType type) { INHERITED::disconnect(type); if (!fDisconnected) { this->destroyResources(); - fMemoryAllocator.reset(); fSemaphoresToWaitOn.reset(); fSemaphoresToSignal.reset(); fMainCmdBuffer = nullptr; - SkASSERT(!fTempCmdBuffer); fDisconnected = true; } } @@ -325,43 +325,11 @@ GrOpsRenderPass* GrVkGpu::getOpsRenderPass( return fCachedOpsRenderPass.get(); } -GrVkPrimaryCommandBuffer* GrVkGpu::getTempCommandBuffer() { - SkASSERT(!fTempCmdPool && !fTempCmdBuffer); - fTempCmdPool = fResourceProvider.findOrCreateCommandPool(); - if (!fTempCmdPool) { - return nullptr; - } - fTempCmdBuffer = fTempCmdPool->getPrimaryCommandBuffer(); - SkASSERT(fTempCmdBuffer); - fTempCmdBuffer->begin(this); - return fTempCmdBuffer; -} - -bool GrVkGpu::submitTempCommandBuffer(SyncQueue sync, sk_sp finishedCallback) { - SkASSERT(fTempCmdBuffer); - - fTempCmdBuffer->end(this); - fTempCmdPool->close(); - - SkASSERT(fMainCmdBuffer->validateNoSharedImageResources(fTempCmdBuffer)); - - fTempCmdBuffer->addFinishedProc(std::move(finishedCallback)); - - SkTArray fEmptySemaphores; - bool didSubmit = fTempCmdBuffer->submitToQueue(this, fQueue, fEmptySemaphores, - fEmptySemaphores); - if (didSubmit && sync == kForce_SyncQueue) { - fTempCmdBuffer->forceSync(this); - } - fTempCmdPool->unref(); - fTempCmdPool = nullptr; - fTempCmdBuffer = nullptr; - return didSubmit; -} - bool GrVkGpu::submitCommandBuffer(SyncQueue sync) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); - SkASSERT(this->currentCommandBuffer()); + if (!this->currentCommandBuffer()) { + return false; + } SkASSERT(!fCachedOpsRenderPass || !fCachedOpsRenderPass->isActive()); if (!this->currentCommandBuffer()->hasWork() && kForce_SyncQueue != sync && @@ -512,6 +480,9 @@ bool GrVkGpu::onTransferPixelsTo(GrTexture* texture, int left, int top, int widt GrColorType surfaceColorType, GrColorType bufferColorType, GrGpuBuffer* transferBuffer, size_t bufferOffset, size_t rowBytes) { + if (!this->currentCommandBuffer()) { + return false; + } if (surfaceColorType != bufferColorType) { return false; } @@ -576,6 +547,9 @@ bool GrVkGpu::onTransferPixelsTo(GrTexture* texture, int left, int top, int widt bool GrVkGpu::onTransferPixelsFrom(GrSurface* surface, int left, int top, int width, int height, GrColorType surfaceColorType, GrColorType bufferColorType, GrGpuBuffer* transferBuffer, size_t offset) { + if (!this->currentCommandBuffer()) { + return false; + } SkASSERT(surface); SkASSERT(transferBuffer); if (fProtectedContext == GrProtected::kYes) { @@ -637,6 +611,10 @@ bool GrVkGpu::onTransferPixelsFrom(GrSurface* surface, int left, int top, int wi void GrVkGpu::resolveImage(GrSurface* dst, GrVkRenderTarget* src, const SkIRect& srcRect, const SkIPoint& dstPoint) { + if (!this->currentCommandBuffer()) { + return; + } + SkASSERT(dst); SkASSERT(src && src->numSamples() > 1 && src->msaaImage()); @@ -743,10 +721,9 @@ bool GrVkGpu::uploadTexDataLinear(GrVkTexture* tex, int left, int top, int width // 'individualMipOffsets' is filled in as a side-effect. static size_t fill_in_regions(GrVkCaps* vkCaps, SkTArray* regions, SkTArray* individualMipOffsets, + SkImage::CompressionType compression, VkFormat vkFormat, SkISize dimensions, GrMipMapped mipMapped, VkDeviceSize bufferOffset) { - SkImage::CompressionType compression = GrVkFormatToCompressionType(vkFormat); - int numMipLevels = 1; if (mipMapped == GrMipMapped::kYes) { numMipLevels = SkMipMap::ComputeLevelCount(dimensions.width(), dimensions.height()) + 1; @@ -790,6 +767,10 @@ static size_t fill_in_regions(GrVkCaps* vkCaps, SkTArray* reg bool GrVkGpu::uploadTexDataOptimal(GrVkTexture* tex, int left, int top, int width, int height, GrColorType dataColorType, const GrMipLevel texels[], int mipLevelCount) { + if (!this->currentCommandBuffer()) { + return false; + } + SkASSERT(!tex->isLinearTiled()); // The assumption is either that we have no mipmaps, or that our rect is the entire texture SkASSERT(1 == mipLevelCount || @@ -974,9 +955,13 @@ bool GrVkGpu::uploadTexDataOptimal(GrVkTexture* tex, int left, int top, int widt // It's probably possible to roll this into uploadTexDataOptimal, // but for now it's easier to maintain as a separate entity. -bool GrVkGpu::uploadTexDataCompressed(GrVkTexture* uploadTexture, VkFormat vkFormat, +bool GrVkGpu::uploadTexDataCompressed(GrVkTexture* uploadTexture, + SkImage::CompressionType compression, VkFormat vkFormat, SkISize dimensions, GrMipMapped mipMapped, const void* data, size_t dataSize) { + if (!this->currentCommandBuffer()) { + return false; + } SkASSERT(data); SkASSERT(!uploadTexture->isLinearTiled()); // For now the assumption is that our rect is the entire texture. @@ -1011,9 +996,9 @@ bool GrVkGpu::uploadTexDataCompressed(GrVkTexture* uploadTexture, VkFormat vkFor SkTArray regions; SkTArray individualMipOffsets; SkDEBUGCODE(size_t combinedBufferSize =) fill_in_regions(fVkCaps.get(), ®ions, - &individualMipOffsets, - vkFormat, dimensions, - mipMapped, bufferOffset); + &individualMipOffsets, compression, + vkFormat, dimensions, mipMapped, + bufferOffset); SkASSERT(dataSize == combinedBufferSize); // Change layout of our target so it can be copied to @@ -1092,6 +1077,9 @@ sk_sp GrVkGpu::onCreateTexture(SkISize dimensions, } if (levelClearMask) { + if (!this->currentCommandBuffer()) { + return nullptr; + } SkSTArray<1, VkImageSubresourceRange> ranges; bool inRange = false; for (uint32_t i = 0; i < tex->mipLevels(); ++i) { @@ -1167,7 +1155,8 @@ sk_sp GrVkGpu::onCreateCompressedTexture(SkISize dimensions, return nullptr; } - if (!this->uploadTexDataCompressed(tex.get(), pixelFormat, dimensions, mipMapped, + SkImage::CompressionType compression = GrBackendFormatToCompressionType(format); + if (!this->uploadTexDataCompressed(tex.get(), compression, pixelFormat, dimensions, mipMapped, data, dataSize)) { return nullptr; } @@ -1179,6 +1168,9 @@ sk_sp GrVkGpu::onCreateCompressedTexture(SkISize dimensions, void GrVkGpu::copyBuffer(GrVkBuffer* srcBuffer, GrVkBuffer* dstBuffer, VkDeviceSize srcOffset, VkDeviceSize dstOffset, VkDeviceSize size) { + if (!this->currentCommandBuffer()) { + return; + } VkBufferCopy copyRegion; copyRegion.srcOffset = srcOffset; copyRegion.dstOffset = dstOffset; @@ -1188,6 +1180,9 @@ void GrVkGpu::copyBuffer(GrVkBuffer* srcBuffer, GrVkBuffer* dstBuffer, VkDeviceS bool GrVkGpu::updateBuffer(GrVkBuffer* buffer, const void* src, VkDeviceSize offset, VkDeviceSize size) { + if (!this->currentCommandBuffer()) { + return false; + } // Update the buffer this->currentCommandBuffer()->updateBuffer(this, buffer, offset, size, src); @@ -1442,6 +1437,9 @@ sk_sp GrVkGpu::onWrapVulkanSecondaryCBAsRenderTarget( } bool GrVkGpu::onRegenerateMipMapLevels(GrTexture* tex) { + if (!this->currentCommandBuffer()) { + return false; + } auto* vkTex = static_cast(tex); // don't do anything for linearly tiled textures (can't have mipmaps) if (vkTex->isLinearTiled()) { @@ -1658,7 +1656,7 @@ bool GrVkGpu::onUpdateBackendTexture(const GrBackendTexture& backendTexture, return false; } - GrVkPrimaryCommandBuffer* cmdBuffer = this->getTempCommandBuffer(); + GrVkPrimaryCommandBuffer* cmdBuffer = this->currentCommandBuffer(); if (!cmdBuffer) { return false; } @@ -1688,10 +1686,14 @@ bool GrVkGpu::onUpdateBackendTexture(const GrBackendTexture& backendTexture, range.levelCount = info.fLevelCount; cmdBuffer->clearColorImage(this, texture.get(), &vkColor, 1, &range); } else { + SkImage::CompressionType compression = GrBackendFormatToCompressionType( + backendTexture.getBackendFormat()); + SkTArray regions; SkTArray individualMipOffsets; size_t combinedBufferSize = fill_in_regions(fVkCaps.get(), ®ions, &individualMipOffsets, - info.fFormat, backendTexture.dimensions(), + compression, info.fFormat, + backendTexture.dimensions(), backendTexture.fMipMapped, 0); sk_sp transferBuffer = @@ -1709,8 +1711,6 @@ bool GrVkGpu::onUpdateBackendTexture(const GrBackendTexture& backendTexture, data->compressedData(), data->compressedSize()); } else { SkASSERT(data->type() == BackendTextureData::Type::kColor); - SkImage::CompressionType compression = GrVkFormatToCompressionType(info.fFormat); - result = generate_compressed_data(this, (char*)transferBuffer->map(), compression, backendTexture.dimensions(), backendTexture.fMipMapped, data->color()); @@ -1727,7 +1727,10 @@ bool GrVkGpu::onUpdateBackendTexture(const GrBackendTexture& backendTexture, VK_ACCESS_SHADER_READ_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, false); - return this->submitTempCommandBuffer(kSkip_SyncQueue, std::move(finishedCallback)); + if (finishedCallback) { + this->addFinishedCallback(std::move(finishedCallback)); + } + return true; } GrBackendTexture GrVkGpu::onCreateBackendTexture(SkISize dimensions, @@ -1811,6 +1814,56 @@ GrBackendTexture GrVkGpu::onCreateCompressedBackendTexture( return beTex; } +void set_layout_and_queue_from_mutable_state(GrVkGpu* gpu, GrVkImage* image, + const GrVkSharedImageInfo& newInfo) { + // Even though internally we use this helper for getting src access flags and stages they + // can also be used for general dst flags since we don't know exactly what the client + // plans on using the image for. + VkImageLayout newLayout = newInfo.getImageLayout(); + VkPipelineStageFlags dstStage = GrVkImage::LayoutToPipelineSrcStageFlags(newLayout); + VkAccessFlags dstAccess = GrVkImage::LayoutToSrcAccessMask(newLayout); + image->setImageLayoutAndQueueIndex(gpu, newLayout, dstAccess, dstStage, false, + newInfo.getQueueFamilyIndex()); +} + +bool GrVkGpu::setBackendSurfaceState(GrVkImageInfo info, + sk_sp currentState, + SkISize dimensions, + const GrVkSharedImageInfo& newInfo) { + sk_sp texture = GrVkTexture::MakeWrappedTexture( + this, dimensions, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, kRW_GrIOType, info, + std::move(currentState)); + SkASSERT(texture); + if (!texture) { + return false; + } + set_layout_and_queue_from_mutable_state(this, texture.get(), newInfo); + return true; +} + +bool GrVkGpu::setBackendTextureState(const GrBackendTexture& backendTeture, + const GrBackendSurfaceMutableState& newState, + sk_sp finishedCallback) { + GrVkImageInfo info; + SkAssertResult(backendTeture.getVkImageInfo(&info)); + sk_sp currentState = backendTeture.getMutableState(); + SkASSERT(currentState); + SkASSERT(newState.fBackend == GrBackend::kVulkan); + return this->setBackendSurfaceState(info, std::move(currentState), backendTeture.dimensions(), + newState.fVkState); +} + +bool GrVkGpu::setBackendRenderTargetState(const GrBackendRenderTarget& backendRenderTarget, + const GrBackendSurfaceMutableState& newState, + sk_sp finishedCallback) { + GrVkImageInfo info; + SkAssertResult(backendRenderTarget.getVkImageInfo(&info)); + sk_sp currentState = backendRenderTarget.getMutableState(); + SkASSERT(currentState); + SkASSERT(newState.fBackend == GrBackend::kVulkan); + return this->setBackendSurfaceState(info, std::move(currentState), + backendRenderTarget.dimensions(), newState.fVkState); +} void GrVkGpu::querySampleLocations(GrRenderTarget* renderTarget, SkTArray* sampleLocations) { @@ -1874,8 +1927,33 @@ void GrVkGpu::deleteBackendTexture(const GrBackendTexture& tex) { } } -bool GrVkGpu::compile(const GrProgramDesc&, const GrProgramInfo&) { - return false; +bool GrVkGpu::compile(const GrProgramDesc& desc, const GrProgramInfo& programInfo) { + SkASSERT(!(GrProcessor::CustomFeatures::kSampleLocations & programInfo.requestedFeatures())); + + GrVkRenderPass::AttachmentsDescriptor attachmentsDescriptor; + GrVkRenderPass::AttachmentFlags attachmentFlags; + GrVkRenderTarget::ReconstructAttachmentsDescriptor(this->vkCaps(), programInfo, + &attachmentsDescriptor, &attachmentFlags); + + sk_sp renderPass(this->resourceProvider().findCompatibleRenderPass( + &attachmentsDescriptor, + attachmentFlags)); + if (!renderPass) { + return false; + } + + Stats::ProgramCacheResult stat; + + auto pipelineState = this->resourceProvider().findOrCreateCompatiblePipelineState( + desc, + programInfo, + renderPass->vkRenderPass(), + &stat); + if (!pipelineState) { + return false; + } + + return stat != Stats::ProgramCacheResult::kHit; } #if GR_TEST_UTILS @@ -1943,7 +2021,9 @@ void GrVkGpu::addBufferMemoryBarrier(const GrManagedResource* resource, VkPipelineStageFlags dstStageMask, bool byRegion, VkBufferMemoryBarrier* barrier) const { - SkASSERT(this->currentCommandBuffer()); + if (!this->currentCommandBuffer()) { + return; + } SkASSERT(resource); this->currentCommandBuffer()->pipelineBarrier(this, resource, @@ -1976,14 +2056,16 @@ void GrVkGpu::addImageMemoryBarrier(const GrManagedResource* resource, barrier); } -void GrVkGpu::prepareSurfacesForBackendAccessAndExternalIO( - GrSurfaceProxy* proxies[], int numProxies, SkSurface::BackendSurfaceAccess access, - const GrPrepareForExternalIORequests& externalRequests) { +void GrVkGpu::prepareSurfacesForBackendAccessAndStateUpdates( + GrSurfaceProxy* proxies[], + int numProxies, + SkSurface::BackendSurfaceAccess access, + const GrBackendSurfaceMutableState* newState) { SkASSERT(numProxies >= 0); SkASSERT(!numProxies || proxies); // Submit the current command buffer to the Queue. Whether we inserted semaphores or not does // not effect what we do here. - if (numProxies && access == SkSurface::BackendSurfaceAccess::kPresent) { + if (numProxies && (access == SkSurface::BackendSurfaceAccess::kPresent || newState)) { GrVkImage* image; for (int i = 0; i < numProxies; ++i) { SkASSERT(proxies[i]->isInstantiated()); @@ -1994,57 +2076,11 @@ void GrVkGpu::prepareSurfacesForBackendAccessAndExternalIO( SkASSERT(rt); image = static_cast(rt); } - image->prepareForPresent(this); - } - } - - // Handle requests for preparing for external IO - for (int i = 0; i < externalRequests.fNumImages; ++i) { - SkImage* image = externalRequests.fImages[i]; - if (!image->isTextureBacked()) { - continue; - } - SkImage_GpuBase* gpuImage = static_cast(as_IB(image)); - const GrSurfaceProxyView* view = gpuImage->view(this->getContext()); - SkASSERT(view && *view); - - if (!view->proxy()->isInstantiated()) { - auto resourceProvider = this->getContext()->priv().resourceProvider(); - if (!view->proxy()->instantiate(resourceProvider)) { - continue; + if (newState) { + const GrVkSharedImageInfo& newInfo = newState->fVkState; + set_layout_and_queue_from_mutable_state(this, image, newInfo); } - } - - GrTexture* tex = view->proxy()->peekTexture(); - if (!tex) { - continue; - } - GrVkTexture* vkTex = static_cast(tex); - vkTex->prepareForExternal(this); - } - for (int i = 0; i < externalRequests.fNumSurfaces; ++i) { - SkSurface* surface = externalRequests.fSurfaces[i]; - if (!surface->getCanvas()->getGrContext()) { - continue; - } - SkSurface_Gpu* gpuSurface = static_cast(surface); - auto* rtc = gpuSurface->getDevice()->accessRenderTargetContext(); - sk_sp proxy = rtc->asRenderTargetProxyRef(); - if (!proxy->isInstantiated()) { - auto resourceProvider = this->getContext()->priv().resourceProvider(); - if (!proxy->instantiate(resourceProvider)) { - continue; - } - } - - GrRenderTarget* rt = proxy->peekRenderTarget(); - SkASSERT(rt); - GrVkRenderTarget* vkRT = static_cast(rt); - if (externalRequests.fPrepareSurfaceForPresent && - externalRequests.fPrepareSurfaceForPresent[i]) { - vkRT->prepareForPresent(this); - } else { - vkRT->prepareForExternal(this); + image->prepareForPresent(this); } } } @@ -2052,7 +2088,14 @@ void GrVkGpu::prepareSurfacesForBackendAccessAndExternalIO( void GrVkGpu::addFinishedProc(GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { SkASSERT(finishedProc); - fResourceProvider.addFinishedProcToActiveCommandBuffers(finishedProc, finishedContext); + sk_sp finishedCallback( + new GrRefCntedCallback(finishedProc, finishedContext)); + this->addFinishedCallback(std::move(finishedCallback)); +} + +void GrVkGpu::addFinishedCallback(sk_sp finishedCallback) { + SkASSERT(finishedCallback); + fResourceProvider.addFinishedProcToActiveCommandBuffers(std::move(finishedCallback)); } bool GrVkGpu::onSubmitToGpu(bool syncCpu) { @@ -2073,6 +2116,10 @@ static int get_surface_sample_cnt(GrSurface* surf) { void GrVkGpu::copySurfaceAsCopyImage(GrSurface* dst, GrSurface* src, GrVkImage* dstImage, GrVkImage* srcImage, const SkIRect& srcRect, const SkIPoint& dstPoint) { + if (!this->currentCommandBuffer()) { + return; + } + #ifdef SK_DEBUG int dstSampleCnt = get_surface_sample_cnt(dst); int srcSampleCnt = get_surface_sample_cnt(src); @@ -2128,6 +2175,10 @@ void GrVkGpu::copySurfaceAsCopyImage(GrSurface* dst, GrSurface* src, GrVkImage* void GrVkGpu::copySurfaceAsBlit(GrSurface* dst, GrSurface* src, GrVkImage* dstImage, GrVkImage* srcImage, const SkIRect& srcRect, const SkIPoint& dstPoint) { + if (!this->currentCommandBuffer()) { + return; + } + #ifdef SK_DEBUG int dstSampleCnt = get_surface_sample_cnt(dst); int srcSampleCnt = get_surface_sample_cnt(src); @@ -2275,6 +2326,10 @@ bool GrVkGpu::onReadPixels(GrSurface* surface, int left, int top, int width, int return false; } + if (!this->currentCommandBuffer()) { + return false; + } + GrVkImage* image = nullptr; GrVkRenderTarget* rt = static_cast(surface->asRenderTarget()); if (rt) { @@ -2463,6 +2518,9 @@ bool GrVkGpu::beginRenderPass(const GrVkRenderPass* renderPass, const VkClearValue* colorClear, GrVkRenderTarget* target, GrSurfaceOrigin origin, const SkIRect& bounds, bool forSecondaryCB) { + if (!this->currentCommandBuffer()) { + return false; + } SkASSERT (!target->wrapsSecondaryCommandBuffer()); auto nativeBounds = GrNativeRect::MakeRelativeTo(origin, target->height(), bounds); @@ -2498,11 +2556,16 @@ bool GrVkGpu::beginRenderPass(const GrVkRenderPass* renderPass, void GrVkGpu::endRenderPass(GrRenderTarget* target, GrSurfaceOrigin origin, const SkIRect& bounds) { + // We had a command buffer when we started the render pass, we should have one now as well. + SkASSERT(this->currentCommandBuffer()); this->currentCommandBuffer()->endRenderPass(this); this->didWriteToSurface(target, origin, &bounds); } void GrVkGpu::submitSecondaryCommandBuffer(std::unique_ptr buffer) { + if (!this->currentCommandBuffer()) { + return; + } this->currentCommandBuffer()->executeCommands(this, std::move(buffer)); } @@ -2560,6 +2623,8 @@ std::unique_ptr GrVkGpu::wrapBackendSemaphore( } void GrVkGpu::insertSemaphore(GrSemaphore* semaphore) { + SkASSERT(semaphore); + GrVkSemaphore* vkSem = static_cast(semaphore); GrVkSemaphore::Resource* resource = vkSem->getResource(); @@ -2570,6 +2635,8 @@ void GrVkGpu::insertSemaphore(GrSemaphore* semaphore) { } void GrVkGpu::waitSemaphore(GrSemaphore* semaphore) { + SkASSERT(semaphore); + GrVkSemaphore* vkSem = static_cast(semaphore); GrVkSemaphore::Resource* resource = vkSem->getResource(); diff --git a/src/gpu/vk/GrVkGpu.h b/src/gpu/vk/GrVkGpu.h index af10a2279e584..312792ba9d4b1 100644 --- a/src/gpu/vk/GrVkGpu.h +++ b/src/gpu/vk/GrVkGpu.h @@ -56,9 +56,7 @@ class GrVkGpu : public GrGpu { VkDevice device() const { return fDevice; } VkQueue queue() const { return fQueue; } uint32_t queueIndex() const { return fQueueIndex; } - GrVkCommandPool* cmdPool() const { - return fTempCmdPool ? fTempCmdPool : fMainCmdPool; - } + GrVkCommandPool* cmdPool() const { return fMainCmdPool; } const VkPhysicalDeviceProperties& physicalDeviceProperties() const { return fPhysDevProps; } @@ -69,14 +67,20 @@ class GrVkGpu : public GrGpu { GrVkResourceProvider& resourceProvider() { return fResourceProvider; } - GrVkPrimaryCommandBuffer* currentCommandBuffer() const { - return fTempCmdBuffer ? fTempCmdBuffer : fMainCmdBuffer; - } + GrVkPrimaryCommandBuffer* currentCommandBuffer() const { return fMainCmdBuffer; } void querySampleLocations(GrRenderTarget*, SkTArray*) override; void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {} + bool setBackendTextureState(const GrBackendTexture&, + const GrBackendSurfaceMutableState&, + sk_sp finishedCallback) override; + + bool setBackendRenderTargetState(const GrBackendRenderTarget&, + const GrBackendSurfaceMutableState&, + sk_sp finishedCallback) override; + void deleteBackendTexture(const GrBackendTexture&) override; bool compile(const GrProgramDesc&, const GrProgramInfo&) override; @@ -167,6 +171,8 @@ class GrVkGpu : public GrGpu { const SkIRect& bounds, bool forSecondaryCB); void endRenderPass(GrRenderTarget* target, GrSurfaceOrigin origin, const SkIRect& bounds); + using GrGpu::setOOMed; + private: enum SyncQueue { kForce_SyncQueue, @@ -197,6 +203,11 @@ class GrVkGpu : public GrGpu { sk_sp finishedCallback, const BackendTextureData*) override; + bool setBackendSurfaceState(GrVkImageInfo info, + sk_sp currentState, + SkISize dimensions, + const GrVkSharedImageInfo& newInfo); + sk_sp onCreateTexture(SkISize, const GrBackendFormat&, GrRenderable, @@ -256,9 +267,13 @@ class GrVkGpu : public GrGpu { void addFinishedProc(GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) override; - void prepareSurfacesForBackendAccessAndExternalIO( - GrSurfaceProxy* proxies[], int numProxies, SkSurface::BackendSurfaceAccess access, - const GrPrepareForExternalIORequests& externalRequests) override; + void addFinishedCallback(sk_sp finishedCallback); + + void prepareSurfacesForBackendAccessAndStateUpdates( + GrSurfaceProxy* proxies[], + int numProxies, + SkSurface::BackendSurfaceAccess access, + const GrBackendSurfaceMutableState* newState) override; bool onSubmitToGpu(bool syncCpu) override; @@ -285,8 +300,9 @@ class GrVkGpu : public GrGpu { GrColorType colorType, const void* data, size_t rowBytes); bool uploadTexDataOptimal(GrVkTexture* tex, int left, int top, int width, int height, GrColorType colorType, const GrMipLevel texels[], int mipLevelCount); - bool uploadTexDataCompressed(GrVkTexture* tex, VkFormat vkFormat, SkISize dimensions, - GrMipMapped mipMapped, const void* data, size_t dataSize); + bool uploadTexDataCompressed(GrVkTexture* tex, SkImage::CompressionType compression, + VkFormat vkFormat, SkISize dimensions, GrMipMapped mipMapped, + const void* data, size_t dataSize); void resolveImage(GrSurface* dst, GrVkRenderTarget* src, const SkIRect& srcRect, const SkIPoint& dstPoint); @@ -298,18 +314,6 @@ class GrVkGpu : public GrGpu { GrVkImageInfo*, GrProtected); - // Creates a new temporary primary command buffer that will be target of all subsequent commands - // until it is submitted via submitTempCommandBuffer. When the temp command buffer gets - // submitted the main command buffer will begin being the target of commands again. When using a - // a temp command buffer, the caller should not use any resources that may have been used by the - // unsubmitted main command buffer. The reason for this is we've already updated state, like - // image layout, for the resources on the main command buffer even though we haven't submitted - // it yet. Thus if the same resource gets used on the temp our tracking will get thosse state - // updates out of order. It is legal to use a resource on either the temp or main command buffer - // that was used on a previously submitted command buffer; - GrVkPrimaryCommandBuffer* getTempCommandBuffer(); - bool submitTempCommandBuffer(SyncQueue sync, sk_sp finishedCallback); - sk_sp fInterface; sk_sp fMemoryAllocator; sk_sp fVkCaps; @@ -327,10 +331,6 @@ class GrVkGpu : public GrGpu { // just a raw pointer; object's lifespan is managed by fCmdPool GrVkPrimaryCommandBuffer* fMainCmdBuffer; - GrVkCommandPool* fTempCmdPool = nullptr; - // just a raw pointer; object's lifespan is managed by fCmdPool - GrVkPrimaryCommandBuffer* fTempCmdBuffer = nullptr; - SkSTArray<1, GrVkSemaphore::Resource*> fSemaphoresToWaitOn; SkSTArray<1, GrVkSemaphore::Resource*> fSemaphoresToSignal; diff --git a/src/gpu/vk/GrVkImage.cpp b/src/gpu/vk/GrVkImage.cpp index 1270743f80ab7..98b24db5b0d5f 100644 --- a/src/gpu/vk/GrVkImage.cpp +++ b/src/gpu/vk/GrVkImage.cpp @@ -119,26 +119,58 @@ VkImageAspectFlags vk_format_to_aspect_flags(VkFormat format) { } } -void GrVkImage::setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout, - VkAccessFlags dstAccessMask, - VkPipelineStageFlags dstStageMask, - bool byRegion, bool releaseFamilyQueue) { +void GrVkImage::setImageLayoutAndQueueIndex(const GrVkGpu* gpu, + VkImageLayout newLayout, + VkAccessFlags dstAccessMask, + VkPipelineStageFlags dstStageMask, + bool byRegion, + uint32_t newQueueFamilyIndex) { SkASSERT(!gpu->isDeviceLost()); - SkASSERT(VK_IMAGE_LAYOUT_UNDEFINED != newLayout && - VK_IMAGE_LAYOUT_PREINITIALIZED != newLayout); + SkASSERT(newLayout == this->currentLayout() || + (VK_IMAGE_LAYOUT_UNDEFINED != newLayout && + VK_IMAGE_LAYOUT_PREINITIALIZED != newLayout)); VkImageLayout currentLayout = this->currentLayout(); + uint32_t currentQueueIndex = this->currentQueueFamilyIndex(); - if (releaseFamilyQueue && this->currentQueueFamilyIndex() == fInitialQueueFamily && - newLayout == currentLayout) { - // We never transfered the image to this queue and we are releasing it so don't do anything. - return; +#ifdef SK_DEBUG + if (fInfo.fSharingMode == VK_SHARING_MODE_CONCURRENT) { + if (newQueueFamilyIndex == VK_QUEUE_FAMILY_IGNORED) { + SkASSERT(currentQueueIndex == VK_QUEUE_FAMILY_IGNORED || + currentQueueIndex == VK_QUEUE_FAMILY_EXTERNAL || + currentQueueIndex == VK_QUEUE_FAMILY_FOREIGN_EXT); + } else { + SkASSERT(newQueueFamilyIndex == VK_QUEUE_FAMILY_EXTERNAL || + newQueueFamilyIndex == VK_QUEUE_FAMILY_FOREIGN_EXT); + SkASSERT(currentQueueIndex == VK_QUEUE_FAMILY_IGNORED); + } + } else { + SkASSERT(fInfo.fSharingMode == VK_SHARING_MODE_EXCLUSIVE); + if (newQueueFamilyIndex == VK_QUEUE_FAMILY_IGNORED || + currentQueueIndex == gpu->queueIndex()) { + SkASSERT(currentQueueIndex == VK_QUEUE_FAMILY_IGNORED || + currentQueueIndex == VK_QUEUE_FAMILY_EXTERNAL || + currentQueueIndex == VK_QUEUE_FAMILY_FOREIGN_EXT || + currentQueueIndex == gpu->queueIndex()); + } else if (newQueueFamilyIndex == VK_QUEUE_FAMILY_EXTERNAL || + newQueueFamilyIndex == VK_QUEUE_FAMILY_FOREIGN_EXT) { + SkASSERT(currentQueueIndex == VK_QUEUE_FAMILY_IGNORED || + currentQueueIndex == gpu->queueIndex()); + } + } +#endif + + if (fInfo.fSharingMode == VK_SHARING_MODE_EXCLUSIVE) { + if (newQueueFamilyIndex == VK_QUEUE_FAMILY_IGNORED) { + newQueueFamilyIndex = gpu->queueIndex(); + } + if (currentQueueIndex == VK_QUEUE_FAMILY_IGNORED) { + currentQueueIndex = gpu->queueIndex(); + } } // If the old and new layout are the same and the layout is a read only layout, there is no need // to put in a barrier unless we also need to switch queues. - if (newLayout == currentLayout && !releaseFamilyQueue && - (this->currentQueueFamilyIndex() == VK_QUEUE_FAMILY_IGNORED || - this->currentQueueFamilyIndex() == gpu->queueIndex()) && + if (newLayout == currentLayout && currentQueueIndex == newQueueFamilyIndex && (VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL == currentLayout || VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL == currentLayout || VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL == currentLayout)) { @@ -150,33 +182,6 @@ void GrVkImage::setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout, VkImageAspectFlags aspectFlags = vk_format_to_aspect_flags(fInfo.fFormat); - uint32_t srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - uint32_t dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - if (this->currentQueueFamilyIndex() != VK_QUEUE_FAMILY_IGNORED && - this->currentQueueFamilyIndex() != gpu->queueIndex()) { - // The image still is owned by its original queue family and we need to transfer it into - // ours. - SkASSERT(!releaseFamilyQueue); - SkASSERT(this->currentQueueFamilyIndex() == fInitialQueueFamily); - // We only support transferring from external or foreign queues here and not arbitrary - // ones. - SkASSERT(this->currentQueueFamilyIndex() == VK_QUEUE_FAMILY_EXTERNAL || - this->currentQueueFamilyIndex() == VK_QUEUE_FAMILY_FOREIGN_EXT); - srcQueueFamilyIndex = this->currentQueueFamilyIndex(); - if (fInfo.fSharingMode == VK_SHARING_MODE_EXCLUSIVE) { - dstQueueFamilyIndex = gpu->queueIndex(); - } else { - dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; - } - this->setQueueFamilyIndex(dstQueueFamilyIndex); - } else if (releaseFamilyQueue) { - // We are releasing the image so we must transfer the image back to its original queue - // family. - srcQueueFamilyIndex = this->currentQueueFamilyIndex(); - dstQueueFamilyIndex = fInitialQueueFamily; - this->setQueueFamilyIndex(fInitialQueueFamily); - } - VkImageMemoryBarrier imageMemoryBarrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType nullptr, // pNext @@ -184,8 +189,8 @@ void GrVkImage::setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout, dstAccessMask, // dstAccessMask currentLayout, // oldLayout newLayout, // newLayout - srcQueueFamilyIndex, // srcQueueFamilyIndex - dstQueueFamilyIndex, // dstQueueFamilyIndex + currentQueueIndex, // srcQueueFamilyIndex + newQueueFamilyIndex, // dstQueueFamilyIndex fInfo.fImage, // image { aspectFlags, 0, fInfo.fLevelCount, 0, 1 } // subresourceRange }; @@ -194,6 +199,7 @@ void GrVkImage::setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout, &imageMemoryBarrier); this->updateImageLayout(newLayout); + this->setQueueFamilyIndex(newQueueFamilyIndex); } bool GrVkImage::InitImageInfo(GrVkGpu* gpu, const ImageDesc& imageDesc, GrVkImageInfo* info) { @@ -284,24 +290,17 @@ void GrVkImage::prepareForPresent(GrVkGpu* gpu) { layout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR; } } - this->setImageLayout(gpu, layout, 0, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, false, true); + this->setImageLayoutAndQueueIndex(gpu, layout, 0, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, false, + fInitialQueueFamily); } void GrVkImage::prepareForExternal(GrVkGpu* gpu) { - this->setImageLayout(gpu, this->currentLayout(), 0, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, false, - true); + this->setImageLayoutAndQueueIndex(gpu, this->currentLayout(), 0, + VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, false, + fInitialQueueFamily); } -void GrVkImage::releaseImage(GrVkGpu* gpu) { - if (!gpu->isDeviceLost() && this->currentQueueFamilyIndex() != fInitialQueueFamily) { - // The Vulkan spec is vague on what to put for the dstStageMask here. The spec for image - // memory barrier says the dstStageMask must not be zero. However, in the spec when it talks - // about family queue transfers it says the dstStageMask is ignored and should be set to - // zero. Assuming it really is ignored we set it to VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT here - // since it makes the Vulkan validation layers happy. - this->setImageLayout(gpu, this->currentLayout(), 0, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, - false, true); - } +void GrVkImage::releaseImage() { if (fResource) { fResource->removeOwningTexture(); fResource->unref(); diff --git a/src/gpu/vk/GrVkImage.h b/src/gpu/vk/GrVkImage.h index d7657dcccf8b2..dc4d053156312 100644 --- a/src/gpu/vk/GrVkImage.h +++ b/src/gpu/vk/GrVkImage.h @@ -77,12 +77,21 @@ class GrVkImage : SkNoncopyable { VkImageLayout currentLayout() const { return fMutableState->getImageLayout(); } + void setImageLayoutAndQueueIndex(const GrVkGpu* gpu, + VkImageLayout newLayout, + VkAccessFlags dstAccessMask, + VkPipelineStageFlags dstStageMask, + bool byRegion, + uint32_t newQueueFamilyIndex); + void setImageLayout(const GrVkGpu* gpu, VkImageLayout newLayout, VkAccessFlags dstAccessMask, VkPipelineStageFlags dstStageMask, - bool byRegion, - bool releaseFamilyQueue = false); + bool byRegion) { + this->setImageLayoutAndQueueIndex(gpu, newLayout, dstAccessMask, dstStageMask, byRegion, + VK_QUEUE_FAMILY_IGNORED); + } uint32_t currentQueueFamilyIndex() const { return fMutableState->getQueueFamilyIndex(); } @@ -151,7 +160,7 @@ class GrVkImage : SkNoncopyable { #endif protected: - void releaseImage(GrVkGpu* gpu); + void releaseImage(); bool hasResource() const { return fResource; } GrVkImageInfo fInfo; diff --git a/src/gpu/vk/GrVkMemory.cpp b/src/gpu/vk/GrVkMemory.cpp index 7d82ae7208c53..08cee6e34629d 100644 --- a/src/gpu/vk/GrVkMemory.cpp +++ b/src/gpu/vk/GrVkMemory.cpp @@ -31,6 +31,16 @@ static BufferUsage get_buffer_usage(GrVkBuffer::Type type, bool dynamic) { SK_ABORT("Invalid GrVkBuffer::Type"); } +static bool check_result(GrVkGpu* gpu, VkResult result) { + if (result != VK_SUCCESS) { + if (result == VK_ERROR_DEVICE_LOST) { + gpu->setDeviceLost(); + } + return false; + } + return true; +} + bool GrVkMemory::AllocAndBindBufferMemory(GrVkGpu* gpu, VkBuffer buffer, GrVkBuffer::Type type, @@ -57,7 +67,8 @@ bool GrVkMemory::AllocAndBindBufferMemory(GrVkGpu* gpu, propFlags = AllocationPropertyFlags::kNone; } - if (!allocator->allocateMemoryForBuffer(buffer, usage, propFlags, &memory)) { + VkResult result = allocator->allocateBufferMemory(buffer, usage, propFlags, &memory); + if (!check_result(gpu, result)) { return false; } allocator->getAllocInfo(memory, alloc); @@ -106,9 +117,11 @@ bool GrVkMemory::AllocAndBindImageMemory(GrVkGpu* gpu, propFlags |= AllocationPropertyFlags::kProtected; } - if (!allocator->allocateMemoryForImage(image, propFlags, &memory)) { + VkResult result = allocator->allocateImageMemory(image, propFlags, &memory); + if (!check_result(gpu, result)) { return false; } + allocator->getAllocInfo(memory, alloc); // Bind buffer @@ -134,7 +147,12 @@ void* GrVkMemory::MapAlloc(GrVkGpu* gpu, const GrVkAlloc& alloc) { SkASSERT(GrVkAlloc::kMappable_Flag & alloc.fFlags); SkASSERT(alloc.fBackendMemory); GrVkMemoryAllocator* allocator = gpu->memoryAllocator(); - return allocator->mapMemory(alloc.fBackendMemory); + void* mapPtr; + VkResult result = allocator->mapMemory(alloc.fBackendMemory, &mapPtr); + if (!check_result(gpu, result)) { + return nullptr; + } + return mapPtr; } void GrVkMemory::UnmapAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc) { @@ -166,25 +184,27 @@ void GrVkMemory::GetNonCoherentMappedMemoryRange(const GrVkAlloc& alloc, VkDevic range->size = size; } -void GrVkMemory::FlushMappedAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc, VkDeviceSize offset, +void GrVkMemory::FlushMappedAlloc(GrVkGpu* gpu, const GrVkAlloc& alloc, VkDeviceSize offset, VkDeviceSize size) { if (alloc.fFlags & GrVkAlloc::kNoncoherent_Flag) { SkASSERT(offset == 0); SkASSERT(size <= alloc.fSize); SkASSERT(alloc.fBackendMemory); GrVkMemoryAllocator* allocator = gpu->memoryAllocator(); - allocator->flushMappedMemory(alloc.fBackendMemory, offset, size); + VkResult result = allocator->flushMemory(alloc.fBackendMemory, offset, size); + check_result(gpu, result); } } -void GrVkMemory::InvalidateMappedAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc, +void GrVkMemory::InvalidateMappedAlloc(GrVkGpu* gpu, const GrVkAlloc& alloc, VkDeviceSize offset, VkDeviceSize size) { if (alloc.fFlags & GrVkAlloc::kNoncoherent_Flag) { SkASSERT(offset == 0); SkASSERT(size <= alloc.fSize); SkASSERT(alloc.fBackendMemory); GrVkMemoryAllocator* allocator = gpu->memoryAllocator(); - allocator->invalidateMappedMemory(alloc.fBackendMemory, offset, size); + VkResult result = allocator->invalidateMemory(alloc.fBackendMemory, offset, size); + check_result(gpu, result); } } diff --git a/src/gpu/vk/GrVkMemory.h b/src/gpu/vk/GrVkMemory.h index db2c0e6606262..2cb91fd7b2b15 100644 --- a/src/gpu/vk/GrVkMemory.h +++ b/src/gpu/vk/GrVkMemory.h @@ -42,9 +42,9 @@ namespace GrVkMemory { // For the Flush and Invalidate calls, the offset should be relative to the GrVkAlloc. Thus this // will often be 0. The client does not need to make sure the offset and size are aligned to the // nonCoherentAtomSize, the internal calls will handle that. - void FlushMappedAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc, VkDeviceSize offset, + void FlushMappedAlloc(GrVkGpu* gpu, const GrVkAlloc& alloc, VkDeviceSize offset, VkDeviceSize size); - void InvalidateMappedAlloc(const GrVkGpu* gpu, const GrVkAlloc& alloc, VkDeviceSize offset, + void InvalidateMappedAlloc(GrVkGpu* gpu, const GrVkAlloc& alloc, VkDeviceSize offset, VkDeviceSize size); // Helper for aligning and setting VkMappedMemoryRange for flushing/invalidating noncoherent diff --git a/src/gpu/vk/GrVkOpsRenderPass.cpp b/src/gpu/vk/GrVkOpsRenderPass.cpp index 5828af8a41160..00f54b9008d79 100644 --- a/src/gpu/vk/GrVkOpsRenderPass.cpp +++ b/src/gpu/vk/GrVkOpsRenderPass.cpp @@ -11,7 +11,6 @@ #include "include/core/SkRect.h" #include "include/gpu/GrBackendDrawableInfo.h" #include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrFixedClip.h" #include "src/gpu/GrOpFlushState.h" #include "src/gpu/GrPipeline.h" #include "src/gpu/GrRenderTargetPriv.h" @@ -175,6 +174,9 @@ GrVkCommandBuffer* GrVkOpsRenderPass::currentCommandBuffer() { if (fCurrentSecondaryCommandBuffer) { return fCurrentSecondaryCommandBuffer.get(); } + // We checked this when we setup the GrVkOpsRenderPass and it should not have changed while we + // are still using this object. + SkASSERT(fGpu->currentCommandBuffer()); return fGpu->currentCommandBuffer(); } @@ -215,6 +217,13 @@ bool GrVkOpsRenderPass::set(GrRenderTarget* rt, GrStencilAttachment* stencil, fIsActive = true; #endif + // We check to make sure the GrVkGpu has a valid current command buffer instead of each time we + // access it. If the command buffer is valid here should be valid throughout the use of the + // render pass since nothing should trigger a submit while this render pass is active. + if (!fGpu->currentCommandBuffer()) { + return false; + } + this->INHERITED::set(rt, origin); for (int i = 0; i < sampledProxies.count(); ++i) { diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp index e98295a64507d..33bac857b5c7a 100644 --- a/src/gpu/vk/GrVkPipelineState.cpp +++ b/src/gpu/vk/GrVkPipelineState.cpp @@ -79,8 +79,7 @@ bool GrVkPipelineState::setAndBindUniforms(GrVkGpu* gpu, GrVkCommandBuffer* commandBuffer) { this->setRenderTargetState(renderTarget, programInfo.origin()); - GrFragmentProcessor::PipelineCoordTransformRange transformRange(programInfo.pipeline()); - fGeometryProcessor->setData(fDataManager, programInfo.primProc(), transformRange); + fGeometryProcessor->setData(fDataManager, programInfo.primProc()); GrFragmentProcessor::CIter fpIter(programInfo.pipeline()); GrGLSLFragmentProcessor::Iter glslIter(fFragmentProcessors.get(), fFragmentProcessorCnt); for (; fpIter && glslIter; ++fpIter, ++glslIter) { diff --git a/src/gpu/vk/GrVkPipelineStateBuilder.cpp b/src/gpu/vk/GrVkPipelineStateBuilder.cpp index 4347cf4034a3e..1e04c61a5b68d 100644 --- a/src/gpu/vk/GrVkPipelineStateBuilder.cpp +++ b/src/gpu/vk/GrVkPipelineStateBuilder.cpp @@ -19,8 +19,6 @@ #include "src/gpu/vk/GrVkRenderPass.h" #include "src/gpu/vk/GrVkRenderTarget.h" -typedef size_t shader_size; - GrVkPipelineState* GrVkPipelineStateBuilder::CreatePipelineState( GrVkGpu* gpu, GrRenderTarget* renderTarget, @@ -100,39 +98,49 @@ bool GrVkPipelineStateBuilder::installVkShaderModule(VkShaderStageFlagBits stage static constexpr SkFourByteTag kSPIRV_Tag = SkSetFourByteTag('S', 'P', 'R', 'V'); static constexpr SkFourByteTag kSKSL_Tag = SkSetFourByteTag('S', 'K', 'S', 'L'); -int GrVkPipelineStateBuilder::loadShadersFromCache(SkReader32* cached, +int GrVkPipelineStateBuilder::loadShadersFromCache(SkReadBuffer* cached, VkShaderModule outShaderModules[], VkPipelineShaderStageCreateInfo* outStageInfo) { SkSL::String shaders[kGrShaderTypeCount]; SkSL::Program::Inputs inputs[kGrShaderTypeCount]; - GrPersistentCacheUtils::UnpackCachedShaders(cached, shaders, inputs, kGrShaderTypeCount); + if (!GrPersistentCacheUtils::UnpackCachedShaders(cached, shaders, inputs, kGrShaderTypeCount)) { + return 0; + } - SkAssertResult(this->installVkShaderModule(VK_SHADER_STAGE_VERTEX_BIT, + bool success = this->installVkShaderModule(VK_SHADER_STAGE_VERTEX_BIT, fVS, &outShaderModules[kVertex_GrShaderType], &outStageInfo[0], shaders[kVertex_GrShaderType], - inputs[kVertex_GrShaderType])); + inputs[kVertex_GrShaderType]); - SkAssertResult(this->installVkShaderModule(VK_SHADER_STAGE_FRAGMENT_BIT, - fFS, - &outShaderModules[kFragment_GrShaderType], - &outStageInfo[1], - shaders[kFragment_GrShaderType], - inputs[kFragment_GrShaderType])); + success = success && this->installVkShaderModule(VK_SHADER_STAGE_FRAGMENT_BIT, + fFS, + &outShaderModules[kFragment_GrShaderType], + &outStageInfo[1], + shaders[kFragment_GrShaderType], + inputs[kFragment_GrShaderType]); if (!shaders[kGeometry_GrShaderType].empty()) { - SkAssertResult(this->installVkShaderModule(VK_SHADER_STAGE_GEOMETRY_BIT, - fGS, - &outShaderModules[kGeometry_GrShaderType], - &outStageInfo[2], - shaders[kGeometry_GrShaderType], - inputs[kGeometry_GrShaderType])); - return 3; - } else { - return 2; + success = success && this->installVkShaderModule(VK_SHADER_STAGE_GEOMETRY_BIT, + fGS, + &outShaderModules[kGeometry_GrShaderType], + &outStageInfo[2], + shaders[kGeometry_GrShaderType], + inputs[kGeometry_GrShaderType]); + } + + if (!success) { + for (int i = 0; i < kGrShaderTypeCount; ++i) { + if (outShaderModules[i]) { + GR_VK_CALL(fGpu->vkInterface(), + DestroyShaderModule(fGpu->device(), outShaderModules[i], nullptr)); + } + } + return 0; } + return shaders[kGeometry_GrShaderType].empty() ? 2 : 3; } void GrVkPipelineStateBuilder::storeShadersInCache(const SkSL::String shaders[], @@ -211,7 +219,7 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrProgramDesc& desc, SkASSERT(!this->fragColorIsInOut()); sk_sp cached; - SkReader32 reader; + SkReadBuffer reader; SkFourByteTag shaderType = 0; auto persistentCache = fGpu->getContext()->priv().getPersistentCache(); if (persistentCache) { @@ -231,7 +239,10 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrProgramDesc& desc, int numShaderStages = 0; if (kSPIRV_Tag == shaderType) { numShaderStages = this->loadShadersFromCache(&reader, shaderModules, shaderStageInfo); - } else { + } + + // Proceed from sources if we didn't get a SPIRV cache (or the cache was invalid) + if (!numShaderStages) { numShaderStages = 2; // We always have at least vertex and fragment stages. SkSL::String shaders[kGrShaderTypeCount]; SkSL::Program::Inputs inputs[kGrShaderTypeCount]; @@ -243,10 +254,11 @@ GrVkPipelineState* GrVkPipelineStateBuilder::finalize(const GrProgramDesc& desc, }; SkSL::String cached_sksl[kGrShaderTypeCount]; if (kSKSL_Tag == shaderType) { - GrPersistentCacheUtils::UnpackCachedShaders(&reader, cached_sksl, inputs, - kGrShaderTypeCount); - for (int i = 0; i < kGrShaderTypeCount; ++i) { - sksl[i] = &cached_sksl[i]; + if (GrPersistentCacheUtils::UnpackCachedShaders(&reader, cached_sksl, inputs, + kGrShaderTypeCount)) { + for (int i = 0; i < kGrShaderTypeCount; ++i) { + sksl[i] = &cached_sksl[i]; + } } } diff --git a/src/gpu/vk/GrVkPipelineStateBuilder.h b/src/gpu/vk/GrVkPipelineStateBuilder.h index 1eb5290f6a0dd..d13f47bee3ee8 100644 --- a/src/gpu/vk/GrVkPipelineStateBuilder.h +++ b/src/gpu/vk/GrVkPipelineStateBuilder.h @@ -19,7 +19,7 @@ class GrProgramDesc; class GrVkGpu; class GrVkRenderPass; -class SkReader32; +class SkReadBuffer; class GrVkPipelineStateBuilder : public GrGLSLProgramBuilder { public: @@ -48,7 +48,7 @@ class GrVkPipelineStateBuilder : public GrGLSLProgramBuilder { GrVkPipelineState* finalize(const GrProgramDesc&, VkRenderPass compatibleRenderPass); // returns number of shader stages - int loadShadersFromCache(SkReader32* cached, VkShaderModule outShaderModules[], + int loadShadersFromCache(SkReadBuffer* cached, VkShaderModule outShaderModules[], VkPipelineShaderStageCreateInfo* outStageInfo); void storeShadersInCache(const SkSL::String shaders[], const SkSL::Program::Inputs inputs[], diff --git a/src/gpu/vk/GrVkRenderPass.cpp b/src/gpu/vk/GrVkRenderPass.cpp index 281983f845143..bb4f1450dfc89 100644 --- a/src/gpu/vk/GrVkRenderPass.cpp +++ b/src/gpu/vk/GrVkRenderPass.cpp @@ -266,19 +266,25 @@ bool GrVkRenderPass::equalLoadStoreOps(const LoadStoreOps& colorOps, } void GrVkRenderPass::genKey(GrProcessorKeyBuilder* b) const { - b->add32(fAttachmentFlags); - if (fAttachmentFlags & kColor_AttachmentFlag) { - b->add32(fAttachmentsDescriptor.fColor.fFormat); - b->add32(fAttachmentsDescriptor.fColor.fSamples); + GenKey(b, fAttachmentFlags, fAttachmentsDescriptor, (uint64_t)fRenderPass); +} + +void GrVkRenderPass::GenKey(GrProcessorKeyBuilder* b, + AttachmentFlags attachmentFlags, + const AttachmentsDescriptor& attachmentsDescriptor, + uint64_t externalRenderPass) { + b->add32(attachmentFlags); + if (attachmentFlags & kColor_AttachmentFlag) { + b->add32(attachmentsDescriptor.fColor.fFormat); + b->add32(attachmentsDescriptor.fColor.fSamples); } - if (fAttachmentFlags & kStencil_AttachmentFlag) { - b->add32(fAttachmentsDescriptor.fStencil.fFormat); - b->add32(fAttachmentsDescriptor.fStencil.fSamples); + if (attachmentFlags & kStencil_AttachmentFlag) { + b->add32(attachmentsDescriptor.fStencil.fFormat); + b->add32(attachmentsDescriptor.fStencil.fSamples); } - if (fAttachmentFlags & kExternal_AttachmentFlag) { - SkASSERT(!(fAttachmentFlags & ~kExternal_AttachmentFlag)); - uint64_t handle = (uint64_t)fRenderPass; - b->add32((uint32_t)(handle & 0xFFFFFFFF)); - b->add32((uint32_t)(handle>>32)); + if (attachmentFlags & kExternal_AttachmentFlag) { + SkASSERT(!(attachmentFlags & ~kExternal_AttachmentFlag)); + b->add32((uint32_t)(externalRenderPass & 0xFFFFFFFF)); + b->add32((uint32_t)(externalRenderPass>>32)); } } diff --git a/src/gpu/vk/GrVkRenderPass.h b/src/gpu/vk/GrVkRenderPass.h index 5009e1ec3bb4f..9a0170d3932e2 100644 --- a/src/gpu/vk/GrVkRenderPass.h +++ b/src/gpu/vk/GrVkRenderPass.h @@ -108,6 +108,8 @@ class GrVkRenderPass : public GrVkManagedResource { bool isCompatibleExternalRP(VkRenderPass) const; + SkDEBUGCODE(bool isExternal() const { return fAttachmentFlags & kExternal_AttachmentFlag; }) + bool equalLoadStoreOps(const LoadStoreOps& colorOps, const LoadStoreOps& stencilOps) const; @@ -120,7 +122,12 @@ class GrVkRenderPass : public GrVkManagedResource { uint32_t clearValueCount() const { return fClearValueCount; } - void genKey(GrProcessorKeyBuilder* b) const; + void genKey(GrProcessorKeyBuilder*) const; + + static void GenKey(GrProcessorKeyBuilder*, + AttachmentFlags, + const AttachmentsDescriptor&, + uint64_t externalRenderPass); #ifdef SK_TRACE_MANAGED_RESOURCES void dumpInfo() const override { diff --git a/src/gpu/vk/GrVkRenderTarget.cpp b/src/gpu/vk/GrVkRenderTarget.cpp index f7249cd1032ca..74f0f4d2890a5 100644 --- a/src/gpu/vk/GrVkRenderTarget.cpp +++ b/src/gpu/vk/GrVkRenderTarget.cpp @@ -214,15 +214,6 @@ sk_sp GrVkRenderTarget::MakeWrappedRenderTarget( sk_sp GrVkRenderTarget::MakeSecondaryCBRenderTarget( GrVkGpu* gpu, SkISize dimensions, const GrVkDrawableInfo& vkInfo) { - // We only set the few properties of the GrVkImageInfo that we know like layout and format. The - // others we keep at the default "null" values. - GrVkImageInfo info; - info.fImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; - info.fFormat = vkInfo.fFormat; - - sk_sp mutableState(new GrBackendSurfaceMutableStateImpl( - VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_QUEUE_FAMILY_IGNORED)); - const GrVkRenderPass* rp = gpu->resourceProvider().findCompatibleExternalRenderPass(vkInfo.fCompatibleRenderPass, vkInfo.fColorAttachmentIndex); @@ -234,6 +225,15 @@ sk_sp GrVkRenderTarget::MakeSecondaryCBRenderTarget( return nullptr; } + // We only set the few properties of the GrVkImageInfo that we know like layout and format. The + // others we keep at the default "null" values. + GrVkImageInfo info; + info.fImageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; + info.fFormat = vkInfo.fFormat; + + sk_sp mutableState(new GrBackendSurfaceMutableStateImpl( + VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_QUEUE_FAMILY_IGNORED)); + GrVkRenderTarget* vkRT = new GrVkRenderTarget(gpu, dimensions, info, std::move(mutableState), rp, vkInfo.fSecondaryCommandBuffer); @@ -343,6 +343,36 @@ void GrVkRenderTarget::getAttachmentsDescriptor(GrVkRenderPass::AttachmentsDescr desc->fAttachmentCount = attachmentCount; } +void GrVkRenderTarget::ReconstructAttachmentsDescriptor(const GrVkCaps& vkCaps, + const GrProgramInfo& programInfo, + GrVkRenderPass::AttachmentsDescriptor* desc, + GrVkRenderPass::AttachmentFlags* flags) { + VkFormat format; + SkAssertResult(programInfo.backendFormat().asVkFormat(&format)); + + desc->fColor.fFormat = format; + desc->fColor.fSamples = programInfo.numSamples(); + *flags = GrVkRenderPass::kColor_AttachmentFlag; + uint32_t attachmentCount = 1; + + SkASSERT(!programInfo.isStencilEnabled() || programInfo.numStencilSamples()); + if (programInfo.numStencilSamples()) { + const GrVkCaps::StencilFormat& stencilFormat = vkCaps.preferredStencilFormat(); + desc->fStencil.fFormat = stencilFormat.fInternalFormat; + desc->fStencil.fSamples = programInfo.numStencilSamples(); +#ifdef SK_DEBUG + if (vkCaps.mixedSamplesSupport()) { + SkASSERT(desc->fStencil.fSamples >= desc->fColor.fSamples); + } else { + SkASSERT(desc->fStencil.fSamples == desc->fColor.fSamples); + } +#endif + *flags |= GrVkRenderPass::kStencil_AttachmentFlag; + ++attachmentCount; + } + desc->fAttachmentCount = attachmentCount; +} + GrVkRenderTarget::~GrVkRenderTarget() { // either release or abandon should have been called by the owner of this object. SkASSERT(!fMSAAImage); @@ -366,10 +396,8 @@ void GrVkRenderTarget::addResources(GrVkCommandBuffer& commandBuffer, bool withS } void GrVkRenderTarget::releaseInternalObjects() { - GrVkGpu* gpu = this->getVkGpu(); - if (fMSAAImage) { - fMSAAImage->releaseImage(gpu); + fMSAAImage->releaseImage(); fMSAAImage.reset(); } @@ -406,13 +434,13 @@ void GrVkRenderTarget::releaseInternalObjects() { void GrVkRenderTarget::onRelease() { this->releaseInternalObjects(); - this->releaseImage(this->getVkGpu()); + this->releaseImage(); GrRenderTarget::onRelease(); } void GrVkRenderTarget::onAbandon() { this->releaseInternalObjects(); - this->releaseImage(this->getVkGpu()); + this->releaseImage(); GrRenderTarget::onAbandon(); } diff --git a/src/gpu/vk/GrVkRenderTarget.h b/src/gpu/vk/GrVkRenderTarget.h index 94ad40f353b25..32149d15761f2 100644 --- a/src/gpu/vk/GrVkRenderTarget.h +++ b/src/gpu/vk/GrVkRenderTarget.h @@ -100,6 +100,14 @@ class GrVkRenderTarget: public GrRenderTarget, public virtual GrVkImage { GrVkRenderPass::AttachmentFlags* flags, bool withStencil) const; + // Reconstruct the render target attachment information from the programInfo. This includes + // which attachments the render target will have (color, stencil) and the attachments' formats + // and sample counts - cf. getAttachmentsDescriptor. + static void ReconstructAttachmentsDescriptor(const GrVkCaps& vkCaps, + const GrProgramInfo& programInfo, + GrVkRenderPass::AttachmentsDescriptor* desc, + GrVkRenderPass::AttachmentFlags* flags); + void addResources(GrVkCommandBuffer& commandBuffer, bool withStencil); void addWrappedGrSecondaryCommandBuffer(std::unique_ptr cmdBuffer) { diff --git a/src/gpu/vk/GrVkResourceProvider.cpp b/src/gpu/vk/GrVkResourceProvider.cpp index b6a058cca6946..e5c2785335be1 100644 --- a/src/gpu/vk/GrVkResourceProvider.cpp +++ b/src/gpu/vk/GrVkResourceProvider.cpp @@ -365,12 +365,11 @@ void GrVkResourceProvider::checkCommandBuffers() { } void GrVkResourceProvider::addFinishedProcToActiveCommandBuffers( - GrGpuFinishedProc finishedProc, GrGpuFinishedContext finishedContext) { - sk_sp procRef(new GrRefCntedCallback(finishedProc, finishedContext)); + sk_sp finishedCallback) { for (int i = 0; i < fActiveCommandPools.count(); ++i) { GrVkCommandPool* pool = fActiveCommandPools[i]; GrVkPrimaryCommandBuffer* buffer = pool->getPrimaryCommandBuffer(); - buffer->addFinishedProc(procRef); + buffer->addFinishedProc(finishedCallback); } } diff --git a/src/gpu/vk/GrVkResourceProvider.h b/src/gpu/vk/GrVkResourceProvider.h index 0ba90e747f543..a3d72cf8b98a3 100644 --- a/src/gpu/vk/GrVkResourceProvider.h +++ b/src/gpu/vk/GrVkResourceProvider.h @@ -91,8 +91,7 @@ class GrVkResourceProvider { // that the client cares about before they explicitly called flush and the GPU may reorder // command execution. So we make sure all previously submitted work finishes before we call the // finishedProc. - void addFinishedProcToActiveCommandBuffers(GrGpuFinishedProc finishedProc, - GrGpuFinishedContext finishedContext); + void addFinishedProcToActiveCommandBuffers(sk_sp finishedCallback); // Finds or creates a compatible GrVkDescriptorPool for the requested type and count. // The refcount is incremented and a pointer returned. diff --git a/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp b/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp index b547526c43f54..29468b33931df 100644 --- a/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp +++ b/src/gpu/vk/GrVkSecondaryCBDrawContext.cpp @@ -153,7 +153,11 @@ bool GrVkSecondaryCBDrawContext::isCompatible( characterization.surfaceProps() == rtc->surfaceProps(); } -bool GrVkSecondaryCBDrawContext::draw(SkDeferredDisplayList* ddl) { +#ifndef SK_DDL_IS_UNIQUE_POINTER +bool GrVkSecondaryCBDrawContext::draw(sk_sp ddl) { +#else +bool GrVkSecondaryCBDrawContext::draw(const SkDeferredDisplayList* ddl) { +#endif if (!ddl || !this->isCompatible(ddl->characterization())) { return false; } @@ -161,7 +165,7 @@ bool GrVkSecondaryCBDrawContext::draw(SkDeferredDisplayList* ddl) { GrRenderTargetContext* rtc = fDevice->accessRenderTargetContext(); GrContext* ctx = fDevice->context(); - ctx->priv().copyRenderTasksFromDDL(ddl, rtc->asRenderTargetProxy()); + ctx->priv().copyRenderTasksFromDDL(std::move(ddl), rtc->asRenderTargetProxy()); return true; } diff --git a/src/gpu/vk/GrVkSecondaryCBDrawContext.h b/src/gpu/vk/GrVkSecondaryCBDrawContext.h index f56ae0acaeb72..544563d256c26 100644 --- a/src/gpu/vk/GrVkSecondaryCBDrawContext.h +++ b/src/gpu/vk/GrVkSecondaryCBDrawContext.h @@ -96,7 +96,12 @@ class SK_SPI GrVkSecondaryCBDrawContext : public SkRefCnt { // TODO: Fill out these calls to support DDL bool characterize(SkSurfaceCharacterization* characterization) const; - bool draw(SkDeferredDisplayList* deferredDisplayList); + +#ifndef SK_DDL_IS_UNIQUE_POINTER + bool draw(sk_sp deferredDisplayList); +#else + bool draw(const SkDeferredDisplayList* deferredDisplayList); +#endif private: explicit GrVkSecondaryCBDrawContext(sk_sp, const SkSurfaceProps*); diff --git a/src/gpu/vk/GrVkSemaphore.cpp b/src/gpu/vk/GrVkSemaphore.cpp index ee68cdd68a380..23bf656bf866d 100644 --- a/src/gpu/vk/GrVkSemaphore.cpp +++ b/src/gpu/vk/GrVkSemaphore.cpp @@ -38,6 +38,7 @@ std::unique_ptr GrVkSemaphore::MakeWrapped(GrVkGpu* gpu, WrapType wrapType, GrWrapOwnership ownership) { if (VK_NULL_HANDLE == semaphore) { + SkDEBUGFAIL("Trying to wrap an invalid VkSemaphore"); return nullptr; } bool prohibitSignal = WrapType::kWillWait == wrapType; diff --git a/src/gpu/vk/GrVkStencilAttachment.cpp b/src/gpu/vk/GrVkStencilAttachment.cpp index 3d43a286b9887..63a90ddb647db 100644 --- a/src/gpu/vk/GrVkStencilAttachment.cpp +++ b/src/gpu/vk/GrVkStencilAttachment.cpp @@ -81,8 +81,7 @@ size_t GrVkStencilAttachment::onGpuMemorySize() const { } void GrVkStencilAttachment::onRelease() { - GrVkGpu* gpu = this->getVkGpu(); - this->releaseImage(gpu); + this->releaseImage(); fStencilView->unref(); fStencilView = nullptr; @@ -90,8 +89,7 @@ void GrVkStencilAttachment::onRelease() { } void GrVkStencilAttachment::onAbandon() { - GrVkGpu* gpu = this->getVkGpu(); - this->releaseImage(gpu); + this->releaseImage(); fStencilView->unref(); fStencilView = nullptr; diff --git a/src/gpu/vk/GrVkTexture.cpp b/src/gpu/vk/GrVkTexture.cpp index ec98f29e89c16..c930a288a5907 100644 --- a/src/gpu/vk/GrVkTexture.cpp +++ b/src/gpu/vk/GrVkTexture.cpp @@ -149,7 +149,7 @@ void GrVkTexture::onRelease() { fDescSetCache.reset(); - this->releaseImage(this->getVkGpu()); + this->releaseImage(); INHERITED::onRelease(); } @@ -183,7 +183,7 @@ void GrVkTexture::onAbandon() { fDescSetCache.reset(); - this->releaseImage(this->getVkGpu()); + this->releaseImage(); INHERITED::onAbandon(); } diff --git a/src/gpu/vk/GrVkTypesPriv.cpp b/src/gpu/vk/GrVkTypesPriv.cpp index 99d0cee28f0ea..5360ab46b5d89 100644 --- a/src/gpu/vk/GrVkTypesPriv.cpp +++ b/src/gpu/vk/GrVkTypesPriv.cpp @@ -27,10 +27,12 @@ GrVkImageInfo GrVkBackendSurfaceInfo::snapImageInfo( bool GrVkBackendSurfaceInfo::operator==(const GrVkBackendSurfaceInfo& that) const { GrVkImageInfo cpyInfoThis = fImageInfo; GrVkImageInfo cpyInfoThat = that.fImageInfo; - // We don't care about the fImageLayout here since we require they use the same - // GrVkImageLayout. + // We don't care about the fImageLayout or fCurrentQueueFamily here since we require they use + // the same mutableState. cpyInfoThis.fImageLayout = VK_IMAGE_LAYOUT_UNDEFINED; cpyInfoThat.fImageLayout = VK_IMAGE_LAYOUT_UNDEFINED; + cpyInfoThis.fCurrentQueueFamily = VK_QUEUE_FAMILY_IGNORED; + cpyInfoThat.fCurrentQueueFamily = VK_QUEUE_FAMILY_IGNORED; return cpyInfoThis == cpyInfoThat; } #endif diff --git a/src/gpu/vk/GrVkUniformHandler.h b/src/gpu/vk/GrVkUniformHandler.h index 135d6ad551266..19572d8329aed 100644 --- a/src/gpu/vk/GrVkUniformHandler.h +++ b/src/gpu/vk/GrVkUniformHandler.h @@ -63,6 +63,9 @@ class GrVkUniformHandler : public GrGLSLUniformHandler { UniformInfo& uniform(int idx) override { return fUniforms.item(idx); } + const UniformInfo& uniform(int idx) const override { + return fUniforms.item(idx); + } private: explicit GrVkUniformHandler(GrGLSLProgramBuilder* program) diff --git a/src/gpu/vk/GrVkUtil.cpp b/src/gpu/vk/GrVkUtil.cpp index bd73858bd6568..892d60558310e 100644 --- a/src/gpu/vk/GrVkUtil.cpp +++ b/src/gpu/vk/GrVkUtil.cpp @@ -151,12 +151,3 @@ bool GrVkFormatIsCompressed(VkFormat vkFormat) { SkUNREACHABLE; } -SkImage::CompressionType GrVkFormatToCompressionType(VkFormat vkFormat) { - switch (vkFormat) { - case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: return SkImage::CompressionType::kETC2_RGB8_UNORM; - case VK_FORMAT_BC1_RGB_UNORM_BLOCK: return SkImage::CompressionType::kBC1_RGB8_UNORM; - case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: return SkImage::CompressionType::kBC1_RGBA8_UNORM; - default: return SkImage::CompressionType::kNone; - } - SkUNREACHABLE; -} diff --git a/src/gpu/vk/GrVkUtil.h b/src/gpu/vk/GrVkUtil.h index e66cd81fc9f9d..ba24ea4d2d6c8 100644 --- a/src/gpu/vk/GrVkUtil.h +++ b/src/gpu/vk/GrVkUtil.h @@ -21,25 +21,31 @@ class GrVkGpu; // makes a Vk call on the interface #define GR_VK_CALL(IFACE, X) (IFACE)->fFunctions.f##X -#define GR_VK_CALL_RESULT(GPU, RESULT, X) \ - do { \ - (RESULT) = GR_VK_CALL(GPU->vkInterface(), X); \ - SkASSERT(VK_SUCCESS == RESULT || VK_ERROR_DEVICE_LOST == RESULT); \ - if (RESULT != VK_SUCCESS && !GPU->isDeviceLost()) { \ - SkDebugf("Failed vulkan call. Error: %d\n", RESULT); \ - } \ - if (VK_ERROR_DEVICE_LOST == RESULT) { \ - GPU->setDeviceLost(); \ - } \ - } while(false) - -#define GR_VK_CALL_RESULT_NOCHECK(GPU, RESULT, X) \ - do { \ - (RESULT) = GR_VK_CALL(GPU->vkInterface(), X); \ - if (VK_ERROR_DEVICE_LOST == RESULT) { \ - GPU->setDeviceLost(); \ - } \ - } while(false) +#define GR_VK_CALL_RESULT(GPU, RESULT, X) \ + do { \ + (RESULT) = GR_VK_CALL(GPU->vkInterface(), X); \ + SkASSERT(VK_SUCCESS == RESULT || VK_ERROR_DEVICE_LOST == RESULT); \ + if (RESULT != VK_SUCCESS && !GPU->isDeviceLost()) { \ + SkDebugf("Failed vulkan call. Error: %d," #X "\n", RESULT); \ + } \ + if (RESULT == VK_ERROR_DEVICE_LOST) { \ + GPU->setDeviceLost(); \ + } else if (RESULT == VK_ERROR_OUT_OF_HOST_MEMORY || \ + RESULT == VK_ERROR_OUT_OF_DEVICE_MEMORY) { \ + GPU->setOOMed(); \ + } \ + } while (false) + +#define GR_VK_CALL_RESULT_NOCHECK(GPU, RESULT, X) \ + do { \ + (RESULT) = GR_VK_CALL(GPU->vkInterface(), X); \ + if (RESULT == VK_ERROR_DEVICE_LOST) { \ + GPU->setDeviceLost(); \ + } else if (RESULT == VK_ERROR_OUT_OF_HOST_MEMORY || \ + RESULT == VK_ERROR_OUT_OF_DEVICE_MEMORY) { \ + GPU->setOOMed(); \ + } \ + } while (false) // same as GR_VK_CALL but checks for success #define GR_VK_CALL_ERRCHECK(GPU, X) \ @@ -101,11 +107,6 @@ bool GrInstallVkShaderModule(GrVkGpu* gpu, */ bool GrVkFormatIsCompressed(VkFormat); -/** - * Maps a vk format into the CompressionType enum if applicable. - */ -SkImage::CompressionType GrVkFormatToCompressionType(VkFormat vkFormat); - #if GR_TEST_UTILS static constexpr const char* GrVkFormatToStr(VkFormat vkFormat) { switch (vkFormat) { diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index fff0c33b1baa4..63887e3681681 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -24,6 +24,7 @@ #include "src/core/SkSpecialImage.h" #include "src/image/SkImage_Base.h" #include "src/image/SkReadPixelsRec.h" +#include "src/image/SkRescaleAndReadPixels.h" #include "src/shaders/SkImageShader.h" #if SK_SUPPORT_GPU @@ -52,6 +53,44 @@ bool SkImage::readPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dst return as_IB(this)->onReadPixels(dstInfo, dstPixels, dstRowBytes, srcX, srcY, chint); } +void SkImage::asyncRescaleAndReadPixels(const SkImageInfo& info, + const SkIRect& srcRect, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context) { + if (!SkIRect::MakeWH(this->width(), this->height()).contains(srcRect) || + !SkImageInfoIsValid(info)) { + callback(context, nullptr); + return; + } + as_IB(this)->onAsyncRescaleAndReadPixels( + info, srcRect, rescaleGamma, rescaleQuality, callback, context); +} + +void SkImage::asyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, + sk_sp dstColorSpace, + const SkIRect& srcRect, + const SkISize& dstSize, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context) { + if (!SkIRect::MakeWH(this->width(), this->height()).contains(srcRect) || dstSize.isZero() || + (dstSize.width() & 0b1) || (dstSize.height() & 0b1)) { + callback(context, nullptr); + return; + } + as_IB(this)->onAsyncRescaleAndReadPixelsYUV420(yuvColorSpace, + std::move(dstColorSpace), + srcRect, + dstSize, + rescaleGamma, + rescaleQuality, + callback, + context); +} + bool SkImage::scalePixels(const SkPixmap& dst, SkFilterQuality quality, CachingHint chint) const { if (this->width() == dst.width() && this->height() == dst.height()) { return this->readPixels(dst, 0, 0, chint); @@ -84,7 +123,14 @@ sk_sp SkImage::refColorSpace() const { return fInfo.refColorSpace( sk_sp SkImage::makeShader(SkTileMode tmx, SkTileMode tmy, const SkMatrix* localMatrix) const { - return SkImageShader::Make(sk_ref_sp(const_cast(this)), tmx, tmy, localMatrix); + return SkImageShader::Make(sk_ref_sp(const_cast(this)), tmx, tmy, localMatrix, + SkImageShader::kInheritFromPaint); +} + +sk_sp SkImage::makeShader(SkTileMode tmx, SkTileMode tmy, + const SkMatrix* localMatrix, SkFilterQuality filtering) const { + return SkImageShader::Make(sk_ref_sp(const_cast(this)), tmx, tmy, localMatrix, + SkImageShader::FilterEnum(filtering)); } sk_sp SkImage::encodeToData(SkEncodedImageFormat type, int quality) const { @@ -200,6 +246,44 @@ SkImage_Base::~SkImage_Base() { } } +void SkImage_Base::onAsyncRescaleAndReadPixels(const SkImageInfo& info, + const SkIRect& origSrcRect, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context) { + SkBitmap src; + SkPixmap peek; + SkIRect srcRect; + if (this->peekPixels(&peek)) { + src.installPixels(peek); + srcRect = origSrcRect; + } else { + src.setInfo(this->imageInfo().makeDimensions(origSrcRect.size())); + src.allocPixels(); + if (!this->readPixels(src.pixmap(), origSrcRect.x(), origSrcRect.y())) { + callback(context, nullptr); + return; + } + srcRect = SkIRect::MakeSize(src.dimensions()); + } + return SkRescaleAndReadPixels( + src, info, srcRect, rescaleGamma, rescaleQuality, callback, context); +} + +void SkImage_Base::onAsyncRescaleAndReadPixelsYUV420(SkYUVColorSpace, + sk_sp dstColorSpace, + const SkIRect& srcRect, + const SkISize& dstSize, + RescaleGamma, + SkFilterQuality, + ReadPixelsCallback callback, + ReadPixelsContext context) { + // TODO: Call non-YUV asyncRescaleAndReadPixels and then make our callback convert to YUV and + // call client's callback. + callback(context, nullptr); +} + GrBackendTexture SkImage_Base::onGetBackendTexture(bool flushPendingGrContextIO, GrSurfaceOrigin* origin) const { return GrBackendTexture(); // invalid diff --git a/src/image/SkImage_Base.h b/src/image/SkImage_Base.h index ff9271504b7d1..da8b71fc5e579 100644 --- a/src/image/SkImage_Base.h +++ b/src/image/SkImage_Base.h @@ -46,6 +46,27 @@ class SkImage_Base : public SkImage { virtual bool onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRowBytes, int srcX, int srcY, CachingHint) const = 0; + /** + * Default implementation does a rescale/read and then calls the callback. + */ + virtual void onAsyncRescaleAndReadPixels(const SkImageInfo&, + const SkIRect& srcRect, + RescaleGamma, + SkFilterQuality, + ReadPixelsCallback, + ReadPixelsContext); + /** + * Default implementation does a rescale/read/yuv conversion and then calls the callback. + */ + virtual void onAsyncRescaleAndReadPixelsYUV420(SkYUVColorSpace, + sk_sp dstColorSpace, + const SkIRect& srcRect, + const SkISize& dstSize, + RescaleGamma, + SkFilterQuality, + ReadPixelsCallback, + ReadPixelsContext); + virtual GrContext* context() const { return nullptr; } #if SK_SUPPORT_GPU diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp index 4c07c2089a715..6bc86549463e4 100644 --- a/src/image/SkImage_Gpu.cpp +++ b/src/image/SkImage_Gpu.cpp @@ -12,7 +12,7 @@ #include "include/core/SkCanvas.h" #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/SkImageInfoPriv.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkBitmapCache.h" @@ -22,6 +22,7 @@ #include "src/gpu/GrAHardwareBufferImageGenerator.h" #include "src/gpu/GrAHardwareBufferUtils.h" #include "src/gpu/GrBackendTextureImageGenerator.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColorSpaceXform.h" @@ -86,7 +87,8 @@ sk_sp SkImage_Gpu::onMakeColorTypeAndColorSpace(GrRecordingContext* con return nullptr; } - auto xform = GrColorSpaceXformEffect::Make(this->colorSpace(), this->alphaType(), + auto xform = GrColorSpaceXformEffect::Make(/*childFP=*/nullptr, + this->colorSpace(), this->alphaType(), targetCS.get(), this->alphaType()); SkASSERT(xform || targetCT != this->colorType()); @@ -122,6 +124,47 @@ sk_sp SkImage_Gpu::onReinterpretColorSpace(sk_sp newCS) c this->alphaType(), std::move(newCS)); } +void SkImage_Gpu::onAsyncRescaleAndReadPixels(const SkImageInfo& info, + const SkIRect& srcRect, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context) { + GrColorType ct = SkColorTypeToGrColorType(this->colorType()); + auto ctx = GrSurfaceContext::Make(fContext.get(), fView, ct, this->alphaType(), + this->refColorSpace()); + if (!ctx) { + callback(context, nullptr); + return; + } + ctx->asyncRescaleAndReadPixels(info, srcRect, rescaleGamma, rescaleQuality, callback, context); +} + +void SkImage_Gpu::onAsyncRescaleAndReadPixelsYUV420(SkYUVColorSpace yuvColorSpace, + sk_sp dstColorSpace, + const SkIRect& srcRect, + const SkISize& dstSize, + RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + ReadPixelsCallback callback, + ReadPixelsContext context) { + GrColorType ct = SkColorTypeToGrColorType(this->colorType()); + auto ctx = GrSurfaceContext::Make(fContext.get(), fView, ct, this->alphaType(), + this->refColorSpace()); + if (!ctx) { + callback(context, nullptr); + return; + } + ctx->asyncRescaleAndReadPixelsYUV420(yuvColorSpace, + std::move(dstColorSpace), + srcRect, + dstSize, + rescaleGamma, + rescaleQuality, + callback, + context); +} + /////////////////////////////////////////////////////////////////////////////////////////////////// static sk_sp new_wrapped_texture_common(GrContext* ctx, @@ -129,15 +172,14 @@ static sk_sp new_wrapped_texture_common(GrContext* ctx, GrColorType colorType, GrSurfaceOrigin origin, SkAlphaType at, sk_sp colorSpace, GrWrapOwnership ownership, - SkImage::TextureReleaseProc releaseProc, - SkImage::ReleaseContext releaseCtx) { + sk_sp releaseHelper) { if (!backendTex.isValid() || backendTex.width() <= 0 || backendTex.height() <= 0) { return nullptr; } GrProxyProvider* proxyProvider = ctx->priv().proxyProvider(); sk_sp proxy = proxyProvider->wrapBackendTexture( - backendTex, ownership, GrWrapCacheable::kNo, kRead_GrIOType, releaseProc, releaseCtx); + backendTex, ownership, GrWrapCacheable::kNo, kRead_GrIOType, std::move(releaseHelper)); if (!proxy) { return nullptr; } @@ -155,6 +197,11 @@ sk_sp SkImage::MakeFromCompressedTexture(GrContext* ctx, sk_sp cs, TextureReleaseProc releaseP, ReleaseContext releaseC) { + sk_sp releaseHelper; + if (releaseP) { + releaseHelper.reset(new GrRefCntedCallback(releaseP, releaseC)); + } + if (!ctx) { return nullptr; } @@ -167,12 +214,12 @@ sk_sp SkImage::MakeFromCompressedTexture(GrContext* ctx, GrProxyProvider* proxyProvider = ctx->priv().proxyProvider(); sk_sp proxy = proxyProvider->wrapCompressedBackendTexture( - tex, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, releaseP, releaseC); + tex, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, std::move(releaseHelper)); if (!proxy) { return nullptr; } - CompressionType type = caps->compressionType(tex.getBackendFormat()); + CompressionType type = GrBackendFormatToCompressionType(tex.getBackendFormat()); SkColorType ct = GrCompressionTypeToSkColorType(type); GrSurfaceProxyView view(std::move(proxy), origin, GrSwizzle::RGBA()); @@ -184,6 +231,13 @@ sk_sp SkImage::MakeFromTexture(GrContext* ctx, const GrBackendTexture& tex, GrSurfaceOrigin origin, SkColorType ct, SkAlphaType at, sk_sp cs, TextureReleaseProc releaseP, ReleaseContext releaseC) { +#ifndef SK_LEGACY_MAKEFROMTEXTURE_BEHAVIOR + sk_sp releaseHelper; + if (releaseP) { + releaseHelper.reset(new GrRefCntedCallback(releaseP, releaseC)); + } +#endif + if (!ctx) { return nullptr; } @@ -199,8 +253,15 @@ sk_sp SkImage::MakeFromTexture(GrContext* ctx, return nullptr; } +#ifdef SK_LEGACY_MAKEFROMTEXTURE_BEHAVIOR + sk_sp releaseHelper; + if (releaseP) { + releaseHelper.reset(new GrRefCntedCallback(releaseP, releaseC)); + } +#endif + return new_wrapped_texture_common(ctx, tex, grColorType, origin, at, std::move(cs), - kBorrow_GrWrapOwnership, releaseP, releaseC); + kBorrow_GrWrapOwnership, std::move(releaseHelper)); } sk_sp SkImage::MakeFromAdoptedTexture(GrContext* ctx, @@ -224,7 +285,7 @@ sk_sp SkImage::MakeFromAdoptedTexture(GrContext* ctx, } return new_wrapped_texture_common(ctx, tex, grColorType, origin, at, std::move(cs), - kAdopt_GrWrapOwnership, nullptr, nullptr); + kAdopt_GrWrapOwnership, nullptr); } sk_sp SkImage::MakeTextureFromCompressed(GrContext* context, sk_sp data, @@ -272,7 +333,7 @@ sk_sp SkImage_Gpu::ConvertYUVATexturesToRGB(GrContext* ctx, SkYUVColorS GrSurfaceProxyView tempViews[4]; if (!SkImage_GpuBase::MakeTempTextureProxies(ctx, yuvaTextures, numTextures, yuvaIndices, - origin, tempViews)) { + origin, tempViews, nullptr)) { return nullptr; } @@ -321,6 +382,11 @@ sk_sp SkImage::MakeFromYUVATexturesCopyWithExternalBackend( ReleaseContext releaseContext) { const GrCaps* caps = ctx->priv().caps(); + sk_sp releaseHelper; + if (textureReleaseProc) { + releaseHelper.reset(new GrRefCntedCallback(textureReleaseProc, releaseContext)); + } + GrColorType grColorType = SkColorTypeAndFormatToGrColorType(caps, kRGBA_8888_SkColorType, backendTexture.getBackendFormat()); if (GrColorType::kUnknown == grColorType) { @@ -337,7 +403,7 @@ sk_sp SkImage::MakeFromYUVATexturesCopyWithExternalBackend( // in order to draw to it for the yuv->rgb conversion. auto renderTargetContext = GrRenderTargetContext::MakeFromBackendTexture( ctx, grColorType, std::move(imageColorSpace), backendTexture, 1, imageOrigin, - nullptr, textureReleaseProc, releaseContext); + nullptr, std::move(releaseHelper)); if (!renderTargetContext) { return nullptr; } @@ -522,6 +588,10 @@ sk_sp SkImage_Gpu::MakePromiseTexture(GrContext* context, return nullptr; } + if (!context->priv().caps()->areColorTypeAndFormatCompatible(grColorType, backendFormat)) { + return nullptr; + } + callDone.clear(); auto proxy = MakePromiseImageLazyProxy(context, width, height, backendFormat, mipMapped, textureFulfillProc, textureReleaseProc, @@ -639,6 +709,9 @@ sk_sp SkImage::MakeFromAHardwareBufferWithData(GrContext* context, } SkASSERT(deleteImageProc); + sk_sp releaseHelper(new GrRefCntedCallback(deleteImageProc, + deleteImageCtx)); + SkColorType colorType = GrAHardwareBufferUtils::GetSkColorTypeFromBufferFormat(bufferDesc.format); @@ -646,15 +719,13 @@ sk_sp SkImage::MakeFromAHardwareBufferWithData(GrContext* context, GrProxyProvider* proxyProvider = context->priv().proxyProvider(); if (!proxyProvider) { - deleteImageProc(deleteImageCtx); return nullptr; } sk_sp proxy = proxyProvider->wrapBackendTexture( backendTexture, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, kRW_GrIOType, - deleteImageProc, deleteImageCtx); + std::move(releaseHelper)); if (!proxy) { - deleteImageProc(deleteImageCtx); return nullptr; } @@ -682,11 +753,8 @@ sk_sp SkImage::MakeFromAHardwareBufferWithData(GrContext* context, std::move(cs)); surfaceContext.writePixels(srcInfo, pixmap.addr(0, 0), pixmap.rowBytes(), {0, 0}); - GrFlushInfo info; - info.fFlags = kSyncCpu_GrFlushFlag; GrSurfaceProxy* p[1] = {surfaceContext.asSurfaceProxy()}; - drawingManager->flush(p, 1, SkSurface::BackendSurfaceAccess::kNoAccess, info, - GrPrepareForExternalIORequests()); + drawingManager->flush(p, 1, SkSurface::BackendSurfaceAccess::kNoAccess, {}, nullptr); return image; } diff --git a/src/image/SkImage_Gpu.h b/src/image/SkImage_Gpu.h index 1237d8284f432..3a6015d547035 100644 --- a/src/image/SkImage_Gpu.h +++ b/src/image/SkImage_Gpu.h @@ -50,6 +50,22 @@ class SkImage_Gpu : public SkImage_GpuBase { sk_sp onReinterpretColorSpace(sk_sp) const final; + void onAsyncRescaleAndReadPixels(const SkImageInfo&, + const SkIRect& srcRect, + RescaleGamma, + SkFilterQuality, + ReadPixelsCallback, + ReadPixelsContext) override; + + void onAsyncRescaleAndReadPixelsYUV420(SkYUVColorSpace, + sk_sp, + const SkIRect& srcRect, + const SkISize& dstSize, + RescaleGamma, + SkFilterQuality, + ReadPixelsCallback, + ReadPixelsContext) override; + /** * This is the implementation of SkDeferredDisplayListRecorder::makePromiseImage. */ diff --git a/src/image/SkImage_GpuBase.cpp b/src/image/SkImage_GpuBase.cpp index d676d257b1eed..2954157ee7fcd 100644 --- a/src/image/SkImage_GpuBase.cpp +++ b/src/image/SkImage_GpuBase.cpp @@ -10,13 +10,13 @@ #include "include/core/SkPromiseImageTexture.h" #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkBitmapCache.h" #include "src/core/SkTLList.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" #include "src/gpu/GrProxyProvider.h" -#include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrTexture.h" #include "src/gpu/GrTextureAdjuster.h" @@ -86,7 +86,7 @@ bool SkImage_GpuBase::ValidateCompressedBackendTexture(const GrCaps* caps, ////////////////////////////////////////////////////////////////////////////////////////////////// bool SkImage_GpuBase::getROPixels(SkBitmap* dst, CachingHint chint) const { - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { // DDL TODO: buffer up the readback so it occurs when the DDL is drawn? return false; @@ -157,7 +157,7 @@ sk_sp SkImage_GpuBase::onMakeSubset(GrRecordingContext* context, bool SkImage_GpuBase::onReadPixels(const SkImageInfo& dstInfo, void* dstPixels, size_t dstRB, int srcX, int srcY, CachingHint) const { - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { // DDL TODO: buffer up the readback so it occurs when the DDL is drawn? return false; @@ -195,7 +195,7 @@ GrSurfaceProxyView SkImage_GpuBase::refView(GrRecordingContext* context, GrBackendTexture SkImage_GpuBase::onGetBackendTexture(bool flushPendingGrContextIO, GrSurfaceOrigin* origin) const { - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { // This image was created with a DDL context and cannot be instantiated. return GrBackendTexture(); // invalid @@ -232,7 +232,7 @@ GrTexture* SkImage_GpuBase::getTexture() const { return proxy->peekTexture(); } - auto direct = fContext->priv().asDirectContext(); + auto direct = fContext->asDirectContext(); if (!direct) { // This image was created with a DDL context and cannot be instantiated. return nullptr; @@ -250,7 +250,7 @@ GrTexture* SkImage_GpuBase::getTexture() const { bool SkImage_GpuBase::onIsValid(GrContext* context) const { // The base class has already checked that context isn't abandoned (if it's not nullptr) - if (fContext->priv().abandoned()) { + if (fContext->abandoned()) { return false; } @@ -261,10 +261,13 @@ bool SkImage_GpuBase::onIsValid(GrContext* context) const { return true; } -bool SkImage_GpuBase::MakeTempTextureProxies(GrContext* ctx, const GrBackendTexture yuvaTextures[], - int numTextures, const SkYUVAIndex yuvaIndices[4], +bool SkImage_GpuBase::MakeTempTextureProxies(GrContext* ctx, + const GrBackendTexture yuvaTextures[], + int numTextures, + const SkYUVAIndex yuvaIndices[4], GrSurfaceOrigin imageOrigin, - GrSurfaceProxyView tempViews[4]) { + GrSurfaceProxyView tempViews[4], + sk_sp releaseHelper) { GrProxyProvider* proxyProvider = ctx->priv().proxyProvider(); for (int textureIndex = 0; textureIndex < numTextures; ++textureIndex) { const GrBackendFormat& backendFormat = yuvaTextures[textureIndex].getBackendFormat(); @@ -276,7 +279,8 @@ bool SkImage_GpuBase::MakeTempTextureProxies(GrContext* ctx, const GrBackendText auto proxy = proxyProvider->wrapBackendTexture(yuvaTextures[textureIndex], kBorrow_GrWrapOwnership, - GrWrapCacheable::kNo, kRead_GrIOType); + GrWrapCacheable::kNo, kRead_GrIOType, + releaseHelper); if (!proxy) { return false; } diff --git a/src/image/SkImage_GpuBase.h b/src/image/SkImage_GpuBase.h index 67b53c8eda966..ae332fc972262 100644 --- a/src/image/SkImage_GpuBase.h +++ b/src/image/SkImage_GpuBase.h @@ -55,7 +55,8 @@ class SkImage_GpuBase : public SkImage_Base { static bool MakeTempTextureProxies(GrContext* ctx, const GrBackendTexture yuvaTextures[], int numTextures, const SkYUVAIndex [4], GrSurfaceOrigin imageOrigin, - GrSurfaceProxyView tempViews[4]); + GrSurfaceProxyView tempViews[4], + sk_sp releaseHelper); static SkAlphaType GetAlphaTypeFromYUVAIndices(const SkYUVAIndex yuvaIndices[4]) { return -1 != yuvaIndices[SkYUVAIndex::kA_Index].fIndex ? kPremul_SkAlphaType diff --git a/src/image/SkImage_GpuYUVA.cpp b/src/image/SkImage_GpuYUVA.cpp index a9b4bb02a5002..63811088831e6 100644 --- a/src/image/SkImage_GpuYUVA.cpp +++ b/src/image/SkImage_GpuYUVA.cpp @@ -11,7 +11,7 @@ #include "include/core/SkYUVASizeInfo.h" #include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkMipMap.h" #include "src/core/SkScopeExit.h" @@ -235,7 +235,14 @@ sk_sp SkImage::MakeFromYUVATextures(GrContext* ctx, const SkYUVAIndex yuvaIndices[4], SkISize imageSize, GrSurfaceOrigin imageOrigin, - sk_sp imageColorSpace) { + sk_sp imageColorSpace, + TextureReleaseProc textureReleaseProc, + ReleaseContext releaseContext) { + sk_sp releaseHelper; + if (textureReleaseProc) { + releaseHelper.reset(new GrRefCntedCallback(textureReleaseProc, releaseContext)); + } + int numTextures; if (!SkYUVAIndex::AreValidIndices(yuvaIndices, &numTextures)) { return nullptr; @@ -243,7 +250,8 @@ sk_sp SkImage::MakeFromYUVATextures(GrContext* ctx, GrSurfaceProxyView tempViews[4]; if (!SkImage_GpuBase::MakeTempTextureProxies(ctx, yuvaTextures, numTextures, yuvaIndices, - imageOrigin, tempViews)) { + imageOrigin, tempViews, + std::move(releaseHelper))) { return nullptr; } diff --git a/src/image/SkImage_Lazy.cpp b/src/image/SkImage_Lazy.cpp index fbfaac6dfa509..10f5dc0ed6f0d 100644 --- a/src/image/SkImage_Lazy.cpp +++ b/src/image/SkImage_Lazy.cpp @@ -16,7 +16,7 @@ #include "src/core/SkNextID.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/GrResourceKey.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrCaps.h" @@ -128,7 +128,6 @@ SkImage_Lazy::SkImage_Lazy(Validator* validator) , fSharedGenerator(std::move(validator->fSharedGenerator)) , fOrigin(validator->fOrigin) { SkASSERT(fSharedGenerator); - fUniqueID = validator->fUniqueID; } diff --git a/src/image/SkImage_Lazy.h b/src/image/SkImage_Lazy.h index f27881401d00a..dd18780f8e57e 100644 --- a/src/image/SkImage_Lazy.h +++ b/src/image/SkImage_Lazy.h @@ -82,8 +82,6 @@ class SkImage_Lazy : public SkImage_Base { sk_sp fSharedGenerator; const SkIPoint fOrigin; - uint32_t fUniqueID; - // Repeated calls to onMakeColorTypeAndColorSpace will result in a proliferation of unique IDs // and SkImage_Lazy instances. Cache the result of the last successful call. mutable SkMutex fOnMakeColorTypeAndSpaceMutex; diff --git a/src/image/SkRescaleAndReadPixels.cpp b/src/image/SkRescaleAndReadPixels.cpp new file mode 100644 index 0000000000000..0b7ee2ed532a7 --- /dev/null +++ b/src/image/SkRescaleAndReadPixels.cpp @@ -0,0 +1,139 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkCanvas.h" +#include "include/core/SkImageInfo.h" +#include "include/core/SkPaint.h" +#include "include/core/SkRect.h" +#include "include/core/SkSurface.h" + +#include + +void SkRescaleAndReadPixels(SkBitmap bmp, + const SkImageInfo& resultInfo, + const SkIRect& srcRect, + SkImage::RescaleGamma rescaleGamma, + SkFilterQuality rescaleQuality, + SkImage::ReadPixelsCallback callback, + SkImage::ReadPixelsContext context) { + int srcW = srcRect.width(); + int srcH = srcRect.height(); + + float sx = (float)resultInfo.width() / srcW; + float sy = (float)resultInfo.height() / srcH; + // How many bilerp/bicubic steps to do in X and Y. + means upscaling, - means downscaling. + int stepsX; + int stepsY; + if (rescaleQuality > kNone_SkFilterQuality) { + stepsX = static_cast((sx > 1.f) ? std::ceil(std::log2f(sx)) + : std::floor(std::log2f(sx))); + stepsY = static_cast((sy > 1.f) ? std::ceil(std::log2f(sy)) + : std::floor(std::log2f(sy))); + } else { + stepsX = sx != 1.f; + stepsY = sy != 1.f; + } + + SkPaint paint; + paint.setBlendMode(SkBlendMode::kSrc); + if (stepsX < 0 || stepsY < 0) { + // Don't trigger MIP generation. We don't currently have a way to trigger bicubic for + // downscaling draws. + rescaleQuality = std::min(rescaleQuality, kLow_SkFilterQuality); + } + paint.setFilterQuality(rescaleQuality); + sk_sp tempSurf; + sk_sp srcImage; + int srcX = srcRect.fLeft; + int srcY = srcRect.fTop; + SkCanvas::SrcRectConstraint constraint = SkCanvas::kStrict_SrcRectConstraint; + // Assume we should ignore the rescale linear request if the surface has no color space since + // it's unclear how we'd linearize from an unknown color space. + if (rescaleGamma == SkSurface::RescaleGamma::kLinear && bmp.info().colorSpace() && + !bmp.info().colorSpace()->gammaIsLinear()) { + auto cs = bmp.info().colorSpace()->makeLinearGamma(); + // Promote to F16 color type to preserve precision. + auto ii = SkImageInfo::Make(srcW, srcH, kRGBA_F16_SkColorType, bmp.info().alphaType(), + std::move(cs)); + auto linearSurf = SkSurface::MakeRaster(ii); + if (!linearSurf) { + callback(context, nullptr); + return; + } + linearSurf->getCanvas()->drawBitmap(bmp, -srcX, -srcY, &paint); + tempSurf = std::move(linearSurf); + srcImage = tempSurf->makeImageSnapshot(); + srcX = 0; + srcY = 0; + constraint = SkCanvas::kFast_SrcRectConstraint; + } else { + // MakeFromBitmap would trigger a copy if bmp is mutable. + srcImage = SkImage::MakeFromRaster(bmp.pixmap(), nullptr, nullptr); + } + while (stepsX || stepsY) { + int nextW = resultInfo.width(); + int nextH = resultInfo.height(); + if (stepsX < 0) { + nextW = resultInfo.width() << (-stepsX - 1); + stepsX++; + } else if (stepsX != 0) { + if (stepsX > 1) { + nextW = srcW * 2; + } + --stepsX; + } + if (stepsY < 0) { + nextH = resultInfo.height() << (-stepsY - 1); + stepsY++; + } else if (stepsY != 0) { + if (stepsY > 1) { + nextH = srcH * 2; + } + --stepsY; + } + auto ii = srcImage->imageInfo().makeWH(nextW, nextH); + if (!stepsX && !stepsY) { + // Might as well fold conversion to final info in the last step. + ii = resultInfo; + } + auto next = SkSurface::MakeRaster(ii); + if (!next) { + callback(context, nullptr); + return; + } + next->getCanvas()->drawImageRect( + std::move(srcImage), SkIRect::MakeXYWH(srcX, srcY, srcW, srcH), + SkRect::MakeWH((float)nextW, (float)nextH), &paint, constraint); + tempSurf = std::move(next); + srcImage = tempSurf->makeImageSnapshot(); + srcX = srcY = 0; + srcW = nextW; + srcH = nextH; + constraint = SkCanvas::kFast_SrcRectConstraint; + } + + size_t rowBytes = resultInfo.minRowBytes(); + std::unique_ptr data(new char[resultInfo.height() * rowBytes]); + SkPixmap pm(resultInfo, data.get(), rowBytes); + if (srcImage->readPixels(pm, srcX, srcY)) { + class Result : public SkImage::AsyncReadResult { + public: + Result(std::unique_ptr data, size_t rowBytes) + : fData(std::move(data)), fRowBytes(rowBytes) {} + int count() const override { return 1; } + const void* data(int i) const override { return fData.get(); } + size_t rowBytes(int i) const override { return fRowBytes; } + + private: + std::unique_ptr fData; + size_t fRowBytes; + }; + callback(context, std::make_unique(std::move(data), rowBytes)); + } else { + callback(context, nullptr); + } +} diff --git a/src/image/SkRescaleAndReadPixels.h b/src/image/SkRescaleAndReadPixels.h new file mode 100644 index 0000000000000..e1e9448e44564 --- /dev/null +++ b/src/image/SkRescaleAndReadPixels.h @@ -0,0 +1,22 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkBitmap.h" +#include "include/core/SkFilterQuality.h" +#include "include/core/SkImage.h" + +struct SkImageInfo; +struct SkIRect; + +/** Generic/synchronous implementation for SkImage:: and SkSurface::asyncRescaleAndReadPixels. */ +void SkRescaleAndReadPixels(SkBitmap src, + const SkImageInfo& resultInfo, + const SkIRect& srcRect, + SkImage::RescaleGamma, + SkFilterQuality, + SkImage::ReadPixelsCallback, + SkImage::ReadPixelsContext); diff --git a/src/image/SkSurface.cpp b/src/image/SkSurface.cpp index 0b17398a86a76..62020e54c6d32 100644 --- a/src/image/SkSurface.cpp +++ b/src/image/SkSurface.cpp @@ -12,6 +12,7 @@ #include "include/gpu/GrBackendSurface.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkImagePriv.h" +#include "src/image/SkRescaleAndReadPixels.h" #include "src/image/SkSurface_Base.h" static SkPixelGeometry compute_default_geometry() { @@ -75,6 +76,10 @@ GrContext* SkSurface_Base::onGetContext() { return nullptr; } +GrRecordingContext* SkSurface_Base::onGetRecordingContext() { + return nullptr; +} + GrBackendTexture SkSurface_Base::onGetBackendTexture(BackendHandleAccess) { return GrBackendTexture(); // invalid } @@ -97,126 +102,29 @@ void SkSurface_Base::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPa } } -void SkSurface_Base::onAsyncRescaleAndReadPixels(const SkImageInfo& info, const SkIRect& srcRect, +void SkSurface_Base::onAsyncRescaleAndReadPixels(const SkImageInfo& info, + const SkIRect& origSrcRect, SkSurface::RescaleGamma rescaleGamma, SkFilterQuality rescaleQuality, SkSurface::ReadPixelsCallback callback, SkSurface::ReadPixelsContext context) { - int srcW = srcRect.width(); - int srcH = srcRect.height(); - float sx = (float)info.width() / srcW; - float sy = (float)info.height() / srcH; - // How many bilerp/bicubic steps to do in X and Y. + means upscaling, - means downscaling. - int stepsX; - int stepsY; - if (rescaleQuality > kNone_SkFilterQuality) { - stepsX = static_cast((sx > 1.f) ? std::ceil(std::log2f(sx)) - : std::floor(std::log2f(sx))); - stepsY = static_cast((sy > 1.f) ? std::ceil(std::log2f(sy)) - : std::floor(std::log2f(sy))); + SkBitmap src; + SkPixmap peek; + SkIRect srcRect; + if (this->peekPixels(&peek)) { + src.installPixels(peek); + srcRect = origSrcRect; } else { - stepsX = sx != 1.f; - stepsY = sy != 1.f; - } - - SkPaint paint; - paint.setBlendMode(SkBlendMode::kSrc); - if (stepsX < 0 || stepsY < 0) { - // Don't trigger MIP generation. We don't currently have a way to trigger bicubic for - // downscaling draws. - rescaleQuality = std::min(rescaleQuality, kLow_SkFilterQuality); - } - paint.setFilterQuality(rescaleQuality); - sk_sp src(SkRef(this)); - int srcX = srcRect.fLeft; - int srcY = srcRect.fTop; - SkCanvas::SrcRectConstraint constraint = SkCanvas::kStrict_SrcRectConstraint; - // Assume we should ignore the rescale linear request if the surface has no color space since - // it's unclear how we'd linearize from an unknown color space. - if (rescaleGamma == SkSurface::RescaleGamma::kLinear && - this->getCanvas()->imageInfo().colorSpace() && - !this->getCanvas()->imageInfo().colorSpace()->gammaIsLinear()) { - auto cs = this->getCanvas()->imageInfo().colorSpace()->makeLinearGamma(); - // Promote to F16 color type to preserve precision. - auto ii = SkImageInfo::Make(srcW, srcH, kRGBA_F16_SkColorType, - this->getCanvas()->imageInfo().alphaType(), std::move(cs)); - auto linearSurf = this->makeSurface(ii); - if (!linearSurf) { - // Maybe F16 isn't supported? Try again with original color type. - ii = ii.makeColorType(this->getCanvas()->imageInfo().colorType()); - linearSurf = this->makeSurface(ii); - if (!linearSurf) { - callback(context, nullptr); - return; - } - } - this->draw(linearSurf->getCanvas(), -srcX, -srcY, &paint); - src = std::move(linearSurf); - srcX = 0; - srcY = 0; - constraint = SkCanvas::kFast_SrcRectConstraint; - } - while (stepsX || stepsY) { - int nextW = info.width(); - int nextH = info.height(); - if (stepsX < 0) { - nextW = info.width() << (-stepsX - 1); - stepsX++; - } else if (stepsX != 0) { - if (stepsX > 1) { - nextW = srcW * 2; - } - --stepsX; - } - if (stepsY < 0) { - nextH = info.height() << (-stepsY - 1); - stepsY++; - } else if (stepsY != 0) { - if (stepsY > 1) { - nextH = srcH * 2; - } - --stepsY; - } - auto ii = src->getCanvas()->imageInfo().makeWH(nextW, nextH); - if (!stepsX && !stepsY) { - // Might as well fold conversion to final info in the last step. - ii = info; - } - auto next = this->makeSurface(ii); - if (!next) { + src.setInfo(this->imageInfo().makeDimensions(origSrcRect.size())); + src.allocPixels(); + if (!this->readPixels(src, origSrcRect.x(), origSrcRect.y())) { callback(context, nullptr); return; } - next->getCanvas()->drawImageRect( - src->makeImageSnapshot(), SkIRect::MakeXYWH(srcX, srcY, srcW, srcH), - SkRect::MakeWH((float)nextW, (float)nextH), &paint, constraint); - src = std::move(next); - srcX = srcY = 0; - srcW = nextW; - srcH = nextH; - constraint = SkCanvas::kFast_SrcRectConstraint; - } - - size_t rowBytes = info.minRowBytes(); - std::unique_ptr data(new char[info.height() * rowBytes]); - SkPixmap pm(info, data.get(), rowBytes); - if (src->readPixels(pm, srcX, srcY)) { - class Result : public AsyncReadResult { - public: - Result(std::unique_ptr data, size_t rowBytes) - : fData(std::move(data)), fRowBytes(rowBytes) {} - int count() const override { return 1; } - const void* data(int i) const override { return fData.get(); } - size_t rowBytes(int i) const override { return fRowBytes; } - - private: - std::unique_ptr fData; - size_t fRowBytes; - }; - callback(context, std::make_unique(std::move(data), rowBytes)); - } else { - callback(context, nullptr); + srcRect = SkIRect::MakeSize(src.dimensions()); } + return SkRescaleAndReadPixels(src, info, srcRect, rescaleGamma, rescaleQuality, callback, + context); } void SkSurface_Base::onAsyncRescaleAndReadPixelsYUV420( @@ -428,6 +336,10 @@ GrContext* SkSurface::getContext() { return asSB(this)->onGetContext(); } +GrRecordingContext* SkSurface::recordingContext() { + return asSB(this)->onGetRecordingContext(); +} + GrBackendTexture SkSurface::getBackendTexture(BackendHandleAccess access) { return asSB(this)->onGetBackendTexture(access); } @@ -445,7 +357,12 @@ bool SkSurface::replaceBackendTexture(const GrBackendTexture& backendTexture, } GrSemaphoresSubmitted SkSurface::flush(BackendSurfaceAccess access, const GrFlushInfo& flushInfo) { - return asSB(this)->onFlush(access, flushInfo); + return asSB(this)->onFlush(access, flushInfo, nullptr); +} + +GrSemaphoresSubmitted SkSurface::flush(const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState) { + return asSB(this)->onFlush(BackendSurfaceAccess::kNoAccess, info, newState); } bool SkSurface::wait(int numSemaphores, const GrBackendSemaphore* waitSemaphores) { @@ -460,8 +377,8 @@ bool SkSurface::isCompatible(const SkSurfaceCharacterization& characterization) return asConstSB(this)->onIsCompatible(characterization); } -bool SkSurface::draw(SkDeferredDisplayList* ddl) { - return asSB(this)->onDraw(ddl); +bool SkSurface::draw(sk_sp ddl) { + return asSB(this)->onDraw(std::move(ddl)); } ////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/image/SkSurface_Base.h b/src/image/SkSurface_Base.h index b38edd8d9f2e2..3803e1f00ea25 100644 --- a/src/image/SkSurface_Base.h +++ b/src/image/SkSurface_Base.h @@ -9,6 +9,7 @@ #define SkSurface_Base_DEFINED #include "include/core/SkCanvas.h" +#include "include/core/SkDeferredDisplayList.h" #include "include/core/SkSurface.h" #include "src/core/SkImagePriv.h" #include "src/core/SkSurfacePriv.h" @@ -20,6 +21,7 @@ class SkSurface_Base : public SkSurface { virtual ~SkSurface_Base(); virtual GrContext* onGetContext(); + virtual GrRecordingContext* onGetRecordingContext(); virtual GrBackendTexture onGetBackendTexture(BackendHandleAccess); virtual GrBackendRenderTarget onGetBackendRenderTarget(BackendHandleAccess); @@ -107,7 +109,8 @@ class SkSurface_Base : public SkSurface { * Inserts the requested number of semaphores for the gpu to signal when work is complete on the * gpu and inits the array of GrBackendSemaphores with the signaled semaphores. */ - virtual GrSemaphoresSubmitted onFlush(BackendSurfaceAccess access, const GrFlushInfo&) { + virtual GrSemaphoresSubmitted onFlush(BackendSurfaceAccess access, const GrFlushInfo&, + const GrBackendSurfaceMutableState*) { return GrSemaphoresSubmitted::kNo; } @@ -122,7 +125,7 @@ class SkSurface_Base : public SkSurface { virtual bool onCharacterize(SkSurfaceCharacterization*) const { return false; } virtual bool onIsCompatible(const SkSurfaceCharacterization&) const { return false; } - virtual bool onDraw(const SkDeferredDisplayList*) { return false; } + virtual bool onDraw(sk_sp) { return false; } inline SkCanvas* getCachedCanvas(); inline sk_sp refCachedImage(); diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp index 060d8743e4abe..f2f55e8ba5243 100644 --- a/src/image/SkSurface_Gpu.cpp +++ b/src/image/SkSurface_Gpu.cpp @@ -11,7 +11,7 @@ #include "include/core/SkDeferredDisplayList.h" #include "include/core/SkSurfaceCharacterization.h" #include "include/gpu/GrBackendSurface.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/core/SkImagePriv.h" #include "src/core/SkScopeExit.h" #include "src/gpu/GrAHardwareBufferUtils.h" @@ -43,6 +43,10 @@ GrContext* SkSurface_Gpu::onGetContext() { return fDevice->context(); } +GrRecordingContext* SkSurface_Gpu::onGetRecordingContext() { + return fDevice->recordingContext(); +} + static GrRenderTarget* prepare_rt_for_external_access(SkSurface_Gpu* surface, SkSurface::BackendHandleAccess access) { switch (access) { @@ -56,7 +60,7 @@ static GrRenderTarget* prepare_rt_for_external_access(SkSurface_Gpu* surface, } // Grab the render target *after* firing notifications, as it may get switched if CoW kicks in. - surface->getDevice()->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo()); + surface->getDevice()->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo(), nullptr); GrRenderTargetContext* rtc = surface->getDevice()->accessRenderTargetContext(); return rtc->accessRenderTarget(); } @@ -187,9 +191,9 @@ void SkSurface_Gpu::onDiscard() { fDevice->accessRenderTargetContext()->discard(); } -GrSemaphoresSubmitted SkSurface_Gpu::onFlush(BackendSurfaceAccess access, - const GrFlushInfo& info) { - return fDevice->flush(access, info); +GrSemaphoresSubmitted SkSurface_Gpu::onFlush(BackendSurfaceAccess access, const GrFlushInfo& info, + const GrBackendSurfaceMutableState* newState) { + return fDevice->flush(access, info, newState); } bool SkSurface_Gpu::onWait(int numSemaphores, const GrBackendSemaphore* waitSemaphores) { @@ -235,13 +239,12 @@ void SkSurface_Gpu::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPai // If the dst is also GPU we try to not force a new image snapshot (by calling the base class // onDraw) since that may not always perform the copy-on-write optimization. auto tryDraw = [&] { - SkASSERT(fDevice->context()->priv().asDirectContext()); GrContext* context = fDevice->context(); GrContext* canvasContext = canvas->getGrContext(); if (!canvasContext) { return false; } - if (!canvasContext->priv().asDirectContext() || + if (!canvasContext->asDirectContext() || canvasContext->priv().contextID() != context->priv().contextID()) { return false; } @@ -330,7 +333,7 @@ bool SkSurface_Gpu::onIsCompatible(const SkSurfaceCharacterization& characteriza characterization.surfaceProps() == rtc->surfaceProps(); } -bool SkSurface_Gpu::onDraw(const SkDeferredDisplayList* ddl) { +bool SkSurface_Gpu::onDraw(sk_sp ddl) { if (!ddl || !this->isCompatible(ddl->characterization())) { return false; } @@ -338,11 +341,10 @@ bool SkSurface_Gpu::onDraw(const SkDeferredDisplayList* ddl) { GrRenderTargetContext* rtc = fDevice->accessRenderTargetContext(); GrContext* ctx = fDevice->context(); - ctx->priv().copyRenderTasksFromDDL(ddl, rtc->asRenderTargetProxy()); + ctx->priv().copyRenderTasksFromDDL(std::move(ddl), rtc->asRenderTargetProxy()); return true; } - /////////////////////////////////////////////////////////////////////////////// sk_sp SkSurface::MakeRenderTarget(GrRecordingContext* context, @@ -420,11 +422,10 @@ sk_sp SkSurface::MakeFromBackendTexture(GrContext* context, const GrBackendTexture& backendTexture, TextureReleaseProc textureReleaseProc, ReleaseContext releaseContext) { - SkScopeExit callProc([&] { - if (textureReleaseProc) { - textureReleaseProc(releaseContext); - } - }); + sk_sp releaseHelper; + if (textureReleaseProc) { + releaseHelper.reset(new GrRefCntedCallback(textureReleaseProc, releaseContext)); + } if (!context || !c.isValid()) { return nullptr; @@ -452,11 +453,10 @@ sk_sp SkSurface::MakeFromBackendTexture(GrContext* context, auto rtc = GrRenderTargetContext::MakeFromBackendTexture( context, grCT, c.refColorSpace(), backendTexture, c.sampleCount(), c.origin(), - &c.surfaceProps(), textureReleaseProc, releaseContext); + &c.surfaceProps(), std::move(releaseHelper)); if (!rtc) { return nullptr; } - callProc.clear(); auto device = SkGpuDevice::Make(context, std::move(rtc), SkGpuDevice::kUninit_InitContents); if (!device) { @@ -517,11 +517,10 @@ sk_sp SkSurface::MakeFromBackendTexture(GrContext* context, const GrB const SkSurfaceProps* props, SkSurface::TextureReleaseProc textureReleaseProc, SkSurface::ReleaseContext releaseContext) { - SkScopeExit callProc([&] { - if (textureReleaseProc) { - textureReleaseProc(releaseContext); - } - }); + sk_sp releaseHelper; + if (textureReleaseProc) { + releaseHelper.reset(new GrRefCntedCallback(textureReleaseProc, releaseContext)); + } if (!context) { return nullptr; @@ -540,11 +539,10 @@ sk_sp SkSurface::MakeFromBackendTexture(GrContext* context, const GrB auto rtc = GrRenderTargetContext::MakeFromBackendTexture( context, grColorType, std::move(colorSpace), tex, sampleCnt, origin, props, - textureReleaseProc, releaseContext); + std::move(releaseHelper)); if (!rtc) { return nullptr; } - callProc.clear(); auto device = SkGpuDevice::Make(context, std::move(rtc), SkGpuDevice::kUninit_InitContents); if (!device) { @@ -558,11 +556,10 @@ bool SkSurface_Gpu::onReplaceBackendTexture(const GrBackendTexture& backendTextu ContentChangeMode mode, TextureReleaseProc releaseProc, ReleaseContext releaseContext) { - SkScopeExit callProc([&] { - if (releaseProc) { - releaseProc(releaseContext); - } - }); + sk_sp releaseHelper; + if (releaseProc) { + releaseHelper.reset(new GrRefCntedCallback(releaseProc, releaseContext)); + } auto context = this->fDevice->context(); if (context->abandoned()) { @@ -602,11 +599,10 @@ bool SkSurface_Gpu::onReplaceBackendTexture(const GrBackendTexture& backendTextu } auto rtc = GrRenderTargetContext::MakeFromBackendTexture( context, oldRTC->colorInfo().colorType(), std::move(colorSpace), backendTexture, - sampleCnt, origin, &this->props(), releaseProc, releaseContext); + sampleCnt, origin, &this->props(), std::move(releaseHelper)); if (!rtc) { return false; } - callProc.clear(); fDevice->replaceRenderTargetContext(std::move(rtc), mode); return true; } diff --git a/src/image/SkSurface_Gpu.h b/src/image/SkSurface_Gpu.h index 9ee67dc360b64..fe83ee17a6aba 100644 --- a/src/image/SkSurface_Gpu.h +++ b/src/image/SkSurface_Gpu.h @@ -26,6 +26,7 @@ class SkSurface_Gpu : public SkSurface_Base { std::unique_ptr); GrContext* onGetContext() override; + GrRecordingContext* onGetRecordingContext() override; GrBackendTexture onGetBackendTexture(BackendHandleAccess) override; GrBackendRenderTarget onGetBackendRenderTarget(BackendHandleAccess) override; @@ -51,12 +52,13 @@ class SkSurface_Gpu : public SkSurface_Base { void onCopyOnWrite(ContentChangeMode) override; void onDiscard() override; - GrSemaphoresSubmitted onFlush(BackendSurfaceAccess access, const GrFlushInfo& info) override; + GrSemaphoresSubmitted onFlush(BackendSurfaceAccess access, const GrFlushInfo& info, + const GrBackendSurfaceMutableState*) override; bool onWait(int numSemaphores, const GrBackendSemaphore* waitSemaphores) override; bool onCharacterize(SkSurfaceCharacterization*) const override; bool onIsCompatible(const SkSurfaceCharacterization&) const override; void onDraw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) override; - bool onDraw(const SkDeferredDisplayList*) override; + bool onDraw(sk_sp) override; SkGpuDevice* getDevice() { return fDevice.get(); } diff --git a/src/opts/SkChecksum_opts.h b/src/opts/SkChecksum_opts.h index 78808476ca79e..67c3ba22badae 100644 --- a/src/opts/SkChecksum_opts.h +++ b/src/opts/SkChecksum_opts.h @@ -191,8 +191,8 @@ namespace SK_OPTS_NS { // Handle last 0-3 bytes. uint32_t k = 0; switch (bytes & 3) { - case 3: k ^= data[2] << 16; - case 2: k ^= data[1] << 8; + case 3: k ^= data[2] << 16; [[fallthrough]]; + case 2: k ^= data[1] << 8; [[fallthrough]]; case 1: k ^= data[0] << 0; k *= 0xcc9e2d51; k = (k << 15) | (k >> 17); diff --git a/src/opts/SkOpts_avx.cpp b/src/opts/SkOpts_avx.cpp index 049c90e7e83be..99d828fd232dd 100644 --- a/src/opts/SkOpts_avx.cpp +++ b/src/opts/SkOpts_avx.cpp @@ -5,4 +5,19 @@ * found in the LICENSE file. */ -// Intentionally empty, to be cleaned up. +#include "src/core/SkOpts.h" + +#define SK_OPTS_NS avx +#include "src/opts/SkUtils_opts.h" + +namespace SkOpts { + void Init_avx() { + memset16 = SK_OPTS_NS::memset16; + memset32 = SK_OPTS_NS::memset32; + memset64 = SK_OPTS_NS::memset64; + + rect_memset16 = SK_OPTS_NS::rect_memset16; + rect_memset32 = SK_OPTS_NS::rect_memset32; + rect_memset64 = SK_OPTS_NS::rect_memset64; + } +} diff --git a/src/opts/SkOpts_crc32.cpp b/src/opts/SkOpts_crc32.cpp index 049c90e7e83be..205f0ebf3770e 100644 --- a/src/opts/SkOpts_crc32.cpp +++ b/src/opts/SkOpts_crc32.cpp @@ -5,4 +5,13 @@ * found in the LICENSE file. */ -// Intentionally empty, to be cleaned up. +#include "src/core/SkOpts.h" + +#define SK_OPTS_NS crc32 +#include "src/opts/SkChecksum_opts.h" + +namespace SkOpts { + void Init_crc32() { + hash_fn = crc32::hash_fn; + } +} diff --git a/src/opts/SkOpts_hsw.cpp b/src/opts/SkOpts_hsw.cpp index 0a7f561113a87..94c4ed269029f 100644 --- a/src/opts/SkOpts_hsw.cpp +++ b/src/opts/SkOpts_hsw.cpp @@ -5,4 +5,47 @@ * found in the LICENSE file. */ -// Intentionally empty, to be cleaned up. +#include "src/core/SkOpts.h" + +#define SK_OPTS_NS hsw +#include "src/core/SkCubicSolver.h" +#include "src/opts/SkBitmapProcState_opts.h" +#include "src/opts/SkBlitRow_opts.h" +#include "src/opts/SkRasterPipeline_opts.h" +#include "src/opts/SkSwizzler_opts.h" +#include "src/opts/SkUtils_opts.h" +#include "src/opts/SkVM_opts.h" + +namespace SkOpts { + void Init_hsw() { + blit_row_color32 = hsw::blit_row_color32; + blit_row_s32a_opaque = hsw::blit_row_s32a_opaque; + + S32_alpha_D32_filter_DX = hsw::S32_alpha_D32_filter_DX; + + cubic_solver = SK_OPTS_NS::cubic_solver; + + RGBA_to_BGRA = SK_OPTS_NS::RGBA_to_BGRA; + RGBA_to_rgbA = SK_OPTS_NS::RGBA_to_rgbA; + RGBA_to_bgrA = SK_OPTS_NS::RGBA_to_bgrA; + gray_to_RGB1 = SK_OPTS_NS::gray_to_RGB1; + grayA_to_RGBA = SK_OPTS_NS::grayA_to_RGBA; + grayA_to_rgbA = SK_OPTS_NS::grayA_to_rgbA; + inverted_CMYK_to_RGB1 = SK_OPTS_NS::inverted_CMYK_to_RGB1; + inverted_CMYK_to_BGR1 = SK_OPTS_NS::inverted_CMYK_to_BGR1; + + #define M(st) stages_highp[SkRasterPipeline::st] = (StageFn)SK_OPTS_NS::st; + SK_RASTER_PIPELINE_STAGES(M) + just_return_highp = (StageFn)SK_OPTS_NS::just_return; + start_pipeline_highp = SK_OPTS_NS::start_pipeline; + #undef M + + #define M(st) stages_lowp[SkRasterPipeline::st] = (StageFn)SK_OPTS_NS::lowp::st; + SK_RASTER_PIPELINE_STAGES(M) + just_return_lowp = (StageFn)SK_OPTS_NS::lowp::just_return; + start_pipeline_lowp = SK_OPTS_NS::lowp::start_pipeline; + #undef M + + interpret_skvm = SK_OPTS_NS::interpret_skvm; + } +} diff --git a/src/opts/SkOpts_skx.cpp b/src/opts/SkOpts_skx.cpp new file mode 100644 index 0000000000000..a13743c24b9c8 --- /dev/null +++ b/src/opts/SkOpts_skx.cpp @@ -0,0 +1,27 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/core/SkOpts.h" + +#define SK_OPTS_NS skx +#include "src/opts/SkBlitRow_opts.h" +#include "src/opts/SkSwizzler_opts.h" +#include "src/opts/SkVM_opts.h" + +namespace SkOpts { + void Init_skx() { + blit_row_s32a_opaque = SK_OPTS_NS::blit_row_s32a_opaque; + interpret_skvm = SK_OPTS_NS::interpret_skvm; + RGBA_to_BGRA = SK_OPTS_NS::RGBA_to_BGRA; + RGBA_to_rgbA = SK_OPTS_NS::RGBA_to_rgbA; + RGBA_to_bgrA = SK_OPTS_NS::RGBA_to_bgrA; + grayA_to_RGBA = SK_OPTS_NS::grayA_to_RGBA; + grayA_to_rgbA = SK_OPTS_NS::grayA_to_rgbA; + inverted_CMYK_to_RGB1 = SK_OPTS_NS::inverted_CMYK_to_RGB1; + inverted_CMYK_to_BGR1 = SK_OPTS_NS::inverted_CMYK_to_BGR1; + } +} diff --git a/src/opts/SkOpts_sse42.cpp b/src/opts/SkOpts_sse42.cpp index 049c90e7e83be..8e80fffa4a354 100644 --- a/src/opts/SkOpts_sse42.cpp +++ b/src/opts/SkOpts_sse42.cpp @@ -5,4 +5,14 @@ * found in the LICENSE file. */ -// Intentionally empty, to be cleaned up. +#include "src/core/SkOpts.h" + +#define SK_OPTS_NS sse42 +#include "src/opts/SkChecksum_opts.h" + +namespace SkOpts { + void Init_sse42() { + hash_fn = sse42::hash_fn; + } +} + diff --git a/src/opts/SkOpts_ssse3.cpp b/src/opts/SkOpts_ssse3.cpp index abd47969c4fd7..daa69872e074e 100644 --- a/src/opts/SkOpts_ssse3.cpp +++ b/src/opts/SkOpts_ssse3.cpp @@ -5,4 +5,29 @@ * found in the LICENSE file. */ -// Intentionally empty, to be cleaned up. +#include "src/core/SkOpts.h" +#define SK_OPTS_NS ssse3 +#include "src/opts/SkBitmapProcState_opts.h" +#include "src/opts/SkBlitMask_opts.h" +#include "src/opts/SkSwizzler_opts.h" +#include "src/opts/SkXfermode_opts.h" + +namespace SkOpts { + void Init_ssse3() { + create_xfermode = ssse3::create_xfermode; + blit_mask_d32_a8 = ssse3::blit_mask_d32_a8; + + RGBA_to_BGRA = ssse3::RGBA_to_BGRA; + RGBA_to_rgbA = ssse3::RGBA_to_rgbA; + RGBA_to_bgrA = ssse3::RGBA_to_bgrA; + RGB_to_RGB1 = ssse3::RGB_to_RGB1; + RGB_to_BGR1 = ssse3::RGB_to_BGR1; + gray_to_RGB1 = ssse3::gray_to_RGB1; + grayA_to_RGBA = ssse3::grayA_to_RGBA; + grayA_to_rgbA = ssse3::grayA_to_rgbA; + inverted_CMYK_to_RGB1 = ssse3::inverted_CMYK_to_RGB1; + inverted_CMYK_to_BGR1 = ssse3::inverted_CMYK_to_BGR1; + + S32_alpha_D32_filter_DX = ssse3::S32_alpha_D32_filter_DX; + } +} diff --git a/src/opts/SkRasterPipeline_opts.h b/src/opts/SkRasterPipeline_opts.h index 8c7969b06bfd4..ad745a6b5e3a6 100644 --- a/src/opts/SkRasterPipeline_opts.h +++ b/src/opts/SkRasterPipeline_opts.h @@ -625,13 +625,13 @@ namespace SK_OPTS_NS { F _04, _15, _26, _37; _04 = _15 = _26 = _37 = 0; switch (tail) { - case 0: _37 = _mm256_insertf128_ps(_37, _mm_loadu_ps(ptr+28), 1); - case 7: _26 = _mm256_insertf128_ps(_26, _mm_loadu_ps(ptr+24), 1); - case 6: _15 = _mm256_insertf128_ps(_15, _mm_loadu_ps(ptr+20), 1); - case 5: _04 = _mm256_insertf128_ps(_04, _mm_loadu_ps(ptr+16), 1); - case 4: _37 = _mm256_insertf128_ps(_37, _mm_loadu_ps(ptr+12), 0); - case 3: _26 = _mm256_insertf128_ps(_26, _mm_loadu_ps(ptr+ 8), 0); - case 2: _15 = _mm256_insertf128_ps(_15, _mm_loadu_ps(ptr+ 4), 0); + case 0: _37 = _mm256_insertf128_ps(_37, _mm_loadu_ps(ptr+28), 1); [[fallthrough]]; + case 7: _26 = _mm256_insertf128_ps(_26, _mm_loadu_ps(ptr+24), 1); [[fallthrough]]; + case 6: _15 = _mm256_insertf128_ps(_15, _mm_loadu_ps(ptr+20), 1); [[fallthrough]]; + case 5: _04 = _mm256_insertf128_ps(_04, _mm_loadu_ps(ptr+16), 1); [[fallthrough]]; + case 4: _37 = _mm256_insertf128_ps(_37, _mm_loadu_ps(ptr+12), 0); [[fallthrough]]; + case 3: _26 = _mm256_insertf128_ps(_26, _mm_loadu_ps(ptr+ 8), 0); [[fallthrough]]; + case 2: _15 = _mm256_insertf128_ps(_15, _mm_loadu_ps(ptr+ 4), 0); [[fallthrough]]; case 1: _04 = _mm256_insertf128_ps(_04, _mm_loadu_ps(ptr+ 0), 0); } @@ -1148,11 +1148,11 @@ SI V load(const T* src, size_t tail) { if (__builtin_expect(tail, 0)) { V v{}; // Any inactive lanes are zeroed. switch (tail) { - case 7: v[6] = src[6]; - case 6: v[5] = src[5]; - case 5: v[4] = src[4]; + case 7: v[6] = src[6]; [[fallthrough]]; + case 6: v[5] = src[5]; [[fallthrough]]; + case 5: v[4] = src[4]; [[fallthrough]]; case 4: memcpy(&v, src, 4*sizeof(T)); break; - case 3: v[2] = src[2]; + case 3: v[2] = src[2]; [[fallthrough]]; case 2: memcpy(&v, src, 2*sizeof(T)); break; case 1: memcpy(&v, src, 1*sizeof(T)); break; } @@ -1168,11 +1168,11 @@ SI void store(T* dst, V v, size_t tail) { __builtin_assume(tail < N); if (__builtin_expect(tail, 0)) { switch (tail) { - case 7: dst[6] = v[6]; - case 6: dst[5] = v[5]; - case 5: dst[4] = v[4]; + case 7: dst[6] = v[6]; [[fallthrough]]; + case 6: dst[5] = v[5]; [[fallthrough]]; + case 5: dst[4] = v[4]; [[fallthrough]]; case 4: memcpy(dst, &v, 4*sizeof(T)); break; - case 3: dst[2] = v[2]; + case 3: dst[2] = v[2]; [[fallthrough]]; case 2: memcpy(dst, &v, 2*sizeof(T)); break; case 1: memcpy(dst, &v, 1*sizeof(T)); break; } @@ -3403,20 +3403,20 @@ SI V load(const T* ptr, size_t tail) { switch (tail & (N-1)) { case 0: memcpy(&v, ptr, sizeof(v)); break; #if defined(JUMPER_IS_HSW) || defined(JUMPER_IS_SKX) - case 15: v[14] = ptr[14]; - case 14: v[13] = ptr[13]; - case 13: v[12] = ptr[12]; + case 15: v[14] = ptr[14]; [[fallthrough]]; + case 14: v[13] = ptr[13]; [[fallthrough]]; + case 13: v[12] = ptr[12]; [[fallthrough]]; case 12: memcpy(&v, ptr, 12*sizeof(T)); break; - case 11: v[10] = ptr[10]; - case 10: v[ 9] = ptr[ 9]; - case 9: v[ 8] = ptr[ 8]; + case 11: v[10] = ptr[10]; [[fallthrough]]; + case 10: v[ 9] = ptr[ 9]; [[fallthrough]]; + case 9: v[ 8] = ptr[ 8]; [[fallthrough]]; case 8: memcpy(&v, ptr, 8*sizeof(T)); break; #endif - case 7: v[ 6] = ptr[ 6]; - case 6: v[ 5] = ptr[ 5]; - case 5: v[ 4] = ptr[ 4]; + case 7: v[ 6] = ptr[ 6]; [[fallthrough]]; + case 6: v[ 5] = ptr[ 5]; [[fallthrough]]; + case 5: v[ 4] = ptr[ 4]; [[fallthrough]]; case 4: memcpy(&v, ptr, 4*sizeof(T)); break; - case 3: v[ 2] = ptr[ 2]; + case 3: v[ 2] = ptr[ 2]; [[fallthrough]]; case 2: memcpy(&v, ptr, 2*sizeof(T)); break; case 1: v[ 0] = ptr[ 0]; } @@ -3427,20 +3427,20 @@ SI void store(T* ptr, size_t tail, V v) { switch (tail & (N-1)) { case 0: memcpy(ptr, &v, sizeof(v)); break; #if defined(JUMPER_IS_HSW) || defined(JUMPER_IS_SKX) - case 15: ptr[14] = v[14]; - case 14: ptr[13] = v[13]; - case 13: ptr[12] = v[12]; + case 15: ptr[14] = v[14]; [[fallthrough]]; + case 14: ptr[13] = v[13]; [[fallthrough]]; + case 13: ptr[12] = v[12]; [[fallthrough]]; case 12: memcpy(ptr, &v, 12*sizeof(T)); break; - case 11: ptr[10] = v[10]; - case 10: ptr[ 9] = v[ 9]; - case 9: ptr[ 8] = v[ 8]; + case 11: ptr[10] = v[10]; [[fallthrough]]; + case 10: ptr[ 9] = v[ 9]; [[fallthrough]]; + case 9: ptr[ 8] = v[ 8]; [[fallthrough]]; case 8: memcpy(ptr, &v, 8*sizeof(T)); break; #endif - case 7: ptr[ 6] = v[ 6]; - case 6: ptr[ 5] = v[ 5]; - case 5: ptr[ 4] = v[ 4]; + case 7: ptr[ 6] = v[ 6]; [[fallthrough]]; + case 6: ptr[ 5] = v[ 5]; [[fallthrough]]; + case 5: ptr[ 4] = v[ 4]; [[fallthrough]]; case 4: memcpy(ptr, &v, 4*sizeof(T)); break; - case 3: ptr[ 2] = v[ 2]; + case 3: ptr[ 2] = v[ 2]; [[fallthrough]]; case 2: memcpy(ptr, &v, 2*sizeof(T)); break; case 1: ptr[ 0] = v[ 0]; } @@ -3513,12 +3513,12 @@ SI void load_8888_(const uint32_t* ptr, size_t tail, U16* r, U16* g, U16* b, U16 uint8x8x4_t rgba; switch (tail & (N-1)) { case 0: rgba = vld4_u8 ((const uint8_t*)(ptr+0) ); break; - case 7: rgba = vld4_lane_u8((const uint8_t*)(ptr+6), rgba, 6); - case 6: rgba = vld4_lane_u8((const uint8_t*)(ptr+5), rgba, 5); - case 5: rgba = vld4_lane_u8((const uint8_t*)(ptr+4), rgba, 4); - case 4: rgba = vld4_lane_u8((const uint8_t*)(ptr+3), rgba, 3); - case 3: rgba = vld4_lane_u8((const uint8_t*)(ptr+2), rgba, 2); - case 2: rgba = vld4_lane_u8((const uint8_t*)(ptr+1), rgba, 1); + case 7: rgba = vld4_lane_u8((const uint8_t*)(ptr+6), rgba, 6); [[fallthrough]]; + case 6: rgba = vld4_lane_u8((const uint8_t*)(ptr+5), rgba, 5); [[fallthrough]]; + case 5: rgba = vld4_lane_u8((const uint8_t*)(ptr+4), rgba, 4); [[fallthrough]]; + case 4: rgba = vld4_lane_u8((const uint8_t*)(ptr+3), rgba, 3); [[fallthrough]]; + case 3: rgba = vld4_lane_u8((const uint8_t*)(ptr+2), rgba, 2); [[fallthrough]]; + case 2: rgba = vld4_lane_u8((const uint8_t*)(ptr+1), rgba, 1); [[fallthrough]]; case 1: rgba = vld4_lane_u8((const uint8_t*)(ptr+0), rgba, 0); } *r = cast(rgba.val[0]); @@ -3539,12 +3539,12 @@ SI void store_8888_(uint32_t* ptr, size_t tail, U16 r, U16 g, U16 b, U16 a) { }}; switch (tail & (N-1)) { case 0: vst4_u8 ((uint8_t*)(ptr+0), rgba ); break; - case 7: vst4_lane_u8((uint8_t*)(ptr+6), rgba, 6); - case 6: vst4_lane_u8((uint8_t*)(ptr+5), rgba, 5); - case 5: vst4_lane_u8((uint8_t*)(ptr+4), rgba, 4); - case 4: vst4_lane_u8((uint8_t*)(ptr+3), rgba, 3); - case 3: vst4_lane_u8((uint8_t*)(ptr+2), rgba, 2); - case 2: vst4_lane_u8((uint8_t*)(ptr+1), rgba, 1); + case 7: vst4_lane_u8((uint8_t*)(ptr+6), rgba, 6); [[fallthrough]]; + case 6: vst4_lane_u8((uint8_t*)(ptr+5), rgba, 5); [[fallthrough]]; + case 5: vst4_lane_u8((uint8_t*)(ptr+4), rgba, 4); [[fallthrough]]; + case 4: vst4_lane_u8((uint8_t*)(ptr+3), rgba, 3); [[fallthrough]]; + case 3: vst4_lane_u8((uint8_t*)(ptr+2), rgba, 2); [[fallthrough]]; + case 2: vst4_lane_u8((uint8_t*)(ptr+1), rgba, 1); [[fallthrough]]; case 1: vst4_lane_u8((uint8_t*)(ptr+0), rgba, 0); } #else @@ -3669,12 +3669,12 @@ SI void load_88_(const uint16_t* ptr, size_t tail, U16* r, U16* g) { uint8x8x2_t rg; switch (tail & (N-1)) { case 0: rg = vld2_u8 ((const uint8_t*)(ptr+0) ); break; - case 7: rg = vld2_lane_u8((const uint8_t*)(ptr+6), rg, 6); - case 6: rg = vld2_lane_u8((const uint8_t*)(ptr+5), rg, 5); - case 5: rg = vld2_lane_u8((const uint8_t*)(ptr+4), rg, 4); - case 4: rg = vld2_lane_u8((const uint8_t*)(ptr+3), rg, 3); - case 3: rg = vld2_lane_u8((const uint8_t*)(ptr+2), rg, 2); - case 2: rg = vld2_lane_u8((const uint8_t*)(ptr+1), rg, 1); + case 7: rg = vld2_lane_u8((const uint8_t*)(ptr+6), rg, 6); [[fallthrough]]; + case 6: rg = vld2_lane_u8((const uint8_t*)(ptr+5), rg, 5); [[fallthrough]]; + case 5: rg = vld2_lane_u8((const uint8_t*)(ptr+4), rg, 4); [[fallthrough]]; + case 4: rg = vld2_lane_u8((const uint8_t*)(ptr+3), rg, 3); [[fallthrough]]; + case 3: rg = vld2_lane_u8((const uint8_t*)(ptr+2), rg, 2); [[fallthrough]]; + case 2: rg = vld2_lane_u8((const uint8_t*)(ptr+1), rg, 1); [[fallthrough]]; case 1: rg = vld2_lane_u8((const uint8_t*)(ptr+0), rg, 0); } *r = cast(rg.val[0]); @@ -3692,12 +3692,12 @@ SI void store_88_(uint16_t* ptr, size_t tail, U16 r, U16 g) { }}; switch (tail & (N-1)) { case 0: vst2_u8 ((uint8_t*)(ptr+0), rg ); break; - case 7: vst2_lane_u8((uint8_t*)(ptr+6), rg, 6); - case 6: vst2_lane_u8((uint8_t*)(ptr+5), rg, 5); - case 5: vst2_lane_u8((uint8_t*)(ptr+4), rg, 4); - case 4: vst2_lane_u8((uint8_t*)(ptr+3), rg, 3); - case 3: vst2_lane_u8((uint8_t*)(ptr+2), rg, 2); - case 2: vst2_lane_u8((uint8_t*)(ptr+1), rg, 1); + case 7: vst2_lane_u8((uint8_t*)(ptr+6), rg, 6); [[fallthrough]]; + case 6: vst2_lane_u8((uint8_t*)(ptr+5), rg, 5); [[fallthrough]]; + case 5: vst2_lane_u8((uint8_t*)(ptr+4), rg, 4); [[fallthrough]]; + case 4: vst2_lane_u8((uint8_t*)(ptr+3), rg, 3); [[fallthrough]]; + case 3: vst2_lane_u8((uint8_t*)(ptr+2), rg, 2); [[fallthrough]]; + case 2: vst2_lane_u8((uint8_t*)(ptr+1), rg, 1); [[fallthrough]]; case 1: vst2_lane_u8((uint8_t*)(ptr+0), rg, 0); } #else diff --git a/src/opts/SkSwizzler_opts.h b/src/opts/SkSwizzler_opts.h index 08e90ef4a18df..3ef8cc6810973 100644 --- a/src/opts/SkSwizzler_opts.h +++ b/src/opts/SkSwizzler_opts.h @@ -65,41 +65,6 @@ static void RGBA_to_BGRA_portable(uint32_t* dst, const uint32_t* src, int count) } } -static void RGB_to_RGB1_portable(uint32_t dst[], const uint8_t* src, int count) { - for (int i = 0; i < count; i++) { - uint8_t r = src[0], - g = src[1], - b = src[2]; - src += 3; - dst[i] = (uint32_t)0xFF << 24 - | (uint32_t)b << 16 - | (uint32_t)g << 8 - | (uint32_t)r << 0; - } -} - -static void RGB_to_BGR1_portable(uint32_t dst[], const uint8_t* src, int count) { - for (int i = 0; i < count; i++) { - uint8_t r = src[0], - g = src[1], - b = src[2]; - src += 3; - dst[i] = (uint32_t)0xFF << 24 - | (uint32_t)r << 16 - | (uint32_t)g << 8 - | (uint32_t)b << 0; - } -} - -static void gray_to_RGB1_portable(uint32_t dst[], const uint8_t* src, int count) { - for (int i = 0; i < count; i++) { - dst[i] = (uint32_t)0xFF << 24 - | (uint32_t)src[i] << 16 - | (uint32_t)src[i] << 8 - | (uint32_t)src[i] << 0; - } -} - static void grayA_to_RGBA_portable(uint32_t dst[], const uint8_t* src, int count) { for (int i = 0; i < count; i++) { uint8_t g = src[0], @@ -266,107 +231,6 @@ static void premul_should_swapRB(bool kSwapRB, uint32_t* dst, const uint32_t* sr RGBA_to_BGRA_portable(dst, src, count); } -static void insert_alpha_should_swaprb(bool kSwapRB, - uint32_t dst[], const uint8_t* src, int count) { - while (count >= 16) { - // Load 16 pixels. - uint8x16x3_t rgb = vld3q_u8(src); - - // Insert an opaque alpha channel and swap if needed. - uint8x16x4_t rgba; - if (kSwapRB) { - rgba.val[0] = rgb.val[2]; - rgba.val[2] = rgb.val[0]; - } else { - rgba.val[0] = rgb.val[0]; - rgba.val[2] = rgb.val[2]; - } - rgba.val[1] = rgb.val[1]; - rgba.val[3] = vdupq_n_u8(0xFF); - - // Store 16 pixels. - vst4q_u8((uint8_t*) dst, rgba); - src += 16*3; - dst += 16; - count -= 16; - } - - if (count >= 8) { - // Load 8 pixels. - uint8x8x3_t rgb = vld3_u8(src); - - // Insert an opaque alpha channel and swap if needed. - uint8x8x4_t rgba; - if (kSwapRB) { - rgba.val[0] = rgb.val[2]; - rgba.val[2] = rgb.val[0]; - } else { - rgba.val[0] = rgb.val[0]; - rgba.val[2] = rgb.val[2]; - } - rgba.val[1] = rgb.val[1]; - rgba.val[3] = vdup_n_u8(0xFF); - - // Store 8 pixels. - vst4_u8((uint8_t*) dst, rgba); - src += 8*3; - dst += 8; - count -= 8; - } - - // Call portable code to finish up the tail of [0,8) pixels. - auto proc = kSwapRB ? RGB_to_BGR1_portable : RGB_to_RGB1_portable; - proc(dst, src, count); -} - -/*not static*/ inline void RGB_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { - insert_alpha_should_swaprb(false, dst, src, count); -} - -/*not static*/ inline void RGB_to_BGR1(uint32_t dst[], const uint8_t* src, int count) { - insert_alpha_should_swaprb(true, dst, src, count); -} - -/*not static*/ inline void gray_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { - while (count >= 16) { - // Load 16 pixels. - uint8x16_t gray = vld1q_u8(src); - - // Set each of the color channels. - uint8x16x4_t rgba; - rgba.val[0] = gray; - rgba.val[1] = gray; - rgba.val[2] = gray; - rgba.val[3] = vdupq_n_u8(0xFF); - - // Store 16 pixels. - vst4q_u8((uint8_t*) dst, rgba); - src += 16; - dst += 16; - count -= 16; - } - - if (count >= 8) { - // Load 8 pixels. - uint8x8_t gray = vld1_u8(src); - - // Set each of the color channels. - uint8x8x4_t rgba; - rgba.val[0] = gray; - rgba.val[1] = gray; - rgba.val[2] = gray; - rgba.val[3] = vdup_n_u8(0xFF); - - // Store 8 pixels. - vst4_u8((uint8_t*) dst, rgba); - src += 8; - dst += 8; - count -= 8; - } - - gray_to_RGB1_portable(dst, src, count); -} - static void expand_grayA(bool kPremul, uint32_t dst[], const uint8_t* src, int count) { while (count >= 16) { // Load 16 pixels. @@ -474,6 +338,287 @@ static void inverted_cmyk_to(Format format, uint32_t* dst, const uint32_t* src, inverted_cmyk_to(kBGR1, dst, src, count); } +#elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SKX +// Scale a byte by another. +// Inputs are stored in 16-bit lanes, but are not larger than 8-bits. +static __m512i scale(__m512i x, __m512i y) { + const __m512i _128 = _mm512_set1_epi16(128); + const __m512i _257 = _mm512_set1_epi16(257); + + // (x+127)/255 == ((x+128)*257)>>16 for 0 <= x <= 255*255. + return _mm512_mulhi_epu16(_mm512_add_epi16(_mm512_mullo_epi16(x, y), _128), _257); +} + +static void premul_should_swapRB(bool kSwapRB, uint32_t* dst, const uint32_t* src, int count) { + + auto premul8 = [=](__m512i* lo, __m512i* hi) { + const __m512i zeros = _mm512_setzero_si512(); + skvx::Vec<64, uint8_t> mask; + if (kSwapRB) { + mask = { 2,6,10,14, 1,5,9,13, 0,4,8,12, 3,7,11,15, + 2,6,10,14, 1,5,9,13, 0,4,8,12, 3,7,11,15, + 2,6,10,14, 1,5,9,13, 0,4,8,12, 3,7,11,15, + 2,6,10,14, 1,5,9,13, 0,4,8,12, 3,7,11,15 }; + } else { + mask = { 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15, + 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15, + 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15, + 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15 }; + } + __m512i planar = skvx::bit_pun<__m512i>(mask); + + // Swizzle the pixels to 8-bit planar. + *lo = _mm512_shuffle_epi8(*lo, planar); + *hi = _mm512_shuffle_epi8(*hi, planar); + __m512i rg = _mm512_unpacklo_epi32(*lo, *hi), + ba = _mm512_unpackhi_epi32(*lo, *hi); + + // Unpack to 16-bit planar. + __m512i r = _mm512_unpacklo_epi8(rg, zeros), + g = _mm512_unpackhi_epi8(rg, zeros), + b = _mm512_unpacklo_epi8(ba, zeros), + a = _mm512_unpackhi_epi8(ba, zeros); + + // Premultiply! + r = scale(r, a); + g = scale(g, a); + b = scale(b, a); + + // Repack into interlaced pixels. + rg = _mm512_or_si512(r, _mm512_slli_epi16(g, 8)); + ba = _mm512_or_si512(b, _mm512_slli_epi16(a, 8)); + *lo = _mm512_unpacklo_epi16(rg, ba); + *hi = _mm512_unpackhi_epi16(rg, ba); + }; + + while (count >= 32) { + __m512i lo = _mm512_loadu_si512((const __m512i*) (src + 0)), + hi = _mm512_loadu_si512((const __m512i*) (src + 16)); + + premul8(&lo, &hi); + + _mm512_storeu_si512((__m512i*) (dst + 0), lo); + _mm512_storeu_si512((__m512i*) (dst + 16), hi); + + src += 32; + dst += 32; + count -= 32; + } + + if (count >= 16) { + __m512i lo = _mm512_loadu_si512((const __m512i*) src), + hi = _mm512_setzero_si512(); + + premul8(&lo, &hi); + + _mm512_storeu_si512((__m512i*) dst, lo); + + src += 16; + dst += 16; + count -= 16; + } + + // Call portable code to finish up the tail of [0,16) pixels. + auto proc = kSwapRB ? RGBA_to_bgrA_portable : RGBA_to_rgbA_portable; + proc(dst, src, count); +} + +/*not static*/ inline void RGBA_to_rgbA(uint32_t* dst, const uint32_t* src, int count) { + premul_should_swapRB(false, dst, src, count); +} + +/*not static*/ inline void RGBA_to_bgrA(uint32_t* dst, const uint32_t* src, int count) { + premul_should_swapRB(true, dst, src, count); +} + +/*not static*/ inline void RGBA_to_BGRA(uint32_t* dst, const uint32_t* src, int count) { + const uint8_t mask[64] = { 2,1,0,3, 6,5,4,7, 10,9,8,11, 14,13,12,15, + 2,1,0,3, 6,5,4,7, 10,9,8,11, 14,13,12,15, + 2,1,0,3, 6,5,4,7, 10,9,8,11, 14,13,12,15, + 2,1,0,3, 6,5,4,7, 10,9,8,11, 14,13,12,15 }; + const __m512i swapRB = _mm512_loadu_si512(mask); + + while (count >= 16) { + __m512i rgba = _mm512_loadu_si512((const __m512i*) src); + __m512i bgra = _mm512_shuffle_epi8(rgba, swapRB); + _mm512_storeu_si512((__m512i*) dst, bgra); + + src += 16; + dst += 16; + count -= 16; + } + + RGBA_to_BGRA_portable(dst, src, count); +} + +// Use SSSE3 impl as AVX2 / AVX-512 impl regresses performance for RGB_to_RGB1 / RGB_to_BGR1. + +// Use AVX2 impl as AVX-512 impl regresses performance for gray_to_RGB1. + +/*not static*/ inline void grayA_to_RGBA(uint32_t dst[], const uint8_t* src, int count) { + while (count >= 32) { + __m512i ga = _mm512_loadu_si512((const __m512i*) src); + + __m512i gg = _mm512_or_si512(_mm512_and_si512(ga, _mm512_set1_epi16(0x00FF)), + _mm512_slli_epi16(ga, 8)); + + __m512i ggga_lo = _mm512_unpacklo_epi16(gg, ga); + __m512i ggga_hi = _mm512_unpackhi_epi16(gg, ga); + + // 1st shuffle for pixel reorder. + // Note. 'p' stands for 'ggga' + // Before 1st shuffle: + // ggga_lo = p0 p1 p2 p3 | p8 p9 p10 p11 | p16 p17 p18 p19 | p24 p25 p26 p27 + // ggga_hi = p4 p5 p6 p7 | p12 p13 p14 p15 | p20 p21 p22 p23 | p28 p29 p30 p31 + // + // After 1st shuffle: + // ggga_lo_shuffle_1 = + // p0 p1 p2 p3 | p8 p9 p10 p11 | p4 p5 p6 p7 | p12 p13 p14 p15 + // ggga_hi_shuffle_1 = + // p16 p17 p18 p19 | p24 p25 p26 p27 | p20 p21 p22 p23 | p28 p29 p30 p31 + __m512i ggga_lo_shuffle_1 = _mm512_shuffle_i32x4(ggga_lo, ggga_hi, 0x44), + ggga_hi_shuffle_1 = _mm512_shuffle_i32x4(ggga_lo, ggga_hi, 0xee); + + // 2nd shuffle for pixel reorder. + // After the 2nd shuffle: + // ggga_lo_shuffle_2 = + // p0 p1 p2 p3 | p4 p5 p6 p7 | p8 p9 p10 p11 | p12 p13 p14 p15 + // ggga_hi_shuffle_2 = + // p16 p17 p18 p19 | p20 p21 p22 p23 | p24 p25 p26 p27 | p28 p29 p30 p31 + __m512i ggga_lo_shuffle_2 = _mm512_shuffle_i32x4(ggga_lo_shuffle_1, + ggga_lo_shuffle_1, 0xd8), + ggga_hi_shuffle_2 = _mm512_shuffle_i32x4(ggga_hi_shuffle_1, + ggga_hi_shuffle_1, 0xd8); + + _mm512_storeu_si512((__m512i*) (dst + 0), ggga_lo_shuffle_2); + _mm512_storeu_si512((__m512i*) (dst + 16), ggga_hi_shuffle_2); + + src += 32*2; + dst += 32; + count -= 32; + } + + grayA_to_RGBA_portable(dst, src, count); +} + +/*not static*/ inline void grayA_to_rgbA(uint32_t dst[], const uint8_t* src, int count) { + while (count >= 32) { + __m512i grayA = _mm512_loadu_si512((const __m512i*) src); + + __m512i g0 = _mm512_and_si512(grayA, _mm512_set1_epi16(0x00FF)); + __m512i a0 = _mm512_srli_epi16(grayA, 8); + + // Premultiply + g0 = scale(g0, a0); + + __m512i gg = _mm512_or_si512(g0, _mm512_slli_epi16(g0, 8)); + __m512i ga = _mm512_or_si512(g0, _mm512_slli_epi16(a0, 8)); + + __m512i ggga_lo = _mm512_unpacklo_epi16(gg, ga); + __m512i ggga_hi = _mm512_unpackhi_epi16(gg, ga); + + // 1st shuffle for pixel reorder, same as grayA_to_RGBA. + __m512i ggga_lo_shuffle_1 = _mm512_shuffle_i32x4(ggga_lo, ggga_hi, 0x44), + ggga_hi_shuffle_1 = _mm512_shuffle_i32x4(ggga_lo, ggga_hi, 0xee); + + // 2nd shuffle for pixel reorder, same as grayA_to_RGBA. + __m512i ggga_lo_shuffle_2 = _mm512_shuffle_i32x4(ggga_lo_shuffle_1, + ggga_lo_shuffle_1, 0xd8), + ggga_hi_shuffle_2 = _mm512_shuffle_i32x4(ggga_hi_shuffle_1, + ggga_hi_shuffle_1, 0xd8); + + _mm512_storeu_si512((__m512i*) (dst + 0), ggga_lo_shuffle_2); + _mm512_storeu_si512((__m512i*) (dst + 16), ggga_hi_shuffle_2); + + src += 32*2; + dst += 32; + count -= 32; + } + + grayA_to_rgbA_portable(dst, src, count); +} + +enum Format { kRGB1, kBGR1 }; +static void inverted_cmyk_to(Format format, uint32_t* dst, const uint32_t* src, int count) { + auto convert8 = [=](__m512i* lo, __m512i* hi) { + const __m512i zeros = _mm512_setzero_si512(); + skvx::Vec<64, uint8_t> mask; + if (kBGR1 == format) { + mask = { 2,6,10,14, 1,5,9,13, 0,4,8,12, 3,7,11,15, + 2,6,10,14, 1,5,9,13, 0,4,8,12, 3,7,11,15, + 2,6,10,14, 1,5,9,13, 0,4,8,12, 3,7,11,15, + 2,6,10,14, 1,5,9,13, 0,4,8,12, 3,7,11,15 }; + } else { + mask = { 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15, + 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15, + 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15, + 0,4,8,12, 1,5,9,13, 2,6,10,14, 3,7,11,15 }; + } + __m512i planar = skvx::bit_pun<__m512i>(mask); + + // Swizzle the pixels to 8-bit planar. + *lo = _mm512_shuffle_epi8(*lo, planar); + *hi = _mm512_shuffle_epi8(*hi, planar); + __m512i cm = _mm512_unpacklo_epi32(*lo, *hi), + yk = _mm512_unpackhi_epi32(*lo, *hi); + + // Unpack to 16-bit planar. + __m512i c = _mm512_unpacklo_epi8(cm, zeros), + m = _mm512_unpackhi_epi8(cm, zeros), + y = _mm512_unpacklo_epi8(yk, zeros), + k = _mm512_unpackhi_epi8(yk, zeros); + + // Scale to r, g, b. + __m512i r = scale(c, k), + g = scale(m, k), + b = scale(y, k); + + // Repack into interlaced pixels. + __m512i rg = _mm512_or_si512(r, _mm512_slli_epi16(g, 8)), + ba = _mm512_or_si512(b, _mm512_set1_epi16((uint16_t) 0xFF00)); + *lo = _mm512_unpacklo_epi16(rg, ba); + *hi = _mm512_unpackhi_epi16(rg, ba); + }; + + while (count >= 32) { + __m512i lo = _mm512_loadu_si512((const __m512i*) (src + 0)), + hi = _mm512_loadu_si512((const __m512i*) (src + 16)); + + convert8(&lo, &hi); + + _mm512_storeu_si512((__m512i*) (dst + 0), lo); + _mm512_storeu_si512((__m512i*) (dst + 16), hi); + + src += 32; + dst += 32; + count -= 32; + } + + if (count >= 16) { + __m512i lo = _mm512_loadu_si512((const __m512i*) src), + hi = _mm512_setzero_si512(); + + convert8(&lo, &hi); + + _mm512_storeu_si512((__m512i*) dst, lo); + + src += 16; + dst += 16; + count -= 16; + } + + auto proc = (kBGR1 == format) ? inverted_CMYK_to_BGR1_portable : inverted_CMYK_to_RGB1_portable; + proc(dst, src, count); +} + +/*not static*/ inline void inverted_CMYK_to_RGB1(uint32_t dst[], const uint32_t* src, int count) { + inverted_cmyk_to(kRGB1, dst, src, count); +} + +/*not static*/ inline void inverted_CMYK_to_BGR1(uint32_t dst[], const uint32_t* src, int count) { + inverted_cmyk_to(kBGR1, dst, src, count); +} + #elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_AVX2 // Scale a byte by another. @@ -580,94 +725,6 @@ static void premul_should_swapRB(bool kSwapRB, uint32_t* dst, const uint32_t* sr RGBA_to_BGRA_portable(dst, src, count); } -// Use SSSE3 impl as AVX2 impl regresses performance on some platforms. -static void insert_alpha_should_swaprb(bool kSwapRB, - uint32_t dst[], const uint8_t* src, int count) { - const __m128i alphaMask = _mm_set1_epi32(0xFF000000); - __m128i expand; - const uint8_t X = 0xFF; // Used a placeholder. The value of X is irrelevant. - if (kSwapRB) { - expand = _mm_setr_epi8(2,1,0,X, 5,4,3,X, 8,7,6,X, 11,10,9,X); - } else { - expand = _mm_setr_epi8(0,1,2,X, 3,4,5,X, 6,7,8,X, 9,10,11,X); - } - - while (count >= 6) { - // Load a vector. While this actually contains 5 pixels plus an - // extra component, we will discard all but the first four pixels on - // this iteration. - __m128i rgb = _mm_loadu_si128((const __m128i*) src); - - // Expand the first four pixels to RGBX and then mask to RGB(FF). - __m128i rgba = _mm_or_si128(_mm_shuffle_epi8(rgb, expand), alphaMask); - - // Store 4 pixels. - _mm_storeu_si128((__m128i*) dst, rgba); - - src += 4*3; - dst += 4; - count -= 4; - } - - // Call portable code to finish up the tail of [0,4) pixels. - auto proc = kSwapRB ? RGB_to_BGR1_portable : RGB_to_RGB1_portable; - proc(dst, src, count); - -} - -/*not static*/ inline void RGB_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { - insert_alpha_should_swaprb(false, dst, src, count); -} - -/*not static*/ inline void RGB_to_BGR1(uint32_t dst[], const uint8_t* src, int count) { - insert_alpha_should_swaprb(true, dst, src, count); -} - -/*not static*/ inline void gray_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { - const __m256i alphas = _mm256_set1_epi8((uint8_t) 0xFF); - while (count >= 32) { - __m256i grays = _mm256_loadu_si256((const __m256i*) src); - - __m256i gg_lo = _mm256_unpacklo_epi8(grays, grays); - __m256i gg_hi = _mm256_unpackhi_epi8(grays, grays); - __m256i ga_lo = _mm256_unpacklo_epi8(grays, alphas); - __m256i ga_hi = _mm256_unpackhi_epi8(grays, alphas); - - __m256i ggga0 = _mm256_unpacklo_epi16(gg_lo, ga_lo); - __m256i ggga1 = _mm256_unpackhi_epi16(gg_lo, ga_lo); - __m256i ggga2 = _mm256_unpacklo_epi16(gg_hi, ga_hi); - __m256i ggga3 = _mm256_unpackhi_epi16(gg_hi, ga_hi); - - // Shuffle for pixel reorder. - // Note. 'p' stands for 'ggga' - // Before shuffle: - // ggga0 = p0 p1 p2 p3 | p16 p17 p18 p19 - // ggga1 = p4 p5 p6 p7 | p20 p21 p22 p23 - // ggga2 = p8 p9 p10 p11 | p24 p25 p26 p27 - // ggga3 = p12 p13 p14 p15 | p28 p29 p30 p31 - // - // After shuffle: - // ggga0_shuffle = p0 p1 p2 p3 | p4 p5 p6 p7 - // ggga1_shuffle = p8 p9 p10 p11 | p12 p13 p14 p15 - // ggga2_shuffle = p16 p17 p18 p19 | p20 p21 p22 p23 - // ggga3_shuffle = p24 p25 p26 p27 | p28 p29 p30 p31 - __m256i ggga0_shuffle = _mm256_permute2x128_si256(ggga0, ggga1, 0x20), - ggga1_shuffle = _mm256_permute2x128_si256(ggga2, ggga3, 0x20), - ggga2_shuffle = _mm256_permute2x128_si256(ggga0, ggga1, 0x31), - ggga3_shuffle = _mm256_permute2x128_si256(ggga2, ggga3, 0x31); - - _mm256_storeu_si256((__m256i*) (dst + 0), ggga0_shuffle); - _mm256_storeu_si256((__m256i*) (dst + 8), ggga1_shuffle); - _mm256_storeu_si256((__m256i*) (dst + 16), ggga2_shuffle); - _mm256_storeu_si256((__m256i*) (dst + 24), ggga3_shuffle); - - src += 32; - dst += 32; - count -= 32; - } - gray_to_RGB1_portable(dst, src, count); -} - /*not static*/ inline void grayA_to_RGBA(uint32_t dst[], const uint8_t* src, int count) { while (count >= 16) { __m256i ga = _mm256_loadu_si256((const __m256i*) src); @@ -913,75 +970,6 @@ static void premul_should_swapRB(bool kSwapRB, uint32_t* dst, const uint32_t* sr RGBA_to_BGRA_portable(dst, src, count); } -static void insert_alpha_should_swaprb(bool kSwapRB, - uint32_t dst[], const uint8_t* src, int count) { - const __m128i alphaMask = _mm_set1_epi32(0xFF000000); - __m128i expand; - const uint8_t X = 0xFF; // Used a placeholder. The value of X is irrelevant. - if (kSwapRB) { - expand = _mm_setr_epi8(2,1,0,X, 5,4,3,X, 8,7,6,X, 11,10,9,X); - } else { - expand = _mm_setr_epi8(0,1,2,X, 3,4,5,X, 6,7,8,X, 9,10,11,X); - } - - while (count >= 6) { - // Load a vector. While this actually contains 5 pixels plus an - // extra component, we will discard all but the first four pixels on - // this iteration. - __m128i rgb = _mm_loadu_si128((const __m128i*) src); - - // Expand the first four pixels to RGBX and then mask to RGB(FF). - __m128i rgba = _mm_or_si128(_mm_shuffle_epi8(rgb, expand), alphaMask); - - // Store 4 pixels. - _mm_storeu_si128((__m128i*) dst, rgba); - - src += 4*3; - dst += 4; - count -= 4; - } - - // Call portable code to finish up the tail of [0,4) pixels. - auto proc = kSwapRB ? RGB_to_BGR1_portable : RGB_to_RGB1_portable; - proc(dst, src, count); -} - -/*not static*/ inline void RGB_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { - insert_alpha_should_swaprb(false, dst, src, count); -} - -/*not static*/ inline void RGB_to_BGR1(uint32_t dst[], const uint8_t* src, int count) { - insert_alpha_should_swaprb(true, dst, src, count); -} - -/*not static*/ inline void gray_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { - const __m128i alphas = _mm_set1_epi8((uint8_t) 0xFF); - while (count >= 16) { - __m128i grays = _mm_loadu_si128((const __m128i*) src); - - __m128i gg_lo = _mm_unpacklo_epi8(grays, grays); - __m128i gg_hi = _mm_unpackhi_epi8(grays, grays); - __m128i ga_lo = _mm_unpacklo_epi8(grays, alphas); - __m128i ga_hi = _mm_unpackhi_epi8(grays, alphas); - - __m128i ggga0 = _mm_unpacklo_epi16(gg_lo, ga_lo); - __m128i ggga1 = _mm_unpackhi_epi16(gg_lo, ga_lo); - __m128i ggga2 = _mm_unpacklo_epi16(gg_hi, ga_hi); - __m128i ggga3 = _mm_unpackhi_epi16(gg_hi, ga_hi); - - _mm_storeu_si128((__m128i*) (dst + 0), ggga0); - _mm_storeu_si128((__m128i*) (dst + 4), ggga1); - _mm_storeu_si128((__m128i*) (dst + 8), ggga2); - _mm_storeu_si128((__m128i*) (dst + 12), ggga3); - - src += 16; - dst += 16; - count -= 16; - } - - gray_to_RGB1_portable(dst, src, count); -} - /*not static*/ inline void grayA_to_RGBA(uint32_t dst[], const uint8_t* src, int count) { while (count >= 8) { __m128i ga = _mm_loadu_si128((const __m128i*) src); @@ -1119,18 +1107,6 @@ static void inverted_cmyk_to(Format format, uint32_t* dst, const uint32_t* src, RGBA_to_BGRA_portable(dst, src, count); } -/*not static*/ inline void RGB_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { - RGB_to_RGB1_portable(dst, src, count); -} - -/*not static*/ inline void RGB_to_BGR1(uint32_t dst[], const uint8_t* src, int count) { - RGB_to_BGR1_portable(dst, src, count); -} - -/*not static*/ inline void gray_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { - gray_to_RGB1_portable(dst, src, count); -} - /*not static*/ inline void grayA_to_RGBA(uint32_t dst[], const uint8_t* src, int count) { grayA_to_RGBA_portable(dst, src, count); } @@ -1149,6 +1125,265 @@ static void inverted_cmyk_to(Format format, uint32_t* dst, const uint32_t* src, #endif +// Basically as above, but we found no benefit from AVX-512 for gray_to_RGB1. +static void gray_to_RGB1_portable(uint32_t dst[], const uint8_t* src, int count) { + for (int i = 0; i < count; i++) { + dst[i] = (uint32_t)0xFF << 24 + | (uint32_t)src[i] << 16 + | (uint32_t)src[i] << 8 + | (uint32_t)src[i] << 0; + } +} +#if defined(SK_ARM_HAS_NEON) + /*not static*/ inline void gray_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { + while (count >= 16) { + // Load 16 pixels. + uint8x16_t gray = vld1q_u8(src); + + // Set each of the color channels. + uint8x16x4_t rgba; + rgba.val[0] = gray; + rgba.val[1] = gray; + rgba.val[2] = gray; + rgba.val[3] = vdupq_n_u8(0xFF); + + // Store 16 pixels. + vst4q_u8((uint8_t*) dst, rgba); + src += 16; + dst += 16; + count -= 16; + } + if (count >= 8) { + // Load 8 pixels. + uint8x8_t gray = vld1_u8(src); + + // Set each of the color channels. + uint8x8x4_t rgba; + rgba.val[0] = gray; + rgba.val[1] = gray; + rgba.val[2] = gray; + rgba.val[3] = vdup_n_u8(0xFF); + + // Store 8 pixels. + vst4_u8((uint8_t*) dst, rgba); + src += 8; + dst += 8; + count -= 8; + } + gray_to_RGB1_portable(dst, src, count); + } +#elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_AVX2 + /*not static*/ inline void gray_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { + const __m256i alphas = _mm256_set1_epi8((uint8_t) 0xFF); + while (count >= 32) { + __m256i grays = _mm256_loadu_si256((const __m256i*) src); + + __m256i gg_lo = _mm256_unpacklo_epi8(grays, grays); + __m256i gg_hi = _mm256_unpackhi_epi8(grays, grays); + __m256i ga_lo = _mm256_unpacklo_epi8(grays, alphas); + __m256i ga_hi = _mm256_unpackhi_epi8(grays, alphas); + + __m256i ggga0 = _mm256_unpacklo_epi16(gg_lo, ga_lo); + __m256i ggga1 = _mm256_unpackhi_epi16(gg_lo, ga_lo); + __m256i ggga2 = _mm256_unpacklo_epi16(gg_hi, ga_hi); + __m256i ggga3 = _mm256_unpackhi_epi16(gg_hi, ga_hi); + + // Shuffle for pixel reorder. + // Note. 'p' stands for 'ggga' + // Before shuffle: + // ggga0 = p0 p1 p2 p3 | p16 p17 p18 p19 + // ggga1 = p4 p5 p6 p7 | p20 p21 p22 p23 + // ggga2 = p8 p9 p10 p11 | p24 p25 p26 p27 + // ggga3 = p12 p13 p14 p15 | p28 p29 p30 p31 + // + // After shuffle: + // ggga0_shuffle = p0 p1 p2 p3 | p4 p5 p6 p7 + // ggga1_shuffle = p8 p9 p10 p11 | p12 p13 p14 p15 + // ggga2_shuffle = p16 p17 p18 p19 | p20 p21 p22 p23 + // ggga3_shuffle = p24 p25 p26 p27 | p28 p29 p30 p31 + __m256i ggga0_shuffle = _mm256_permute2x128_si256(ggga0, ggga1, 0x20), + ggga1_shuffle = _mm256_permute2x128_si256(ggga2, ggga3, 0x20), + ggga2_shuffle = _mm256_permute2x128_si256(ggga0, ggga1, 0x31), + ggga3_shuffle = _mm256_permute2x128_si256(ggga2, ggga3, 0x31); + + _mm256_storeu_si256((__m256i*) (dst + 0), ggga0_shuffle); + _mm256_storeu_si256((__m256i*) (dst + 8), ggga1_shuffle); + _mm256_storeu_si256((__m256i*) (dst + 16), ggga2_shuffle); + _mm256_storeu_si256((__m256i*) (dst + 24), ggga3_shuffle); + + src += 32; + dst += 32; + count -= 32; + } + gray_to_RGB1_portable(dst, src, count); + } +#elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSSE3 // TODO: just check >= SSE2? + /*not static*/ inline void gray_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { + const __m128i alphas = _mm_set1_epi8((uint8_t) 0xFF); + while (count >= 16) { + __m128i grays = _mm_loadu_si128((const __m128i*) src); + + __m128i gg_lo = _mm_unpacklo_epi8(grays, grays); + __m128i gg_hi = _mm_unpackhi_epi8(grays, grays); + __m128i ga_lo = _mm_unpacklo_epi8(grays, alphas); + __m128i ga_hi = _mm_unpackhi_epi8(grays, alphas); + + __m128i ggga0 = _mm_unpacklo_epi16(gg_lo, ga_lo); + __m128i ggga1 = _mm_unpackhi_epi16(gg_lo, ga_lo); + __m128i ggga2 = _mm_unpacklo_epi16(gg_hi, ga_hi); + __m128i ggga3 = _mm_unpackhi_epi16(gg_hi, ga_hi); + + _mm_storeu_si128((__m128i*) (dst + 0), ggga0); + _mm_storeu_si128((__m128i*) (dst + 4), ggga1); + _mm_storeu_si128((__m128i*) (dst + 8), ggga2); + _mm_storeu_si128((__m128i*) (dst + 12), ggga3); + + src += 16; + dst += 16; + count -= 16; + } + gray_to_RGB1_portable(dst, src, count); + } +#else + /*not static*/ inline void gray_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { + gray_to_RGB1_portable(dst, src, count); + } +#endif + +// Again as above, this time not even finding benefit from AVX2 for RGB_to_{RGB,BGR}1. +static void RGB_to_RGB1_portable(uint32_t dst[], const uint8_t* src, int count) { + for (int i = 0; i < count; i++) { + uint8_t r = src[0], + g = src[1], + b = src[2]; + src += 3; + dst[i] = (uint32_t)0xFF << 24 + | (uint32_t)b << 16 + | (uint32_t)g << 8 + | (uint32_t)r << 0; + } +} +static void RGB_to_BGR1_portable(uint32_t dst[], const uint8_t* src, int count) { + for (int i = 0; i < count; i++) { + uint8_t r = src[0], + g = src[1], + b = src[2]; + src += 3; + dst[i] = (uint32_t)0xFF << 24 + | (uint32_t)r << 16 + | (uint32_t)g << 8 + | (uint32_t)b << 0; + } +} +#if defined(SK_ARM_HAS_NEON) + static void insert_alpha_should_swaprb(bool kSwapRB, + uint32_t dst[], const uint8_t* src, int count) { + while (count >= 16) { + // Load 16 pixels. + uint8x16x3_t rgb = vld3q_u8(src); + + // Insert an opaque alpha channel and swap if needed. + uint8x16x4_t rgba; + if (kSwapRB) { + rgba.val[0] = rgb.val[2]; + rgba.val[2] = rgb.val[0]; + } else { + rgba.val[0] = rgb.val[0]; + rgba.val[2] = rgb.val[2]; + } + rgba.val[1] = rgb.val[1]; + rgba.val[3] = vdupq_n_u8(0xFF); + + // Store 16 pixels. + vst4q_u8((uint8_t*) dst, rgba); + src += 16*3; + dst += 16; + count -= 16; + } + + if (count >= 8) { + // Load 8 pixels. + uint8x8x3_t rgb = vld3_u8(src); + + // Insert an opaque alpha channel and swap if needed. + uint8x8x4_t rgba; + if (kSwapRB) { + rgba.val[0] = rgb.val[2]; + rgba.val[2] = rgb.val[0]; + } else { + rgba.val[0] = rgb.val[0]; + rgba.val[2] = rgb.val[2]; + } + rgba.val[1] = rgb.val[1]; + rgba.val[3] = vdup_n_u8(0xFF); + + // Store 8 pixels. + vst4_u8((uint8_t*) dst, rgba); + src += 8*3; + dst += 8; + count -= 8; + } + + // Call portable code to finish up the tail of [0,8) pixels. + auto proc = kSwapRB ? RGB_to_BGR1_portable : RGB_to_RGB1_portable; + proc(dst, src, count); + } + + /*not static*/ inline void RGB_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { + insert_alpha_should_swaprb(false, dst, src, count); + } + /*not static*/ inline void RGB_to_BGR1(uint32_t dst[], const uint8_t* src, int count) { + insert_alpha_should_swaprb(true, dst, src, count); + } +#elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSSE3 + static void insert_alpha_should_swaprb(bool kSwapRB, + uint32_t dst[], const uint8_t* src, int count) { + const __m128i alphaMask = _mm_set1_epi32(0xFF000000); + __m128i expand; + const uint8_t X = 0xFF; // Used a placeholder. The value of X is irrelevant. + if (kSwapRB) { + expand = _mm_setr_epi8(2,1,0,X, 5,4,3,X, 8,7,6,X, 11,10,9,X); + } else { + expand = _mm_setr_epi8(0,1,2,X, 3,4,5,X, 6,7,8,X, 9,10,11,X); + } + + while (count >= 6) { + // Load a vector. While this actually contains 5 pixels plus an + // extra component, we will discard all but the first four pixels on + // this iteration. + __m128i rgb = _mm_loadu_si128((const __m128i*) src); + + // Expand the first four pixels to RGBX and then mask to RGB(FF). + __m128i rgba = _mm_or_si128(_mm_shuffle_epi8(rgb, expand), alphaMask); + + // Store 4 pixels. + _mm_storeu_si128((__m128i*) dst, rgba); + + src += 4*3; + dst += 4; + count -= 4; + } + + // Call portable code to finish up the tail of [0,4) pixels. + auto proc = kSwapRB ? RGB_to_BGR1_portable : RGB_to_RGB1_portable; + proc(dst, src, count); + } + + /*not static*/ inline void RGB_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { + insert_alpha_should_swaprb(false, dst, src, count); + } + /*not static*/ inline void RGB_to_BGR1(uint32_t dst[], const uint8_t* src, int count) { + insert_alpha_should_swaprb(true, dst, src, count); + } +#else + /*not static*/ inline void RGB_to_RGB1(uint32_t dst[], const uint8_t* src, int count) { + RGB_to_RGB1_portable(dst, src, count); + } + /*not static*/ inline void RGB_to_BGR1(uint32_t dst[], const uint8_t* src, int count) { + RGB_to_BGR1_portable(dst, src, count); + } +#endif + } #endif // SkSwizzler_opts_DEFINED diff --git a/src/opts/SkVM_opts.h b/src/opts/SkVM_opts.h index 2a953b76eb0f5..a4a719b8da106 100644 --- a/src/opts/SkVM_opts.h +++ b/src/opts/SkVM_opts.h @@ -229,6 +229,7 @@ namespace SK_OPTS_NS { CASE(Op::pack): r(d).u32 = r(x).u32 | (r(y).u32 << immz); break; + CASE(Op::ceil): r(d).f32 = skvx::ceil(r(x).f32) ; break; CASE(Op::floor): r(d).f32 = skvx::floor(r(x).f32) ; break; CASE(Op::to_f32): r(d).f32 = skvx::cast( r(x).i32 ); break; CASE(Op::trunc): r(d).i32 = skvx::cast ( r(x).f32 ); break; diff --git a/src/pathops/SkPathOpsCubic.cpp b/src/pathops/SkPathOpsCubic.cpp index ebf195d7b0ac0..1275fababd0e8 100644 --- a/src/pathops/SkPathOpsCubic.cpp +++ b/src/pathops/SkPathOpsCubic.cpp @@ -257,7 +257,7 @@ int SkDCubic::ComplexBreak(const SkPoint pointsPtr[4], SkScalar* t) { return (int) (t[0] > 0 && t[0] < 1); } } - // fall through if no t value found + [[fallthrough]]; // fall through if no t value found case SkCubicType::kSerpentine: case SkCubicType::kLocalCusp: case SkCubicType::kCuspAtInfinity: { @@ -313,9 +313,10 @@ int SkDCubic::ComplexBreak(const SkPoint pointsPtr[4], SkScalar* t) { } return resultCount; } + break; } default: - ; + break; } return 0; } diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp index 67bb2d4466a50..fbdf97daff2dd 100644 --- a/src/pdf/SkPDFDevice.cpp +++ b/src/pdf/SkPDFDevice.cpp @@ -1722,8 +1722,7 @@ void SkPDFDevice::internalDrawImageRect(SkKeyedImage imageSubset, #include "include/core/SkImageFilter.h" #include "src/core/SkSpecialImage.h" -void SkPDFDevice::drawSpecial(SkSpecialImage* srcImg, int x, int y, const SkPaint& paint, - SkImage* clipImage, const SkMatrix& clipMatrix) { +void SkPDFDevice::drawSpecial(SkSpecialImage* srcImg, int x, int y, const SkPaint& paint) { if (this->hasEmptyClip()) { return; } diff --git a/src/pdf/SkPDFDevice.h b/src/pdf/SkPDFDevice.h index c0c2d7419f3c8..cee58904b7a01 100644 --- a/src/pdf/SkPDFDevice.h +++ b/src/pdf/SkPDFDevice.h @@ -111,8 +111,7 @@ class SkPDFDevice final : public SkClipStackDevice { void drawAnnotation(const SkRect&, const char key[], SkData* value) override; - void drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&, - SkImage*, const SkMatrix&) override; + void drawSpecial(SkSpecialImage*, int x, int y, const SkPaint&) override; sk_sp makeSpecial(const SkBitmap&) override; sk_sp makeSpecial(const SkImage*) override; SkImageFilterCache* getImageFilterCache() override; diff --git a/src/pdf/SkPDFTag.cpp b/src/pdf/SkPDFTag.cpp index 3f43005797f23..7bcebf99c9a0e 100644 --- a/src/pdf/SkPDFTag.cpp +++ b/src/pdf/SkPDFTag.cpp @@ -66,6 +66,40 @@ static const char* tag_name_from_type(SkPDF::DocumentStructureType type) { SK_ABORT("bad tag"); } +struct SkPDFTagNode { + // Structure element nodes need a unique alphanumeric ID, + // and we need to be able to output them sorted in lexicographic + // order. This helper function takes one of our node IDs and + // builds an ID string that zero-pads the digits so that lexicographic + // order matches numeric order. + static SkString nodeIdToString(int nodeId) { + SkString idString; + idString.printf("node%08d", nodeId); + return idString; + } + + SkPDFTagNode* fChildren = nullptr; + size_t fChildCount = 0; + struct MarkedContentInfo { + unsigned fPageIndex; + int fMarkId; + }; + SkTArray fMarkedContent; + int fNodeId; + SkPDF::DocumentStructureType fType; + SkString fTypeString; + SkString fAlt; + SkString fLang; + SkPDFIndirectReference fRef; + enum State { + kUnknown, + kYes, + kNo, + } fCanDiscard = kUnknown; + std::unique_ptr fAttributes; + std::vector fAnnotations; +}; + SkPDF::AttributeList::AttributeList() = default; SkPDF::AttributeList::~AttributeList() = default; @@ -90,7 +124,7 @@ void SkPDF::AttributeList::appendFloat( fAttrs->appendObject(std::move(attrDict)); } -void SkPDF::AttributeList::appendString( +void SkPDF::AttributeList::appendName( const char* owner, const char* name, const char* value) { if (!fAttrs) fAttrs = SkPDFMakeArray(); @@ -100,6 +134,16 @@ void SkPDF::AttributeList::appendString( fAttrs->appendObject(std::move(attrDict)); } +void SkPDF::AttributeList::appendString( + const char* owner, const char* name, const char* value) { + if (!fAttrs) + fAttrs = SkPDFMakeArray(); + std::unique_ptr attrDict = SkPDFMakeDict(); + attrDict->insertName("O", owner); + attrDict->insertString(name, value); + fAttrs->appendObject(std::move(attrDict)); +} + void SkPDF::AttributeList::appendFloatArray( const char* owner, const char* name, const std::vector& value) { if (!fAttrs) @@ -114,55 +158,40 @@ void SkPDF::AttributeList::appendFloatArray( fAttrs->appendObject(std::move(attrDict)); } +// Deprecated. void SkPDF::AttributeList::appendStringArray( - const char* owner, - const char* name, - const std::vector& value) { + const char* owner, + const char* name, + const std::vector& values) { if (!fAttrs) fAttrs = SkPDFMakeArray(); std::unique_ptr attrDict = SkPDFMakeDict(); attrDict->insertName("O", owner); std::unique_ptr pdfArray = SkPDFMakeArray(); - for (SkString element : value) { - pdfArray->appendName(element); + for (SkString element : values) { + pdfArray->appendString(element); } attrDict->insertObject(name, std::move(pdfArray)); fAttrs->appendObject(std::move(attrDict)); } -struct SkPDFTagNode { - // Structure element nodes need a unique alphanumeric ID, - // and we need to be able to output them sorted in lexicographic - // order. This helper function takes one of our node IDs and - // builds an ID string that zero-pads the digits so that lexicographic - // order matches numeric order. - static SkString nodeIdToString(int nodeId) { - SkString idString; - idString.printf("node%08d", nodeId); - return idString; - } - SkPDFTagNode* fChildren = nullptr; - size_t fChildCount = 0; - struct MarkedContentInfo { - unsigned fPageIndex; - int fMarkId; - }; - SkTArray fMarkedContent; - int fNodeId; - SkPDF::DocumentStructureType fType; - SkString fTypeString; - SkString fAlt; - SkString fLang; - SkPDFIndirectReference fRef; - enum State { - kUnknown, - kYes, - kNo, - } fCanDiscard = kUnknown; - std::unique_ptr fAttributes; - std::vector fAnnotations; -}; +void SkPDF::AttributeList::appendNodeIdArray( + const char* owner, + const char* name, + const std::vector& nodeIds) { + if (!fAttrs) + fAttrs = SkPDFMakeArray(); + std::unique_ptr attrDict = SkPDFMakeDict(); + attrDict->insertName("O", owner); + std::unique_ptr pdfArray = SkPDFMakeArray(); + for (int nodeId : nodeIds) { + SkString idString = SkPDFTagNode::nodeIdToString(nodeId); + pdfArray->appendString(idString); + } + attrDict->insertObject(name, std::move(pdfArray)); + fAttrs->appendObject(std::move(attrDict)); +} SkPDFTagTree::SkPDFTagTree() : fArena(4 * sizeof(SkPDFTagNode)) {} @@ -184,23 +213,12 @@ void SkPDFTagTree::Copy(SkPDF::StructureElementNode& node, dst->fAlt = node.fAlt; dst->fLang = node.fLang; - // Temporarily support both raw fChildren and fChildVector. - if (node.fChildren) { - size_t childCount = node.fChildCount; - SkPDFTagNode* children = arena->makeArray(childCount); - dst->fChildCount = childCount; - dst->fChildren = children; - for (size_t i = 0; i < childCount; ++i) { - Copy(node.fChildren[i], &children[i], arena, nodeMap); - } - } else { - size_t childCount = node.fChildVector.size(); - SkPDFTagNode* children = arena->makeArray(childCount); - dst->fChildCount = childCount; - dst->fChildren = children; - for (size_t i = 0; i < childCount; ++i) { - Copy(*node.fChildVector[i], &children[i], arena, nodeMap); - } + size_t childCount = node.fChildVector.size(); + SkPDFTagNode* children = arena->makeArray(childCount); + dst->fChildCount = childCount; + dst->fChildren = children; + for (size_t i = 0; i < childCount; ++i) { + Copy(*node.fChildVector[i], &children[i], arena, nodeMap); } dst->fAttributes = std::move(node.fAttributes.fAttrs); diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp deleted file mode 100644 index 9e29b5cee6c18..0000000000000 --- a/src/ports/SkFontHost_mac.cpp +++ /dev/null @@ -1,3226 +0,0 @@ -/* - * Copyright 2006 The Android Open Source Project - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "include/core/SkTypes.h" -#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) - -#ifdef SK_BUILD_FOR_MAC -#import -#endif - -#ifdef SK_BUILD_FOR_IOS -#include -#include -#include -#include -#endif - -#include "include/core/SkFontMetrics.h" -#include "include/core/SkFontMgr.h" -#include "include/core/SkPaint.h" -#include "include/core/SkPath.h" -#include "include/core/SkStream.h" -#include "include/core/SkString.h" -#include "include/ports/SkTypeface_mac.h" -#include "include/private/SkColorData.h" -#include "include/private/SkFloatingPoint.h" -#include "include/private/SkMutex.h" -#include "include/private/SkOnce.h" -#include "include/private/SkTemplates.h" -#include "include/private/SkTo.h" -#include "include/utils/mac/SkCGUtils.h" -#include "src/core/SkAdvancedTypefaceMetrics.h" -#include "src/core/SkAutoMalloc.h" -#include "src/core/SkDescriptor.h" -#include "src/core/SkEndian.h" -#include "src/core/SkFontDescriptor.h" -#include "src/core/SkGlyph.h" -#include "src/core/SkMaskGamma.h" -#include "src/core/SkMathPriv.h" -#include "src/core/SkTypefaceCache.h" -#include "src/core/SkUtils.h" -#include "src/sfnt/SkOTTable_OS_2.h" -#include "src/sfnt/SkOTUtils.h" -#include "src/sfnt/SkSFNTHeader.h" -#include "src/utils/SkUTF.h" -#include "src/utils/mac/SkUniqueCFRef.h" - -#include - -#include - -// Set to make glyph bounding boxes visible. -#define SK_SHOW_TEXT_BLIT_COVERAGE 0 - -CTFontRef SkTypeface_GetCTFontRef(const SkTypeface* face) { - return face ? (CTFontRef)face->internal_private_getCTFontRef() : nullptr; -} - -class SkScalerContext_Mac; - -static SkUniqueCFRef make_CFString(const char s[]) { - return SkUniqueCFRef(CFStringCreateWithCString(nullptr, s, kCFStringEncodingUTF8)); -} - -// inline versions of these rect helpers - -static bool CGRectIsEmpty_inline(const CGRect& rect) { - return rect.size.width <= 0 || rect.size.height <= 0; -} - -static CGFloat CGRectGetMinX_inline(const CGRect& rect) { - return rect.origin.x; -} - -static CGFloat CGRectGetMaxX_inline(const CGRect& rect) { - return rect.origin.x + rect.size.width; -} - -static CGFloat CGRectGetMinY_inline(const CGRect& rect) { - return rect.origin.y; -} - -static CGFloat CGRectGetMaxY_inline(const CGRect& rect) { - return rect.origin.y + rect.size.height; -} - -static CGFloat CGRectGetWidth_inline(const CGRect& rect) { - return rect.size.width; -} - -/////////////////////////////////////////////////////////////////////////////// - -static void sk_memset_rect32(uint32_t* ptr, uint32_t value, - int width, int height, size_t rowBytes) { - SkASSERT(width); - SkASSERT(width * sizeof(uint32_t) <= rowBytes); - - if (width >= 32) { - while (height) { - sk_memset32(ptr, value, width); - ptr = (uint32_t*)((char*)ptr + rowBytes); - height -= 1; - } - return; - } - - rowBytes -= width * sizeof(uint32_t); - - if (width >= 8) { - while (height) { - int w = width; - do { - *ptr++ = value; *ptr++ = value; - *ptr++ = value; *ptr++ = value; - *ptr++ = value; *ptr++ = value; - *ptr++ = value; *ptr++ = value; - w -= 8; - } while (w >= 8); - while (--w >= 0) { - *ptr++ = value; - } - ptr = (uint32_t*)((char*)ptr + rowBytes); - height -= 1; - } - } else { - while (height) { - int w = width; - do { - *ptr++ = value; - } while (--w > 0); - ptr = (uint32_t*)((char*)ptr + rowBytes); - height -= 1; - } - } -} - -typedef uint32_t CGRGBPixel; - -static unsigned CGRGBPixel_getAlpha(CGRGBPixel pixel) { - return pixel & 0xFF; -} - -static CGFloat ScalarToCG(SkScalar scalar) { - if (sizeof(CGFloat) == sizeof(float)) { - return SkScalarToFloat(scalar); - } else { - SkASSERT(sizeof(CGFloat) == sizeof(double)); - return (CGFloat) SkScalarToDouble(scalar); - } -} - -static SkScalar CGToScalar(CGFloat cgFloat) { - if (sizeof(CGFloat) == sizeof(float)) { - return SkFloatToScalar(cgFloat); - } else { - SkASSERT(sizeof(CGFloat) == sizeof(double)); - return SkDoubleToScalar(cgFloat); - } -} - -static float CGToFloat(CGFloat cgFloat) { - if (sizeof(CGFloat) == sizeof(float)) { - return cgFloat; - } else { - SkASSERT(sizeof(CGFloat) == sizeof(double)); - return static_cast(cgFloat); - } -} - -static CGAffineTransform MatrixToCGAffineTransform(const SkMatrix& matrix) { - return CGAffineTransformMake( ScalarToCG(matrix[SkMatrix::kMScaleX]), - -ScalarToCG(matrix[SkMatrix::kMSkewY] ), - -ScalarToCG(matrix[SkMatrix::kMSkewX] ), - ScalarToCG(matrix[SkMatrix::kMScaleY]), - ScalarToCG(matrix[SkMatrix::kMTransX]), - ScalarToCG(matrix[SkMatrix::kMTransY])); -} - -/////////////////////////////////////////////////////////////////////////////// - -#define BITMAP_INFO_RGB (kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Host) - -/** Drawn in FontForge, reduced with fonttools ttx, converted by xxd -i, - * this TrueType font contains a glyph of the spider. - * - * To re-forge the original bytes of the TrueType font file, - * remove all ',|( +0x)' from this definition, - * copy the data to the clipboard, - * run 'pbpaste | xxd -p -r - spider.ttf'. - */ -static constexpr const uint8_t kSpiderSymbol_ttf[] = { - 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x80, 0x00, 0x03, 0x00, 0x40, - 0x47, 0x44, 0x45, 0x46, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x07, 0xa8, - 0x00, 0x00, 0x00, 0x18, 0x4f, 0x53, 0x2f, 0x32, 0x8a, 0xf4, 0xfb, 0xdb, - 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, - 0xe0, 0x7f, 0x10, 0x7e, 0x00, 0x00, 0x01, 0xb8, 0x00, 0x00, 0x00, 0x54, - 0x67, 0x61, 0x73, 0x70, 0xff, 0xff, 0x00, 0x03, 0x00, 0x00, 0x07, 0xa0, - 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, 0x97, 0x0b, 0x6a, 0xf6, - 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x03, 0x40, 0x68, 0x65, 0x61, 0x64, - 0x0f, 0xa2, 0x24, 0x1a, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x36, - 0x68, 0x68, 0x65, 0x61, 0x0e, 0xd3, 0x07, 0x3f, 0x00, 0x00, 0x01, 0x04, - 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, 0x10, 0x03, 0x00, 0x44, - 0x00, 0x00, 0x01, 0xa8, 0x00, 0x00, 0x00, 0x0e, 0x6c, 0x6f, 0x63, 0x61, - 0x01, 0xb4, 0x00, 0x28, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x0a, - 0x6d, 0x61, 0x78, 0x70, 0x00, 0x4a, 0x01, 0x4d, 0x00, 0x00, 0x01, 0x28, - 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xc3, 0xe5, 0x39, 0xd4, - 0x00, 0x00, 0x05, 0x58, 0x00, 0x00, 0x02, 0x28, 0x70, 0x6f, 0x73, 0x74, - 0xff, 0x03, 0x00, 0x67, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x20, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x0f, 0x08, 0x1d, - 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xd1, 0x97, 0xa8, 0x5a, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xe8, 0x32, 0x33, - 0x00, 0x03, 0xff, 0x3b, 0x08, 0x00, 0x05, 0x55, 0x00, 0x00, 0x00, 0x08, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x05, 0x55, 0xff, 0x3b, 0x01, 0x79, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x04, 0x01, 0x1c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x2e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x01, 0x90, 0x00, 0x05, - 0x00, 0x00, 0x05, 0x33, 0x05, 0x99, 0x00, 0x00, 0x01, 0x1e, 0x05, 0x33, - 0x05, 0x99, 0x00, 0x00, 0x03, 0xd7, 0x00, 0x66, 0x02, 0x12, 0x00, 0x00, - 0x05, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x73, 0x6b, 0x69, 0x61, 0x00, 0xc0, 0x00, 0x00, 0xf0, 0x21, - 0x06, 0x66, 0xfe, 0x66, 0x01, 0x79, 0x05, 0x55, 0x00, 0xc5, 0x80, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x20, 0x00, 0x01, 0x08, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x48, - 0x00, 0x00, 0x00, 0x0e, 0x00, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x00, - 0x00, 0x09, 0x00, 0x0d, 0x00, 0x1d, 0x00, 0x21, 0xf0, 0x21, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x1d, 0x00, 0x21, - 0xf0, 0x21, 0xff, 0xff, 0x00, 0x01, 0xff, 0xf9, 0xff, 0xf5, 0xff, 0xe4, - 0xff, 0xe2, 0x0f, 0xe2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, - 0x00, 0x14, 0x00, 0x14, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x44, - 0x00, 0x00, 0x02, 0x64, 0x05, 0x55, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, - 0x33, 0x11, 0x21, 0x11, 0x25, 0x21, 0x11, 0x21, 0x44, 0x02, 0x20, 0xfe, - 0x24, 0x01, 0x98, 0xfe, 0x68, 0x05, 0x55, 0xfa, 0xab, 0x44, 0x04, 0xcd, - 0x00, 0x04, 0x00, 0x03, 0xff, 0x3b, 0x08, 0x00, 0x05, 0x4c, 0x00, 0x15, - 0x00, 0x1d, 0x00, 0x25, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x36, 0x37, 0x36, - 0x27, 0x26, 0x07, 0x06, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x07, - 0x06, 0x17, 0x16, 0x17, 0x16, 0x32, 0x37, 0x32, 0x35, 0x34, 0x23, 0x22, - 0x15, 0x14, 0x27, 0x32, 0x35, 0x34, 0x23, 0x22, 0x15, 0x14, 0x03, 0x32, - 0x17, 0x30, 0x17, 0x31, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x33, - 0x32, 0x33, 0x16, 0x33, 0x32, 0x17, 0x16, 0x07, 0x06, 0x23, 0x22, 0x27, - 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, - 0x1f, 0x02, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x17, 0x16, 0x33, - 0x16, 0x17, 0x16, 0x07, 0x06, 0x23, 0x22, 0x27, 0x27, 0x26, 0x23, 0x22, - 0x07, 0x06, 0x07, 0x06, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x33, 0x32, - 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x1f, 0x02, 0x16, 0x17, 0x16, 0x15, - 0x14, 0x23, 0x22, 0x27, 0x27, 0x26, 0x27, 0x27, 0x26, 0x27, 0x26, 0x07, - 0x06, 0x07, 0x06, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, - 0x06, 0x23, 0x22, 0x27, 0x26, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, - 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, - 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37, 0x34, 0x27, 0x26, 0x07, - 0x06, 0x07, 0x06, 0x0f, 0x02, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, - 0x37, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x27, 0x26, 0x27, - 0x26, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x07, 0x06, 0x23, 0x22, - 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x37, 0x36, 0x37, 0x37, 0x36, - 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, - 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x27, 0x26, 0x27, 0x26, - 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, - 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, - 0x33, 0x04, 0xf5, 0x23, 0x13, 0x11, 0x14, 0x16, 0x1d, 0x1b, 0x4c, 0x1f, - 0x0e, 0x2d, 0x23, 0x14, 0x2c, 0x13, 0x18, 0x25, 0x2c, 0x10, 0x3c, 0x71, - 0x1d, 0x5c, 0x5c, 0x3f, 0xae, 0x5c, 0x5c, 0x3f, 0x6a, 0x27, 0x31, 0x5b, - 0x09, 0x27, 0x36, 0x03, 0x0a, 0x26, 0x35, 0x2e, 0x09, 0x08, 0xc6, 0x13, - 0x81, 0x17, 0x20, 0x18, 0x21, 0x1e, 0x04, 0x04, 0x15, 0x5c, 0x22, 0x26, - 0x48, 0x56, 0x3b, 0x10, 0x21, 0x01, 0x0c, 0x06, 0x06, 0x0f, 0x31, 0x44, - 0x3c, 0x52, 0x4a, 0x1d, 0x11, 0x3f, 0xb4, 0x71, 0x01, 0x26, 0x06, 0x0d, - 0x15, 0x1a, 0x2a, 0x13, 0x53, 0xaa, 0x42, 0x1d, 0x0a, 0x33, 0x20, 0x21, - 0x2b, 0x01, 0x02, 0x3e, 0x21, 0x09, 0x02, 0x02, 0x0f, 0x2d, 0x4b, 0x0a, - 0x22, 0x15, 0x20, 0x1f, 0x72, 0x8b, 0x2d, 0x2f, 0x1d, 0x1f, 0x0e, 0x25, - 0x3f, 0x4d, 0x1b, 0x63, 0x2a, 0x2c, 0x14, 0x22, 0x18, 0x1c, 0x0f, 0x08, - 0x2a, 0x08, 0x08, 0x0d, 0x3b, 0x4c, 0x52, 0x74, 0x27, 0x71, 0x2e, 0x01, - 0x0c, 0x10, 0x15, 0x0d, 0x06, 0x0d, 0x05, 0x01, 0x06, 0x2c, 0x28, 0x14, - 0x1b, 0x05, 0x04, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x16, 0x27, 0x03, 0x0d, - 0x30, 0x4c, 0x4c, 0x4b, 0x1f, 0x0b, 0x22, 0x26, 0x0d, 0x15, 0x0d, 0x2d, - 0x68, 0x34, 0x14, 0x3c, 0x25, 0x12, 0x04, 0x10, 0x18, 0x0b, 0x09, 0x30, - 0x2b, 0x44, 0x66, 0x14, 0x47, 0x47, 0x59, 0x73, 0x25, 0x05, 0x03, 0x1f, - 0x01, 0x08, 0x3f, 0x48, 0x4b, 0x4b, 0x76, 0x2f, 0x49, 0x2d, 0x22, 0x24, - 0x0c, 0x15, 0x08, 0x0e, 0x33, 0x03, 0x44, 0x4c, 0x10, 0x46, 0x13, 0x1f, - 0x27, 0x1b, 0x1d, 0x13, 0x02, 0x24, 0x08, 0x02, 0x42, 0x0e, 0x4d, 0x3c, - 0x19, 0x1b, 0x40, 0x2b, 0x2b, 0x1e, 0x16, 0x11, 0x04, 0x1f, 0x11, 0x04, - 0x18, 0x11, 0x35, 0x01, 0xa3, 0x13, 0x24, 0x1f, 0x0b, 0x0c, 0x19, 0x19, - 0x18, 0x13, 0x0f, 0x0c, 0x1a, 0x18, 0x1f, 0x19, 0x1e, 0x07, 0x1a, 0xc3, - 0x54, 0x51, 0x54, 0x51, 0x04, 0x53, 0x51, 0x54, 0x50, 0x02, 0x48, 0x1a, - 0x31, 0x18, 0x55, 0x74, 0x04, 0x0e, 0x09, 0x0d, 0x06, 0x10, 0x16, 0x1b, - 0x24, 0x01, 0x04, 0x0b, 0x04, 0x10, 0x3f, 0x0a, 0x41, 0x02, 0x41, 0x20, - 0x06, 0x12, 0x16, 0x21, 0x17, 0x2a, 0x1e, 0x15, 0x40, 0x27, 0x11, 0x0e, - 0x1e, 0x11, 0x15, 0x1f, 0x43, 0x13, 0x1a, 0x10, 0x15, 0x1b, 0x04, 0x09, - 0x4d, 0x2a, 0x0f, 0x19, 0x0a, 0x0a, 0x03, 0x05, 0x15, 0x3c, 0x64, 0x21, - 0x4b, 0x2e, 0x21, 0x28, 0x13, 0x47, 0x44, 0x19, 0x3f, 0x11, 0x18, 0x0b, - 0x0a, 0x07, 0x18, 0x0d, 0x07, 0x24, 0x2c, 0x2b, 0x21, 0x32, 0x10, 0x48, - 0x2a, 0x2d, 0x1e, 0x1a, 0x01, 0x0c, 0x43, 0x59, 0x28, 0x4e, 0x1c, 0x0d, - 0x5d, 0x24, 0x14, 0x0a, 0x05, 0x1f, 0x24, 0x32, 0x46, 0x3e, 0x5f, 0x3e, - 0x44, 0x1a, 0x30, 0x15, 0x0d, 0x07, 0x18, 0x2b, 0x03, 0x0d, 0x1a, 0x28, - 0x28, 0x57, 0xb2, 0x29, 0x27, 0x40, 0x2c, 0x23, 0x16, 0x63, 0x58, 0x1a, - 0x0a, 0x18, 0x11, 0x23, 0x08, 0x1b, 0x29, 0x05, 0x04, 0x0b, 0x15, 0x0d, - 0x14, 0x0b, 0x2a, 0x29, 0x5a, 0x62, 0x01, 0x19, 0x1e, 0x05, 0x05, 0x26, - 0x42, 0x42, 0x2a, 0x2a, 0x3f, 0x0d, 0x0f, 0x09, 0x05, 0x07, 0x01, 0x0b, - 0x25, 0x3e, 0x0d, 0x17, 0x11, 0x01, 0x03, 0x0d, 0x13, 0x20, 0x19, 0x11, - 0x03, 0x02, 0x01, 0x04, 0x11, 0x04, 0x05, 0x1b, 0x3d, 0x10, 0x29, 0x20, - 0x04, 0x04, 0x0a, 0x07, 0x04, 0x1f, 0x15, 0x20, 0x3e, 0x0f, 0x2a, 0x1e, - 0x00, 0x00, 0x00, 0x1b, 0x01, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x07, 0x00, 0x27, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x04, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x02, 0x00, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x06, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0e, 0x00, 0x1a, 0x00, 0x30, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x00, 0x00, 0x36, 0x00, 0x4a, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x01, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x02, 0x00, 0x0e, 0x00, 0x98, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x03, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x04, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x05, 0x00, 0x04, 0x00, 0xa6, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x06, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x0d, 0x00, 0x36, 0x00, 0x4a, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, - 0x00, 0x0e, 0x00, 0x34, 0x00, 0xaa, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x00, 0x00, 0x36, 0x00, 0x4a, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x01, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x02, 0x00, 0x0e, 0x00, 0x98, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x03, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x04, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x05, 0x00, 0x04, 0x00, 0xa6, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x06, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x0d, 0x00, 0x36, 0x00, 0x4a, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, - 0x00, 0x0e, 0x00, 0x34, 0x00, 0xaa, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, - 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x35, - 0x2c, 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x53, 0x70, 0x69, - 0x64, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x52, 0x65, 0x67, - 0x75, 0x6c, 0x61, 0x72, 0x56, 0x31, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, - 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x2e, 0x73, 0x69, 0x6c, - 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x4f, 0x46, 0x4c, 0x00, 0x43, 0x00, 0x6f, - 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, - 0x00, 0x74, 0x00, 0x20, 0x00, 0x28, 0x00, 0x63, 0x00, 0x29, 0x00, 0x20, - 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x35, 0x00, 0x2c, 0x00, 0x20, - 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, - 0x00, 0x2e, 0x00, 0x53, 0x00, 0x70, 0x00, 0x69, 0x00, 0x64, 0x00, 0x65, - 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x6f, - 0x00, 0x6c, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, - 0x00, 0x61, 0x00, 0x72, 0x00, 0x56, 0x00, 0x31, 0x00, 0x68, 0x00, 0x74, - 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x73, - 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x73, - 0x00, 0x2e, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x2e, 0x00, 0x6f, - 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00, 0x4f, 0x00, 0x46, 0x00, 0x4c, - 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x66, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xff, 0xff, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x0c, 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00 -}; - -enum class SmoothBehavior { - none, // SmoothFonts produces no effect. - some, // SmoothFonts produces some effect, but not subpixel coverage. - subpixel, // SmoothFonts produces some effect and provides subpixel coverage. -}; - -/** - * There does not appear to be a publicly accessable API for determining if lcd - * font smoothing will be applied if we request it. The main issue is that if - * smoothing is applied a gamma of 2.0 will be used, if not a gamma of 1.0. - */ -static SmoothBehavior smooth_behavior() { - static SmoothBehavior gSmoothBehavior = []{ - uint32_t noSmoothBitmap[16][16] = {}; - uint32_t smoothBitmap[16][16] = {}; - - SkUniqueCFRef colorspace(CGColorSpaceCreateDeviceRGB()); - SkUniqueCFRef noSmoothContext( - CGBitmapContextCreate(&noSmoothBitmap, 16, 16, 8, 16*4, - colorspace.get(), BITMAP_INFO_RGB)); - SkUniqueCFRef smoothContext( - CGBitmapContextCreate(&smoothBitmap, 16, 16, 8, 16*4, - colorspace.get(), BITMAP_INFO_RGB)); - - SkUniqueCFRef data(CFDataCreateWithBytesNoCopy( - kCFAllocatorDefault, kSpiderSymbol_ttf, SK_ARRAY_COUNT(kSpiderSymbol_ttf), - kCFAllocatorNull)); - SkUniqueCFRef desc( - CTFontManagerCreateFontDescriptorFromData(data.get())); - SkUniqueCFRef ctFont(CTFontCreateWithFontDescriptor(desc.get(), 16, nullptr)); - SkASSERT(ctFont); - - CGContextSetShouldSmoothFonts(noSmoothContext.get(), false); - CGContextSetShouldAntialias(noSmoothContext.get(), true); - CGContextSetTextDrawingMode(noSmoothContext.get(), kCGTextFill); - CGContextSetGrayFillColor(noSmoothContext.get(), 1, 1); - - CGContextSetShouldSmoothFonts(smoothContext.get(), true); - CGContextSetShouldAntialias(smoothContext.get(), true); - CGContextSetTextDrawingMode(smoothContext.get(), kCGTextFill); - CGContextSetGrayFillColor(smoothContext.get(), 1, 1); - - CGPoint point = CGPointMake(0, 3); - CGGlyph spiderGlyph = 3; - CTFontDrawGlyphs(ctFont.get(), &spiderGlyph, &point, 1, noSmoothContext.get()); - CTFontDrawGlyphs(ctFont.get(), &spiderGlyph, &point, 1, smoothContext.get()); - - // For debugging. - //SkUniqueCFRef image(CGBitmapContextCreateImage(noSmoothContext())); - //SkUniqueCFRef image(CGBitmapContextCreateImage(smoothContext())); - - SmoothBehavior smoothBehavior = SmoothBehavior::none; - for (int x = 0; x < 16; ++x) { - for (int y = 0; y < 16; ++y) { - uint32_t smoothPixel = smoothBitmap[x][y]; - uint32_t r = (smoothPixel >> 16) & 0xFF; - uint32_t g = (smoothPixel >> 8) & 0xFF; - uint32_t b = (smoothPixel >> 0) & 0xFF; - if (r != g || r != b) { - return SmoothBehavior::subpixel; - } - if (noSmoothBitmap[x][y] != smoothPixel) { - smoothBehavior = SmoothBehavior::some; - } - } - } - return smoothBehavior; - }(); - return gSmoothBehavior; -} - -class Offscreen { -public: - Offscreen() - : fRGBSpace(nullptr) - , fCG(nullptr) - , fDoAA(false) - , fDoLCD(false) - { - fSize.set(0, 0); - } - - CGRGBPixel* getCG(const SkScalerContext_Mac& context, const SkGlyph& glyph, - CGGlyph glyphID, size_t* rowBytesPtr, bool generateA8FromLCD); - -private: - enum { - kSize = 32 * 32 * sizeof(CGRGBPixel) - }; - SkAutoSMalloc fImageStorage; - SkUniqueCFRef fRGBSpace; - - // cached state - SkUniqueCFRef fCG; - SkISize fSize; - bool fDoAA; - bool fDoLCD; - - static int RoundSize(int dimension) { - return SkNextPow2(dimension); - } -}; - -/////////////////////////////////////////////////////////////////////////////// - -static bool find_dict_CGFloat(CFDictionaryRef dict, CFStringRef name, CGFloat* value) { - CFNumberRef num; - return CFDictionaryGetValueIfPresent(dict, name, (const void**)&num) - && CFNumberIsFloatType(num) - && CFNumberGetValue(num, kCFNumberCGFloatType, value); -} - -template struct LinearInterpolater { - struct Mapping { - S src_val; - D dst_val; - }; - constexpr LinearInterpolater(Mapping const mapping[], int mappingCount) - : fMapping(mapping), fMappingCount(mappingCount) {} - - static D map(S value, S src_min, S src_max, D dst_min, D dst_max) { - SkASSERT(src_min < src_max); - SkASSERT(dst_min <= dst_max); - return C()(dst_min + (((value - src_min) * (dst_max - dst_min)) / (src_max - src_min))); - } - - D map(S val) const { - // -Inf to [0] - if (val < fMapping[0].src_val) { - return fMapping[0].dst_val; - } - - // Linear from [i] to [i+1] - for (int i = 0; i < fMappingCount - 1; ++i) { - if (val < fMapping[i+1].src_val) { - return map(val, fMapping[i].src_val, fMapping[i+1].src_val, - fMapping[i].dst_val, fMapping[i+1].dst_val); - } - } - - // From [n] to +Inf - // if (fcweight < Inf) - return fMapping[fMappingCount - 1].dst_val; - } - - Mapping const * fMapping; - int fMappingCount; -}; - -struct RoundCGFloatToInt { - int operator()(CGFloat s) { return s + 0.5; } -}; -struct CGFloatIdentity { - CGFloat operator()(CGFloat s) { return s; } -}; - -/** Returns the [-1, 1] CTFontDescriptor weights for the - * <0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000> CSS weights. - * - * It is assumed that the values will be interpolated linearly between these points. - * NSFontWeightXXX were added in 10.11, appear in 10.10, but do not appear in 10.9. - * The actual values appear to be stable, but they may change in the future without notice. - */ -static CGFloat(&get_NSFontWeight_mapping())[11] { - - // Declarations in on macOS, on iOS -#ifdef SK_BUILD_FOR_MAC -# define SK_KIT_FONT_WEIGHT_PREFIX "NS" -#endif -#ifdef SK_BUILD_FOR_IOS -# define SK_KIT_FONT_WEIGHT_PREFIX "UI" -#endif - static constexpr struct { - CGFloat defaultValue; - const char* name; - } nsFontWeightLoaderInfos[] = { - { -0.80f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightUltraLight" }, - { -0.60f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightThin" }, - { -0.40f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightLight" }, - { 0.00f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightRegular" }, - { 0.23f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightMedium" }, - { 0.30f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightSemibold" }, - { 0.40f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightBold" }, - { 0.56f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightHeavy" }, - { 0.62f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightBlack" }, - }; - - static_assert(SK_ARRAY_COUNT(nsFontWeightLoaderInfos) == 9, ""); - static CGFloat nsFontWeights[11]; - static SkOnce once; - once([&] { - size_t i = 0; - nsFontWeights[i++] = -1.00; - for (const auto& nsFontWeightLoaderInfo : nsFontWeightLoaderInfos) { - void* nsFontWeightValuePtr = dlsym(RTLD_DEFAULT, nsFontWeightLoaderInfo.name); - if (nsFontWeightValuePtr) { - nsFontWeights[i++] = *(static_cast(nsFontWeightValuePtr)); - } else { - nsFontWeights[i++] = nsFontWeightLoaderInfo.defaultValue; - } - } - nsFontWeights[i++] = 1.00; - }); - return nsFontWeights; -} - -/** Convert the [0, 1000] CSS weight to [-1, 1] CTFontDescriptor weight (for system fonts). - * - * The -1 to 1 weights reported by CTFontDescriptors have different mappings depending on if the - * CTFont is native or created from a CGDataProvider. - */ -static CGFloat fontstyle_to_ct_weight(int fontstyleWeight) { - using Interpolator = LinearInterpolater; - - // Note that Mac supports the old OS2 version A so 0 through 10 are as if multiplied by 100. - // However, on this end we can't tell, so this is ignored. - - static Interpolator::Mapping nativeWeightMappings[11]; - static SkOnce once; - once([&] { - CGFloat(&nsFontWeights)[11] = get_NSFontWeight_mapping(); - for (int i = 0; i < 11; ++i) { - nativeWeightMappings[i].src_val = i * 100; - nativeWeightMappings[i].dst_val = nsFontWeights[i]; - } - }); - static constexpr Interpolator nativeInterpolator( - nativeWeightMappings, SK_ARRAY_COUNT(nativeWeightMappings)); - - return nativeInterpolator.map(fontstyleWeight); -} - - -/** Convert the [-1, 1] CTFontDescriptor weight to [0, 1000] CSS weight. - * - * The -1 to 1 weights reported by CTFontDescriptors have different mappings depending on if the - * CTFont is native or created from a CGDataProvider. - */ -static int ct_weight_to_fontstyle(CGFloat cgWeight, bool fromDataProvider) { - using Interpolator = LinearInterpolater; - - // Note that Mac supports the old OS2 version A so 0 through 10 are as if multiplied by 100. - // However, on this end we can't tell, so this is ignored. - - /** This mapping for CGDataProvider created fonts is determined by creating font data with every - * weight, creating a CTFont, and asking the CTFont for its weight. See the TypefaceStyle test - * in tests/TypefaceTest.cpp for the code used to determine these values. - */ - static constexpr Interpolator::Mapping dataProviderWeightMappings[] = { - { -1.00, 0 }, - { -0.70, 100 }, - { -0.50, 200 }, - { -0.23, 300 }, - { 0.00, 400 }, - { 0.20, 500 }, - { 0.30, 600 }, - { 0.40, 700 }, - { 0.60, 800 }, - { 0.80, 900 }, - { 1.00, 1000 }, - }; - static constexpr Interpolator dataProviderInterpolator( - dataProviderWeightMappings, SK_ARRAY_COUNT(dataProviderWeightMappings)); - - static Interpolator::Mapping nativeWeightMappings[11]; - static SkOnce once; - once([&] { - CGFloat(&nsFontWeights)[11] = get_NSFontWeight_mapping(); - for (int i = 0; i < 11; ++i) { - nativeWeightMappings[i].src_val = nsFontWeights[i]; - nativeWeightMappings[i].dst_val = i * 100; - } - }); - static constexpr Interpolator nativeInterpolator( - nativeWeightMappings, SK_ARRAY_COUNT(nativeWeightMappings)); - - return fromDataProvider ? dataProviderInterpolator.map(cgWeight) - : nativeInterpolator.map(cgWeight); -} - -/** Convert the [0, 10] CSS weight to [-1, 1] CTFontDescriptor width. */ -static int fontstyle_to_ct_width(int fontstyleWidth) { - using Interpolator = LinearInterpolater; - - // Values determined by creating font data with every width, creating a CTFont, - // and asking the CTFont for its width. See TypefaceStyle test for basics. - static constexpr Interpolator::Mapping widthMappings[] = { - { 0, -0.5 }, - { 10, 0.5 }, - }; - static constexpr Interpolator interpolator(widthMappings, SK_ARRAY_COUNT(widthMappings)); - return interpolator.map(fontstyleWidth); -} - -/** Convert the [-1, 1] CTFontDescriptor width to [0, 10] CSS weight. */ -static int ct_width_to_fontstyle(CGFloat cgWidth) { - using Interpolator = LinearInterpolater; - - // Values determined by creating font data with every width, creating a CTFont, - // and asking the CTFont for its width. See TypefaceStyle test for basics. - static constexpr Interpolator::Mapping widthMappings[] = { - { -0.5, 0 }, - { 0.5, 10 }, - }; - static constexpr Interpolator interpolator(widthMappings, SK_ARRAY_COUNT(widthMappings)); - return interpolator.map(cgWidth); -} - -static SkFontStyle fontstyle_from_descriptor(CTFontDescriptorRef desc, bool fromDataProvider) { - SkUniqueCFRef traits(CTFontDescriptorCopyAttribute(desc, kCTFontTraitsAttribute)); - if (!traits || CFDictionaryGetTypeID() != CFGetTypeID(traits.get())) { - return SkFontStyle(); - } - SkUniqueCFRef fontTraitsDict(static_cast(traits.release())); - - CGFloat weight, width, slant; - if (!find_dict_CGFloat(fontTraitsDict.get(), kCTFontWeightTrait, &weight)) { - weight = 0; - } - if (!find_dict_CGFloat(fontTraitsDict.get(), kCTFontWidthTrait, &width)) { - width = 0; - } - if (!find_dict_CGFloat(fontTraitsDict.get(), kCTFontSlantTrait, &slant)) { - slant = 0; - } - - return SkFontStyle(ct_weight_to_fontstyle(weight, fromDataProvider), - ct_width_to_fontstyle(width), - slant ? SkFontStyle::kItalic_Slant - : SkFontStyle::kUpright_Slant); -} - -struct OpszVariation { - bool isSet = false; - double value = 0; -}; - -class SkTypeface_Mac : public SkTypeface { -public: - SkTypeface_Mac(SkUniqueCFRef fontRef, const SkFontStyle& fs, bool isFixedPitch, - OpszVariation opszVariation, std::unique_ptr providedData) - : SkTypeface(fs, isFixedPitch) - , fFontRef(std::move(fontRef)) - , fOpszVariation(opszVariation) - , fHasColorGlyphs( - SkToBool(CTFontGetSymbolicTraits(fFontRef.get()) & kCTFontColorGlyphsTrait)) - , fStream(std::move(providedData)) - , fIsFromStream(fStream) - { - SkASSERT(fFontRef); - } - - SkUniqueCFRef fFontRef; - const OpszVariation fOpszVariation; - const bool fHasColorGlyphs; - -protected: - int onGetUPEM() const override; - std::unique_ptr onOpenStream(int* ttcIndex) const override; - std::unique_ptr onMakeFontData() const override; - int onGetVariationDesignPosition(SkFontArguments::VariationPosition::Coordinate coordinates[], - int coordinateCount) const override; - void onGetFamilyName(SkString* familyName) const override; - SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override; - int onGetTableTags(SkFontTableTag tags[]) const override; - size_t onGetTableData(SkFontTableTag, size_t offset, size_t length, void* data) const override; - sk_sp onCopyTableData(SkFontTableTag) const override; - SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&, - const SkDescriptor*) const override; - void onFilterRec(SkScalerContextRec*) const override; - void onGetFontDescriptor(SkFontDescriptor*, bool*) const override; - void getGlyphToUnicodeMap(SkUnichar*) const override; - std::unique_ptr onGetAdvancedMetrics() const override; - void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override; - int onCountGlyphs() const override; - void getPostScriptGlyphNames(SkString*) const override {} - int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[], - int parameterCount) const override; - sk_sp onMakeClone(const SkFontArguments&) const override; - - void* onGetCTFontRef() const override { return (void*)fFontRef.get(); } - -private: - mutable std::unique_ptr fStream; - bool fIsFromStream; - mutable SkOnce fInitStream; - - typedef SkTypeface INHERITED; -}; - -static bool find_by_CTFontRef(SkTypeface* cached, void* context) { - CTFontRef self = (CTFontRef)context; - CTFontRef other = (CTFontRef)cached->internal_private_getCTFontRef(); - - return CFEqual(self, other); -} - -/** Creates a typeface, searching the cache if isLocalStream is false. */ -static sk_sp create_from_CTFontRef(SkUniqueCFRef font, - OpszVariation opszVariation, - std::unique_ptr providedData) { - SkASSERT(font); - const bool isFromStream(providedData); - - if (!isFromStream) { - sk_sp face = SkTypefaceCache::FindByProcAndRef(find_by_CTFontRef, - (void*)font.get()); - if (face) { - return face; - } - } - - SkUniqueCFRef desc(CTFontCopyFontDescriptor(font.get())); - SkFontStyle style = fontstyle_from_descriptor(desc.get(), isFromStream); - CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(font.get()); - bool isFixedPitch = SkToBool(traits & kCTFontMonoSpaceTrait); - - sk_sp face(new SkTypeface_Mac(std::move(font), style, - isFixedPitch, opszVariation, - std::move(providedData))); - if (!isFromStream) { - SkTypefaceCache::Add(face); - } - return face; -} - -/** Creates a typeface from a descriptor, searching the cache. */ -static sk_sp create_from_desc(CTFontDescriptorRef desc) { - SkUniqueCFRef ctFont(CTFontCreateWithFontDescriptor(desc, 0, nullptr)); - if (!ctFont) { - return nullptr; - } - - return create_from_CTFontRef(std::move(ctFont), OpszVariation(), nullptr); -} - -static SkUniqueCFRef create_descriptor(const char familyName[], - const SkFontStyle& style) { - SkUniqueCFRef cfAttributes( - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - - SkUniqueCFRef cfTraits( - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - - if (!cfAttributes || !cfTraits) { - return nullptr; - } - - // TODO(crbug.com/1018581) Some CoreText versions have errant behavior when - // certain traits set. Temporary workaround to omit specifying trait for - // those versions. - // Long term solution will involve serializing typefaces instead of relying - // upon this to match between processes. - // - // Compare CoreText.h in an up to date SDK for where these values come from. - static const uint32_t kSkiaLocalCTVersionNumber10_14 = 0x000B0000; - static const uint32_t kSkiaLocalCTVersionNumber10_15 = 0x000C0000; - - // CTFontTraits (symbolic) - // macOS 14 and iOS 12 seem to behave badly when kCTFontSymbolicTrait is set. - // macOS 15 yields LastResort font instead of a good default font when - // kCTFontSymbolicTrait is set. - if (!(&CTGetCoreTextVersion && CTGetCoreTextVersion() >= kSkiaLocalCTVersionNumber10_14)) { - CTFontSymbolicTraits ctFontTraits = 0; - if (style.weight() >= SkFontStyle::kBold_Weight) { - ctFontTraits |= kCTFontBoldTrait; - } - if (style.slant() != SkFontStyle::kUpright_Slant) { - ctFontTraits |= kCTFontItalicTrait; - } - SkUniqueCFRef cfFontTraits( - CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &ctFontTraits)); - if (cfFontTraits) { - CFDictionaryAddValue(cfTraits.get(), kCTFontSymbolicTrait, cfFontTraits.get()); - } - } - - // CTFontTraits (weight) - CGFloat ctWeight = fontstyle_to_ct_weight(style.weight()); - SkUniqueCFRef cfFontWeight( - CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &ctWeight)); - if (cfFontWeight) { - CFDictionaryAddValue(cfTraits.get(), kCTFontWeightTrait, cfFontWeight.get()); - } - // CTFontTraits (width) - CGFloat ctWidth = fontstyle_to_ct_width(style.width()); - SkUniqueCFRef cfFontWidth( - CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &ctWidth)); - if (cfFontWidth) { - CFDictionaryAddValue(cfTraits.get(), kCTFontWidthTrait, cfFontWidth.get()); - } - // CTFontTraits (slant) - // macOS 15 behaves badly when kCTFontSlantTrait is set. - if (!(&CTGetCoreTextVersion && CTGetCoreTextVersion() == kSkiaLocalCTVersionNumber10_15)) { - CGFloat ctSlant = style.slant() == SkFontStyle::kUpright_Slant ? 0 : 1; - SkUniqueCFRef cfFontSlant( - CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &ctSlant)); - if (cfFontSlant) { - CFDictionaryAddValue(cfTraits.get(), kCTFontSlantTrait, cfFontSlant.get()); - } - } - // CTFontTraits - CFDictionaryAddValue(cfAttributes.get(), kCTFontTraitsAttribute, cfTraits.get()); - - // CTFontFamilyName - if (familyName) { - SkUniqueCFRef cfFontName = make_CFString(familyName); - if (cfFontName) { - CFDictionaryAddValue(cfAttributes.get(), kCTFontFamilyNameAttribute, cfFontName.get()); - } - } - - return SkUniqueCFRef( - CTFontDescriptorCreateWithAttributes(cfAttributes.get())); -} - -// Same as the above function except style is included so we can -// compare whether the created font conforms to the style. If not, we need -// to recreate the font with symbolic traits. This is needed due to MacOS 10.11 -// font creation problem https://bugs.chromium.org/p/skia/issues/detail?id=8447. -static sk_sp create_from_desc_and_style(CTFontDescriptorRef desc, - const SkFontStyle& style) { - SkUniqueCFRef ctFont(CTFontCreateWithFontDescriptor(desc, 0, nullptr)); - if (!ctFont) { - return nullptr; - } - - const CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(ctFont.get()); - CTFontSymbolicTraits expected_traits = traits; - if (style.slant() != SkFontStyle::kUpright_Slant) { - expected_traits |= kCTFontItalicTrait; - } - if (style.weight() >= SkFontStyle::kBold_Weight) { - expected_traits |= kCTFontBoldTrait; - } - - if (expected_traits != traits) { - SkUniqueCFRef ctNewFont(CTFontCreateCopyWithSymbolicTraits( - ctFont.get(), 0, nullptr, expected_traits, expected_traits)); - if (ctNewFont) { - ctFont = std::move(ctNewFont); - } - } - - return create_from_CTFontRef(std::move(ctFont), OpszVariation(), nullptr); -} - -/** Creates a typeface from a name, searching the cache. */ -static sk_sp create_from_name(const char familyName[], const SkFontStyle& style) { - SkUniqueCFRef desc = create_descriptor(familyName, style); - if (!desc) { - return nullptr; - } - return create_from_desc_and_style(desc.get(), style); -} - -/////////////////////////////////////////////////////////////////////////////// - -/* This function is visible on the outside. It first searches the cache, and if - * not found, returns a new entry (after adding it to the cache). - */ -sk_sp SkMakeTypefaceFromCTFont(CTFontRef font) { - CFRetain(font); - return create_from_CTFontRef(SkUniqueCFRef(font), - OpszVariation(), - nullptr); -} - -static const char* map_css_names(const char* name) { - static const struct { - const char* fFrom; // name the caller specified - const char* fTo; // "canonical" name we map to - } gPairs[] = { - { "sans-serif", "Helvetica" }, - { "serif", "Times" }, - { "monospace", "Courier" } - }; - - for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { - if (strcmp(name, gPairs[i].fFrom) == 0) { - return gPairs[i].fTo; - } - } - return name; // no change -} - -/////////////////////////////////////////////////////////////////////////////// - -class SkScalerContext_Mac : public SkScalerContext { -public: - SkScalerContext_Mac(sk_sp, const SkScalerContextEffects&, const SkDescriptor*); - -protected: - unsigned generateGlyphCount(void) override; - bool generateAdvance(SkGlyph* glyph) override; - void generateMetrics(SkGlyph* glyph) override; - void generateImage(const SkGlyph& glyph) override; - bool generatePath(SkGlyphID glyph, SkPath* path) override; - void generateFontMetrics(SkFontMetrics*) override; - -private: - template - static void RGBToA8(const CGRGBPixel* SK_RESTRICT cgPixels, size_t cgRowBytes, - const SkGlyph& glyph, const uint8_t* table8); - template - static uint16_t RGBToLcd16(CGRGBPixel rgb, const uint8_t* tableR, - const uint8_t* tableG, - const uint8_t* tableB); - template - static void RGBToLcd16(const CGRGBPixel* SK_RESTRICT cgPixels, - size_t cgRowBytes, - const SkGlyph& glyph, - const uint8_t* tableR, - const uint8_t* tableG, - const uint8_t* tableB); - - Offscreen fOffscreen; - - /** Unrotated variant of fCTFont. - * - * In 10.10.1 CTFontGetAdvancesForGlyphs applies the font transform to the width of the - * advances, but always sets the height to 0. This font is used to get the advances of the - * unrotated glyph, and then the rotation is applied separately. - * - * CT vertical metrics are pre-rotated (in em space, before transform) 90deg clock-wise. - * This makes kCTFontOrientationDefault dangerous, because the metrics from - * kCTFontOrientationHorizontal are in a different space from kCTFontOrientationVertical. - * With kCTFontOrientationVertical the advances must be unrotated. - * - * Sometimes, creating a copy of a CTFont with the same size but different trasform will select - * different underlying font data. As a result, avoid ever creating more than one CTFont per - * SkScalerContext to ensure that only one CTFont is used. - * - * As a result of the above (and other constraints) this font contains the size, but not the - * transform. The transform must always be applied separately. - */ - SkUniqueCFRef fCTFont; - - /** The transform without the font size. */ - CGAffineTransform fTransform; - CGAffineTransform fInvTransform; - - SkUniqueCFRef fCGFont; - uint16_t fGlyphCount; - const bool fDoSubPosition; - - friend class Offscreen; - - typedef SkScalerContext INHERITED; -}; - -// In macOS 10.12 and later any variation on the CGFont which has default axis value will be -// dropped when creating the CTFont. Unfortunately, in macOS 10.15 the priority of setting -// the optical size (and opsz variation) is -// 1. the value of kCTFontOpticalSizeAttribute in the CTFontDescriptor (undocumented) -// 2. the opsz axis default value if kCTFontOpticalSizeAttribute is 'none' (undocumented) -// 3. the opsz variation on the nascent CTFont from the CGFont (was dropped if default) -// 4. the opsz variation in kCTFontVariationAttribute in CTFontDescriptor (crashes 10.10) -// 5. the size requested (can fudge in SkTypeface but not SkScalerContext) -// The first one which is found will be used to set the opsz variation (after clamping). -static void add_opsz_attr(CFMutableDictionaryRef attr, double opsz) { - SkUniqueCFRef opszValueNumber( - CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &opsz)); - // Avoid using kCTFontOpticalSizeAttribute directly - CFStringRef SkCTFontOpticalSizeAttribute = CFSTR("NSCTFontOpticalSizeAttribute"); - CFDictionarySetValue(attr, SkCTFontOpticalSizeAttribute, opszValueNumber.get()); -} - -// This turns off application of the 'trak' table to advances, but also all other tracking. -static void add_notrak_attr(CFMutableDictionaryRef attr) { - int zero = 0; - SkUniqueCFRef unscaledTrackingNumber( - CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &zero)); - CFStringRef SkCTFontUnscaledTrackingAttribute = CFSTR("NSCTFontUnscaledTrackingAttribute"); - CFDictionarySetValue(attr, SkCTFontUnscaledTrackingAttribute, unscaledTrackingNumber.get()); -} - -static SkUniqueCFRef ctfont_create_exact_copy(CTFontRef baseFont, CGFloat textSize, - OpszVariation opsz) -{ - SkUniqueCFRef attr( - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - - if (opsz.isSet) { - add_opsz_attr(attr.get(), opsz.value); -#if !defined(SK_IGNORE_MAC_OPSZ_FORCE) - } else { - // On (at least) 10.10 though 10.14 the default system font was SFNSText/SFNSDisplay. - // The CTFont is backed by both; optical size < 20 means SFNSText else SFNSDisplay. - // On at least 10.11 the glyph ids in these fonts became non-interchangable. - // To keep glyph ids stable over size changes, preserve the optical size. - // In 10.15 this was replaced with use of variable fonts with an opsz axis. - // A CTFont backed by multiple fonts picked by opsz where the multiple backing fonts are - // variable fonts with opsz axis and non-interchangeable glyph ids would break the - // opsz.isSet branch above, but hopefully that never happens. - // See https://crbug.com/524646 . - CFStringRef SkCTFontOpticalSizeAttribute = CFSTR("NSCTFontOpticalSizeAttribute"); - SkUniqueCFRef opsz(CTFontCopyAttribute(baseFont, SkCTFontOpticalSizeAttribute)); - double opsz_val; - if (!opsz || - CFGetTypeID(opsz.get()) != CFNumberGetTypeID() || - !CFNumberGetValue(static_cast(opsz.get()),kCFNumberDoubleType,&opsz_val) || - opsz_val <= 0) - { - opsz_val = CTFontGetSize(baseFont); - } - add_opsz_attr(attr.get(), opsz_val); -#endif - } - add_notrak_attr(attr.get()); - - SkUniqueCFRef desc(CTFontDescriptorCreateWithAttributes(attr.get())); - -#if !defined(SK_IGNORE_MAC_OPSZ_FORCE) - return SkUniqueCFRef( - CTFontCreateCopyWithAttributes(baseFont, textSize, nullptr, desc.get())); -#else - SkUniqueCFRef baseCGFont(CTFontCopyGraphicsFont(baseFont, nullptr)); - return SkUniqueCFRef( - CTFontCreateWithGraphicsFont(baseCGFont.get(), textSize, nullptr, desc.get())); - -#endif -} - -SkScalerContext_Mac::SkScalerContext_Mac(sk_sp typeface, - const SkScalerContextEffects& effects, - const SkDescriptor* desc) - : INHERITED(std::move(typeface), effects, desc) - , fDoSubPosition(SkToBool(fRec.fFlags & kSubpixelPositioning_Flag)) - -{ - CTFontRef ctFont = (CTFontRef)this->getTypeface()->internal_private_getCTFontRef(); - CFIndex numGlyphs = CTFontGetGlyphCount(ctFont); - SkASSERT(numGlyphs >= 1 && numGlyphs <= 0xFFFF); - fGlyphCount = SkToU16(numGlyphs); - - // CT on (at least) 10.9 will size color glyphs down from the requested size, but not up. - // As a result, it is necessary to know the actual device size and request that. - SkVector scale; - SkMatrix skTransform; - bool invertible = fRec.computeMatrices(SkScalerContextRec::kVertical_PreMatrixScale, - &scale, &skTransform, nullptr, nullptr, nullptr); - fTransform = MatrixToCGAffineTransform(skTransform); - // CGAffineTransformInvert documents that if the transform is non-invertible it will return the - // passed transform unchanged. It does so, but then also prints a message to stdout. Avoid this. - if (invertible) { - fInvTransform = CGAffineTransformInvert(fTransform); - } else { - fInvTransform = fTransform; - } - - // The transform contains everything except the requested text size. - // Some properties, like 'trak', are based on the optical text size. - CGFloat textSize = ScalarToCG(scale.y()); - fCTFont = ctfont_create_exact_copy(ctFont, textSize, - ((SkTypeface_Mac*)this->getTypeface())->fOpszVariation); - fCGFont.reset(CTFontCopyGraphicsFont(fCTFont.get(), nullptr)); -} - -CGRGBPixel* Offscreen::getCG(const SkScalerContext_Mac& context, const SkGlyph& glyph, - CGGlyph glyphID, size_t* rowBytesPtr, - bool generateA8FromLCD) { - if (!fRGBSpace) { - //It doesn't appear to matter what color space is specified. - //Regular blends and antialiased text are always (s*a + d*(1-a)) - //and subpixel antialiased text is always g=2.0. - fRGBSpace.reset(CGColorSpaceCreateDeviceRGB()); - } - - // default to kBW_Format - bool doAA = false; - bool doLCD = false; - - if (SkMask::kBW_Format != glyph.maskFormat()) { - doLCD = true; - doAA = true; - } - - // FIXME: lcd smoothed un-hinted rasterization unsupported. - if (!generateA8FromLCD && SkMask::kA8_Format == glyph.maskFormat()) { - doLCD = false; - doAA = true; - } - - // If this font might have color glyphs, disable LCD as there's no way to support it. - // CoreText doesn't tell us which format it ended up using, so we can't detect it. - // A8 will end up black on transparent, but TODO: we can detect gray and set to A8. - if (SkMask::kARGB32_Format == glyph.maskFormat()) { - doLCD = false; - } - - size_t rowBytes = fSize.fWidth * sizeof(CGRGBPixel); - if (!fCG || fSize.fWidth < glyph.width() || fSize.fHeight < glyph.height()) { - if (fSize.fWidth < glyph.width()) { - fSize.fWidth = RoundSize(glyph.width()); - } - if (fSize.fHeight < glyph.height()) { - fSize.fHeight = RoundSize(glyph.height()); - } - - rowBytes = fSize.fWidth * sizeof(CGRGBPixel); - void* image = fImageStorage.reset(rowBytes * fSize.fHeight); - const CGImageAlphaInfo alpha = (glyph.isColor()) - ? kCGImageAlphaPremultipliedFirst - : kCGImageAlphaNoneSkipFirst; - const CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host | alpha; - fCG.reset(CGBitmapContextCreate(image, fSize.fWidth, fSize.fHeight, 8, - rowBytes, fRGBSpace.get(), bitmapInfo)); - - // Skia handles quantization and subpixel positioning, - // so disable quantization and enabe subpixel positioning in CG. - CGContextSetAllowsFontSubpixelQuantization(fCG.get(), false); - CGContextSetShouldSubpixelQuantizeFonts(fCG.get(), false); - - // Because CG always draws from the horizontal baseline, - // if there is a non-integral translation from the horizontal origin to the vertical origin, - // then CG cannot draw the glyph in the correct location without subpixel positioning. - CGContextSetAllowsFontSubpixelPositioning(fCG.get(), true); - CGContextSetShouldSubpixelPositionFonts(fCG.get(), true); - - CGContextSetTextDrawingMode(fCG.get(), kCGTextFill); - - // Draw black on white to create mask. (Special path exists to speed this up in CG.) - CGContextSetGrayFillColor(fCG.get(), 0.0f, 1.0f); - - // force our checks below to happen - fDoAA = !doAA; - fDoLCD = !doLCD; - - CGContextSetTextMatrix(fCG.get(), context.fTransform); - } - - if (fDoAA != doAA) { - CGContextSetShouldAntialias(fCG.get(), doAA); - fDoAA = doAA; - } - if (fDoLCD != doLCD) { - CGContextSetShouldSmoothFonts(fCG.get(), doLCD); - fDoLCD = doLCD; - } - - CGRGBPixel* image = (CGRGBPixel*)fImageStorage.get(); - // skip rows based on the glyph's height - image += (fSize.fHeight - glyph.height()) * fSize.fWidth; - - // Erase to white (or transparent black if it's a color glyph, to not composite against white). - uint32_t bgColor = (!glyph.isColor()) ? 0xFFFFFFFF : 0x00000000; - sk_memset_rect32(image, bgColor, glyph.width(), glyph.height(), rowBytes); - - float subX = 0; - float subY = 0; - if (context.fDoSubPosition) { - subX = SkFixedToFloat(glyph.getSubXFixed()); - subY = SkFixedToFloat(glyph.getSubYFixed()); - } - - CGPoint point = CGPointMake(-glyph.left() + subX, glyph.top() + glyph.height() - subY); - // Prior to 10.10, CTFontDrawGlyphs acted like CGContextShowGlyphsAtPositions and took - // 'positions' which are in text space. The glyph location (in device space) must be - // mapped into text space, so that CG can convert it back into device space. - // In 10.10.1, this is handled directly in CTFontDrawGlyphs. - // - // However, in 10.10.2 color glyphs no longer rotate based on the font transform. - // So always make the font transform identity and place the transform on the context. - point = CGPointApplyAffineTransform(point, context.fInvTransform); - - CTFontDrawGlyphs(context.fCTFont.get(), &glyphID, &point, 1, fCG.get()); - - SkASSERT(rowBytesPtr); - *rowBytesPtr = rowBytes; - return image; -} - -unsigned SkScalerContext_Mac::generateGlyphCount(void) { - return fGlyphCount; -} - -bool SkScalerContext_Mac::generateAdvance(SkGlyph* glyph) { - return false; -} - -void SkScalerContext_Mac::generateMetrics(SkGlyph* glyph) { - glyph->fMaskFormat = fRec.fMaskFormat; - - const CGGlyph cgGlyph = (CGGlyph) glyph->getGlyphID(); - glyph->zeroMetrics(); - - // The following block produces cgAdvance in CG units (pixels, y up). - CGSize cgAdvance; - CTFontGetAdvancesForGlyphs(fCTFont.get(), kCTFontOrientationHorizontal, - &cgGlyph, &cgAdvance, 1); - cgAdvance = CGSizeApplyAffineTransform(cgAdvance, fTransform); - glyph->fAdvanceX = CGToFloat(cgAdvance.width); - glyph->fAdvanceY = -CGToFloat(cgAdvance.height); - - // The following produces skBounds in SkGlyph units (pixels, y down), - // or returns early if skBounds would be empty. - SkRect skBounds; - - // Glyphs are always drawn from the horizontal origin. The caller must manually use the result - // of CTFontGetVerticalTranslationsForGlyphs to calculate where to draw the glyph for vertical - // glyphs. As a result, always get the horizontal bounds of a glyph and translate it if the - // glyph is vertical. This avoids any diagreement between the various means of retrieving - // vertical metrics. - { - // CTFontGetBoundingRectsForGlyphs produces cgBounds in CG units (pixels, y up). - CGRect cgBounds; - CTFontGetBoundingRectsForGlyphs(fCTFont.get(), kCTFontOrientationHorizontal, - &cgGlyph, &cgBounds, 1); - cgBounds = CGRectApplyAffineTransform(cgBounds, fTransform); - - // BUG? - // 0x200B (zero-advance space) seems to return a huge (garbage) bounds, when - // it should be empty. So, if we see a zero-advance, we check if it has an - // empty path or not, and if so, we jam the bounds to 0. Hopefully a zero-advance - // is rare, so we won't incur a big performance cost for this extra check. - if (0 == cgAdvance.width && 0 == cgAdvance.height) { - SkUniqueCFRef path(CTFontCreatePathForGlyph(fCTFont.get(), cgGlyph,nullptr)); - if (!path || CGPathIsEmpty(path.get())) { - return; - } - } - - if (CGRectIsEmpty_inline(cgBounds)) { - return; - } - - // Convert cgBounds to SkGlyph units (pixels, y down). - skBounds = SkRect::MakeXYWH(cgBounds.origin.x, -cgBounds.origin.y - cgBounds.size.height, - cgBounds.size.width, cgBounds.size.height); - } - - // Currently the bounds are based on being rendered at (0,0). - // The top left must not move, since that is the base from which subpixel positioning is offset. - if (fDoSubPosition) { - skBounds.fRight += SkFixedToFloat(glyph->getSubXFixed()); - skBounds.fBottom += SkFixedToFloat(glyph->getSubYFixed()); - } - - // We're trying to pack left and top into int16_t, - // and width and height into uint16_t, after outsetting by 1. - if (!SkRect::MakeXYWH(-32767, -32767, 65535, 65535).contains(skBounds)) { - return; - } - - SkIRect skIBounds; - skBounds.roundOut(&skIBounds); - // Expand the bounds by 1 pixel, to give CG room for anti-aliasing. - // Note that this outset is to allow room for LCD smoothed glyphs. However, the correct outset - // is not currently known, as CG dilates the outlines by some percentage. - // Note that if this context is A8 and not back-forming from LCD, there is no need to outset. - skIBounds.outset(1, 1); - glyph->fLeft = SkToS16(skIBounds.fLeft); - glyph->fTop = SkToS16(skIBounds.fTop); - glyph->fWidth = SkToU16(skIBounds.width()); - glyph->fHeight = SkToU16(skIBounds.height()); -} - -static constexpr uint8_t sk_pow2_table(size_t i) { - return SkToU8(((i * i + 128) / 255)); -} - -/** - * This will invert the gamma applied by CoreGraphics, so we can get linear - * values. - * - * CoreGraphics obscurely defaults to 2.0 as the subpixel coverage gamma value. - * The color space used does not appear to affect this choice. - */ -static constexpr auto gLinearCoverageFromCGLCDValue = SkMakeArray<256>(sk_pow2_table); - -static void cgpixels_to_bits(uint8_t dst[], const CGRGBPixel src[], int count) { - while (count > 0) { - uint8_t mask = 0; - for (int i = 7; i >= 0; --i) { - mask |= ((CGRGBPixel_getAlpha(*src++) >> 7) ^ 0x1) << i; - if (0 == --count) { - break; - } - } - *dst++ = mask; - } -} - -template -static inline uint8_t rgb_to_a8(CGRGBPixel rgb, const uint8_t* table8) { - U8CPU r = 0xFF - ((rgb >> 16) & 0xFF); - U8CPU g = 0xFF - ((rgb >> 8) & 0xFF); - U8CPU b = 0xFF - ((rgb >> 0) & 0xFF); - U8CPU lum = sk_apply_lut_if(SkComputeLuminance(r, g, b), table8); -#if SK_SHOW_TEXT_BLIT_COVERAGE - lum = std::max(lum, (U8CPU)0x30); -#endif - return lum; -} - -template -void SkScalerContext_Mac::RGBToA8(const CGRGBPixel* SK_RESTRICT cgPixels, size_t cgRowBytes, - const SkGlyph& glyph, const uint8_t* table8) { - const int width = glyph.fWidth; - size_t dstRB = glyph.rowBytes(); - uint8_t* SK_RESTRICT dst = (uint8_t*)glyph.fImage; - - for (int y = 0; y < glyph.fHeight; y++) { - for (int i = 0; i < width; ++i) { - dst[i] = rgb_to_a8(cgPixels[i], table8); - } - cgPixels = SkTAddOffset(cgPixels, cgRowBytes); - dst = SkTAddOffset(dst, dstRB); - } -} - -template -uint16_t SkScalerContext_Mac::RGBToLcd16(CGRGBPixel rgb, const uint8_t* tableR, - const uint8_t* tableG, - const uint8_t* tableB) { - U8CPU r = sk_apply_lut_if(0xFF - ((rgb >> 16) & 0xFF), tableR); - U8CPU g = sk_apply_lut_if(0xFF - ((rgb >> 8) & 0xFF), tableG); - U8CPU b = sk_apply_lut_if(0xFF - ((rgb >> 0) & 0xFF), tableB); -#if SK_SHOW_TEXT_BLIT_COVERAGE - r = std::max(r, (U8CPU)0x30); - g = std::max(g, (U8CPU)0x30); - b = std::max(b, (U8CPU)0x30); -#endif - return SkPack888ToRGB16(r, g, b); -} - -template -void SkScalerContext_Mac::RGBToLcd16(const CGRGBPixel* SK_RESTRICT cgPixels, - size_t cgRowBytes, - const SkGlyph& glyph, - const uint8_t* tableR, - const uint8_t* tableG, - const uint8_t* tableB) { - const int width = glyph.fWidth; - size_t dstRB = glyph.rowBytes(); - uint16_t* SK_RESTRICT dst = (uint16_t*)glyph.fImage; - - for (int y = 0; y < glyph.fHeight; y++) { - for (int i = 0; i < width; i++) { - dst[i] = RGBToLcd16(cgPixels[i], tableR, tableG, tableB); - } - cgPixels = SkTAddOffset(cgPixels, cgRowBytes); - dst = SkTAddOffset(dst, dstRB); - } -} - -static SkPMColor cgpixels_to_pmcolor(CGRGBPixel rgb) { - U8CPU a = (rgb >> 24) & 0xFF; - U8CPU r = (rgb >> 16) & 0xFF; - U8CPU g = (rgb >> 8) & 0xFF; - U8CPU b = (rgb >> 0) & 0xFF; -#if SK_SHOW_TEXT_BLIT_COVERAGE - a = std::max(a, (U8CPU)0x30); -#endif - return SkPackARGB32(a, r, g, b); -} - -void SkScalerContext_Mac::generateImage(const SkGlyph& glyph) { - CGGlyph cgGlyph = SkTo(glyph.getGlyphID()); - - // FIXME: lcd smoothed un-hinted rasterization unsupported. - bool requestSmooth = fRec.getHinting() != SkFontHinting::kNone; - - // Draw the glyph - size_t cgRowBytes; - CGRGBPixel* cgPixels = fOffscreen.getCG(*this, glyph, cgGlyph, &cgRowBytes, requestSmooth); - if (cgPixels == nullptr) { - return; - } - - // Fix the glyph - if ((glyph.fMaskFormat == SkMask::kLCD16_Format) || - (glyph.fMaskFormat == SkMask::kA8_Format - && requestSmooth - && smooth_behavior() != SmoothBehavior::none)) - { - const uint8_t* linear = gLinearCoverageFromCGLCDValue.data(); - - //Note that the following cannot really be integrated into the - //pre-blend, since we may not be applying the pre-blend; when we aren't - //applying the pre-blend it means that a filter wants linear anyway. - //Other code may also be applying the pre-blend, so we'd need another - //one with this and one without. - CGRGBPixel* addr = cgPixels; - for (int y = 0; y < glyph.fHeight; ++y) { - for (int x = 0; x < glyph.fWidth; ++x) { - int r = (addr[x] >> 16) & 0xFF; - int g = (addr[x] >> 8) & 0xFF; - int b = (addr[x] >> 0) & 0xFF; - addr[x] = (linear[r] << 16) | (linear[g] << 8) | linear[b]; - } - addr = SkTAddOffset(addr, cgRowBytes); - } - } - - // Convert glyph to mask - switch (glyph.fMaskFormat) { - case SkMask::kLCD16_Format: { - if (fPreBlend.isApplicable()) { - RGBToLcd16(cgPixels, cgRowBytes, glyph, - fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); - } else { - RGBToLcd16(cgPixels, cgRowBytes, glyph, - fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); - } - } break; - case SkMask::kA8_Format: { - if (fPreBlend.isApplicable()) { - RGBToA8(cgPixels, cgRowBytes, glyph, fPreBlend.fG); - } else { - RGBToA8(cgPixels, cgRowBytes, glyph, fPreBlend.fG); - } - } break; - case SkMask::kBW_Format: { - const int width = glyph.fWidth; - size_t dstRB = glyph.rowBytes(); - uint8_t* dst = (uint8_t*)glyph.fImage; - for (int y = 0; y < glyph.fHeight; y++) { - cgpixels_to_bits(dst, cgPixels, width); - cgPixels = SkTAddOffset(cgPixels, cgRowBytes); - dst = SkTAddOffset(dst, dstRB); - } - } break; - case SkMask::kARGB32_Format: { - const int width = glyph.fWidth; - size_t dstRB = glyph.rowBytes(); - SkPMColor* dst = (SkPMColor*)glyph.fImage; - for (int y = 0; y < glyph.fHeight; y++) { - for (int x = 0; x < width; ++x) { - dst[x] = cgpixels_to_pmcolor(cgPixels[x]); - } - cgPixels = SkTAddOffset(cgPixels, cgRowBytes); - dst = SkTAddOffset(dst, dstRB); - } - } break; - default: - SkDEBUGFAIL("unexpected mask format"); - break; - } -} - -namespace { -class SkCTPathGeometrySink { - SkPath* fPath; - bool fStarted; - CGPoint fCurrent; - - void goingTo(const CGPoint pt) { - if (!fStarted) { - fStarted = true; - fPath->moveTo(fCurrent.x, -fCurrent.y); - } - fCurrent = pt; - } - - bool currentIsNot(const CGPoint pt) { - return fCurrent.x != pt.x || fCurrent.y != pt.y; - } - -public: - SkCTPathGeometrySink(SkPath* path) : fPath{path}, fStarted{false}, fCurrent{0,0} {} - static void ApplyElement(void *ctx, const CGPathElement *element) { - SkCTPathGeometrySink& self = *(SkCTPathGeometrySink*)ctx; - CGPoint* points = element->points; - - switch (element->type) { - case kCGPathElementMoveToPoint: - self.fStarted = false; - self.fCurrent = points[0]; - break; - - case kCGPathElementAddLineToPoint: - if (self.currentIsNot(points[0])) { - self.goingTo(points[0]); - self.fPath->lineTo(points[0].x, -points[0].y); - } - break; - - case kCGPathElementAddQuadCurveToPoint: - if (self.currentIsNot(points[0]) || self.currentIsNot(points[1])) { - self.goingTo(points[1]); - self.fPath->quadTo(points[0].x, -points[0].y, - points[1].x, -points[1].y); - } - break; - - case kCGPathElementAddCurveToPoint: - if (self.currentIsNot(points[0]) || - self.currentIsNot(points[1]) || - self.currentIsNot(points[2])) - { - self.goingTo(points[2]); - self.fPath->cubicTo(points[0].x, -points[0].y, - points[1].x, -points[1].y, - points[2].x, -points[2].y); - } - break; - - case kCGPathElementCloseSubpath: - if (self.fStarted) { - self.fPath->close(); - } - break; - - default: - SkDEBUGFAIL("Unknown path element!"); - break; - } - } -}; -} // namespace - -/* - * Our subpixel resolution is only 2 bits in each direction, so a scale of 4 - * seems sufficient, and possibly even correct, to allow the hinted outline - * to be subpixel positioned. - */ -#define kScaleForSubPixelPositionHinting (4.0f) - -bool SkScalerContext_Mac::generatePath(SkGlyphID glyph, SkPath* path) { - SkScalar scaleX = SK_Scalar1; - SkScalar scaleY = SK_Scalar1; - - CGAffineTransform xform = fTransform; - /* - * For subpixel positioning, we want to return an unhinted outline, so it - * can be positioned nicely at fractional offsets. However, we special-case - * if the baseline of the (horizontal) text is axis-aligned. In those cases - * we want to retain hinting in the direction orthogonal to the baseline. - * e.g. for horizontal baseline, we want to retain hinting in Y. - * The way we remove hinting is to scale the font by some value (4) in that - * direction, ask for the path, and then scale the path back down. - */ - if (fDoSubPosition) { - // start out by assuming that we want no hining in X and Y - scaleX = scaleY = kScaleForSubPixelPositionHinting; - // now see if we need to restore hinting for axis-aligned baselines - switch (this->computeAxisAlignmentForHText()) { - case kX_SkAxisAlignment: - scaleY = SK_Scalar1; // want hinting in the Y direction - break; - case kY_SkAxisAlignment: - scaleX = SK_Scalar1; // want hinting in the X direction - break; - default: - break; - } - - CGAffineTransform scale(CGAffineTransformMakeScale(ScalarToCG(scaleX), ScalarToCG(scaleY))); - xform = CGAffineTransformConcat(fTransform, scale); - } - - CGGlyph cgGlyph = SkTo(glyph); - SkUniqueCFRef cgPath(CTFontCreatePathForGlyph(fCTFont.get(), cgGlyph, &xform)); - - path->reset(); - if (!cgPath) { - return false; - } - - SkCTPathGeometrySink sink(path); - CGPathApply(cgPath.get(), &sink, SkCTPathGeometrySink::ApplyElement); - if (fDoSubPosition) { - SkMatrix m; - m.setScale(SkScalarInvert(scaleX), SkScalarInvert(scaleY)); - path->transform(m); - } - return true; -} - -void SkScalerContext_Mac::generateFontMetrics(SkFontMetrics* metrics) { - if (nullptr == metrics) { - return; - } - - CGRect theBounds = CTFontGetBoundingBox(fCTFont.get()); - - metrics->fTop = CGToScalar(-CGRectGetMaxY_inline(theBounds)); - metrics->fAscent = CGToScalar(-CTFontGetAscent(fCTFont.get())); - metrics->fDescent = CGToScalar( CTFontGetDescent(fCTFont.get())); - metrics->fBottom = CGToScalar(-CGRectGetMinY_inline(theBounds)); - metrics->fLeading = CGToScalar( CTFontGetLeading(fCTFont.get())); - metrics->fAvgCharWidth = CGToScalar( CGRectGetWidth_inline(theBounds)); - metrics->fXMin = CGToScalar( CGRectGetMinX_inline(theBounds)); - metrics->fXMax = CGToScalar( CGRectGetMaxX_inline(theBounds)); - metrics->fMaxCharWidth = metrics->fXMax - metrics->fXMin; - metrics->fXHeight = CGToScalar( CTFontGetXHeight(fCTFont.get())); - metrics->fCapHeight = CGToScalar( CTFontGetCapHeight(fCTFont.get())); - metrics->fUnderlineThickness = CGToScalar( CTFontGetUnderlineThickness(fCTFont.get())); - metrics->fUnderlinePosition = -CGToScalar( CTFontGetUnderlinePosition(fCTFont.get())); - - metrics->fFlags = 0; - metrics->fFlags |= SkFontMetrics::kUnderlineThicknessIsValid_Flag; - metrics->fFlags |= SkFontMetrics::kUnderlinePositionIsValid_Flag; - - // See https://bugs.chromium.org/p/skia/issues/detail?id=6203 - // At least on 10.12.3 with memory based fonts the x-height is always 0.6666 of the ascent and - // the cap-height is always 0.8888 of the ascent. It appears that the values from the 'OS/2' - // table are read, but then overwritten if the font is not a system font. As a result, if there - // is a valid 'OS/2' table available use the values from the table if they aren't too strange. - struct OS2HeightMetrics { - SK_OT_SHORT sxHeight; - SK_OT_SHORT sCapHeight; - } heights; - size_t bytesRead = this->getTypeface()->getTableData( - SkTEndian_SwapBE32(SkOTTableOS2::TAG), offsetof(SkOTTableOS2, version.v2.sxHeight), - sizeof(heights), &heights); - if (bytesRead == sizeof(heights)) { - // 'fontSize' is correct because the entire resolved size is set by the constructor. - CGFloat fontSize = CTFontGetSize(this->fCTFont.get()); - unsigned upem = CTFontGetUnitsPerEm(this->fCTFont.get()); - unsigned maxSaneHeight = upem * 2; - uint16_t xHeight = SkEndian_SwapBE16(heights.sxHeight); - if (xHeight && xHeight < maxSaneHeight) { - metrics->fXHeight = CGToScalar(xHeight * fontSize / upem); - } - uint16_t capHeight = SkEndian_SwapBE16(heights.sCapHeight); - if (capHeight && capHeight < maxSaneHeight) { - metrics->fCapHeight = CGToScalar(capHeight * fontSize / upem); - } - } -} - -/////////////////////////////////////////////////////////////////////////////// - -// Web fonts added to the CTFont registry do not return their character set. -// Iterate through the font in this case. The existing caller caches the result, -// so the performance impact isn't too bad. -static void populate_glyph_to_unicode_slow(CTFontRef ctFont, CFIndex glyphCount, - SkUnichar* out) { - sk_bzero(out, glyphCount * sizeof(SkUnichar)); - UniChar unichar = 0; - while (glyphCount > 0) { - CGGlyph glyph; - if (CTFontGetGlyphsForCharacters(ctFont, &unichar, &glyph, 1)) { - if (out[glyph] == 0) { - out[glyph] = unichar; - --glyphCount; - } - } - if (++unichar == 0) { - break; - } - } -} - -static constexpr uint16_t kPlaneSize = 1 << 13; - -static void get_plane_glyph_map(const uint8_t* bits, - CTFontRef ctFont, - CFIndex glyphCount, - SkUnichar* glyphToUnicode, - uint8_t planeIndex) { - SkUnichar planeOrigin = (SkUnichar)planeIndex << 16; // top half of codepoint. - for (uint16_t i = 0; i < kPlaneSize; i++) { - uint8_t mask = bits[i]; - if (!mask) { - continue; - } - for (uint8_t j = 0; j < 8; j++) { - if (0 == (mask & ((uint8_t)1 << j))) { - continue; - } - uint16_t planeOffset = (i << 3) | j; - SkUnichar codepoint = planeOrigin | (SkUnichar)planeOffset; - uint16_t utf16[2] = {planeOffset, 0}; - size_t count = 1; - if (planeOrigin != 0) { - count = SkUTF::ToUTF16(codepoint, utf16); - } - CGGlyph glyphs[2] = {0, 0}; - if (CTFontGetGlyphsForCharacters(ctFont, utf16, glyphs, count)) { - SkASSERT(glyphs[1] == 0); - SkASSERT(glyphs[0] < glyphCount); - // CTFontCopyCharacterSet and CTFontGetGlyphsForCharacters seem to add 'support' - // for characters 0x9, 0xA, and 0xD mapping them to the glyph for character 0x20? - // Prefer mappings to codepoints at or above 0x20. - if (glyphToUnicode[glyphs[0]] < 0x20) { - glyphToUnicode[glyphs[0]] = codepoint; - } - } - } - } -} -// Construct Glyph to Unicode table. -static void populate_glyph_to_unicode(CTFontRef ctFont, CFIndex glyphCount, - SkUnichar* glyphToUnicode) { - sk_bzero(glyphToUnicode, sizeof(SkUnichar) * glyphCount); - SkUniqueCFRef charSet(CTFontCopyCharacterSet(ctFont)); - if (!charSet) { - populate_glyph_to_unicode_slow(ctFont, glyphCount, glyphToUnicode); - return; - } - - SkUniqueCFRef bitmap( - CFCharacterSetCreateBitmapRepresentation(nullptr, charSet.get())); - if (!bitmap) { - return; - } - CFIndex dataLength = CFDataGetLength(bitmap.get()); - if (!dataLength) { - return; - } - SkASSERT(dataLength >= kPlaneSize); - const UInt8* bits = CFDataGetBytePtr(bitmap.get()); - - get_plane_glyph_map(bits, ctFont, glyphCount, glyphToUnicode, 0); - /* - A CFData object that specifies the bitmap representation of the Unicode - character points the for the new character set. The bitmap representation could - contain all the Unicode character range starting from BMP to Plane 16. The - first 8KiB (8192 bytes) of the data represent the BMP range. The BMP range 8KiB - can be followed by zero to sixteen 8KiB bitmaps, each prepended with the plane - index byte. For example, the bitmap representing the BMP and Plane 2 has the - size of 16385 bytes (8KiB for BMP, 1 byte index, and a 8KiB bitmap for Plane - 2). The plane index byte, in this case, contains the integer value two. - */ - - if (dataLength <= kPlaneSize) { - return; - } - int extraPlaneCount = (dataLength - kPlaneSize) / (1 + kPlaneSize); - SkASSERT(dataLength == kPlaneSize + extraPlaneCount * (1 + kPlaneSize)); - while (extraPlaneCount-- > 0) { - bits += kPlaneSize; - uint8_t planeIndex = *bits++; - SkASSERT(planeIndex >= 1); - SkASSERT(planeIndex <= 16); - get_plane_glyph_map(bits, ctFont, glyphCount, glyphToUnicode, planeIndex); - } -} - -/** Assumes src and dst are not nullptr. */ -static void CFStringToSkString(CFStringRef src, SkString* dst) { - // Reserve enough room for the worst-case string, - // plus 1 byte for the trailing null. - CFIndex length = CFStringGetMaximumSizeForEncoding(CFStringGetLength(src), - kCFStringEncodingUTF8) + 1; - dst->resize(length); - CFStringGetCString(src, dst->writable_str(), length, kCFStringEncodingUTF8); - // Resize to the actual UTF-8 length used, stripping the null character. - dst->resize(strlen(dst->c_str())); -} - -void SkTypeface_Mac::getGlyphToUnicodeMap(SkUnichar* dstArray) const { - SkUniqueCFRef ctFont = - ctfont_create_exact_copy(fFontRef.get(), CTFontGetUnitsPerEm(fFontRef.get()), - fOpszVariation); - CFIndex glyphCount = CTFontGetGlyphCount(ctFont.get()); - populate_glyph_to_unicode(ctFont.get(), glyphCount, dstArray); -} - -std::unique_ptr SkTypeface_Mac::onGetAdvancedMetrics() const { - - SkUniqueCFRef ctFont = - ctfont_create_exact_copy(fFontRef.get(), CTFontGetUnitsPerEm(fFontRef.get()), - fOpszVariation); - - std::unique_ptr info(new SkAdvancedTypefaceMetrics); - - { - SkUniqueCFRef fontName(CTFontCopyPostScriptName(ctFont.get())); - if (fontName.get()) { - CFStringToSkString(fontName.get(), &info->fPostScriptName); - info->fFontName = info->fPostScriptName; - } - } - - // In 10.10 and earlier, CTFontCopyVariationAxes and CTFontCopyVariation do not work when - // applied to fonts which started life with CGFontCreateWithDataProvider (they simply always - // return nullptr). As a result, we are limited to CGFontCopyVariationAxes and - // CGFontCopyVariations here until support for 10.10 and earlier is removed. - SkUniqueCFRef cgFont(CTFontCopyGraphicsFont(ctFont.get(), nullptr)); - if (cgFont) { - SkUniqueCFRef cgAxes(CGFontCopyVariationAxes(cgFont.get())); - if (cgAxes && CFArrayGetCount(cgAxes.get()) > 0) { - info->fFlags |= SkAdvancedTypefaceMetrics::kMultiMaster_FontFlag; - } - } - - SkOTTableOS2_V4::Type fsType; - if (sizeof(fsType) == this->getTableData(SkTEndian_SwapBE32(SkOTTableOS2::TAG), - offsetof(SkOTTableOS2_V4, fsType), - sizeof(fsType), - &fsType)) { - SkOTUtils::SetAdvancedTypefaceFlags(fsType, info.get()); - } - - // If it's not a truetype font, mark it as 'other'. Assume that TrueType - // fonts always have both glyf and loca tables. At the least, this is what - // sfntly needs to subset the font. CTFontCopyAttribute() does not always - // succeed in determining this directly. - if (!this->getTableSize('glyf') || !this->getTableSize('loca')) { - return info; - } - - info->fType = SkAdvancedTypefaceMetrics::kTrueType_Font; - CTFontSymbolicTraits symbolicTraits = CTFontGetSymbolicTraits(ctFont.get()); - if (symbolicTraits & kCTFontMonoSpaceTrait) { - info->fStyle |= SkAdvancedTypefaceMetrics::kFixedPitch_Style; - } - if (symbolicTraits & kCTFontItalicTrait) { - info->fStyle |= SkAdvancedTypefaceMetrics::kItalic_Style; - } - CTFontStylisticClass stylisticClass = symbolicTraits & kCTFontClassMaskTrait; - if (stylisticClass >= kCTFontOldStyleSerifsClass && stylisticClass <= kCTFontSlabSerifsClass) { - info->fStyle |= SkAdvancedTypefaceMetrics::kSerif_Style; - } else if (stylisticClass & kCTFontScriptsClass) { - info->fStyle |= SkAdvancedTypefaceMetrics::kScript_Style; - } - info->fItalicAngle = (int16_t) CTFontGetSlantAngle(ctFont.get()); - info->fAscent = (int16_t) CTFontGetAscent(ctFont.get()); - info->fDescent = (int16_t) CTFontGetDescent(ctFont.get()); - info->fCapHeight = (int16_t) CTFontGetCapHeight(ctFont.get()); - CGRect bbox = CTFontGetBoundingBox(ctFont.get()); - - SkRect r; - r.setLTRB(CGToScalar(CGRectGetMinX_inline(bbox)), // Left - CGToScalar(CGRectGetMaxY_inline(bbox)), // Top - CGToScalar(CGRectGetMaxX_inline(bbox)), // Right - CGToScalar(CGRectGetMinY_inline(bbox))); // Bottom - - r.roundOut(&(info->fBBox)); - - // Figure out a good guess for StemV - Min width of i, I, !, 1. - // This probably isn't very good with an italic font. - int16_t min_width = SHRT_MAX; - info->fStemV = 0; - static const UniChar stem_chars[] = {'i', 'I', '!', '1'}; - const size_t count = sizeof(stem_chars) / sizeof(stem_chars[0]); - CGGlyph glyphs[count]; - CGRect boundingRects[count]; - if (CTFontGetGlyphsForCharacters(ctFont.get(), stem_chars, glyphs, count)) { - CTFontGetBoundingRectsForGlyphs(ctFont.get(), kCTFontOrientationHorizontal, - glyphs, boundingRects, count); - for (size_t i = 0; i < count; i++) { - int16_t width = (int16_t) boundingRects[i].size.width; - if (width > 0 && width < min_width) { - min_width = width; - info->fStemV = min_width; - } - } - } - return info; -} - -/////////////////////////////////////////////////////////////////////////////// - -static SK_SFNT_ULONG get_font_type_tag(CTFontRef ctFont) { - SkUniqueCFRef fontFormatRef( - static_cast(CTFontCopyAttribute(ctFont, kCTFontFormatAttribute))); - if (!fontFormatRef) { - return 0; - } - - SInt32 fontFormatValue; - if (!CFNumberGetValue(fontFormatRef.get(), kCFNumberSInt32Type, &fontFormatValue)) { - return 0; - } - - switch (fontFormatValue) { - case kCTFontFormatOpenTypePostScript: - return SkSFNTHeader::fontType_OpenTypeCFF::TAG; - case kCTFontFormatOpenTypeTrueType: - return SkSFNTHeader::fontType_WindowsTrueType::TAG; - case kCTFontFormatTrueType: - return SkSFNTHeader::fontType_MacTrueType::TAG; - case kCTFontFormatPostScript: - return SkSFNTHeader::fontType_PostScript::TAG; - case kCTFontFormatBitmap: - return SkSFNTHeader::fontType_MacTrueType::TAG; - case kCTFontFormatUnrecognized: - default: - return 0; - } -} - -std::unique_ptr SkTypeface_Mac::onOpenStream(int* ttcIndex) const { - *ttcIndex = 0; - - fInitStream([this]{ - if (fStream) { - return; - } - - SK_SFNT_ULONG fontType = get_font_type_tag(fFontRef.get()); - - // get table tags - int numTables = this->countTables(); - SkTDArray tableTags; - tableTags.setCount(numTables); - this->getTableTags(tableTags.begin()); - - // CT seems to be unreliable in being able to obtain the type, - // even if all we want is the first four bytes of the font resource. - // Just the presence of the FontForge 'FFTM' table seems to throw it off. - if (fontType == 0) { - fontType = SkSFNTHeader::fontType_WindowsTrueType::TAG; - - // see https://skbug.com/7630#c7 - bool couldBeCFF = false; - constexpr SkFontTableTag CFFTag = SkSetFourByteTag('C', 'F', 'F', ' '); - constexpr SkFontTableTag CFF2Tag = SkSetFourByteTag('C', 'F', 'F', '2'); - for (int tableIndex = 0; tableIndex < numTables; ++tableIndex) { - if (CFFTag == tableTags[tableIndex] || CFF2Tag == tableTags[tableIndex]) { - couldBeCFF = true; - } - } - if (couldBeCFF) { - fontType = SkSFNTHeader::fontType_OpenTypeCFF::TAG; - } - } - - // Sometimes CoreGraphics incorrectly thinks a font is kCTFontFormatPostScript. - // It is exceedingly unlikely that this is the case, so double check - // (see https://crbug.com/809763 ). - if (fontType == SkSFNTHeader::fontType_PostScript::TAG) { - // see if there are any required 'typ1' tables (see Adobe Technical Note #5180) - bool couldBeTyp1 = false; - constexpr SkFontTableTag TYPE1Tag = SkSetFourByteTag('T', 'Y', 'P', '1'); - constexpr SkFontTableTag CIDTag = SkSetFourByteTag('C', 'I', 'D', ' '); - for (int tableIndex = 0; tableIndex < numTables; ++tableIndex) { - if (TYPE1Tag == tableTags[tableIndex] || CIDTag == tableTags[tableIndex]) { - couldBeTyp1 = true; - } - } - if (!couldBeTyp1) { - fontType = SkSFNTHeader::fontType_OpenTypeCFF::TAG; - } - } - - // get the table sizes and accumulate the total size of the font - SkTDArray tableSizes; - size_t totalSize = sizeof(SkSFNTHeader) + sizeof(SkSFNTHeader::TableDirectoryEntry) * numTables; - for (int tableIndex = 0; tableIndex < numTables; ++tableIndex) { - size_t tableSize = this->getTableSize(tableTags[tableIndex]); - totalSize += (tableSize + 3) & ~3; - *tableSizes.append() = tableSize; - } - - // reserve memory for stream, and zero it (tables must be zero padded) - fStream.reset(new SkMemoryStream(totalSize)); - char* dataStart = (char*)fStream->getMemoryBase(); - sk_bzero(dataStart, totalSize); - char* dataPtr = dataStart; - - // compute font header entries - uint16_t entrySelector = 0; - uint16_t searchRange = 1; - while (searchRange < numTables >> 1) { - entrySelector++; - searchRange <<= 1; - } - searchRange <<= 4; - uint16_t rangeShift = (numTables << 4) - searchRange; - - // write font header - SkSFNTHeader* header = (SkSFNTHeader*)dataPtr; - header->fontType = fontType; - header->numTables = SkEndian_SwapBE16(numTables); - header->searchRange = SkEndian_SwapBE16(searchRange); - header->entrySelector = SkEndian_SwapBE16(entrySelector); - header->rangeShift = SkEndian_SwapBE16(rangeShift); - dataPtr += sizeof(SkSFNTHeader); - - // write tables - SkSFNTHeader::TableDirectoryEntry* entry = (SkSFNTHeader::TableDirectoryEntry*)dataPtr; - dataPtr += sizeof(SkSFNTHeader::TableDirectoryEntry) * numTables; - for (int tableIndex = 0; tableIndex < numTables; ++tableIndex) { - size_t tableSize = tableSizes[tableIndex]; - this->getTableData(tableTags[tableIndex], 0, tableSize, dataPtr); - entry->tag = SkEndian_SwapBE32(tableTags[tableIndex]); - entry->checksum = SkEndian_SwapBE32(SkOTUtils::CalcTableChecksum((SK_OT_ULONG*)dataPtr, - tableSize)); - entry->offset = SkEndian_SwapBE32(SkToU32(dataPtr - dataStart)); - entry->logicalLength = SkEndian_SwapBE32(SkToU32(tableSize)); - - dataPtr += (tableSize + 3) & ~3; - ++entry; - } - }); - return fStream->duplicate(); -} - -struct NonDefaultAxesContext { - SkFixed* axisValue; - CFArrayRef cgAxes; -}; -static void set_non_default_axes(CFTypeRef key, CFTypeRef value, void* context) { - NonDefaultAxesContext* self = static_cast(context); - - if (CFGetTypeID(key) != CFStringGetTypeID() || CFGetTypeID(value) != CFNumberGetTypeID()) { - return; - } - - // The key is a CFString which is a string from the 'name' table. - // Search the cgAxes for an axis with this name, and use its index to store the value. - CFIndex keyIndex = -1; - CFStringRef keyString = static_cast(key); - for (CFIndex i = 0; i < CFArrayGetCount(self->cgAxes); ++i) { - CFTypeRef cgAxis = CFArrayGetValueAtIndex(self->cgAxes, i); - if (CFGetTypeID(cgAxis) != CFDictionaryGetTypeID()) { - continue; - } - - CFDictionaryRef cgAxisDict = static_cast(cgAxis); - CFTypeRef cgAxisName = CFDictionaryGetValue(cgAxisDict, kCGFontVariationAxisName); - if (!cgAxisName || CFGetTypeID(cgAxisName) != CFStringGetTypeID()) { - continue; - } - CFStringRef cgAxisNameString = static_cast(cgAxisName); - if (CFStringCompare(keyString, cgAxisNameString, 0) == kCFCompareEqualTo) { - keyIndex = i; - break; - } - } - if (keyIndex == -1) { - return; - } - - CFNumberRef valueNumber = static_cast(value); - double valueDouble; - if (!CFNumberGetValue(valueNumber, kCFNumberDoubleType, &valueDouble) || - valueDouble < SkFixedToDouble(SK_FixedMin) || SkFixedToDouble(SK_FixedMax) < valueDouble) - { - return; - } - self->axisValue[keyIndex] = SkDoubleToFixed(valueDouble); -} -static bool get_variations(CTFontRef ctFont, CFIndex* cgAxisCount, - SkAutoSTMalloc<4, SkFixed>* axisValues) -{ - // In 10.10 and earlier, CTFontCopyVariationAxes and CTFontCopyVariation do not work when - // applied to fonts which started life with CGFontCreateWithDataProvider (they simply always - // return nullptr). As a result, we are limited to CGFontCopyVariationAxes and - // CGFontCopyVariations here until support for 10.10 and earlier is removed. - SkUniqueCFRef cgFont(CTFontCopyGraphicsFont(ctFont, nullptr)); - if (!cgFont) { - return false; - } - - SkUniqueCFRef cgVariations(CGFontCopyVariations(cgFont.get())); - // If a font has no variations CGFontCopyVariations returns nullptr (instead of an empty dict). - if (!cgVariations) { - return false; - } - - SkUniqueCFRef cgAxes(CGFontCopyVariationAxes(cgFont.get())); - if (!cgAxes) { - return false; - } - *cgAxisCount = CFArrayGetCount(cgAxes.get()); - axisValues->reset(*cgAxisCount); - - // Set all of the axes to their default values. - // Fail if any default value cannot be determined. - for (CFIndex i = 0; i < *cgAxisCount; ++i) { - CFTypeRef cgAxis = CFArrayGetValueAtIndex(cgAxes.get(), i); - if (CFGetTypeID(cgAxis) != CFDictionaryGetTypeID()) { - return false; - } - - CFDictionaryRef cgAxisDict = static_cast(cgAxis); - CFTypeRef axisDefaultValue = CFDictionaryGetValue(cgAxisDict, - kCGFontVariationAxisDefaultValue); - if (!axisDefaultValue || CFGetTypeID(axisDefaultValue) != CFNumberGetTypeID()) { - return false; - } - CFNumberRef axisDefaultValueNumber = static_cast(axisDefaultValue); - double axisDefaultValueDouble; - if (!CFNumberGetValue(axisDefaultValueNumber, kCFNumberDoubleType, &axisDefaultValueDouble)) - { - return false; - } - if (axisDefaultValueDouble < SkFixedToDouble(SK_FixedMin) || - SkFixedToDouble(SK_FixedMax) < axisDefaultValueDouble) - { - return false; - } - (*axisValues)[(int)i] = SkDoubleToFixed(axisDefaultValueDouble); - } - - // Override the default values with the given font's stated axis values. - NonDefaultAxesContext c = { axisValues->get(), cgAxes.get() }; - CFDictionaryApplyFunction(cgVariations.get(), set_non_default_axes, &c); - - return true; -} -std::unique_ptr SkTypeface_Mac::onMakeFontData() const { - int index; - std::unique_ptr stream(this->onOpenStream(&index)); - - CFIndex cgAxisCount; - SkAutoSTMalloc<4, SkFixed> axisValues; - if (get_variations(fFontRef.get(), &cgAxisCount, &axisValues)) { - return std::make_unique(std::move(stream), index, - axisValues.get(), cgAxisCount); - } - return std::make_unique(std::move(stream), index, nullptr, 0); -} - -/** Creates a CT variation dictionary {tag, value} from a CG variation dictionary {name, value}. */ -static SkUniqueCFRef ct_variation_from_cg_variation(CFDictionaryRef cgVariations, - CFArrayRef ctAxes) { - - SkUniqueCFRef ctVariation( - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - - CFIndex axisCount = CFArrayGetCount(ctAxes); - for (CFIndex i = 0; i < axisCount; ++i) { - CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes, i); - if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { - return nullptr; - } - CFDictionaryRef axisInfoDict = static_cast(axisInfo); - - // The assumption is that values produced by kCTFontVariationAxisNameKey and - // kCGFontVariationAxisName will always be equal. - CFTypeRef axisName = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisNameKey); - if (!axisName || CFGetTypeID(axisName) != CFStringGetTypeID()) { - return nullptr; - } - - CFTypeRef axisValue = CFDictionaryGetValue(cgVariations, axisName); - if (!axisValue || CFGetTypeID(axisValue) != CFNumberGetTypeID()) { - return nullptr; - } - - CFTypeRef axisTag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); - if (!axisTag || CFGetTypeID(axisTag) != CFNumberGetTypeID()) { - return nullptr; - } - - CFDictionaryAddValue(ctVariation.get(), axisTag, axisValue); - } - return std::move(ctVariation); -} - -int SkTypeface_Mac::onGetVariationDesignPosition( - SkFontArguments::VariationPosition::Coordinate coordinates[], int coordinateCount) const -{ - // The CGFont variation data does not contain the tag. - - // CTFontCopyVariationAxes returns nullptr for CGFontCreateWithDataProvider fonts with - // macOS 10.10 and iOS 9 or earlier. When this happens, there is no API to provide the tag. - SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(fFontRef.get())); - if (!ctAxes) { - return -1; - } - CFIndex axisCount = CFArrayGetCount(ctAxes.get()); - if (!coordinates || coordinateCount < axisCount) { - return axisCount; - } - - // This call always returns nullptr on 10.11 and under for CGFontCreateWithDataProvider fonts. - // When this happens, try converting the CG variation to a CT variation. - // On 10.12 and later, this only returns non-default variations. - SkUniqueCFRef ctVariation(CTFontCopyVariation(fFontRef.get())); - if (!ctVariation) { - // When 10.11 and earlier are no longer supported, the following code can be replaced with - // return -1 and ct_variation_from_cg_variation can be removed. - SkUniqueCFRef cgFont(CTFontCopyGraphicsFont(fFontRef.get(), nullptr)); - if (!cgFont) { - return -1; - } - SkUniqueCFRef cgVariations(CGFontCopyVariations(cgFont.get())); - if (!cgVariations) { - return -1; - } - ctVariation = ct_variation_from_cg_variation(cgVariations.get(), ctAxes.get()); - if (!ctVariation) { - return -1; - } - } - - for (int i = 0; i < axisCount; ++i) { - CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); - if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { - return -1; - } - CFDictionaryRef axisInfoDict = static_cast(axisInfo); - - CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); - if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { - return -1; - } - CFNumberRef tagNumber = static_cast(tag); - int64_t tagLong; - if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { - return -1; - } - coordinates[i].axis = tagLong; - - CGFloat variationCGFloat; - CFTypeRef variationValue = CFDictionaryGetValue(ctVariation.get(), tagNumber); - if (variationValue) { - if (CFGetTypeID(variationValue) != CFNumberGetTypeID()) { - return -1; - } - CFNumberRef variationNumber = static_cast(variationValue); - if (!CFNumberGetValue(variationNumber, kCFNumberCGFloatType, &variationCGFloat)) { - return -1; - } - } else { - CFTypeRef def = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisDefaultValueKey); - if (!def || CFGetTypeID(def) != CFNumberGetTypeID()) { - return -1; - } - CFNumberRef defNumber = static_cast(def); - if (!CFNumberGetValue(defNumber, kCFNumberCGFloatType, &variationCGFloat)) { - return -1; - } - } - coordinates[i].value = CGToScalar(variationCGFloat); - - } - return axisCount; -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -int SkTypeface_Mac::onGetUPEM() const { - SkUniqueCFRef cgFont(CTFontCopyGraphicsFont(fFontRef.get(), nullptr)); - return CGFontGetUnitsPerEm(cgFont.get()); -} - -SkTypeface::LocalizedStrings* SkTypeface_Mac::onCreateFamilyNameIterator() const { - sk_sp nameIter = - SkOTUtils::LocalizedStrings_NameTable::MakeForFamilyNames(*this); - if (!nameIter) { - CFStringRef cfLanguageRaw; - SkUniqueCFRef cfFamilyName( - CTFontCopyLocalizedName(fFontRef.get(), kCTFontFamilyNameKey, &cfLanguageRaw)); - SkUniqueCFRef cfLanguage(cfLanguageRaw); - - SkString skLanguage; - SkString skFamilyName; - if (cfLanguage) { - CFStringToSkString(cfLanguage.get(), &skLanguage); - } else { - skLanguage = "und"; //undetermined - } - if (cfFamilyName) { - CFStringToSkString(cfFamilyName.get(), &skFamilyName); - } - - nameIter = sk_make_sp(skFamilyName, skLanguage); - } - return nameIter.release(); -} - -int SkTypeface_Mac::onGetTableTags(SkFontTableTag tags[]) const { - SkUniqueCFRef cfArray( - CTFontCopyAvailableTables(fFontRef.get(), kCTFontTableOptionNoOptions)); - if (!cfArray) { - return 0; - } - int count = SkToInt(CFArrayGetCount(cfArray.get())); - if (tags) { - for (int i = 0; i < count; ++i) { - uintptr_t fontTag = reinterpret_cast( - CFArrayGetValueAtIndex(cfArray.get(), i)); - tags[i] = static_cast(fontTag); - } - } - return count; -} - -// If, as is the case with web fonts, the CTFont data isn't available, -// the CGFont data may work. While the CGFont may always provide the -// right result, leave the CTFont code path to minimize disruption. -static SkUniqueCFRef copy_table_from_font(CTFontRef ctFont, SkFontTableTag tag) { - SkUniqueCFRef data(CTFontCopyTable(ctFont, (CTFontTableTag) tag, - kCTFontTableOptionNoOptions)); - if (!data) { - SkUniqueCFRef cgFont(CTFontCopyGraphicsFont(ctFont, nullptr)); - data.reset(CGFontCopyTableForTag(cgFont.get(), tag)); - } - return data; -} - -size_t SkTypeface_Mac::onGetTableData(SkFontTableTag tag, size_t offset, - size_t length, void* dstData) const { - SkUniqueCFRef srcData = copy_table_from_font(fFontRef.get(), tag); - if (!srcData) { - return 0; - } - - size_t srcSize = CFDataGetLength(srcData.get()); - if (offset >= srcSize) { - return 0; - } - if (length > srcSize - offset) { - length = srcSize - offset; - } - if (dstData) { - memcpy(dstData, CFDataGetBytePtr(srcData.get()) + offset, length); - } - return length; -} - -sk_sp SkTypeface_Mac::onCopyTableData(SkFontTableTag tag) const { - SkUniqueCFRef srcData = copy_table_from_font(fFontRef.get(), tag); - if (!srcData) { - return nullptr; - } - const UInt8* data = CFDataGetBytePtr(srcData.get()); - CFIndex length = CFDataGetLength(srcData.get()); - return SkData::MakeWithProc(data, length, - [](const void*, void* ctx) { - CFRelease((CFDataRef)ctx); - }, (void*)srcData.release()); -} - -SkScalerContext* SkTypeface_Mac::onCreateScalerContext(const SkScalerContextEffects& effects, - const SkDescriptor* desc) const { - return new SkScalerContext_Mac(sk_ref_sp(const_cast(this)), effects, desc); -} - -void SkTypeface_Mac::onFilterRec(SkScalerContextRec* rec) const { - if (rec->fFlags & SkScalerContext::kLCD_BGROrder_Flag || - rec->fFlags & SkScalerContext::kLCD_Vertical_Flag) - { - rec->fMaskFormat = SkMask::kA8_Format; - // Render the glyphs as close as possible to what was requested. - // The above turns off subpixel rendering, but the user requested it. - // Normal hinting will cause the A8 masks to be generated from CoreGraphics subpixel masks. - // See comments below for more details. - rec->setHinting(SkFontHinting::kNormal); - } - - unsigned flagsWeDontSupport = SkScalerContext::kForceAutohinting_Flag | - SkScalerContext::kLCD_BGROrder_Flag | - SkScalerContext::kLCD_Vertical_Flag; - - rec->fFlags &= ~flagsWeDontSupport; - - const SmoothBehavior smoothBehavior = smooth_behavior(); - - // Only two levels of hinting are supported. - // kNo_Hinting means avoid CoreGraphics outline dilation (smoothing). - // kNormal_Hinting means CoreGraphics outline dilation (smoothing) is allowed. - if (rec->getHinting() != SkFontHinting::kNone) { - rec->setHinting(SkFontHinting::kNormal); - } - // If smoothing has no effect, don't request it. - if (smoothBehavior == SmoothBehavior::none) { - rec->setHinting(SkFontHinting::kNone); - } - - // FIXME: lcd smoothed un-hinted rasterization unsupported. - // Tracked by http://code.google.com/p/skia/issues/detail?id=915 . - // There is no current means to honor a request for unhinted lcd, - // so arbitrarilly ignore the hinting request and honor lcd. - - // Hinting and smoothing should be orthogonal, but currently they are not. - // CoreGraphics has no API to influence hinting. However, its lcd smoothed - // output is drawn from auto-dilated outlines (the amount of which is - // determined by AppleFontSmoothing). Its regular anti-aliased output is - // drawn from un-dilated outlines. - - // The behavior of Skia is as follows: - // [AA][no-hint]: generate AA using CoreGraphic's AA output. - // [AA][yes-hint]: use CoreGraphic's LCD output and reduce it to a single - // channel. This matches [LCD][yes-hint] in weight. - // [LCD][no-hint]: curently unable to honor, and must pick which to respect. - // Currenly side with LCD, effectively ignoring the hinting setting. - // [LCD][yes-hint]: generate LCD using CoreGraphic's LCD output. - if (rec->fMaskFormat == SkMask::kLCD16_Format) { - if (smoothBehavior == SmoothBehavior::subpixel) { - //CoreGraphics creates 555 masks for smoothed text anyway. - rec->fMaskFormat = SkMask::kLCD16_Format; - rec->setHinting(SkFontHinting::kNormal); - } else { - rec->fMaskFormat = SkMask::kA8_Format; - if (smoothBehavior != SmoothBehavior::none) { - rec->setHinting(SkFontHinting::kNormal); - } - } - } - - // CoreText provides no information as to whether a glyph will be color or not. - // Fonts may mix outlines and bitmaps, so information is needed on a glyph by glyph basis. - // If a font contains an 'sbix' table, consider it to be a color font, and disable lcd. - if (fHasColorGlyphs) { - rec->fMaskFormat = SkMask::kARGB32_Format; - } - - // Unhinted A8 masks (those not derived from LCD masks) must respect SK_GAMMA_APPLY_TO_A8. - // All other masks can use regular gamma. - if (SkMask::kA8_Format == rec->fMaskFormat && SkFontHinting::kNone == rec->getHinting()) { -#ifndef SK_GAMMA_APPLY_TO_A8 - // SRGBTODO: Is this correct? Do we want contrast boost? - rec->ignorePreBlend(); -#endif - } else { - SkColor color = rec->getLuminanceColor(); - if (smoothBehavior == SmoothBehavior::some) { - // CoreGraphics smoothed text without subpixel coverage blitting goes from a gamma of - // 2.0 for black foreground to a gamma of 1.0 for white foreground. Emulate this - // through the mask gamma by reducing the color values to 1/2. - color = SkColorSetRGB(SkColorGetR(color) * 1/2, - SkColorGetG(color) * 1/2, - SkColorGetB(color) * 1/2); - } else if (smoothBehavior == SmoothBehavior::subpixel) { - // CoreGraphics smoothed text with subpixel coverage blitting goes from a gamma of - // 2.0 for black foreground to a gamma of ~1.4? for white foreground. Emulate this - // through the mask gamma by reducing the color values to 3/4. - color = SkColorSetRGB(SkColorGetR(color) * 3/4, - SkColorGetG(color) * 3/4, - SkColorGetB(color) * 3/4); - } - rec->setLuminanceColor(color); - - // CoreGraphics dialates smoothed text to provide contrast. - rec->setContrast(0); - } -} - -/** Takes ownership of the CFStringRef. */ -static const char* get_str(CFStringRef ref, SkString* str) { - if (nullptr == ref) { - return nullptr; - } - CFStringToSkString(ref, str); - CFRelease(ref); - return str->c_str(); -} - -void SkTypeface_Mac::onGetFamilyName(SkString* familyName) const { - get_str(CTFontCopyFamilyName(fFontRef.get()), familyName); -} - -void SkTypeface_Mac::onGetFontDescriptor(SkFontDescriptor* desc, - bool* isLocalStream) const { - SkString tmpStr; - - desc->setFamilyName(get_str(CTFontCopyFamilyName(fFontRef.get()), &tmpStr)); - desc->setFullName(get_str(CTFontCopyFullName(fFontRef.get()), &tmpStr)); - desc->setPostscriptName(get_str(CTFontCopyPostScriptName(fFontRef.get()), &tmpStr)); - desc->setStyle(this->fontStyle()); - *isLocalStream = fIsFromStream; -} - -void SkTypeface_Mac::onCharsToGlyphs(const SkUnichar uni[], int count, SkGlyphID glyphs[]) const { - // Undocumented behavior of CTFontGetGlyphsForCharacters with non-bmp code points: - // When a surrogate pair is detected, the glyph index used is the index of the high surrogate. - // It is documented that if a mapping is unavailable, the glyph will be set to 0. - - SkAutoSTMalloc<1024, UniChar> charStorage; - const UniChar* src; // UniChar is a UTF-16 16-bit code unit. - int srcCount; - const SkUnichar* utf32 = reinterpret_cast(uni); - UniChar* utf16 = charStorage.reset(2 * count); - src = utf16; - for (int i = 0; i < count; ++i) { - utf16 += SkUTF::ToUTF16(utf32[i], utf16); - } - srcCount = SkToInt(utf16 - src); - - // If there are any non-bmp code points, the provided 'glyphs' storage will be inadequate. - SkAutoSTMalloc<1024, uint16_t> glyphStorage; - uint16_t* macGlyphs = glyphs; - if (srcCount > count) { - macGlyphs = glyphStorage.reset(srcCount); - } - - CTFontGetGlyphsForCharacters(fFontRef.get(), src, macGlyphs, srcCount); - - // If there were any non-bmp, then copy and compact. - // If all are bmp, 'glyphs' already contains the compact glyphs. - // If some are non-bmp, copy and compact into 'glyphs'. - if (srcCount > count) { - SkASSERT(glyphs != macGlyphs); - int extra = 0; - for (int i = 0; i < count; ++i) { - glyphs[i] = macGlyphs[i + extra]; - if (SkUTF16_IsLeadingSurrogate(src[i + extra])) { - ++extra; - } - } - } else { - SkASSERT(glyphs == macGlyphs); - } -} - -int SkTypeface_Mac::onCountGlyphs() const { - return SkToInt(CTFontGetGlyphCount(fFontRef.get())); -} - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// - -namespace { - -struct CTFontVariation { - SkUniqueCFRef dict; - OpszVariation opsz; -}; - -/** Creates a dictionary suitable for setting the axes on a CTFont. */ -static CTFontVariation ctvariation_from_skfontarguments(CTFontRef ct, - const SkFontArguments& args) -{ - OpszVariation opsz; - constexpr const SkFourByteTag opszTag = SkSetFourByteTag('o','p','s','z'); - - SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(ct)); - if (!ctAxes) { - return CTFontVariation(); - } - CFIndex axisCount = CFArrayGetCount(ctAxes.get()); - - const SkFontArguments::VariationPosition position = args.getVariationDesignPosition(); - - SkUniqueCFRef dict( - CFDictionaryCreateMutable(kCFAllocatorDefault, axisCount, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - - for (int i = 0; i < axisCount; ++i) { - CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); - if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { - return CTFontVariation(); - } - CFDictionaryRef axisInfoDict = static_cast(axisInfo); - - CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); - if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { - return CTFontVariation(); - } - CFNumberRef tagNumber = static_cast(tag); - int64_t tagLong; - if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { - return CTFontVariation(); - } - - // The variation axes can be set to any value, but cg will effectively pin them. - // Pin them here to normalize. - CFTypeRef min = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMinimumValueKey); - CFTypeRef max = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMaximumValueKey); - CFTypeRef def = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisDefaultValueKey); - if (!min || CFGetTypeID(min) != CFNumberGetTypeID() || - !max || CFGetTypeID(max) != CFNumberGetTypeID() || - !def || CFGetTypeID(def) != CFNumberGetTypeID()) - { - return CTFontVariation(); - } - CFNumberRef minNumber = static_cast(min); - CFNumberRef maxNumber = static_cast(max); - CFNumberRef defNumber = static_cast(def); - double minDouble; - double maxDouble; - double defDouble; - if (!CFNumberGetValue(minNumber, kCFNumberDoubleType, &minDouble) || - !CFNumberGetValue(maxNumber, kCFNumberDoubleType, &maxDouble) || - !CFNumberGetValue(defNumber, kCFNumberDoubleType, &defDouble)) - { - return CTFontVariation(); - } - - double value = defDouble; - // The position may be over specified. If there are multiple values for a given axis, - // use the last one since that's what css-fonts-4 requires. - for (int j = position.coordinateCount; j --> 0;) { - if (position.coordinates[j].axis == tagLong) { - value = SkTPin(SkScalarToDouble(position.coordinates[j].value), - minDouble, maxDouble); - if (tagLong == opszTag) { - opsz.isSet = true; - } - break; - } - } - if (tagLong == opszTag) { - opsz.value = value; - } - SkUniqueCFRef valueNumber( - CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value)); - CFDictionaryAddValue(dict.get(), tagNumber, valueNumber.get()); - } - return { SkUniqueCFRef(std::move(dict)), opsz }; -} - -/** Creates a dictionary suitable for setting the axes on a CTFont. */ -static CTFontVariation ctvariation_from_skfontdata(CTFontRef ct, SkFontData* fontData) { - // In macOS 10.15 CTFontCreate* overrides any 'opsz' variation with the 'size'. - // Track the 'opsz' and return it, since it is an out of band axis. - OpszVariation opsz; - constexpr const SkFourByteTag opszTag = SkSetFourByteTag('o','p','s','z'); - - SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(ct)); - if (!ctAxes) { - return CTFontVariation(); - } - - CFIndex axisCount = CFArrayGetCount(ctAxes.get()); - if (0 == axisCount || axisCount != fontData->getAxisCount()) { - return CTFontVariation(); - } - - SkUniqueCFRef dict( - CFDictionaryCreateMutable(kCFAllocatorDefault, axisCount, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - - for (int i = 0; i < fontData->getAxisCount(); ++i) { - CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); - if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { - return CTFontVariation(); - } - CFDictionaryRef axisInfoDict = static_cast(axisInfo); - - CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, - kCTFontVariationAxisIdentifierKey); - if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { - return CTFontVariation(); - } - CFNumberRef tagNumber = static_cast(tag); - int64_t tagLong; - if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { - return CTFontVariation(); - } - - // The variation axes can be set to any value, but cg will effectively pin them. - // Pin them here to normalize. - CFTypeRef min = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMinimumValueKey); - CFTypeRef max = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMaximumValueKey); - if (!min || CFGetTypeID(min) != CFNumberGetTypeID() || - !max || CFGetTypeID(max) != CFNumberGetTypeID()) - { - return CTFontVariation(); - } - CFNumberRef minNumber = static_cast(min); - CFNumberRef maxNumber = static_cast(max); - double minDouble; - double maxDouble; - if (!CFNumberGetValue(minNumber, kCFNumberDoubleType, &minDouble) || - !CFNumberGetValue(maxNumber, kCFNumberDoubleType, &maxDouble)) - { - return CTFontVariation(); - } - double value = SkTPin(SkFixedToDouble(fontData->getAxis()[i]), minDouble, maxDouble); - - if (tagLong == opszTag) { - opsz.isSet = true; - opsz.value = value; - } - - SkUniqueCFRef valueNumber( - CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value)); - CFDictionaryAddValue(dict.get(), tagNumber, valueNumber.get()); - } - return { SkUniqueCFRef(std::move(dict)), opsz }; -} - -static sk_sp skdata_from_skstreamasset(std::unique_ptr stream) { - size_t size = stream->getLength(); - if (const void* base = stream->getMemoryBase()) { - return SkData::MakeWithProc(base, size, - [](const void*, void* ctx) -> void { - delete (SkStreamAsset*)ctx; - }, stream.release()); - } - return SkData::MakeFromStream(stream.get(), size); -} - -static SkUniqueCFRef cfdata_from_skdata(sk_sp data) { - void const * const addr = data->data(); - size_t const size = data->size(); - - CFAllocatorContext ctx = { - 0, // CFIndex version - data.release(), // void* info - nullptr, // const void *(*retain)(const void *info); - nullptr, // void (*release)(const void *info); - nullptr, // CFStringRef (*copyDescription)(const void *info); - nullptr, // void * (*allocate)(CFIndex size, CFOptionFlags hint, void *info); - nullptr, // void*(*reallocate)(void* ptr,CFIndex newsize,CFOptionFlags hint,void* info); - [](void*,void* info) -> void { // void (*deallocate)(void *ptr, void *info); - SkASSERT(info); - ((SkData*)info)->unref(); - }, - nullptr, // CFIndex (*preferredSize)(CFIndex size, CFOptionFlags hint, void *info); - }; - SkUniqueCFRef alloc(CFAllocatorCreate(kCFAllocatorDefault, &ctx)); - return SkUniqueCFRef(CFDataCreateWithBytesNoCopy( - kCFAllocatorDefault, (const UInt8 *)addr, size, alloc.get())); -} - -static SkUniqueCFRef ctfont_from_skdata(sk_sp data, int ttcIndex) { - // TODO: Use CTFontManagerCreateFontDescriptorsFromData when available. - if (ttcIndex != 0) { - return nullptr; - } - - SkUniqueCFRef cfData(cfdata_from_skdata(std::move(data))); - - SkUniqueCFRef desc( - CTFontManagerCreateFontDescriptorFromData(cfData.get())); - if (!desc) { - return nullptr; - } - return SkUniqueCFRef(CTFontCreateWithFontDescriptor(desc.get(), 0, nullptr)); -} - -static bool find_desc_str(CTFontDescriptorRef desc, CFStringRef name, SkString* value) { - SkUniqueCFRef ref((CFStringRef)CTFontDescriptorCopyAttribute(desc, name)); - if (!ref) { - return false; - } - CFStringToSkString(ref.get(), value); - return true; -} - -static inline int sqr(int value) { - SkASSERT(SkAbs32(value) < 0x7FFF); // check for overflow - return value * value; -} - -// We normalize each axis (weight, width, italic) to be base-900 -static int compute_metric(const SkFontStyle& a, const SkFontStyle& b) { - return sqr(a.weight() - b.weight()) + - sqr((a.width() - b.width()) * 100) + - sqr((a.slant() != b.slant()) * 900); -} - -class SkFontStyleSet_Mac : public SkFontStyleSet { -public: - SkFontStyleSet_Mac(CTFontDescriptorRef desc) - : fArray(CTFontDescriptorCreateMatchingFontDescriptors(desc, nullptr)) - , fCount(0) - { - if (!fArray) { - fArray.reset(CFArrayCreate(nullptr, nullptr, 0, nullptr)); - } - fCount = SkToInt(CFArrayGetCount(fArray.get())); - } - - int count() override { - return fCount; - } - - void getStyle(int index, SkFontStyle* style, SkString* name) override { - SkASSERT((unsigned)index < (unsigned)fCount); - CTFontDescriptorRef desc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fArray.get(), index); - if (style) { - *style = fontstyle_from_descriptor(desc, false); - } - if (name) { - if (!find_desc_str(desc, kCTFontStyleNameAttribute, name)) { - name->reset(); - } - } - } - - SkTypeface* createTypeface(int index) override { - SkASSERT((unsigned)index < (unsigned)CFArrayGetCount(fArray.get())); - CTFontDescriptorRef desc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fArray.get(), index); - - return create_from_desc(desc).release(); - } - - SkTypeface* matchStyle(const SkFontStyle& pattern) override { - if (0 == fCount) { - return nullptr; - } - return create_from_desc(findMatchingDesc(pattern)).release(); - } - -private: - SkUniqueCFRef fArray; - int fCount; - - CTFontDescriptorRef findMatchingDesc(const SkFontStyle& pattern) const { - int bestMetric = SK_MaxS32; - CTFontDescriptorRef bestDesc = nullptr; - - for (int i = 0; i < fCount; ++i) { - CTFontDescriptorRef desc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fArray.get(), i); - int metric = compute_metric(pattern, fontstyle_from_descriptor(desc, false)); - if (0 == metric) { - return desc; - } - if (metric < bestMetric) { - bestMetric = metric; - bestDesc = desc; - } - } - SkASSERT(bestDesc); - return bestDesc; - } -}; - -} // namespace - -sk_sp SkTypeface_Mac::onMakeClone(const SkFontArguments& args) const { - CTFontVariation ctVariation = ctvariation_from_skfontarguments(fFontRef.get(), args); - - SkUniqueCFRef ctVariant; - if (ctVariation.dict) { - SkUniqueCFRef attributes( - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - CFDictionaryAddValue(attributes.get(), - kCTFontVariationAttribute, ctVariation.dict.get()); - SkUniqueCFRef varDesc( - CTFontDescriptorCreateWithAttributes(attributes.get())); - ctVariant.reset(CTFontCreateCopyWithAttributes(fFontRef.get(), 0, nullptr, varDesc.get())); - } else { - ctVariant.reset((CTFontRef)CFRetain(fFontRef.get())); - } - if (!ctVariant) { - return nullptr; - } - - return create_from_CTFontRef(std::move(ctVariant), ctVariation.opsz, - fStream ? fStream->duplicate() : nullptr); -} - -int SkTypeface_Mac::onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[], - int parameterCount) const -{ - SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(fFontRef.get())); - if (!ctAxes) { - return -1; - } - CFIndex axisCount = CFArrayGetCount(ctAxes.get()); - - if (!parameters || parameterCount < axisCount) { - return axisCount; - } - - // Added in 10.13 - CFStringRef* kCTFontVariationAxisHiddenKeyPtr = - static_cast(dlsym(RTLD_DEFAULT, "kCTFontVariationAxisHiddenKey")); - - for (int i = 0; i < axisCount; ++i) { - CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); - if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { - return -1; - } - CFDictionaryRef axisInfoDict = static_cast(axisInfo); - - CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); - if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { - return -1; - } - CFNumberRef tagNumber = static_cast(tag); - int64_t tagLong; - if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { - return -1; - } - - CFTypeRef min = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMinimumValueKey); - CFTypeRef max = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMaximumValueKey); - CFTypeRef def = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisDefaultValueKey); - if (!min || CFGetTypeID(min) != CFNumberGetTypeID() || - !max || CFGetTypeID(max) != CFNumberGetTypeID() || - !def || CFGetTypeID(def) != CFNumberGetTypeID()) - { - return -1; - } - CFNumberRef minNumber = static_cast(min); - CFNumberRef maxNumber = static_cast(max); - CFNumberRef defNumber = static_cast(def); - double minDouble; - double maxDouble; - double defDouble; - if (!CFNumberGetValue(minNumber, kCFNumberDoubleType, &minDouble) || - !CFNumberGetValue(maxNumber, kCFNumberDoubleType, &maxDouble) || - !CFNumberGetValue(defNumber, kCFNumberDoubleType, &defDouble)) - { - return -1; - } - - SkFontParameters::Variation::Axis& skAxis = parameters[i]; - skAxis.tag = tagLong; - skAxis.min = minDouble; - skAxis.max = maxDouble; - skAxis.def = defDouble; - skAxis.setHidden(false); - if (kCTFontVariationAxisHiddenKeyPtr) { - CFTypeRef hidden = CFDictionaryGetValue(axisInfoDict,*kCTFontVariationAxisHiddenKeyPtr); - if (hidden) { - if (CFGetTypeID(hidden) != CFBooleanGetTypeID()) { - return -1; - } - CFBooleanRef hiddenBoolean = static_cast(hidden); - skAxis.setHidden(CFBooleanGetValue(hiddenBoolean)); - } - } - } - return axisCount; -} - -class SkFontMgr_Mac : public SkFontMgr { - SkUniqueCFRef fNames; - int fCount; - - CFStringRef getFamilyNameAt(int index) const { - SkASSERT((unsigned)index < (unsigned)fCount); - return (CFStringRef)CFArrayGetValueAtIndex(fNames.get(), index); - } - - static SkFontStyleSet* CreateSet(CFStringRef cfFamilyName) { - SkUniqueCFRef cfAttr( - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - - CFDictionaryAddValue(cfAttr.get(), kCTFontFamilyNameAttribute, cfFamilyName); - - SkUniqueCFRef desc( - CTFontDescriptorCreateWithAttributes(cfAttr.get())); - return new SkFontStyleSet_Mac(desc.get()); - } - - /** CTFontManagerCopyAvailableFontFamilyNames() is not always available, so we - * provide a wrapper here that will return an empty array if need be. - */ - static SkUniqueCFRef CopyAvailableFontFamilyNames() { -#ifdef SK_BUILD_FOR_IOS - return SkUniqueCFRef(CFArrayCreate(nullptr, nullptr, 0, nullptr)); -#else - return SkUniqueCFRef(CTFontManagerCopyAvailableFontFamilyNames()); -#endif - } - -public: - SkFontMgr_Mac() - : fNames(CopyAvailableFontFamilyNames()) - , fCount(fNames ? SkToInt(CFArrayGetCount(fNames.get())) : 0) {} - -protected: - int onCountFamilies() const override { - return fCount; - } - - void onGetFamilyName(int index, SkString* familyName) const override { - if ((unsigned)index < (unsigned)fCount) { - CFStringToSkString(this->getFamilyNameAt(index), familyName); - } else { - familyName->reset(); - } - } - - SkFontStyleSet* onCreateStyleSet(int index) const override { - if ((unsigned)index >= (unsigned)fCount) { - return nullptr; - } - return CreateSet(this->getFamilyNameAt(index)); - } - - SkFontStyleSet* onMatchFamily(const char familyName[]) const override { - if (!familyName) { - return nullptr; - } - SkUniqueCFRef cfName = make_CFString(familyName); - return CreateSet(cfName.get()); - } - - SkTypeface* onMatchFamilyStyle(const char familyName[], - const SkFontStyle& style) const override { - SkUniqueCFRef desc = create_descriptor(familyName, style); - return create_from_desc(desc.get()).release(); - } - - SkTypeface* onMatchFamilyStyleCharacter(const char familyName[], - const SkFontStyle& style, - const char* bcp47[], int bcp47Count, - SkUnichar character) const override { - SkUniqueCFRef desc = create_descriptor(familyName, style); - SkUniqueCFRef familyFont(CTFontCreateWithFontDescriptor(desc.get(), 0, nullptr)); - - // kCFStringEncodingUTF32 is BE unless there is a BOM. - // Since there is no machine endian option, explicitly state machine endian. -#ifdef SK_CPU_LENDIAN - constexpr CFStringEncoding encoding = kCFStringEncodingUTF32LE; -#else - constexpr CFStringEncoding encoding = kCFStringEncodingUTF32BE; -#endif - SkUniqueCFRef string(CFStringCreateWithBytes( - kCFAllocatorDefault, reinterpret_cast(&character), sizeof(character), - encoding, false)); - // If 0xD800 <= codepoint <= 0xDFFF || 0x10FFFF < codepoint 'string' may be nullptr. - // No font should be covering such codepoints (even the magic fallback font). - if (!string) { - return nullptr; - } - CFRange range = CFRangeMake(0, CFStringGetLength(string.get())); // in UniChar units. - SkUniqueCFRef fallbackFont( - CTFontCreateForString(familyFont.get(), string.get(), range)); - return create_from_CTFontRef(std::move(fallbackFont), OpszVariation(), nullptr).release(); - } - - SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember, - const SkFontStyle&) const override { - return nullptr; - } - - sk_sp onMakeFromData(sk_sp data, int ttcIndex) const override { - if (ttcIndex != 0) { - return nullptr; - } - - SkUniqueCFRef ct = ctfont_from_skdata(data, ttcIndex); - if (!ct) { - return nullptr; - } - - return create_from_CTFontRef(std::move(ct), OpszVariation(), - SkMemoryStream::Make(std::move(data))); - } - - sk_sp onMakeFromStreamIndex(std::unique_ptr stream, - int ttcIndex) const override { - if (ttcIndex != 0) { - return nullptr; - } - - sk_sp data = skdata_from_skstreamasset(stream->duplicate()); - if (!data) { - return nullptr; - } - SkUniqueCFRef ct = ctfont_from_skdata(std::move(data), ttcIndex); - if (!ct) { - return nullptr; - } - - return create_from_CTFontRef(std::move(ct), OpszVariation(), std::move(stream)); - } - - sk_sp onMakeFromStreamArgs(std::unique_ptr stream, - const SkFontArguments& args) const override - { - // TODO: Use CTFontManagerCreateFontDescriptorsFromData when available. - int ttcIndex = args.getCollectionIndex(); - if (ttcIndex != 0) { - return nullptr; - } - - sk_sp data = skdata_from_skstreamasset(stream->duplicate()); - if (!data) { - return nullptr; - } - SkUniqueCFRef ct = ctfont_from_skdata(std::move(data), ttcIndex); - if (!ct) { - return nullptr; - } - - CTFontVariation ctVariation = ctvariation_from_skfontarguments(ct.get(), args); - - SkUniqueCFRef ctVariant; - if (ctVariation.dict) { - SkUniqueCFRef attributes( - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - CFDictionaryAddValue(attributes.get(), - kCTFontVariationAttribute, ctVariation.dict.get()); - SkUniqueCFRef varDesc( - CTFontDescriptorCreateWithAttributes(attributes.get())); - ctVariant.reset(CTFontCreateCopyWithAttributes(ct.get(), 0, nullptr, varDesc.get())); - } else { - ctVariant.reset(ct.release()); - } - if (!ctVariant) { - return nullptr; - } - - return create_from_CTFontRef(std::move(ctVariant), ctVariation.opsz, - std::move(stream)); - } - - sk_sp onMakeFromFontData(std::unique_ptr fontData) const override { - // TODO: Use CTFontManagerCreateFontDescriptorsFromData when available. - if (fontData->getIndex() != 0) { - return nullptr; - } - - sk_sp data = skdata_from_skstreamasset(fontData->getStream()->duplicate()); - if (!data) { - return nullptr; - } - SkUniqueCFRef ct = ctfont_from_skdata(std::move(data), fontData->getIndex()); - if (!ct) { - return nullptr; - } - - CTFontVariation ctVariation = ctvariation_from_skfontdata(ct.get(), fontData.get()); - - SkUniqueCFRef ctVariant; - if (ctVariation.dict) { - SkUniqueCFRef attributes( - CFDictionaryCreateMutable(kCFAllocatorDefault, 0, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks)); - CFDictionaryAddValue(attributes.get(), - kCTFontVariationAttribute, ctVariation.dict.get()); - SkUniqueCFRef varDesc( - CTFontDescriptorCreateWithAttributes(attributes.get())); - ctVariant.reset(CTFontCreateCopyWithAttributes(ct.get(), 0, nullptr, varDesc.get())); - } else { - ctVariant.reset(ct.release()); - } - if (!ctVariant) { - return nullptr; - } - - return create_from_CTFontRef(std::move(ctVariant), ctVariation.opsz, - fontData->detachStream()); - } - - sk_sp onMakeFromFile(const char path[], int ttcIndex) const override { - if (ttcIndex != 0) { - return nullptr; - } - - sk_sp data = SkData::MakeFromFileName(path); - if (!data) { - return nullptr; - } - - return this->onMakeFromData(std::move(data), ttcIndex); - } - - sk_sp onLegacyMakeTypeface(const char familyName[], SkFontStyle style) const override { - if (familyName) { - familyName = map_css_names(familyName); - } - - sk_sp face = create_from_name(familyName, style); - if (face) { - return face; - } - - static SkTypeface* gDefaultFace; - static SkOnce lookupDefault; - static const char FONT_DEFAULT_NAME[] = "Lucida Sans"; - lookupDefault([]{ - gDefaultFace = create_from_name(FONT_DEFAULT_NAME, SkFontStyle()).release(); - }); - return sk_ref_sp(gDefaultFace); - } -}; - -/////////////////////////////////////////////////////////////////////////////// - -sk_sp SkFontMgr::Factory() { return sk_make_sp(); } - -#endif//defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) diff --git a/src/ports/SkFontHost_win.cpp b/src/ports/SkFontHost_win.cpp index dbe2faf78a5e5..8f6b787ffd947 100644 --- a/src/ports/SkFontHost_win.cpp +++ b/src/ports/SkFontHost_win.cpp @@ -2294,6 +2294,11 @@ class SkFontMgrGDI : public SkFontMgr { return create_from_stream(std::move(stream)); } + sk_sp onMakeFromStreamArgs(std::unique_ptr stream, + const SkFontArguments& args) const override { + return this->makeFromStream(std::move(stream), args.getCollectionIndex()); + } + sk_sp onMakeFromData(sk_sp data, int ttcIndex) const override { // could be in base impl return this->makeFromStream(std::unique_ptr(new SkMemoryStream(std::move(data))), diff --git a/src/ports/SkFontMgr_custom_directory_factory.cpp b/src/ports/SkFontMgr_custom_directory_factory.cpp index 3bb52eb3393ec..f20b1b5bc4735 100644 --- a/src/ports/SkFontMgr_custom_directory_factory.cpp +++ b/src/ports/SkFontMgr_custom_directory_factory.cpp @@ -9,7 +9,11 @@ #include "include/ports/SkFontMgr_directory.h" #ifndef SK_FONT_FILE_PREFIX +# if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) +# define SK_FONT_FILE_PREFIX "/System/Library/Fonts/" +# else # define SK_FONT_FILE_PREFIX "/usr/share/fonts/" +# endif #endif sk_sp SkFontMgr::Factory() { diff --git a/src/ports/SkFontMgr_mac_ct.cpp b/src/ports/SkFontMgr_mac_ct.cpp new file mode 100644 index 0000000000000..c362b160e509e --- /dev/null +++ b/src/ports/SkFontMgr_mac_ct.cpp @@ -0,0 +1,669 @@ +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#include +#include +#include +#endif + +#include "include/core/SkData.h" +#include "include/core/SkFontArguments.h" +#include "include/core/SkFontMgr.h" +#include "include/core/SkFontStyle.h" +#include "include/core/SkStream.h" +#include "include/core/SkString.h" +#include "include/core/SkTypeface.h" +#include "include/ports/SkFontMgr_mac_ct.h" +#include "include/private/SkFixed.h" +#include "include/private/SkOnce.h" +#include "include/private/SkTemplates.h" +#include "include/private/SkTo.h" +#include "src/core/SkFontDescriptor.h" +#include "src/ports/SkTypeface_mac_ct.h" +#include "src/utils/SkUTF.h" + +#include +#include + +static SkUniqueCFRef make_CFString(const char s[]) { + return SkUniqueCFRef(CFStringCreateWithCString(nullptr, s, kCFStringEncodingUTF8)); +} + +/** Creates a typeface from a descriptor, searching the cache. */ +static sk_sp create_from_desc(CTFontDescriptorRef desc) { + SkUniqueCFRef ctFont(CTFontCreateWithFontDescriptor(desc, 0, nullptr)); + if (!ctFont) { + return nullptr; + } + + return SkTypeface_Mac::Make(std::move(ctFont), OpszVariation(), nullptr); +} + +static SkUniqueCFRef create_descriptor(const char familyName[], + const SkFontStyle& style) { + SkUniqueCFRef cfAttributes( + CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + + SkUniqueCFRef cfTraits( + CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + + if (!cfAttributes || !cfTraits) { + return nullptr; + } + + // TODO(crbug.com/1018581) Some CoreText versions have errant behavior when + // certain traits set. Temporary workaround to omit specifying trait for + // those versions. + // Long term solution will involve serializing typefaces instead of relying + // upon this to match between processes. + // + // Compare CoreText.h in an up to date SDK for where these values come from. + static const uint32_t kSkiaLocalCTVersionNumber10_14 = 0x000B0000; + static const uint32_t kSkiaLocalCTVersionNumber10_15 = 0x000C0000; + + // CTFontTraits (symbolic) + // macOS 14 and iOS 12 seem to behave badly when kCTFontSymbolicTrait is set. + // macOS 15 yields LastResort font instead of a good default font when + // kCTFontSymbolicTrait is set. + if (!(&CTGetCoreTextVersion && CTGetCoreTextVersion() >= kSkiaLocalCTVersionNumber10_14)) { + CTFontSymbolicTraits ctFontTraits = 0; + if (style.weight() >= SkFontStyle::kBold_Weight) { + ctFontTraits |= kCTFontBoldTrait; + } + if (style.slant() != SkFontStyle::kUpright_Slant) { + ctFontTraits |= kCTFontItalicTrait; + } + SkUniqueCFRef cfFontTraits( + CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &ctFontTraits)); + if (cfFontTraits) { + CFDictionaryAddValue(cfTraits.get(), kCTFontSymbolicTrait, cfFontTraits.get()); + } + } + + // CTFontTraits (weight) + CGFloat ctWeight = SkCTFontCTWeightForCSSWeight(style.weight()); + SkUniqueCFRef cfFontWeight( + CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &ctWeight)); + if (cfFontWeight) { + CFDictionaryAddValue(cfTraits.get(), kCTFontWeightTrait, cfFontWeight.get()); + } + // CTFontTraits (width) + CGFloat ctWidth = SkCTFontCTWidthForCSSWidth(style.width()); + SkUniqueCFRef cfFontWidth( + CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &ctWidth)); + if (cfFontWidth) { + CFDictionaryAddValue(cfTraits.get(), kCTFontWidthTrait, cfFontWidth.get()); + } + // CTFontTraits (slant) + // macOS 15 behaves badly when kCTFontSlantTrait is set. + if (!(&CTGetCoreTextVersion && CTGetCoreTextVersion() == kSkiaLocalCTVersionNumber10_15)) { + CGFloat ctSlant = style.slant() == SkFontStyle::kUpright_Slant ? 0 : 1; + SkUniqueCFRef cfFontSlant( + CFNumberCreate(kCFAllocatorDefault, kCFNumberCGFloatType, &ctSlant)); + if (cfFontSlant) { + CFDictionaryAddValue(cfTraits.get(), kCTFontSlantTrait, cfFontSlant.get()); + } + } + // CTFontTraits + CFDictionaryAddValue(cfAttributes.get(), kCTFontTraitsAttribute, cfTraits.get()); + + // CTFontFamilyName + if (familyName) { + SkUniqueCFRef cfFontName = make_CFString(familyName); + if (cfFontName) { + CFDictionaryAddValue(cfAttributes.get(), kCTFontFamilyNameAttribute, cfFontName.get()); + } + } + + return SkUniqueCFRef( + CTFontDescriptorCreateWithAttributes(cfAttributes.get())); +} + +// Same as the above function except style is included so we can +// compare whether the created font conforms to the style. If not, we need +// to recreate the font with symbolic traits. This is needed due to MacOS 10.11 +// font creation problem https://bugs.chromium.org/p/skia/issues/detail?id=8447. +static sk_sp create_from_desc_and_style(CTFontDescriptorRef desc, + const SkFontStyle& style) { + SkUniqueCFRef ctFont(CTFontCreateWithFontDescriptor(desc, 0, nullptr)); + if (!ctFont) { + return nullptr; + } + + const CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(ctFont.get()); + CTFontSymbolicTraits expected_traits = traits; + if (style.slant() != SkFontStyle::kUpright_Slant) { + expected_traits |= kCTFontItalicTrait; + } + if (style.weight() >= SkFontStyle::kBold_Weight) { + expected_traits |= kCTFontBoldTrait; + } + + if (expected_traits != traits) { + SkUniqueCFRef ctNewFont(CTFontCreateCopyWithSymbolicTraits( + ctFont.get(), 0, nullptr, expected_traits, expected_traits)); + if (ctNewFont) { + ctFont = std::move(ctNewFont); + } + } + + return SkTypeface_Mac::Make(std::move(ctFont), OpszVariation(), nullptr); +} + +/** Creates a typeface from a name, searching the cache. */ +static sk_sp create_from_name(const char familyName[], const SkFontStyle& style) { + SkUniqueCFRef desc = create_descriptor(familyName, style); + if (!desc) { + return nullptr; + } + return create_from_desc_and_style(desc.get(), style); +} + +static const char* map_css_names(const char* name) { + static const struct { + const char* fFrom; // name the caller specified + const char* fTo; // "canonical" name we map to + } gPairs[] = { + { "sans-serif", "Helvetica" }, + { "serif", "Times" }, + { "monospace", "Courier" } + }; + + for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) { + if (strcmp(name, gPairs[i].fFrom) == 0) { + return gPairs[i].fTo; + } + } + return name; // no change +} + +namespace { + +/** Creates a dictionary suitable for setting the axes on a CTFont. */ +static CTFontVariation ctvariation_from_skfontdata(CTFontRef ct, SkFontData* fontData) { + // In macOS 10.15 CTFontCreate* overrides any 'opsz' variation with the 'size'. + // Track the 'opsz' and return it, since it is an out of band axis. + OpszVariation opsz; + constexpr const SkFourByteTag opszTag = SkSetFourByteTag('o','p','s','z'); + + SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(ct)); + if (!ctAxes) { + return CTFontVariation(); + } + + CFIndex axisCount = CFArrayGetCount(ctAxes.get()); + if (0 == axisCount || axisCount != fontData->getAxisCount()) { + return CTFontVariation(); + } + + SkUniqueCFRef dict( + CFDictionaryCreateMutable(kCFAllocatorDefault, axisCount, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + + for (int i = 0; i < fontData->getAxisCount(); ++i) { + CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); + if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { + return CTFontVariation(); + } + CFDictionaryRef axisInfoDict = static_cast(axisInfo); + + CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, + kCTFontVariationAxisIdentifierKey); + if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { + return CTFontVariation(); + } + CFNumberRef tagNumber = static_cast(tag); + int64_t tagLong; + if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { + return CTFontVariation(); + } + + // The variation axes can be set to any value, but cg will effectively pin them. + // Pin them here to normalize. + CFTypeRef min = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMinimumValueKey); + CFTypeRef max = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMaximumValueKey); + if (!min || CFGetTypeID(min) != CFNumberGetTypeID() || + !max || CFGetTypeID(max) != CFNumberGetTypeID()) + { + return CTFontVariation(); + } + CFNumberRef minNumber = static_cast(min); + CFNumberRef maxNumber = static_cast(max); + double minDouble; + double maxDouble; + if (!CFNumberGetValue(minNumber, kCFNumberDoubleType, &minDouble) || + !CFNumberGetValue(maxNumber, kCFNumberDoubleType, &maxDouble)) + { + return CTFontVariation(); + } + double value = SkTPin(SkFixedToDouble(fontData->getAxis()[i]), minDouble, maxDouble); + + if (tagLong == opszTag) { + opsz.isSet = true; + opsz.value = value; + } + + SkUniqueCFRef valueNumber( + CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value)); + CFDictionaryAddValue(dict.get(), tagNumber, valueNumber.get()); + } + return { SkUniqueCFRef(std::move(dict)), opsz }; +} + +static sk_sp skdata_from_skstreamasset(std::unique_ptr stream) { + size_t size = stream->getLength(); + if (const void* base = stream->getMemoryBase()) { + return SkData::MakeWithProc(base, size, + [](const void*, void* ctx) -> void { + delete (SkStreamAsset*)ctx; + }, stream.release()); + } + return SkData::MakeFromStream(stream.get(), size); +} + +static SkUniqueCFRef cfdata_from_skdata(sk_sp data) { + void const * const addr = data->data(); + size_t const size = data->size(); + + CFAllocatorContext ctx = { + 0, // CFIndex version + data.release(), // void* info + nullptr, // const void *(*retain)(const void *info); + nullptr, // void (*release)(const void *info); + nullptr, // CFStringRef (*copyDescription)(const void *info); + nullptr, // void * (*allocate)(CFIndex size, CFOptionFlags hint, void *info); + nullptr, // void*(*reallocate)(void* ptr,CFIndex newsize,CFOptionFlags hint,void* info); + [](void*,void* info) -> void { // void (*deallocate)(void *ptr, void *info); + SkASSERT(info); + ((SkData*)info)->unref(); + }, + nullptr, // CFIndex (*preferredSize)(CFIndex size, CFOptionFlags hint, void *info); + }; + SkUniqueCFRef alloc(CFAllocatorCreate(kCFAllocatorDefault, &ctx)); + return SkUniqueCFRef(CFDataCreateWithBytesNoCopy( + kCFAllocatorDefault, (const UInt8 *)addr, size, alloc.get())); +} + +static SkUniqueCFRef ctfont_from_skdata(sk_sp data, int ttcIndex) { + // TODO: Use CTFontManagerCreateFontDescriptorsFromData when available. + if (ttcIndex != 0) { + return nullptr; + } + + SkUniqueCFRef cfData(cfdata_from_skdata(std::move(data))); + + SkUniqueCFRef desc( + CTFontManagerCreateFontDescriptorFromData(cfData.get())); + if (!desc) { + return nullptr; + } + return SkUniqueCFRef(CTFontCreateWithFontDescriptor(desc.get(), 0, nullptr)); +} + +static bool find_desc_str(CTFontDescriptorRef desc, CFStringRef name, SkString* value) { + SkUniqueCFRef ref((CFStringRef)CTFontDescriptorCopyAttribute(desc, name)); + if (!ref) { + return false; + } + SkStringFromCFString(ref.get(), value); + return true; +} + +static inline int sqr(int value) { + SkASSERT(SkAbs32(value) < 0x7FFF); // check for overflow + return value * value; +} + +// We normalize each axis (weight, width, italic) to be base-900 +static int compute_metric(const SkFontStyle& a, const SkFontStyle& b) { + return sqr(a.weight() - b.weight()) + + sqr((a.width() - b.width()) * 100) + + sqr((a.slant() != b.slant()) * 900); +} + +class SkFontStyleSet_Mac : public SkFontStyleSet { +public: + SkFontStyleSet_Mac(CTFontDescriptorRef desc) + : fArray(CTFontDescriptorCreateMatchingFontDescriptors(desc, nullptr)) + , fCount(0) + { + if (!fArray) { + fArray.reset(CFArrayCreate(nullptr, nullptr, 0, nullptr)); + } + fCount = SkToInt(CFArrayGetCount(fArray.get())); + } + + int count() override { + return fCount; + } + + void getStyle(int index, SkFontStyle* style, SkString* name) override { + SkASSERT((unsigned)index < (unsigned)fCount); + CTFontDescriptorRef desc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fArray.get(), index); + if (style) { + *style = SkCTFontDescriptorGetSkFontStyle(desc, false); + } + if (name) { + if (!find_desc_str(desc, kCTFontStyleNameAttribute, name)) { + name->reset(); + } + } + } + + SkTypeface* createTypeface(int index) override { + SkASSERT((unsigned)index < (unsigned)CFArrayGetCount(fArray.get())); + CTFontDescriptorRef desc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fArray.get(), index); + + return create_from_desc(desc).release(); + } + + SkTypeface* matchStyle(const SkFontStyle& pattern) override { + if (0 == fCount) { + return nullptr; + } + return create_from_desc(findMatchingDesc(pattern)).release(); + } + +private: + SkUniqueCFRef fArray; + int fCount; + + CTFontDescriptorRef findMatchingDesc(const SkFontStyle& pattern) const { + int bestMetric = SK_MaxS32; + CTFontDescriptorRef bestDesc = nullptr; + + for (int i = 0; i < fCount; ++i) { + CTFontDescriptorRef desc = (CTFontDescriptorRef)CFArrayGetValueAtIndex(fArray.get(), i); + int metric = compute_metric(pattern, SkCTFontDescriptorGetSkFontStyle(desc, false)); + if (0 == metric) { + return desc; + } + if (metric < bestMetric) { + bestMetric = metric; + bestDesc = desc; + } + } + SkASSERT(bestDesc); + return bestDesc; + } +}; + +} // namespace + +class SkFontMgr_Mac : public SkFontMgr { + SkUniqueCFRef fNames; + int fCount; + + CFStringRef getFamilyNameAt(int index) const { + SkASSERT((unsigned)index < (unsigned)fCount); + return (CFStringRef)CFArrayGetValueAtIndex(fNames.get(), index); + } + + static SkFontStyleSet* CreateSet(CFStringRef cfFamilyName) { + SkUniqueCFRef cfAttr( + CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + + CFDictionaryAddValue(cfAttr.get(), kCTFontFamilyNameAttribute, cfFamilyName); + + SkUniqueCFRef desc( + CTFontDescriptorCreateWithAttributes(cfAttr.get())); + return new SkFontStyleSet_Mac(desc.get()); + } + + /** CTFontManagerCopyAvailableFontFamilyNames() is not always available, so we + * provide a wrapper here that will return an empty array if need be. + */ + static SkUniqueCFRef CopyAvailableFontFamilyNames() { +#ifdef SK_BUILD_FOR_IOS + return SkUniqueCFRef(CFArrayCreate(nullptr, nullptr, 0, nullptr)); +#else + return SkUniqueCFRef(CTFontManagerCopyAvailableFontFamilyNames()); +#endif + } + +public: + SkUniqueCFRef fFontCollection; + SkFontMgr_Mac(CTFontCollectionRef fontCollection) + : fNames(CopyAvailableFontFamilyNames()) + , fCount(fNames ? SkToInt(CFArrayGetCount(fNames.get())) : 0) + , fFontCollection(fontCollection ? (CTFontCollectionRef)CFRetain(fontCollection) + : CTFontCollectionCreateFromAvailableFonts(nullptr)) + {} + +protected: + int onCountFamilies() const override { + return fCount; + } + + void onGetFamilyName(int index, SkString* familyName) const override { + if ((unsigned)index < (unsigned)fCount) { + SkStringFromCFString(this->getFamilyNameAt(index), familyName); + } else { + familyName->reset(); + } + } + + SkFontStyleSet* onCreateStyleSet(int index) const override { + if ((unsigned)index >= (unsigned)fCount) { + return nullptr; + } + return CreateSet(this->getFamilyNameAt(index)); + } + + SkFontStyleSet* onMatchFamily(const char familyName[]) const override { + if (!familyName) { + return nullptr; + } + SkUniqueCFRef cfName = make_CFString(familyName); + return CreateSet(cfName.get()); + } + + SkTypeface* onMatchFamilyStyle(const char familyName[], + const SkFontStyle& style) const override { + SkUniqueCFRef desc = create_descriptor(familyName, style); + return create_from_desc(desc.get()).release(); + } + + SkTypeface* onMatchFamilyStyleCharacter(const char familyName[], + const SkFontStyle& style, + const char* bcp47[], int bcp47Count, + SkUnichar character) const override { + SkUniqueCFRef desc = create_descriptor(familyName, style); + SkUniqueCFRef familyFont(CTFontCreateWithFontDescriptor(desc.get(), 0, nullptr)); + + // kCFStringEncodingUTF32 is BE unless there is a BOM. + // Since there is no machine endian option, explicitly state machine endian. +#ifdef SK_CPU_LENDIAN + constexpr CFStringEncoding encoding = kCFStringEncodingUTF32LE; +#else + constexpr CFStringEncoding encoding = kCFStringEncodingUTF32BE; +#endif + SkUniqueCFRef string(CFStringCreateWithBytes( + kCFAllocatorDefault, reinterpret_cast(&character), sizeof(character), + encoding, false)); + // If 0xD800 <= codepoint <= 0xDFFF || 0x10FFFF < codepoint 'string' may be nullptr. + // No font should be covering such codepoints (even the magic fallback font). + if (!string) { + return nullptr; + } + CFRange range = CFRangeMake(0, CFStringGetLength(string.get())); // in UniChar units. + SkUniqueCFRef fallbackFont( + CTFontCreateForString(familyFont.get(), string.get(), range)); + return SkTypeface_Mac::Make(std::move(fallbackFont), OpszVariation(), nullptr).release(); + } + + SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember, + const SkFontStyle&) const override { + return nullptr; + } + + sk_sp onMakeFromData(sk_sp data, int ttcIndex) const override { + if (ttcIndex != 0) { + return nullptr; + } + + SkUniqueCFRef ct = ctfont_from_skdata(data, ttcIndex); + if (!ct) { + return nullptr; + } + + return SkTypeface_Mac::Make(std::move(ct), OpszVariation(), + SkMemoryStream::Make(std::move(data))); + } + + sk_sp onMakeFromStreamIndex(std::unique_ptr stream, + int ttcIndex) const override { + if (ttcIndex != 0) { + return nullptr; + } + + sk_sp data = skdata_from_skstreamasset(stream->duplicate()); + if (!data) { + return nullptr; + } + SkUniqueCFRef ct = ctfont_from_skdata(std::move(data), ttcIndex); + if (!ct) { + return nullptr; + } + + return SkTypeface_Mac::Make(std::move(ct), OpszVariation(), std::move(stream)); + } + + sk_sp onMakeFromStreamArgs(std::unique_ptr stream, + const SkFontArguments& args) const override + { + // TODO: Use CTFontManagerCreateFontDescriptorsFromData when available. + int ttcIndex = args.getCollectionIndex(); + if (ttcIndex != 0) { + return nullptr; + } + + sk_sp data = skdata_from_skstreamasset(stream->duplicate()); + if (!data) { + return nullptr; + } + SkUniqueCFRef ct = ctfont_from_skdata(std::move(data), ttcIndex); + if (!ct) { + return nullptr; + } + + CTFontVariation ctVariation = SkCTVariationFromSkFontArguments(ct.get(), args); + + SkUniqueCFRef ctVariant; + if (ctVariation.dict) { + SkUniqueCFRef attributes( + CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + CFDictionaryAddValue(attributes.get(), + kCTFontVariationAttribute, ctVariation.dict.get()); + SkUniqueCFRef varDesc( + CTFontDescriptorCreateWithAttributes(attributes.get())); + ctVariant.reset(CTFontCreateCopyWithAttributes(ct.get(), 0, nullptr, varDesc.get())); + } else { + ctVariant.reset(ct.release()); + } + if (!ctVariant) { + return nullptr; + } + + return SkTypeface_Mac::Make(std::move(ctVariant), ctVariation.opsz, std::move(stream)); + } + + sk_sp onMakeFromFontData(std::unique_ptr fontData) const override { + // TODO: Use CTFontManagerCreateFontDescriptorsFromData when available. + if (fontData->getIndex() != 0) { + return nullptr; + } + + sk_sp data = skdata_from_skstreamasset(fontData->getStream()->duplicate()); + if (!data) { + return nullptr; + } + SkUniqueCFRef ct = ctfont_from_skdata(std::move(data), fontData->getIndex()); + if (!ct) { + return nullptr; + } + + CTFontVariation ctVariation = ctvariation_from_skfontdata(ct.get(), fontData.get()); + + SkUniqueCFRef ctVariant; + if (ctVariation.dict) { + SkUniqueCFRef attributes( + CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + CFDictionaryAddValue(attributes.get(), + kCTFontVariationAttribute, ctVariation.dict.get()); + SkUniqueCFRef varDesc( + CTFontDescriptorCreateWithAttributes(attributes.get())); + ctVariant.reset(CTFontCreateCopyWithAttributes(ct.get(), 0, nullptr, varDesc.get())); + } else { + ctVariant.reset(ct.release()); + } + if (!ctVariant) { + return nullptr; + } + + return SkTypeface_Mac::Make(std::move(ctVariant), ctVariation.opsz, + fontData->detachStream()); + } + + sk_sp onMakeFromFile(const char path[], int ttcIndex) const override { + if (ttcIndex != 0) { + return nullptr; + } + + sk_sp data = SkData::MakeFromFileName(path); + if (!data) { + return nullptr; + } + + return this->onMakeFromData(std::move(data), ttcIndex); + } + + sk_sp onLegacyMakeTypeface(const char familyName[], SkFontStyle style) const override { + if (familyName) { + familyName = map_css_names(familyName); + } + + sk_sp face = create_from_name(familyName, style); + if (face) { + return face; + } + + static SkTypeface* gDefaultFace; + static SkOnce lookupDefault; + static const char FONT_DEFAULT_NAME[] = "Lucida Sans"; + lookupDefault([]{ + gDefaultFace = create_from_name(FONT_DEFAULT_NAME, SkFontStyle()).release(); + }); + return sk_ref_sp(gDefaultFace); + } +}; + +sk_sp SkFontMgr_New_CoreText(CTFontCollectionRef fontCollection) { + return sk_make_sp(fontCollection); +} + +#endif//defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) diff --git a/src/ports/SkFontMgr_mac_ct_factory.cpp b/src/ports/SkFontMgr_mac_ct_factory.cpp new file mode 100644 index 0000000000000..ef834e4af28f5 --- /dev/null +++ b/src/ports/SkFontMgr_mac_ct_factory.cpp @@ -0,0 +1,18 @@ +/* + * Copyright 2017 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#include "include/core/SkFontMgr.h" +#include "include/ports/SkFontMgr_mac_ct.h" + +sk_sp SkFontMgr::Factory() { + return SkFontMgr_New_CoreText(nullptr); +} + +#endif//defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) diff --git a/src/ports/SkGlobalInitialization_default.cpp b/src/ports/SkGlobalInitialization_default.cpp index 559ff0a814cc8..167d94cca1e3f 100644 --- a/src/ports/SkGlobalInitialization_default.cpp +++ b/src/ports/SkGlobalInitialization_default.cpp @@ -73,8 +73,8 @@ // Color filters. SkColorFilter_Matrix::RegisterFlattenables(); - SK_REGISTER_FLATTENABLE(SkLumaColorFilter); - SkColorFilter::RegisterFlattenables(); + SkLumaColorFilter::RegisterFlattenable(); + SkColorFilterBase::RegisterFlattenables(); SkHighContrastFilter::RegisterFlattenables(); SkTableColorFilter::RegisterFlattenables(); diff --git a/src/ports/SkScalerContext_mac_ct.cpp b/src/ports/SkScalerContext_mac_ct.cpp new file mode 100644 index 0000000000000..f2f2298fb4d0d --- /dev/null +++ b/src/ports/SkScalerContext_mac_ct.cpp @@ -0,0 +1,721 @@ +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#include +#include +#include +#endif + +#include "include/core/SkColor.h" +#include "include/core/SkColorPriv.h" +#include "include/core/SkFontMetrics.h" +#include "include/core/SkFontTypes.h" +#include "include/core/SkMatrix.h" +#include "include/core/SkPath.h" +#include "include/core/SkPoint.h" +#include "include/core/SkRect.h" +#include "include/core/SkScalar.h" +#include "include/core/SkTypeface.h" +#include "include/private/SkColorData.h" +#include "include/private/SkFixed.h" +#include "include/private/SkTemplates.h" +#include "include/private/SkTo.h" +#include "src/core/SkAutoMalloc.h" +#include "src/core/SkEndian.h" +#include "src/core/SkGlyph.h" +#include "src/core/SkMask.h" +#include "src/core/SkMaskGamma.h" +#include "src/core/SkMathPriv.h" +#include "src/core/SkUtils.h" +#include "src/ports/SkScalerContext_mac_ct.h" +#include "src/ports/SkTypeface_mac_ct.h" +#include "src/sfnt/SkOTTableTypes.h" +#include "src/sfnt/SkOTTable_OS_2.h" +#include "src/utils/mac/SkCGBase.h" +#include "src/utils/mac/SkCGGeometry.h" +#include "src/utils/mac/SkCTFontSmoothBehavior.h" +#include "src/utils/mac/SkUniqueCFRef.h" + +#include + +class SkDescriptor; + + +// Set to make glyph bounding boxes visible. +#define SK_SHOW_TEXT_BLIT_COVERAGE 0 + +static void sk_memset_rect32(uint32_t* ptr, uint32_t value, + int width, int height, size_t rowBytes) { + SkASSERT(width); + SkASSERT(width * sizeof(uint32_t) <= rowBytes); + + if (width >= 32) { + while (height) { + sk_memset32(ptr, value, width); + ptr = (uint32_t*)((char*)ptr + rowBytes); + height -= 1; + } + return; + } + + rowBytes -= width * sizeof(uint32_t); + + if (width >= 8) { + while (height) { + int w = width; + do { + *ptr++ = value; *ptr++ = value; + *ptr++ = value; *ptr++ = value; + *ptr++ = value; *ptr++ = value; + *ptr++ = value; *ptr++ = value; + w -= 8; + } while (w >= 8); + while (--w >= 0) { + *ptr++ = value; + } + ptr = (uint32_t*)((char*)ptr + rowBytes); + height -= 1; + } + } else { + while (height) { + int w = width; + do { + *ptr++ = value; + } while (--w > 0); + ptr = (uint32_t*)((char*)ptr + rowBytes); + height -= 1; + } + } +} + +static unsigned CGRGBPixel_getAlpha(CGRGBPixel pixel) { + return pixel & 0xFF; +} + +static CGAffineTransform MatrixToCGAffineTransform(const SkMatrix& matrix) { + return CGAffineTransformMake( SkScalarToCGFloat(matrix[SkMatrix::kMScaleX]), + -SkScalarToCGFloat(matrix[SkMatrix::kMSkewY] ), + -SkScalarToCGFloat(matrix[SkMatrix::kMSkewX] ), + SkScalarToCGFloat(matrix[SkMatrix::kMScaleY]), + SkScalarToCGFloat(matrix[SkMatrix::kMTransX]), + SkScalarToCGFloat(matrix[SkMatrix::kMTransY])); +} + +SkScalerContext_Mac::SkScalerContext_Mac(sk_sp typeface, + const SkScalerContextEffects& effects, + const SkDescriptor* desc) + : INHERITED(std::move(typeface), effects, desc) + , fDoSubPosition(SkToBool(fRec.fFlags & kSubpixelPositioning_Flag)) + +{ + CTFontRef ctFont = (CTFontRef)this->getTypeface()->internal_private_getCTFontRef(); + CFIndex numGlyphs = CTFontGetGlyphCount(ctFont); + SkASSERT(numGlyphs >= 1 && numGlyphs <= 0xFFFF); + fGlyphCount = SkToU16(numGlyphs); + + // CT on (at least) 10.9 will size color glyphs down from the requested size, but not up. + // As a result, it is necessary to know the actual device size and request that. + SkVector scale; + SkMatrix skTransform; + bool invertible = fRec.computeMatrices(SkScalerContextRec::kVertical_PreMatrixScale, + &scale, &skTransform, nullptr, nullptr, nullptr); + fTransform = MatrixToCGAffineTransform(skTransform); + // CGAffineTransformInvert documents that if the transform is non-invertible it will return the + // passed transform unchanged. It does so, but then also prints a message to stdout. Avoid this. + if (invertible) { + fInvTransform = CGAffineTransformInvert(fTransform); + } else { + fInvTransform = fTransform; + } + + // The transform contains everything except the requested text size. + // Some properties, like 'trak', are based on the optical text size. + CGFloat textSize = SkScalarToCGFloat(scale.y()); + fCTFont = SkCTFontCreateExactCopy(ctFont, textSize, + ((SkTypeface_Mac*)this->getTypeface())->fOpszVariation); + fCGFont.reset(CTFontCopyGraphicsFont(fCTFont.get(), nullptr)); +} + +static int RoundSize(int dimension) { + return SkNextPow2(dimension); +} + +CGRGBPixel* SkScalerContext_Mac::Offscreen::getCG(const SkScalerContext_Mac& context, + const SkGlyph& glyph, CGGlyph glyphID, + size_t* rowBytesPtr, + bool generateA8FromLCD) { + if (!fRGBSpace) { + //It doesn't appear to matter what color space is specified. + //Regular blends and antialiased text are always (s*a + d*(1-a)) + //and subpixel antialiased text is always g=2.0. + fRGBSpace.reset(CGColorSpaceCreateDeviceRGB()); + } + + // default to kBW_Format + bool doAA = false; + bool doLCD = false; + + if (SkMask::kBW_Format != glyph.maskFormat()) { + doLCD = true; + doAA = true; + } + + // FIXME: lcd smoothed un-hinted rasterization unsupported. + if (!generateA8FromLCD && SkMask::kA8_Format == glyph.maskFormat()) { + doLCD = false; + doAA = true; + } + + // If this font might have color glyphs, disable LCD as there's no way to support it. + // CoreText doesn't tell us which format it ended up using, so we can't detect it. + // A8 will end up black on transparent, but TODO: we can detect gray and set to A8. + if (SkMask::kARGB32_Format == glyph.maskFormat()) { + doLCD = false; + } + + size_t rowBytes = fSize.fWidth * sizeof(CGRGBPixel); + if (!fCG || fSize.fWidth < glyph.width() || fSize.fHeight < glyph.height()) { + if (fSize.fWidth < glyph.width()) { + fSize.fWidth = RoundSize(glyph.width()); + } + if (fSize.fHeight < glyph.height()) { + fSize.fHeight = RoundSize(glyph.height()); + } + + rowBytes = fSize.fWidth * sizeof(CGRGBPixel); + void* image = fImageStorage.reset(rowBytes * fSize.fHeight); + const CGImageAlphaInfo alpha = (glyph.isColor()) + ? kCGImageAlphaPremultipliedFirst + : kCGImageAlphaNoneSkipFirst; + const CGBitmapInfo bitmapInfo = kCGBitmapByteOrder32Host | (CGBitmapInfo)alpha; + fCG.reset(CGBitmapContextCreate(image, fSize.fWidth, fSize.fHeight, 8, + rowBytes, fRGBSpace.get(), bitmapInfo)); + + // Skia handles quantization and subpixel positioning, + // so disable quantization and enable subpixel positioning in CG. + CGContextSetAllowsFontSubpixelQuantization(fCG.get(), false); + CGContextSetShouldSubpixelQuantizeFonts(fCG.get(), false); + + // Because CG always draws from the horizontal baseline, + // if there is a non-integral translation from the horizontal origin to the vertical origin, + // then CG cannot draw the glyph in the correct location without subpixel positioning. + CGContextSetAllowsFontSubpixelPositioning(fCG.get(), true); + CGContextSetShouldSubpixelPositionFonts(fCG.get(), true); + + CGContextSetTextDrawingMode(fCG.get(), kCGTextFill); + + // Draw black on white to create mask. (Special path exists to speed this up in CG.) + CGContextSetGrayFillColor(fCG.get(), 0.0f, 1.0f); + + // force our checks below to happen + fDoAA = !doAA; + fDoLCD = !doLCD; + + CGContextSetTextMatrix(fCG.get(), context.fTransform); + } + + if (fDoAA != doAA) { + CGContextSetShouldAntialias(fCG.get(), doAA); + fDoAA = doAA; + } + if (fDoLCD != doLCD) { + CGContextSetShouldSmoothFonts(fCG.get(), doLCD); + fDoLCD = doLCD; + } + + CGRGBPixel* image = (CGRGBPixel*)fImageStorage.get(); + // skip rows based on the glyph's height + image += (fSize.fHeight - glyph.height()) * fSize.fWidth; + + // Erase to white (or transparent black if it's a color glyph, to not composite against white). + uint32_t bgColor = (!glyph.isColor()) ? 0xFFFFFFFF : 0x00000000; + sk_memset_rect32(image, bgColor, glyph.width(), glyph.height(), rowBytes); + + float subX = 0; + float subY = 0; + if (context.fDoSubPosition) { + subX = SkFixedToFloat(glyph.getSubXFixed()); + subY = SkFixedToFloat(glyph.getSubYFixed()); + } + + CGPoint point = CGPointMake(-glyph.left() + subX, glyph.top() + glyph.height() - subY); + // Prior to 10.10, CTFontDrawGlyphs acted like CGContextShowGlyphsAtPositions and took + // 'positions' which are in text space. The glyph location (in device space) must be + // mapped into text space, so that CG can convert it back into device space. + // In 10.10.1, this is handled directly in CTFontDrawGlyphs. + // + // However, in 10.10.2 color glyphs no longer rotate based on the font transform. + // So always make the font transform identity and place the transform on the context. + point = CGPointApplyAffineTransform(point, context.fInvTransform); + + CTFontDrawGlyphs(context.fCTFont.get(), &glyphID, &point, 1, fCG.get()); + + SkASSERT(rowBytesPtr); + *rowBytesPtr = rowBytes; + return image; +} + +unsigned SkScalerContext_Mac::generateGlyphCount(void) { + return fGlyphCount; +} + +bool SkScalerContext_Mac::generateAdvance(SkGlyph* glyph) { + return false; +} + +void SkScalerContext_Mac::generateMetrics(SkGlyph* glyph) { + glyph->fMaskFormat = fRec.fMaskFormat; + + const CGGlyph cgGlyph = (CGGlyph) glyph->getGlyphID(); + glyph->zeroMetrics(); + + // The following block produces cgAdvance in CG units (pixels, y up). + CGSize cgAdvance; + CTFontGetAdvancesForGlyphs(fCTFont.get(), kCTFontOrientationHorizontal, + &cgGlyph, &cgAdvance, 1); + cgAdvance = CGSizeApplyAffineTransform(cgAdvance, fTransform); + glyph->fAdvanceX = SkFloatFromCGFloat(cgAdvance.width); + glyph->fAdvanceY = -SkFloatFromCGFloat(cgAdvance.height); + + // The following produces skBounds in SkGlyph units (pixels, y down), + // or returns early if skBounds would be empty. + SkRect skBounds; + + // Glyphs are always drawn from the horizontal origin. The caller must manually use the result + // of CTFontGetVerticalTranslationsForGlyphs to calculate where to draw the glyph for vertical + // glyphs. As a result, always get the horizontal bounds of a glyph and translate it if the + // glyph is vertical. This avoids any diagreement between the various means of retrieving + // vertical metrics. + { + // CTFontGetBoundingRectsForGlyphs produces cgBounds in CG units (pixels, y up). + CGRect cgBounds; + CTFontGetBoundingRectsForGlyphs(fCTFont.get(), kCTFontOrientationHorizontal, + &cgGlyph, &cgBounds, 1); + cgBounds = CGRectApplyAffineTransform(cgBounds, fTransform); + + // BUG? + // 0x200B (zero-advance space) seems to return a huge (garbage) bounds, when + // it should be empty. So, if we see a zero-advance, we check if it has an + // empty path or not, and if so, we jam the bounds to 0. Hopefully a zero-advance + // is rare, so we won't incur a big performance cost for this extra check. + if (0 == cgAdvance.width && 0 == cgAdvance.height) { + SkUniqueCFRef path(CTFontCreatePathForGlyph(fCTFont.get(), cgGlyph,nullptr)); + if (!path || CGPathIsEmpty(path.get())) { + return; + } + } + + if (SkCGRectIsEmpty(cgBounds)) { + return; + } + + // Convert cgBounds to SkGlyph units (pixels, y down). + skBounds = SkRect::MakeXYWH(cgBounds.origin.x, -cgBounds.origin.y - cgBounds.size.height, + cgBounds.size.width, cgBounds.size.height); + } + + // Currently the bounds are based on being rendered at (0,0). + // The top left must not move, since that is the base from which subpixel positioning is offset. + if (fDoSubPosition) { + skBounds.fRight += SkFixedToFloat(glyph->getSubXFixed()); + skBounds.fBottom += SkFixedToFloat(glyph->getSubYFixed()); + } + + // We're trying to pack left and top into int16_t, + // and width and height into uint16_t, after outsetting by 1. + if (!SkRect::MakeXYWH(-32767, -32767, 65535, 65535).contains(skBounds)) { + return; + } + + SkIRect skIBounds; + skBounds.roundOut(&skIBounds); + // Expand the bounds by 1 pixel, to give CG room for anti-aliasing. + // Note that this outset is to allow room for LCD smoothed glyphs. However, the correct outset + // is not currently known, as CG dilates the outlines by some percentage. + // Note that if this context is A8 and not back-forming from LCD, there is no need to outset. + skIBounds.outset(1, 1); + glyph->fLeft = SkToS16(skIBounds.fLeft); + glyph->fTop = SkToS16(skIBounds.fTop); + glyph->fWidth = SkToU16(skIBounds.width()); + glyph->fHeight = SkToU16(skIBounds.height()); +} + +static constexpr uint8_t sk_pow2_table(size_t i) { + return SkToU8(((i * i + 128) / 255)); +} + +/** + * This will invert the gamma applied by CoreGraphics, so we can get linear + * values. + * + * CoreGraphics obscurely defaults to 2.0 as the subpixel coverage gamma value. + * The color space used does not appear to affect this choice. + */ +static constexpr auto gLinearCoverageFromCGLCDValue = SkMakeArray<256>(sk_pow2_table); + +static void cgpixels_to_bits(uint8_t dst[], const CGRGBPixel src[], int count) { + while (count > 0) { + uint8_t mask = 0; + for (int i = 7; i >= 0; --i) { + mask |= ((CGRGBPixel_getAlpha(*src++) >> 7) ^ 0x1) << i; + if (0 == --count) { + break; + } + } + *dst++ = mask; + } +} + +template +static inline uint8_t rgb_to_a8(CGRGBPixel rgb, const uint8_t* table8) { + U8CPU r = 0xFF - ((rgb >> 16) & 0xFF); + U8CPU g = 0xFF - ((rgb >> 8) & 0xFF); + U8CPU b = 0xFF - ((rgb >> 0) & 0xFF); + U8CPU lum = sk_apply_lut_if(SkComputeLuminance(r, g, b), table8); +#if SK_SHOW_TEXT_BLIT_COVERAGE + lum = std::max(lum, (U8CPU)0x30); +#endif + return lum; +} + +template +static void RGBToA8(const CGRGBPixel* SK_RESTRICT cgPixels, size_t cgRowBytes, + const SkGlyph& glyph, void* glyphImage, const uint8_t* table8) { + const int width = glyph.width(); + const int height = glyph.height(); + size_t dstRB = glyph.rowBytes(); + uint8_t* SK_RESTRICT dst = (uint8_t*)glyphImage; + + for (int y = 0; y < height; y++) { + for (int i = 0; i < width; ++i) { + dst[i] = rgb_to_a8(cgPixels[i], table8); + } + cgPixels = SkTAddOffset(cgPixels, cgRowBytes); + dst = SkTAddOffset(dst, dstRB); + } +} + +template +static uint16_t RGBToLcd16(CGRGBPixel rgb, + const uint8_t* tableR, const uint8_t* tableG, const uint8_t* tableB) { + U8CPU r = sk_apply_lut_if(0xFF - ((rgb >> 16) & 0xFF), tableR); + U8CPU g = sk_apply_lut_if(0xFF - ((rgb >> 8) & 0xFF), tableG); + U8CPU b = sk_apply_lut_if(0xFF - ((rgb >> 0) & 0xFF), tableB); +#if SK_SHOW_TEXT_BLIT_COVERAGE + r = std::max(r, (U8CPU)0x30); + g = std::max(g, (U8CPU)0x30); + b = std::max(b, (U8CPU)0x30); +#endif + return SkPack888ToRGB16(r, g, b); +} + +template +static void RGBToLcd16(const CGRGBPixel* SK_RESTRICT cgPixels, size_t cgRowBytes, + const SkGlyph& glyph, void* glyphImage, + const uint8_t* tableR, const uint8_t* tableG, const uint8_t* tableB) { + const int width = glyph.width(); + const int height = glyph.height(); + size_t dstRB = glyph.rowBytes(); + uint16_t* SK_RESTRICT dst = (uint16_t*)glyphImage; + + for (int y = 0; y < height; y++) { + for (int i = 0; i < width; i++) { + dst[i] = RGBToLcd16(cgPixels[i], tableR, tableG, tableB); + } + cgPixels = SkTAddOffset(cgPixels, cgRowBytes); + dst = SkTAddOffset(dst, dstRB); + } +} + +static SkPMColor cgpixels_to_pmcolor(CGRGBPixel rgb) { + U8CPU a = (rgb >> 24) & 0xFF; + U8CPU r = (rgb >> 16) & 0xFF; + U8CPU g = (rgb >> 8) & 0xFF; + U8CPU b = (rgb >> 0) & 0xFF; +#if SK_SHOW_TEXT_BLIT_COVERAGE + a = std::max(a, (U8CPU)0x30); +#endif + return SkPackARGB32(a, r, g, b); +} + +void SkScalerContext_Mac::generateImage(const SkGlyph& glyph) { + CGGlyph cgGlyph = SkTo(glyph.getGlyphID()); + + // FIXME: lcd smoothed un-hinted rasterization unsupported. + bool requestSmooth = fRec.getHinting() != SkFontHinting::kNone; + + // Draw the glyph + size_t cgRowBytes; + CGRGBPixel* cgPixels = fOffscreen.getCG(*this, glyph, cgGlyph, &cgRowBytes, requestSmooth); + if (cgPixels == nullptr) { + return; + } + + // Fix the glyph + if ((glyph.fMaskFormat == SkMask::kLCD16_Format) || + (glyph.fMaskFormat == SkMask::kA8_Format + && requestSmooth + && SkCTFontGetSmoothBehavior() != SkCTFontSmoothBehavior::none)) + { + const uint8_t* linear = gLinearCoverageFromCGLCDValue.data(); + + //Note that the following cannot really be integrated into the + //pre-blend, since we may not be applying the pre-blend; when we aren't + //applying the pre-blend it means that a filter wants linear anyway. + //Other code may also be applying the pre-blend, so we'd need another + //one with this and one without. + CGRGBPixel* addr = cgPixels; + for (int y = 0; y < glyph.fHeight; ++y) { + for (int x = 0; x < glyph.fWidth; ++x) { + int r = (addr[x] >> 16) & 0xFF; + int g = (addr[x] >> 8) & 0xFF; + int b = (addr[x] >> 0) & 0xFF; + addr[x] = (linear[r] << 16) | (linear[g] << 8) | linear[b]; + } + addr = SkTAddOffset(addr, cgRowBytes); + } + } + + // Convert glyph to mask + switch (glyph.fMaskFormat) { + case SkMask::kLCD16_Format: { + if (fPreBlend.isApplicable()) { + RGBToLcd16(cgPixels, cgRowBytes, glyph, glyph.fImage, + fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); + } else { + RGBToLcd16(cgPixels, cgRowBytes, glyph, glyph.fImage, + fPreBlend.fR, fPreBlend.fG, fPreBlend.fB); + } + } break; + case SkMask::kA8_Format: { + if (fPreBlend.isApplicable()) { + RGBToA8(cgPixels, cgRowBytes, glyph, glyph.fImage, fPreBlend.fG); + } else { + RGBToA8(cgPixels, cgRowBytes, glyph, glyph.fImage, fPreBlend.fG); + } + } break; + case SkMask::kBW_Format: { + const int width = glyph.fWidth; + size_t dstRB = glyph.rowBytes(); + uint8_t* dst = (uint8_t*)glyph.fImage; + for (int y = 0; y < glyph.fHeight; y++) { + cgpixels_to_bits(dst, cgPixels, width); + cgPixels = SkTAddOffset(cgPixels, cgRowBytes); + dst = SkTAddOffset(dst, dstRB); + } + } break; + case SkMask::kARGB32_Format: { + const int width = glyph.fWidth; + size_t dstRB = glyph.rowBytes(); + SkPMColor* dst = (SkPMColor*)glyph.fImage; + for (int y = 0; y < glyph.fHeight; y++) { + for (int x = 0; x < width; ++x) { + dst[x] = cgpixels_to_pmcolor(cgPixels[x]); + } + cgPixels = SkTAddOffset(cgPixels, cgRowBytes); + dst = SkTAddOffset(dst, dstRB); + } + } break; + default: + SkDEBUGFAIL("unexpected mask format"); + break; + } +} + +namespace { +class SkCTPathGeometrySink { + SkPath* fPath; + bool fStarted; + CGPoint fCurrent; + + void goingTo(const CGPoint pt) { + if (!fStarted) { + fStarted = true; + fPath->moveTo(fCurrent.x, -fCurrent.y); + } + fCurrent = pt; + } + + bool currentIsNot(const CGPoint pt) { + return fCurrent.x != pt.x || fCurrent.y != pt.y; + } + +public: + SkCTPathGeometrySink(SkPath* path) : fPath{path}, fStarted{false}, fCurrent{0,0} {} + static void ApplyElement(void *ctx, const CGPathElement *element) { + SkCTPathGeometrySink& self = *(SkCTPathGeometrySink*)ctx; + CGPoint* points = element->points; + + switch (element->type) { + case kCGPathElementMoveToPoint: + self.fStarted = false; + self.fCurrent = points[0]; + break; + + case kCGPathElementAddLineToPoint: + if (self.currentIsNot(points[0])) { + self.goingTo(points[0]); + self.fPath->lineTo(points[0].x, -points[0].y); + } + break; + + case kCGPathElementAddQuadCurveToPoint: + if (self.currentIsNot(points[0]) || self.currentIsNot(points[1])) { + self.goingTo(points[1]); + self.fPath->quadTo(points[0].x, -points[0].y, + points[1].x, -points[1].y); + } + break; + + case kCGPathElementAddCurveToPoint: + if (self.currentIsNot(points[0]) || + self.currentIsNot(points[1]) || + self.currentIsNot(points[2])) + { + self.goingTo(points[2]); + self.fPath->cubicTo(points[0].x, -points[0].y, + points[1].x, -points[1].y, + points[2].x, -points[2].y); + } + break; + + case kCGPathElementCloseSubpath: + if (self.fStarted) { + self.fPath->close(); + } + break; + + default: + SkDEBUGFAIL("Unknown path element!"); + break; + } + } +}; +} // namespace + +/* + * Our subpixel resolution is only 2 bits in each direction, so a scale of 4 + * seems sufficient, and possibly even correct, to allow the hinted outline + * to be subpixel positioned. + */ +#define kScaleForSubPixelPositionHinting (4.0f) + +bool SkScalerContext_Mac::generatePath(SkGlyphID glyph, SkPath* path) { + SkScalar scaleX = SK_Scalar1; + SkScalar scaleY = SK_Scalar1; + + CGAffineTransform xform = fTransform; + /* + * For subpixel positioning, we want to return an unhinted outline, so it + * can be positioned nicely at fractional offsets. However, we special-case + * if the baseline of the (horizontal) text is axis-aligned. In those cases + * we want to retain hinting in the direction orthogonal to the baseline. + * e.g. for horizontal baseline, we want to retain hinting in Y. + * The way we remove hinting is to scale the font by some value (4) in that + * direction, ask for the path, and then scale the path back down. + */ + if (fDoSubPosition) { + // start out by assuming that we want no hining in X and Y + scaleX = scaleY = kScaleForSubPixelPositionHinting; + // now see if we need to restore hinting for axis-aligned baselines + switch (this->computeAxisAlignmentForHText()) { + case kX_SkAxisAlignment: + scaleY = SK_Scalar1; // want hinting in the Y direction + break; + case kY_SkAxisAlignment: + scaleX = SK_Scalar1; // want hinting in the X direction + break; + default: + break; + } + + CGAffineTransform scale(CGAffineTransformMakeScale(SkScalarToCGFloat(scaleX), + SkScalarToCGFloat(scaleY))); + xform = CGAffineTransformConcat(fTransform, scale); + } + + CGGlyph cgGlyph = SkTo(glyph); + SkUniqueCFRef cgPath(CTFontCreatePathForGlyph(fCTFont.get(), cgGlyph, &xform)); + + path->reset(); + if (!cgPath) { + return false; + } + + SkCTPathGeometrySink sink(path); + CGPathApply(cgPath.get(), &sink, SkCTPathGeometrySink::ApplyElement); + if (fDoSubPosition) { + SkMatrix m; + m.setScale(SkScalarInvert(scaleX), SkScalarInvert(scaleY)); + path->transform(m); + } + return true; +} + +void SkScalerContext_Mac::generateFontMetrics(SkFontMetrics* metrics) { + if (nullptr == metrics) { + return; + } + + CGRect theBounds = CTFontGetBoundingBox(fCTFont.get()); + + metrics->fTop = SkScalarFromCGFloat(-SkCGRectGetMaxY(theBounds)); + metrics->fAscent = SkScalarFromCGFloat(-CTFontGetAscent(fCTFont.get())); + metrics->fDescent = SkScalarFromCGFloat( CTFontGetDescent(fCTFont.get())); + metrics->fBottom = SkScalarFromCGFloat(-SkCGRectGetMinY(theBounds)); + metrics->fLeading = SkScalarFromCGFloat( CTFontGetLeading(fCTFont.get())); + metrics->fAvgCharWidth = SkScalarFromCGFloat( SkCGRectGetWidth(theBounds)); + metrics->fXMin = SkScalarFromCGFloat( SkCGRectGetMinX(theBounds)); + metrics->fXMax = SkScalarFromCGFloat( SkCGRectGetMaxX(theBounds)); + metrics->fMaxCharWidth = metrics->fXMax - metrics->fXMin; + metrics->fXHeight = SkScalarFromCGFloat( CTFontGetXHeight(fCTFont.get())); + metrics->fCapHeight = SkScalarFromCGFloat( CTFontGetCapHeight(fCTFont.get())); + metrics->fUnderlineThickness = SkScalarFromCGFloat( CTFontGetUnderlineThickness(fCTFont.get())); + metrics->fUnderlinePosition = -SkScalarFromCGFloat( CTFontGetUnderlinePosition(fCTFont.get())); + + metrics->fFlags = 0; + metrics->fFlags |= SkFontMetrics::kUnderlineThicknessIsValid_Flag; + metrics->fFlags |= SkFontMetrics::kUnderlinePositionIsValid_Flag; + + // See https://bugs.chromium.org/p/skia/issues/detail?id=6203 + // At least on 10.12.3 with memory based fonts the x-height is always 0.6666 of the ascent and + // the cap-height is always 0.8888 of the ascent. It appears that the values from the 'OS/2' + // table are read, but then overwritten if the font is not a system font. As a result, if there + // is a valid 'OS/2' table available use the values from the table if they aren't too strange. + struct OS2HeightMetrics { + SK_OT_SHORT sxHeight; + SK_OT_SHORT sCapHeight; + } heights; + size_t bytesRead = this->getTypeface()->getTableData( + SkTEndian_SwapBE32(SkOTTableOS2::TAG), offsetof(SkOTTableOS2, version.v2.sxHeight), + sizeof(heights), &heights); + if (bytesRead == sizeof(heights)) { + // 'fontSize' is correct because the entire resolved size is set by the constructor. + CGFloat fontSize = CTFontGetSize(this->fCTFont.get()); + unsigned upem = CTFontGetUnitsPerEm(this->fCTFont.get()); + unsigned maxSaneHeight = upem * 2; + uint16_t xHeight = SkEndian_SwapBE16(heights.sxHeight); + if (xHeight && xHeight < maxSaneHeight) { + metrics->fXHeight = SkScalarFromCGFloat(xHeight * fontSize / upem); + } + uint16_t capHeight = SkEndian_SwapBE16(heights.sCapHeight); + if (capHeight && capHeight < maxSaneHeight) { + metrics->fCapHeight = SkScalarFromCGFloat(capHeight * fontSize / upem); + } + } +} + +#endif diff --git a/src/ports/SkScalerContext_mac_ct.h b/src/ports/SkScalerContext_mac_ct.h new file mode 100644 index 0000000000000..4b7f548a1ca13 --- /dev/null +++ b/src/ports/SkScalerContext_mac_ct.h @@ -0,0 +1,118 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkScalerContext_mac_ct_DEFINED +#define SkScalerContext_mac_ct_DEFINED + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#include "include/core/SkRefCnt.h" +#include "include/core/SkSize.h" +#include "src/core/SkAutoMalloc.h" +#include "src/core/SkScalerContext.h" +#include "src/utils/mac/SkUniqueCFRef.h" + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#include +#include +#include +#endif + +#include + +class SkDescriptor; +class SkGlyph; +class SkPath; +class SkTypeface_Mac; +struct SkFontMetrics; + + +typedef uint32_t CGRGBPixel; + +class SkScalerContext_Mac : public SkScalerContext { +public: + SkScalerContext_Mac(sk_sp, const SkScalerContextEffects&, const SkDescriptor*); + +protected: + unsigned generateGlyphCount(void) override; + bool generateAdvance(SkGlyph* glyph) override; + void generateMetrics(SkGlyph* glyph) override; + void generateImage(const SkGlyph& glyph) override; + bool generatePath(SkGlyphID glyph, SkPath* path) override; + void generateFontMetrics(SkFontMetrics*) override; + +private: + class Offscreen { + public: + Offscreen() + : fRGBSpace(nullptr) + , fCG(nullptr) + , fDoAA(false) + , fDoLCD(false) + { + fSize.set(0, 0); + } + + CGRGBPixel* getCG(const SkScalerContext_Mac& context, const SkGlyph& glyph, + CGGlyph glyphID, size_t* rowBytesPtr, bool generateA8FromLCD); + + private: + enum { + kSize = 32 * 32 * sizeof(CGRGBPixel) + }; + SkAutoSMalloc fImageStorage; + SkUniqueCFRef fRGBSpace; + + // cached state + SkUniqueCFRef fCG; + SkISize fSize; + bool fDoAA; + bool fDoLCD; + }; + Offscreen fOffscreen; + + /** Unrotated variant of fCTFont. + * + * In 10.10.1 CTFontGetAdvancesForGlyphs applies the font transform to the width of the + * advances, but always sets the height to 0. This font is used to get the advances of the + * unrotated glyph, and then the rotation is applied separately. + * + * CT vertical metrics are pre-rotated (in em space, before transform) 90deg clock-wise. + * This makes kCTFontOrientationDefault dangerous, because the metrics from + * kCTFontOrientationHorizontal are in a different space from kCTFontOrientationVertical. + * With kCTFontOrientationVertical the advances must be unrotated. + * + * Sometimes, creating a copy of a CTFont with the same size but different trasform will select + * different underlying font data. As a result, avoid ever creating more than one CTFont per + * SkScalerContext to ensure that only one CTFont is used. + * + * As a result of the above (and other constraints) this font contains the size, but not the + * transform. The transform must always be applied separately. + */ + SkUniqueCFRef fCTFont; + + /** The transform without the font size. */ + CGAffineTransform fTransform; + CGAffineTransform fInvTransform; + + SkUniqueCFRef fCGFont; + uint16_t fGlyphCount; + const bool fDoSubPosition; + + friend class Offscreen; + + typedef SkScalerContext INHERITED; +}; + +#endif +#endif //SkScalerContext_mac_ct_DEFINED diff --git a/src/ports/SkTypeface_mac_ct.cpp b/src/ports/SkTypeface_mac_ct.cpp new file mode 100644 index 0000000000000..5507502261dbb --- /dev/null +++ b/src/ports/SkTypeface_mac_ct.cpp @@ -0,0 +1,1356 @@ +/* + * Copyright 2006 The Android Open Source Project + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#include +#include +#include +#endif + +#include "include/core/SkColor.h" +#include "include/core/SkData.h" +#include "include/core/SkFontArguments.h" +#include "include/core/SkFontParameters.h" +#include "include/core/SkFontStyle.h" +#include "include/core/SkFontTypes.h" +#include "include/core/SkRect.h" +#include "include/core/SkRefCnt.h" +#include "include/core/SkScalar.h" +#include "include/core/SkStream.h" +#include "include/core/SkString.h" +#include "include/core/SkTypeface.h" +#include "include/ports/SkTypeface_mac.h" +#include "include/private/SkFixed.h" +#include "include/private/SkMalloc.h" +#include "include/private/SkMutex.h" +#include "include/private/SkOnce.h" +#include "include/private/SkTDArray.h" +#include "include/private/SkTemplates.h" +#include "include/private/SkTo.h" +#include "src/core/SkAdvancedTypefaceMetrics.h" +#include "src/core/SkEndian.h" +#include "src/core/SkFontDescriptor.h" +#include "src/core/SkMask.h" +#include "src/core/SkScalerContext.h" +#include "src/core/SkTypefaceCache.h" +#include "src/core/SkUtils.h" +#include "src/ports/SkScalerContext_mac_ct.h" +#include "src/ports/SkTypeface_mac_ct.h" +#include "src/sfnt/SkOTTableTypes.h" +#include "src/sfnt/SkOTTable_OS_2.h" +#include "src/sfnt/SkOTTable_OS_2_V4.h" +#include "src/sfnt/SkOTUtils.h" +#include "src/sfnt/SkSFNTHeader.h" +#include "src/utils/SkUTF.h" +#include "src/utils/mac/SkCGBase.h" +#include "src/utils/mac/SkCGGeometry.h" +#include "src/utils/mac/SkCTFontSmoothBehavior.h" +#include "src/utils/mac/SkUniqueCFRef.h" + +#include +#include +#include +#include + +// In macOS 10.12 and later any variation on the CGFont which has default axis value will be +// dropped when creating the CTFont. Unfortunately, in macOS 10.15 the priority of setting +// the optical size (and opsz variation) is +// 1. the value of kCTFontOpticalSizeAttribute in the CTFontDescriptor (undocumented) +// 2. the opsz axis default value if kCTFontOpticalSizeAttribute is 'none' (undocumented) +// 3. the opsz variation on the nascent CTFont from the CGFont (was dropped if default) +// 4. the opsz variation in kCTFontVariationAttribute in CTFontDescriptor (crashes 10.10) +// 5. the size requested (can fudge in SkTypeface but not SkScalerContext) +// The first one which is found will be used to set the opsz variation (after clamping). +static void add_opsz_attr(CFMutableDictionaryRef attr, double opsz) { + SkUniqueCFRef opszValueNumber( + CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &opsz)); + // Avoid using kCTFontOpticalSizeAttribute directly + CFStringRef SkCTFontOpticalSizeAttribute = CFSTR("NSCTFontOpticalSizeAttribute"); + CFDictionarySetValue(attr, SkCTFontOpticalSizeAttribute, opszValueNumber.get()); +} + +// This turns off application of the 'trak' table to advances, but also all other tracking. +static void add_notrak_attr(CFMutableDictionaryRef attr) { + int zero = 0; + SkUniqueCFRef unscaledTrackingNumber( + CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &zero)); + CFStringRef SkCTFontUnscaledTrackingAttribute = CFSTR("NSCTFontUnscaledTrackingAttribute"); + CFDictionarySetValue(attr, SkCTFontUnscaledTrackingAttribute, unscaledTrackingNumber.get()); +} + +SkUniqueCFRef SkCTFontCreateExactCopy(CTFontRef baseFont, CGFloat textSize, + OpszVariation opsz) +{ + SkUniqueCFRef attr( + CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + + if (opsz.isSet) { + add_opsz_attr(attr.get(), opsz.value); +#if !defined(SK_IGNORE_MAC_OPSZ_FORCE) + } else { + // On (at least) 10.10 though 10.14 the default system font was SFNSText/SFNSDisplay. + // The CTFont is backed by both; optical size < 20 means SFNSText else SFNSDisplay. + // On at least 10.11 the glyph ids in these fonts became non-interchangable. + // To keep glyph ids stable over size changes, preserve the optical size. + // In 10.15 this was replaced with use of variable fonts with an opsz axis. + // A CTFont backed by multiple fonts picked by opsz where the multiple backing fonts are + // variable fonts with opsz axis and non-interchangeable glyph ids would break the + // opsz.isSet branch above, but hopefully that never happens. + // See https://crbug.com/524646 . + CFStringRef SkCTFontOpticalSizeAttribute = CFSTR("NSCTFontOpticalSizeAttribute"); + SkUniqueCFRef opsz(CTFontCopyAttribute(baseFont, SkCTFontOpticalSizeAttribute)); + double opsz_val; + if (!opsz || + CFGetTypeID(opsz.get()) != CFNumberGetTypeID() || + !CFNumberGetValue(static_cast(opsz.get()),kCFNumberDoubleType,&opsz_val) || + opsz_val <= 0) + { + opsz_val = CTFontGetSize(baseFont); + } + add_opsz_attr(attr.get(), opsz_val); +#endif + } + add_notrak_attr(attr.get()); + + SkUniqueCFRef desc(CTFontDescriptorCreateWithAttributes(attr.get())); + +#if !defined(SK_IGNORE_MAC_OPSZ_FORCE) + return SkUniqueCFRef( + CTFontCreateCopyWithAttributes(baseFont, textSize, nullptr, desc.get())); +#else + SkUniqueCFRef baseCGFont(CTFontCopyGraphicsFont(baseFont, nullptr)); + return SkUniqueCFRef( + CTFontCreateWithGraphicsFont(baseCGFont.get(), textSize, nullptr, desc.get())); + +#endif +} + +CTFontRef SkTypeface_GetCTFontRef(const SkTypeface* face) { + return face ? (CTFontRef)face->internal_private_getCTFontRef() : nullptr; +} + +static bool find_by_CTFontRef(SkTypeface* cached, void* context) { + CTFontRef self = (CTFontRef)context; + CTFontRef other = (CTFontRef)cached->internal_private_getCTFontRef(); + + return CFEqual(self, other); +} + +/** Creates a typeface, searching the cache if isLocalStream is false. */ +sk_sp SkTypeface_Mac::Make(SkUniqueCFRef font, + OpszVariation opszVariation, + std::unique_ptr providedData) { + static SkMutex gTFCacheMutex; + static SkTypefaceCache gTFCache; + + SkASSERT(font); + const bool isFromStream(providedData); + + if (!isFromStream) { + SkAutoMutexExclusive ama(gTFCacheMutex); + sk_sp face = gTFCache.findByProcAndRef(find_by_CTFontRef, (void*)font.get()); + if (face) { + return face; + } + } + + SkUniqueCFRef desc(CTFontCopyFontDescriptor(font.get())); + SkFontStyle style = SkCTFontDescriptorGetSkFontStyle(desc.get(), isFromStream); + CTFontSymbolicTraits traits = CTFontGetSymbolicTraits(font.get()); + bool isFixedPitch = SkToBool(traits & kCTFontMonoSpaceTrait); + + sk_sp face(new SkTypeface_Mac(std::move(font), style, + isFixedPitch, opszVariation, + std::move(providedData))); + if (!isFromStream) { + SkAutoMutexExclusive ama(gTFCacheMutex); + gTFCache.add(face); + } + return face; +} + +/* This function is visible on the outside. It first searches the cache, and if + * not found, returns a new entry (after adding it to the cache). + */ +sk_sp SkMakeTypefaceFromCTFont(CTFontRef font) { + CFRetain(font); + return SkTypeface_Mac::Make(SkUniqueCFRef(font), + OpszVariation(), + nullptr); +} + +static bool find_dict_CGFloat(CFDictionaryRef dict, CFStringRef name, CGFloat* value) { + CFNumberRef num; + return CFDictionaryGetValueIfPresent(dict, name, (const void**)&num) + && CFNumberIsFloatType(num) + && CFNumberGetValue(num, kCFNumberCGFloatType, value); +} + +template struct LinearInterpolater { + struct Mapping { + S src_val; + D dst_val; + }; + constexpr LinearInterpolater(Mapping const mapping[], int mappingCount) + : fMapping(mapping), fMappingCount(mappingCount) {} + + static D map(S value, S src_min, S src_max, D dst_min, D dst_max) { + SkASSERT(src_min < src_max); + SkASSERT(dst_min <= dst_max); + return C()(dst_min + (((value - src_min) * (dst_max - dst_min)) / (src_max - src_min))); + } + + D map(S val) const { + // -Inf to [0] + if (val < fMapping[0].src_val) { + return fMapping[0].dst_val; + } + + // Linear from [i] to [i+1] + for (int i = 0; i < fMappingCount - 1; ++i) { + if (val < fMapping[i+1].src_val) { + return map(val, fMapping[i].src_val, fMapping[i+1].src_val, + fMapping[i].dst_val, fMapping[i+1].dst_val); + } + } + + // From [n] to +Inf + // if (fcweight < Inf) + return fMapping[fMappingCount - 1].dst_val; + } + + Mapping const * fMapping; + int fMappingCount; +}; + +struct RoundCGFloatToInt { + int operator()(CGFloat s) { return s + 0.5; } +}; +struct CGFloatIdentity { + CGFloat operator()(CGFloat s) { return s; } +}; + +/** Returns the [-1, 1] CTFontDescriptor weights for the + * <0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000> CSS weights. + * + * It is assumed that the values will be interpolated linearly between these points. + * NSFontWeightXXX were added in 10.11, appear in 10.10, but do not appear in 10.9. + * The actual values appear to be stable, but they may change in the future without notice. + */ +static CGFloat(&get_NSFontWeight_mapping())[11] { + + // Declarations in on macOS, on iOS +#ifdef SK_BUILD_FOR_MAC +# define SK_KIT_FONT_WEIGHT_PREFIX "NS" +#endif +#ifdef SK_BUILD_FOR_IOS +# define SK_KIT_FONT_WEIGHT_PREFIX "UI" +#endif + static constexpr struct { + CGFloat defaultValue; + const char* name; + } nsFontWeightLoaderInfos[] = { + { -0.80f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightUltraLight" }, + { -0.60f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightThin" }, + { -0.40f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightLight" }, + { 0.00f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightRegular" }, + { 0.23f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightMedium" }, + { 0.30f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightSemibold" }, + { 0.40f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightBold" }, + { 0.56f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightHeavy" }, + { 0.62f, SK_KIT_FONT_WEIGHT_PREFIX "FontWeightBlack" }, + }; + + static_assert(SK_ARRAY_COUNT(nsFontWeightLoaderInfos) == 9, ""); + static CGFloat nsFontWeights[11]; + static SkOnce once; + once([&] { + size_t i = 0; + nsFontWeights[i++] = -1.00; + for (const auto& nsFontWeightLoaderInfo : nsFontWeightLoaderInfos) { + void* nsFontWeightValuePtr = dlsym(RTLD_DEFAULT, nsFontWeightLoaderInfo.name); + if (nsFontWeightValuePtr) { + nsFontWeights[i++] = *(static_cast(nsFontWeightValuePtr)); + } else { + nsFontWeights[i++] = nsFontWeightLoaderInfo.defaultValue; + } + } + nsFontWeights[i++] = 1.00; + }); + return nsFontWeights; +} + +/** Convert the [0, 1000] CSS weight to [-1, 1] CTFontDescriptor weight (for system fonts). + * + * The -1 to 1 weights reported by CTFontDescriptors have different mappings depending on if the + * CTFont is native or created from a CGDataProvider. + */ +CGFloat SkCTFontCTWeightForCSSWeight(int fontstyleWeight) { + using Interpolator = LinearInterpolater; + + // Note that Mac supports the old OS2 version A so 0 through 10 are as if multiplied by 100. + // However, on this end we can't tell, so this is ignored. + + static Interpolator::Mapping nativeWeightMappings[11]; + static SkOnce once; + once([&] { + CGFloat(&nsFontWeights)[11] = get_NSFontWeight_mapping(); + for (int i = 0; i < 11; ++i) { + nativeWeightMappings[i].src_val = i * 100; + nativeWeightMappings[i].dst_val = nsFontWeights[i]; + } + }); + static constexpr Interpolator nativeInterpolator( + nativeWeightMappings, SK_ARRAY_COUNT(nativeWeightMappings)); + + return nativeInterpolator.map(fontstyleWeight); +} + + +/** Convert the [-1, 1] CTFontDescriptor weight to [0, 1000] CSS weight. + * + * The -1 to 1 weights reported by CTFontDescriptors have different mappings depending on if the + * CTFont is native or created from a CGDataProvider. + */ +static int ct_weight_to_fontstyle(CGFloat cgWeight, bool fromDataProvider) { + using Interpolator = LinearInterpolater; + + // Note that Mac supports the old OS2 version A so 0 through 10 are as if multiplied by 100. + // However, on this end we can't tell, so this is ignored. + + /** This mapping for CGDataProvider created fonts is determined by creating font data with every + * weight, creating a CTFont, and asking the CTFont for its weight. See the TypefaceStyle test + * in tests/TypefaceTest.cpp for the code used to determine these values. + */ + static constexpr Interpolator::Mapping dataProviderWeightMappings[] = { + { -1.00, 0 }, + { -0.70, 100 }, + { -0.50, 200 }, + { -0.23, 300 }, + { 0.00, 400 }, + { 0.20, 500 }, + { 0.30, 600 }, + { 0.40, 700 }, + { 0.60, 800 }, + { 0.80, 900 }, + { 1.00, 1000 }, + }; + static constexpr Interpolator dataProviderInterpolator( + dataProviderWeightMappings, SK_ARRAY_COUNT(dataProviderWeightMappings)); + + static Interpolator::Mapping nativeWeightMappings[11]; + static SkOnce once; + once([&] { + CGFloat(&nsFontWeights)[11] = get_NSFontWeight_mapping(); + for (int i = 0; i < 11; ++i) { + nativeWeightMappings[i].src_val = nsFontWeights[i]; + nativeWeightMappings[i].dst_val = i * 100; + } + }); + static constexpr Interpolator nativeInterpolator( + nativeWeightMappings, SK_ARRAY_COUNT(nativeWeightMappings)); + + return fromDataProvider ? dataProviderInterpolator.map(cgWeight) + : nativeInterpolator.map(cgWeight); +} + +/** Convert the [0, 10] CSS weight to [-1, 1] CTFontDescriptor width. */ +CGFloat SkCTFontCTWidthForCSSWidth(int fontstyleWidth) { + using Interpolator = LinearInterpolater; + + // Values determined by creating font data with every width, creating a CTFont, + // and asking the CTFont for its width. See TypefaceStyle test for basics. + static constexpr Interpolator::Mapping widthMappings[] = { + { 0, -0.5 }, + { 10, 0.5 }, + }; + static constexpr Interpolator interpolator(widthMappings, SK_ARRAY_COUNT(widthMappings)); + return interpolator.map(fontstyleWidth); +} + +/** Convert the [-1, 1] CTFontDescriptor width to [0, 10] CSS weight. */ +static int ct_width_to_fontstyle(CGFloat cgWidth) { + using Interpolator = LinearInterpolater; + + // Values determined by creating font data with every width, creating a CTFont, + // and asking the CTFont for its width. See TypefaceStyle test for basics. + static constexpr Interpolator::Mapping widthMappings[] = { + { -0.5, 0 }, + { 0.5, 10 }, + }; + static constexpr Interpolator interpolator(widthMappings, SK_ARRAY_COUNT(widthMappings)); + return interpolator.map(cgWidth); +} + +SkFontStyle SkCTFontDescriptorGetSkFontStyle(CTFontDescriptorRef desc, bool fromDataProvider) { + SkUniqueCFRef traits(CTFontDescriptorCopyAttribute(desc, kCTFontTraitsAttribute)); + if (!traits || CFDictionaryGetTypeID() != CFGetTypeID(traits.get())) { + return SkFontStyle(); + } + SkUniqueCFRef fontTraitsDict(static_cast(traits.release())); + + CGFloat weight, width, slant; + if (!find_dict_CGFloat(fontTraitsDict.get(), kCTFontWeightTrait, &weight)) { + weight = 0; + } + if (!find_dict_CGFloat(fontTraitsDict.get(), kCTFontWidthTrait, &width)) { + width = 0; + } + if (!find_dict_CGFloat(fontTraitsDict.get(), kCTFontSlantTrait, &slant)) { + slant = 0; + } + + return SkFontStyle(ct_weight_to_fontstyle(weight, fromDataProvider), + ct_width_to_fontstyle(width), + slant ? SkFontStyle::kItalic_Slant + : SkFontStyle::kUpright_Slant); +} + + +// Web fonts added to the CTFont registry do not return their character set. +// Iterate through the font in this case. The existing caller caches the result, +// so the performance impact isn't too bad. +static void populate_glyph_to_unicode_slow(CTFontRef ctFont, CFIndex glyphCount, + SkUnichar* out) { + sk_bzero(out, glyphCount * sizeof(SkUnichar)); + UniChar unichar = 0; + while (glyphCount > 0) { + CGGlyph glyph; + if (CTFontGetGlyphsForCharacters(ctFont, &unichar, &glyph, 1)) { + if (out[glyph] == 0) { + out[glyph] = unichar; + --glyphCount; + } + } + if (++unichar == 0) { + break; + } + } +} + +static constexpr uint16_t kPlaneSize = 1 << 13; + +static void get_plane_glyph_map(const uint8_t* bits, + CTFontRef ctFont, + CFIndex glyphCount, + SkUnichar* glyphToUnicode, + uint8_t planeIndex) { + SkUnichar planeOrigin = (SkUnichar)planeIndex << 16; // top half of codepoint. + for (uint16_t i = 0; i < kPlaneSize; i++) { + uint8_t mask = bits[i]; + if (!mask) { + continue; + } + for (uint8_t j = 0; j < 8; j++) { + if (0 == (mask & ((uint8_t)1 << j))) { + continue; + } + uint16_t planeOffset = (i << 3) | j; + SkUnichar codepoint = planeOrigin | (SkUnichar)planeOffset; + uint16_t utf16[2] = {planeOffset, 0}; + size_t count = 1; + if (planeOrigin != 0) { + count = SkUTF::ToUTF16(codepoint, utf16); + } + CGGlyph glyphs[2] = {0, 0}; + if (CTFontGetGlyphsForCharacters(ctFont, utf16, glyphs, count)) { + SkASSERT(glyphs[1] == 0); + SkASSERT(glyphs[0] < glyphCount); + // CTFontCopyCharacterSet and CTFontGetGlyphsForCharacters seem to add 'support' + // for characters 0x9, 0xA, and 0xD mapping them to the glyph for character 0x20? + // Prefer mappings to codepoints at or above 0x20. + if (glyphToUnicode[glyphs[0]] < 0x20) { + glyphToUnicode[glyphs[0]] = codepoint; + } + } + } + } +} +// Construct Glyph to Unicode table. +static void populate_glyph_to_unicode(CTFontRef ctFont, CFIndex glyphCount, + SkUnichar* glyphToUnicode) { + sk_bzero(glyphToUnicode, sizeof(SkUnichar) * glyphCount); + SkUniqueCFRef charSet(CTFontCopyCharacterSet(ctFont)); + if (!charSet) { + populate_glyph_to_unicode_slow(ctFont, glyphCount, glyphToUnicode); + return; + } + + SkUniqueCFRef bitmap( + CFCharacterSetCreateBitmapRepresentation(nullptr, charSet.get())); + if (!bitmap) { + return; + } + CFIndex dataLength = CFDataGetLength(bitmap.get()); + if (!dataLength) { + return; + } + SkASSERT(dataLength >= kPlaneSize); + const UInt8* bits = CFDataGetBytePtr(bitmap.get()); + + get_plane_glyph_map(bits, ctFont, glyphCount, glyphToUnicode, 0); + /* + A CFData object that specifies the bitmap representation of the Unicode + character points the for the new character set. The bitmap representation could + contain all the Unicode character range starting from BMP to Plane 16. The + first 8KiB (8192 bytes) of the data represent the BMP range. The BMP range 8KiB + can be followed by zero to sixteen 8KiB bitmaps, each prepended with the plane + index byte. For example, the bitmap representing the BMP and Plane 2 has the + size of 16385 bytes (8KiB for BMP, 1 byte index, and a 8KiB bitmap for Plane + 2). The plane index byte, in this case, contains the integer value two. + */ + + if (dataLength <= kPlaneSize) { + return; + } + int extraPlaneCount = (dataLength - kPlaneSize) / (1 + kPlaneSize); + SkASSERT(dataLength == kPlaneSize + extraPlaneCount * (1 + kPlaneSize)); + while (extraPlaneCount-- > 0) { + bits += kPlaneSize; + uint8_t planeIndex = *bits++; + SkASSERT(planeIndex >= 1); + SkASSERT(planeIndex <= 16); + get_plane_glyph_map(bits, ctFont, glyphCount, glyphToUnicode, planeIndex); + } +} + +/** Assumes src and dst are not nullptr. */ +void SkStringFromCFString(CFStringRef src, SkString* dst) { + // Reserve enough room for the worst-case string, + // plus 1 byte for the trailing null. + CFIndex length = CFStringGetMaximumSizeForEncoding(CFStringGetLength(src), + kCFStringEncodingUTF8) + 1; + dst->resize(length); + CFStringGetCString(src, dst->writable_str(), length, kCFStringEncodingUTF8); + // Resize to the actual UTF-8 length used, stripping the null character. + dst->resize(strlen(dst->c_str())); +} + +void SkTypeface_Mac::getGlyphToUnicodeMap(SkUnichar* dstArray) const { + SkUniqueCFRef ctFont = + SkCTFontCreateExactCopy(fFontRef.get(), CTFontGetUnitsPerEm(fFontRef.get()), + fOpszVariation); + CFIndex glyphCount = CTFontGetGlyphCount(ctFont.get()); + populate_glyph_to_unicode(ctFont.get(), glyphCount, dstArray); +} + +std::unique_ptr SkTypeface_Mac::onGetAdvancedMetrics() const { + + SkUniqueCFRef ctFont = + SkCTFontCreateExactCopy(fFontRef.get(), CTFontGetUnitsPerEm(fFontRef.get()), + fOpszVariation); + + std::unique_ptr info(new SkAdvancedTypefaceMetrics); + + { + SkUniqueCFRef fontName(CTFontCopyPostScriptName(ctFont.get())); + if (fontName.get()) { + SkStringFromCFString(fontName.get(), &info->fPostScriptName); + info->fFontName = info->fPostScriptName; + } + } + + SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(ctFont.get())); + if (ctAxes && CFArrayGetCount(ctAxes.get()) > 0) { + info->fFlags |= SkAdvancedTypefaceMetrics::kMultiMaster_FontFlag; + } + + SkOTTableOS2_V4::Type fsType; + if (sizeof(fsType) == this->getTableData(SkTEndian_SwapBE32(SkOTTableOS2::TAG), + offsetof(SkOTTableOS2_V4, fsType), + sizeof(fsType), + &fsType)) { + SkOTUtils::SetAdvancedTypefaceFlags(fsType, info.get()); + } + + // If it's not a truetype font, mark it as 'other'. Assume that TrueType + // fonts always have both glyf and loca tables. At the least, this is what + // sfntly needs to subset the font. CTFontCopyAttribute() does not always + // succeed in determining this directly. + if (!this->getTableSize('glyf') || !this->getTableSize('loca')) { + return info; + } + + info->fType = SkAdvancedTypefaceMetrics::kTrueType_Font; + CTFontSymbolicTraits symbolicTraits = CTFontGetSymbolicTraits(ctFont.get()); + if (symbolicTraits & kCTFontMonoSpaceTrait) { + info->fStyle |= SkAdvancedTypefaceMetrics::kFixedPitch_Style; + } + if (symbolicTraits & kCTFontItalicTrait) { + info->fStyle |= SkAdvancedTypefaceMetrics::kItalic_Style; + } + CTFontStylisticClass stylisticClass = symbolicTraits & kCTFontClassMaskTrait; + if (stylisticClass >= kCTFontOldStyleSerifsClass && stylisticClass <= kCTFontSlabSerifsClass) { + info->fStyle |= SkAdvancedTypefaceMetrics::kSerif_Style; + } else if (stylisticClass & kCTFontScriptsClass) { + info->fStyle |= SkAdvancedTypefaceMetrics::kScript_Style; + } + info->fItalicAngle = (int16_t) CTFontGetSlantAngle(ctFont.get()); + info->fAscent = (int16_t) CTFontGetAscent(ctFont.get()); + info->fDescent = (int16_t) CTFontGetDescent(ctFont.get()); + info->fCapHeight = (int16_t) CTFontGetCapHeight(ctFont.get()); + CGRect bbox = CTFontGetBoundingBox(ctFont.get()); + + SkRect r; + r.setLTRB(SkScalarFromCGFloat(SkCGRectGetMinX(bbox)), // Left + SkScalarFromCGFloat(SkCGRectGetMaxY(bbox)), // Top + SkScalarFromCGFloat(SkCGRectGetMaxX(bbox)), // Right + SkScalarFromCGFloat(SkCGRectGetMinY(bbox))); // Bottom + + r.roundOut(&(info->fBBox)); + + // Figure out a good guess for StemV - Min width of i, I, !, 1. + // This probably isn't very good with an italic font. + int16_t min_width = SHRT_MAX; + info->fStemV = 0; + static const UniChar stem_chars[] = {'i', 'I', '!', '1'}; + const size_t count = sizeof(stem_chars) / sizeof(stem_chars[0]); + CGGlyph glyphs[count]; + CGRect boundingRects[count]; + if (CTFontGetGlyphsForCharacters(ctFont.get(), stem_chars, glyphs, count)) { + CTFontGetBoundingRectsForGlyphs(ctFont.get(), kCTFontOrientationHorizontal, + glyphs, boundingRects, count); + for (size_t i = 0; i < count; i++) { + int16_t width = (int16_t) boundingRects[i].size.width; + if (width > 0 && width < min_width) { + min_width = width; + info->fStemV = min_width; + } + } + } + return info; +} + +static SK_SFNT_ULONG get_font_type_tag(CTFontRef ctFont) { + SkUniqueCFRef fontFormatRef( + static_cast(CTFontCopyAttribute(ctFont, kCTFontFormatAttribute))); + if (!fontFormatRef) { + return 0; + } + + SInt32 fontFormatValue; + if (!CFNumberGetValue(fontFormatRef.get(), kCFNumberSInt32Type, &fontFormatValue)) { + return 0; + } + + switch (fontFormatValue) { + case kCTFontFormatOpenTypePostScript: + return SkSFNTHeader::fontType_OpenTypeCFF::TAG; + case kCTFontFormatOpenTypeTrueType: + return SkSFNTHeader::fontType_WindowsTrueType::TAG; + case kCTFontFormatTrueType: + return SkSFNTHeader::fontType_MacTrueType::TAG; + case kCTFontFormatPostScript: + return SkSFNTHeader::fontType_PostScript::TAG; + case kCTFontFormatBitmap: + return SkSFNTHeader::fontType_MacTrueType::TAG; + case kCTFontFormatUnrecognized: + default: + return 0; + } +} + +std::unique_ptr SkTypeface_Mac::onOpenStream(int* ttcIndex) const { + *ttcIndex = 0; + + fInitStream([this]{ + if (fStream) { + return; + } + + SK_SFNT_ULONG fontType = get_font_type_tag(fFontRef.get()); + + // get table tags + int numTables = this->countTables(); + SkTDArray tableTags; + tableTags.setCount(numTables); + this->getTableTags(tableTags.begin()); + + // CT seems to be unreliable in being able to obtain the type, + // even if all we want is the first four bytes of the font resource. + // Just the presence of the FontForge 'FFTM' table seems to throw it off. + if (fontType == 0) { + fontType = SkSFNTHeader::fontType_WindowsTrueType::TAG; + + // see https://skbug.com/7630#c7 + bool couldBeCFF = false; + constexpr SkFontTableTag CFFTag = SkSetFourByteTag('C', 'F', 'F', ' '); + constexpr SkFontTableTag CFF2Tag = SkSetFourByteTag('C', 'F', 'F', '2'); + for (int tableIndex = 0; tableIndex < numTables; ++tableIndex) { + if (CFFTag == tableTags[tableIndex] || CFF2Tag == tableTags[tableIndex]) { + couldBeCFF = true; + } + } + if (couldBeCFF) { + fontType = SkSFNTHeader::fontType_OpenTypeCFF::TAG; + } + } + + // Sometimes CoreGraphics incorrectly thinks a font is kCTFontFormatPostScript. + // It is exceedingly unlikely that this is the case, so double check + // (see https://crbug.com/809763 ). + if (fontType == SkSFNTHeader::fontType_PostScript::TAG) { + // see if there are any required 'typ1' tables (see Adobe Technical Note #5180) + bool couldBeTyp1 = false; + constexpr SkFontTableTag TYPE1Tag = SkSetFourByteTag('T', 'Y', 'P', '1'); + constexpr SkFontTableTag CIDTag = SkSetFourByteTag('C', 'I', 'D', ' '); + for (int tableIndex = 0; tableIndex < numTables; ++tableIndex) { + if (TYPE1Tag == tableTags[tableIndex] || CIDTag == tableTags[tableIndex]) { + couldBeTyp1 = true; + } + } + if (!couldBeTyp1) { + fontType = SkSFNTHeader::fontType_OpenTypeCFF::TAG; + } + } + + // get the table sizes and accumulate the total size of the font + SkTDArray tableSizes; + size_t totalSize = sizeof(SkSFNTHeader) + sizeof(SkSFNTHeader::TableDirectoryEntry) * numTables; + for (int tableIndex = 0; tableIndex < numTables; ++tableIndex) { + size_t tableSize = this->getTableSize(tableTags[tableIndex]); + totalSize += (tableSize + 3) & ~3; + *tableSizes.append() = tableSize; + } + + // reserve memory for stream, and zero it (tables must be zero padded) + fStream.reset(new SkMemoryStream(totalSize)); + char* dataStart = (char*)fStream->getMemoryBase(); + sk_bzero(dataStart, totalSize); + char* dataPtr = dataStart; + + // compute font header entries + uint16_t entrySelector = 0; + uint16_t searchRange = 1; + while (searchRange < numTables >> 1) { + entrySelector++; + searchRange <<= 1; + } + searchRange <<= 4; + uint16_t rangeShift = (numTables << 4) - searchRange; + + // write font header + SkSFNTHeader* header = (SkSFNTHeader*)dataPtr; + header->fontType = fontType; + header->numTables = SkEndian_SwapBE16(numTables); + header->searchRange = SkEndian_SwapBE16(searchRange); + header->entrySelector = SkEndian_SwapBE16(entrySelector); + header->rangeShift = SkEndian_SwapBE16(rangeShift); + dataPtr += sizeof(SkSFNTHeader); + + // write tables + SkSFNTHeader::TableDirectoryEntry* entry = (SkSFNTHeader::TableDirectoryEntry*)dataPtr; + dataPtr += sizeof(SkSFNTHeader::TableDirectoryEntry) * numTables; + for (int tableIndex = 0; tableIndex < numTables; ++tableIndex) { + size_t tableSize = tableSizes[tableIndex]; + this->getTableData(tableTags[tableIndex], 0, tableSize, dataPtr); + entry->tag = SkEndian_SwapBE32(tableTags[tableIndex]); + entry->checksum = SkEndian_SwapBE32(SkOTUtils::CalcTableChecksum((SK_OT_ULONG*)dataPtr, + tableSize)); + entry->offset = SkEndian_SwapBE32(SkToU32(dataPtr - dataStart)); + entry->logicalLength = SkEndian_SwapBE32(SkToU32(tableSize)); + + dataPtr += (tableSize + 3) & ~3; + ++entry; + } + }); + return fStream->duplicate(); +} + +static bool get_variations(CTFontRef ctFont, CFIndex* ctAxisCount, + SkAutoSTMalloc<4, SkFixed>* axisValues) +{ + SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(ctFont)); + if (!ctAxes) { + return false; + } + *ctAxisCount = CFArrayGetCount(ctAxes.get()); + axisValues->reset(*ctAxisCount); + + // On 10.12 and later, this only returns non-default variations. + SkUniqueCFRef ctVariation(CTFontCopyVariation(ctFont)); + if (!ctVariation) { + return false; + } + + for (int i = 0; i < *ctAxisCount; ++i) { + CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); + if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { + return false; + } + CFDictionaryRef axisInfoDict = static_cast(axisInfo); + + CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); + if (!tag) { + return false; + } + + CGFloat variationCGFloat; + CFTypeRef variationValue = CFDictionaryGetValue(ctVariation.get(), tag); + if (variationValue) { + if (CFGetTypeID(variationValue) != CFNumberGetTypeID()) { + return false; + } + CFNumberRef variationNumber = static_cast(variationValue); + if (!CFNumberGetValue(variationNumber, kCFNumberCGFloatType, &variationCGFloat)) { + return false; + } + } else { + CFTypeRef def = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisDefaultValueKey); + if (!def || CFGetTypeID(def) != CFNumberGetTypeID()) { + return false; + } + CFNumberRef defNumber = static_cast(def); + if (!CFNumberGetValue(defNumber, kCFNumberCGFloatType, &variationCGFloat)) { + return false; + } + } + if (variationCGFloat < SkFixedToDouble(SK_FixedMin) || + SkFixedToDouble(SK_FixedMax) < variationCGFloat) { + return false; + } + (*axisValues)[(int)i] = SkDoubleToFixed(variationCGFloat); + } + return true; +} +std::unique_ptr SkTypeface_Mac::onMakeFontData() const { + int index; + std::unique_ptr stream(this->onOpenStream(&index)); + + CFIndex cgAxisCount; + SkAutoSTMalloc<4, SkFixed> axisValues; + if (get_variations(fFontRef.get(), &cgAxisCount, &axisValues)) { + return std::make_unique(std::move(stream), index, + axisValues.get(), cgAxisCount); + } + return std::make_unique(std::move(stream), index, nullptr, 0); +} + +int SkTypeface_Mac::onGetVariationDesignPosition( + SkFontArguments::VariationPosition::Coordinate coordinates[], int coordinateCount) const +{ + SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(fFontRef.get())); + if (!ctAxes) { + return -1; + } + CFIndex axisCount = CFArrayGetCount(ctAxes.get()); + if (!coordinates || coordinateCount < axisCount) { + return axisCount; + } + + // On 10.12 and later, this only returns non-default variations. + SkUniqueCFRef ctVariation(CTFontCopyVariation(fFontRef.get())); + if (!ctVariation) { + return -1; + } + + for (int i = 0; i < axisCount; ++i) { + CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); + if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { + return -1; + } + CFDictionaryRef axisInfoDict = static_cast(axisInfo); + + CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); + if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { + return -1; + } + CFNumberRef tagNumber = static_cast(tag); + int64_t tagLong; + if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { + return -1; + } + coordinates[i].axis = tagLong; + + CGFloat variationCGFloat; + CFTypeRef variationValue = CFDictionaryGetValue(ctVariation.get(), tagNumber); + if (variationValue) { + if (CFGetTypeID(variationValue) != CFNumberGetTypeID()) { + return -1; + } + CFNumberRef variationNumber = static_cast(variationValue); + if (!CFNumberGetValue(variationNumber, kCFNumberCGFloatType, &variationCGFloat)) { + return -1; + } + } else { + CFTypeRef def = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisDefaultValueKey); + if (!def || CFGetTypeID(def) != CFNumberGetTypeID()) { + return -1; + } + CFNumberRef defNumber = static_cast(def); + if (!CFNumberGetValue(defNumber, kCFNumberCGFloatType, &variationCGFloat)) { + return -1; + } + } + coordinates[i].value = SkScalarFromCGFloat(variationCGFloat); + } + return axisCount; +} + +int SkTypeface_Mac::onGetUPEM() const { + SkUniqueCFRef cgFont(CTFontCopyGraphicsFont(fFontRef.get(), nullptr)); + return CGFontGetUnitsPerEm(cgFont.get()); +} + +SkTypeface::LocalizedStrings* SkTypeface_Mac::onCreateFamilyNameIterator() const { + sk_sp nameIter = + SkOTUtils::LocalizedStrings_NameTable::MakeForFamilyNames(*this); + if (!nameIter) { + CFStringRef cfLanguageRaw; + SkUniqueCFRef cfFamilyName( + CTFontCopyLocalizedName(fFontRef.get(), kCTFontFamilyNameKey, &cfLanguageRaw)); + SkUniqueCFRef cfLanguage(cfLanguageRaw); + + SkString skLanguage; + SkString skFamilyName; + if (cfLanguage) { + SkStringFromCFString(cfLanguage.get(), &skLanguage); + } else { + skLanguage = "und"; //undetermined + } + if (cfFamilyName) { + SkStringFromCFString(cfFamilyName.get(), &skFamilyName); + } + + nameIter = sk_make_sp(skFamilyName, skLanguage); + } + return nameIter.release(); +} + +int SkTypeface_Mac::onGetTableTags(SkFontTableTag tags[]) const { + SkUniqueCFRef cfArray( + CTFontCopyAvailableTables(fFontRef.get(), kCTFontTableOptionNoOptions)); + if (!cfArray) { + return 0; + } + int count = SkToInt(CFArrayGetCount(cfArray.get())); + if (tags) { + for (int i = 0; i < count; ++i) { + uintptr_t fontTag = reinterpret_cast( + CFArrayGetValueAtIndex(cfArray.get(), i)); + tags[i] = static_cast(fontTag); + } + } + return count; +} + +// If, as is the case with web fonts, the CTFont data isn't available, +// the CGFont data may work. While the CGFont may always provide the +// right result, leave the CTFont code path to minimize disruption. +static SkUniqueCFRef copy_table_from_font(CTFontRef ctFont, SkFontTableTag tag) { + SkUniqueCFRef data(CTFontCopyTable(ctFont, (CTFontTableTag) tag, + kCTFontTableOptionNoOptions)); + if (!data) { + SkUniqueCFRef cgFont(CTFontCopyGraphicsFont(ctFont, nullptr)); + data.reset(CGFontCopyTableForTag(cgFont.get(), tag)); + } + return data; +} + +size_t SkTypeface_Mac::onGetTableData(SkFontTableTag tag, size_t offset, + size_t length, void* dstData) const { + SkUniqueCFRef srcData = copy_table_from_font(fFontRef.get(), tag); + if (!srcData) { + return 0; + } + + size_t srcSize = CFDataGetLength(srcData.get()); + if (offset >= srcSize) { + return 0; + } + if (length > srcSize - offset) { + length = srcSize - offset; + } + if (dstData) { + memcpy(dstData, CFDataGetBytePtr(srcData.get()) + offset, length); + } + return length; +} + +sk_sp SkTypeface_Mac::onCopyTableData(SkFontTableTag tag) const { + SkUniqueCFRef srcData = copy_table_from_font(fFontRef.get(), tag); + if (!srcData) { + return nullptr; + } + const UInt8* data = CFDataGetBytePtr(srcData.get()); + CFIndex length = CFDataGetLength(srcData.get()); + return SkData::MakeWithProc(data, length, + [](const void*, void* ctx) { + CFRelease((CFDataRef)ctx); + }, (void*)srcData.release()); +} + +SkScalerContext* SkTypeface_Mac::onCreateScalerContext(const SkScalerContextEffects& effects, + const SkDescriptor* desc) const { + return new SkScalerContext_Mac(sk_ref_sp(const_cast(this)), effects, desc); +} + +void SkTypeface_Mac::onFilterRec(SkScalerContextRec* rec) const { + if (rec->fFlags & SkScalerContext::kLCD_BGROrder_Flag || + rec->fFlags & SkScalerContext::kLCD_Vertical_Flag) + { + rec->fMaskFormat = SkMask::kA8_Format; + // Render the glyphs as close as possible to what was requested. + // The above turns off subpixel rendering, but the user requested it. + // Normal hinting will cause the A8 masks to be generated from CoreGraphics subpixel masks. + // See comments below for more details. + rec->setHinting(SkFontHinting::kNormal); + } + + unsigned flagsWeDontSupport = SkScalerContext::kForceAutohinting_Flag | + SkScalerContext::kLCD_BGROrder_Flag | + SkScalerContext::kLCD_Vertical_Flag; + + rec->fFlags &= ~flagsWeDontSupport; + + const SkCTFontSmoothBehavior smoothBehavior = SkCTFontGetSmoothBehavior(); + + // Only two levels of hinting are supported. + // kNo_Hinting means avoid CoreGraphics outline dilation (smoothing). + // kNormal_Hinting means CoreGraphics outline dilation (smoothing) is allowed. + if (rec->getHinting() != SkFontHinting::kNone) { + rec->setHinting(SkFontHinting::kNormal); + } + // If smoothing has no effect, don't request it. + if (smoothBehavior == SkCTFontSmoothBehavior::none) { + rec->setHinting(SkFontHinting::kNone); + } + + // FIXME: lcd smoothed un-hinted rasterization unsupported. + // Tracked by http://code.google.com/p/skia/issues/detail?id=915 . + // There is no current means to honor a request for unhinted lcd, + // so arbitrarilly ignore the hinting request and honor lcd. + + // Hinting and smoothing should be orthogonal, but currently they are not. + // CoreGraphics has no API to influence hinting. However, its lcd smoothed + // output is drawn from auto-dilated outlines (the amount of which is + // determined by AppleFontSmoothing). Its regular anti-aliased output is + // drawn from un-dilated outlines. + + // The behavior of Skia is as follows: + // [AA][no-hint]: generate AA using CoreGraphic's AA output. + // [AA][yes-hint]: use CoreGraphic's LCD output and reduce it to a single + // channel. This matches [LCD][yes-hint] in weight. + // [LCD][no-hint]: currently unable to honor, and must pick which to respect. + // Currently side with LCD, effectively ignoring the hinting setting. + // [LCD][yes-hint]: generate LCD using CoreGraphic's LCD output. + if (rec->fMaskFormat == SkMask::kLCD16_Format) { + if (smoothBehavior == SkCTFontSmoothBehavior::subpixel) { + //CoreGraphics creates 555 masks for smoothed text anyway. + rec->fMaskFormat = SkMask::kLCD16_Format; + rec->setHinting(SkFontHinting::kNormal); + } else { + rec->fMaskFormat = SkMask::kA8_Format; + if (smoothBehavior != SkCTFontSmoothBehavior::none) { + rec->setHinting(SkFontHinting::kNormal); + } + } + } + + // CoreText provides no information as to whether a glyph will be color or not. + // Fonts may mix outlines and bitmaps, so information is needed on a glyph by glyph basis. + // If a font contains an 'sbix' table, consider it to be a color font, and disable lcd. + if (fHasColorGlyphs) { + rec->fMaskFormat = SkMask::kARGB32_Format; + } + + // Unhinted A8 masks (those not derived from LCD masks) must respect SK_GAMMA_APPLY_TO_A8. + // All other masks can use regular gamma. + if (SkMask::kA8_Format == rec->fMaskFormat && SkFontHinting::kNone == rec->getHinting()) { +#ifndef SK_GAMMA_APPLY_TO_A8 + // SRGBTODO: Is this correct? Do we want contrast boost? + rec->ignorePreBlend(); +#endif + } else { + SkColor color = rec->getLuminanceColor(); + if (smoothBehavior == SkCTFontSmoothBehavior::some) { + // CoreGraphics smoothed text without subpixel coverage blitting goes from a gamma of + // 2.0 for black foreground to a gamma of 1.0 for white foreground. Emulate this + // through the mask gamma by reducing the color values to 1/2. + color = SkColorSetRGB(SkColorGetR(color) * 1/2, + SkColorGetG(color) * 1/2, + SkColorGetB(color) * 1/2); + } else if (smoothBehavior == SkCTFontSmoothBehavior::subpixel) { + // CoreGraphics smoothed text with subpixel coverage blitting goes from a gamma of + // 2.0 for black foreground to a gamma of ~1.4? for white foreground. Emulate this + // through the mask gamma by reducing the color values to 3/4. + color = SkColorSetRGB(SkColorGetR(color) * 3/4, + SkColorGetG(color) * 3/4, + SkColorGetB(color) * 3/4); + } + rec->setLuminanceColor(color); + + // CoreGraphics dialates smoothed text to provide contrast. + rec->setContrast(0); + } +} + +/** Takes ownership of the CFStringRef. */ +static const char* get_str(CFStringRef ref, SkString* str) { + if (nullptr == ref) { + return nullptr; + } + SkStringFromCFString(ref, str); + CFRelease(ref); + return str->c_str(); +} + +void SkTypeface_Mac::onGetFamilyName(SkString* familyName) const { + get_str(CTFontCopyFamilyName(fFontRef.get()), familyName); +} + +void SkTypeface_Mac::onGetFontDescriptor(SkFontDescriptor* desc, + bool* isLocalStream) const { + SkString tmpStr; + + desc->setFamilyName(get_str(CTFontCopyFamilyName(fFontRef.get()), &tmpStr)); + desc->setFullName(get_str(CTFontCopyFullName(fFontRef.get()), &tmpStr)); + desc->setPostscriptName(get_str(CTFontCopyPostScriptName(fFontRef.get()), &tmpStr)); + desc->setStyle(this->fontStyle()); + *isLocalStream = fIsFromStream; +} + +void SkTypeface_Mac::onCharsToGlyphs(const SkUnichar uni[], int count, SkGlyphID glyphs[]) const { + // Undocumented behavior of CTFontGetGlyphsForCharacters with non-bmp code points: + // When a surrogate pair is detected, the glyph index used is the index of the high surrogate. + // It is documented that if a mapping is unavailable, the glyph will be set to 0. + + SkAutoSTMalloc<1024, UniChar> charStorage; + const UniChar* src; // UniChar is a UTF-16 16-bit code unit. + int srcCount; + const SkUnichar* utf32 = reinterpret_cast(uni); + UniChar* utf16 = charStorage.reset(2 * count); + src = utf16; + for (int i = 0; i < count; ++i) { + utf16 += SkUTF::ToUTF16(utf32[i], utf16); + } + srcCount = SkToInt(utf16 - src); + + // If there are any non-bmp code points, the provided 'glyphs' storage will be inadequate. + SkAutoSTMalloc<1024, uint16_t> glyphStorage; + uint16_t* macGlyphs = glyphs; + if (srcCount > count) { + macGlyphs = glyphStorage.reset(srcCount); + } + + CTFontGetGlyphsForCharacters(fFontRef.get(), src, macGlyphs, srcCount); + + // If there were any non-bmp, then copy and compact. + // If all are bmp, 'glyphs' already contains the compact glyphs. + // If some are non-bmp, copy and compact into 'glyphs'. + if (srcCount > count) { + SkASSERT(glyphs != macGlyphs); + int extra = 0; + for (int i = 0; i < count; ++i) { + glyphs[i] = macGlyphs[i + extra]; + if (SkUTF16_IsLeadingSurrogate(src[i + extra])) { + ++extra; + } + } + } else { + SkASSERT(glyphs == macGlyphs); + } +} + +int SkTypeface_Mac::onCountGlyphs() const { + return SkToInt(CTFontGetGlyphCount(fFontRef.get())); +} + +/** Creates a dictionary suitable for setting the axes on a CTFont. */ +CTFontVariation SkCTVariationFromSkFontArguments(CTFontRef ct, const SkFontArguments& args) { + OpszVariation opsz; + constexpr const SkFourByteTag opszTag = SkSetFourByteTag('o','p','s','z'); + + SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(ct)); + if (!ctAxes) { + return CTFontVariation(); + } + CFIndex axisCount = CFArrayGetCount(ctAxes.get()); + + const SkFontArguments::VariationPosition position = args.getVariationDesignPosition(); + + SkUniqueCFRef dict( + CFDictionaryCreateMutable(kCFAllocatorDefault, axisCount, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + + for (int i = 0; i < axisCount; ++i) { + CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); + if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { + return CTFontVariation(); + } + CFDictionaryRef axisInfoDict = static_cast(axisInfo); + + CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); + if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { + return CTFontVariation(); + } + CFNumberRef tagNumber = static_cast(tag); + int64_t tagLong; + if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { + return CTFontVariation(); + } + + // The variation axes can be set to any value, but cg will effectively pin them. + // Pin them here to normalize. + CFTypeRef min = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMinimumValueKey); + CFTypeRef max = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMaximumValueKey); + CFTypeRef def = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisDefaultValueKey); + if (!min || CFGetTypeID(min) != CFNumberGetTypeID() || + !max || CFGetTypeID(max) != CFNumberGetTypeID() || + !def || CFGetTypeID(def) != CFNumberGetTypeID()) + { + return CTFontVariation(); + } + CFNumberRef minNumber = static_cast(min); + CFNumberRef maxNumber = static_cast(max); + CFNumberRef defNumber = static_cast(def); + double minDouble; + double maxDouble; + double defDouble; + if (!CFNumberGetValue(minNumber, kCFNumberDoubleType, &minDouble) || + !CFNumberGetValue(maxNumber, kCFNumberDoubleType, &maxDouble) || + !CFNumberGetValue(defNumber, kCFNumberDoubleType, &defDouble)) + { + return CTFontVariation(); + } + + double value = defDouble; + // The position may be over specified. If there are multiple values for a given axis, + // use the last one since that's what css-fonts-4 requires. + for (int j = position.coordinateCount; j --> 0;) { + if (position.coordinates[j].axis == tagLong) { + value = SkTPin(SkScalarToDouble(position.coordinates[j].value), + minDouble, maxDouble); + if (tagLong == opszTag) { + opsz.isSet = true; + } + break; + } + } + if (tagLong == opszTag) { + opsz.value = value; + } + SkUniqueCFRef valueNumber( + CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &value)); + CFDictionaryAddValue(dict.get(), tagNumber, valueNumber.get()); + } + return { SkUniqueCFRef(std::move(dict)), opsz }; +} + +sk_sp SkTypeface_Mac::onMakeClone(const SkFontArguments& args) const { + CTFontVariation ctVariation = SkCTVariationFromSkFontArguments(fFontRef.get(), args); + + SkUniqueCFRef ctVariant; + if (ctVariation.dict) { + SkUniqueCFRef attributes( + CFDictionaryCreateMutable(kCFAllocatorDefault, 0, + &kCFTypeDictionaryKeyCallBacks, + &kCFTypeDictionaryValueCallBacks)); + CFDictionaryAddValue(attributes.get(), + kCTFontVariationAttribute, ctVariation.dict.get()); + SkUniqueCFRef varDesc( + CTFontDescriptorCreateWithAttributes(attributes.get())); + ctVariant.reset(CTFontCreateCopyWithAttributes(fFontRef.get(), 0, nullptr, varDesc.get())); + } else { + ctVariant.reset((CTFontRef)CFRetain(fFontRef.get())); + } + if (!ctVariant) { + return nullptr; + } + + return SkTypeface_Mac::Make(std::move(ctVariant), ctVariation.opsz, + fStream ? fStream->duplicate() : nullptr); +} + +int SkTypeface_Mac::onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[], + int parameterCount) const +{ + SkUniqueCFRef ctAxes(CTFontCopyVariationAxes(fFontRef.get())); + if (!ctAxes) { + return -1; + } + CFIndex axisCount = CFArrayGetCount(ctAxes.get()); + + if (!parameters || parameterCount < axisCount) { + return axisCount; + } + + // Added in 10.13 + static CFStringRef* kCTFontVariationAxisHiddenKeyPtr = + static_cast(dlsym(RTLD_DEFAULT, "kCTFontVariationAxisHiddenKey")); + + for (int i = 0; i < axisCount; ++i) { + CFTypeRef axisInfo = CFArrayGetValueAtIndex(ctAxes.get(), i); + if (CFDictionaryGetTypeID() != CFGetTypeID(axisInfo)) { + return -1; + } + CFDictionaryRef axisInfoDict = static_cast(axisInfo); + + CFTypeRef tag = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisIdentifierKey); + if (!tag || CFGetTypeID(tag) != CFNumberGetTypeID()) { + return -1; + } + CFNumberRef tagNumber = static_cast(tag); + int64_t tagLong; + if (!CFNumberGetValue(tagNumber, kCFNumberSInt64Type, &tagLong)) { + return -1; + } + + CFTypeRef min = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMinimumValueKey); + CFTypeRef max = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisMaximumValueKey); + CFTypeRef def = CFDictionaryGetValue(axisInfoDict, kCTFontVariationAxisDefaultValueKey); + if (!min || CFGetTypeID(min) != CFNumberGetTypeID() || + !max || CFGetTypeID(max) != CFNumberGetTypeID() || + !def || CFGetTypeID(def) != CFNumberGetTypeID()) + { + return -1; + } + CFNumberRef minNumber = static_cast(min); + CFNumberRef maxNumber = static_cast(max); + CFNumberRef defNumber = static_cast(def); + double minDouble; + double maxDouble; + double defDouble; + if (!CFNumberGetValue(minNumber, kCFNumberDoubleType, &minDouble) || + !CFNumberGetValue(maxNumber, kCFNumberDoubleType, &maxDouble) || + !CFNumberGetValue(defNumber, kCFNumberDoubleType, &defDouble)) + { + return -1; + } + + SkFontParameters::Variation::Axis& skAxis = parameters[i]; + skAxis.tag = tagLong; + skAxis.min = minDouble; + skAxis.max = maxDouble; + skAxis.def = defDouble; + skAxis.setHidden(false); + if (kCTFontVariationAxisHiddenKeyPtr) { + CFTypeRef hidden = CFDictionaryGetValue(axisInfoDict,*kCTFontVariationAxisHiddenKeyPtr); + if (hidden) { + if (CFGetTypeID(hidden) != CFBooleanGetTypeID()) { + return -1; + } + CFBooleanRef hiddenBoolean = static_cast(hidden); + skAxis.setHidden(CFBooleanGetValue(hiddenBoolean)); + } + } + } + return axisCount; +} + +#endif diff --git a/src/ports/SkTypeface_mac_ct.h b/src/ports/SkTypeface_mac_ct.h new file mode 100644 index 0000000000000..49f55b384f3d0 --- /dev/null +++ b/src/ports/SkTypeface_mac_ct.h @@ -0,0 +1,128 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkTypeface_mac_ct_DEFINED +#define SkTypeface_mac_ct_DEFINED + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#include "include/core/SkFontArguments.h" +#include "include/core/SkFontParameters.h" +#include "include/core/SkFontStyle.h" +#include "include/core/SkRefCnt.h" +#include "include/core/SkScalar.h" +#include "include/core/SkStream.h" +#include "include/core/SkTypeface.h" +#include "include/private/SkOnce.h" +#include "src/utils/mac/SkUniqueCFRef.h" + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#include +#include +#include +#endif + +#include + +class SkData; +class SkDescriptor; +class SkFontData; +class SkFontDescriptor; +class SkScalerContext; +class SkString; +struct SkAdvancedTypefaceMetrics; +struct SkScalerContextEffects; +struct SkScalerContextRec; + +struct OpszVariation { + bool isSet = false; + double value = 0; +}; + +struct CTFontVariation { + SkUniqueCFRef dict; + OpszVariation opsz; +}; + +CTFontVariation SkCTVariationFromSkFontArguments(CTFontRef ct, const SkFontArguments& args); + +SkUniqueCFRef SkCTFontCreateExactCopy(CTFontRef baseFont, CGFloat textSize, + OpszVariation opsz); + +SkFontStyle SkCTFontDescriptorGetSkFontStyle(CTFontDescriptorRef desc, bool fromDataProvider); + +CGFloat SkCTFontCTWeightForCSSWeight(int fontstyleWeight); +CGFloat SkCTFontCTWidthForCSSWidth(int fontstyleWidth); + +void SkStringFromCFString(CFStringRef src, SkString* dst); + +class SkTypeface_Mac : public SkTypeface { +private: + SkTypeface_Mac(SkUniqueCFRef fontRef, const SkFontStyle& fs, bool isFixedPitch, + OpszVariation opszVariation, std::unique_ptr providedData) + : SkTypeface(fs, isFixedPitch) + , fFontRef(std::move(fontRef)) + , fOpszVariation(opszVariation) + , fHasColorGlyphs( + SkToBool(CTFontGetSymbolicTraits(fFontRef.get()) & kCTFontColorGlyphsTrait)) + , fStream(std::move(providedData)) + , fIsFromStream(fStream) + { + SkASSERT(fFontRef); + } + +public: + static sk_sp Make(SkUniqueCFRef font, + OpszVariation opszVariation, + std::unique_ptr providedData); + + SkUniqueCFRef fFontRef; + const OpszVariation fOpszVariation; + const bool fHasColorGlyphs; + +protected: + int onGetUPEM() const override; + std::unique_ptr onOpenStream(int* ttcIndex) const override; + std::unique_ptr onMakeFontData() const override; + int onGetVariationDesignPosition(SkFontArguments::VariationPosition::Coordinate coordinates[], + int coordinateCount) const override; + void onGetFamilyName(SkString* familyName) const override; + SkTypeface::LocalizedStrings* onCreateFamilyNameIterator() const override; + int onGetTableTags(SkFontTableTag tags[]) const override; + size_t onGetTableData(SkFontTableTag, size_t offset, size_t length, void* data) const override; + sk_sp onCopyTableData(SkFontTableTag) const override; + SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&, + const SkDescriptor*) const override; + void onFilterRec(SkScalerContextRec*) const override; + void onGetFontDescriptor(SkFontDescriptor*, bool*) const override; + void getGlyphToUnicodeMap(SkUnichar*) const override; + std::unique_ptr onGetAdvancedMetrics() const override; + void onCharsToGlyphs(const SkUnichar* chars, int count, SkGlyphID glyphs[]) const override; + int onCountGlyphs() const override; + void getPostScriptGlyphNames(SkString*) const override {} + int onGetVariationDesignParameters(SkFontParameters::Variation::Axis parameters[], + int parameterCount) const override; + sk_sp onMakeClone(const SkFontArguments&) const override; + + void* onGetCTFontRef() const override { return (void*)fFontRef.get(); } + +private: + mutable std::unique_ptr fStream; + bool fIsFromStream; + mutable SkOnce fInitStream; + + typedef SkTypeface INHERITED; +}; + +#endif +#endif //SkTypeface_mac_ct_DEFINED diff --git a/src/sfnt/SkOTTable_name.cpp b/src/sfnt/SkOTTable_name.cpp index c9d47b8f82ead..ecb3ce4bdd839 100644 --- a/src/sfnt/SkOTTable_name.cpp +++ b/src/sfnt/SkOTTable_name.cpp @@ -506,6 +506,7 @@ bool SkOTTableName::Iterator::next(SkOTTableName::Iterator::Record& record) { record.name.reset(); break; // continue? } + [[fallthrough]]; case SkOTTableName::Record::PlatformID::Unicode: case SkOTTableName::Record::PlatformID::ISO: SkString_from_UTF16BE(nameString, nameLength, record.name); diff --git a/src/shaders/SkColorFilterShader.cpp b/src/shaders/SkColorFilterShader.cpp index 6b39bc67b7a8e..95bdcc1cf8148 100644 --- a/src/shaders/SkColorFilterShader.cpp +++ b/src/shaders/SkColorFilterShader.cpp @@ -8,6 +8,7 @@ #include "include/core/SkShader.h" #include "include/core/SkString.h" #include "src/core/SkArenaAlloc.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkRasterPipeline.h" #include "src/core/SkReadBuffer.h" #include "src/core/SkVM.h" @@ -22,7 +23,7 @@ SkColorFilterShader::SkColorFilterShader(sk_sp shader, float alpha, sk_sp filter) : fShader(std::move(shader)) - , fFilter(std::move(filter)) + , fFilter(as_CFB_sp(std::move(filter))) , fAlpha (alpha) { SkASSERT(fShader); @@ -39,9 +40,7 @@ sk_sp SkColorFilterShader::CreateProc(SkReadBuffer& buffer) { } bool SkColorFilterShader::isOpaque() const { - return fShader->isOpaque() - && fAlpha == 1.0f - && (fFilter->getFlags() & SkColorFilter::kAlphaUnchanged_Flag) != 0; + return fShader->isOpaque() && fAlpha == 1.0f && as_CFB(fFilter)->isAlphaUnchanged(); } void SkColorFilterShader::flatten(SkWriteBuffer& buffer) const { @@ -62,12 +61,15 @@ bool SkColorFilterShader::onAppendStages(const SkStageRec& rec) const { } skvm::Color SkColorFilterShader::onProgram(skvm::Builder* p, - skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& matrices, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { // Run the shader. - skvm::Color c = as_SB(fShader)->program(p, x,y, paint, ctm,localM, quality,dst, uniforms,alloc); + skvm::Color c = as_SB(fShader)->program(p, device,local, paint, + matrices,localM, + quality,dst, + uniforms,alloc); if (!c) { return {}; } @@ -91,21 +93,19 @@ skvm::Color SkColorFilterShader::onProgram(skvm::Builder* p, std::unique_ptr SkColorFilterShader::asFragmentProcessor( const GrFPArgs& args) const { - auto fp1 = as_SB(fShader)->asFragmentProcessor(args); - if (!fp1) { + auto shaderFP = as_SB(fShader)->asFragmentProcessor(args); + if (!shaderFP) { return nullptr; } // TODO I guess, but it shouldn't come up as used today. SkASSERT(fAlpha == 1.0f); - auto fp2 = fFilter->asFragmentProcessor(args.fContext, *args.fDstColorInfo); - if (!fp2) { - return fp1; - } - - std::unique_ptr fpSeries[] = { std::move(fp1), std::move(fp2) }; - return GrFragmentProcessor::RunInSeries(fpSeries, 2); + auto [success, fp] = fFilter->asFragmentProcessor(std::move(shaderFP), args.fContext, + *args.fDstColorInfo); + // If the filter FP could not be created, we still want to return the shader FP, so checking + // success can be omitted here. + return std::move(fp); } #endif diff --git a/src/shaders/SkColorFilterShader.h b/src/shaders/SkColorFilterShader.h index e1d470086d494..c3bd0b081fc9c 100644 --- a/src/shaders/SkColorFilterShader.h +++ b/src/shaders/SkColorFilterShader.h @@ -8,7 +8,7 @@ #ifndef SkColorFilterShader_DEFINED #define SkColorFilterShader_DEFINED -#include "include/core/SkColorFilter.h" +#include "src/core/SkColorFilterBase.h" #include "src/shaders/SkShaderBase.h" class SkArenaAlloc; @@ -26,16 +26,16 @@ class SkColorFilterShader : public SkShaderBase { void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc*) const override; SK_FLATTENABLE_HOOKS(SkColorFilterShader) - sk_sp fShader; - sk_sp fFilter; - float fAlpha; + sk_sp fShader; + sk_sp fFilter; + float fAlpha; typedef SkShaderBase INHERITED; }; diff --git a/src/shaders/SkColorShader.cpp b/src/shaders/SkColorShader.cpp index 8314998927500..8afdda1128e7f 100644 --- a/src/shaders/SkColorShader.cpp +++ b/src/shaders/SkColorShader.cpp @@ -92,16 +92,18 @@ bool SkColor4Shader::onAppendStages(const SkStageRec& rec) const { } skvm::Color SkColorShader::onProgram(skvm::Builder* p, - skvm::F32 /*x*/, skvm::F32 /*y*/, skvm::Color /*paint*/, - const SkMatrix& /*ctm*/, const SkMatrix* /*localM*/, + skvm::Coord /*device*/, skvm::Coord /*local*/, + skvm::Color /*paint*/, + const SkMatrixProvider&, const SkMatrix* /*localM*/, SkFilterQuality /*quality*/, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc*) const { return p->uniformPremul(SkColor4f::FromColor(fColor), sk_srgb_singleton(), uniforms, dst.colorSpace()); } skvm::Color SkColor4Shader::onProgram(skvm::Builder* p, - skvm::F32 /*x*/, skvm::F32 /*y*/, skvm::Color /*paint*/, - const SkMatrix& /*ctm*/, const SkMatrix* /*localM*/, + skvm::Coord /*device*/, skvm::Coord /*local*/, + skvm::Color /*paint*/, + const SkMatrixProvider&, const SkMatrix* /*localM*/, SkFilterQuality /*quality*/, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc*) const { return p->uniformPremul(fColor, fColorSpace.get(), @@ -118,7 +120,8 @@ skvm::Color SkColor4Shader::onProgram(skvm::Builder* p, std::unique_ptr SkColorShader::asFragmentProcessor( const GrFPArgs& args) const { SkPMColor4f color = SkColorToPMColor4f(fColor, *args.fDstColorInfo); - return GrConstColorProcessor::Make(color, GrConstColorProcessor::InputMode::kModulateA); + return GrConstColorProcessor::Make(/*inputFP=*/nullptr, color, + GrConstColorProcessor::InputMode::kModulateA); } std::unique_ptr SkColor4Shader::asFragmentProcessor( @@ -127,7 +130,7 @@ std::unique_ptr SkColor4Shader::asFragmentProcessor( args.fDstColorInfo->colorSpace(), kUnpremul_SkAlphaType }; SkColor4f color = fColor; steps.apply(color.vec()); - return GrConstColorProcessor::Make(color.premul(), + return GrConstColorProcessor::Make(/*inputFP=*/nullptr, color.premul(), GrConstColorProcessor::InputMode::kModulateA); } diff --git a/src/shaders/SkColorShader.h b/src/shaders/SkColorShader.h index 0e9225cb6dbd9..5b876655970d3 100644 --- a/src/shaders/SkColorShader.h +++ b/src/shaders/SkColorShader.h @@ -44,8 +44,8 @@ class SkColorShader : public SkShaderBase { bool onAppendStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc*) const override; @@ -69,8 +69,8 @@ class SkColor4Shader : public SkShaderBase { void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc*) const override; diff --git a/src/shaders/SkComposeShader.cpp b/src/shaders/SkComposeShader.cpp index 96ebf79726fc0..fa37f39d3039f 100644 --- a/src/shaders/SkComposeShader.cpp +++ b/src/shaders/SkComposeShader.cpp @@ -127,13 +127,23 @@ bool SkShader_Blend::onAppendStages(const SkStageRec& orig_rec) const { return true; } -skvm::Color SkShader_Blend::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, +static skvm::Color program_or_paint(const sk_sp& sh, skvm::Builder* p, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& mats, const SkMatrix* localM, + SkFilterQuality q, const SkColorInfo& dst, + skvm::Uniforms* uniforms, SkArenaAlloc* alloc) { + return sh ? as_SB(sh)->program(p, device,local, paint, mats,localM, q,dst, uniforms,alloc) + : p->premul(paint); +} + +skvm::Color SkShader_Blend::onProgram(skvm::Builder* p, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& mats, const SkMatrix* localM, SkFilterQuality q, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { skvm::Color d,s; - if ((d = as_SB(fDst)->program(p, x,y, paint, ctm,localM, q, dst, uniforms, alloc)) && - (s = as_SB(fSrc)->program(p, x,y, paint, ctm,localM, q, dst, uniforms, alloc))) + if ((d = program_or_paint(fDst, p, device,local, paint, mats,localM, q,dst, uniforms,alloc)) && + (s = program_or_paint(fSrc, p, device,local, paint, mats,localM, q,dst, uniforms,alloc))) { return p->blend(fMode, s,d); } @@ -167,13 +177,14 @@ bool SkShader_Lerp::onAppendStages(const SkStageRec& orig_rec) const { return true; } -skvm::Color SkShader_Lerp::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, +skvm::Color SkShader_Lerp::onProgram(skvm::Builder* p, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& mats, const SkMatrix* localM, SkFilterQuality q, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { skvm::Color d,s; - if ((d = as_SB(fDst)->program(p, x,y, paint, ctm,localM, q, dst, uniforms, alloc)) && - (s = as_SB(fSrc)->program(p, x,y, paint, ctm,localM, q, dst, uniforms, alloc))) + if ((d = program_or_paint(fDst, p, device,local, paint, mats,localM, q,dst, uniforms,alloc)) && + (s = program_or_paint(fSrc, p, device,local, paint, mats,localM, q,dst, uniforms,alloc))) { auto t = p->uniformF(uniforms->pushF(fWeight)); return { @@ -188,7 +199,7 @@ skvm::Color SkShader_Lerp::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/effects/GrXfermodeFragmentProcessor.h" #include "src/gpu/effects/generated/GrComposeLerpEffect.h" #include "src/gpu/effects/generated/GrConstColorProcessor.h" @@ -202,14 +213,7 @@ std::unique_ptr SkShader_Blend::asFragmentProcessor( const GrFPArgs::WithPreLocalMatrix args(orig_args, this->getLocalMatrix()); auto fpA = as_fp(args, fDst.get()); auto fpB = as_fp(args, fSrc.get()); - if (!fpA) { - return GrXfermodeFragmentProcessor::MakeFromSrcProcessor(std::move(fpB), fMode); - } - if (!fpB) { - return GrXfermodeFragmentProcessor::MakeFromDstProcessor(std::move(fpA), fMode); - } - return GrXfermodeFragmentProcessor::MakeFromTwoProcessors(std::move(fpB), - std::move(fpA), fMode); + return GrXfermodeFragmentProcessor::Make(std::move(fpB), std::move(fpA), fMode); } std::unique_ptr SkShader_Lerp::asFragmentProcessor( diff --git a/src/shaders/SkComposeShader.h b/src/shaders/SkComposeShader.h index dd36d38816a15..96ae0a04b51ee 100644 --- a/src/shaders/SkComposeShader.h +++ b/src/shaders/SkComposeShader.h @@ -27,8 +27,8 @@ class SkShader_Blend final : public SkShaderBase { SkShader_Blend(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality, const SkColorInfo& dst, skvm::Uniforms*, SkArenaAlloc*) const override; @@ -60,8 +60,8 @@ class SkShader_Lerp final : public SkShaderBase { SkShader_Lerp(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality, const SkColorInfo& dst, skvm::Uniforms*, SkArenaAlloc*) const override; diff --git a/src/shaders/SkEmptyShader.h b/src/shaders/SkEmptyShader.h index edd1e27dc2dc1..414be6c199d1d 100644 --- a/src/shaders/SkEmptyShader.h +++ b/src/shaders/SkEmptyShader.h @@ -37,9 +37,10 @@ class SkEmptyShader : public SkShaderBase { return false; } - skvm::Color onProgram(skvm::Builder*, skvm::F32, skvm::F32, skvm::Color, const SkMatrix&, - const SkMatrix*, SkFilterQuality, const SkColorInfo&, skvm::Uniforms*, - SkArenaAlloc*) const override; + skvm::Color onProgram(skvm::Builder*, skvm::Coord, skvm::Coord, skvm::Color, + const SkMatrixProvider&, const SkMatrix*, + SkFilterQuality, const SkColorInfo&, + skvm::Uniforms*, SkArenaAlloc*) const override; private: SK_FLATTENABLE_HOOKS(SkEmptyShader) diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp index a1a94cc985456..30946c6711edd 100755 --- a/src/shaders/SkImageShader.cpp +++ b/src/shaders/SkImageShader.cpp @@ -5,6 +5,8 @@ * found in the LICENSE file. */ +#include "src/shaders/SkImageShader.h" + #include "src/core/SkArenaAlloc.h" #include "src/core/SkBitmapController.h" #include "src/core/SkColorSpacePriv.h" @@ -13,12 +15,12 @@ #include "src/core/SkOpts.h" #include "src/core/SkRasterPipeline.h" #include "src/core/SkReadBuffer.h" +#include "src/core/SkScopeExit.h" #include "src/core/SkVM.h" #include "src/core/SkWriteBuffer.h" #include "src/image/SkImage_Base.h" #include "src/shaders/SkBitmapProcShader.h" #include "src/shaders/SkEmptyShader.h" -#include "src/shaders/SkImageShader.h" /** * We are faster in clamp, so always use that tiling when we can. @@ -37,11 +39,13 @@ static SkTileMode optimize(SkTileMode tm, int dimension) { SkImageShader::SkImageShader(sk_sp img, SkTileMode tmx, SkTileMode tmy, const SkMatrix* localMatrix, + FilterEnum filtering, bool clampAsIfUnpremul) : INHERITED(localMatrix) , fImage(std::move(img)) , fTileModeX(optimize(tmx, fImage->width())) , fTileModeY(optimize(tmy, fImage->height())) + , fFiltering(filtering) , fClampAsIfUnpremul(clampAsIfUnpremul) {} @@ -51,18 +55,26 @@ SkImageShader::SkImageShader(sk_sp img, sk_sp SkImageShader::CreateProc(SkReadBuffer& buffer) { auto tmx = buffer.read32LE(SkTileMode::kLastTileMode); auto tmy = buffer.read32LE(SkTileMode::kLastTileMode); + + FilterEnum filtering = kInheritFromPaint; + if (!buffer.isVersionLT(SkPicturePriv::kFilteringInImageShader_Version)) { + filtering = buffer.read32LE(kInheritFromPaint); + } + SkMatrix localMatrix; buffer.readMatrix(&localMatrix); sk_sp img = buffer.readImage(); if (!img) { return nullptr; } - return SkImageShader::Make(std::move(img), tmx, tmy, &localMatrix); + + return SkImageShader::Make(std::move(img), tmx, tmy, &localMatrix, filtering); } void SkImageShader::flatten(SkWriteBuffer& buffer) const { buffer.writeUInt((unsigned)fTileModeX); buffer.writeUInt((unsigned)fTileModeY); + buffer.writeUInt((unsigned)fFiltering); buffer.writeMatrix(this->getLocalMatrix()); buffer.writeImage(fImage.get()); SkASSERT(fClampAsIfUnpremul == false); @@ -75,9 +87,7 @@ bool SkImageShader::isOpaque() const { #ifdef SK_ENABLE_LEGACY_SHADERCONTEXT static bool legacy_shader_can_handle(const SkMatrix& inv) { - if (inv.hasPerspective()) { - return false; - } + SkASSERT(!inv.hasPerspective()); // Scale+translate methods are always present, but affine might not be. if (!SkOpts::S32_alpha_D32_filter_DXDY && !inv.isScaleTranslate()) { @@ -102,6 +112,11 @@ static bool legacy_shader_can_handle(const SkMatrix& inv) { SkShaderBase::Context* SkImageShader::onMakeContext(const ContextRec& rec, SkArenaAlloc* alloc) const { + SkFilterQuality quality = this->resolveFiltering(rec.fPaint->getFilterQuality()); + + if (quality == kHigh_SkFilterQuality) { + return nullptr; + } if (fImage->alphaType() == kUnpremul_SkAlphaType) { return nullptr; } @@ -140,8 +155,16 @@ SkShaderBase::Context* SkImageShader::onMakeContext(const ContextRec& rec, return nullptr; } + // Send in a modified paint with different filter-quality if we don't agree with the paint + SkPaint modifiedPaint; + ContextRec modifiedRec = rec; + if (quality != rec.fPaint->getFilterQuality()) { + modifiedPaint = *rec.fPaint; + modifiedPaint.setFilterQuality(quality); + modifiedRec.fPaint = &modifiedPaint; + } return SkBitmapProcLegacyShader::MakeContext(*this, fTileModeX, fTileModeY, - as_IB(fImage.get()), rec, alloc); + as_IB(fImage.get()), modifiedRec, alloc); } #endif @@ -159,21 +182,27 @@ SkImage* SkImageShader::onIsAImage(SkMatrix* texM, SkTileMode xy[]) const { sk_sp SkImageShader::Make(sk_sp image, SkTileMode tmx, SkTileMode tmy, const SkMatrix* localMatrix, + FilterEnum filtering, bool clampAsIfUnpremul) { if (!image) { return sk_make_sp(); } - return sk_sp{ new SkImageShader(image, tmx, tmy, localMatrix, clampAsIfUnpremul) }; + return sk_sp{ + new SkImageShader(image, tmx, tmy, localMatrix, filtering, clampAsIfUnpremul) + }; } /////////////////////////////////////////////////////////////////////////////////////////////////// #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" +#include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColorInfo.h" +#include "src/gpu/GrImageTextureMaker.h" #include "src/gpu/GrRecordingContextPriv.h" +#include "src/gpu/GrTextureAdjuster.h" #include "src/gpu/SkGr.h" #include "src/gpu/effects/GrBicubicEffect.h" #include "src/gpu/effects/GrTextureEffect.h" @@ -186,50 +215,72 @@ std::unique_ptr SkImageShader::asFragmentProcessor( return nullptr; } + // This would all be much nicer with std::variant. + static constexpr size_t kSize = std::max({sizeof(GrYUVAImageTextureMaker), + sizeof(GrTextureAdjuster ), + sizeof(GrImageTextureMaker ), + sizeof(GrBitmapTextureMaker )}); + static constexpr size_t kAlign = std::max({alignof(GrYUVAImageTextureMaker), + alignof(GrTextureAdjuster ), + alignof(GrImageTextureMaker ), + alignof(GrBitmapTextureMaker )}); + std::aligned_storage_t storage; + GrTextureProducer* producer = nullptr; + SkScopeExit destroyProducer([&producer]{ if (producer) { producer->~GrTextureProducer(); } }); + + uint32_t pinnedUniqueID; + SkBitmap bm; + if (as_IB(fImage)->isYUVA()) { + producer = new (&storage) GrYUVAImageTextureMaker(args.fContext, fImage.get()); + } else if (GrSurfaceProxyView view = + as_IB(fImage)->refPinnedView(args.fContext, &pinnedUniqueID)) { + GrColorInfo colorInfo; + if (args.fContext->priv().caps()->isFormatSRGB(view.proxy()->backendFormat())) { + SkASSERT(fImage->colorType() == kRGBA_8888_SkColorType); + colorInfo = GrColorInfo(GrColorType::kRGBA_8888_SRGB, fImage->alphaType(), + fImage->refColorSpace()); + } else { + colorInfo = fImage->imageInfo().colorInfo(); + } + producer = new (&storage) + GrTextureAdjuster(args.fContext, std::move(view), colorInfo, pinnedUniqueID); + } else if (fImage->isLazyGenerated()) { + producer = new (&storage) + GrImageTextureMaker(args.fContext, fImage.get(), GrImageTexGenPolicy::kDraw); + } else if (as_IB(fImage)->getROPixels(&bm)) { + producer = + new (&storage) GrBitmapTextureMaker(args.fContext, bm, GrImageTexGenPolicy::kDraw); + } else { + return nullptr; + } GrSamplerState::WrapMode wmX = SkTileModeToWrapMode(fTileModeX), wmY = SkTileModeToWrapMode(fTileModeY); - - // Must set wrap and filter on the sampler before requesting a texture. In two places below - // we check the matrix scale factors to determine how to interpret the filter quality setting. - // This completely ignores the complexity of the drawVertices case where explicit local coords - // are provided by the caller. + // Must set wrap and filter on the sampler before requesting a texture. In two places + // below we check the matrix scale factors to determine how to interpret the filter + // quality setting. This completely ignores the complexity of the drawVertices case + // where explicit local coords are provided by the caller. bool doBicubic; GrSamplerState::Filter textureFilterMode = GrSkFilterQualityToGrFilterMode( - fImage->width(), fImage->height(), args.fFilterQuality, + fImage->width(), fImage->height(), this->resolveFiltering(args.fFilterQuality), args.fMatrixProvider.localToDevice(), *lm, args.fContext->priv().options().fSharpenMipmappedTextures, &doBicubic); - GrMipMapped mipMapped = GrMipMapped::kNo; - if (textureFilterMode == GrSamplerState::Filter::kMipMap) { - mipMapped = GrMipMapped::kYes; - } - GrSurfaceProxyView view = as_IB(fImage)->refView(args.fContext, mipMapped); - if (!view) { - return nullptr; - } + const GrSamplerState::Filter* filterOrNull = doBicubic ? nullptr : &textureFilterMode; + auto fp = producer->createFragmentProcessor(lmInverse, SkRect::Make(fImage->dimensions()), + GrTextureProducer::kNo_FilterConstraint, false, wmX, + wmY, filterOrNull); - SkAlphaType srcAlphaType = fImage->alphaType(); - - const auto& caps = *args.fContext->priv().caps(); - - std::unique_ptr inner; - if (doBicubic) { - static constexpr auto kDir = GrBicubicEffect::Direction::kXY; - inner = GrBicubicEffect::Make(std::move(view), srcAlphaType, lmInverse, wmX, wmY, kDir, - caps); - } else { - GrSamplerState samplerState(wmX, wmY, textureFilterMode); - inner = GrTextureEffect::Make(std::move(view), srcAlphaType, lmInverse, samplerState, caps); + if (!fp) { + return nullptr; } - inner = GrColorSpaceXformEffect::Make(std::move(inner), fImage->colorSpace(), srcAlphaType, - args.fDstColorInfo->colorSpace()); - + fp = GrColorSpaceXformEffect::Make(std::move(fp), fImage->colorSpace(), producer->alphaType(), + args.fDstColorInfo->colorSpace(), kPremul_SkAlphaType); bool isAlphaOnly = SkColorTypeIsAlphaOnly(fImage->colorType()); if (isAlphaOnly) { - return inner; + return fp; } else if (args.fInputColorIsOpaque) { - return GrFragmentProcessor::OverrideInput(std::move(inner), SK_PMColor4fWHITE, false); + return GrFragmentProcessor::OverrideInput(std::move(fp), SK_PMColor4fWHITE, false); } - return GrFragmentProcessor::MulChildByInputAlpha(std::move(inner)); + return GrFragmentProcessor::MulChildByInputAlpha(std::move(fp)); } #endif @@ -240,7 +291,7 @@ std::unique_ptr SkImageShader::asFragmentProcessor( sk_sp SkMakeBitmapShader(const SkBitmap& src, SkTileMode tmx, SkTileMode tmy, const SkMatrix* localMatrix, SkCopyPixelsMode cpm) { return SkImageShader::Make(SkMakeImageFromRasterBitmap(src, cpm), - tmx, tmy, localMatrix); + tmx, tmy, localMatrix, SkImageShader::kInheritFromPaint); } sk_sp SkMakeBitmapShaderForPaint(const SkPaint& paint, const SkBitmap& src, @@ -336,14 +387,15 @@ static void tweak_quality_and_inv_matrix(SkFilterQuality* quality, SkMatrix* mat } bool SkImageShader::doStages(const SkStageRec& rec, SkImageStageUpdater* updater) const { - if (updater && rec.fPaint.getFilterQuality() == kMedium_SkFilterQuality) { + auto quality = this->resolveFiltering(rec.fPaint.getFilterQuality()); + + if (updater && quality == kMedium_SkFilterQuality) { // TODO: medium: recall RequestBitmap and update width/height accordingly return false; } SkRasterPipeline* p = rec.fPipeline; SkArenaAlloc* alloc = rec.fAlloc; - auto quality = rec.fPaint.getFilterQuality(); SkMatrix matrix; if (!this->computeTotalInverse(rec.fMatrixProvider.localToDevice(), rec.fLocalM, &matrix)) { @@ -614,12 +666,15 @@ SkStageUpdater* SkImageShader::onAppendUpdatableStages(const SkStageRec& rec) co return this->doStages(rec, updater) ? updater : nullptr; } -skvm::Color SkImageShader::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, +skvm::Color SkImageShader::onProgram(skvm::Builder* p, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& matrices, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { + quality = this->resolveFiltering(quality); + SkMatrix inv; - if (!this->computeTotalInverse(ctm, localM, &inv)) { + if (!this->computeTotalInverse(matrices.localToDevice(), localM, &inv)) { return {}; } @@ -636,7 +691,7 @@ skvm::Color SkImageShader::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, inv.normalizePerspective(); // Apply matrix to convert dst coords to sample center coords. - SkShaderBase::ApplyMatrix(p, inv, &x,&y,uniforms); + local = SkShaderBase::ApplyMatrix(p, inv, local, uniforms); // Bail out if sample() can't yet handle our image's color type. switch (pm.colorType()) { @@ -761,14 +816,14 @@ skvm::Color SkImageShader::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color c; if (quality == kNone_SkFilterQuality) { - c = sample(x,y); + c = sample(local.x,local.y); } else if (quality == kLow_SkFilterQuality) { // Our four sample points are the corners of a logical 1x1 pixel // box surrounding (x,y) at (0.5,0.5) off-center. - skvm::F32 left = x - 0.5f, - top = y - 0.5f, - right = x + 0.5f, - bottom = y + 0.5f; + skvm::F32 left = local.x - 0.5f, + top = local.y - 0.5f, + right = local.x + 0.5f, + bottom = local.y + 0.5f; // The fractional parts of right and bottom are our lerp factors in x and y respectively. skvm::F32 fx = fract(right ), @@ -781,8 +836,8 @@ skvm::Color SkImageShader::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, // All bicubic samples have the same fractional offset (fx,fy) from the center. // They're either the 16 corners of a 3x3 grid/ surrounding (x,y) at (0.5,0.5) off-center. - skvm::F32 fx = fract(x + 0.5f), - fy = fract(y + 0.5f); + skvm::F32 fx = fract(local.x + 0.5f), + fy = fract(local.y + 0.5f); // See GrCubicEffect for details of these weights. // TODO: these maybe don't seem right looking at gm/bicubic and GrBicubicEffect. @@ -809,9 +864,9 @@ skvm::Color SkImageShader::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, c.r = c.g = c.b = c.a = p->splat(0.0f); - skvm::F32 sy = y - 1.5f; + skvm::F32 sy = local.y - 1.5f; for (int j = 0; j < 4; j++, sy += 1.0f) { - skvm::F32 sx = x - 1.5f; + skvm::F32 sx = local.x - 1.5f; for (int i = 0; i < 4; i++, sx += 1.0f) { skvm::Color s = sample(sx,sy); skvm::F32 w = wx[i] * wy[j]; @@ -859,4 +914,3 @@ skvm::Color SkImageShader::onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, SkColorSpaceXformSteps steps{cs,at, dst.colorSpace(),kPremul_SkAlphaType}; return steps.program(p, uniforms, c); } - diff --git a/src/shaders/SkImageShader.h b/src/shaders/SkImageShader.h index 24f6b81b76c09..a653a9f332a24 100644 --- a/src/shaders/SkImageShader.h +++ b/src/shaders/SkImageShader.h @@ -17,10 +17,20 @@ class SkImageStageUpdater; class SkImageShader : public SkShaderBase { public: + enum FilterEnum { // first 4 entries match SkFilterQuality + kNone, + kLow, + kMedium, + kHigh, + // this is the special value for backward compatibility + kInheritFromPaint, + }; + static sk_sp Make(sk_sp, SkTileMode tmx, SkTileMode tmy, const SkMatrix* localMatrix, + FilterEnum, bool clampAsIfUnpremul = false); bool isOpaque() const override; @@ -36,6 +46,7 @@ class SkImageShader : public SkShaderBase { SkTileMode tmx, SkTileMode tmy, const SkMatrix* localMatrix, + FilterEnum, bool clampAsIfUnpremul); void flatten(SkWriteBuffer&) const override; @@ -47,16 +58,21 @@ class SkImageShader : public SkShaderBase { bool onAppendStages(const SkStageRec&) const override; SkStageUpdater* onAppendUpdatableStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc*) const override; bool doStages(const SkStageRec&, SkImageStageUpdater* = nullptr) const; + SkFilterQuality resolveFiltering(SkFilterQuality paintQuality) const { + return fFiltering == kInheritFromPaint ? paintQuality : (SkFilterQuality)fFiltering; + } + sk_sp fImage; const SkTileMode fTileModeX; const SkTileMode fTileModeY; + const FilterEnum fFiltering; const bool fClampAsIfUnpremul; friend class SkShaderBase; diff --git a/src/shaders/SkLocalMatrixShader.cpp b/src/shaders/SkLocalMatrixShader.cpp index 66ee52be696da..5491f4667b199 100644 --- a/src/shaders/SkLocalMatrixShader.cpp +++ b/src/shaders/SkLocalMatrixShader.cpp @@ -12,6 +12,8 @@ #if SK_SUPPORT_GPU #include "src/gpu/GrFragmentProcessor.h" +#include "src/gpu/effects/GrMatrixEffect.h" +#include "src/gpu/effects/generated/GrDeviceSpaceEffect.h" #endif #if SK_SUPPORT_GPU @@ -77,15 +79,18 @@ bool SkLocalMatrixShader::onAppendStages(const SkStageRec& rec) const { skvm::Color SkLocalMatrixShader::onProgram(skvm::Builder* p, - skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& matrices, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { SkTCopyOnFirstWrite lm(this->getLocalMatrix()); if (localM) { lm.writable()->preConcat(*localM); } - return as_SB(fProxyShader)->program(p, x,y, paint, ctm,lm.get(), quality,dst, uniforms,alloc); + return as_SB(fProxyShader)->program(p, device,local, paint, + matrices,lm.get(), + quality,dst, + uniforms,alloc); } sk_sp SkShader::makeWithLocalMatrix(const SkMatrix& localMatrix) const { @@ -152,11 +157,16 @@ class SkCTMShader final : public SkShaderBase { return as_SB(fProxyShader)->appendStages(newRec); } - skvm::Color onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder* p, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& matrices, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override { - return as_SB(fProxyShader)->program(p, x,y,paint, fCTM,localM, quality,dst, uniforms,alloc); + SkOverrideDeviceMatrixProvider matrixProvider(matrices, fCTM); + return as_SB(fProxyShader)->program(p, device,local, paint, + matrixProvider,localM, + quality,dst, + uniforms,alloc); } private: @@ -172,8 +182,23 @@ class SkCTMShader final : public SkShaderBase { #if SK_SUPPORT_GPU std::unique_ptr SkCTMShader::asFragmentProcessor( const GrFPArgs& args) const { - return as_SB(fProxyShader)->asFragmentProcessor( - GrFPArgs::WithPreLocalMatrix(args, this->getLocalMatrix())); + SkMatrix ctmInv; + if (!fCTM.invert(&ctmInv)) { + return nullptr; + } + + auto ctmProvider = SkOverrideDeviceMatrixProvider(args.fMatrixProvider, fCTM); + auto base = as_SB(fProxyShader)->asFragmentProcessor( + GrFPArgs::WithPreLocalMatrix(args.withNewMatrixProvider(ctmProvider), + this->getLocalMatrix())); + if (!base) { + return nullptr; + } + + // In order for the shader to be evaluated with the original CTM, we explicitly evaluate it + // at sk_FragCoord, and pass that through the inverse of the original CTM. This avoids requiring + // local coords for the shader and mapping from the draw's local to device and then back. + return GrDeviceSpaceEffect::Make(GrMatrixEffect::Make(ctmInv, std::move(base))); } #endif @@ -183,6 +208,5 @@ sk_sp SkCTMShader::CreateProc(SkReadBuffer& buffer) { } sk_sp SkShaderBase::makeWithCTM(const SkMatrix& postM) const { - return postM.isIdentity() ? sk_ref_sp(this) - : sk_sp(new SkCTMShader(sk_ref_sp(this), postM)); + return sk_sp(new SkCTMShader(sk_ref_sp(this), postM)); } diff --git a/src/shaders/SkLocalMatrixShader.h b/src/shaders/SkLocalMatrixShader.h index 603e30e26036e..b1fd88269012e 100644 --- a/src/shaders/SkLocalMatrixShader.h +++ b/src/shaders/SkLocalMatrixShader.h @@ -48,8 +48,8 @@ class SkLocalMatrixShader final : public SkShaderBase { bool onAppendStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc*) const override; diff --git a/src/shaders/SkPerlinNoiseShader.cpp b/src/shaders/SkPerlinNoiseShader.cpp index 2d00c03aa4a1b..6cd2603163fd9 100644 --- a/src/shaders/SkPerlinNoiseShader.cpp +++ b/src/shaders/SkPerlinNoiseShader.cpp @@ -17,10 +17,11 @@ #include "src/core/SkWriteBuffer.h" #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" -#include "src/gpu/GrCoordTransform.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/SkGr.h" +#include "src/gpu/effects/GrMatrixEffect.h" +#include "src/gpu/effects/GrTextureEffect.h" #include "src/gpu/effects/generated/GrConstColorProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentProcessor.h" #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" @@ -119,7 +120,7 @@ class SkPerlinNoiseShaderImpl : public SkShaderBase { fPermutationsBitmap.installPixels(info, fLatticeSelector, info.minRowBytes()); fPermutationsBitmap.setImmutable(); - info = SkImageInfo::MakeN32Premul(kBlockSize, 4); + info = SkImageInfo::Make(kBlockSize, 4, kRGBA_8888_SkColorType, kPremul_SkAlphaType); fNoiseBitmap.installPixels(info, fNoise[0][0], info.minRowBytes()); fNoiseBitmap.setImmutable(); @@ -144,7 +145,7 @@ class SkPerlinNoiseShaderImpl : public SkShaderBase { 1, 0, 2, 0, 0, 2, 1, 0, 1, 0, 0, 0 }; - info = SkImageInfo::MakeN32Premul(16, 1); + info = SkImageInfo::Make(16, 1, kBGRA_8888_SkColorType, kPremul_SkAlphaType); fGradientBitmap.installPixels(info, gradients, info.minRowBytes()); fGradientBitmap.setImmutable(); #endif @@ -717,13 +718,26 @@ class GrGLPerlinNoise : public GrGLSLFragmentProcessor { class GrPerlinNoise2Effect : public GrFragmentProcessor { public: static std::unique_ptr Make( - SkPerlinNoiseShaderImpl::Type type, int numOctaves, bool stitchTiles, + SkPerlinNoiseShaderImpl::Type type, + int numOctaves, + bool stitchTiles, std::unique_ptr paintingData, - GrSurfaceProxyView permutationsView, GrSurfaceProxyView noiseView, - const SkMatrix& matrix) { - return std::unique_ptr(new GrPerlinNoise2Effect( - type, numOctaves, stitchTiles, std::move(paintingData), - std::move(permutationsView), std::move(noiseView), matrix)); + GrSurfaceProxyView permutationsView, + GrSurfaceProxyView noiseView, + const SkMatrix& matrix, + const GrCaps& caps) { + static constexpr GrSamplerState kRepeatXSampler = {GrSamplerState::WrapMode::kRepeat, + GrSamplerState::WrapMode::kClamp, + GrSamplerState::Filter::kNearest}; + auto permutationsFP = + GrTextureEffect::Make(std::move(permutationsView), kPremul_SkAlphaType, + SkMatrix::I(), kRepeatXSampler, caps); + auto noiseFP = GrTextureEffect::Make(std::move(noiseView), kPremul_SkAlphaType, + SkMatrix::I(), kRepeatXSampler, caps); + + return GrMatrixEffect::Make(matrix, std::unique_ptr( + new GrPerlinNoise2Effect(type, numOctaves, stitchTiles, std::move(paintingData), + std::move(permutationsFP), std::move(noiseFP)))); } const char* name() const override { return "PerlinNoise"; } @@ -738,7 +752,6 @@ class GrPerlinNoise2Effect : public GrFragmentProcessor { bool stitchTiles() const { return fStitchTiles; } const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency; } int numOctaves() const { return fNumOctaves; } - const SkMatrix& matrix() const { return fCoordTransform.matrix(); } private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { @@ -759,48 +772,39 @@ class GrPerlinNoise2Effect : public GrFragmentProcessor { fPaintingData->fStitchDataInit == s.fPaintingData->fStitchDataInit; } - GrPerlinNoise2Effect(SkPerlinNoiseShaderImpl::Type type, int numOctaves, bool stitchTiles, + GrPerlinNoise2Effect(SkPerlinNoiseShaderImpl::Type type, + int numOctaves, + bool stitchTiles, std::unique_ptr paintingData, - GrSurfaceProxyView permutationsView, - GrSurfaceProxyView noiseView, - const SkMatrix& matrix) + std::unique_ptr permutationsFP, + std::unique_ptr noiseFP) : INHERITED(kGrPerlinNoise2Effect_ClassID, kNone_OptimizationFlags) , fType(type) , fNumOctaves(numOctaves) , fStitchTiles(stitchTiles) - , fPermutationsSampler(std::move(permutationsView)) - , fNoiseSampler(std::move(noiseView)) , fPaintingData(std::move(paintingData)) { - this->setTextureSamplerCnt(2); - fCoordTransform = GrCoordTransform(matrix); - this->addCoordTransform(&fCoordTransform); + this->registerChild(std::move(permutationsFP), SkSL::SampleUsage::Explicit()); + this->registerChild(std::move(noiseFP), SkSL::SampleUsage::Explicit()); + this->setUsesSampleCoordsDirectly(); } GrPerlinNoise2Effect(const GrPerlinNoise2Effect& that) : INHERITED(kGrPerlinNoise2Effect_ClassID, kNone_OptimizationFlags) , fType(that.fType) - , fCoordTransform(that.fCoordTransform) , fNumOctaves(that.fNumOctaves) , fStitchTiles(that.fStitchTiles) - , fPermutationsSampler(that.fPermutationsSampler) - , fNoiseSampler(that.fNoiseSampler) , fPaintingData(new SkPerlinNoiseShaderImpl::PaintingData(*that.fPaintingData)) { - this->setTextureSamplerCnt(2); - this->addCoordTransform(&fCoordTransform); + this->cloneAndRegisterAllChildProcessors(that); + this->setUsesSampleCoordsDirectly(); } - const TextureSampler& onTextureSampler(int i) const override { - return IthTextureSampler(i, fPermutationsSampler, fNoiseSampler); - } GR_DECLARE_FRAGMENT_PROCESSOR_TEST SkPerlinNoiseShaderImpl::Type fType; - GrCoordTransform fCoordTransform; int fNumOctaves; bool fStitchTiles; - TextureSampler fPermutationsSampler; - TextureSampler fNoiseSampler; + std::unique_ptr fPaintingData; typedef GrFragmentProcessor INHERITED; @@ -835,10 +839,8 @@ std::unique_ptr GrPerlinNoise2Effect::TestCreate(GrProcesso void GrGLPerlinNoise::emitCode(EmitArgs& args) { const GrPerlinNoise2Effect& pne = args.fFp.cast(); - GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; - SkString vCoords = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - pne.sampleMatrix()); fBaseFrequencyUni = uniformHandler->addUniform(&pne, kFragment_GrShaderFlag, kHalf2_GrSLType, "baseFrequency"); @@ -851,86 +853,36 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) { stitchDataUni = uniformHandler->getUniformCStr(fStitchDataUni); } - // There are 4 lines, so the center of each line is 1/8, 3/8, 5/8 and 7/8 - const char* chanCoordR = "0.125"; - const char* chanCoordG = "0.375"; - const char* chanCoordB = "0.625"; - const char* chanCoordA = "0.875"; - const char* chanCoord = "chanCoord"; - const char* stitchData = "stitchData"; - const char* ratio = "ratio"; - const char* noiseVec = "noiseVec"; - const char* noiseSmooth = "noiseSmooth"; - const char* floorVal = "floorVal"; - const char* fractVal = "fractVal"; - const char* uv = "uv"; - const char* ab = "ab"; - const char* latticeIdx = "latticeIdx"; - const char* bcoords = "bcoords"; - const char* lattice = "lattice"; - const char* inc8bit = "0.00390625"; // 1.0 / 256.0 - // This is the math to convert the two 16bit integer packed into rgba 8 bit input into a - // [-1,1] vector and perform a dot product between that vector and the provided vector. - const char* dotLattice = "dot(((%s.ga + %s.rb * half2(%s)) * half2(2.0) - half2(1.0)), %s);"; - // Add noise function - const GrShaderVar gPerlinNoiseArgs[] = { - GrShaderVar(chanCoord, kHalf_GrSLType), - GrShaderVar(noiseVec, kHalf2_GrSLType) - }; + const GrShaderVar gPerlinNoiseArgs[] = {{"chanCoord", kHalf_GrSLType }, + {"noiseVec ", kHalf2_GrSLType}}; - const GrShaderVar gPerlinNoiseStitchArgs[] = { - GrShaderVar(chanCoord, kHalf_GrSLType), - GrShaderVar(noiseVec, kHalf2_GrSLType), - GrShaderVar(stitchData, kHalf2_GrSLType) - }; + const GrShaderVar gPerlinNoiseStitchArgs[] = {{"chanCoord" , kHalf_GrSLType }, + {"noiseVec" , kHalf2_GrSLType}, + {"stitchData", kHalf2_GrSLType}}; SkString noiseCode; - noiseCode.appendf("\thalf4 %s;\n", floorVal); - noiseCode.appendf("\t%s.xy = floor(%s);\n", floorVal, noiseVec); - noiseCode.appendf("\t%s.zw = %s.xy + half2(1.0);\n", floorVal, floorVal); - noiseCode.appendf("\thalf2 %s = fract(%s);\n", fractVal, noiseVec); - - // smooth curve : t * t * (3 - 2 * t) - noiseCode.appendf("\n\thalf2 %s = %s * %s * (half2(3.0) - half2(2.0) * %s);", - noiseSmooth, fractVal, fractVal, fractVal); + noiseCode.append( + R"(half4 floorVal; + floorVal.xy = floor(noiseVec); + floorVal.zw = floorVal.xy + half2(1); + half2 fractVal = fract(noiseVec); + // smooth curve : t^2*(3 - 2*t) + half2 noiseSmooth = fractVal*fractVal*(half2(3) - 2*fractVal);)"); // Adjust frequencies if we're stitching tiles if (pne.stitchTiles()) { - noiseCode.appendf("\n\tif(%s.x >= %s.x) { %s.x -= %s.x; }", - floorVal, stitchData, floorVal, stitchData); - noiseCode.appendf("\n\tif(%s.y >= %s.y) { %s.y -= %s.y; }", - floorVal, stitchData, floorVal, stitchData); - noiseCode.appendf("\n\tif(%s.z >= %s.x) { %s.z -= %s.x; }", - floorVal, stitchData, floorVal, stitchData); - noiseCode.appendf("\n\tif(%s.w >= %s.y) { %s.w -= %s.y; }", - floorVal, stitchData, floorVal, stitchData); + noiseCode.append( + R"(if (floorVal.x >= stitchData.x) { floorVal.x -= stitchData.x; }; + if (floorVal.y >= stitchData.y) { floorVal.y -= stitchData.y; }; + if (floorVal.z >= stitchData.x) { floorVal.z -= stitchData.x; }; + if (floorVal.w >= stitchData.y) { floorVal.w -= stitchData.y; };)"); } - // Get texture coordinates and normalize - noiseCode.appendf("\n\t%s = fract(floor(mod(%s, 256.0)) / half4(256.0));\n", - floorVal, floorVal); - - // Get permutation for x - { - SkString xCoords(""); - xCoords.appendf("half2(%s.x, 0.5)", floorVal); - - noiseCode.appendf("\n\thalf2 %s;\n\t%s.x = ", latticeIdx, latticeIdx); - fragBuilder->appendTextureLookup(&noiseCode, args.fTexSamplers[0], xCoords.c_str()); - noiseCode.append(".r;"); - } - - // Get permutation for x + 1 - { - SkString xCoords(""); - xCoords.appendf("half2(%s.z, 0.5)", floorVal); - - noiseCode.appendf("\n\t%s.y = ", latticeIdx); - fragBuilder->appendTextureLookup(&noiseCode, args.fTexSamplers[0], xCoords.c_str()); - noiseCode.append(".r;"); - } + SkString sampleX = this->invokeChild(0, args, "half2(floorVal.x, 0.5)"); + SkString sampleY = this->invokeChild(0, args, "half2(floorVal.z, 0.5)"); + noiseCode.appendf("half2 latticeIdx = half2(%s.r, %s.r);", sampleX.c_str(), sampleY.c_str()); #if defined(SK_BUILD_FOR_ANDROID) // Android rounding for Tegra devices, like, for example: Xoom (Tegra 2), Nexus 7 (Tegra 3). @@ -939,65 +891,54 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) { // (or 0.484368 here). The following rounding operation prevents these precision issues from // affecting the result of the noise by making sure that we only have multiples of 1/255. // (Note that 1/255 is about 0.003921569, which is the value used here). - noiseCode.appendf("\n\t%s = floor(%s * half2(255.0) + half2(0.5)) * half2(0.003921569);", - latticeIdx, latticeIdx); + noiseCode.append( + "latticeIdx = floor(latticeIdx * half2(255.0) + half2(0.5)) * half2(0.003921569);"); #endif // Get (x,y) coordinates with the permutated x - noiseCode.appendf("\n\thalf4 %s = fract(%s.xyxy + %s.yyww);", bcoords, latticeIdx, floorVal); + noiseCode.append("half4 bcoords = 256*latticeIdx.xyxy + floorVal.yyww;"); + + noiseCode.append("half2 uv;"); + + // This is the math to convert the two 16bit integer packed into rgba 8 bit input into a + // [-1,1] vector and perform a dot product between that vector and the provided vector. + // Save it as a string because we will repeat it 4x. + static constexpr const char* inc8bit = "0.00390625"; // 1.0 / 256.0 + SkString dotLattice = + SkStringPrintf("dot((lattice.ga + lattice.rb*%s)*2 - half2(1), fractVal)", inc8bit); + + SkString sampleA = this->invokeChild(1, args, "half2(bcoords.x, chanCoord)"); + SkString sampleB = this->invokeChild(1, args, "half2(bcoords.y, chanCoord)"); + SkString sampleC = this->invokeChild(1, args, "half2(bcoords.w, chanCoord)"); + SkString sampleD = this->invokeChild(1, args, "half2(bcoords.z, chanCoord)"); - noiseCode.appendf("\n\n\thalf2 %s;", uv); // Compute u, at offset (0,0) - { - SkString latticeCoords(""); - latticeCoords.appendf("half2(%s.x, %s)", bcoords, chanCoord); - noiseCode.appendf("\n\thalf4 %s = ", lattice); - fragBuilder->appendTextureLookup(&noiseCode, args.fTexSamplers[1], latticeCoords.c_str()); - noiseCode.appendf(".bgra;\n\t%s.x = ", uv); - noiseCode.appendf(dotLattice, lattice, lattice, inc8bit, fractVal); - } + noiseCode.appendf("half4 lattice = %s;", sampleA.c_str()); + noiseCode.appendf("uv.x = %s;", dotLattice.c_str()); - noiseCode.appendf("\n\t%s.x -= 1.0;", fractVal); // Compute v, at offset (-1,0) - { - SkString latticeCoords(""); - latticeCoords.appendf("half2(%s.y, %s)", bcoords, chanCoord); - noiseCode.append("\n\tlattice = "); - fragBuilder->appendTextureLookup(&noiseCode, args.fTexSamplers[1], latticeCoords.c_str()); - noiseCode.appendf(".bgra;\n\t%s.y = ", uv); - noiseCode.appendf(dotLattice, lattice, lattice, inc8bit, fractVal); - } + noiseCode.append("fractVal.x -= 1.0;"); + noiseCode.appendf("lattice = %s;", sampleB.c_str()); + noiseCode.appendf("uv.y = %s;", dotLattice.c_str()); // Compute 'a' as a linear interpolation of 'u' and 'v' - noiseCode.appendf("\n\thalf2 %s;", ab); - noiseCode.appendf("\n\t%s.x = mix(%s.x, %s.y, %s.x);", ab, uv, uv, noiseSmooth); + noiseCode.append("half2 ab;"); + noiseCode.append("ab.x = mix(uv.x, uv.y, noiseSmooth.x);"); - noiseCode.appendf("\n\t%s.y -= 1.0;", fractVal); // Compute v, at offset (-1,-1) - { - SkString latticeCoords(""); - latticeCoords.appendf("half2(%s.w, %s)", bcoords, chanCoord); - noiseCode.append("\n\tlattice = "); - fragBuilder->appendTextureLookup(&noiseCode, args.fTexSamplers[1], latticeCoords.c_str()); - noiseCode.appendf(".bgra;\n\t%s.y = ", uv); - noiseCode.appendf(dotLattice, lattice, lattice, inc8bit, fractVal); - } + noiseCode.append("fractVal.y -= 1.0;"); + noiseCode.appendf("lattice = %s;", sampleC.c_str()); + noiseCode.appendf("uv.y = %s;", dotLattice.c_str()); - noiseCode.appendf("\n\t%s.x += 1.0;", fractVal); // Compute u, at offset (0,-1) - { - SkString latticeCoords(""); - latticeCoords.appendf("half2(%s.z, %s)", bcoords, chanCoord); - noiseCode.append("\n\tlattice = "); - fragBuilder->appendTextureLookup(&noiseCode, args.fTexSamplers[1], latticeCoords.c_str()); - noiseCode.appendf(".bgra;\n\t%s.x = ", uv); - noiseCode.appendf(dotLattice, lattice, lattice, inc8bit, fractVal); - } + noiseCode.append("fractVal.x += 1.0;"); + noiseCode.appendf("lattice = %s;", sampleD.c_str()); + noiseCode.appendf("uv.x = %s;", dotLattice.c_str()); // Compute 'b' as a linear interpolation of 'u' and 'v' - noiseCode.appendf("\n\t%s.y = mix(%s.x, %s.y, %s.x);", ab, uv, uv, noiseSmooth); + noiseCode.append("ab.y = mix(uv.x, uv.y, noiseSmooth.x);"); // Compute the noise as a linear interpolation of 'a' and 'b' - noiseCode.appendf("\n\treturn mix(%s.x, %s.y, %s.y);\n", ab, ab, noiseSmooth); + noiseCode.append("return mix(ab.x, ab.y, noiseSmooth.y);"); SkString noiseFuncName; if (pne.stitchTiles()) { @@ -1011,68 +952,73 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) { } // There are rounding errors if the floor operation is not performed here - fragBuilder->codeAppendf("\n\t\thalf2 %s = half2(floor(%s.xy) * %s);", - noiseVec, vCoords.c_str(), baseFrequencyUni); + fragBuilder->codeAppendf("half2 noiseVec = half2(floor(%s.xy) * %s);", + args.fSampleCoord, baseFrequencyUni); // Clear the color accumulator - fragBuilder->codeAppendf("\n\t\t%s = half4(0.0);", args.fOutputColor); + fragBuilder->codeAppendf("%s = half4(0.0);", args.fOutputColor); if (pne.stitchTiles()) { // Set up TurbulenceInitial stitch values. - fragBuilder->codeAppendf("\n\t\thalf2 %s = %s;", stitchData, stitchDataUni); + fragBuilder->codeAppendf("half2 stitchData = %s;", stitchDataUni); } - fragBuilder->codeAppendf("\n\t\thalf %s = 1.0;", ratio); + fragBuilder->codeAppendf("half ratio = 1.0;"); // Loop over all octaves fragBuilder->codeAppendf("for (int octave = 0; octave < %d; ++octave) {", pne.numOctaves()); - - fragBuilder->codeAppendf("\n\t\t\t%s += ", args.fOutputColor); + fragBuilder->codeAppendf(" %s += ", args.fOutputColor); if (pne.type() != SkPerlinNoiseShaderImpl::kFractalNoise_Type) { fragBuilder->codeAppend("abs("); } + + // There are 4 lines, put y coords at center of each. + static constexpr const char* chanCoordR = "0.5"; + static constexpr const char* chanCoordG = "1.5"; + static constexpr const char* chanCoordB = "2.5"; + static constexpr const char* chanCoordA = "3.5"; if (pne.stitchTiles()) { - fragBuilder->codeAppendf( - "half4(\n\t\t\t\t%s(%s, %s, %s),\n\t\t\t\t%s(%s, %s, %s)," - "\n\t\t\t\t%s(%s, %s, %s),\n\t\t\t\t%s(%s, %s, %s))", - noiseFuncName.c_str(), chanCoordR, noiseVec, stitchData, - noiseFuncName.c_str(), chanCoordG, noiseVec, stitchData, - noiseFuncName.c_str(), chanCoordB, noiseVec, stitchData, - noiseFuncName.c_str(), chanCoordA, noiseVec, stitchData); + fragBuilder->codeAppendf(R"( + half4(%s(%s, noiseVec, stitchData), %s(%s, noiseVec, stitchData)," + %s(%s, noiseVec, stitchData), %s(%s, noiseVec, stitchData)))", + noiseFuncName.c_str(), chanCoordR, + noiseFuncName.c_str(), chanCoordG, + noiseFuncName.c_str(), chanCoordB, + noiseFuncName.c_str(), chanCoordA); } else { - fragBuilder->codeAppendf( - "half4(\n\t\t\t\t%s(%s, %s),\n\t\t\t\t%s(%s, %s)," - "\n\t\t\t\t%s(%s, %s),\n\t\t\t\t%s(%s, %s))", - noiseFuncName.c_str(), chanCoordR, noiseVec, - noiseFuncName.c_str(), chanCoordG, noiseVec, - noiseFuncName.c_str(), chanCoordB, noiseVec, - noiseFuncName.c_str(), chanCoordA, noiseVec); + fragBuilder->codeAppendf(R"( + half4(%s(%s, noiseVec), %s(%s, noiseVec), + %s(%s, noiseVec), %s(%s, noiseVec)))", + noiseFuncName.c_str(), chanCoordR, + noiseFuncName.c_str(), chanCoordG, + noiseFuncName.c_str(), chanCoordB, + noiseFuncName.c_str(), chanCoordA); } if (pne.type() != SkPerlinNoiseShaderImpl::kFractalNoise_Type) { - fragBuilder->codeAppendf(")"); // end of "abs(" + fragBuilder->codeAppend(")"); // end of "abs(" } - fragBuilder->codeAppendf(" * %s;", ratio); + fragBuilder->codeAppend(" * ratio;"); - fragBuilder->codeAppendf("\n\t\t\t%s *= half2(2.0);", noiseVec); - fragBuilder->codeAppendf("\n\t\t\t%s *= 0.5;", ratio); + fragBuilder->codeAppend(R"(noiseVec *= half2(2.0); + ratio *= 0.5;)"); if (pne.stitchTiles()) { - fragBuilder->codeAppendf("\n\t\t\t%s *= half2(2.0);", stitchData); + fragBuilder->codeAppend("stitchData *= half2(2.0);"); } - fragBuilder->codeAppend("\n\t\t}"); // end of the for loop on octaves + fragBuilder->codeAppend("}"); // end of the for loop on octaves if (pne.type() == SkPerlinNoiseShaderImpl::kFractalNoise_Type) { // The value of turbulenceFunctionResult comes from ((turbulenceFunctionResult) + 1) / 2 // by fractalNoise and (turbulenceFunctionResult) by turbulence. - fragBuilder->codeAppendf("\n\t\t%s = %s * half4(0.5) + half4(0.5);", - args.fOutputColor,args.fOutputColor); + fragBuilder->codeAppendf("%s = %s * half4(0.5) + half4(0.5);", + args.fOutputColor, args.fOutputColor); } // Clamp values - fragBuilder->codeAppendf("\n\t\t%s = saturate(%s);", args.fOutputColor, args.fOutputColor); + fragBuilder->codeAppendf("%s = saturate(%s);", args.fOutputColor, args.fOutputColor); // Pre-multiply the result - fragBuilder->codeAppendf("\n\t\t%s = half4(%s.rgb * %s.aaa, %s.a);\n", + fragBuilder->codeAppendf("%s = half4(%s.rgb * %s.aaa, %s.a);\n", args.fOutputColor, args.fOutputColor, args.fOutputColor, args.fOutputColor); } @@ -1116,7 +1062,7 @@ void GrGLPerlinNoise::onSetData(const GrGLSLProgramDataManager& pdman, if (turbulence.stitchTiles()) { const SkPerlinNoiseShaderImpl::StitchData& stitchData = turbulence.stitchData(); pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), - SkIntToScalar(stitchData.fHeight)); + SkIntToScalar(stitchData.fHeight)); } } @@ -1143,13 +1089,25 @@ class GrGLImprovedPerlinNoise : public GrGLSLFragmentProcessor { class GrImprovedPerlinNoiseEffect : public GrFragmentProcessor { public: static std::unique_ptr Make( - int octaves, SkScalar z, + int octaves, + SkScalar z, std::unique_ptr paintingData, - GrSurfaceProxyView permutationsView, GrSurfaceProxyView gradientView, - const SkMatrix& matrix) { - return std::unique_ptr(new GrImprovedPerlinNoiseEffect( - octaves, z, std::move(paintingData), std::move(permutationsView), - std::move(gradientView), matrix)); + GrSurfaceProxyView permutationsView, + GrSurfaceProxyView gradientView, + const SkMatrix& matrix, + const GrCaps& caps) { + static constexpr GrSamplerState kRepeatXSampler = {GrSamplerState::WrapMode::kRepeat, + GrSamplerState::WrapMode::kClamp, + GrSamplerState::Filter::kNearest}; + auto permutationsFP = + GrTextureEffect::Make(std::move(permutationsView), kPremul_SkAlphaType, + SkMatrix::I(), kRepeatXSampler, caps); + auto gradientFP = GrTextureEffect::Make(std::move(gradientView), kPremul_SkAlphaType, + SkMatrix::I(), kRepeatXSampler, caps); + return GrMatrixEffect::Make(matrix, std::unique_ptr( + new GrImprovedPerlinNoiseEffect(octaves, z, std::move(paintingData), + std::move(permutationsFP), + std::move(gradientFP)))); } const char* name() const override { return "ImprovedPerlinNoise"; } @@ -1161,7 +1119,6 @@ class GrImprovedPerlinNoiseEffect : public GrFragmentProcessor { const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency; } SkScalar z() const { return fZ; } int octaves() const { return fOctaves; } - const SkMatrix& matrix() const { return fCoordTransform.matrix(); } private: GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { @@ -1178,45 +1135,34 @@ class GrImprovedPerlinNoiseEffect : public GrFragmentProcessor { fPaintingData->fBaseFrequency == s.fPaintingData->fBaseFrequency; } - GrImprovedPerlinNoiseEffect(int octaves, SkScalar z, + GrImprovedPerlinNoiseEffect(int octaves, + SkScalar z, std::unique_ptr paintingData, - GrSurfaceProxyView permutationsView, - GrSurfaceProxyView gradientView, - const SkMatrix& matrix) + std::unique_ptr permutationsFP, + std::unique_ptr gradientFP) : INHERITED(kGrImprovedPerlinNoiseEffect_ClassID, kNone_OptimizationFlags) , fOctaves(octaves) , fZ(z) - , fPermutationsSampler(std::move(permutationsView)) - , fGradientSampler(std::move(gradientView)) , fPaintingData(std::move(paintingData)) { - this->setTextureSamplerCnt(2); - fCoordTransform = GrCoordTransform(matrix); - this->addCoordTransform(&fCoordTransform); + this->registerChild(std::move(permutationsFP), SkSL::SampleUsage::Explicit()); + this->registerChild(std::move(gradientFP), SkSL::SampleUsage::Explicit()); + this->setUsesSampleCoordsDirectly(); } GrImprovedPerlinNoiseEffect(const GrImprovedPerlinNoiseEffect& that) : INHERITED(kGrImprovedPerlinNoiseEffect_ClassID, kNone_OptimizationFlags) - , fCoordTransform(that.fCoordTransform) , fOctaves(that.fOctaves) , fZ(that.fZ) - , fPermutationsSampler(that.fPermutationsSampler) - , fGradientSampler(that.fGradientSampler) , fPaintingData(new SkPerlinNoiseShaderImpl::PaintingData(*that.fPaintingData)) { - this->setTextureSamplerCnt(2); - this->addCoordTransform(&fCoordTransform); - } - - const TextureSampler& onTextureSampler(int i) const override { - return IthTextureSampler(i, fPermutationsSampler, fGradientSampler); + this->cloneAndRegisterAllChildProcessors(that); + this->setUsesSampleCoordsDirectly(); } GR_DECLARE_FRAGMENT_PROCESSOR_TEST - GrCoordTransform fCoordTransform; int fOctaves; SkScalar fZ; - TextureSampler fPermutationsSampler; - TextureSampler fGradientSampler; + std::unique_ptr fPaintingData; typedef GrFragmentProcessor INHERITED; @@ -1247,10 +1193,8 @@ std::unique_ptr GrImprovedPerlinNoiseEffect::TestCreate( void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { const GrImprovedPerlinNoiseEffect& pne = args.fFp.cast(); - GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; - SkString vCoords = fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, - pne.sampleMatrix()); fBaseFrequencyUni = uniformHandler->addUniform(&pne, kFragment_GrShaderFlag, kHalf2_GrSLType, "baseFrequency"); @@ -1271,44 +1215,39 @@ void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { // perm function const GrShaderVar permArgs[] = { - GrShaderVar("x", kHalf_GrSLType) + {"x", kHalf_GrSLType} }; + SkString samplePerm = this->invokeChild(0, args, "float2(x, 0.5)"); SkString permFuncName; - SkString permCode("return "); - // FIXME even though I'm creating these textures with kRepeat_TileMode, they're clamped. Not - // sure why. Using fract() (here and the next texture lookup) as a workaround. - fragBuilder->appendTextureLookup(&permCode, args.fTexSamplers[0], - "float2(fract(x / 256.0), 0.0)"); - permCode.append(".r * 255.0;"); + SkString permCode = SkStringPrintf("return %s.r * 255;", samplePerm.c_str()); fragBuilder->emitFunction(kHalf_GrSLType, "perm", SK_ARRAY_COUNT(permArgs), permArgs, permCode.c_str(), &permFuncName); // grad function const GrShaderVar gradArgs[] = { - GrShaderVar("x", kHalf_GrSLType), - GrShaderVar("p", kHalf3_GrSLType) + {"x", kHalf_GrSLType}, + {"p", kHalf3_GrSLType} }; + SkString sampleGrad = this->invokeChild(1, args, "float2(x, 0.5)"); SkString gradFuncName; - SkString gradCode("return half(dot("); - fragBuilder->appendTextureLookup(&gradCode, args.fTexSamplers[1], - "float2(fract(x / 16.0), 0.0)"); - gradCode.append(".rgb * 255.0 - float3(1.0), p));"); + SkString gradCode = SkStringPrintf("return half(dot(%s.rgb * 255.0 - float3(1.0), p));", + sampleGrad.c_str()); fragBuilder->emitFunction(kHalf_GrSLType, "grad", SK_ARRAY_COUNT(gradArgs), gradArgs, gradCode.c_str(), &gradFuncName); // lerp function const GrShaderVar lerpArgs[] = { - GrShaderVar("a", kHalf_GrSLType), - GrShaderVar("b", kHalf_GrSLType), - GrShaderVar("w", kHalf_GrSLType) + {"a", kHalf_GrSLType}, + {"b", kHalf_GrSLType}, + {"w", kHalf_GrSLType} }; SkString lerpFuncName; fragBuilder->emitFunction(kHalf_GrSLType, "lerp", SK_ARRAY_COUNT(lerpArgs), lerpArgs, "return a + w * (b - a);", &lerpFuncName); // noise function - const GrShaderVar noiseArgs[] = { - GrShaderVar("p", kHalf3_GrSLType), + const GrShaderVar noiseArgs[] = { + {"p", kHalf3_GrSLType}, }; SkString noiseFuncName; SkString noiseCode; @@ -1345,7 +1284,7 @@ void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { // noiseOctaves function const GrShaderVar noiseOctavesArgs[] = { - GrShaderVar("p", kHalf3_GrSLType) + {"p", kHalf3_GrSLType} }; SkString noiseOctavesFuncName; SkString noiseOctavesCode; @@ -1360,7 +1299,7 @@ void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { fragBuilder->emitFunction(kHalf_GrSLType, "noiseOctaves", SK_ARRAY_COUNT(noiseOctavesArgs), noiseOctavesArgs, noiseOctavesCode.c_str(), &noiseOctavesFuncName); - fragBuilder->codeAppendf("half2 coords = half2(%s * %s);", vCoords.c_str(), baseFrequencyUni); + fragBuilder->codeAppendf("half2 coords = half2(%s * %s);", args.fSampleCoord, baseFrequencyUni); fragBuilder->codeAppendf("half r = %s(half3(coords, %s));", noiseOctavesFuncName.c_str(), zUni); fragBuilder->codeAppendf("half g = %s(half3(coords, %s + 0000.0));", @@ -1432,9 +1371,13 @@ std::unique_ptr SkPerlinNoiseShaderImpl::asFragmentProcesso const SkBitmap& gradientBitmap = paintingData->getGradientBitmap(); SkASSERT(SkIsPow2(gradientBitmap.width()) && SkIsPow2(gradientBitmap.height())); auto gradientView = GrMakeCachedBitmapProxyView(context, gradientBitmap); - return GrImprovedPerlinNoiseEffect::Make(fNumOctaves, fSeed, std::move(paintingData), + return GrImprovedPerlinNoiseEffect::Make(fNumOctaves, + fSeed, + std::move(paintingData), std::move(permutationsView), - std::move(gradientView), m); + std::move(gradientView), + m, + *context->priv().caps()); } if (0 == fNumOctaves) { @@ -1443,13 +1386,13 @@ std::unique_ptr SkPerlinNoiseShaderImpl::asFragmentProcesso // TODO: Either treat the output of this shader as sRGB or allow client to specify a // color space of the noise. Either way, this case (and the GLSL) need to convert to // the destination. - auto inner = - GrConstColorProcessor::Make(SkPMColor4f::FromBytes_RGBA(0x80404040), - GrConstColorProcessor::InputMode::kModulateRGBA); + auto inner = GrConstColorProcessor::Make( + /*inputFP=*/nullptr, SkPMColor4f::FromBytes_RGBA(0x80404040), + GrConstColorProcessor::InputMode::kModulateRGBA); return GrFragmentProcessor::MulChildByInputAlpha(std::move(inner)); } // Emit zero. - return GrConstColorProcessor::Make(SK_PMColor4fTRANSPARENT, + return GrConstColorProcessor::Make(/*inputFP=*/nullptr, SK_PMColor4fTRANSPARENT, GrConstColorProcessor::InputMode::kIgnore); } @@ -1471,7 +1414,8 @@ std::unique_ptr SkPerlinNoiseShaderImpl::asFragmentProcesso std::move(paintingData), std::move(permutationsView), std::move(noiseView), - m); + m, + *context->priv().caps()); return GrFragmentProcessor::MulChildByInputAlpha(std::move(inner)); } return nullptr; diff --git a/src/shaders/SkPictureShader.cpp b/src/shaders/SkPictureShader.cpp index 009ae54d36efa..772a263e3153e 100644 --- a/src/shaders/SkPictureShader.cpp +++ b/src/shaders/SkPictureShader.cpp @@ -22,7 +22,7 @@ #include #if SK_SUPPORT_GPU -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrColorInfo.h" #include "src/gpu/GrFragmentProcessor.h" @@ -275,20 +275,24 @@ bool SkPictureShader::onAppendStages(const SkStageRec& rec) const { } skvm::Color SkPictureShader::onProgram(skvm::Builder* p, - skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& matrices, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { auto lm = this->totalLocalMatrix(localM); // Keep bitmapShader alive by using alloc instead of stack memory auto& bitmapShader = *alloc->make>(); - bitmapShader = this->refBitmapShader(ctm, &lm, dst.colorType(), dst.colorSpace()); + bitmapShader = this->refBitmapShader(matrices.localToDevice(), &lm, + dst.colorType(), dst.colorSpace()); if (!bitmapShader) { return {}; } - return as_SB(bitmapShader)->program(p, x,y, paint, ctm, lm, quality, dst, uniforms, alloc); + return as_SB(bitmapShader)->program(p, device,local, paint, + matrices,lm, + quality,dst, + uniforms,alloc); } ///////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/shaders/SkPictureShader.h b/src/shaders/SkPictureShader.h index 0bdc9cd9e09df..01ef4b4d122b6 100644 --- a/src/shaders/SkPictureShader.h +++ b/src/shaders/SkPictureShader.h @@ -37,8 +37,8 @@ class SkPictureShader : public SkShaderBase { SkPictureShader(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override; diff --git a/src/shaders/SkShader.cpp b/src/shaders/SkShader.cpp index 766b9616d4e35..f0935ef9b6799 100644 --- a/src/shaders/SkShader.cpp +++ b/src/shaders/SkShader.cpp @@ -195,8 +195,9 @@ bool SkShaderBase::onAppendStages(const SkStageRec& rec) const { return false; } -skvm::Color SkShaderBase::program(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, +skvm::Color SkShaderBase::program(skvm::Builder* p, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider& matrices, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { // Force opaque alpha for all opaque shaders. @@ -211,7 +212,8 @@ skvm::Color SkShaderBase::program(skvm::Builder* p, skvm::F32 x, skvm::F32 y, sk // shader program hash and blitter Key. This makes it safe for us to use // that bit to make decisions when constructing an SkVMBlitter, like doing // SrcOver -> Src strength reduction. - if (auto color = this->onProgram(p, x,y, paint, ctm,localM, quality,dst, uniforms,alloc)) { + if (auto color = this->onProgram(p, device,local, paint, matrices,localM, quality,dst, + uniforms,alloc)) { if (this->isOpaque()) { color.a = p->splat(1.0f); } @@ -220,11 +222,12 @@ skvm::Color SkShaderBase::program(skvm::Builder* p, skvm::F32 x, skvm::F32 y, sk return {}; } -skvm::Color SkShaderBase::onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, +skvm::Color SkShaderBase::onProgram(skvm::Builder*, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { - //SkDebugf("cannot onProgram %s\n", this->getTypeName()); + // SkDebugf("cannot onProgram %s\n", this->getTypeName()); return {}; } @@ -234,36 +237,40 @@ sk_sp SkShaderBase::makeInvertAlpha() const { } -void SkShaderBase::ApplyMatrix(skvm::Builder* p, const SkMatrix& m, - skvm::F32* x, skvm::F32* y, skvm::Uniforms* uniforms) { +skvm::Coord SkShaderBase::ApplyMatrix(skvm::Builder* p, const SkMatrix& m, + skvm::Coord coord, skvm::Uniforms* uniforms) { + skvm::F32 x = coord.x, + y = coord.y; if (m.isIdentity()) { // That was easy. } else if (m.isTranslate()) { - *x = p->add(*x, p->uniformF(uniforms->pushF(m[2]))); - *y = p->add(*y, p->uniformF(uniforms->pushF(m[5]))); + x = p->add(x, p->uniformF(uniforms->pushF(m[2]))); + y = p->add(y, p->uniformF(uniforms->pushF(m[5]))); } else if (m.isScaleTranslate()) { - *x = p->mad(*x, p->uniformF(uniforms->pushF(m[0])), p->uniformF(uniforms->pushF(m[2]))); - *y = p->mad(*y, p->uniformF(uniforms->pushF(m[4])), p->uniformF(uniforms->pushF(m[5]))); + x = p->mad(x, p->uniformF(uniforms->pushF(m[0])), p->uniformF(uniforms->pushF(m[2]))); + y = p->mad(y, p->uniformF(uniforms->pushF(m[4])), p->uniformF(uniforms->pushF(m[5]))); } else { // Affine or perspective. - auto dot = [&,X=*x,Y=*y](int row) { - return p->mad(X, p->uniformF(uniforms->pushF(m[3*row+0])), - p->mad(Y, p->uniformF(uniforms->pushF(m[3*row+1])), + auto dot = [&,x,y](int row) { + return p->mad(x, p->uniformF(uniforms->pushF(m[3*row+0])), + p->mad(y, p->uniformF(uniforms->pushF(m[3*row+1])), p->uniformF(uniforms->pushF(m[3*row+2])))); }; - *x = dot(0); - *y = dot(1); + x = dot(0); + y = dot(1); if (m.hasPerspective()) { - *x = p->div(*x, dot(2)); - *y = p->div(*y, dot(2)); + x = x * (1.0f / dot(2)); + y = y * (1.0f / dot(2)); } } + return {x,y}; } /////////////////////////////////////////////////////////////////////////////////////////////////// -skvm::Color SkEmptyShader::onProgram(skvm::Builder*, skvm::F32, skvm::F32, skvm::Color, - const SkMatrix&, const SkMatrix*, SkFilterQuality, - const SkColorInfo&, skvm::Uniforms*, SkArenaAlloc*) const { +skvm::Color SkEmptyShader::onProgram(skvm::Builder*, skvm::Coord, skvm::Coord, skvm::Color, + const SkMatrixProvider&, const SkMatrix*, + SkFilterQuality, const SkColorInfo&, + skvm::Uniforms*, SkArenaAlloc*) const { return {}; // signal failure } diff --git a/src/shaders/SkShaderBase.h b/src/shaders/SkShaderBase.h index dda4d1aac5fc9..9119056bd9332 100644 --- a/src/shaders/SkShaderBase.h +++ b/src/shaders/SkShaderBase.h @@ -211,8 +211,8 @@ class SkShaderBase : public SkShader { return this->onAppendUpdatableStages(rec); } - skvm::Color program(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color program(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const; @@ -241,14 +241,15 @@ class SkShaderBase : public SkShader { virtual SkStageUpdater* onAppendUpdatableStages(const SkStageRec&) const { return nullptr; } protected: - static void ApplyMatrix(skvm::Builder*, const SkMatrix&, skvm::F32* x, skvm::F32* y, skvm::Uniforms*); + static skvm::Coord ApplyMatrix(skvm::Builder*, const SkMatrix&, skvm::Coord, skvm::Uniforms*); private: // This is essentially const, but not officially so it can be modified in constructors. SkMatrix fLocalMatrix; - virtual skvm::Color onProgram(skvm::Builder*, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + virtual skvm::Color onProgram(skvm::Builder*, + skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dst, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const; diff --git a/src/shaders/gradients/Sk4fLinearGradient.cpp b/src/shaders/gradients/Sk4fLinearGradient.cpp index d75bec965562a..944ac9fdb4746 100644 --- a/src/shaders/gradients/Sk4fLinearGradient.cpp +++ b/src/shaders/gradients/Sk4fLinearGradient.cpp @@ -190,17 +190,17 @@ LinearGradient4fContext::shadePremulSpan(int x, int y, SkPMColor dst[], int coun const SkLinearGradient& shader = static_cast(fShader); switch (shader.fTileMode) { case SkTileMode::kDecal: - SkASSERT(false); // decal only supported via stages - // fall-through + SkASSERT(false); // decal only supported via stages + [[fallthrough]]; case SkTileMode::kClamp: this->shadeSpanInternal(x, y, dst, count, bias0, bias1); - break; + break; case SkTileMode::kRepeat: this->shadeSpanInternal(x, y, dst, count, bias0, bias1); - break; + break; case SkTileMode::kMirror: this->shadeSpanInternal(x, y, dst, count, bias0, bias1); - break; + break; } } diff --git a/src/shaders/gradients/SkGradientShader.cpp b/src/shaders/gradients/SkGradientShader.cpp index 205a18f05b361..23e5d9a84954b 100644 --- a/src/shaders/gradients/SkGradientShader.cpp +++ b/src/shaders/gradients/SkGradientShader.cpp @@ -299,7 +299,8 @@ bool SkGradientShaderBase::onAppendStages(const SkStageRec& rec) const { decal_ctx->limit_x = SkBits2Float(SkFloat2Bits(1.0f) + 1); // reuse mask + limit_x stage, or create a custom decal_1 that just stores the mask p->append(SkRasterPipeline::decal_x, decal_ctx); - // fall-through to clamp + [[fallthrough]]; + case SkTileMode::kClamp: if (!fOrigPos) { // We clamp only when the stops are evenly spaced. @@ -419,21 +420,22 @@ bool SkGradientShaderBase::onAppendStages(const SkStageRec& rec) const { } skvm::Color SkGradientShaderBase::onProgram(skvm::Builder* p, - skvm::F32 x, skvm::F32 y, skvm::Color /*paint*/, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Coord device, skvm::Coord local, + skvm::Color /*paint*/, + const SkMatrixProvider& mats, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dstInfo, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const { SkMatrix inv; - if (!this->computeTotalInverse(ctm, localM, &inv)) { + if (!this->computeTotalInverse(mats.localToDevice(), localM, &inv)) { return {}; } inv.postConcat(fPtsToUnit); inv.normalizePerspective(); - SkShaderBase::ApplyMatrix(p, inv, &x,&y,uniforms); + local = SkShaderBase::ApplyMatrix(p, inv, local, uniforms); skvm::I32 mask = p->splat(~0); - skvm::F32 t = this->transformT(p,uniforms, x,y, &mask); + skvm::F32 t = this->transformT(p,uniforms, local, &mask); // Perhaps unexpectedly, clamping is handled naturally by our search, so we // don't explicitly clamp t to [0,1]. That clamp would break hard stops diff --git a/src/shaders/gradients/SkGradientShaderPriv.h b/src/shaders/gradients/SkGradientShaderPriv.h index 2a3bfca1808c9..f33c444f9b5c1 100644 --- a/src/shaders/gradients/SkGradientShaderPriv.h +++ b/src/shaders/gradients/SkGradientShaderPriv.h @@ -79,8 +79,8 @@ class SkGradientShaderBase : public SkShaderBase { bool onAppendStages(const SkStageRec&) const override; - skvm::Color onProgram(skvm::Builder* p, skvm::F32 x, skvm::F32 y, skvm::Color paint, - const SkMatrix& ctm, const SkMatrix* localM, + skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint, + const SkMatrixProvider&, const SkMatrix* localM, SkFilterQuality quality, const SkColorInfo& dstCS, skvm::Uniforms* uniforms, SkArenaAlloc* alloc) const override; @@ -89,7 +89,7 @@ class SkGradientShaderBase : public SkShaderBase { // Produce t from (x,y), modifying mask if it should be anything other than ~0. virtual skvm::F32 transformT(skvm::Builder*, skvm::Uniforms*, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const = 0; + skvm::Coord coord, skvm::I32* mask) const = 0; template static Context* CheckedMakeContext(SkArenaAlloc* alloc, Args&&... args) { diff --git a/src/shaders/gradients/SkLinearGradient.cpp b/src/shaders/gradients/SkLinearGradient.cpp index ad5129ccc3b67..347fd177f0014 100644 --- a/src/shaders/gradients/SkLinearGradient.cpp +++ b/src/shaders/gradients/SkLinearGradient.cpp @@ -76,9 +76,9 @@ void SkLinearGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline*, } skvm::F32 SkLinearGradient::transformT(skvm::Builder* p, skvm::Uniforms*, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const { + skvm::Coord coord, skvm::I32* mask) const { // We've baked getting t in x into the matrix, so this is pretty trivial. - return x; + return coord.x; } SkShader::GradientType SkLinearGradient::asAGradient(GradientInfo* info) const { diff --git a/src/shaders/gradients/SkLinearGradient.h b/src/shaders/gradients/SkLinearGradient.h index c8f9bc678f5ba..063b9c5a64786 100644 --- a/src/shaders/gradients/SkLinearGradient.h +++ b/src/shaders/gradients/SkLinearGradient.h @@ -30,7 +30,7 @@ class SkLinearGradient : public SkGradientShaderBase { SkRasterPipeline* postPipeline) const final; skvm::F32 transformT(skvm::Builder*, skvm::Uniforms*, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const final; + skvm::Coord coord, skvm::I32* mask) const final; private: SK_FLATTENABLE_HOOKS(SkLinearGradient) diff --git a/src/shaders/gradients/SkRadialGradient.cpp b/src/shaders/gradients/SkRadialGradient.cpp index aeefe15e74174..fea9ca6b31629 100644 --- a/src/shaders/gradients/SkRadialGradient.cpp +++ b/src/shaders/gradients/SkRadialGradient.cpp @@ -64,8 +64,8 @@ void SkRadialGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline* p, } skvm::F32 SkRadialGradient::transformT(skvm::Builder* p, skvm::Uniforms*, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const { - return sqrt(x*x + y*y); + skvm::Coord coord, skvm::I32* mask) const { + return sqrt(coord.x*coord.x + coord.y*coord.y); } ///////////////////////////////////////////////////////////////////// diff --git a/src/shaders/gradients/SkRadialGradient.h b/src/shaders/gradients/SkRadialGradient.h index 75680978637db..7396bb21d2b0a 100644 --- a/src/shaders/gradients/SkRadialGradient.h +++ b/src/shaders/gradients/SkRadialGradient.h @@ -27,7 +27,7 @@ class SkRadialGradient final : public SkGradientShaderBase { SkRasterPipeline* postPipeline) const override; skvm::F32 transformT(skvm::Builder*, skvm::Uniforms*, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const final; + skvm::Coord coord, skvm::I32* mask) const final; private: SK_FLATTENABLE_HOOKS(SkRadialGradient) diff --git a/src/shaders/gradients/SkSweepGradient.cpp b/src/shaders/gradients/SkSweepGradient.cpp index 1cd7a05098307..6256cc6bf358a 100644 --- a/src/shaders/gradients/SkSweepGradient.cpp +++ b/src/shaders/gradients/SkSweepGradient.cpp @@ -68,9 +68,9 @@ void SkSweepGradient::appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline } skvm::F32 SkSweepGradient::transformT(skvm::Builder* p, skvm::Uniforms* uniforms, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const { - skvm::F32 xabs = abs(x), - yabs = abs(y), + skvm::Coord coord, skvm::I32* mask) const { + skvm::F32 xabs = abs(coord.x), + yabs = abs(coord.y), slope = min(xabs, yabs) / max(xabs, yabs); skvm::F32 s = slope * slope; @@ -82,9 +82,9 @@ skvm::F32 SkSweepGradient::transformT(skvm::Builder* p, skvm::Uniforms* uniforms +2.476101927459239959716796875e-2f, -5.185396969318389892578125e-2f, +0.15912117063999176025390625f); - phi = select(xabs < yabs, (1/4.0f) - phi, phi); - phi = select( x < 0.0f, (1/2.0f) - phi, phi); - phi = select( y < 0.0f, (1/1.0f) - phi, phi); + phi = select( xabs < yabs, (1/4.0f) - phi, phi); + phi = select(coord.x < 0.0f, (1/2.0f) - phi, phi); + phi = select(coord.y < 0.0f, (1/1.0f) - phi, phi); skvm::F32 t = select(is_NaN(phi), p->splat(0.0f) , phi); diff --git a/src/shaders/gradients/SkSweepGradient.h b/src/shaders/gradients/SkSweepGradient.h index e7beae2dae5ec..86ca372ba0c5d 100644 --- a/src/shaders/gradients/SkSweepGradient.h +++ b/src/shaders/gradients/SkSweepGradient.h @@ -31,7 +31,7 @@ class SkSweepGradient final : public SkGradientShaderBase { SkRasterPipeline* postPipeline) const override; skvm::F32 transformT(skvm::Builder*, skvm::Uniforms*, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const final; + skvm::Coord coord, skvm::I32* mask) const final; private: SK_FLATTENABLE_HOOKS(SkSweepGradient) diff --git a/src/shaders/gradients/SkTwoPointConicalGradient.cpp b/src/shaders/gradients/SkTwoPointConicalGradient.cpp index 42b3d6f71b40d..d3ec755217694 100644 --- a/src/shaders/gradients/SkTwoPointConicalGradient.cpp +++ b/src/shaders/gradients/SkTwoPointConicalGradient.cpp @@ -234,11 +234,13 @@ void SkTwoPointConicalGradient::appendGradientStages(SkArenaAlloc* alloc, SkRast } skvm::F32 SkTwoPointConicalGradient::transformT(skvm::Builder* p, skvm::Uniforms* uniforms, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const { + skvm::Coord coord, skvm::I32* mask) const { // See https://skia.org/dev/design/conical, and onAppendStages() above. // There's a lot going on here, and I'm not really sure what's independent // or disjoint, what can be reordered, simplified, etc. Tweak carefully. + const skvm::F32 x = coord.x, + y = coord.y; if (fType == Type::kRadial) { float denom = 1.0f / (fRadius2 - fRadius1), scale = std::max(fRadius1, fRadius2) * denom, diff --git a/src/shaders/gradients/SkTwoPointConicalGradient.h b/src/shaders/gradients/SkTwoPointConicalGradient.h index a8893ce5e1f06..d362ba0a30319 100644 --- a/src/shaders/gradients/SkTwoPointConicalGradient.h +++ b/src/shaders/gradients/SkTwoPointConicalGradient.h @@ -70,7 +70,7 @@ class SkTwoPointConicalGradient final : public SkGradientShaderBase { SkRasterPipeline* postPipeline) const override; skvm::F32 transformT(skvm::Builder*, skvm::Uniforms*, - skvm::F32 x, skvm::F32 y, skvm::I32* mask) const final; + skvm::Coord coord, skvm::I32* mask) const final; private: SK_FLATTENABLE_HOOKS(SkTwoPointConicalGradient) diff --git a/src/sksl/README b/src/sksl/README index 906fd81498471..117515520a8f2 100644 --- a/src/sksl/README +++ b/src/sksl/README @@ -82,7 +82,13 @@ SkSL Fragment Processors An extension of SkSL allows for the creation of fragment processors in pure SkSL. The program defines its inputs similarly to a normal SkSL program (with 'in' and 'uniform' variables), but the 'main()' function represents only this -fragment processor's portion of the overall fragment shader. +fragment processor's portion of the overall fragment shader. The 'main' function +can optionally have a 'float2' parameter that holds the sample coordinates the +processor is evaluated at. + +Processors do not need to declare this parameter if they do not rely on local +coordinates or only invoke child processors using the no-arg and matrix-based +sample() functions. Within an '.fp' fragment processor file: @@ -107,9 +113,6 @@ Within an '.fp' fragment processor file: the name of the GrGLSLProgramDataManager) @test() (the body of the TestCreate function, where is the name of the GrProcessorTestData* parameter) - @coordTransform() - (the matrix to attach to the named sampler2D's - GrCoordTransform) @samplerParams() (the sampler params to attach to the named sampler2D) * global 'in' variables represent data passed to the fragment processor at @@ -133,10 +136,6 @@ Within an '.fp' fragment processor file: * 'in uniform' variables support a 'tracked' flag in the layout that will have the generated code automatically implement state tracking on the uniform value to minimize GPU calls. -* the 'sk_TransformedCoords2D' array provides access to 2D transformed - coordinates. sk_TransformedCoords2D[0] is equivalent to calling - fragBuilder->ensureCoords2D(args.fTransformedCoords[0]) (and the result is - cached, so you need not worry about using the value repeatedly). * Uniform variables support an additional 'when' layout key. 'layout(when=foo) uniform int x;' means that this uniform will only be emitted when the 'foo' expression is true. @@ -150,10 +149,12 @@ Within an '.fp' fragment processor file: The first variant emits the child with a solid white input color. The second variant emits the child with the result of the 2nd argument's expression, which must evaluate to a half4. The process function returns a half4. -* By default, fragment processors must be non-null. The type for a nullable - fragment processor is 'fragmentProcessor?', as in - 'in fragmentProcessor? '. You can check for the presence of such a - fragment processor by comparing it to 'null'. +* The 'fragmentProcessor' type cannot hold a null. Nullable fragment processors + should use the 'fragmentProcessor?' type: 'in fragmentProcessor? '. You + can check for null fragment processors by comparing them against 'null', as + in: 'if (inputFP != null) { ... }'. Invoking 'sample()' on a null fragment + processor will return the inputColor unchanged (this defaults to solid white + if not explicitly specified). Creating a new .fp file diff --git a/src/sksl/SkSLAnalysis.cpp b/src/sksl/SkSLAnalysis.cpp new file mode 100644 index 0000000000000..a221f11decaa3 --- /dev/null +++ b/src/sksl/SkSLAnalysis.cpp @@ -0,0 +1,340 @@ +/* + * Copyright 2020 Google LLC. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "src/sksl/SkSLAnalysis.h" + +#include "include/private/SkSLSampleUsage.h" +#include "src/sksl/ir/SkSLExpression.h" +#include "src/sksl/ir/SkSLProgram.h" +#include "src/sksl/ir/SkSLProgramElement.h" +#include "src/sksl/ir/SkSLStatement.h" + +// ProgramElements +#include "src/sksl/ir/SkSLEnum.h" +#include "src/sksl/ir/SkSLExtension.h" +#include "src/sksl/ir/SkSLFunctionDefinition.h" +#include "src/sksl/ir/SkSLInterfaceBlock.h" +#include "src/sksl/ir/SkSLModifiers.h" +#include "src/sksl/ir/SkSLSection.h" +#include "src/sksl/ir/SkSLVarDeclarations.h" + +// Statements +#include "src/sksl/ir/SkSLBlock.h" +#include "src/sksl/ir/SkSLBreakStatement.h" +#include "src/sksl/ir/SkSLContinueStatement.h" +#include "src/sksl/ir/SkSLDiscardStatement.h" +#include "src/sksl/ir/SkSLDoStatement.h" +#include "src/sksl/ir/SkSLExpressionStatement.h" +#include "src/sksl/ir/SkSLForStatement.h" +#include "src/sksl/ir/SkSLIfStatement.h" +#include "src/sksl/ir/SkSLNop.h" +#include "src/sksl/ir/SkSLReturnStatement.h" +#include "src/sksl/ir/SkSLSwitchStatement.h" +#include "src/sksl/ir/SkSLVarDeclarationsStatement.h" +#include "src/sksl/ir/SkSLWhileStatement.h" + +// Expressions +#include "src/sksl/ir/SkSLBinaryExpression.h" +#include "src/sksl/ir/SkSLBoolLiteral.h" +#include "src/sksl/ir/SkSLConstructor.h" +#include "src/sksl/ir/SkSLExternalFunctionCall.h" +#include "src/sksl/ir/SkSLExternalValueReference.h" +#include "src/sksl/ir/SkSLFieldAccess.h" +#include "src/sksl/ir/SkSLFloatLiteral.h" +#include "src/sksl/ir/SkSLFunctionCall.h" +#include "src/sksl/ir/SkSLFunctionReference.h" +#include "src/sksl/ir/SkSLIndexExpression.h" +#include "src/sksl/ir/SkSLIntLiteral.h" +#include "src/sksl/ir/SkSLNullLiteral.h" +#include "src/sksl/ir/SkSLPostfixExpression.h" +#include "src/sksl/ir/SkSLPrefixExpression.h" +#include "src/sksl/ir/SkSLSetting.h" +#include "src/sksl/ir/SkSLSwizzle.h" +#include "src/sksl/ir/SkSLTernaryExpression.h" +#include "src/sksl/ir/SkSLTypeReference.h" +#include "src/sksl/ir/SkSLVariableReference.h" + +namespace SkSL { + +namespace { + +static bool is_sample_call_to_fp(const FunctionCall& fc, const Variable& fp) { + const FunctionDeclaration& f = fc.fFunction; + return f.fBuiltin && f.fName == "sample" && fc.fArguments.size() >= 1 && + fc.fArguments[0]->fKind == Expression::kVariableReference_Kind && + &((VariableReference&) *fc.fArguments[0]).fVariable == &fp; +} + +// Visitor that determines the merged SampleUsage for a given child 'fp' in the program. +class MergeSampleUsageVisitor : public ProgramVisitor { +public: + MergeSampleUsageVisitor(const Variable& fp) : fFP(fp) {} + + SampleUsage visit(const Program& program) { + fUsage = SampleUsage(); // reset to none + this->INHERITED::visit(program); + return fUsage; + } + +protected: + const Variable& fFP; + SampleUsage fUsage; + + bool visitExpression(const Expression& e) override { + // Looking for sample(fp, inColor?, ...) + if (e.fKind == Expression::kFunctionCall_Kind) { + const FunctionCall& fc = (const FunctionCall&) e; + if (is_sample_call_to_fp(fc, fFP)) { + // Determine the type of call at this site, and merge it with the accumulated state + const Expression* lastArg = fc.fArguments.back().get(); + const Context& context = *this->program().fContext; + + if (lastArg->fType == *context.fFloat2_Type) { + fUsage.merge(SampleUsage::Explicit()); + } else if (lastArg->fType == *context.fFloat3x3_Type) { + // Determine the type of matrix for this call site + if (lastArg->isConstantOrUniform()) { + if (lastArg->fKind == Expression::Kind::kVariableReference_Kind || + lastArg->fKind == Expression::Kind::kConstructor_Kind) { + // FIXME if this is a constant, we should parse the float3x3 constructor + // and determine if the resulting matrix introduces perspective. + fUsage.merge(SampleUsage::UniformMatrix(lastArg->description())); + } else { + // FIXME this is really to workaround a restriction of the downstream + // code that relies on the SampleUsage's fExpression to identify uniform + // names. Once they are tracked separately, any uniform expression can + // work, but right now this avoids issues from '0.5 * matrix' that is + // both a constant AND a uniform. + fUsage.merge(SampleUsage::VariableMatrix()); + } + } else { + fUsage.merge(SampleUsage::VariableMatrix()); + } + } else { + // The only other signatures do pass-through sampling + fUsage.merge(SampleUsage::PassThrough()); + } + // NOTE: we don't return true here just because we found a sample call. We need to + // process the entire program and merge across all encountered calls. + } + } + + return this->INHERITED::visitExpression(e); + } + + typedef ProgramVisitor INHERITED; +}; + +// Visitor that searches through a main function of the program for reference to the +// sample coordinates provided by the parent FP or main program. +class SampleCoordsVisitor : public ProgramVisitor { +protected: + // Only bother recursing through the main function for the sample coord builtin + bool visitProgramElement(const ProgramElement& pe) override { + if (pe.fKind == ProgramElement::kFunction_Kind) { + // Both kFragmentProcessor and kPipelineStage types use the first argument for + // the main coords builtin. If that isn't in the signature, there's no need to + // recurse deeper. + const FunctionDeclaration& func = ((const FunctionDefinition&) pe).fDeclaration; + if (func.fName == "main" && func.fParameters.size() >= 1 && + func.fParameters.front()->fType == *this->program().fContext->fFloat2_Type) { + return this->INHERITED::visitProgramElement(pe); + } + } + // No recursion, but returning false will allow visitor to continue to siblings + return false; + } + + bool visitExpression(const Expression& e) override { + if (e.fKind == Expression::kVariableReference_Kind) { + const VariableReference& var = (const VariableReference&) e; + return var.fVariable.fModifiers.fLayout.fBuiltin == SK_MAIN_COORDS_BUILTIN; + } + return this->INHERITED::visitExpression(e); + } + + typedef ProgramVisitor INHERITED; +}; + +} + +//////////////////////////////////////////////////////////////////////////////// +// Analysis + +SampleUsage Analysis::GetSampleUsage(const Program& program, const Variable& fp) { + MergeSampleUsageVisitor visitor(fp); + return visitor.visit(program); +} + +bool Analysis::ReferencesSampleCoords(const Program& program) { + SampleCoordsVisitor visitor; + return visitor.visit(program); +} + +//////////////////////////////////////////////////////////////////////////////// +// ProgramVisitor + +bool ProgramVisitor::visit(const Program& program) { + fProgram = &program; + bool result = false; + for (const auto& pe : program) { + if (this->visitProgramElement(pe)) { + result = true; + break; + } + } + fProgram = nullptr; + return result; +} + +bool ProgramVisitor::visitExpression(const Expression& e) { + switch(e.fKind) { + case Expression::kBoolLiteral_Kind: + case Expression::kDefined_Kind: + case Expression::kExternalValue_Kind: + case Expression::kFieldAccess_Kind: + case Expression::kFloatLiteral_Kind: + case Expression::kFunctionReference_Kind: + case Expression::kIntLiteral_Kind: + case Expression::kNullLiteral_Kind: + case Expression::kSetting_Kind: + case Expression::kTypeReference_Kind: + case Expression::kVariableReference_Kind: + // Leaf expressions return false + return false; + case Expression::kBinary_Kind: { + const BinaryExpression& b = (const BinaryExpression&) e; + return this->visitExpression(*b.fLeft) || this->visitExpression(*b.fRight); } + case Expression::kConstructor_Kind: { + const Constructor& c = (const Constructor&) e; + for (const auto& arg : c.fArguments) { + if (this->visitExpression(*arg)) { return true; } + } + return false; } + case Expression::kExternalFunctionCall_Kind: { + const ExternalFunctionCall& c = (const ExternalFunctionCall&) e; + for (const auto& arg : c.fArguments) { + if (this->visitExpression(*arg)) { return true; } + } + return false; } + case Expression::kFunctionCall_Kind: { + const FunctionCall& c = (const FunctionCall&) e; + for (const auto& arg : c.fArguments) { + if (this->visitExpression(*arg)) { return true; } + } + return false; } + case Expression::kIndex_Kind:{ + const IndexExpression& i = (const IndexExpression&) e; + return this->visitExpression(*i.fBase) || this->visitExpression(*i.fIndex); } + case Expression::kPostfix_Kind: + return this->visitExpression(*((const PostfixExpression&) e).fOperand); + case Expression::kPrefix_Kind: + return this->visitExpression(*((const PrefixExpression&) e).fOperand); + case Expression::kSwizzle_Kind: + return this->visitExpression(*((const Swizzle&) e).fBase); + case Expression::kTernary_Kind: { + const TernaryExpression& t = (const TernaryExpression&) e; + return this->visitExpression(*t.fTest) || + this->visitExpression(*t.fIfTrue) || + this->visitExpression(*t.fIfFalse); } + default: + SkUNREACHABLE; + } +} + +bool ProgramVisitor::visitStatement(const Statement& s) { + switch(s.fKind) { + case Statement::kBreak_Kind: + case Statement::kContinue_Kind: + case Statement::kDiscard_Kind: + case Statement::kNop_Kind: + // Leaf statements just return false + return false; + case Statement::kBlock_Kind: + for (const auto& s : ((const Block&) s).fStatements) { + if (this->visitStatement(*s)) { return true; } + } + return false; + case Statement::kDo_Kind: { + const DoStatement& d = (const DoStatement&) s; + return this->visitExpression(*d.fTest) || this->visitStatement(*d.fStatement); } + case Statement::kExpression_Kind: + return this->visitExpression(*((const ExpressionStatement&) s).fExpression); + case Statement::kFor_Kind: { + const ForStatement& f = (const ForStatement&) s; + return (f.fInitializer && this->visitStatement(*f.fInitializer)) || + (f.fInitializer && this->visitExpression(*f.fTest)) || + (f.fNext && this->visitExpression(*f.fNext)) || + this->visitStatement(*f.fStatement); } + case Statement::kIf_Kind: { + const IfStatement& i = (const IfStatement&) s; + return this->visitExpression(*i.fTest) || + this->visitStatement(*i.fIfTrue) || + (i.fIfFalse && this->visitStatement(*i.fIfFalse)); } + case Statement::kReturn_Kind: { + const ReturnStatement& r = (const ReturnStatement&) s; + return r.fExpression && this->visitExpression(*r.fExpression); } + case Statement::kSwitch_Kind: { + const SwitchStatement& sw = (const SwitchStatement&) s; + if (this->visitExpression(*sw.fValue)) { return true; } + for (const auto& c : sw.fCases) { + if (c->fValue && this->visitExpression(*c->fValue)) { return true; } + for (const auto& st : c->fStatements) { + if (this->visitStatement(*st)) { return true; } + } + } + return false; } + case Statement::kVarDeclaration_Kind: { + const VarDeclaration& v = (const VarDeclaration&) s; + for (const auto& s : v.fSizes) { + if (this->visitExpression(*s)) { return true; } + } + return v.fValue && this->visitExpression(*v.fValue); } + case Statement::kVarDeclarations_Kind: { + // Technically this statement points to a program element, but it's convenient + // to have program element > statement > expression, so visit the declaration elements + // directly without going up to visitProgramElement. + const VarDeclarations& vars = *((const VarDeclarationsStatement&) s).fDeclaration; + for (const auto& v : vars.fVars) { + if (this->visitStatement(*v)) { return true; } + } + return false; + } + case Statement::kWhile_Kind: { + const WhileStatement& w = (const WhileStatement&) s; + return this->visitExpression(*w.fTest) || this->visitStatement(*w.fStatement); } + default: + SkUNREACHABLE; + } +} + +bool ProgramVisitor::visitProgramElement(const ProgramElement& pe) { + switch(pe.fKind) { + case ProgramElement::kEnum_Kind: + case ProgramElement::kExtension_Kind: + case ProgramElement::kModifiers_Kind: + case ProgramElement::kSection_Kind: + // Leaf program elements just return false by default + return false; + case ProgramElement::kFunction_Kind: + return this->visitStatement(*((const FunctionDefinition&) pe).fBody); + case ProgramElement::kInterfaceBlock_Kind: + for (const auto& e : ((const InterfaceBlock&) pe).fSizes) { + if (this->visitExpression(*e)) { return true; } + } + return false; + case ProgramElement::kVar_Kind: + for (const auto& v : ((const VarDeclarations&) pe).fVars) { + if (this->visitStatement(*v)) { return true; } + } + return false; + default: + SkUNREACHABLE; + } +} + +} diff --git a/src/sksl/SkSLAnalysis.h b/src/sksl/SkSLAnalysis.h new file mode 100644 index 0000000000000..f8b346061d326 --- /dev/null +++ b/src/sksl/SkSLAnalysis.h @@ -0,0 +1,68 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkSLAnalysis_DEFINED +#define SkSLAnalysis_DEFINED + +#include "include/private/SkSLSampleUsage.h" +#include "src/sksl/SkSLDefines.h" + +namespace SkSL { + +struct Expression; +struct Program; +struct ProgramElement; +struct Statement; +struct Variable; + +/** + * Provides utilities for analyzing SkSL statically before it's composed into a full program. + */ +struct Analysis { + static SampleUsage GetSampleUsage(const Program& program, const Variable& fp); + + static bool ReferencesSampleCoords(const Program& program); +}; + +/** + * Utility class to visit every element, statement, and expression in an SkSL program IR. + * This is intended for simple analysis and accumulation, where custom visitation behavior is only + * needed for a limited set of expression kinds. + * + * Subclasses should override visitExpression/visitStatement/visitProgramElement as needed and + * intercept elements of interest. They can then invoke the base class's function to visit all + * sub expressions. They can also choose not to call the base function to arrest recursion, or + * implement custom recursion. + * + * The visit functions return a bool that determines how the default implementation recurses. Once + * any visit call returns true, the default behavior stops recursing and propagates true up the + * stack. + */ + +class ProgramVisitor { +public: + virtual ~ProgramVisitor() { SkASSERT(!fProgram); } + + bool visit(const Program&); + +protected: + const Program& program() const { + SkASSERT(fProgram); + return *fProgram; + } + + virtual bool visitExpression(const Expression&); + virtual bool visitStatement(const Statement&); + virtual bool visitProgramElement(const ProgramElement&); + +private: + const Program* fProgram; +}; + +} + +#endif diff --git a/src/sksl/SkSLByteCode.cpp b/src/sksl/SkSLByteCode.cpp index 65e4301c4b902..d16d2bb21c43d 100644 --- a/src/sksl/SkSLByteCode.cpp +++ b/src/sksl/SkSLByteCode.cpp @@ -14,6 +14,7 @@ #include "src/sksl/SkSLByteCodeGenerator.h" #include "src/sksl/SkSLExternalValue.h" +#include #include namespace SkSL { @@ -34,24 +35,24 @@ using U32 = skvx::Vec; #define READ_INST() (ip += sizeof(ByteCodeInstruction), \ sk_unaligned_load(ip - sizeof(ByteCodeInstruction))) -#define VECTOR_DISASSEMBLE(op, text) \ - case ByteCodeInstruction::op: printf(text); break; \ - case ByteCodeInstruction::op##2: printf(text "2"); break; \ - case ByteCodeInstruction::op##3: printf(text "3"); break; \ - case ByteCodeInstruction::op##4: printf(text "4"); break; +#define DISASSEMBLE_COUNT(op, text) \ + case ByteCodeInstruction::op: printf(text " %d", READ8()); break; -#define VECTOR_MATRIX_DISASSEMBLE(op, text) \ - VECTOR_DISASSEMBLE(op, text) \ - case ByteCodeInstruction::op##N: printf(text "N %d", READ8()); break; +#define DISASSEMBLE_COUNT_SLOT(op, text) \ + case ByteCodeInstruction::op: { \ + int N = READ8(), \ + slot = READ8(); \ + printf(text " %d [%d]", N, slot); \ + } break; static const uint8_t* DisassembleInstruction(const uint8_t* ip) { auto inst = READ_INST(); printf("%04x ", (int)inst); switch (inst) { - VECTOR_MATRIX_DISASSEMBLE(kAddF, "addf") - VECTOR_DISASSEMBLE(kAddI, "addi") - case ByteCodeInstruction::kAndB: printf("andb"); break; - VECTOR_DISASSEMBLE(kATan, "atan") + DISASSEMBLE_COUNT(kAddF, "addf") + DISASSEMBLE_COUNT(kAddI, "addi") + DISASSEMBLE_COUNT(kAndB, "andb") + DISASSEMBLE_COUNT(kATan, "atan") case ByteCodeInstruction::kBranch: printf("branch %d", READ16()); break; case ByteCodeInstruction::kCall: printf("call %d", READ8()); break; case ByteCodeInstruction::kCallExternal: { @@ -61,80 +62,45 @@ static const uint8_t* DisassembleInstruction(const uint8_t* ip) { printf("callexternal %d, %d, %d", argumentCount, returnCount, externalValue); break; } + DISASSEMBLE_COUNT(kCeil, "ceil") case ByteCodeInstruction::kClampIndex: printf("clampindex %d", READ8()); break; - VECTOR_DISASSEMBLE(kCompareIEQ, "compareieq") - VECTOR_DISASSEMBLE(kCompareINEQ, "compareineq") - VECTOR_MATRIX_DISASSEMBLE(kCompareFEQ, "comparefeq") - VECTOR_MATRIX_DISASSEMBLE(kCompareFNEQ, "comparefneq") - VECTOR_DISASSEMBLE(kCompareFGT, "comparefgt") - VECTOR_DISASSEMBLE(kCompareFGTEQ, "comparefgteq") - VECTOR_DISASSEMBLE(kCompareFLT, "compareflt") - VECTOR_DISASSEMBLE(kCompareFLTEQ, "compareflteq") - VECTOR_DISASSEMBLE(kCompareSGT, "comparesgt") - VECTOR_DISASSEMBLE(kCompareSGTEQ, "comparesgteq") - VECTOR_DISASSEMBLE(kCompareSLT, "compareslt") - VECTOR_DISASSEMBLE(kCompareSLTEQ, "compareslteq") - VECTOR_DISASSEMBLE(kCompareUGT, "compareugt") - VECTOR_DISASSEMBLE(kCompareUGTEQ, "compareugteq") - VECTOR_DISASSEMBLE(kCompareULT, "compareult") - VECTOR_DISASSEMBLE(kCompareULTEQ, "compareulteq") - VECTOR_DISASSEMBLE(kConvertFtoI, "convertftoi") - VECTOR_DISASSEMBLE(kConvertStoF, "convertstof") - VECTOR_DISASSEMBLE(kConvertUtoF, "convertutof") - VECTOR_DISASSEMBLE(kCos, "cos") - VECTOR_MATRIX_DISASSEMBLE(kDivideF, "dividef") - VECTOR_DISASSEMBLE(kDivideS, "divideS") - VECTOR_DISASSEMBLE(kDivideU, "divideu") - VECTOR_MATRIX_DISASSEMBLE(kDup, "dup") - VECTOR_DISASSEMBLE(kFract, "fract") + DISASSEMBLE_COUNT(kCompareIEQ, "compareieq") + DISASSEMBLE_COUNT(kCompareINEQ, "compareineq") + DISASSEMBLE_COUNT(kCompareFEQ, "comparefeq") + DISASSEMBLE_COUNT(kCompareFNEQ, "comparefneq") + DISASSEMBLE_COUNT(kCompareFGT, "comparefgt") + DISASSEMBLE_COUNT(kCompareFGTEQ, "comparefgteq") + DISASSEMBLE_COUNT(kCompareFLT, "compareflt") + DISASSEMBLE_COUNT(kCompareFLTEQ, "compareflteq") + DISASSEMBLE_COUNT(kCompareSGT, "comparesgt") + DISASSEMBLE_COUNT(kCompareSGTEQ, "comparesgteq") + DISASSEMBLE_COUNT(kCompareSLT, "compareslt") + DISASSEMBLE_COUNT(kCompareSLTEQ, "compareslteq") + DISASSEMBLE_COUNT(kCompareUGT, "compareugt") + DISASSEMBLE_COUNT(kCompareUGTEQ, "compareugteq") + DISASSEMBLE_COUNT(kCompareULT, "compareult") + DISASSEMBLE_COUNT(kCompareULTEQ, "compareulteq") + DISASSEMBLE_COUNT(kConvertFtoI, "convertftoi") + DISASSEMBLE_COUNT(kConvertStoF, "convertstof") + DISASSEMBLE_COUNT(kConvertUtoF, "convertutof") + DISASSEMBLE_COUNT(kCos, "cos") + DISASSEMBLE_COUNT(kDivideF, "dividef") + DISASSEMBLE_COUNT(kDivideS, "divideS") + DISASSEMBLE_COUNT(kDivideU, "divideu") + DISASSEMBLE_COUNT(kDup, "dup") + DISASSEMBLE_COUNT(kFloor, "floor") + DISASSEMBLE_COUNT(kFract, "fract") case ByteCodeInstruction::kInverse2x2: printf("inverse2x2"); break; case ByteCodeInstruction::kInverse3x3: printf("inverse3x3"); break; case ByteCodeInstruction::kInverse4x4: printf("inverse4x4"); break; - VECTOR_DISASSEMBLE(kLerp, "lerp") - case ByteCodeInstruction::kLoad: printf("load %d", READ8()); break; - case ByteCodeInstruction::kLoad2: printf("load2 %d", READ8()); break; - case ByteCodeInstruction::kLoad3: printf("load3 %d", READ8()); break; - case ByteCodeInstruction::kLoad4: printf("load4 %d", READ8()); break; - case ByteCodeInstruction::kLoadGlobal: printf("loadglobal %d", READ8()); break; - case ByteCodeInstruction::kLoadGlobal2: printf("loadglobal2 %d", READ8()); break; - case ByteCodeInstruction::kLoadGlobal3: printf("loadglobal3 %d", READ8()); break; - case ByteCodeInstruction::kLoadGlobal4: printf("loadglobal4 %d", READ8()); break; - case ByteCodeInstruction::kLoadUniform: printf("loaduniform %d", READ8()); break; - case ByteCodeInstruction::kLoadUniform2: printf("loaduniform2 %d", READ8()); break; - case ByteCodeInstruction::kLoadUniform3: printf("loaduniform3 %d", READ8()); break; - case ByteCodeInstruction::kLoadUniform4: printf("loaduniform4 %d", READ8()); break; - case ByteCodeInstruction::kLoadSwizzle: { - int target = READ8(); - int count = READ8(); - printf("loadswizzle %d %d", target, count); - for (int i = 0; i < count; ++i) { - printf(", %d", READ8()); - } - break; - } - case ByteCodeInstruction::kLoadSwizzleGlobal: { - int target = READ8(); - int count = READ8(); - printf("loadswizzleglobal %d %d", target, count); - for (int i = 0; i < count; ++i) { - printf(", %d", READ8()); - } - break; - } - case ByteCodeInstruction::kLoadSwizzleUniform: { - int target = READ8(); - int count = READ8(); - printf("loadswizzleuniform %d %d", target, count); - for (int i = 0; i < count; ++i) { - printf(", %d", READ8()); - } - break; - } - case ByteCodeInstruction::kLoadExtended: printf("loadextended %d", READ8()); break; - case ByteCodeInstruction::kLoadExtendedGlobal: printf("loadextendedglobal %d", READ8()); - break; - case ByteCodeInstruction::kLoadExtendedUniform: printf("loadextendeduniform %d", READ8()); - break; + DISASSEMBLE_COUNT(kLerp, "lerp") + DISASSEMBLE_COUNT_SLOT(kLoad, "load") + DISASSEMBLE_COUNT_SLOT(kLoadGlobal, "loadglobal") + DISASSEMBLE_COUNT_SLOT(kLoadUniform, "loaduniform") + DISASSEMBLE_COUNT(kLoadExtended, "loadextended") + DISASSEMBLE_COUNT(kLoadExtendedGlobal, "loadextendedglobal") + DISASSEMBLE_COUNT(kLoadExtendedUniform, "loadextendeduniform") + case ByteCodeInstruction::kLoadFragCoord: printf("loadfragcoord"); break; case ByteCodeInstruction::kMatrixToMatrix: { int srcCols = READ8(); int srcRows = READ8(); @@ -150,34 +116,34 @@ static const uint8_t* DisassembleInstruction(const uint8_t* ip) { printf("matrixmultiply %dx%d %dx%d", lCols, lRows, rCols, lCols); break; } - VECTOR_DISASSEMBLE(kMaxF, "maxf") - VECTOR_DISASSEMBLE(kMaxS, "maxs") - VECTOR_DISASSEMBLE(kMinF, "minf") - VECTOR_DISASSEMBLE(kMinS, "mins") - VECTOR_DISASSEMBLE(kMix, "mix") - VECTOR_MATRIX_DISASSEMBLE(kMultiplyF, "multiplyf") - VECTOR_DISASSEMBLE(kMultiplyI, "multiplyi") - VECTOR_MATRIX_DISASSEMBLE(kNegateF, "negatef") - VECTOR_DISASSEMBLE(kNegateI, "negatei") - VECTOR_DISASSEMBLE(kNotB, "notb") - case ByteCodeInstruction::kOrB: printf("orb"); break; - VECTOR_MATRIX_DISASSEMBLE(kPop, "pop") - VECTOR_DISASSEMBLE(kPow, "pow") + DISASSEMBLE_COUNT(kMaxF, "maxf") + DISASSEMBLE_COUNT(kMaxS, "maxs") + DISASSEMBLE_COUNT(kMinF, "minf") + DISASSEMBLE_COUNT(kMinS, "mins") + DISASSEMBLE_COUNT(kMix, "mix") + DISASSEMBLE_COUNT(kMultiplyF, "multiplyf") + DISASSEMBLE_COUNT(kMultiplyI, "multiplyi") + DISASSEMBLE_COUNT(kNegateF, "negatef") + DISASSEMBLE_COUNT(kNegateI, "negatei") + DISASSEMBLE_COUNT(kNotB, "notb") + DISASSEMBLE_COUNT(kOrB, "orb") + DISASSEMBLE_COUNT(kPop, "pop") + DISASSEMBLE_COUNT(kPow, "pow") case ByteCodeInstruction::kPushImmediate: { uint32_t v = READ32(); union { uint32_t u; float f; } pun = { v }; printf("pushimmediate %s", (to_string(v) + "(" + to_string(pun.f) + ")").c_str()); break; } - case ByteCodeInstruction::kReadExternal: printf("readexternal %d", READ8()); break; - case ByteCodeInstruction::kReadExternal2: printf("readexternal2 %d", READ8()); break; - case ByteCodeInstruction::kReadExternal3: printf("readexternal3 %d", READ8()); break; - case ByteCodeInstruction::kReadExternal4: printf("readexternal4 %d", READ8()); break; - VECTOR_DISASSEMBLE(kRemainderF, "remainderf") - VECTOR_DISASSEMBLE(kRemainderS, "remainders") - VECTOR_DISASSEMBLE(kRemainderU, "remainderu") - case ByteCodeInstruction::kReserve: printf("reserve %d", READ8()); break; - case ByteCodeInstruction::kReturn: printf("return %d", READ8()); break; + DISASSEMBLE_COUNT_SLOT(kReadExternal, "readexternal") + DISASSEMBLE_COUNT(kRemainderF, "remainderf") + DISASSEMBLE_COUNT(kRemainderS, "remainders") + DISASSEMBLE_COUNT(kRemainderU, "remainderu") + DISASSEMBLE_COUNT(kReserve, "reserve") + DISASSEMBLE_COUNT(kReturn, "return") + case ByteCodeInstruction::kSample: printf("sample %d", READ8()); break; + case ByteCodeInstruction::kSampleExplicit: printf("sampleExplicit %d", READ8()); break; + case ByteCodeInstruction::kSampleMatrix: printf("sampleMatrix %d", READ8()); break; case ByteCodeInstruction::kScalarToMatrix: { int cols = READ8(); int rows = READ8(); @@ -187,55 +153,14 @@ static const uint8_t* DisassembleInstruction(const uint8_t* ip) { case ByteCodeInstruction::kShiftLeft: printf("shl %d", READ8()); break; case ByteCodeInstruction::kShiftRightS: printf("shrs %d", READ8()); break; case ByteCodeInstruction::kShiftRightU: printf("shru %d", READ8()); break; - VECTOR_DISASSEMBLE(kSin, "sin") - VECTOR_DISASSEMBLE(kSqrt, "sqrt") - case ByteCodeInstruction::kStore: printf("store %d", READ8()); break; - case ByteCodeInstruction::kStore2: printf("store2 %d", READ8()); break; - case ByteCodeInstruction::kStore3: printf("store3 %d", READ8()); break; - case ByteCodeInstruction::kStore4: printf("store4 %d", READ8()); break; - case ByteCodeInstruction::kStoreGlobal: printf("storeglobal %d", READ8()); break; - case ByteCodeInstruction::kStoreGlobal2: printf("storeglobal2 %d", READ8()); break; - case ByteCodeInstruction::kStoreGlobal3: printf("storeglobal3 %d", READ8()); break; - case ByteCodeInstruction::kStoreGlobal4: printf("storeglobal4 %d", READ8()); break; - case ByteCodeInstruction::kStoreSwizzle: { - int target = READ8(); - int count = READ8(); - printf("storeswizzle %d %d", target, count); - for (int i = 0; i < count; ++i) { - printf(", %d", READ8()); - } - break; - } - case ByteCodeInstruction::kStoreSwizzleGlobal: { - int target = READ8(); - int count = READ8(); - printf("storeswizzleglobal %d %d", target, count); - for (int i = 0; i < count; ++i) { - printf(", %d", READ8()); - } - break; - } - case ByteCodeInstruction::kStoreSwizzleIndirect: { - int count = READ8(); - printf("storeswizzleindirect %d", count); - for (int i = 0; i < count; ++i) { - printf(", %d", READ8()); - } - break; - } - case ByteCodeInstruction::kStoreSwizzleIndirectGlobal: { - int count = READ8(); - printf("storeswizzleindirectglobal %d", count); - for (int i = 0; i < count; ++i) { - printf(", %d", READ8()); - } - break; - } - case ByteCodeInstruction::kStoreExtended: printf("storeextended %d", READ8()); break; - case ByteCodeInstruction::kStoreExtendedGlobal: printf("storeextendedglobal %d", READ8()); - break; - VECTOR_MATRIX_DISASSEMBLE(kSubtractF, "subtractf") - VECTOR_DISASSEMBLE(kSubtractI, "subtracti") + DISASSEMBLE_COUNT(kSin, "sin") + DISASSEMBLE_COUNT(kSqrt, "sqrt") + DISASSEMBLE_COUNT_SLOT(kStore, "store") + DISASSEMBLE_COUNT_SLOT(kStoreGlobal, "storeglobal") + DISASSEMBLE_COUNT(kStoreExtended, "storeextended") + DISASSEMBLE_COUNT(kStoreExtendedGlobal, "storeextendedglobal") + DISASSEMBLE_COUNT(kSubtractF, "subtractf") + DISASSEMBLE_COUNT(kSubtractI, "subtracti") case ByteCodeInstruction::kSwizzle: { printf("swizzle %d, ", READ8()); int count = READ8(); @@ -245,12 +170,9 @@ static const uint8_t* DisassembleInstruction(const uint8_t* ip) { } break; } - VECTOR_DISASSEMBLE(kTan, "tan") - case ByteCodeInstruction::kWriteExternal: printf("writeexternal %d", READ8()); break; - case ByteCodeInstruction::kWriteExternal2: printf("writeexternal2 %d", READ8()); break; - case ByteCodeInstruction::kWriteExternal3: printf("writeexternal3 %d", READ8()); break; - case ByteCodeInstruction::kWriteExternal4: printf("writeexternal4 %d", READ8()); break; - case ByteCodeInstruction::kXorB: printf("xorb"); break; + DISASSEMBLE_COUNT(kTan, "tan") + DISASSEMBLE_COUNT_SLOT(kWriteExternal, "writeexternal") + DISASSEMBLE_COUNT(kXorB, "xorb") case ByteCodeInstruction::kMaskPush: printf("maskpush"); break; case ByteCodeInstruction::kMaskPop: printf("maskpop"); break; case ByteCodeInstruction::kMaskNegate: printf("masknegate"); break; @@ -272,108 +194,47 @@ static const uint8_t* DisassembleInstruction(const uint8_t* ip) { return ip; } -#define VECTOR_BINARY_OP(base, field, op) \ - case ByteCodeInstruction::base ## 4: \ - sp[-4] = sp[-4].field op sp[0].field; \ - POP(); \ - /* fall through */ \ - case ByteCodeInstruction::base ## 3: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - sp[count] = sp[count].field op sp[0].field; \ - POP(); \ - } /* fall through */ \ - case ByteCodeInstruction::base ## 2: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - sp[count] = sp[count].field op sp[0].field; \ - POP(); \ - } /* fall through */ \ - case ByteCodeInstruction::base: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - sp[count] = sp[count].field op sp[0].field; \ - POP(); \ - continue; \ - } - // A naive implementation of / or % using skvx operations will likely crash with a divide by zero // in inactive vector lanes, so we need to be sure to avoid masked-off lanes. -#define VECTOR_BINARY_MASKED_OP(base, field, op) \ - case ByteCodeInstruction::base ## 4: \ - for (int i = 0; i < VecWidth; ++i) { \ - if (mask()[i]) { \ - sp[-4].field[i] op ## = sp[0].field[i]; \ - } \ - } \ - POP(); \ - /* fall through */ \ - case ByteCodeInstruction::base ## 3: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - for (int i = 0; i < VecWidth; ++i) { \ - if (mask()[i]) { \ - sp[count].field[i] op ## = sp[0].field[i]; \ - } \ - } \ - POP(); \ - } /* fall through */ \ - case ByteCodeInstruction::base ## 2: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - for (int i = 0; i < VecWidth; ++i) { \ - if (mask()[i]) { \ - sp[count].field[i] op ## = sp[0].field[i]; \ - } \ - } \ - POP(); \ - } /* fall through */ \ - case ByteCodeInstruction::base: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - for (int i = 0; i < VecWidth; ++i) { \ - if (mask()[i]) { \ - sp[count].field[i] op ## = sp[0].field[i]; \ - } \ - } \ - POP(); \ - continue; \ - } - - -#define VECTOR_MATRIX_BINARY_OP(base, field, op) \ - VECTOR_BINARY_OP(base, field, op) \ - case ByteCodeInstruction::base ## N: { \ +// TODO: Would it be better to do this with a select of (lane, 1) based on mask? +#define VECTOR_BINARY_MASKED_OP(inst, field, op) \ + case ByteCodeInstruction::inst: { \ + int count = READ8(); \ + for (int i = count; i > 0; --i) { \ + for (int j = 0; j < VecWidth; ++j) { \ + if (mask()[j]) { \ + sp[-count].field[j] op ## = sp[0].field[j]; \ + } \ + } \ + POP(); \ + } \ + } continue; + +#define VECTOR_BINARY_OP(inst, field, op) \ + case ByteCodeInstruction::inst: { \ int count = READ8(); \ for (int i = count; i > 0; --i) { \ sp[-count] = sp[-count].field op sp[0].field; \ POP(); \ } \ - continue; \ - } - -#define VECTOR_BINARY_FN(base, field, fn) \ - case ByteCodeInstruction::base ## 4: \ - sp[-4] = fn(sp[-4].field, sp[0].field); \ - POP(); \ - /* fall through */ \ - case ByteCodeInstruction::base ## 3: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - sp[count] = fn(sp[count].field, sp[0].field); \ - POP(); \ - } /* fall through */ \ - case ByteCodeInstruction::base ## 2: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - sp[count] = fn(sp[count].field, sp[0].field); \ - POP(); \ - } /* fall through */ \ - case ByteCodeInstruction::base: { \ - int count = (int)inst - (int)(ByteCodeInstruction::base) - 1; \ - sp[count] = fn(sp[count].field, sp[0].field); \ - POP(); \ - continue; \ - } - -#define VECTOR_UNARY_FN(base, fn, field) \ - case ByteCodeInstruction::base ## 4: sp[-3] = fn(sp[-3].field); \ - case ByteCodeInstruction::base ## 3: sp[-2] = fn(sp[-2].field); \ - case ByteCodeInstruction::base ## 2: sp[-1] = fn(sp[-1].field); \ - case ByteCodeInstruction::base: sp[ 0] = fn(sp[ 0].field); \ - continue; + } continue; + +#define VECTOR_BINARY_FN(inst, field, fn) \ + case ByteCodeInstruction::inst: { \ + int count = READ8(); \ + for (int i = count; i > 0; --i) { \ + sp[-count] = fn(sp[-count].field, sp[0].field); \ + POP(); \ + } \ + } continue; + +#define VECTOR_UNARY_FN(inst, fn, field) \ + case ByteCodeInstruction::inst: { \ + int count = READ8(); \ + for (int i = count; i --> 0; ) { \ + sp[-i] = fn(sp[-i].field); \ + } \ + } continue; union VValue { VValue() {} @@ -553,27 +414,14 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue ByteCodeInstruction inst = READ_INST(); switch (inst) { - VECTOR_MATRIX_BINARY_OP(kAddF, fFloat, +) + VECTOR_BINARY_OP(kAddF, fFloat, +) VECTOR_BINARY_OP(kAddI, fSigned, +) // Booleans are integer masks: 0/~0 for false/true. So bitwise ops do what we want: - case ByteCodeInstruction::kAndB: - sp[-1] = sp[-1].fSigned & sp[0].fSigned; - POP(); - continue; - case ByteCodeInstruction::kNotB4: sp[-3] = ~sp[-3].fSigned; - case ByteCodeInstruction::kNotB3: sp[-2] = ~sp[-2].fSigned; - case ByteCodeInstruction::kNotB2: sp[-1] = ~sp[-1].fSigned; - case ByteCodeInstruction::kNotB: sp[ 0] = ~sp[ 0].fSigned; - continue; - case ByteCodeInstruction::kOrB: - sp[-1] = sp[-1].fSigned | sp[0].fSigned; - POP(); - continue; - case ByteCodeInstruction::kXorB: - sp[-1] = sp[-1].fSigned ^ sp[0].fSigned; - POP(); - continue; + VECTOR_BINARY_OP(kAndB, fSigned, &) + VECTOR_BINARY_OP(kOrB, fSigned, |) + VECTOR_BINARY_OP(kXorB, fSigned, ^) + VECTOR_UNARY_FN(kNotB, std::bit_not<>{}, fSigned) case ByteCodeInstruction::kBranch: ip = code + READ16(); @@ -595,76 +443,55 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue stack[i].fFloat = 0.0f; } } - continue; - } + } continue; - case ByteCodeInstruction::kCallExternal: { + case ByteCodeInstruction::kCallExternal: CallExternal(byteCode, ip, sp, baseIndex, mask()); continue; - } + + VECTOR_UNARY_FN(kCeil, skvx::ceil, fFloat) case ByteCodeInstruction::kClampIndex: { int length = READ8(); if (skvx::any(mask() & ((sp[0].fSigned < 0) | (sp[0].fSigned >= length)))) { return false; } - continue; - } - - VECTOR_BINARY_OP(kCompareIEQ, fSigned, ==) - VECTOR_MATRIX_BINARY_OP(kCompareFEQ, fFloat, ==) - VECTOR_BINARY_OP(kCompareINEQ, fSigned, !=) - VECTOR_MATRIX_BINARY_OP(kCompareFNEQ, fFloat, !=) - VECTOR_BINARY_OP(kCompareSGT, fSigned, >) - VECTOR_BINARY_OP(kCompareUGT, fUnsigned, >) - VECTOR_BINARY_OP(kCompareFGT, fFloat, >) - VECTOR_BINARY_OP(kCompareSGTEQ, fSigned, >=) + } continue; + + VECTOR_BINARY_OP(kCompareIEQ, fSigned, ==) + VECTOR_BINARY_OP(kCompareFEQ, fFloat, ==) + VECTOR_BINARY_OP(kCompareINEQ, fSigned, !=) + VECTOR_BINARY_OP(kCompareFNEQ, fFloat, !=) + VECTOR_BINARY_OP(kCompareSGT, fSigned, >) + VECTOR_BINARY_OP(kCompareUGT, fUnsigned, >) + VECTOR_BINARY_OP(kCompareFGT, fFloat, >) + VECTOR_BINARY_OP(kCompareSGTEQ, fSigned, >=) VECTOR_BINARY_OP(kCompareUGTEQ, fUnsigned, >=) - VECTOR_BINARY_OP(kCompareFGTEQ, fFloat, >=) - VECTOR_BINARY_OP(kCompareSLT, fSigned, <) - VECTOR_BINARY_OP(kCompareULT, fUnsigned, <) - VECTOR_BINARY_OP(kCompareFLT, fFloat, <) - VECTOR_BINARY_OP(kCompareSLTEQ, fSigned, <=) + VECTOR_BINARY_OP(kCompareFGTEQ, fFloat, >=) + VECTOR_BINARY_OP(kCompareSLT, fSigned, <) + VECTOR_BINARY_OP(kCompareULT, fUnsigned, <) + VECTOR_BINARY_OP(kCompareFLT, fFloat, <) + VECTOR_BINARY_OP(kCompareSLTEQ, fSigned, <=) VECTOR_BINARY_OP(kCompareULTEQ, fUnsigned, <=) - VECTOR_BINARY_OP(kCompareFLTEQ, fFloat, <=) - - case ByteCodeInstruction::kConvertFtoI4: sp[-3] = skvx::cast(sp[-3].fFloat); - case ByteCodeInstruction::kConvertFtoI3: sp[-2] = skvx::cast(sp[-2].fFloat); - case ByteCodeInstruction::kConvertFtoI2: sp[-1] = skvx::cast(sp[-1].fFloat); - case ByteCodeInstruction::kConvertFtoI: sp[ 0] = skvx::cast(sp[ 0].fFloat); - continue; - - case ByteCodeInstruction::kConvertStoF4: sp[-3] = skvx::cast(sp[-3].fSigned); - case ByteCodeInstruction::kConvertStoF3: sp[-2] = skvx::cast(sp[-2].fSigned); - case ByteCodeInstruction::kConvertStoF2: sp[-1] = skvx::cast(sp[-1].fSigned); - case ByteCodeInstruction::kConvertStoF: sp[ 0] = skvx::cast(sp[ 0].fSigned); - continue; - - case ByteCodeInstruction::kConvertUtoF4: sp[-3] = skvx::cast(sp[-3].fUnsigned); - case ByteCodeInstruction::kConvertUtoF3: sp[-2] = skvx::cast(sp[-2].fUnsigned); - case ByteCodeInstruction::kConvertUtoF2: sp[-1] = skvx::cast(sp[-1].fUnsigned); - case ByteCodeInstruction::kConvertUtoF: sp[ 0] = skvx::cast(sp[ 0].fUnsigned); - continue; + VECTOR_BINARY_OP(kCompareFLTEQ, fFloat, <=) + + VECTOR_UNARY_FN(kConvertFtoI, skvx::cast, fFloat) + VECTOR_UNARY_FN(kConvertStoF, skvx::cast, fSigned) + VECTOR_UNARY_FN(kConvertUtoF, skvx::cast, fUnsigned) VECTOR_UNARY_FN(kCos, skvx::cos, fFloat) VECTOR_BINARY_MASKED_OP(kDivideS, fSigned, /) VECTOR_BINARY_MASKED_OP(kDivideU, fUnsigned, /) - VECTOR_MATRIX_BINARY_OP(kDivideF, fFloat, /) + VECTOR_BINARY_OP(kDivideF, fFloat, /) - case ByteCodeInstruction::kDup4: PUSH(sp[(int)inst - (int)ByteCodeInstruction::kDup]); - case ByteCodeInstruction::kDup3: PUSH(sp[(int)inst - (int)ByteCodeInstruction::kDup]); - case ByteCodeInstruction::kDup2: PUSH(sp[(int)inst - (int)ByteCodeInstruction::kDup]); - case ByteCodeInstruction::kDup : PUSH(sp[(int)inst - (int)ByteCodeInstruction::kDup]); - continue; - - case ByteCodeInstruction::kDupN: { + case ByteCodeInstruction::kDup: { int count = READ8(); memcpy(sp + 1, sp - count + 1, count * sizeof(VValue)); sp += count; - continue; - } + } continue; + VECTOR_UNARY_FN(kFloor, skvx::floor, fFloat) VECTOR_UNARY_FN(kFract, skvx::fract, fFloat) case ByteCodeInstruction::kInverse2x2: @@ -677,11 +504,8 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue Inverse4x4(sp); continue; - case ByteCodeInstruction::kLerp4: - case ByteCodeInstruction::kLerp3: - case ByteCodeInstruction::kLerp2: case ByteCodeInstruction::kLerp: { - int count = (int)ByteCodeInstruction::kLerp - (int)inst + 1; + int count = READ8(); VValue* T = sp - count + 1, * B = T - count, * A = B - count; @@ -689,32 +513,30 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue A[i].fFloat += (B[i].fFloat - A[i].fFloat) * T[i].fFloat; } sp -= 2 * count; - continue; - } + } continue; + + case ByteCodeInstruction::kLoad: { + int count = READ8(), + slot = READ8(); + memcpy(sp + 1, stack + slot, count * sizeof(VValue)); + sp += count; + } continue; - case ByteCodeInstruction::kLoad4: sp[4] = stack[*ip + 3]; - case ByteCodeInstruction::kLoad3: sp[3] = stack[*ip + 2]; - case ByteCodeInstruction::kLoad2: sp[2] = stack[*ip + 1]; - case ByteCodeInstruction::kLoad: sp[1] = stack[*ip + 0]; - ++ip; - sp += (int)ByteCodeInstruction::kLoad - (int)inst + 1; - continue; - - case ByteCodeInstruction::kLoadGlobal4: sp[4] = globals[*ip + 3]; - case ByteCodeInstruction::kLoadGlobal3: sp[3] = globals[*ip + 2]; - case ByteCodeInstruction::kLoadGlobal2: sp[2] = globals[*ip + 1]; - case ByteCodeInstruction::kLoadGlobal: sp[1] = globals[*ip + 0]; - ++ip; - sp += (int)ByteCodeInstruction::kLoadGlobal - (int)inst + 1; - continue; - - case ByteCodeInstruction::kLoadUniform4: sp[4].fFloat = uniforms[*ip + 3]; - case ByteCodeInstruction::kLoadUniform3: sp[3].fFloat = uniforms[*ip + 2]; - case ByteCodeInstruction::kLoadUniform2: sp[2].fFloat = uniforms[*ip + 1]; - case ByteCodeInstruction::kLoadUniform: sp[1].fFloat = uniforms[*ip + 0]; - ++ip; - sp += (int)ByteCodeInstruction::kLoadUniform - (int)inst + 1; - continue; + case ByteCodeInstruction::kLoadGlobal: { + int count = READ8(), + slot = READ8(); + memcpy(sp + 1, globals + slot, count * sizeof(VValue)); + sp += count; + } continue; + + case ByteCodeInstruction::kLoadUniform: { + int count = READ8(), + slot = READ8(); + for (int i = 0; i < count; ++i) { + sp[i + 1].fFloat = uniforms[slot + i]; + } + sp += count; + } continue; case ByteCodeInstruction::kLoadExtended: { int count = READ8(); @@ -728,8 +550,7 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue } } sp += count; - continue; - } + } continue; case ByteCodeInstruction::kLoadExtendedGlobal: { int count = READ8(); @@ -743,8 +564,7 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue } } sp += count; - continue; - } + } continue; case ByteCodeInstruction::kLoadExtendedUniform: { int count = READ8(); @@ -758,38 +578,7 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue } } sp += count; - continue; - } - - case ByteCodeInstruction::kLoadSwizzle: { - int src = READ8(); - int count = READ8(); - for (int i = 0; i < count; ++i) { - PUSH(stack[src + *(ip + i)]); - } - ip += count; - continue; - } - - case ByteCodeInstruction::kLoadSwizzleGlobal: { - int src = READ8(); - int count = READ8(); - for (int i = 0; i < count; ++i) { - PUSH(globals[src + *(ip + i)]); - } - ip += count; - continue; - } - - case ByteCodeInstruction::kLoadSwizzleUniform: { - int src = READ8(); - int count = READ8(); - for (int i = 0; i < count; ++i) { - PUSH(F32(uniforms[src + *(ip + i)])); - } - ip += count; - continue; - } + } continue; case ByteCodeInstruction::kMatrixToMatrix: { int srcCols = READ8(); @@ -813,8 +602,7 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue PUSH(tmp[c*4 + r]); } } - continue; - } + } continue; case ByteCodeInstruction::kMatrixMultiply: { int lCols = READ8(); @@ -834,19 +622,15 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue sp -= (lCols * lRows) + (rCols * rRows); memcpy(sp + 1, tmp, rCols * lRows * sizeof(VValue)); sp += (rCols * lRows); - continue; - } + } continue; VECTOR_BINARY_FN(kMaxF, fFloat, skvx::max) VECTOR_BINARY_FN(kMaxS, fSigned, skvx::max) VECTOR_BINARY_FN(kMinF, fFloat, skvx::min) VECTOR_BINARY_FN(kMinS, fSigned, skvx::min) - case ByteCodeInstruction::kMix4: - case ByteCodeInstruction::kMix3: - case ByteCodeInstruction::kMix2: case ByteCodeInstruction::kMix: { - int count = (int)ByteCodeInstruction::kMix - (int)inst + 1; + int count = READ8(); for (int i = count; i --> 0; ) { // GLSL's arguments are mix(else, true, cond) sp[-(2*count + i)] = skvx::if_then_else(sp[-( i)].fSigned, @@ -854,39 +638,15 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue sp[-(2*count + i)].fFloat); } sp -= 2 * count; - continue; - } + } continue; VECTOR_BINARY_OP(kMultiplyI, fSigned, *) - VECTOR_MATRIX_BINARY_OP(kMultiplyF, fFloat, *) + VECTOR_BINARY_OP(kMultiplyF, fFloat, *) - case ByteCodeInstruction::kNegateF4: sp[-3] = -sp[-3].fFloat; - case ByteCodeInstruction::kNegateF3: sp[-2] = -sp[-2].fFloat; - case ByteCodeInstruction::kNegateF2: sp[-1] = -sp[-1].fFloat; - case ByteCodeInstruction::kNegateF: sp[ 0] = -sp[ 0].fFloat; - continue; + VECTOR_UNARY_FN(kNegateF, std::negate<>{}, fFloat) + VECTOR_UNARY_FN(kNegateI, std::negate<>{}, fSigned) - case ByteCodeInstruction::kNegateFN: { - int count = READ8(); - for (int i = count - 1; i >= 0; --i) { - sp[-i] = -sp[-i].fFloat; - } - continue; - } - - case ByteCodeInstruction::kNegateI4: sp[-3] = -sp[-3].fSigned; - case ByteCodeInstruction::kNegateI3: sp[-2] = -sp[-2].fSigned; - case ByteCodeInstruction::kNegateI2: sp[-1] = -sp[-1].fSigned; - case ByteCodeInstruction::kNegateI: sp[ 0] = -sp[ 0].fSigned; - continue; - - case ByteCodeInstruction::kPop4: POP(); - case ByteCodeInstruction::kPop3: POP(); - case ByteCodeInstruction::kPop2: POP(); - case ByteCodeInstruction::kPop: POP(); - continue; - - case ByteCodeInstruction::kPopN: + case ByteCodeInstruction::kPop: sp -= READ8(); continue; @@ -896,25 +656,22 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue PUSH(U32(READ32())); continue; - case ByteCodeInstruction::kReadExternal: - case ByteCodeInstruction::kReadExternal2: - case ByteCodeInstruction::kReadExternal3: - case ByteCodeInstruction::kReadExternal4: { - int count = (int)ByteCodeInstruction::kReadExternal - (int)inst + 1; - int src = READ8(); + case ByteCodeInstruction::kReadExternal: { + int count = READ8(), + slot = READ8(); + SkASSERT(count <= 4); float tmp[4]; I32 m = mask(); for (int i = 0; i < VecWidth; ++i) { if (m[i]) { - byteCode->fExternalValues[src]->read(baseIndex + i, tmp); + byteCode->fExternalValues[slot]->read(baseIndex + i, tmp); for (int j = 0; j < count; ++j) { sp[j + 1].fFloat[i] = tmp[j]; } } } sp += count; - continue; - } + } continue; VECTOR_BINARY_FN(kRemainderF, fFloat, VecMod) VECTOR_BINARY_MASKED_OP(kRemainderS, fSigned, %) @@ -962,9 +719,8 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue code = frame.fCode; ip = frame.fIP; frames.pop_back(); - continue; } - } + } continue; case ByteCodeInstruction::kScalarToMatrix: { int cols = READ8(); @@ -975,8 +731,7 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue PUSH(c == r ? v : F32(0.0f)); } } - continue; - } + } continue; case ByteCodeInstruction::kShiftLeft: sp[0] = sp[0].fSigned << READ8(); @@ -991,27 +746,23 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue VECTOR_UNARY_FN(kSin, skvx::sin, fFloat) VECTOR_UNARY_FN(kSqrt, skvx::sqrt, fFloat) - case ByteCodeInstruction::kStore4: - stack[*ip+3] = skvx::if_then_else(mask(), POP().fFloat, stack[*ip+3].fFloat); - case ByteCodeInstruction::kStore3: - stack[*ip+2] = skvx::if_then_else(mask(), POP().fFloat, stack[*ip+2].fFloat); - case ByteCodeInstruction::kStore2: - stack[*ip+1] = skvx::if_then_else(mask(), POP().fFloat, stack[*ip+1].fFloat); - case ByteCodeInstruction::kStore: - stack[*ip+0] = skvx::if_then_else(mask(), POP().fFloat, stack[*ip+0].fFloat); - ++ip; - continue; + case ByteCodeInstruction::kStore: { + int count = READ8(), + slot = READ8(); + auto m = mask(); + for (int i = count; i --> 0; ) { + stack[slot+i] = skvx::if_then_else(m, POP().fFloat, stack[slot+i].fFloat); + } + } continue; - case ByteCodeInstruction::kStoreGlobal4: - globals[*ip+3] = skvx::if_then_else(mask(), POP().fFloat, globals[*ip+3].fFloat); - case ByteCodeInstruction::kStoreGlobal3: - globals[*ip+2] = skvx::if_then_else(mask(), POP().fFloat, globals[*ip+2].fFloat); - case ByteCodeInstruction::kStoreGlobal2: - globals[*ip+1] = skvx::if_then_else(mask(), POP().fFloat, globals[*ip+1].fFloat); - case ByteCodeInstruction::kStoreGlobal: - globals[*ip+0] = skvx::if_then_else(mask(), POP().fFloat, globals[*ip+0].fFloat); - ++ip; - continue; + case ByteCodeInstruction::kStoreGlobal: { + int count = READ8(), + slot = READ8(); + auto m = mask(); + for (int i = count; i --> 0; ) { + globals[slot+i] = skvx::if_then_else(m, POP().fFloat, globals[slot+i].fFloat); + } + } continue; case ByteCodeInstruction::kStoreExtended: { int count = READ8(); @@ -1026,8 +777,8 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue } } sp -= count; - continue; - } + } continue; + case ByteCodeInstruction::kStoreExtendedGlobal: { int count = READ8(); I32 target = POP().fSigned; @@ -1041,65 +792,10 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue } } sp -= count; - continue; - } - - case ByteCodeInstruction::kStoreSwizzle: { - int target = READ8(); - int count = READ8(); - for (int i = count - 1; i >= 0; --i) { - stack[target + *(ip + i)] = skvx::if_then_else( - mask(), POP().fFloat, stack[target + *(ip + i)].fFloat); - } - ip += count; - continue; - } - - case ByteCodeInstruction::kStoreSwizzleGlobal: { - int target = READ8(); - int count = READ8(); - for (int i = count - 1; i >= 0; --i) { - globals[target + *(ip + i)] = skvx::if_then_else( - mask(), POP().fFloat, globals[target + *(ip + i)].fFloat); - } - ip += count; - continue; - } - - case ByteCodeInstruction::kStoreSwizzleIndirect: { - int count = READ8(); - I32 target = POP().fSigned; - I32 m = mask(); - for (int i = count - 1; i >= 0; --i) { - I32 v = POP().fSigned; - for (int j = 0; j < VecWidth; ++j) { - if (m[j]) { - stack[target[j] + *(ip + i)].fSigned[j] = v[j]; - } - } - } - ip += count; - continue; - } - - case ByteCodeInstruction::kStoreSwizzleIndirectGlobal: { - int count = READ8(); - I32 target = POP().fSigned; - I32 m = mask(); - for (int i = count - 1; i >= 0; --i) { - I32 v = POP().fSigned; - for (int j = 0; j < VecWidth; ++j) { - if (m[j]) { - globals[target[j] + *(ip + i)].fSigned[j] = v[j]; - } - } - } - ip += count; - continue; - } + } continue; VECTOR_BINARY_OP(kSubtractI, fSigned, -) - VECTOR_MATRIX_BINARY_OP(kSubtractF, fFloat, -) + VECTOR_BINARY_OP(kSubtractF, fFloat, -) case ByteCodeInstruction::kSwizzle: { VValue tmp[4]; @@ -1109,18 +805,15 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue for (int i = READ8() - 1; i >= 0; --i) { PUSH(tmp[READ8()]); } - continue; - } + } continue; VECTOR_UNARY_FN(kATan, skvx::atan, fFloat) VECTOR_UNARY_FN(kTan, skvx::tan, fFloat) - case ByteCodeInstruction::kWriteExternal4: - case ByteCodeInstruction::kWriteExternal3: - case ByteCodeInstruction::kWriteExternal2: case ByteCodeInstruction::kWriteExternal: { - int count = (int)ByteCodeInstruction::kWriteExternal - (int)inst + 1; - int target = READ8(); + int count = READ8(), + slot = READ8(); + SkASSERT(count <= 4); float tmp[4]; I32 m = mask(); sp -= count; @@ -1129,11 +822,10 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue for (int j = 0; j < count; ++j) { tmp[j] = sp[j + 1].fFloat[i]; } - byteCode->fExternalValues[target]->write(baseIndex + i, tmp); + byteCode->fExternalValues[slot]->write(baseIndex + i, tmp); } } - continue; - } + } continue; case ByteCodeInstruction::kMaskPush: condPtr[1] = POP().fSigned; @@ -1154,15 +846,13 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue sp[-count] = skvx::if_then_else(m, sp[-count].fFloat, sp[0].fFloat); --sp; } - continue; - } + } continue; case ByteCodeInstruction::kBranchIfAllFalse: { int target = READ16(); if (!skvx::any(mask())) { ip = code + target; } - continue; - } + } continue; case ByteCodeInstruction::kLoopBegin: contPtr[1] = 0; @@ -1186,8 +876,16 @@ static bool InnerRun(const ByteCode* byteCode, const ByteCodeFunction* f, VValue I32 m = mask(); *contPtr |= m; *loopPtr &= ~m; - continue; - } + } continue; + + case ByteCodeInstruction::kLoadFragCoord: + case ByteCodeInstruction::kSample: + case ByteCodeInstruction::kSampleExplicit: + case ByteCodeInstruction::kSampleMatrix: + default: + // TODO: Support these? + SkASSERT(false); + return false; } } } @@ -1276,7 +974,7 @@ bool ByteCode::runStriped(const ByteCodeFunction* f, int N, float* outReturn[], int returnCount, const float* uniforms, int uniformCount) const { #if defined(SK_ENABLE_SKSL_INTERPRETER) - Interpreter::VValue stack[128]; + Interpreter::VValue stack[192]; int stackNeeded = f->fParameterCount + f->fLocalCount + f->fStackCount; if (stackNeeded > (int)SK_ARRAY_COUNT(stack)) { return false; diff --git a/src/sksl/SkSLByteCode.h b/src/sksl/SkSLByteCode.h index 0e98736910c86..5fee07f881c06 100644 --- a/src/sksl/SkSLByteCode.h +++ b/src/sksl/SkSLByteCode.h @@ -19,67 +19,63 @@ namespace SkSL { class ExternalValue; struct FunctionDeclaration; -#define VECTOR(name) name ## 4, name ## 3, name ## 2, name -#define VECTOR_MATRIX(name) name ## 4, name ## 3, name ## 2, name, name ## N - enum class ByteCodeInstruction : uint16_t { // B = bool, F = float, I = int, S = signed, U = unsigned - VECTOR_MATRIX(kAddF), - VECTOR(kAddI), - kAndB, - VECTOR(kATan), + + kAddF, // N + kAddI, // N + kAndB, // N + kATan, // N kBranch, // Followed by a byte indicating the index of the function to call kCall, // Followed by three bytes indicating: the number of argument slots, the number of return slots, // and the index of the external value to call kCallExternal, + kCeil, // N // For dynamic array access: Followed by byte indicating length of array kClampIndex, - VECTOR(kCompareIEQ), - VECTOR(kCompareINEQ), - VECTOR_MATRIX(kCompareFEQ), - VECTOR_MATRIX(kCompareFNEQ), - VECTOR(kCompareFGT), - VECTOR(kCompareFGTEQ), - VECTOR(kCompareFLT), - VECTOR(kCompareFLTEQ), - VECTOR(kCompareSGT), - VECTOR(kCompareSGTEQ), - VECTOR(kCompareSLT), - VECTOR(kCompareSLTEQ), - VECTOR(kCompareUGT), - VECTOR(kCompareUGTEQ), - VECTOR(kCompareULT), - VECTOR(kCompareULTEQ), - VECTOR(kConvertFtoI), - VECTOR(kConvertStoF), - VECTOR(kConvertUtoF), - VECTOR(kCos), - VECTOR_MATRIX(kDivideF), - VECTOR(kDivideS), - VECTOR(kDivideU), - // Duplicates the top stack value - VECTOR_MATRIX(kDup), - VECTOR(kFract), + kCompareIEQ, // N + kCompareINEQ, // N + kCompareFEQ, // N + kCompareFNEQ, // N + kCompareFGT, // N + kCompareFGTEQ, // N + kCompareFLT, // N + kCompareFLTEQ, // N + kCompareSGT, // N + kCompareSGTEQ, // N + kCompareSLT, // N + kCompareSLTEQ, // N + kCompareUGT, // N + kCompareUGTEQ, // N + kCompareULT, // N + kCompareULTEQ, // N + kConvertFtoI, // N + kConvertStoF, // N + kConvertUtoF, // N + kCos, // N + kDivideF, // N + kDivideS, // N + kDivideU, // N + // Duplicates the top N stack values + kDup, // N + kFloor, // N + kFract, // N kInverse2x2, kInverse3x3, kInverse4x4, // A1, A2, .., B1, B2, .., T1, T2, .. -> lerp(A1, B1, T1), lerp(A2, B2, T2), .. - VECTOR(kLerp), - // kLoad/kLoadGlobal are followed by a byte indicating the local/global slot to load - VECTOR(kLoad), - VECTOR(kLoadGlobal), - VECTOR(kLoadUniform), - // As kLoad/kLoadGlobal, then a count byte (1-4), and then one byte per swizzle component (0-3). - kLoadSwizzle, - kLoadSwizzleGlobal, - kLoadSwizzleUniform, - // kLoadExtended* are fallback load ops when we lack a specialization. They are followed by a - // count byte, and get the slot to load from the top of the stack. - kLoadExtended, - kLoadExtendedGlobal, - kLoadExtendedUniform, + kLerp, // N + kLoad, // N, slot + kLoadGlobal, // N, slot + kLoadUniform, // N, slot + // Indirect loads get the slot to load from the top of the stack + kLoadExtended, // N + kLoadExtendedGlobal, // N + kLoadExtendedUniform, // N + // Loads "sk_FragCoord" [X, Y, Z, 1/W] + kLoadFragCoord, // Followed by four bytes: srcCols, srcRows, dstCols, dstRows. Consumes the src matrix from the // stack, and replaces it with the dst matrix. Per GLSL rules, there are no restrictions on // dimensions. Any overlapping values are copied, and any other values are filled in with the @@ -87,32 +83,38 @@ enum class ByteCodeInstruction : uint16_t { kMatrixToMatrix, // Followed by three bytes: leftCols (== rightRows), leftRows, rightCols kMatrixMultiply, - VECTOR(kMaxF), - VECTOR(kMaxS), // SkSL only declares signed versions of min/max - VECTOR(kMinF), - VECTOR(kMinS), + kMaxF, // N + kMaxS, // N -- SkSL only declares signed versions of min/max + kMinF, // N + kMinS, // N // Masked selection: Stack is ... A1, A2, A3, B1, B2, B3, M1, M2, M3 // Result: M1 ? B1 : A1, M2 ? B2 : A2, M3 ? B3 : A3 - VECTOR(kMix), - VECTOR_MATRIX(kNegateF), - VECTOR(kNegateI), - VECTOR_MATRIX(kMultiplyF), - VECTOR(kMultiplyI), - VECTOR(kNotB), - kOrB, - VECTOR_MATRIX(kPop), - VECTOR(kPow), + kMix, // N + kNegateF, // N + kNegateI, // N + kMultiplyF, // N + kMultiplyI, // N + kNotB, // N + kOrB, // N + kPop, // N + kPow, // N // Followed by a 32 bit value containing the value to push kPushImmediate, - // Followed by a byte indicating external value to read - VECTOR(kReadExternal), - VECTOR(kRemainderF), - VECTOR(kRemainderS), - VECTOR(kRemainderU), + kReadExternal, // N, slot + kRemainderF, // N + kRemainderS, // N + kRemainderU, // N // Followed by a byte indicating the number of slots to reserve on the stack (for later return) kReserve, // Followed by a byte indicating the number of slots being returned kReturn, + // kSample* are followed by a byte indicating the FP slot to sample, and produce (R, G, B, A) + // Does "pass-through" sampling at the same coords as the parent + kSample, + // Expects stack to contain (X, Y) + kSampleExplicit, + // Expects stack to contain a 3x3 matrix (applied to parent's sample coords) + kSampleMatrix, // Followed by two bytes indicating columns and rows of matrix (2, 3, or 4 each). // Takes a single value from the top of the stack, and converts to a CxR matrix with that value // replicated along the diagonal (and zero elsewhere), per the GLSL matrix construction rules. @@ -121,32 +123,22 @@ enum class ByteCodeInstruction : uint16_t { kShiftLeft, kShiftRightS, kShiftRightU, - VECTOR(kSin), - VECTOR(kSqrt), - // kStore/kStoreGlobal are followed by a byte indicating the local/global slot to store - VECTOR(kStore), - VECTOR(kStoreGlobal), - // Fallback stores. Followed by count byte, and get the slot to store from the top of the stack - kStoreExtended, - kStoreExtendedGlobal, - // As kStore/kStoreGlobal, then a count byte (1-4), then one byte per swizzle component (0-3). - // Expects the stack to look like: ... v1 v2 v3 v4, where the number of 'v's is equal to the - // number of swizzle components. After the store, all v's are popped from the stack. - kStoreSwizzle, - kStoreSwizzleGlobal, - // As above, but gets the store slot from the top of the stack (before values to be stored) - kStoreSwizzleIndirect, - kStoreSwizzleIndirectGlobal, + kSin, // N + kSqrt, // N + kStore, // N, slot + kStoreGlobal, // N, slot + // Indirect stores get the slot to store from the top of the stack + kStoreExtended, // N + kStoreExtendedGlobal, // N // Followed by two count bytes (1-4), and then one byte per swizzle component (0-3). The first // count byte provides the current vector size (the vector is the top n stack elements), and the // second count byte provides the swizzle component count. kSwizzle, - VECTOR_MATRIX(kSubtractF), - VECTOR(kSubtractI), - VECTOR(kTan), - // Followed by a byte indicating external value to write - VECTOR(kWriteExternal), - kXorB, + kSubtractF, // N + kSubtractI, // N + kTan, // N + kWriteExternal, // N, slot + kXorB, // N kMaskPush, kMaskPop, @@ -276,6 +268,12 @@ class SK_API ByteCode { } const Uniform& getUniform(int i) const { return fUniforms[i]; } + /** + * Some byte code programs can't be executed by the interpreter, due to unsupported features. + * They may still be used to convert to other formats, or for reflection of uniforms. + */ + bool canRun() const { return fChildFPCount == 0 && !fUsesFragCoord; } + private: ByteCode(const ByteCode&) = delete; ByteCode& operator=(const ByteCode&) = delete; @@ -285,6 +283,8 @@ class SK_API ByteCode { int fGlobalSlotCount = 0; int fUniformSlotCount = 0; + int fChildFPCount = 0; + bool fUsesFragCoord = false; std::vector fUniforms; std::vector> fFunctions; diff --git a/src/sksl/SkSLByteCodeGenerator.cpp b/src/sksl/SkSLByteCodeGenerator.cpp index c625051ff0d83..1e267dadb3d4f 100644 --- a/src/sksl/SkSLByteCodeGenerator.cpp +++ b/src/sksl/SkSLByteCodeGenerator.cpp @@ -46,21 +46,25 @@ ByteCodeGenerator::ByteCodeGenerator(const Context* context, const Program* prog // they're available to "generic" interpreter programs (eg particles). // You can probably copy the declarations from sksl_gpu.inc. , fIntrinsics { - { "atan", ByteCodeInstruction::kATan }, - { "clamp", SpecialIntrinsic::kClamp }, - { "cos", ByteCodeInstruction::kCos }, - { "dot", SpecialIntrinsic::kDot }, - { "fract", ByteCodeInstruction::kFract }, - { "inverse", ByteCodeInstruction::kInverse2x2 }, - { "length", SpecialIntrinsic::kLength }, - { "max", SpecialIntrinsic::kMax }, - { "min", SpecialIntrinsic::kMin }, - { "mix", SpecialIntrinsic::kMix }, - { "pow", ByteCodeInstruction::kPow }, - { "saturate", SpecialIntrinsic::kSaturate }, - { "sin", ByteCodeInstruction::kSin }, - { "sqrt", ByteCodeInstruction::kSqrt }, - { "tan", ByteCodeInstruction::kTan }, + { "atan", ByteCodeInstruction::kATan }, + { "ceil", ByteCodeInstruction::kCeil }, + { "clamp", SpecialIntrinsic::kClamp }, + { "cos", ByteCodeInstruction::kCos }, + { "dot", SpecialIntrinsic::kDot }, + { "floor", ByteCodeInstruction::kFloor }, + { "fract", ByteCodeInstruction::kFract }, + { "inverse", ByteCodeInstruction::kInverse2x2 }, + { "length", SpecialIntrinsic::kLength }, + { "max", SpecialIntrinsic::kMax }, + { "min", SpecialIntrinsic::kMin }, + { "mix", SpecialIntrinsic::kMix }, + { "normalize", SpecialIntrinsic::kNormalize }, + { "pow", ByteCodeInstruction::kPow }, + { "sample", SpecialIntrinsic::kSample }, + { "saturate", SpecialIntrinsic::kSaturate }, + { "sin", ByteCodeInstruction::kSin }, + { "sqrt", ByteCodeInstruction::kSqrt }, + { "tan", ByteCodeInstruction::kTan }, { "lessThan", { ByteCodeInstruction::kCompareFLT, ByteCodeInstruction::kCompareSLT, @@ -150,6 +154,9 @@ bool ByteCodeGenerator::generateCode() { VarDeclarations& decl = (VarDeclarations&) e; for (const auto& v : decl.fVars) { const Variable* declVar = ((VarDeclaration&) *v).fVar; + if (declVar->fType == *fContext.fFragmentProcessor_Type) { + fOutput->fChildFPCount++; + } if (declVar->fModifiers.fLayout.fBuiltin >= 0 || is_in(*declVar)) { continue; } @@ -184,7 +191,6 @@ std::unique_ptr ByteCodeGenerator::writeFunction(const Functio SkASSERT(fStackCount == 0); } this->write(ByteCodeInstruction::kReturn, 0); - this->write8(0); result->fLocalCount = fLocals.size(); result->fConditionCount = fMaxConditionCount; @@ -200,10 +206,27 @@ std::unique_ptr ByteCodeGenerator::writeFunction(const Functio return result; } +// If the expression is a reference to a builtin global variable, return the builtin ID. +// Otherwise, return -1. +static int expression_as_builtin(const Expression& e) { + if (e.fKind == Expression::kVariableReference_Kind) { + const Variable& var(((VariableReference&)e).fVariable); + if (var.fStorage == Variable::kGlobal_Storage) { + return var.fModifiers.fLayout.fBuiltin; + } + } + return -1; +} + // A "simple" Swizzle is based on a variable (or a compound variable like a struct or array), and // that references consecutive values, such that it can be implemented using normal load/store ops // with an offset. Note that all single-component swizzles (of suitable base types) are simple. static bool swizzle_is_simple(const Swizzle& s) { + // Builtin variables use dedicated instructions that don't allow subset loads + if (expression_as_builtin(*s.fBase) >= 0) { + return false; + } + switch (s.fBase->fKind) { case Expression::kFieldAccess_Kind: case Expression::kIndex_Kind: @@ -241,128 +264,90 @@ int ByteCodeGenerator::StackUsage(ByteCodeInstruction inst, int count_) { switch (inst) { // Unary functions/operators that don't change stack depth at all: -#define VECTOR_UNARY_OP(base) \ - case ByteCodeInstruction::base: \ - case ByteCodeInstruction::base ## 2: \ - case ByteCodeInstruction::base ## 3: \ - case ByteCodeInstruction::base ## 4: \ - return 0; - - VECTOR_UNARY_OP(kConvertFtoI) - VECTOR_UNARY_OP(kConvertStoF) - VECTOR_UNARY_OP(kConvertUtoF) - - VECTOR_UNARY_OP(kATan) - VECTOR_UNARY_OP(kCos) - VECTOR_UNARY_OP(kFract) - VECTOR_UNARY_OP(kSin) - VECTOR_UNARY_OP(kSqrt) - VECTOR_UNARY_OP(kTan) - - VECTOR_UNARY_OP(kNegateF) - VECTOR_UNARY_OP(kNegateI) - VECTOR_UNARY_OP(kNotB) + +#define VEC_UNARY(inst) case ByteCodeInstruction::inst: return count - count; + + VEC_UNARY(kConvertFtoI) + VEC_UNARY(kConvertStoF) + VEC_UNARY(kConvertUtoF) + + VEC_UNARY(kATan) + VEC_UNARY(kCeil) + VEC_UNARY(kCos) + VEC_UNARY(kFloor) + VEC_UNARY(kFract) + VEC_UNARY(kSin) + VEC_UNARY(kSqrt) + VEC_UNARY(kTan) + + VEC_UNARY(kNegateF) + VEC_UNARY(kNegateI) + VEC_UNARY(kNotB) + +#undef VEC_UNARY case ByteCodeInstruction::kInverse2x2: case ByteCodeInstruction::kInverse3x3: case ByteCodeInstruction::kInverse4x4: return 0; - case ByteCodeInstruction::kClampIndex: return 0; - case ByteCodeInstruction::kNegateFN: return 0; - case ByteCodeInstruction::kShiftLeft: return 0; + case ByteCodeInstruction::kClampIndex: return 0; + case ByteCodeInstruction::kShiftLeft: return 0; case ByteCodeInstruction::kShiftRightS: return 0; case ByteCodeInstruction::kShiftRightU: return 0; -#undef VECTOR_UNARY_OP - - // Binary functions/operators that do a 2 -> 1 reduction (possibly N times) -#define VECTOR_BINARY_OP(base) \ - case ByteCodeInstruction::base: return -1; \ - case ByteCodeInstruction::base ## 2: return -2; \ - case ByteCodeInstruction::base ## 3: return -3; \ - case ByteCodeInstruction::base ## 4: return -4; - -#define VECTOR_MATRIX_BINARY_OP(base) \ - VECTOR_BINARY_OP(base) \ - case ByteCodeInstruction::base ## N: return -count; - - case ByteCodeInstruction::kAndB: return -1; - case ByteCodeInstruction::kOrB: return -1; - case ByteCodeInstruction::kXorB: return -1; - - VECTOR_BINARY_OP(kAddI) - VECTOR_MATRIX_BINARY_OP(kAddF) - - VECTOR_BINARY_OP(kCompareIEQ) - VECTOR_MATRIX_BINARY_OP(kCompareFEQ) - VECTOR_BINARY_OP(kCompareINEQ) - VECTOR_MATRIX_BINARY_OP(kCompareFNEQ) - VECTOR_BINARY_OP(kCompareSGT) - VECTOR_BINARY_OP(kCompareUGT) - VECTOR_BINARY_OP(kCompareFGT) - VECTOR_BINARY_OP(kCompareSGTEQ) - VECTOR_BINARY_OP(kCompareUGTEQ) - VECTOR_BINARY_OP(kCompareFGTEQ) - VECTOR_BINARY_OP(kCompareSLT) - VECTOR_BINARY_OP(kCompareULT) - VECTOR_BINARY_OP(kCompareFLT) - VECTOR_BINARY_OP(kCompareSLTEQ) - VECTOR_BINARY_OP(kCompareULTEQ) - VECTOR_BINARY_OP(kCompareFLTEQ) - - VECTOR_BINARY_OP(kDivideS) - VECTOR_BINARY_OP(kDivideU) - VECTOR_MATRIX_BINARY_OP(kDivideF) - VECTOR_BINARY_OP(kMaxF) - VECTOR_BINARY_OP(kMaxS) - VECTOR_BINARY_OP(kMinF) - VECTOR_BINARY_OP(kMinS) - VECTOR_BINARY_OP(kMultiplyI) - VECTOR_MATRIX_BINARY_OP(kMultiplyF) - VECTOR_BINARY_OP(kPow) - VECTOR_BINARY_OP(kRemainderF) - VECTOR_BINARY_OP(kRemainderS) - VECTOR_BINARY_OP(kRemainderU) - VECTOR_BINARY_OP(kSubtractI) - VECTOR_MATRIX_BINARY_OP(kSubtractF) - -#undef VECTOR_BINARY_OP -#undef VECTOR_MATRIX_BINARY_OP + // Binary functions/operators that do a 2 -> 1 reduction, N times + case ByteCodeInstruction::kAndB: return -count; + case ByteCodeInstruction::kOrB: return -count; + case ByteCodeInstruction::kXorB: return -count; + + case ByteCodeInstruction::kAddI: return -count; + case ByteCodeInstruction::kAddF: return -count; + + case ByteCodeInstruction::kCompareIEQ: return -count; + case ByteCodeInstruction::kCompareFEQ: return -count; + case ByteCodeInstruction::kCompareINEQ: return -count; + case ByteCodeInstruction::kCompareFNEQ: return -count; + case ByteCodeInstruction::kCompareSGT: return -count; + case ByteCodeInstruction::kCompareUGT: return -count; + case ByteCodeInstruction::kCompareFGT: return -count; + case ByteCodeInstruction::kCompareSGTEQ: return -count; + case ByteCodeInstruction::kCompareUGTEQ: return -count; + case ByteCodeInstruction::kCompareFGTEQ: return -count; + case ByteCodeInstruction::kCompareSLT: return -count; + case ByteCodeInstruction::kCompareULT: return -count; + case ByteCodeInstruction::kCompareFLT: return -count; + case ByteCodeInstruction::kCompareSLTEQ: return -count; + case ByteCodeInstruction::kCompareULTEQ: return -count; + case ByteCodeInstruction::kCompareFLTEQ: return -count; + + case ByteCodeInstruction::kDivideS: return -count; + case ByteCodeInstruction::kDivideU: return -count; + case ByteCodeInstruction::kDivideF: return -count; + case ByteCodeInstruction::kMaxF: return -count; + case ByteCodeInstruction::kMaxS: return -count; + case ByteCodeInstruction::kMinF: return -count; + case ByteCodeInstruction::kMinS: return -count; + case ByteCodeInstruction::kMultiplyI: return -count; + case ByteCodeInstruction::kMultiplyF: return -count; + case ByteCodeInstruction::kPow: return -count; + case ByteCodeInstruction::kRemainderF: return -count; + case ByteCodeInstruction::kRemainderS: return -count; + case ByteCodeInstruction::kRemainderU: return -count; + case ByteCodeInstruction::kSubtractI: return -count; + case ByteCodeInstruction::kSubtractF: return -count; // Ops that push or load data to grow the stack: + case ByteCodeInstruction::kPushImmediate: + return 1; + case ByteCodeInstruction::kLoadFragCoord: + return 4; + case ByteCodeInstruction::kDup: case ByteCodeInstruction::kLoad: case ByteCodeInstruction::kLoadGlobal: case ByteCodeInstruction::kLoadUniform: case ByteCodeInstruction::kReadExternal: - case ByteCodeInstruction::kPushImmediate: - return 1; - - case ByteCodeInstruction::kDup2: - case ByteCodeInstruction::kLoad2: - case ByteCodeInstruction::kLoadGlobal2: - case ByteCodeInstruction::kLoadUniform2: - case ByteCodeInstruction::kReadExternal2: - return 2; - - case ByteCodeInstruction::kDup3: - case ByteCodeInstruction::kLoad3: - case ByteCodeInstruction::kLoadGlobal3: - case ByteCodeInstruction::kLoadUniform3: - case ByteCodeInstruction::kReadExternal3: - return 3; - - case ByteCodeInstruction::kDup4: - case ByteCodeInstruction::kLoad4: - case ByteCodeInstruction::kLoadGlobal4: - case ByteCodeInstruction::kLoadUniform4: - case ByteCodeInstruction::kReadExternal4: - return 4; - - case ByteCodeInstruction::kDupN: - case ByteCodeInstruction::kLoadSwizzle: - case ByteCodeInstruction::kLoadSwizzleGlobal: - case ByteCodeInstruction::kLoadSwizzleUniform: + case ByteCodeInstruction::kReserve: return count; // Pushes 'count' values, minus one for the 'address' that's consumed first @@ -373,64 +358,39 @@ int ByteCodeGenerator::StackUsage(ByteCodeInstruction inst, int count_) { // Ops that pop or store data to shrink the stack: case ByteCodeInstruction::kPop: + case ByteCodeInstruction::kReturn: case ByteCodeInstruction::kStore: case ByteCodeInstruction::kStoreGlobal: case ByteCodeInstruction::kWriteExternal: - return -1; - - case ByteCodeInstruction::kPop2: - case ByteCodeInstruction::kStore2: - case ByteCodeInstruction::kStoreGlobal2: - case ByteCodeInstruction::kWriteExternal2: - return -2; - - case ByteCodeInstruction::kPop3: - case ByteCodeInstruction::kStore3: - case ByteCodeInstruction::kStoreGlobal3: - case ByteCodeInstruction::kWriteExternal3: - return -3; - - case ByteCodeInstruction::kPop4: - case ByteCodeInstruction::kStore4: - case ByteCodeInstruction::kStoreGlobal4: - case ByteCodeInstruction::kWriteExternal4: - return -4; - - case ByteCodeInstruction::kPopN: - case ByteCodeInstruction::kStoreSwizzle: - case ByteCodeInstruction::kStoreSwizzleGlobal: return -count; // Consumes 'count' values, plus one for the 'address' case ByteCodeInstruction::kStoreExtended: case ByteCodeInstruction::kStoreExtendedGlobal: - case ByteCodeInstruction::kStoreSwizzleIndirect: - case ByteCodeInstruction::kStoreSwizzleIndirectGlobal: return -count - 1; // Strange ops where the caller computes the delta for us: case ByteCodeInstruction::kCallExternal: case ByteCodeInstruction::kMatrixToMatrix: case ByteCodeInstruction::kMatrixMultiply: - case ByteCodeInstruction::kReserve: - case ByteCodeInstruction::kReturn: case ByteCodeInstruction::kScalarToMatrix: case ByteCodeInstruction::kSwizzle: return count; // Miscellaneous + // () -> (R, G, B, A) + case ByteCodeInstruction::kSample: return 4; + // (X, Y) -> (R, G, B, A) + case ByteCodeInstruction::kSampleExplicit: return 4 - 2; + // (float3x3) -> (R, G, B, A) + case ByteCodeInstruction::kSampleMatrix: return 4 - 9; + // kMix does a 3 -> 1 reduction (A, B, M -> A -or- B) for each component - case ByteCodeInstruction::kMix: return -2; - case ByteCodeInstruction::kMix2: return -4; - case ByteCodeInstruction::kMix3: return -6; - case ByteCodeInstruction::kMix4: return -8; + case ByteCodeInstruction::kMix: return -(2 * count); // kLerp works the same way (producing lerp(A, B, T) for each component) - case ByteCodeInstruction::kLerp: return -2; - case ByteCodeInstruction::kLerp2: return -4; - case ByteCodeInstruction::kLerp3: return -6; - case ByteCodeInstruction::kLerp4: return -8; + case ByteCodeInstruction::kLerp: return -(2 * count); // kCall is net-zero. Max stack depth is adjusted in writeFunctionCall. case ByteCodeInstruction::kCall: return 0; @@ -485,6 +445,27 @@ ByteCodeGenerator::Location ByteCodeGenerator::getLocation(const Variable& var) return Location::MakeInvalid(); } case Variable::kGlobal_Storage: { + if (var.fType == *fContext.fFragmentProcessor_Type) { + int offset = 0; + for (const auto& e : fProgram) { + if (e.fKind == ProgramElement::kVar_Kind) { + VarDeclarations& decl = (VarDeclarations&) e; + for (const auto& v : decl.fVars) { + const Variable* declVar = ((VarDeclaration&) *v).fVar; + if (declVar->fType != *fContext.fFragmentProcessor_Type) { + continue; + } + if (declVar == &var) { + SkASSERT(offset <= 255); + return { offset, Storage::kChildFP }; + } + offset++; + } + } + } + SkASSERT(false); + return Location::MakeInvalid(); + } if (is_in(var)) { // If you see this error, it means the program is using raw 'in' variables. You // should either specialize the program (Compiler::specialize) to bake in the final @@ -537,7 +518,7 @@ ByteCodeGenerator::Location ByteCodeGenerator::getLocation(const Expression& exp if (offset != 0) { this->write(ByteCodeInstruction::kPushImmediate); this->write32(offset); - this->write(ByteCodeInstruction::kAddI); + this->write(ByteCodeInstruction::kAddI, 1); } return baseLoc; } else { @@ -550,7 +531,7 @@ ByteCodeGenerator::Location ByteCodeGenerator::getLocation(const Expression& exp int length = i.fBase->fType.columns(); SkASSERT(length <= 255); int offset = -1; - if (i.fIndex->isConstant()) { + if (i.fIndex->isCompileTimeConstant()) { int64_t index = i.fIndex->getConstantInt(); if (index < 0 || index >= length) { fErrors.error(i.fIndex->fOffset, "Array index out of bounds."); @@ -571,7 +552,7 @@ ByteCodeGenerator::Location ByteCodeGenerator::getLocation(const Expression& exp if (stride != 1) { this->write(ByteCodeInstruction::kPushImmediate); this->write32(stride); - this->write(ByteCodeInstruction::kMultiplyI); + this->write(ByteCodeInstruction::kMultiplyI, 1); } } Location baseLoc = this->getLocation(*i.fBase); @@ -597,7 +578,7 @@ ByteCodeGenerator::Location ByteCodeGenerator::getLocation(const Expression& exp this->write(ByteCodeInstruction::kPushImmediate); this->write32(offset); } - this->write(ByteCodeInstruction::kAddI); + this->write(ByteCodeInstruction::kAddI, 1); return baseLoc.makeOnStack(); } case Expression::kSwizzle_Kind: { @@ -609,7 +590,7 @@ ByteCodeGenerator::Location ByteCodeGenerator::getLocation(const Expression& exp if (offset != 0) { this->write(ByteCodeInstruction::kPushImmediate); this->write32(offset); - this->write(ByteCodeInstruction::kAddI); + this->write(ByteCodeInstruction::kAddI, 1); } return baseLoc; } else { @@ -655,33 +636,37 @@ void ByteCodeGenerator::write(ByteCodeInstruction i, int count) { this->write16((uint16_t)i); fStackCount += StackUsage(i, count); fMaxStackCount = std::max(fMaxStackCount, fStackCount); -} -static ByteCodeInstruction vector_instruction(ByteCodeInstruction base, int count) { - SkASSERT(count >= 1 && count <= 4); - return ((ByteCodeInstruction) ((int) base + 1 - count)); + // Most ops have an explicit count byte after them (passed here as 'count') + // Ops that don't have a count byte pass the default (kUnusedStackCount) + // There are a handful of strange ops that pass in a computed stack delta as count, but where + // that value should *not* be written as a count byte (it may even be negative!) + if (count != kUnusedStackCount) { + switch (i) { + // Odd instructions that have a non-default count, but we shouldn't write it + case ByteCodeInstruction::kCallExternal: + case ByteCodeInstruction::kMatrixToMatrix: + case ByteCodeInstruction::kMatrixMultiply: + case ByteCodeInstruction::kScalarToMatrix: + case ByteCodeInstruction::kSwizzle: + break; + default: + this->write8(count); + break; + } + } } -void ByteCodeGenerator::writeTypedInstruction(const Type& type, ByteCodeInstruction s, - ByteCodeInstruction u, ByteCodeInstruction f, +void ByteCodeGenerator::writeTypedInstruction(const Type& type, + ByteCodeInstruction s, + ByteCodeInstruction u, + ByteCodeInstruction f, int count) { switch (type_category(type)) { case TypeCategory::kBool: - case TypeCategory::kSigned: - this->write(vector_instruction(s, count)); - break; - case TypeCategory::kUnsigned: - this->write(vector_instruction(u, count)); - break; - case TypeCategory::kFloat: { - if (count > 4) { - this->write((ByteCodeInstruction)((int)f + 1), count); - this->write8(count); - } else { - this->write(vector_instruction(f, count)); - } - break; - } + case TypeCategory::kSigned: this->write(s, count); break; + case TypeCategory::kUnsigned: this->write(u, count); break; + case TypeCategory::kFloat: this->write(f, count); break; default: SkASSERT(false); } @@ -710,7 +695,7 @@ bool ByteCodeGenerator::writeBinaryExpression(const BinaryExpression& b, bool di op = b.fOperator; if (!lVecOrMtx && rVecOrMtx) { for (int i = SlotCount(rType); i > 1; --i) { - this->write(ByteCodeInstruction::kDup); + this->write(ByteCodeInstruction::kDup, 1); } } } @@ -719,25 +704,25 @@ bool ByteCodeGenerator::writeBinaryExpression(const BinaryExpression& b, bool di switch (op) { case Token::Kind::TK_LOGICALAND: { SkASSERT(tc == SkSL::TypeCategory::kBool && count == 1); - this->write(ByteCodeInstruction::kDup); + this->write(ByteCodeInstruction::kDup, 1); this->write(ByteCodeInstruction::kMaskPush); this->write(ByteCodeInstruction::kBranchIfAllFalse); DeferredLocation falseLocation(this); this->writeExpression(*b.fRight); - this->write(ByteCodeInstruction::kAndB); + this->write(ByteCodeInstruction::kAndB, 1); falseLocation.set(); this->write(ByteCodeInstruction::kMaskPop); return false; } case Token::Kind::TK_LOGICALOR: { SkASSERT(tc == SkSL::TypeCategory::kBool && count == 1); - this->write(ByteCodeInstruction::kDup); - this->write(ByteCodeInstruction::kNotB); + this->write(ByteCodeInstruction::kDup, 1); + this->write(ByteCodeInstruction::kNotB, 1); this->write(ByteCodeInstruction::kMaskPush); this->write(ByteCodeInstruction::kBranchIfAllFalse); DeferredLocation falseLocation(this); this->writeExpression(*b.fRight); - this->write(ByteCodeInstruction::kOrB); + this->write(ByteCodeInstruction::kOrB, 1); falseLocation.set(); this->write(ByteCodeInstruction::kMaskPop); return false; @@ -746,7 +731,7 @@ bool ByteCodeGenerator::writeBinaryExpression(const BinaryExpression& b, bool di case Token::Kind::TK_SHR: { SkASSERT(count == 1 && (tc == SkSL::TypeCategory::kSigned || tc == SkSL::TypeCategory::kUnsigned)); - if (!b.fRight->isConstant()) { + if (!b.fRight->isCompileTimeConstant()) { fErrors.error(b.fRight->fOffset, "Shift amounts must be constant"); return false; } @@ -773,7 +758,7 @@ bool ByteCodeGenerator::writeBinaryExpression(const BinaryExpression& b, bool di this->writeExpression(*b.fRight); if (lVecOrMtx && !rVecOrMtx) { for (int i = SlotCount(lType); i > 1; --i) { - this->write(ByteCodeInstruction::kDup); + this->write(ByteCodeInstruction::kDup, 1); } } // Special case for M*V, V*M, M*M (but not V*V!) @@ -803,7 +788,7 @@ bool ByteCodeGenerator::writeBinaryExpression(const BinaryExpression& b, bool di count); // Collapse to a single bool for (int i = count; i > 1; --i) { - this->write(ByteCodeInstruction::kAndB); + this->write(ByteCodeInstruction::kAndB, 1); } break; case Token::Kind::TK_GT: @@ -843,7 +828,7 @@ bool ByteCodeGenerator::writeBinaryExpression(const BinaryExpression& b, bool di count); // Collapse to a single bool for (int i = count; i > 1; --i) { - this->write(ByteCodeInstruction::kOrB); + this->write(ByteCodeInstruction::kOrB, 1); } break; case Token::Kind::TK_PERCENT: @@ -872,24 +857,21 @@ bool ByteCodeGenerator::writeBinaryExpression(const BinaryExpression& b, bool di break; case Token::Kind::TK_LOGICALXOR: - SkASSERT(tc == SkSL::TypeCategory::kBool && count == 1); - this->write(ByteCodeInstruction::kXorB); + SkASSERT(tc == SkSL::TypeCategory::kBool); + this->write(ByteCodeInstruction::kXorB, count); break; case Token::Kind::TK_BITWISEAND: - SkASSERT(count == 1 && (tc == SkSL::TypeCategory::kSigned || - tc == SkSL::TypeCategory::kUnsigned)); - this->write(ByteCodeInstruction::kAndB); + SkASSERT(tc == SkSL::TypeCategory::kSigned || tc == SkSL::TypeCategory::kUnsigned); + this->write(ByteCodeInstruction::kAndB, count); break; case Token::Kind::TK_BITWISEOR: - SkASSERT(count == 1 && (tc == SkSL::TypeCategory::kSigned || - tc == SkSL::TypeCategory::kUnsigned)); - this->write(ByteCodeInstruction::kOrB); + SkASSERT(tc == SkSL::TypeCategory::kSigned || tc == SkSL::TypeCategory::kUnsigned); + this->write(ByteCodeInstruction::kOrB, count); break; case Token::Kind::TK_BITWISEXOR: - SkASSERT(count == 1 && (tc == SkSL::TypeCategory::kSigned || - tc == SkSL::TypeCategory::kUnsigned)); - this->write(ByteCodeInstruction::kXorB); + SkASSERT(tc == SkSL::TypeCategory::kSigned || tc == SkSL::TypeCategory::kUnsigned); + this->write(ByteCodeInstruction::kXorB, count); break; default: @@ -926,13 +908,13 @@ void ByteCodeGenerator::writeConstructor(const Constructor& c) { if (inCategory == TypeCategory::kFloat) { SkASSERT(outCategory == TypeCategory::kSigned || outCategory == TypeCategory::kUnsigned); - this->write(vector_instruction(ByteCodeInstruction::kConvertFtoI, outCount)); + this->write(ByteCodeInstruction::kConvertFtoI, outCount); } else if (outCategory == TypeCategory::kFloat) { if (inCategory == TypeCategory::kSigned) { - this->write(vector_instruction(ByteCodeInstruction::kConvertStoF, outCount)); + this->write(ByteCodeInstruction::kConvertStoF, outCount); } else { SkASSERT(inCategory == TypeCategory::kUnsigned); - this->write(vector_instruction(ByteCodeInstruction::kConvertUtoF, outCount)); + this->write(ByteCodeInstruction::kConvertUtoF, outCount); } } else { SkASSERT(false); @@ -954,7 +936,7 @@ void ByteCodeGenerator::writeConstructor(const Constructor& c) { } else { SkASSERT(outType.kind() == Type::kVector_Kind); for (; inCount != outCount; ++inCount) { - this->write(ByteCodeInstruction::kDup); + this->write(ByteCodeInstruction::kDup, 1); } } } @@ -979,7 +961,7 @@ void ByteCodeGenerator::writeExternalFunctionCall(const ExternalFunctionCall& f) void ByteCodeGenerator::writeExternalValue(const ExternalValueReference& e) { int count = SlotCount(e.fValue->type()); - this->write(vector_instruction(ByteCodeInstruction::kReadExternal, count)); + this->write(ByteCodeInstruction::kReadExternal, count); int index = fOutput->fExternalValues.size(); fOutput->fExternalValues.push_back(e.fValue); SkASSERT(index <= 255); @@ -987,26 +969,34 @@ void ByteCodeGenerator::writeExternalValue(const ExternalValueReference& e) { } void ByteCodeGenerator::writeVariableExpression(const Expression& expr) { + if (int builtin = expression_as_builtin(expr); builtin >= 0) { + switch (builtin) { + case SK_FRAGCOORD_BUILTIN: + this->write(ByteCodeInstruction::kLoadFragCoord); + fOutput->fUsesFragCoord = true; + break; + default: + fErrors.error(expr.fOffset, "Unsupported builtin"); + break; + } + return; + } + Location location = this->getLocation(expr); int count = SlotCount(expr.fType); if (count == 0) { return; } - if (location.isOnStack() || count > 4) { - if (!location.isOnStack()) { - this->write(ByteCodeInstruction::kPushImmediate); - this->write32(location.fSlot); - } + if (location.isOnStack()) { this->write(location.selectLoad(ByteCodeInstruction::kLoadExtended, ByteCodeInstruction::kLoadExtendedGlobal, ByteCodeInstruction::kLoadExtendedUniform), count); - this->write8(count); } else { - this->write(vector_instruction(location.selectLoad(ByteCodeInstruction::kLoad, - ByteCodeInstruction::kLoadGlobal, - ByteCodeInstruction::kLoadUniform), - count)); + this->write(location.selectLoad(ByteCodeInstruction::kLoad, + ByteCodeInstruction::kLoadGlobal, + ByteCodeInstruction::kLoadUniform), + count); this->write8(location.fSlot); } } @@ -1035,36 +1025,66 @@ void ByteCodeGenerator::writeIntrinsicCall(const FunctionCall& c) { return; } Intrinsic intrin = found->second; - int count = SlotCount(c.fArguments[0]->fType); + + const auto& args = c.fArguments; + const size_t nargs = args.size(); + SkASSERT(nargs >= 1); + + int count = SlotCount(args[0]->fType); // Several intrinsics have variants where one argument is either scalar, or the same size as // the first argument. Call dupSmallerType(SlotCount(argType)) to ensure equal component count. auto dupSmallerType = [count, this](int smallCount) { SkASSERT(smallCount == 1 || smallCount == count); for (int i = smallCount; i < count; ++i) { - this->write(ByteCodeInstruction::kDup); + this->write(ByteCodeInstruction::kDup, 1); } }; + if (intrin.is_special && intrin.special == SpecialIntrinsic::kSample) { + // Sample is very special, the first argument is an FP, which can't be pushed to the stack. + if (nargs > 2 || args[0]->fType != *fContext.fFragmentProcessor_Type || + (nargs == 2 && (args[1]->fType != *fContext.fFloat2_Type && + args[1]->fType != *fContext.fFloat3x3_Type))) { + fErrors.error(c.fOffset, "Unsupported form of sample"); + return; + } + + if (nargs == 2) { + // Write our coords or matrix + this->writeExpression(*args[1]); + this->write(args[1]->fType == *fContext.fFloat3x3_Type + ? ByteCodeInstruction::kSampleMatrix + : ByteCodeInstruction::kSampleExplicit); + } else { + this->write(ByteCodeInstruction::kSample); + } + + Location childLoc = this->getLocation(*args[0]); + SkASSERT(childLoc.fStorage == Storage::kChildFP); + this->write8(childLoc.fSlot); + return; + } + if (intrin.is_special && (intrin.special == SpecialIntrinsic::kClamp || intrin.special == SpecialIntrinsic::kSaturate)) { // These intrinsics are extra-special, we need instructions interleaved with arguments bool saturate = (intrin.special == SpecialIntrinsic::kSaturate); - SkASSERT(c.fArguments.size() == (saturate ? 1 : 3)); - int limitCount = saturate ? 1 : SlotCount(c.fArguments[1]->fType); + SkASSERT(nargs == (saturate ? 1 : 3)); + int limitCount = saturate ? 1 : SlotCount(args[1]->fType); // 'x' - this->writeExpression(*c.fArguments[0]); + this->writeExpression(*args[0]); // 'minVal' if (saturate) { this->write(ByteCodeInstruction::kPushImmediate); this->write32(float_to_bits(0.0f)); } else { - this->writeExpression(*c.fArguments[1]); + this->writeExpression(*args[1]); } dupSmallerType(limitCount); - this->writeTypedInstruction(c.fArguments[0]->fType, + this->writeTypedInstruction(args[0]->fType, ByteCodeInstruction::kMaxS, ByteCodeInstruction::kMaxS, ByteCodeInstruction::kMaxF, @@ -1075,11 +1095,11 @@ void ByteCodeGenerator::writeIntrinsicCall(const FunctionCall& c) { this->write(ByteCodeInstruction::kPushImmediate); this->write32(float_to_bits(1.0f)); } else { - SkASSERT(limitCount == SlotCount(c.fArguments[2]->fType)); - this->writeExpression(*c.fArguments[2]); + SkASSERT(limitCount == SlotCount(args[2]->fType)); + this->writeExpression(*args[2]); } dupSmallerType(limitCount); - this->writeTypedInstruction(c.fArguments[0]->fType, + this->writeTypedInstruction(args[0]->fType, ByteCodeInstruction::kMinS, ByteCodeInstruction::kMinS, ByteCodeInstruction::kMinF, @@ -1088,7 +1108,7 @@ void ByteCodeGenerator::writeIntrinsicCall(const FunctionCall& c) { } // All other intrinsics can handle their arguments being on the stack in order - for (const auto& arg : c.fArguments) { + for (const auto& arg : args) { this->writeExpression(*arg); } @@ -1096,48 +1116,48 @@ void ByteCodeGenerator::writeIntrinsicCall(const FunctionCall& c) { switch (intrin.special) { case SpecialIntrinsic::kAll: { for (int i = count-1; i --> 0;) { - this->write(ByteCodeInstruction::kAndB); + this->write(ByteCodeInstruction::kAndB, 1); } } break; case SpecialIntrinsic::kAny: { for (int i = count-1; i --> 0;) { - this->write(ByteCodeInstruction::kOrB); + this->write(ByteCodeInstruction::kOrB, 1); } } break; case SpecialIntrinsic::kDot: { - SkASSERT(c.fArguments.size() == 2); - SkASSERT(count == SlotCount(c.fArguments[1]->fType)); - this->write(vector_instruction(ByteCodeInstruction::kMultiplyF, count)); + SkASSERT(nargs == 2); + SkASSERT(count == SlotCount(args[1]->fType)); + this->write(ByteCodeInstruction::kMultiplyF, count); for (int i = count-1; i --> 0;) { - this->write(ByteCodeInstruction::kAddF); + this->write(ByteCodeInstruction::kAddF, 1); } } break; case SpecialIntrinsic::kLength: { - SkASSERT(c.fArguments.size() == 1); - this->write(vector_instruction(ByteCodeInstruction::kDup , count)); - this->write(vector_instruction(ByteCodeInstruction::kMultiplyF, count)); + SkASSERT(nargs == 1); + this->write(ByteCodeInstruction::kDup, count); + this->write(ByteCodeInstruction::kMultiplyF, count); for (int i = count-1; i --> 0;) { - this->write(ByteCodeInstruction::kAddF); + this->write(ByteCodeInstruction::kAddF, 1); } - this->write(ByteCodeInstruction::kSqrt); + this->write(ByteCodeInstruction::kSqrt, 1); } break; case SpecialIntrinsic::kMax: case SpecialIntrinsic::kMin: { - SkASSERT(c.fArguments.size() == 2); + SkASSERT(nargs == 2); // There are variants where the second argument is scalar - dupSmallerType(SlotCount(c.fArguments[1]->fType)); + dupSmallerType(SlotCount(args[1]->fType)); if (intrin.special == SpecialIntrinsic::kMax) { - this->writeTypedInstruction(c.fArguments[0]->fType, + this->writeTypedInstruction(args[0]->fType, ByteCodeInstruction::kMaxS, ByteCodeInstruction::kMaxS, ByteCodeInstruction::kMaxF, count); } else { - this->writeTypedInstruction(c.fArguments[0]->fType, + this->writeTypedInstruction(args[0]->fType, ByteCodeInstruction::kMinS, ByteCodeInstruction::kMinS, ByteCodeInstruction::kMinF, @@ -1147,28 +1167,40 @@ void ByteCodeGenerator::writeIntrinsicCall(const FunctionCall& c) { case SpecialIntrinsic::kMix: { // Two main variants of mix to handle - SkASSERT(c.fArguments.size() == 3); - SkASSERT(count == SlotCount(c.fArguments[1]->fType)); - int selectorCount = SlotCount(c.fArguments[2]->fType); + SkASSERT(nargs == 3); + SkASSERT(count == SlotCount(args[1]->fType)); + int selectorCount = SlotCount(args[2]->fType); - if (is_generic_type(&c.fArguments[2]->fType, fContext.fGenBType_Type.get())) { + if (is_generic_type(&args[2]->fType, fContext.fGenBType_Type.get())) { // mix(genType, genType, genBoolType) SkASSERT(selectorCount == count); - this->write(vector_instruction(ByteCodeInstruction::kMix, count)); + this->write(ByteCodeInstruction::kMix, count); } else { // mix(genType, genType, genType) or mix(genType, genType, float) dupSmallerType(selectorCount); - this->write(vector_instruction(ByteCodeInstruction::kLerp, count)); + this->write(ByteCodeInstruction::kLerp, count); } } break; + case SpecialIntrinsic::kNormalize: { + SkASSERT(nargs == 1); + this->write(ByteCodeInstruction::kDup, count); + this->write(ByteCodeInstruction::kDup, count); + this->write(ByteCodeInstruction::kMultiplyF, count); + for (int i = count-1; i --> 0;) { + this->write(ByteCodeInstruction::kAddF, 1); + } + this->write(ByteCodeInstruction::kSqrt, 1); + dupSmallerType(1); + this->write(ByteCodeInstruction::kDivideF, count); + } break; + default: SkASSERT(false); } } else { switch (intrin.inst_f) { case ByteCodeInstruction::kInverse2x2: { - SkASSERT(c.fArguments.size() > 0); auto op = ByteCodeInstruction::kInverse2x2; switch (count) { case 4: break; // float2x2 @@ -1181,8 +1213,11 @@ void ByteCodeGenerator::writeIntrinsicCall(const FunctionCall& c) { } default: - this->writeTypedInstruction(c.fArguments[0]->fType, intrin.inst_s, intrin.inst_u, - intrin.inst_f, count); + this->writeTypedInstruction(args[0]->fType, + intrin.inst_s, + intrin.inst_u, + intrin.inst_f, + count); break; } } @@ -1215,7 +1250,6 @@ void ByteCodeGenerator::writeFunctionCall(const FunctionCall& f) { // We may need to deal with out parameters, so the sequence is tricky if (int returnCount = SlotCount(f.fType)) { this->write(ByteCodeInstruction::kReserve, returnCount); - this->write8(returnCount); } int argCount = f.fArguments.size(); @@ -1247,11 +1281,8 @@ void ByteCodeGenerator::writeFunctionCall(const FunctionCall& f) { // counts for all parameters that aren't out-params, so we can pop them in one big chunk. int popCount = 0; auto pop = [&]() { - if (popCount > 4) { - this->write(ByteCodeInstruction::kPopN, popCount); - this->write8(popCount); - } else if (popCount > 0) { - this->write(vector_instruction(ByteCodeInstruction::kPop, popCount)); + if (popCount > 0) { + this->write(ByteCodeInstruction::kPop, popCount); } popCount = 0; }; @@ -1323,7 +1354,7 @@ bool ByteCodeGenerator::writePrefixExpression(const PrefixExpression& p, bool di (p.fOperator == Token::Kind::TK_BITWISENOT && (tc == TypeCategory::kSigned || tc == TypeCategory::kUnsigned))); this->writeExpression(*p.fOperand); - this->write(ByteCodeInstruction::kNotB); + this->write(ByteCodeInstruction::kNotB, 1); break; } default: @@ -1341,7 +1372,7 @@ bool ByteCodeGenerator::writePostfixExpression(const PostfixExpression& p, bool lvalue->load(); // If we're not supposed to discard the result, then make a copy *before* the +/- if (!discard) { - this->write(ByteCodeInstruction::kDup); + this->write(ByteCodeInstruction::kDup, 1); } this->write(ByteCodeInstruction::kPushImmediate); this->write32(type_category(p.fType) == TypeCategory::kFloat ? float_to_bits(1.0f) : 1); @@ -1375,29 +1406,12 @@ void ByteCodeGenerator::writeSwizzle(const Swizzle& s) { return; } - switch (s.fBase->fKind) { - case Expression::kVariableReference_Kind: { - Location location = this->getLocation(*s.fBase); - this->write(location.selectLoad(ByteCodeInstruction::kLoadSwizzle, - ByteCodeInstruction::kLoadSwizzleGlobal, - ByteCodeInstruction::kLoadSwizzleUniform), - s.fComponents.size()); - this->write8(location.fSlot); - this->write8(s.fComponents.size()); - for (int c : s.fComponents) { - this->write8(c); - } - break; - } - default: - this->writeExpression(*s.fBase); - this->write(ByteCodeInstruction::kSwizzle, - s.fComponents.size() - s.fBase->fType.columns()); - this->write8(s.fBase->fType.columns()); - this->write8(s.fComponents.size()); - for (int c : s.fComponents) { - this->write8(c); - } + this->writeExpression(*s.fBase); + this->write(ByteCodeInstruction::kSwizzle, s.fComponents.size() - s.fBase->fType.columns()); + this->write8(s.fBase->fType.columns()); + this->write8(s.fComponents.size()); + for (int c : s.fComponents) { + this->write8(c); } } @@ -1412,7 +1426,6 @@ void ByteCodeGenerator::writeTernaryExpression(const TernaryExpression& t) { this->write(ByteCodeInstruction::kMaskNegate); this->writeExpression(*t.fIfFalse); this->write(ByteCodeInstruction::kMaskBlend, count); - this->write8(count); } void ByteCodeGenerator::writeExpression(const Expression& e, bool discard) { @@ -1469,11 +1482,8 @@ void ByteCodeGenerator::writeExpression(const Expression& e, bool discard) { } if (discard) { int count = SlotCount(e.fType); - if (count > 4) { - this->write(ByteCodeInstruction::kPopN, count); - this->write8(count); - } else if (count != 0) { - this->write(vector_instruction(ByteCodeInstruction::kPop, count)); + if (count > 0) { + this->write(ByteCodeInstruction::kPop, count); } discard = false; } @@ -1487,15 +1497,15 @@ class ByteCodeExternalValueLValue : public ByteCodeGenerator::LValue { , fIndex(index) {} void load() override { - fGenerator.write(vector_instruction(ByteCodeInstruction::kReadExternal, fCount)); + fGenerator.write(ByteCodeInstruction::kReadExternal, fCount); fGenerator.write8(fIndex); } void store(bool discard) override { if (!discard) { - fGenerator.write(vector_instruction(ByteCodeInstruction::kDup, fCount)); + fGenerator.write(ByteCodeInstruction::kDup, fCount); } - fGenerator.write(vector_instruction(ByteCodeInstruction::kWriteExternal, fCount)); + fGenerator.write(ByteCodeInstruction::kWriteExternal, fCount); fGenerator.write8(fIndex); } @@ -1503,7 +1513,6 @@ class ByteCodeExternalValueLValue : public ByteCodeGenerator::LValue { typedef LValue INHERITED; int fCount; - int fIndex; }; @@ -1520,22 +1529,33 @@ class ByteCodeSwizzleLValue : public ByteCodeGenerator::LValue { void store(bool discard) override { int count = fSwizzle.fComponents.size(); if (!discard) { - fGenerator.write(vector_instruction(ByteCodeInstruction::kDup, count)); + fGenerator.write(ByteCodeInstruction::kDup, count); } - ByteCodeGenerator::Location location = fGenerator.getLocation(*fSwizzle.fBase); - if (location.isOnStack()) { - fGenerator.write(location.selectStore(ByteCodeInstruction::kStoreSwizzleIndirect, - ByteCodeInstruction::kStoreSwizzleIndirectGlobal), - count); - } else { - fGenerator.write(location.selectStore(ByteCodeInstruction::kStoreSwizzle, - ByteCodeInstruction::kStoreSwizzleGlobal), - count); - fGenerator.write8(location.fSlot); - } - fGenerator.write8(count); - for (int c : fSwizzle.fComponents) { - fGenerator.write8(c); + // We already have the correct number of values on the stack, thanks to type checking. + // The algorithm: Walk down the values on the stack, doing 'count' single-element stores. + // For each value, use the corresponding swizzle component to offset the store location. + // + // Static locations: We (wastefully) call getLocation every time, but get good byte code. + // Note that we could (but don't) store adjacent/sequential values with fewer instructions. + // + // Dynamic locations: ... are bad. We have to recompute the base address on each iteration, + // because the stack doesn't let us retain that address between stores. Dynamic locations + // are rare though, and swizzled writes to those are even rarer, so we just live with this. + for (int i = count; i-- > 0;) { + ByteCodeGenerator::Location location = fGenerator.getLocation(*fSwizzle.fBase); + if (!location.isOnStack()) { + fGenerator.write(location.selectStore(ByteCodeInstruction::kStore, + ByteCodeInstruction::kStoreGlobal), + 1); + fGenerator.write8(location.fSlot + fSwizzle.fComponents[i]); + } else { + fGenerator.write(ByteCodeInstruction::kPushImmediate); + fGenerator.write32(fSwizzle.fComponents[i]); + fGenerator.write(ByteCodeInstruction::kAddI, 1); + fGenerator.write(location.selectStore(ByteCodeInstruction::kStoreExtended, + ByteCodeInstruction::kStoreExtendedGlobal), + 1); + } } } @@ -1558,28 +1578,17 @@ class ByteCodeExpressionLValue : public ByteCodeGenerator::LValue { void store(bool discard) override { int count = ByteCodeGenerator::SlotCount(fExpression.fType); if (!discard) { - if (count > 4) { - fGenerator.write(ByteCodeInstruction::kDupN, count); - fGenerator.write8(count); - } else { - fGenerator.write(vector_instruction(ByteCodeInstruction::kDup, count)); - } + fGenerator.write(ByteCodeInstruction::kDup, count); } ByteCodeGenerator::Location location = fGenerator.getLocation(fExpression); - if (location.isOnStack() || count > 4) { - if (!location.isOnStack()) { - fGenerator.write(ByteCodeInstruction::kPushImmediate); - fGenerator.write32(location.fSlot); - } + if (location.isOnStack()) { fGenerator.write(location.selectStore(ByteCodeInstruction::kStoreExtended, ByteCodeInstruction::kStoreExtendedGlobal), count); - fGenerator.write8(count); } else { - fGenerator.write( - vector_instruction(location.selectStore(ByteCodeInstruction::kStore, - ByteCodeInstruction::kStoreGlobal), - count)); + fGenerator.write(location.selectStore(ByteCodeInstruction::kStore, + ByteCodeInstruction::kStoreGlobal), + count); fGenerator.write8(location.fSlot); } } @@ -1721,8 +1730,7 @@ void ByteCodeGenerator::writeReturnStatement(const ReturnStatement& r) { // we account for those in writeFunction(). // This is all fine because we don't allow conditional returns, so we only return once anyway. - this->write(ByteCodeInstruction::kReturn, -count); - this->write8(count); + this->write(ByteCodeInstruction::kReturn, count); } void ByteCodeGenerator::writeSwitchStatement(const SwitchStatement& r) { @@ -1738,15 +1746,8 @@ void ByteCodeGenerator::writeVarDeclarations(const VarDeclarations& v) { if (decl.fValue) { this->writeExpression(*decl.fValue); int count = SlotCount(decl.fValue->fType); - if (count > 4) { - this->write(ByteCodeInstruction::kPushImmediate); - this->write32(location.fSlot); - this->write(ByteCodeInstruction::kStoreExtended, count); - this->write8(count); - } else { - this->write(vector_instruction(ByteCodeInstruction::kStore, count)); - this->write8(location.fSlot); - } + this->write(ByteCodeInstruction::kStore, count); + this->write8(location.fSlot); } } } diff --git a/src/sksl/SkSLByteCodeGenerator.h b/src/sksl/SkSLByteCodeGenerator.h index 02e186b9d0028..9178c4fd16e3f 100644 --- a/src/sksl/SkSLByteCodeGenerator.h +++ b/src/sksl/SkSLByteCodeGenerator.h @@ -146,6 +146,8 @@ class ByteCodeGenerator : public CodeGenerator { kMax, kMin, kMix, + kNormalize, + kSample, kSaturate, }; @@ -170,6 +172,7 @@ class ByteCodeGenerator : public CodeGenerator { kLocal, // include parameters kGlobal, // non-uniform globals kUniform, // uniform globals + kChildFP, // child fragment processors }; struct Location { @@ -179,10 +182,14 @@ class ByteCodeGenerator : public CodeGenerator { // Not really invalid, but a "safe" placeholder to be more explicit at call-sites static Location MakeInvalid() { return { 0, Storage::kLocal }; } - Location makeOnStack() { return { -1, fStorage }; } + Location makeOnStack() { + SkASSERT(fStorage != Storage::kChildFP); + return { -1, fStorage }; + } bool isOnStack() const { return fSlot < 0; } Location operator+(int offset) { + SkASSERT(fStorage != Storage::kChildFP); SkASSERT(fSlot >= 0); return { fSlot + offset, fStorage }; } @@ -194,8 +201,9 @@ class ByteCodeGenerator : public CodeGenerator { case Storage::kLocal: return local; case Storage::kGlobal: return global; case Storage::kUniform: return uniform; + case Storage::kChildFP: ABORT("Trying to load an FP"); break; } - SkUNREACHABLE; + return local; } ByteCodeInstruction selectStore(ByteCodeInstruction local, @@ -204,6 +212,7 @@ class ByteCodeGenerator : public CodeGenerator { case Storage::kLocal: return local; case Storage::kGlobal: return global; case Storage::kUniform: ABORT("Trying to store to a uniform"); break; + case Storage::kChildFP: ABORT("Trying to store an FP"); break; } return local; } diff --git a/src/sksl/SkSLCPPCodeGenerator.cpp b/src/sksl/SkSLCPPCodeGenerator.cpp index 551f85c88eae5..4a0cad9633063 100644 --- a/src/sksl/SkSLCPPCodeGenerator.cpp +++ b/src/sksl/SkSLCPPCodeGenerator.cpp @@ -7,10 +7,11 @@ #include "src/sksl/SkSLCPPCodeGenerator.h" +#include "include/private/SkSLSampleUsage.h" +#include "src/sksl/SkSLAnalysis.h" #include "src/sksl/SkSLCPPUniformCTypes.h" #include "src/sksl/SkSLCompiler.h" #include "src/sksl/SkSLHCodeGenerator.h" -#include "src/sksl/SkSLSampleMatrix.h" #include @@ -23,11 +24,11 @@ static bool needs_uniform_var(const Variable& var) { CPPCodeGenerator::CPPCodeGenerator(const Context* context, const Program* program, ErrorReporter* errors, String name, OutputStream* out) -: INHERITED(context, program, errors, out) -, fName(std::move(name)) -, fFullName(String::printf("Gr%s", fName.c_str())) -, fSectionAndParameterHelper(program, *errors) { - fLineEnding = "\\n"; + : INHERITED(context, program, errors, out) + , fName(std::move(name)) + , fFullName(String::printf("Gr%s", fName.c_str())) + , fSectionAndParameterHelper(program, *errors) { + fLineEnding = "\n"; fTextureFunctionOverride = "sample"; } @@ -36,7 +37,7 @@ void CPPCodeGenerator::writef(const char* s, va_list va) { va_list copy; va_copy(copy, va); char buffer[BUFFER_SIZE]; - int length = vsnprintf(buffer, BUFFER_SIZE, s, va); + int length = std::vsnprintf(buffer, BUFFER_SIZE, s, va); if (length < BUFFER_SIZE) { fOut->write(buffer, length); } else { @@ -114,24 +115,7 @@ void CPPCodeGenerator::writeIndexExpression(const IndexExpression& i) { const Expression& base = *i.fBase; if (base.fKind == Expression::kVariableReference_Kind) { int builtin = ((VariableReference&) base).fVariable.fModifiers.fLayout.fBuiltin; - if (SK_TRANSFORMEDCOORDS2D_BUILTIN == builtin) { - this->write("%s"); - if (i.fIndex->fKind != Expression::kIntLiteral_Kind) { - fErrors.error(i.fIndex->fOffset, - "index into sk_TransformedCoords2D must be an integer literal"); - return; - } - int64_t index = ((IntLiteral&) *i.fIndex).fValue; - String name = "sk_TransformedCoords2D_" + to_string(index); - fFormatArgs.push_back(name + ".c_str()"); - if (fWrittenTransformedCoords.find(index) == fWrittenTransformedCoords.end()) { - addExtraEmitCodeLine("SkString " + name + - " = fragBuilder->ensureCoords2D(args.fTransformedCoords[" + - to_string(index) + "].fVaryingPoint, _outer.sampleMatrix());"); - fWrittenTransformedCoords.insert(index); - } - return; - } else if (SK_TEXTURESAMPLERS_BUILTIN == builtin) { + if (SK_TEXTURESAMPLERS_BUILTIN == builtin) { this->write("%s"); if (i.fIndex->fKind != Expression::kIntLiteral_Kind) { fErrors.error(i.fIndex->fOffset, @@ -298,6 +282,11 @@ void CPPCodeGenerator::writeVariableReference(const VariableReference& ref) { this->write("%s"); fFormatArgs.push_back(String("args.fOutputColor")); break; + case SK_MAIN_COORDS_BUILTIN: + this->write("%s"); + fFormatArgs.push_back(String("args.fSampleCoord")); + fAccessSampleCoordsDirectly = true; + break; case SK_WIDTH_BUILTIN: this->write("sk_Width"); break; @@ -427,68 +416,71 @@ void CPPCodeGenerator::writeFunctionCall(const FunctionCall& c) { // sksl variables defined in earlier sksl code. this->newExtraEmitCodeBlock(); - // Set to the empty string when no input color parameter should be emitted, which means this - // must be properly formatted with a prefixed comma when the parameter should be inserted - // into the invokeChild() parameter list. - String inputArg; + String inputColorName; // the sksl variable/expression, referenced later for null child FPs + String inputColor; if (c.fArguments.size() > 1 && c.fArguments[1]->fType.name() == "half4") { // Use the invokeChild() variant that accepts an input color, so convert the 2nd // argument's expression into C++ code that produces sksl stored in an SkString. - String inputName = "_input" + to_string(c.fOffset); - addExtraEmitCodeLine(convertSKSLExpressionToCPP(*c.fArguments[1], inputName)); + inputColorName = "_input" + to_string(c.fOffset); + addExtraEmitCodeLine(convertSKSLExpressionToCPP(*c.fArguments[1], inputColorName)); - // invokeChild() needs a char* - inputArg = ", " + inputName + ".c_str()"; + // invokeChild() needs a char* and a pre-pended comma + inputColor = ", " + inputColorName + ".c_str()"; + } + + String inputCoord; + String invokeFunction = "invokeChild"; + if (c.fArguments.back()->fType.name() == "float2") { + // Invoking child with explicit coordinates at this call site + inputCoord = "_coords" + to_string(c.fOffset); + addExtraEmitCodeLine(convertSKSLExpressionToCPP(*c.fArguments.back(), inputCoord)); + inputCoord.append(".c_str()"); + } else if (c.fArguments.back()->fType.name() == "float3x3") { + // Invoking child with a matrix, sampling relative to the input coords. + invokeFunction = "invokeChildWithMatrix"; + SampleUsage usage = Analysis::GetSampleUsage(fProgram, child); + + if (!usage.hasUniformMatrix()) { + inputCoord = "_matrix" + to_string(c.fOffset); + addExtraEmitCodeLine(convertSKSLExpressionToCPP(*c.fArguments.back(), inputCoord)); + inputCoord.append(".c_str()"); + } + // else pass in the empty string to rely on invokeChildWithMatrix's automatic uniform + // resolution + } + if (!inputCoord.empty()) { + inputCoord = ", " + inputCoord; } - bool hasCoords = c.fArguments.back()->fType.name() == "float2"; - SampleMatrix matrix = fSectionAndParameterHelper.getMatrix(child); // Write the output handling after the possible input handling String childName = "_sample" + to_string(c.fOffset); addExtraEmitCodeLine("SkString " + childName + ";"); - String coordsName; - String matrixName; - if (hasCoords) { - coordsName = "_coords" + to_string(c.fOffset); - addExtraEmitCodeLine(convertSKSLExpressionToCPP(*c.fArguments.back(), coordsName)); - } - if (matrix.fKind == SampleMatrix::Kind::kVariable) { - matrixName = "_matrix" + to_string(c.fOffset); - addExtraEmitCodeLine(convertSKSLExpressionToCPP(*c.fArguments.back(), matrixName)); - } + if (c.fArguments[0]->fType.kind() == Type::kNullable_Kind) { addExtraEmitCodeLine("if (_outer." + String(child.fName) + "_index >= 0) {\n "); } - if (hasCoords) { - addExtraEmitCodeLine(childName + " = this->invokeChild(_outer." + String(child.fName) + - "_index" + inputArg + ", args, " + coordsName + ".c_str());"); - } else { - switch (matrix.fKind) { - case SampleMatrix::Kind::kMixed: - case SampleMatrix::Kind::kVariable: - addExtraEmitCodeLine(childName + " = this->invokeChildWithMatrix(_outer." + - String(child.fName) + "_index" + inputArg + ", args, " + - matrixName + ".c_str());"); - break; - case SampleMatrix::Kind::kConstantOrUniform: - case SampleMatrix::Kind::kNone: - addExtraEmitCodeLine(childName + " = this->invokeChild(_outer." + - String(child.fName) + "_index" + inputArg + ", args);"); - break; - } - } + addExtraEmitCodeLine(childName + " = this->" + invokeFunction + "(_outer." + + String(child.fName) + "_index" + inputColor + ", args" + + inputCoord + ");"); if (c.fArguments[0]->fType.kind() == Type::kNullable_Kind) { // Null FPs are not emitted, but their output can still be referenced in dependent // expressions - thus we always fill the variable with something. - // Note: this is essentially dead code required to satisfy the compiler, because - // 'process' function calls should always be guarded at a higher level, in the .fp - // source. - addExtraEmitCodeLine( - "} else {" - " " + childName + " = \"half4(1)\";" - "}"); + // Sampling from a null fragment processor will provide in the input color as-is. This + // defaults to half4(1) if no color is specified. + if (!inputColorName.empty()) { + addExtraEmitCodeLine( + "} else {" + " " + childName + ".swap(" + inputColorName + ");" + "}"); + } else { + addExtraEmitCodeLine( + "} else {" + " " + childName + " = \"half4(1)\";" + "}"); + } } + this->write("%s"); fFormatArgs.push_back(childName + ".c_str()"); return; @@ -597,7 +589,7 @@ void CPPCodeGenerator::writeFunction(const FunctionDefinition& f) { emit += ", \"" + decl.fName + "\""; emit += ", " + to_string((int64_t) decl.fParameters.size()); emit += ", " + decl.fName + "_args"; - emit += ", \"" + buffer.str() + "\""; + emit += ",\nR\"SkSL(" + buffer.str() + ")SkSL\""; emit += ", &" + decl.fName + "_name);"; this->addExtraEmitCodeLine(emit.c_str()); } @@ -818,46 +810,33 @@ void CPPCodeGenerator::flushEmittedCode() { } void CPPCodeGenerator::writeCodeAppend(const String& code) { - // codeAppendf can only handle appending 1024 bytes at a time, so we need to break the string - // into chunks. Unfortunately we can't tell exactly how long the string is going to end up, - // because printf escape sequences get replaced by strings of unknown length, but keeping the - // format string below 512 bytes is probably safe. - static constexpr size_t maxChunkSize = 512; - size_t start = 0; - size_t index = 0; - size_t argStart = 0; - size_t argCount; - while (index < code.size()) { - argCount = 0; - this->write(" fragBuilder->codeAppendf(\""); - while (index < code.size() && index < start + maxChunkSize) { + if (!code.empty()) { + // Count % format specifiers. + size_t argCount = 0; + for (size_t index = 0; index < code.size(); ++index) { if ('%' == code[index]) { - if (index == start + maxChunkSize - 1 || index == code.size() - 1) { + if (index == code.size() - 1) { break; } if (code[index + 1] != '%') { ++argCount; } - } else if ('\\' == code[index] && index == start + maxChunkSize - 1) { - // avoid splitting an escape sequence that happens to fall across a chunk boundary - break; } - ++index; } - fOut->write(code.c_str() + start, index - start); - this->write("\""); - for (size_t i = argStart; i < argStart + argCount; ++i) { + + // Emit the code string. + this->writef(" fragBuilder->codeAppendf(\n" + "R\"SkSL(%s)SkSL\"\n", code.c_str()); + for (size_t i = 0; i < argCount; ++i) { this->writef(", %s", fFormatArgs[i].c_str()); } this->write(");\n"); - argStart += argCount; - start = index; - } - // argStart is equal to the number of fFormatArgs that were consumed - // so they should be removed from the list - if (argStart > 0) { - fFormatArgs.erase(fFormatArgs.begin(), fFormatArgs.begin() + argStart); + // argCount is equal to the number of fFormatArgs that were consumed, so they should be + // removed from the list. + if (argCount > 0) { + fFormatArgs.erase(fFormatArgs.begin(), fFormatArgs.begin() + argCount); + } } } @@ -904,10 +883,14 @@ String CPPCodeGenerator::convertSKSLExpressionToCPP(const Expression& e, // Now build the final C++ code snippet from the format string and args String cppExpr; - if (newArgs.size() == 0) { + if (newArgs.empty()) { // This was a static expression, so we can simplify the input // color declaration in the emitted code to just a static string cppExpr = "SkString " + cppVar + "(\"" + exprFormat + "\");"; + } else if (newArgs.size() == 1 && exprFormat == "%s") { + // If the format expression is simply "%s", we can avoid an expensive call to printf. + // This happens fairly often in codegen so it is worth simplifying. + cppExpr = "SkString " + cppVar + "(" + newArgs[0] + ");"; } else { // String formatting must occur dynamically, so have the C++ declaration // use SkStringPrintf with the format args that were accumulated @@ -973,7 +956,7 @@ void CPPCodeGenerator::writeSetData(std::vector& uniforms) { "const GrFragmentProcessor& _proc) override {\n", pdman); bool wroteProcessor = false; - for (const auto u : uniforms) { + for (const Variable* u : uniforms) { if (is_uniform_in(*u)) { if (!wroteProcessor) { this->writef(" const %s& _outer = _proc.cast<%s>();\n", fullName, fullName); @@ -1046,11 +1029,12 @@ void CPPCodeGenerator::writeSetData(std::vector& uniforms) { for (const auto& p : fProgram) { if (ProgramElement::kVar_Kind == p.fKind) { const VarDeclarations& decls = (const VarDeclarations&) p; - for (const auto& raw : decls.fVars) { - VarDeclaration& decl = (VarDeclaration&) *raw; - String nameString(decl.fVar->fName); + for (const std::unique_ptr& raw : decls.fVars) { + const VarDeclaration& decl = static_cast(*raw); + const Variable& variable = *decl.fVar; + String nameString(variable.fName); const char* name = nameString.c_str(); - if (decl.fVar->fType.kind() == Type::kSampler_Kind) { + if (variable.fType.kind() == Type::kSampler_Kind) { this->writef(" const GrSurfaceProxyView& %sView = " "_outer.textureSampler(%d).view();\n", name, samplerIndex); @@ -1058,20 +1042,23 @@ void CPPCodeGenerator::writeSetData(std::vector& uniforms) { name, name); this->writef(" (void) %s;\n", name); ++samplerIndex; - } else if (needs_uniform_var(*decl.fVar)) { + } else if (needs_uniform_var(variable)) { this->writef(" UniformHandle& %s = %sVar;\n" " (void) %s;\n", name, HCodeGenerator::FieldName(name).c_str(), name); - } else if (SectionAndParameterHelper::IsParameter(*decl.fVar) && - decl.fVar->fType != *fContext.fFragmentProcessor_Type) { + } else if (SectionAndParameterHelper::IsParameter(variable) && + variable.fType != *fContext.fFragmentProcessor_Type) { if (!wroteProcessor) { this->writef(" const %s& _outer = _proc.cast<%s>();\n", fullName, fullName); wroteProcessor = true; } - this->writef(" auto %s = _outer.%s;\n" - " (void) %s;\n", - name, name, name); + + if (variable.fType.nonnullable() != *fContext.fFragmentProcessor_Type) { + this->writef(" auto %s = _outer.%s;\n" + " (void) %s;\n", + name, name, name); + } } } } @@ -1113,19 +1100,9 @@ void CPPCodeGenerator::writeClone() { this->writef("%s::%s(const %s& src)\n" ": INHERITED(k%s_ClassID, src.optimizationFlags())", fFullName.c_str(), fFullName.c_str(), fFullName.c_str(), fFullName.c_str()); - const auto transforms = fSectionAndParameterHelper.getSections(COORD_TRANSFORM_SECTION); - for (size_t i = 0; i < transforms.size(); ++i) { - const Section& s = *transforms[i]; - String fieldName = HCodeGenerator::CoordTransformName(s.fArgument, i); - this->writef("\n, %s(src.%s)", fieldName.c_str(), fieldName.c_str()); - } - for (const auto& param : fSectionAndParameterHelper.getParameters()) { + for (const Variable* param : fSectionAndParameterHelper.getParameters()) { String fieldName = HCodeGenerator::FieldName(String(param->fName).c_str()); - if (param->fType.nonnullable() == *fContext.fFragmentProcessor_Type) { - this->writef("\n, %s_index(src.%s_index)", - fieldName.c_str(), - fieldName.c_str()); - } else { + if (param->fType.nonnullable() != *fContext.fFragmentProcessor_Type) { this->writef("\n, %s(src.%s)", fieldName.c_str(), fieldName.c_str()); @@ -1139,27 +1116,21 @@ void CPPCodeGenerator::writeClone() { } else if (param->fType.nonnullable() == *fContext.fFragmentProcessor_Type) { String fieldName = HCodeGenerator::FieldName(String(param->fName).c_str()); if (param->fType.kind() == Type::kNullable_Kind) { - this->writef(" if (%s_index >= 0) {\n", fieldName.c_str()); + this->writef(" if (src.%s_index >= 0) {\n", fieldName.c_str()); } else { this->write(" {\n"); } - this->writef( - " auto clone = src.childProcessor(%s_index).clone();\n" - " if (src.childProcessor(%s_index).isSampledWithExplicitCoords()) {\n" - " clone->setSampledWithExplicitCoords();\n" - " }" - " this->registerChildProcessor(std::move(clone));\n" - " }\n", - fieldName.c_str(), fieldName.c_str()); + this->writef(" %s_index = this->cloneAndRegisterChildProcessor(" + "src.childProcessor(src.%s_index));\n" + " }\n", + fieldName.c_str(), fieldName.c_str()); } } if (samplerCount) { this->writef(" this->setTextureSamplerCnt(%d);", samplerCount); } - for (size_t i = 0; i < transforms.size(); ++i) { - const Section& s = *transforms[i]; - String fieldName = HCodeGenerator::CoordTransformName(s.fArgument, i); - this->writef(" this->addCoordTransform(&%s);\n", fieldName.c_str()); + if (fAccessSampleCoordsDirectly) { + this->writef(" this->setUsesSampleCoordsDirectly();\n"); } this->write("}\n"); this->writef("std::unique_ptr %s::clone() const {\n", diff --git a/src/sksl/SkSLCPPCodeGenerator.h b/src/sksl/SkSLCPPCodeGenerator.h index 803270cc5759e..8543ab1459546 100644 --- a/src/sksl/SkSLCPPCodeGenerator.h +++ b/src/sksl/SkSLCPPCodeGenerator.h @@ -123,7 +123,10 @@ class CPPCodeGenerator : public GLSLCodeGenerator { std::vector fExtraEmitCodeBlocks; std::vector fFormatArgs; - std::set fWrittenTransformedCoords; + // true if the sksl declared its main() function with a float2 parameter AND referenced that + // parameter in its body. + bool fAccessSampleCoordsDirectly = false; + // if true, we are writing a C++ expression instead of a GLSL expression bool fCPPMode = false; bool fInMain = false; diff --git a/src/sksl/SkSLCompiler.cpp b/src/sksl/SkSLCompiler.cpp index 626b5ecf49d15..6adc8031dab6c 100644 --- a/src/sksl/SkSLCompiler.cpp +++ b/src/sksl/SkSLCompiler.cpp @@ -426,6 +426,7 @@ void Compiler::addDefinitions(const BasicBlock::Node& node, (std::unique_ptr*) &fContext->fDefined_Expression, definitions); } + break; } default: break; @@ -594,7 +595,7 @@ bool is_constant(const Expression& expr, double value) { Constructor& c = (Constructor&) expr; bool isFloat = c.fType.columns() > 1 ? c.fType.componentType().isFloat() : c.fType.isFloat(); - if (c.fType.kind() == Type::kVector_Kind && c.isConstant()) { + if (c.fType.kind() == Type::kVector_Kind && c.isCompileTimeConstant()) { for (int i = 0; i < c.fType.columns(); ++i) { if (isFloat) { if (c.getFVecComponent(i) != value) { @@ -1021,88 +1022,167 @@ void Compiler::simplifyExpression(DefinitionMap& definitions, return; } SkASSERT((*iter)->fKind == BasicBlock::Node::kExpression_Kind); - break; } + break; } default: break; } } -// returns true if this statement could potentially execute a break at the current level (we ignore -// nested loops and switches, since any breaks inside of them will merely break the loop / switch) -static bool contains_conditional_break(Statement& s, bool inConditional) { +// Implementation-detail recursive helper function for `contains_conditional_break`. +static bool contains_conditional_break_impl(Statement& s, bool inConditional) { switch (s.fKind) { case Statement::kBlock_Kind: - for (const auto& sub : ((Block&) s).fStatements) { - if (contains_conditional_break(*sub, inConditional)) { + for (const std::unique_ptr& sub : static_cast(s).fStatements) { + if (contains_conditional_break_impl(*sub, inConditional)) { return true; } } return false; + case Statement::kBreak_Kind: return inConditional; + case Statement::kIf_Kind: { - const IfStatement& i = (IfStatement&) s; - return contains_conditional_break(*i.fIfTrue, true) || - (i.fIfFalse && contains_conditional_break(*i.fIfFalse, true)); + const IfStatement& i = static_cast(s); + return contains_conditional_break_impl(*i.fIfTrue, /*inConditional=*/true) || + (i.fIfFalse && + contains_conditional_break_impl(*i.fIfFalse, /*inConditional=*/true)); } + default: return false; } } +// Returns true if this statement could potentially execute a break at the current level. We ignore +// nested loops and switches, since any breaks inside of them will merely break the loop / switch. +static bool contains_conditional_break(Statement& s) { + return contains_conditional_break_impl(s, /*inConditional=*/false); +} + // returns true if this statement definitely executes a break at the current level (we ignore // nested loops and switches, since any breaks inside of them will merely break the loop / switch) static bool contains_unconditional_break(Statement& s) { switch (s.fKind) { case Statement::kBlock_Kind: - for (const auto& sub : ((Block&) s).fStatements) { + for (const std::unique_ptr& sub : static_cast(s).fStatements) { if (contains_unconditional_break(*sub)) { return true; } } return false; + case Statement::kBreak_Kind: return true; + default: return false; } } +static void move_all_but_break(std::unique_ptr& stmt, + std::vector>* target) { + switch (stmt->fKind) { + case Statement::kBlock_Kind: { + // Recurse into the block. + Block& block = static_cast(*stmt); + + std::vector> blockStmts; + blockStmts.reserve(block.fStatements.size()); + for (std::unique_ptr& statementInBlock : block.fStatements) { + move_all_but_break(statementInBlock, &blockStmts); + } + + target->push_back(std::make_unique(block.fOffset, std::move(blockStmts), + block.fSymbols, block.fIsScope)); + break; + } + + case Statement::kBreak_Kind: + // Do not append a break to the target. + break; + + default: + // Append normal statements to the target. + target->push_back(std::move(stmt)); + break; + } +} + // Returns a block containing all of the statements that will be run if the given case matches // (which, owing to the statements being owned by unique_ptrs, means the switch itself will be // broken by this call and must then be discarded). // Returns null (and leaves the switch unmodified) if no such simple reduction is possible, such as // when break statements appear inside conditionals. -static std::unique_ptr block_for_case(SwitchStatement* s, SwitchCase* c) { - bool capturing = false; - std::vector*> statementPtrs; - for (const auto& current : s->fCases) { - if (current.get() == c) { - capturing = true; +static std::unique_ptr block_for_case(SwitchStatement* switchStatement, + SwitchCase* caseToCapture) { + // We have to be careful to not move any of the pointers until after we're sure we're going to + // succeed, so before we make any changes at all, we check the switch-cases to decide on a plan + // of action. First, find the switch-case we are interested in. + auto iter = switchStatement->fCases.begin(); + for (; iter != switchStatement->fCases.end(); ++iter) { + if (iter->get() == caseToCapture) { + break; } - if (capturing) { - for (auto& stmt : current->fStatements) { - if (contains_conditional_break(*stmt, s->fKind == Statement::kIf_Kind)) { - return nullptr; - } - if (contains_unconditional_break(*stmt)) { - capturing = false; - break; - } - statementPtrs.push_back(&stmt); + } + + // Next, walk forward through the rest of the switch. If we find a conditional break, we're + // stuck and can't simplify at all. If we find an unconditional break, we have a range of + // statements that we can use for simplification. + auto startIter = iter; + Statement* unconditionalBreakStmt = nullptr; + for (; iter != switchStatement->fCases.end(); ++iter) { + for (std::unique_ptr& stmt : (*iter)->fStatements) { + if (contains_conditional_break(*stmt)) { + // We can't reduce switch-cases to a block when they have conditional breaks. + return nullptr; } - if (!capturing) { + + if (contains_unconditional_break(*stmt)) { + // We found an unconditional break. We can use this block, but we need to strip + // out the break statement. + unconditionalBreakStmt = stmt.get(); break; } } + + if (unconditionalBreakStmt != nullptr) { + break; + } + } + + // We fell off the bottom of the switch or encountered a break. We know the range of statements + // that we need to move over, and we know it's safe to do so. + std::vector> caseStmts; + + // We can move over most of the statements as-is. + while (startIter != iter) { + for (std::unique_ptr& stmt : (*startIter)->fStatements) { + caseStmts.push_back(std::move(stmt)); + } + ++startIter; } - std::vector> statements; - for (const auto& s : statementPtrs) { - statements.push_back(std::move(*s)); + + // If we found an unconditional break at the end, we need to move what we can while avoiding + // that break. + if (unconditionalBreakStmt != nullptr) { + for (std::unique_ptr& stmt : (*startIter)->fStatements) { + if (stmt.get() == unconditionalBreakStmt) { + move_all_but_break(stmt, &caseStmts); + unconditionalBreakStmt = nullptr; + break; + } + + caseStmts.push_back(std::move(stmt)); + } } - return std::unique_ptr(new Block(-1, std::move(statements), s->fSymbols)); + + SkASSERT(unconditionalBreakStmt == nullptr); // Verify that we fixed the unconditional break. + + // Return our newly-synthesized block. + return std::make_unique(/*offset=*/-1, std::move(caseStmts), switchStatement->fSymbols); } void Compiler::simplifyStatement(DefinitionMap& definitions, @@ -1171,7 +1251,7 @@ void Compiler::simplifyStatement(DefinitionMap& definitions, } case Statement::kSwitch_Kind: { SwitchStatement& s = (SwitchStatement&) *stmt; - if (s.fValue->isConstant()) { + if (s.fValue->isCompileTimeConstant()) { // switch is constant, replace it with the case that matches bool found = false; SwitchCase* defaultCase = nullptr; @@ -1283,7 +1363,22 @@ void Compiler::scanCFG(FunctionDefinition& f) { } updated = false; + bool first = true; for (BasicBlock& b : cfg.fBlocks) { + if (!first && b.fEntrances.empty()) { + // Block was reachable before optimization, but has since become unreachable. In + // addition to being dead code, it's broken - since control flow can't reach it, no + // prior variable definitions can reach it, and therefore variables might look to + // have not been properly assigned. Kill it. + for (BasicBlock::Node& node : b.fNodes) { + if (node.fKind == BasicBlock::Node::kStatement_Kind && + (*node.statement())->fKind != Statement::kNop_Kind) { + node.setStatement(std::unique_ptr(new Nop())); + } + } + continue; + } + first = false; DefinitionMap definitions = b.fBefore; for (auto iter = b.fNodes.begin(); iter != b.fNodes.end() && !needsRescan; ++iter) { diff --git a/src/sksl/SkSLCompiler.h b/src/sksl/SkSLCompiler.h index 31931977a1d4c..2350751103085 100644 --- a/src/sksl/SkSLCompiler.h +++ b/src/sksl/SkSLCompiler.h @@ -28,7 +28,6 @@ #define SK_IN_BUILTIN 10002 #define SK_INCOLOR_BUILTIN 10003 #define SK_OUTCOLOR_BUILTIN 10004 -#define SK_TRANSFORMEDCOORDS2D_BUILTIN 10005 #define SK_TEXTURESAMPLERS_BUILTIN 10006 #define SK_OUT_BUILTIN 10007 #define SK_LASTFRAGCOLOR_BUILTIN 10008 @@ -72,6 +71,10 @@ class SK_API Compiler : public ErrorReporter { kPermitInvalidStaticTests_Flag = 1, }; + // An invalid (otherwise unused) character to mark where FormatArgs are inserted + static constexpr char kFormatArgPlaceholder = '\001'; + static constexpr const char* kFormatArgPlaceholderStr = "\001"; + struct FormatArg { enum class Kind { kInput, @@ -79,6 +82,7 @@ class SK_API Compiler : public ErrorReporter { kCoords, kUniform, kChildProcessor, + kChildProcessorWithMatrix, kFunctionName }; @@ -102,7 +106,7 @@ class SK_API Compiler : public ErrorReporter { GrSLType fReturnType; SkString fName; std::vector fParameters; - SkString fBody; + String fBody; std::vector fFormatArgs; }; #endif diff --git a/src/sksl/SkSLDefines.h b/src/sksl/SkSLDefines.h index 1138c500633b7..ae620bc3f8a8b 100644 --- a/src/sksl/SkSLDefines.h +++ b/src/sksl/SkSLDefines.h @@ -10,16 +10,6 @@ #include -#ifdef SKSL_STANDALONE -#if defined(_WIN32) || defined(__SYMBIAN32__) -#define SKSL_BUILD_FOR_WIN -#endif -#else -#ifdef SK_BUILD_FOR_WIN -#define SKSL_BUILD_FOR_WIN -#endif // SK_BUILD_FOR_WIN -#endif // SKSL_STANDALONE - #ifdef SKSL_STANDALONE #define SkASSERT(x) do { if (!(x)) abort(); } while (false) #define SkASSERTF(x, __VA_ARGS__) do { if (!(x)) { printf(__VA_ARGS__); abort(); } } while (false) diff --git a/src/sksl/SkSLGLSLCodeGenerator.cpp b/src/sksl/SkSLGLSLCodeGenerator.cpp index 6f64ae54cea2b..127145a192131 100644 --- a/src/sksl/SkSLGLSLCodeGenerator.cpp +++ b/src/sksl/SkSLGLSLCodeGenerator.cpp @@ -522,7 +522,7 @@ void GLSLCodeGenerator::writeFunctionCall(const FunctionCall& c) { this->write("-dFdy"); nameWritten = true; } - // fallthru + [[fallthrough]]; case FunctionClass::kDFdx: case FunctionClass::kFwidth: if (!fFoundDerivatives && diff --git a/src/sksl/SkSLHCodeGenerator.cpp b/src/sksl/SkSLHCodeGenerator.cpp index ebe05e82ab0e4..3f5f2f378ce9d 100644 --- a/src/sksl/SkSLHCodeGenerator.cpp +++ b/src/sksl/SkSLHCodeGenerator.cpp @@ -7,6 +7,8 @@ #include "src/sksl/SkSLHCodeGenerator.h" +#include "include/private/SkSLSampleUsage.h" +#include "src/sksl/SkSLAnalysis.h" #include "src/sksl/SkSLParser.h" #include "src/sksl/SkSLUtil.h" #include "src/sksl/ir/SkSLEnum.h" @@ -237,19 +239,6 @@ void HCodeGenerator::writeConstructor() { } this->writef(")"); this->writeSection(INITIALIZERS_SECTION, "\n , "); - const auto transforms = fSectionAndParameterHelper.getSections(COORD_TRANSFORM_SECTION); - for (size_t i = 0; i < transforms.size(); ++i) { - const Section& s = *transforms[i]; - String field = CoordTransformName(s.fArgument.c_str(), i); - if (s.fArgument.size()) { - this->writef("\n , %s(%s, %s.proxy(), %s.origin())", field.c_str(), s.fText.c_str(), - FieldName(s.fArgument.c_str()).c_str(), - FieldName(s.fArgument.c_str()).c_str()); - } - else { - this->writef("\n , %s(%s)", field.c_str(), s.fText.c_str()); - } - } for (const auto& param : fSectionAndParameterHelper.getParameters()) { String nameString(param->fName); const char* name = nameString.c_str(); @@ -271,8 +260,13 @@ void HCodeGenerator::writeConstructor() { } this->writef(" {\n"); this->writeSection(CONSTRUCTOR_CODE_SECTION); + + if (Analysis::ReferencesSampleCoords(fProgram)) { + this->writef(" this->setUsesSampleCoordsDirectly();\n"); + } + int samplerCount = 0; - for (const auto& param : fSectionAndParameterHelper.getParameters()) { + for (const Variable* param : fSectionAndParameterHelper.getParameters()) { if (param->fType.kind() == Type::kSampler_Kind) { ++samplerCount; } else if (param->fType.nonnullable() == *fContext.fFragmentProcessor_Type) { @@ -281,36 +275,26 @@ void HCodeGenerator::writeConstructor() { } else { this->writef(" SkASSERT(%s);", String(param->fName).c_str()); } - this->writef(" %s_index = this->numChildProcessors();", - FieldName(String(param->fName).c_str()).c_str()); - if (fSectionAndParameterHelper.hasCoordOverrides(*param)) { - this->writef(" %s->setSampledWithExplicitCoords();", - String(param->fName).c_str()); - } - SampleMatrix matrix = fSectionAndParameterHelper.getMatrix(*param); - switch (matrix.fKind) { - case SampleMatrix::Kind::kVariable: - this->writef(" %s->setSampleMatrix(SkSL::SampleMatrix(" - "SkSL::SampleMatrix::Kind::kVariable));", - String(param->fName).c_str()); - break; - case SampleMatrix::Kind::kConstantOrUniform: - this->writef(" %s->setSampleMatrix(SkSL::SampleMatrix(" - "SkSL::SampleMatrix::Kind::kConstantOrUniform, this, \"%s\"));", - String(param->fName).c_str(), - matrix.fExpression.c_str()); - break; - case SampleMatrix::Kind::kMixed: - this->writef(" %s->setSampleMatrix(SkSL::SampleMatrix(" - "SkSL::SampleMatrix::Kind::kMixed, this, \"%s\"));", - String(param->fName).c_str(), - matrix.fExpression.c_str()); - break; - case SampleMatrix::Kind::kNone: - break; + + SampleUsage usage = Analysis::GetSampleUsage(fProgram, *param); + + std::string perspExpression; + if (usage.hasUniformMatrix()) { + for (const Variable* p : fSectionAndParameterHelper.getParameters()) { + if ((p->fModifiers.fFlags & Modifiers::kIn_Flag) && + usage.fExpression == String(p->fName)) { + perspExpression = usage.fExpression + ".hasPerspective()"; + break; + } + } } - this->writef(" this->registerChildProcessor(std::move(%s));", - String(param->fName).c_str()); + std::string usageArg = usage.constructor(std::move(perspExpression)); + + this->writef(" %s_index = this->registerChild(std::move(%s), %s);", + FieldName(String(param->fName).c_str()).c_str(), + String(param->fName).c_str(), + usageArg.c_str()); + if (param->fType.kind() == Type::kNullable_Kind) { this->writef(" }"); } @@ -319,22 +303,11 @@ void HCodeGenerator::writeConstructor() { if (samplerCount) { this->writef(" this->setTextureSamplerCnt(%d);", samplerCount); } - for (size_t i = 0; i < transforms.size(); ++i) { - const Section& s = *transforms[i]; - String field = CoordTransformName(s.fArgument.c_str(), i); - this->writef(" this->addCoordTransform(&%s);\n", field.c_str()); - } this->writef(" }\n"); } void HCodeGenerator::writeFields() { this->writeSection(FIELDS_SECTION); - const auto transforms = fSectionAndParameterHelper.getSections(COORD_TRANSFORM_SECTION); - for (size_t i = 0; i < transforms.size(); ++i) { - const Section& s = *transforms[i]; - this->writef(" GrCoordTransform %s;\n", - CoordTransformName(s.fArgument.c_str(), i).c_str()); - } for (const auto& param : fSectionAndParameterHelper.getParameters()) { String name = FieldName(String(param->fName).c_str()); if (param->fType.nonnullable() == *fContext.fFragmentProcessor_Type) { @@ -367,15 +340,17 @@ bool HCodeGenerator::generateCode() { this->writef("%s\n", GetHeader(fProgram, fErrors).c_str()); this->writef(kFragmentProcessorHeader, fFullName.c_str()); this->writef("#ifndef %s_DEFINED\n" - "#define %s_DEFINED\n", + "#define %s_DEFINED\n" + "\n", fFullName.c_str(), fFullName.c_str()); - this->writef("#include \"include/core/SkTypes.h\"\n"); - this->writef("#include \"include/core/SkM44.h\"\n"); + this->writef("#include \"include/core/SkM44.h\"\n" + "#include \"include/core/SkTypes.h\"\n" + "\n"); this->writeSection(HEADER_SECTION); this->writef("\n" - "#include \"src/gpu/GrCoordTransform.h\"\n" - "#include \"src/gpu/GrFragmentProcessor.h\"\n"); + "#include \"src/gpu/GrFragmentProcessor.h\"\n" + "\n"); this->writef("class %s : public GrFragmentProcessor {\n" "public:\n", fFullName.c_str()); diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp index 6e468322180d7..15d91c3912a7d 100644 --- a/src/sksl/SkSLIRGenerator.cpp +++ b/src/sksl/SkSLIRGenerator.cpp @@ -156,6 +156,7 @@ void IRGenerator::start(const Program::Settings* settings, fSkPerVertex = nullptr; fRTAdjust = nullptr; fRTAdjustInterfaceBlock = nullptr; + fInlineVarCounter = 0; if (inherited) { for (const auto& e : *inherited) { if (e->fKind == ProgramElement::kInterfaceBlock_Kind) { @@ -616,7 +617,7 @@ std::unique_ptr IRGenerator::convertSwitch(const ASTNode& s) { if (!caseValue) { return nullptr; } - if (!caseValue->isConstant()) { + if (!caseValue->isCompileTimeConstant()) { fErrors.error(caseValue->fOffset, "case value must be a constant"); return nullptr; } @@ -861,6 +862,19 @@ void IRGenerator::convertFunction(const ASTNode& f) { } break; } + case Program::kFragmentProcessor_Kind: { + bool valid = parameters.size() <= 1; + if (parameters.size() == 1) { + valid = parameters[0]->fType == *fContext.fFloat2_Type && + parameters[0]->fModifiers.fFlags == 0; + } + + if (!valid) { + fErrors.error(f.fOffset, ".fp 'main' must be declared main() or main(float2)"); + return; + } + break; + } case Program::kGeneric_Kind: break; default: @@ -948,6 +962,10 @@ void IRGenerator::convertFunction(const ASTNode& f) { SkASSERT(parameters.size() == 1); parameters[0]->fModifiers.fLayout.fBuiltin = SK_OUTCOLOR_BUILTIN; } + } else if (fd.fName == "main" && fKind == Program::kFragmentProcessor_Kind) { + if (parameters.size() == 1) { + parameters[0]->fModifiers.fLayout.fBuiltin = SK_MAIN_COORDS_BUILTIN; + } } for (size_t i = 0; i < parameters.size(); i++) { fSymbolTable->addWithoutOwnership(parameters[i]->fName, decl->fParameters[i]); @@ -1429,7 +1447,7 @@ static bool determine_binary_type(const Context& context, *outResultType = &left; return right.canCoerceTo(left); } - // fall through + [[fallthrough]]; case Token::Kind::TK_STAR: if (is_matrix_multiply(left, right)) { // determine final component type @@ -1482,7 +1500,7 @@ static bool determine_binary_type(const Context& context, *outResultType = &left; return right.canCoerceTo(left); } - // fall through + [[fallthrough]]; case Token::Kind::TK_PLUS: // fall through case Token::Kind::TK_MINUS: // fall through case Token::Kind::TK_SLASH: // fall through @@ -1575,16 +1593,16 @@ std::unique_ptr IRGenerator::constantFold(const Expression& left, const Expression& right) const { // If the left side is a constant boolean literal, the right side does not need to be constant // for short circuit optimizations to allow the constant to be folded. - if (left.fKind == Expression::kBoolLiteral_Kind && !right.isConstant()) { + if (left.fKind == Expression::kBoolLiteral_Kind && !right.isCompileTimeConstant()) { return short_circuit_boolean(fContext, left, op, right); - } else if (right.fKind == Expression::kBoolLiteral_Kind && !left.isConstant()) { + } else if (right.fKind == Expression::kBoolLiteral_Kind && !left.isCompileTimeConstant()) { // There aren't side effects in SKSL within expressions, so (left OP right) is equivalent to // (right OP left) for short-circuit optimizations return short_circuit_boolean(fContext, right, op, left); } // Other than the short-circuit cases above, constant folding requires both sides to be constant - if (!left.isConstant() || !right.isConstant()) { + if (!left.isCompileTimeConstant() || !right.isCompileTimeConstant()) { return nullptr; } // Note that we expressly do not worry about precision and overflow here -- we use the maximum @@ -2184,7 +2202,8 @@ std::unique_ptr IRGenerator::inlineCall( Variable* resultVar; if (function.fDeclaration.fReturnType != *fContext.fVoid_Type) { std::unique_ptr name(new String()); - name->appendf("inlineResult%d", offset); + int varIndex = fInlineVarCounter++; + name->appendf("inlineResult%d", varIndex); String* namePtr = (String*) fSymbolTable->takeOwnership(std::move(name)); resultVar = (Variable*) fSymbolTable->takeOwnership(std::unique_ptr( new Variable(-1, Modifiers(), namePtr->c_str(), @@ -2203,9 +2222,10 @@ std::unique_ptr IRGenerator::inlineCall( } std::map varMap; // create variables to hold the arguments and assign the arguments to them + int argIndex = fInlineVarCounter++; for (int i = 0; i < (int) arguments.size(); ++i) { std::unique_ptr argName(new String()); - argName->appendf("inlineArg%d_%d", offset, i); + argName->appendf("inlineArg%d_%d", argIndex, i); String* argNamePtr = (String*) fSymbolTable->takeOwnership(std::move(argName)); Variable* argVar = (Variable*) fSymbolTable->takeOwnership(std::unique_ptr( new Variable(-1, Modifiers(), @@ -2726,7 +2746,7 @@ std::unique_ptr IRGenerator::convertSwizzle(std::unique_ptr IRGenerator::convertSwizzle(std::unique_ptr IRGenerator::convertSwizzle(std::unique_ptrfOffset, String::printf("invalid swizzle component '%c'", fields[i])); diff --git a/src/sksl/SkSLIRGenerator.h b/src/sksl/SkSLIRGenerator.h index 8e856bf1ca440..e13e320fe7ee3 100644 --- a/src/sksl/SkSLIRGenerator.h +++ b/src/sksl/SkSLIRGenerator.h @@ -182,6 +182,7 @@ class IRGenerator { Variable* fRTAdjust; Variable* fRTAdjustInterfaceBlock; int fRTAdjustFieldIndex; + int fInlineVarCounter; bool fCanInline = true; friend class AutoSymbolTable; diff --git a/src/sksl/SkSLMetalCodeGenerator.cpp b/src/sksl/SkSLMetalCodeGenerator.cpp index 21fb47f6ea947..ad2ca45dd9c68 100644 --- a/src/sksl/SkSLMetalCodeGenerator.cpp +++ b/src/sksl/SkSLMetalCodeGenerator.cpp @@ -17,6 +17,15 @@ namespace SkSL { +class MetalCodeGenerator::GlobalStructVisitor { +public: + virtual ~GlobalStructVisitor() = default; + virtual void VisitInterfaceBlock(const InterfaceBlock& block, const String& blockName) = 0; + virtual void VisitTexture(const Type& type, const String& name) = 0; + virtual void VisitSampler(const Type& type, const String& name) = 0; + virtual void VisitVariable(const Variable& var, const Expression* value) = 0; +}; + void MetalCodeGenerator::setupIntrinsics() { #define METAL(x) std::make_pair(kMetal_IntrinsicKind, k ## x ## _MetalIntrinsic) #define SPECIAL(x) std::make_pair(kSpecial_IntrinsicKind, k ## x ## _SpecialIntrinsic) @@ -892,6 +901,10 @@ void MetalCodeGenerator::writeFunction(const FunctionDefinition& f) { for (const auto& stmt: decls.fVars) { VarDeclaration& var = (VarDeclaration&) *stmt; if (var.fVar->fType.kind() == Type::kSampler_Kind) { + if (var.fVar->fModifiers.fLayout.fBinding < 0) { + fErrors.error(decls.fOffset, + "Metal samplers must have 'layout(binding=...)'"); + } this->write(", texture2d "); // FIXME - support other texture types this->writeName(var.fVar->fName); this->write("[[texture("); @@ -990,39 +1003,7 @@ void MetalCodeGenerator::writeFunction(const FunctionDefinition& f) { SkASSERT(!fProgram.fSettings.fFragColorIsInOut); if ("main" == f.fDeclaration.fName) { - if (fNeedsGlobalStructInit) { - this->writeLine(" Globals globalStruct;"); - for (const auto& [interfaceBlock, interfaceName] : fInterfaceBlockNameMap) { - this->write(" globalStruct."); - this->writeName(interfaceName); - this->write(" = &"); - this->writeName(interfaceName); - this->writeLine(";"); - } - for (const VarDeclaration* var : fInitNonConstGlobalVars) { - this->write(" globalStruct."); - this->writeName(var->fVar->fName); - this->write(" = "); - this->writeVarInitializer(*var->fVar, *var->fValue); - this->writeLine(";"); - } - for (const Variable* texture : fTextures) { - this->write(" globalStruct."); - this->writeName(texture->fName); - this->write(" = "); - this->writeName(texture->fName); - this->writeLine(";"); - - String samplerName = String(texture->fName) + SAMPLER_SUFFIX; - this->write(" globalStruct."); - this->writeName(samplerName); - this->write(" = "); - this->writeName(samplerName); - this->writeLine(";"); - } - this->writeLine(" thread Globals* _globals = &globalStruct;"); - this->writeLine(" (void)_globals;"); - } + this->writeGlobalInit(); this->writeLine(" Outputs _outputStruct;"); this->writeLine(" thread Outputs* _out = &_outputStruct;"); } @@ -1482,61 +1463,140 @@ void MetalCodeGenerator::writeInterfaceBlocks() { } } -void MetalCodeGenerator::writeGlobalStruct() { - bool wroteStructDecl = false; - auto WriteStructDecl = [&] { - if (!wroteStructDecl) { - this->write("struct Globals {\n"); - wroteStructDecl = true; - } - }; - - for (const auto& intf : fInterfaceBlockNameMap) { - WriteStructDecl(); - fNeedsGlobalStructInit = true; - const auto& intfType = intf.first; - const auto& intfName = intf.second; - this->write(" constant "); - this->write(intfType->fTypeName); - this->write("* "); - this->writeName(intfName); - this->write(";\n"); +void MetalCodeGenerator::visitGlobalStruct(GlobalStructVisitor* visitor) { + // Visit the interface blocks. + for (const auto& [interfaceType, interfaceName] : fInterfaceBlockNameMap) { + visitor->VisitInterfaceBlock(*interfaceType, interfaceName); } - for (const auto& e : fProgram) { - if (ProgramElement::kVar_Kind == e.fKind) { - VarDeclarations& decls = (VarDeclarations&) e; - if (!decls.fVars.size()) { - continue; - } - const Variable& first = *((VarDeclaration&) *decls.fVars[0]).fVar; - if ((!first.fModifiers.fFlags && -1 == first.fModifiers.fLayout.fBuiltin) || - first.fType.kind() == Type::kSampler_Kind) { - WriteStructDecl(); - fNeedsGlobalStructInit = true; - this->write(" "); - this->writeType(first.fType); - this->write(" "); - for (const auto& stmt : decls.fVars) { - VarDeclaration& var = (VarDeclaration&) *stmt; - this->writeName(var.fVar->fName); - if (var.fVar->fType.kind() == Type::kSampler_Kind) { - fTextures.push_back(var.fVar); - this->write(";\n"); - this->write(" sampler "); - this->writeName(var.fVar->fName); - this->write(SAMPLER_SUFFIX); - } - if (var.fValue) { - fInitNonConstGlobalVars.push_back(&var); - } + for (const ProgramElement& element : fProgram) { + if (element.fKind != ProgramElement::kVar_Kind) { + continue; + } + const VarDeclarations& decls = static_cast(element); + if (decls.fVars.empty()) { + continue; + } + const Variable& first = *((VarDeclaration&) *decls.fVars[0]).fVar; + if ((!first.fModifiers.fFlags && -1 == first.fModifiers.fLayout.fBuiltin) || + first.fType.kind() == Type::kSampler_Kind) { + for (const auto& stmt : decls.fVars) { + VarDeclaration& var = static_cast(*stmt); + + if (var.fVar->fType.kind() == Type::kSampler_Kind) { + // Samplers are represented as a "texture/sampler" duo in the global struct. + visitor->VisitTexture(first.fType, var.fVar->fName); + visitor->VisitSampler(first.fType, String(var.fVar->fName) + SAMPLER_SUFFIX); + } else { + // Visit a regular variable. + visitor->VisitVariable(*var.fVar, var.fValue.get()); } - this->write(";\n"); } } } - if (wroteStructDecl) { - this->write("};\n"); - } +} + +void MetalCodeGenerator::writeGlobalStruct() { + class : public GlobalStructVisitor { + public: + void VisitInterfaceBlock(const InterfaceBlock& block, const String& blockName) override { + this->AddElement(); + fCodeGen->write(" constant "); + fCodeGen->write(block.fTypeName); + fCodeGen->write("* "); + fCodeGen->writeName(blockName); + fCodeGen->write(";\n"); + } + void VisitTexture(const Type& type, const String& name) override { + this->AddElement(); + fCodeGen->write(" "); + fCodeGen->writeType(type); + fCodeGen->write(" "); + fCodeGen->writeName(name); + fCodeGen->write(";\n"); + } + void VisitSampler(const Type&, const String& name) override { + this->AddElement(); + fCodeGen->write(" sampler "); + fCodeGen->writeName(name); + fCodeGen->write(";\n"); + } + void VisitVariable(const Variable& var, const Expression* value) override { + this->AddElement(); + fCodeGen->write(" "); + fCodeGen->writeType(var.fType); + fCodeGen->write(" "); + fCodeGen->writeName(var.fName); + fCodeGen->write(";\n"); + } + void AddElement() { + if (fFirst) { + fCodeGen->write("struct Globals {\n"); + fFirst = false; + } + } + void Finish() { + if (!fFirst) { + fCodeGen->write("};"); + fFirst = true; + } + } + + MetalCodeGenerator* fCodeGen = nullptr; + bool fFirst = true; + } visitor; + + visitor.fCodeGen = this; + this->visitGlobalStruct(&visitor); + visitor.Finish(); +} + +void MetalCodeGenerator::writeGlobalInit() { + class : public GlobalStructVisitor { + public: + void VisitInterfaceBlock(const InterfaceBlock& blockType, + const String& blockName) override { + this->AddElement(); + fCodeGen->write("&"); + fCodeGen->writeName(blockName); + } + void VisitTexture(const Type&, const String& name) override { + this->AddElement(); + fCodeGen->writeName(name); + } + void VisitSampler(const Type&, const String& name) override { + this->AddElement(); + fCodeGen->writeName(name); + } + void VisitVariable(const Variable& var, const Expression* value) override { + this->AddElement(); + if (value) { + fCodeGen->writeVarInitializer(var, *value); + } else { + fCodeGen->write("{}"); + } + } + void AddElement() { + if (fFirst) { + fCodeGen->write(" Globals globalStruct{"); + fFirst = false; + } else { + fCodeGen->write(", "); + } + } + void Finish() { + if (!fFirst) { + fCodeGen->writeLine("};"); + fCodeGen->writeLine(" thread Globals* _globals = &globalStruct;"); + fCodeGen->writeLine(" (void)_globals;"); + } + } + MetalCodeGenerator* fCodeGen = nullptr; + bool fFirst = true; + } visitor; + + visitor.fCodeGen = this; + this->visitGlobalStruct(&visitor); + visitor.Finish(); } void MetalCodeGenerator::writeProgramElement(const ProgramElement& e) { diff --git a/src/sksl/SkSLMetalCodeGenerator.h b/src/sksl/SkSLMetalCodeGenerator.h index 65216dc3aa23c..2d827310e63f2 100644 --- a/src/sksl/SkSLMetalCodeGenerator.h +++ b/src/sksl/SkSLMetalCodeGenerator.h @@ -117,6 +117,9 @@ class MetalCodeGenerator : public CodeGenerator { kGreaterThanEqual_MetalIntrinsic, }; + class GlobalStructVisitor; + void visitGlobalStruct(GlobalStructVisitor* visitor); + void setupIntrinsics(); void write(const char* s); @@ -147,6 +150,7 @@ class MetalCodeGenerator : public CodeGenerator { int alignment(const Type* type, bool isPacked) const; void writeGlobalStruct(); + void writeGlobalInit(); void writePrecisionModifier(); @@ -168,8 +172,6 @@ class MetalCodeGenerator : public CodeGenerator { void writeModifiers(const Modifiers& modifiers, bool globalContext); - void writeGlobalVars(const VarDeclaration& vs); - void writeVarInitializer(const Variable& var, const Expression& value); void writeName(const String& name); @@ -254,13 +256,10 @@ class MetalCodeGenerator : public CodeGenerator { typedef std::pair Intrinsic; std::unordered_map fIntrinsicMap; std::unordered_set fReservedWords; - std::vector fInitNonConstGlobalVars; - std::vector fTextures; std::unordered_map fInterfaceBlockMap; std::unordered_map fInterfaceBlockNameMap; int fAnonInterfaceCount = 0; int fPaddingCount = 0; - bool fNeedsGlobalStructInit = false; const char* fLineEnding; const Context& fContext; StringStream fHeader; diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp index 3f7df7997fdfa..afa9e3dab1beb 100644 --- a/src/sksl/SkSLParser.cpp +++ b/src/sksl/SkSLParser.cpp @@ -1069,7 +1069,7 @@ ASTNode::ID Parser::statement() { if (this->isType(this->text(start))) { return this->varDeclarations(); } - // fall through + [[fallthrough]]; default: return this->expressionStatement(); } @@ -1370,7 +1370,8 @@ ASTNode::ID Parser::forStatement() { getNode(result).addChild(initializer); break; } - } // fall through + [[fallthrough]]; + } default: initializer = this->expressionStatement(); if (!initializer) { @@ -1960,7 +1961,7 @@ ASTNode::ID Parser::postfixExpression() { if (this->text(t)[0] != '.') { return result; } - // fall through + [[fallthrough]]; case Token::Kind::TK_LBRACKET: case Token::Kind::TK_DOT: case Token::Kind::TK_LPAREN: @@ -2016,6 +2017,7 @@ ASTNode::ID Parser::suffix(ASTNode::ID base) { getNode(result).addChild(base); return result; } + [[fallthrough]]; // FIXME(ethannicholas) } case Token::Kind::TK_FLOAT_LITERAL: { // Swizzles that start with a constant number, e.g. '.000r', will be tokenized as @@ -2082,6 +2084,7 @@ ASTNode::ID Parser::term() { if (this->identifier(&text)) { RETURN_NODE(t.fOffset, ASTNode::Kind::kIdentifier, std::move(text)); } + break; } case Token::Kind::TK_INT_LITERAL: { SKSL_INT i; diff --git a/src/sksl/SkSLPipelineStageCodeGenerator.cpp b/src/sksl/SkSLPipelineStageCodeGenerator.cpp index a98ad9d4d8f0d..4b4bd76ebd015 100644 --- a/src/sksl/SkSLPipelineStageCodeGenerator.cpp +++ b/src/sksl/SkSLPipelineStageCodeGenerator.cpp @@ -34,29 +34,10 @@ String PipelineStageCodeGenerator::getTypeName(const Type& type) { return type.name(); } -void PipelineStageCodeGenerator::writeBinaryExpression(const BinaryExpression& b, - Precedence parentPrecedence) { - if (b.fOperator == Token::Kind::TK_PERCENT) { - // need to use "%%" instead of "%" b/c the code will be inside of a printf - Precedence precedence = GetBinaryPrecedence(b.fOperator); - if (precedence >= parentPrecedence) { - this->write("("); - } - this->writeExpression(*b.fLeft, precedence); - this->write(" %% "); - this->writeExpression(*b.fRight, precedence); - if (precedence >= parentPrecedence) { - this->write(")"); - } - } else { - INHERITED::writeBinaryExpression(b, parentPrecedence); - } -} - void PipelineStageCodeGenerator::writeFunctionCall(const FunctionCall& c) { if (c.fFunction.fBuiltin && c.fFunction.fName == "sample" && c.fArguments[0]->fType.kind() != Type::Kind::kSampler_Kind) { - SkASSERT(c.fArguments.size() == 2); + SkASSERT(c.fArguments.size() <= 2); SkASSERT("fragmentProcessor" == c.fArguments[0]->fType.name() || "fragmentProcessor?" == c.fArguments[0]->fType.name()); SkASSERT(Expression::kVariableReference_Kind == c.fArguments[0]->fKind); @@ -79,22 +60,27 @@ void PipelineStageCodeGenerator::writeFunctionCall(const FunctionCall& c) { } } SkASSERT(found); - this->write("%s"); size_t childCallIndex = fArgs->fFormatArgs.size(); - fArgs->fFormatArgs.push_back( - Compiler::FormatArg(Compiler::FormatArg::Kind::kChildProcessor, index)); - OutputStream* oldOut = fOut; - StringStream buffer; - fOut = &buffer; - this->writeExpression(*c.fArguments[1], kSequence_Precedence); - fOut = oldOut; - fArgs->fFormatArgs[childCallIndex].fCoords = buffer.str(); + this->write(Compiler::kFormatArgPlaceholderStr); + bool matrixCall = + c.fArguments.size() == 2 && c.fArguments[1]->fType.kind() == Type::kMatrix_Kind; + fArgs->fFormatArgs.push_back(Compiler::FormatArg( + matrixCall ? Compiler::FormatArg::Kind::kChildProcessorWithMatrix + : Compiler::FormatArg::Kind::kChildProcessor, + index)); + if (c.fArguments.size() > 1) { + OutputStream* oldOut = fOut; + StringStream buffer; + fOut = &buffer; + this->writeExpression(*c.fArguments[1], kSequence_Precedence); + fOut = oldOut; + fArgs->fFormatArgs[childCallIndex].fCoords = buffer.str(); + } return; } if (c.fFunction.fBuiltin) { INHERITED::writeFunctionCall(c); } else { - this->write("%s"); int index = 0; for (const auto& e : fProgram) { if (e.fKind == ProgramElement::kFunction_Kind) { @@ -104,6 +90,7 @@ void PipelineStageCodeGenerator::writeFunctionCall(const FunctionCall& c) { ++index; } } + this->write(Compiler::kFormatArgPlaceholderStr); fArgs->fFormatArgs.push_back( Compiler::FormatArg(Compiler::FormatArg::Kind::kFunctionName, index)); this->write("("); @@ -124,15 +111,15 @@ void PipelineStageCodeGenerator::writeIntLiteral(const IntLiteral& i) { void PipelineStageCodeGenerator::writeVariableReference(const VariableReference& ref) { switch (ref.fVariable.fModifiers.fLayout.fBuiltin) { case SK_INCOLOR_BUILTIN: - this->write("%s"); + this->write(Compiler::kFormatArgPlaceholderStr); fArgs->fFormatArgs.push_back(Compiler::FormatArg(Compiler::FormatArg::Kind::kInput)); break; case SK_OUTCOLOR_BUILTIN: - this->write("%s"); + this->write(Compiler::kFormatArgPlaceholderStr); fArgs->fFormatArgs.push_back(Compiler::FormatArg(Compiler::FormatArg::Kind::kOutput)); break; case SK_MAIN_COORDS_BUILTIN: - this->write("%s"); + this->write(Compiler::kFormatArgPlaceholderStr); fArgs->fFormatArgs.push_back(Compiler::FormatArg(Compiler::FormatArg::Kind::kCoords)); break; default: { @@ -162,7 +149,7 @@ void PipelineStageCodeGenerator::writeVariableReference(const VariableReference& }; if (ref.fVariable.fModifiers.fFlags & Modifiers::kUniform_Flag) { - this->write("%s"); + this->write(Compiler::kFormatArgPlaceholderStr); fArgs->fFormatArgs.push_back( Compiler::FormatArg(Compiler::FormatArg::Kind::kUniform, varIndexByFlag(Modifiers::kUniform_Flag))); @@ -225,7 +212,10 @@ void PipelineStageCodeGenerator::writeFunction(const FunctionDefinition& f) { StringStream buffer; fOut = &buffer; if (f.fDeclaration.fName == "main") { - this->write("%s = %s;\n"); + this->write(Compiler::kFormatArgPlaceholderStr); + this->write(" = "); + this->write(Compiler::kFormatArgPlaceholderStr); + this->write(";\n"); fArgs->fFormatArgs.push_back(Compiler::FormatArg(Compiler::FormatArg::Kind::kOutput)); fArgs->fFormatArgs.push_back(Compiler::FormatArg(Compiler::FormatArg::Kind::kInput)); for (const auto& s : ((Block&) *f.fBody).fStatements) { diff --git a/src/sksl/SkSLPipelineStageCodeGenerator.h b/src/sksl/SkSLPipelineStageCodeGenerator.h index 39b5c22f48f1a..9a6a390994f3f 100644 --- a/src/sksl/SkSLPipelineStageCodeGenerator.h +++ b/src/sksl/SkSLPipelineStageCodeGenerator.h @@ -27,8 +27,6 @@ class PipelineStageCodeGenerator : public GLSLCodeGenerator { String getTypeName(const Type& type) override; - void writeBinaryExpression(const BinaryExpression& b, Precedence parentPrecedence) override; - void writeFunctionCall(const FunctionCall& c) override; void writeIntLiteral(const IntLiteral& i) override; diff --git a/src/sksl/SkSLSPIRVCodeGenerator.cpp b/src/sksl/SkSLSPIRVCodeGenerator.cpp index d79227a791db7..4516f6903fddf 100644 --- a/src/sksl/SkSLSPIRVCodeGenerator.cpp +++ b/src/sksl/SkSLSPIRVCodeGenerator.cpp @@ -253,10 +253,10 @@ void SPIRVCodeGenerator::writeString(const char* string, size_t length, OutputSt switch (length % 4) { case 1: out.write8(0); - // fall through + [[fallthrough]]; case 2: out.write8(0); - // fall through + [[fallthrough]]; case 3: out.write8(0); break; @@ -1071,7 +1071,7 @@ SpvId SPIRVCodeGenerator::writeFunctionCall(const FunctionCall& c, OutputStream& } SpvId SPIRVCodeGenerator::writeConstantVector(const Constructor& c) { - SkASSERT(c.fType.kind() == Type::kVector_Kind && c.isConstant()); + SkASSERT(c.fType.kind() == Type::kVector_Kind && c.isCompileTimeConstant()); SpvId result = this->nextId(); std::vector arguments; for (size_t i = 0; i < c.fArguments.size(); i++) { @@ -1361,7 +1361,7 @@ SpvId SPIRVCodeGenerator::writeMatrixConstructor(const Constructor& c, OutputStr SpvId SPIRVCodeGenerator::writeVectorConstructor(const Constructor& c, OutputStream& out) { SkASSERT(c.fType.kind() == Type::kVector_Kind); - if (c.isConstant()) { + if (c.isCompileTimeConstant()) { return this->writeConstantVector(c); } // go ahead and write the arguments so we don't try to write new instructions in the middle of @@ -1810,77 +1810,111 @@ SpvId SPIRVCodeGenerator::writeVariableReference(const VariableReference& ref, O this->writeInstruction(SpvOpLoad, this->getType(ref.fVariable.fType), result, var, out); this->writePrecisionModifier(ref.fVariable.fType, result); if (ref.fVariable.fModifiers.fLayout.fBuiltin == SK_FRAGCOORD_BUILTIN && - fProgram.fSettings.fFlipY) { - // need to remap to a top-left coordinate system - if (fRTHeightStructId == (SpvId) -1) { - // height variable hasn't been written yet - std::shared_ptr st(new SymbolTable(&fErrors)); - SkASSERT(fRTHeightFieldIndex == (SpvId) -1); - std::vector fields; - SkASSERT(fProgram.fSettings.fRTHeightOffset >= 0); - fields.emplace_back(Modifiers(Layout(0, -1, fProgram.fSettings.fRTHeightOffset, -1, - -1, -1, -1, -1, Layout::Format::kUnspecified, - Layout::kUnspecified_Primitive, -1, -1, "", "", - Layout::kNo_Key, Layout::CType::kDefault), 0), - SKSL_RTHEIGHT_NAME, fContext.fFloat_Type.get()); - StringFragment name("sksl_synthetic_uniforms"); - Type intfStruct(-1, name, fields); - - int binding = fProgram.fSettings.fRTHeightBinding; - int set = fProgram.fSettings.fRTHeightSet; - SkASSERT(binding != -1 && set != -1); - - Layout layout(0, -1, -1, binding, -1, set, -1, -1, Layout::Format::kUnspecified, - Layout::kUnspecified_Primitive, -1, -1, "", "", Layout::kNo_Key, - Layout::CType::kDefault); - Variable* intfVar = (Variable*) fSynthetics.takeOwnership(std::unique_ptr( - new Variable(-1, - Modifiers(layout, Modifiers::kUniform_Flag), - name, - intfStruct, - Variable::kGlobal_Storage))); - InterfaceBlock intf(-1, intfVar, name, String(""), - std::vector>(), st); - fRTHeightStructId = this->writeInterfaceBlock(intf); - fRTHeightFieldIndex = 0; - } - SkASSERT(fRTHeightFieldIndex != (SpvId) -1); - // write float4(gl_FragCoord.x, u_skRTHeight - gl_FragCoord.y, 0.0, gl_FragCoord.w) + (fProgram.fSettings.fFlipY || fProgram.fSettings.fInverseW)) { + // The x component never changes, so just grab it SpvId xId = this->nextId(); this->writeInstruction(SpvOpCompositeExtract, this->getType(*fContext.fFloat_Type), xId, result, 0, out); - IntLiteral fieldIndex(fContext, -1, fRTHeightFieldIndex); - SpvId fieldIndexId = this->writeIntLiteral(fieldIndex); - SpvId heightPtr = this->nextId(); - this->writeOpCode(SpvOpAccessChain, 5, out); - this->writeWord(this->getPointerType(*fContext.fFloat_Type, SpvStorageClassUniform), out); - this->writeWord(heightPtr, out); - this->writeWord(fRTHeightStructId, out); - this->writeWord(fieldIndexId, out); - SpvId heightRead = this->nextId(); - this->writeInstruction(SpvOpLoad, this->getType(*fContext.fFloat_Type), heightRead, - heightPtr, out); + + // Calculate the y component which may need to be flipped SpvId rawYId = this->nextId(); this->writeInstruction(SpvOpCompositeExtract, this->getType(*fContext.fFloat_Type), rawYId, result, 1, out); - SpvId flippedYId = this->nextId(); - this->writeInstruction(SpvOpFSub, this->getType(*fContext.fFloat_Type), flippedYId, - heightRead, rawYId, out); + SpvId flippedYId = 0; + if (fProgram.fSettings.fFlipY) { + // need to remap to a top-left coordinate system + if (fRTHeightStructId == (SpvId)-1) { + // height variable hasn't been written yet + std::shared_ptr st(new SymbolTable(&fErrors)); + SkASSERT(fRTHeightFieldIndex == (SpvId)-1); + std::vector fields; + SkASSERT(fProgram.fSettings.fRTHeightOffset >= 0); + fields.emplace_back( + Modifiers(Layout(0, -1, fProgram.fSettings.fRTHeightOffset, -1, -1, -1, -1, + -1, Layout::Format::kUnspecified, + Layout::kUnspecified_Primitive, 1, -1, "", "", + Layout::kNo_Key, Layout::CType::kDefault), + 0), + SKSL_RTHEIGHT_NAME, fContext.fFloat_Type.get()); + StringFragment name("sksl_synthetic_uniforms"); + Type intfStruct(-1, name, fields); + + int binding = fProgram.fSettings.fRTHeightBinding; + int set = fProgram.fSettings.fRTHeightSet; + SkASSERT(binding != -1 && set != -1); + + Layout layout(0, -1, -1, binding, -1, set, -1, -1, Layout::Format::kUnspecified, + Layout::kUnspecified_Primitive, -1, -1, "", "", Layout::kNo_Key, + Layout::CType::kDefault); + Variable* intfVar = (Variable*)fSynthetics.takeOwnership(std::unique_ptr( + new Variable(-1, + Modifiers(layout, Modifiers::kUniform_Flag), + name, + intfStruct, + Variable::kGlobal_Storage))); + InterfaceBlock intf(-1, intfVar, name, String(""), + std::vector>(), st); + + fRTHeightStructId = this->writeInterfaceBlock(intf, false); + fRTHeightFieldIndex = 0; + } + SkASSERT(fRTHeightFieldIndex != (SpvId)-1); + + IntLiteral fieldIndex(fContext, -1, fRTHeightFieldIndex); + SpvId fieldIndexId = this->writeIntLiteral(fieldIndex); + SpvId heightPtr = this->nextId(); + this->writeOpCode(SpvOpAccessChain, 5, out); + this->writeWord(this->getPointerType(*fContext.fFloat_Type, SpvStorageClassUniform), + out); + this->writeWord(heightPtr, out); + this->writeWord(fRTHeightStructId, out); + this->writeWord(fieldIndexId, out); + SpvId heightRead = this->nextId(); + this->writeInstruction(SpvOpLoad, this->getType(*fContext.fFloat_Type), heightRead, + heightPtr, out); + + flippedYId = this->nextId(); + this->writeInstruction(SpvOpFSub, this->getType(*fContext.fFloat_Type), flippedYId, + heightRead, rawYId, out); + } + + // The z component will always be zero so we just get an id to the 0 literal FloatLiteral zero(fContext, -1, 0.0); SpvId zeroId = writeFloatLiteral(zero); - FloatLiteral one(fContext, -1, 1.0); - SpvId wId = this->nextId(); - this->writeInstruction(SpvOpCompositeExtract, this->getType(*fContext.fFloat_Type), wId, + + // Calculate the w component which may need to be inverted + SpvId rawWId = this->nextId(); + this->writeInstruction(SpvOpCompositeExtract, this->getType(*fContext.fFloat_Type), rawWId, result, 3, out); - SpvId flipped = this->nextId(); + SpvId invWId = 0; + if (fProgram.fSettings.fInverseW) { + // We need to invert w + FloatLiteral one(fContext, -1, 1.0); + SpvId oneId = writeFloatLiteral(one); + invWId = this->nextId(); + this->writeInstruction(SpvOpFDiv, this->getType(*fContext.fFloat_Type), invWId, oneId, + rawWId, out); + } + + // Fill in the new fragcoord with the components from above + SpvId adjusted = this->nextId(); this->writeOpCode(SpvOpCompositeConstruct, 7, out); this->writeWord(this->getType(*fContext.fFloat4_Type), out); - this->writeWord(flipped, out); + this->writeWord(adjusted, out); this->writeWord(xId, out); - this->writeWord(flippedYId, out); + if (fProgram.fSettings.fFlipY) { + this->writeWord(flippedYId, out); + } else { + this->writeWord(rawYId, out); + } this->writeWord(zeroId, out); - this->writeWord(wId, out); - return flipped; + if (fProgram.fSettings.fInverseW) { + this->writeWord(invWId, out); + } else { + this->writeWord(rawWId, out); + } + + return adjusted; } if (ref.fVariable.fModifiers.fLayout.fBuiltin == SK_CLOCKWISE_BUILTIN && !fProgram.fSettings.fFlipY) { @@ -2347,7 +2381,9 @@ SpvId SPIRVCodeGenerator::writeLogicalOr(const BinaryExpression& o, OutputStream SpvId SPIRVCodeGenerator::writeTernaryExpression(const TernaryExpression& t, OutputStream& out) { SpvId test = this->writeExpression(*t.fTest, out); - if (t.fIfTrue->fType.columns() == 1 && t.fIfTrue->isConstant() && t.fIfFalse->isConstant()) { + if (t.fIfTrue->fType.columns() == 1 && + t.fIfTrue->isCompileTimeConstant() && + t.fIfFalse->isCompileTimeConstant()) { // both true and false are constants, can just use OpSelect SpvId result = this->nextId(); SpvId trueId = this->writeExpression(*t.fIfTrue, out); @@ -2644,7 +2680,7 @@ static void update_sk_in_count(const Modifiers& m, int* outSkInCount) { } } -SpvId SPIRVCodeGenerator::writeInterfaceBlock(const InterfaceBlock& intf) { +SpvId SPIRVCodeGenerator::writeInterfaceBlock(const InterfaceBlock& intf, bool appendRTHeight) { bool isBuffer = (0 != (intf.fVariable.fModifiers.fFlags & Modifiers::kBuffer_Flag)); bool pushConstant = (0 != (intf.fVariable.fModifiers.fLayout.fFlags & Layout::kPushConstant_Flag)); @@ -2653,7 +2689,7 @@ SpvId SPIRVCodeGenerator::writeInterfaceBlock(const InterfaceBlock& intf) { fDefaultLayout; SpvId result = this->nextId(); const Type* type = &intf.fVariable.fType; - if (fProgram.fInputs.fRTHeight) { + if (fProgram.fInputs.fRTHeight && appendRTHeight) { SkASSERT(fRTHeightStructId == (SpvId) -1); SkASSERT(fRTHeightFieldIndex == (SpvId) -1); std::vector fields = type->fields(); @@ -2690,7 +2726,7 @@ SpvId SPIRVCodeGenerator::writeInterfaceBlock(const InterfaceBlock& intf) { } this->writeLayout(layout, result); fVariableMap[&intf.fVariable] = result; - if (fProgram.fInputs.fRTHeight) { + if (fProgram.fInputs.fRTHeight && appendRTHeight) { delete type; } return result; diff --git a/src/sksl/SkSLSPIRVCodeGenerator.h b/src/sksl/SkSLSPIRVCodeGenerator.h index 8f14b46fb57f4..efb89a5dca9f1 100644 --- a/src/sksl/SkSLSPIRVCodeGenerator.h +++ b/src/sksl/SkSLSPIRVCodeGenerator.h @@ -177,7 +177,7 @@ class SPIRVCodeGenerator : public CodeGenerator { void writeProgramElement(const ProgramElement& pe, OutputStream& out); - SpvId writeInterfaceBlock(const InterfaceBlock& intf); + SpvId writeInterfaceBlock(const InterfaceBlock& intf, bool appendRTHeight = true); SpvId writeFunctionStart(const FunctionDeclaration& f, OutputStream& out); diff --git a/src/sksl/SkSLSampleMatrix.cpp b/src/sksl/SkSLSampleMatrix.cpp deleted file mode 100644 index 4593702c0e8be..0000000000000 --- a/src/sksl/SkSLSampleMatrix.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/sksl/SkSLSampleMatrix.h" - -#include "src/sksl/ir/SkSLExpression.h" - -namespace SkSL { - -SampleMatrix SampleMatrix::merge(const SampleMatrix& other) { - if (fKind == Kind::kVariable || other.fKind == Kind::kVariable) { - *this = SampleMatrix(Kind::kVariable); - return *this; - } - if (other.fKind == Kind::kConstantOrUniform) { - if (fKind == other.fKind) { - if (fExpression == other.fExpression) { - return *this; - } - *this = SampleMatrix(Kind::kVariable); - return *this; - } - SkASSERT(fKind == Kind::kNone); - *this = other; - return *this; - } - return *this; -} - -} // namespace diff --git a/src/sksl/SkSLSampleMatrix.h b/src/sksl/SkSLSampleMatrix.h deleted file mode 100644 index d41141b2954fa..0000000000000 --- a/src/sksl/SkSLSampleMatrix.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef SkSLSampleMatrix_DEFINED -#define SkSLSampleMatrix_DEFINED - -#include "src/sksl/SkSLDefines.h" -#include "src/sksl/SkSLString.h" - -class GrFragmentProcessor; - -namespace SkSL { - -struct Expression; - -/** - * Represents the matrix applied to a fragment processor by its parent's sample(child, matrix) call. - */ -struct SampleMatrix { - enum class Kind { - // No sample(child, matrix) call affects the FP. - kNone, - // The FP is sampled with a matrix whose value is fixed and based only on constants or - // uniforms, and thus the transform can be hoisted to the vertex shader. - kConstantOrUniform, - // The FP is sampled with a non-constant/uniform value, or sampled multiple times, and - // thus the transform cannot be hoisted to the vertex shader. - kVariable, - // The FP is sampled with a constant or uniform value, *and* also inherits a variable - // transform from an ancestor. The transform cannot be hoisted to the vertex shader, and - // both matrices need to be applied. - kMixed, - }; - - SampleMatrix() - : fOwner(nullptr) - , fKind(Kind::kNone) {} - - SampleMatrix(Kind kind) - : fOwner(nullptr) - , fKind(kind) { - SkASSERT(kind == Kind::kNone || kind == Kind::kVariable); - } - - SampleMatrix(Kind kind, GrFragmentProcessor* owner, String expression) - : fOwner(owner) - , fKind(kind) - , fExpression(expression) {} - - SampleMatrix merge(const SampleMatrix& other); - - bool operator==(const SampleMatrix& other) const { - return fKind == other.fKind && fExpression == other.fExpression; - } - -#ifdef SK_DEBUG - String description() { - switch (fKind) { - case Kind::kNone: - return "SampleMatrix"; - case Kind::kConstantOrUniform: - return "SampleMatrix"; - case Kind::kVariable: - return "SampleMatrix"; - case Kind::kMixed: - return "SampleMatrix"; - } - } -#endif - - GrFragmentProcessor* fOwner; - Kind fKind; - // The constant or uniform expression representing the matrix (will be the empty string when - // kind == kNone or kVariable) - String fExpression; - const GrFragmentProcessor* fBase = nullptr; -}; - -} // namespace - -#endif diff --git a/src/sksl/SkSLSampleUsage.cpp b/src/sksl/SkSLSampleUsage.cpp new file mode 100644 index 0000000000000..6eac4b6ed3e9b --- /dev/null +++ b/src/sksl/SkSLSampleUsage.cpp @@ -0,0 +1,104 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/private/SkSLSampleUsage.h" + +#include "src/sksl/ir/SkSLBinaryExpression.h" +#include "src/sksl/ir/SkSLConstructor.h" +#include "src/sksl/ir/SkSLDoStatement.h" +#include "src/sksl/ir/SkSLExpression.h" +#include "src/sksl/ir/SkSLExpressionStatement.h" +#include "src/sksl/ir/SkSLFieldAccess.h" +#include "src/sksl/ir/SkSLForStatement.h" +#include "src/sksl/ir/SkSLFunctionCall.h" +#include "src/sksl/ir/SkSLIfStatement.h" +#include "src/sksl/ir/SkSLIndexExpression.h" +#include "src/sksl/ir/SkSLPostfixExpression.h" +#include "src/sksl/ir/SkSLPrefixExpression.h" +#include "src/sksl/ir/SkSLProgram.h" +#include "src/sksl/ir/SkSLReturnStatement.h" +#include "src/sksl/ir/SkSLSwitchStatement.h" +#include "src/sksl/ir/SkSLSwizzle.h" +#include "src/sksl/ir/SkSLTernaryExpression.h" +#include "src/sksl/ir/SkSLVarDeclarationsStatement.h" +#include "src/sksl/ir/SkSLVariable.h" +#include "src/sksl/ir/SkSLWhileStatement.h" + +namespace SkSL { + +SampleUsage SampleUsage::merge(const SampleUsage& other) { + if (other.fExplicitCoords) { fExplicitCoords = true; } + if (other.fPassThrough) { fPassThrough = true; } + if (other.fHasPerspective) { fHasPerspective = true; } + + if (other.fKind == Kind::kVariable) { + fKind = Kind::kVariable; + fExpression.clear(); + } else if (other.fKind == Kind::kUniform) { + if (fKind == Kind::kUniform) { + if (fExpression != other.fExpression) { + fKind = Kind::kVariable; + fExpression.clear(); + } else { + // Identical uniform expressions, so leave things as-is + } + } else if (fKind == Kind::kNone) { + fKind = Kind::kUniform; + fExpression = other.fExpression; + } else { + // We were already variable, so leave things as-is + SkASSERT(fKind == Kind::kVariable); + } + } else { + // other had no matrix information, so we're done + } + + return *this; +} + +std::string SampleUsage::constructor(std::string perspectiveExpression) const { + SkASSERT(this->hasMatrix() || perspectiveExpression.empty()); + if (perspectiveExpression.empty()) { + perspectiveExpression = fHasPerspective ? "true" : "false"; + } + + // Check for special cases where we can use our factories: + if (!this->hasMatrix()) { + if (fExplicitCoords && !fPassThrough) { + return "SkSL::SampleUsage::Explicit()"; + } else if (fPassThrough && !fExplicitCoords) { + return "SkSL::SampleUsage::PassThrough()"; + } + } + if (!fExplicitCoords && !fPassThrough) { + if (fKind == Kind::kVariable) { + return "SkSL::SampleUsage::VariableMatrix(" + perspectiveExpression + ")"; + } else if (fKind == Kind::kUniform) { + return "SkSL::SampleUsage::UniformMatrix(\"" + fExpression + "\", " + + perspectiveExpression + ")"; + } + } + + // For more complex scenarios (mixed sampling), fall back to our universal constructor + std::string result = "SkSL::SampleUsage(SkSL::SampleUsage::Kind::"; + switch (fKind) { + case Kind::kNone: result += "kNone"; break; + case Kind::kUniform: result += "kUniform"; break; + case Kind::kVariable: result += "kVariable"; break; + } + result += ", \""; + result += fExpression; + result += "\", "; + result += perspectiveExpression; + result += ", "; + result += fExplicitCoords ? "true, " : "false, "; + result += fPassThrough ? "true)" : "false)"; + + return result; +} + +} // namespace diff --git a/src/sksl/SkSLSectionAndParameterHelper.cpp b/src/sksl/SkSLSectionAndParameterHelper.cpp index 6d99548c7b9b3..069eb51465771 100644 --- a/src/sksl/SkSLSectionAndParameterHelper.cpp +++ b/src/sksl/SkSLSectionAndParameterHelper.cpp @@ -70,342 +70,4 @@ SectionAndParameterHelper::SectionAndParameterHelper(const Program* program, Err } } -bool SectionAndParameterHelper::hasCoordOverrides(const Variable& fp) { - for (const auto& pe : fProgram) { - if (this->hasCoordOverrides(pe, fp)) { - return true; - } - } - return false; -} - -bool SectionAndParameterHelper::hasCoordOverrides(const ProgramElement& pe, const Variable& fp) { - if (pe.fKind == ProgramElement::kFunction_Kind) { - return this->hasCoordOverrides(*((const FunctionDefinition&) pe).fBody, fp); - } - return false; -} - -bool SectionAndParameterHelper::hasCoordOverrides(const Expression& e, const Variable& fp) { - switch (e.fKind) { - case Expression::kFunctionCall_Kind: { - const FunctionCall& fc = (const FunctionCall&) e; - const FunctionDeclaration& f = fc.fFunction; - if (f.fBuiltin && f.fName == "sample" && fc.fArguments.size() >= 2 && - fc.fArguments.back()->fType == *fProgram.fContext->fFloat2_Type && - fc.fArguments[0]->fKind == Expression::kVariableReference_Kind && - &((VariableReference&) *fc.fArguments[0]).fVariable == &fp) { - return true; - } - for (const auto& e : fc.fArguments) { - if (this->hasCoordOverrides(*e, fp)) { - return true; - } - } - return false; - } - case Expression::kConstructor_Kind: { - const Constructor& c = (const Constructor&) e; - for (const auto& e : c.fArguments) { - if (this->hasCoordOverrides(*e, fp)) { - return true; - } - } - return false; - } - case Expression::kFieldAccess_Kind: { - return this->hasCoordOverrides(*((const FieldAccess&) e).fBase, fp); - } - case Expression::kSwizzle_Kind: - return this->hasCoordOverrides(*((const Swizzle&) e).fBase, fp); - case Expression::kBinary_Kind: { - const BinaryExpression& b = (const BinaryExpression&) e; - return this->hasCoordOverrides(*b.fLeft, fp) || - this->hasCoordOverrides(*b.fRight, fp); - } - case Expression::kIndex_Kind: { - const IndexExpression& idx = (const IndexExpression&) e; - return this->hasCoordOverrides(*idx.fBase, fp) || - this->hasCoordOverrides(*idx.fIndex, fp); - } - case Expression::kPrefix_Kind: - return this->hasCoordOverrides(*((const PrefixExpression&) e).fOperand, fp); - case Expression::kPostfix_Kind: - return this->hasCoordOverrides(*((const PostfixExpression&) e).fOperand, fp); - case Expression::kTernary_Kind: { - const TernaryExpression& t = (const TernaryExpression&) e; - return this->hasCoordOverrides(*t.fTest, fp) || - this->hasCoordOverrides(*t.fIfTrue, fp) || - this->hasCoordOverrides(*t.fIfFalse, fp); - } - case Expression::kVariableReference_Kind: - return false; - case Expression::kBoolLiteral_Kind: - case Expression::kDefined_Kind: - case Expression::kExternalFunctionCall_Kind: - case Expression::kExternalValue_Kind: - case Expression::kFloatLiteral_Kind: - case Expression::kFunctionReference_Kind: - case Expression::kIntLiteral_Kind: - case Expression::kNullLiteral_Kind: - case Expression::kSetting_Kind: - case Expression::kTypeReference_Kind: - return false; - } - SkASSERT(false); - return false; -} - -bool SectionAndParameterHelper::hasCoordOverrides(const Statement& s, const Variable& fp) { - switch (s.fKind) { - case Statement::kBlock_Kind: { - for (const auto& child : ((const Block&) s).fStatements) { - if (this->hasCoordOverrides(*child, fp)) { - return true; - } - } - return false; - } - case Statement::kVarDeclaration_Kind: { - const VarDeclaration& var = (const VarDeclaration&) s; - if (var.fValue) { - return hasCoordOverrides(*var.fValue, fp); - } - return false; - } - case Statement::kVarDeclarations_Kind: { - const VarDeclarations& decls = *((const VarDeclarationsStatement&) s).fDeclaration; - for (const auto& stmt : decls.fVars) { - if (this->hasCoordOverrides(*stmt, fp)) { - return true; - } - } - return false; - } - case Statement::kExpression_Kind: - return this->hasCoordOverrides(*((const ExpressionStatement&) s).fExpression, fp); - case Statement::kReturn_Kind: { - const ReturnStatement& r = (const ReturnStatement&) s; - if (r.fExpression) { - return this->hasCoordOverrides(*r.fExpression, fp); - } - return false; - } - case Statement::kIf_Kind: { - const IfStatement& i = (const IfStatement&) s; - return this->hasCoordOverrides(*i.fTest, fp) || - this->hasCoordOverrides(*i.fIfTrue, fp) || - (i.fIfFalse && this->hasCoordOverrides(*i.fIfFalse, fp)); - } - case Statement::kFor_Kind: { - const ForStatement& f = (const ForStatement&) s; - return (f.fInitializer ? this->hasCoordOverrides(*f.fInitializer, fp) : 0) || - (f.fTest ? this->hasCoordOverrides(*f.fTest, fp) : 0) || - (f.fNext ? this->hasCoordOverrides(*f.fNext, fp) : 0) || - this->hasCoordOverrides(*f.fStatement, fp); - } - case Statement::kWhile_Kind: { - const WhileStatement& w = (const WhileStatement&) s; - return this->hasCoordOverrides(*w.fTest, fp) || - this->hasCoordOverrides(*w.fStatement, fp); - } - case Statement::kDo_Kind: { - const DoStatement& d = (const DoStatement&) s; - return this->hasCoordOverrides(*d.fTest, fp) || - this->hasCoordOverrides(*d.fStatement, fp); - } - case Statement::kSwitch_Kind: { - const SwitchStatement& sw = (const SwitchStatement&) s; - for (const auto& c : sw.fCases) { - for (const auto& st : c->fStatements) { - if (this->hasCoordOverrides(*st, fp)) { - return true; - } - } - } - return this->hasCoordOverrides(*sw.fValue, fp); - } - case Statement::kBreak_Kind: - case Statement::kContinue_Kind: - case Statement::kDiscard_Kind: - case Statement::kNop_Kind: - return false; - } - SkASSERT(false); - return false; -} - -SampleMatrix SectionAndParameterHelper::getMatrix(const Variable& fp) { - SampleMatrix result; - for (const auto& pe : fProgram) { - result.merge(this->getMatrix(pe, fp)); - } - return result; -} - -SampleMatrix SectionAndParameterHelper::getMatrix(const ProgramElement& pe, const Variable& fp) { - if (pe.fKind == ProgramElement::kFunction_Kind) { - return this->getMatrix(*((const FunctionDefinition&) pe).fBody, fp); - } - return SampleMatrix(); -} - -SampleMatrix SectionAndParameterHelper::getMatrix(const Expression& e, const Variable& fp) { - switch (e.fKind) { - case Expression::kFunctionCall_Kind: { - const FunctionCall& fc = (const FunctionCall&) e; - const FunctionDeclaration& f = fc.fFunction; - if (f.fBuiltin && f.fName == "sample" && fc.fArguments.size() >= 2 && - fc.fArguments.back()->fType == *fProgram.fContext->fFloat3x3_Type && - fc.fArguments[0]->fKind == Expression::kVariableReference_Kind && - &((VariableReference&) *fc.fArguments[0]).fVariable == &fp) { - if (fc.fArguments.back()->isConstantOrUniform()) { - return SampleMatrix(SampleMatrix::Kind::kConstantOrUniform, nullptr, - fc.fArguments.back()->description()); - } else { - return SampleMatrix(SampleMatrix::Kind::kVariable); - } - } - SampleMatrix result; - for (const auto& e : fc.fArguments) { - result.merge(this->getMatrix(*e, fp)); - } - return result; - } - case Expression::kConstructor_Kind: { - SampleMatrix result; - const Constructor& c = (const Constructor&) e; - for (const auto& e : c.fArguments) { - result.merge(this->getMatrix(*e, fp)); - } - return result; - } - case Expression::kFieldAccess_Kind: { - return this->getMatrix(*((const FieldAccess&) e).fBase, fp); - } - case Expression::kSwizzle_Kind: - return this->getMatrix(*((const Swizzle&) e).fBase, fp); - case Expression::kBinary_Kind: { - const BinaryExpression& b = (const BinaryExpression&) e; - return this->getMatrix(*b.fLeft, fp).merge(this->getMatrix(*b.fRight, fp)); - } - case Expression::kIndex_Kind: { - const IndexExpression& idx = (const IndexExpression&) e; - return this->getMatrix(*idx.fBase, fp).merge(this->getMatrix(*idx.fIndex, fp)); - } - case Expression::kPrefix_Kind: - return this->getMatrix(*((const PrefixExpression&) e).fOperand, fp); - case Expression::kPostfix_Kind: - return this->getMatrix(*((const PostfixExpression&) e).fOperand, fp); - case Expression::kTernary_Kind: { - const TernaryExpression& t = (const TernaryExpression&) e; - return this->getMatrix(*t.fTest, fp).merge(this->getMatrix(*t.fIfTrue, fp)).merge( - this->getMatrix(*t.fIfFalse, fp)); - } - case Expression::kVariableReference_Kind: - return SampleMatrix(); - case Expression::kBoolLiteral_Kind: - case Expression::kDefined_Kind: - case Expression::kExternalFunctionCall_Kind: - case Expression::kExternalValue_Kind: - case Expression::kFloatLiteral_Kind: - case Expression::kFunctionReference_Kind: - case Expression::kIntLiteral_Kind: - case Expression::kNullLiteral_Kind: - case Expression::kSetting_Kind: - case Expression::kTypeReference_Kind: - return SampleMatrix(); - } - SkASSERT(false); - return SampleMatrix(); -} - -SampleMatrix SectionAndParameterHelper::getMatrix(const Expression* e, const Variable& fp) { - if (e) { - return this->getMatrix(*e, fp); - } - return SampleMatrix(); -} - -SampleMatrix SectionAndParameterHelper::getMatrix(const Statement& s, const Variable& fp) { - switch (s.fKind) { - case Statement::kBlock_Kind: { - SampleMatrix result; - for (const auto& child : ((const Block&) s).fStatements) { - result.merge(this->getMatrix(*child, fp)); - } - return result; - } - case Statement::kVarDeclaration_Kind: { - const VarDeclaration& var = (const VarDeclaration&) s; - if (var.fValue) { - return this->getMatrix(*var.fValue, fp); - } - return SampleMatrix(); - } - case Statement::kVarDeclarations_Kind: { - const VarDeclarations& decls = *((const VarDeclarationsStatement&) s).fDeclaration; - SampleMatrix result; - for (const auto& stmt : decls.fVars) { - result.merge(this->getMatrix(*stmt, fp)); - } - return result; - } - case Statement::kExpression_Kind: - return this->getMatrix(*((const ExpressionStatement&) s).fExpression, fp); - case Statement::kReturn_Kind: { - const ReturnStatement& r = (const ReturnStatement&) s; - if (r.fExpression) { - return this->getMatrix(*r.fExpression, fp); - } - return SampleMatrix(); - } - case Statement::kIf_Kind: { - const IfStatement& i = (const IfStatement&) s; - return this->getMatrix(*i.fTest, fp).merge(this->getMatrix(*i.fIfTrue, fp)).merge( - (i.fIfFalse ? this->getMatrix(*i.fIfFalse, fp) : SampleMatrix())); - } - case Statement::kFor_Kind: { - const ForStatement& f = (const ForStatement&) s; - return this->getMatrix(f.fInitializer.get(), fp).merge( - this->getMatrix(f.fTest.get(), fp).merge( - this->getMatrix(f.fNext.get(), fp).merge( - this->getMatrix(*f.fStatement, fp)))); - } - case Statement::kWhile_Kind: { - const WhileStatement& w = (const WhileStatement&) s; - return this->getMatrix(*w.fTest, fp).merge(this->getMatrix(*w.fStatement, fp)); - } - case Statement::kDo_Kind: { - const DoStatement& d = (const DoStatement&) s; - return this->getMatrix(*d.fTest, fp).merge(this->getMatrix(*d.fStatement, fp)); - } - case Statement::kSwitch_Kind: { - SampleMatrix result; - const SwitchStatement& sw = (const SwitchStatement&) s; - for (const auto& c : sw.fCases) { - for (const auto& st : c->fStatements) { - result.merge(this->getMatrix(*st, fp)); - } - } - return result.merge(this->getMatrix(*sw.fValue, fp)); - } - case Statement::kBreak_Kind: - case Statement::kContinue_Kind: - case Statement::kDiscard_Kind: - case Statement::kNop_Kind: - return SampleMatrix(); - } - SkASSERT(false); - return SampleMatrix(); -} - -SampleMatrix SectionAndParameterHelper::getMatrix(const Statement* s, const Variable& fp) { - if (s) { - return this->getMatrix(*s, fp); - } - return SampleMatrix(); -} - - } diff --git a/src/sksl/SkSLSectionAndParameterHelper.h b/src/sksl/SkSLSectionAndParameterHelper.h index 4bc7a471932ce..4baaa2cdc725e 100644 --- a/src/sksl/SkSLSectionAndParameterHelper.h +++ b/src/sksl/SkSLSectionAndParameterHelper.h @@ -9,7 +9,6 @@ #define SKSL_SECTIONANDPARAMETERHELPER #include "src/sksl/SkSLErrorReporter.h" -#include "src/sksl/SkSLSampleMatrix.h" #include "src/sksl/ir/SkSLProgram.h" #include "src/sksl/ir/SkSLSection.h" #include "src/sksl/ir/SkSLVarDeclarations.h" @@ -23,7 +22,6 @@ namespace SkSL { #define CONSTRUCTOR_SECTION "constructor" #define CONSTRUCTOR_CODE_SECTION "constructorCode" #define CONSTRUCTOR_PARAMS_SECTION "constructorParams" -#define COORD_TRANSFORM_SECTION "coordTransform" #define CPP_SECTION "cpp" #define CPP_END_SECTION "cppEnd" #define HEADER_SECTION "header" @@ -63,10 +61,6 @@ class SectionAndParameterHelper { return fParameters; } - bool hasCoordOverrides(const Variable& fp); - - SampleMatrix getMatrix(const Variable& fp); - static bool IsParameter(const Variable& var) { return (var.fModifiers.fFlags & Modifiers::kIn_Flag) && -1 == var.fModifiers.fLayout.fBuiltin; @@ -78,7 +72,6 @@ class SectionAndParameterHelper { !strcmp(name, CONSTRUCTOR_SECTION) || !strcmp(name, CONSTRUCTOR_CODE_SECTION) || !strcmp(name, CONSTRUCTOR_PARAMS_SECTION) || - !strcmp(name, COORD_TRANSFORM_SECTION) || !strcmp(name, CPP_SECTION) || !strcmp(name, CPP_END_SECTION) || !strcmp(name, EMIT_CODE_SECTION) || @@ -94,8 +87,7 @@ class SectionAndParameterHelper { } static bool SectionAcceptsArgument(const char* name) { - return !strcmp(name, COORD_TRANSFORM_SECTION) || - !strcmp(name, SAMPLER_PARAMS_SECTION) || + return !strcmp(name, SAMPLER_PARAMS_SECTION) || !strcmp(name, SET_DATA_SECTION) || !strcmp(name, TEST_CODE_SECTION); } @@ -107,27 +99,10 @@ class SectionAndParameterHelper { } static bool SectionPermitsDuplicates(const char* name) { - return !strcmp(name, COORD_TRANSFORM_SECTION) || - !strcmp(name, SAMPLER_PARAMS_SECTION); + return !strcmp(name, SAMPLER_PARAMS_SECTION); } private: - bool hasCoordOverrides(const Statement& s, const Variable& fp); - - bool hasCoordOverrides(const Expression& e, const Variable& fp); - - bool hasCoordOverrides(const ProgramElement& p, const Variable& fp); - - SampleMatrix getMatrix(const Statement& s, const Variable& fp); - - SampleMatrix getMatrix(const Expression& e, const Variable& fp); - - SampleMatrix getMatrix(const Statement* s, const Variable& fp); - - SampleMatrix getMatrix(const Expression* e, const Variable& fp); - - SampleMatrix getMatrix(const ProgramElement& p, const Variable& fp); - const Program& fProgram; std::vector fParameters; std::unordered_map> fSections; diff --git a/src/sksl/SkSLString.cpp b/src/sksl/SkSLString.cpp index 88eb1c7d3bcff..fa337f12708dc 100644 --- a/src/sksl/SkSLString.cpp +++ b/src/sksl/SkSLString.cpp @@ -44,21 +44,16 @@ int String::findLastOf(const char c) const { } void String::vappendf(const char* fmt, va_list args) { -#ifdef SKSL_BUILD_FOR_WIN - #define VSNPRINTF _vsnprintf -#else - #define VSNPRINTF vsnprintf -#endif #define BUFFER_SIZE 256 char buffer[BUFFER_SIZE]; va_list reuse; va_copy(reuse, args); - size_t size = VSNPRINTF(buffer, BUFFER_SIZE, fmt, args); + size_t size = vsnprintf(buffer, BUFFER_SIZE, fmt, args); if (BUFFER_SIZE >= size) { this->append(buffer, size); } else { auto newBuffer = std::unique_ptr(new char[size + 1]); - VSNPRINTF(newBuffer.get(), size + 1, fmt, reuse); + vsnprintf(newBuffer.get(), size + 1, fmt, reuse); this->append(newBuffer.get(), size); } va_end(reuse); diff --git a/src/sksl/SkSLString.h b/src/sksl/SkSLString.h index c60a74877d802..99f3dce57a827 100644 --- a/src/sksl/SkSLString.h +++ b/src/sksl/SkSLString.h @@ -103,10 +103,6 @@ class SK_API String : public std::string { friend bool operator==(const char* s1, const String& s2); friend bool operator!=(const char* s1, const String& s2); -#ifndef SKSL_STANDALONE - operator SkString() const { return SkString(c_str()); } -#endif - private: typedef std::string INHERITED; }; diff --git a/src/sksl/ir/SkSLBoolLiteral.h b/src/sksl/ir/SkSLBoolLiteral.h index 85dd8c5d0b7e2..056aae21285bd 100644 --- a/src/sksl/ir/SkSLBoolLiteral.h +++ b/src/sksl/ir/SkSLBoolLiteral.h @@ -29,7 +29,7 @@ struct BoolLiteral : public Expression { return false; } - bool isConstant() const override { + bool isCompileTimeConstant() const override { return true; } diff --git a/src/sksl/ir/SkSLConstructor.h b/src/sksl/ir/SkSLConstructor.h index cdd6f84a94b55..6f23276e8ab23 100644 --- a/src/sksl/ir/SkSLConstructor.h +++ b/src/sksl/ir/SkSLConstructor.h @@ -87,9 +87,9 @@ struct Constructor : public Expression { return result; } - bool isConstant() const override { + bool isCompileTimeConstant() const override { for (size_t i = 0; i < fArguments.size(); i++) { - if (!fArguments[i]->isConstant()) { + if (!fArguments[i]->isCompileTimeConstant()) { return false; } } @@ -192,7 +192,7 @@ struct Constructor : public Expression { } SKSL_FLOAT getMatComponent(int col, int row) const override { - SkASSERT(this->isConstant()); + SkASSERT(this->isCompileTimeConstant()); SkASSERT(fType.kind() == Type::kMatrix_Kind); SkASSERT(col < fType.columns() && row < fType.rows()); if (fArguments.size() == 1) { diff --git a/src/sksl/ir/SkSLExpression.h b/src/sksl/ir/SkSLExpression.h index c33c1a004144a..254d510ef2760 100644 --- a/src/sksl/ir/SkSLExpression.h +++ b/src/sksl/ir/SkSLExpression.h @@ -61,7 +61,7 @@ struct Expression : public IRNode { * Returns true if this expression is constant. compareConstant must be implemented for all * constants! */ - virtual bool isConstant() const { + virtual bool isCompileTimeConstant() const { return false; } @@ -95,8 +95,8 @@ struct Expression : public IRNode { * same result with no side effects. */ virtual bool isConstantOrUniform() const { - SkASSERT(!this->isConstant() || !this->hasSideEffects()); - return this->isConstant(); + SkASSERT(!this->isCompileTimeConstant() || !this->hasSideEffects()); + return this->isCompileTimeConstant(); } virtual bool hasProperty(Property property) const = 0; diff --git a/src/sksl/ir/SkSLFloatLiteral.h b/src/sksl/ir/SkSLFloatLiteral.h index 9d8177199460b..4ace0a0c35a2f 100644 --- a/src/sksl/ir/SkSLFloatLiteral.h +++ b/src/sksl/ir/SkSLFloatLiteral.h @@ -33,7 +33,7 @@ struct FloatLiteral : public Expression { return false; } - bool isConstant() const override { + bool isCompileTimeConstant() const override { return true; } diff --git a/src/sksl/ir/SkSLIntLiteral.h b/src/sksl/ir/SkSLIntLiteral.h index 4977fbf0b8a77..464193951d84c 100644 --- a/src/sksl/ir/SkSLIntLiteral.h +++ b/src/sksl/ir/SkSLIntLiteral.h @@ -35,7 +35,7 @@ struct IntLiteral : public Expression { return false; } - bool isConstant() const override { + bool isCompileTimeConstant() const override { return true; } diff --git a/src/sksl/ir/SkSLNullLiteral.h b/src/sksl/ir/SkSLNullLiteral.h index 0d04b77e227d4..8bf7960fa536a 100644 --- a/src/sksl/ir/SkSLNullLiteral.h +++ b/src/sksl/ir/SkSLNullLiteral.h @@ -31,7 +31,7 @@ struct NullLiteral : public Expression { return false; } - bool isConstant() const override { + bool isCompileTimeConstant() const override { return true; } diff --git a/src/sksl/ir/SkSLPrefixExpression.h b/src/sksl/ir/SkSLPrefixExpression.h index ab0363ec66129..08f8bd47eebf4 100644 --- a/src/sksl/ir/SkSLPrefixExpression.h +++ b/src/sksl/ir/SkSLPrefixExpression.h @@ -25,8 +25,8 @@ struct PrefixExpression : public Expression { , fOperand(std::move(operand)) , fOperator(op) {} - bool isConstant() const override { - return fOperator == Token::Kind::TK_MINUS && fOperand->isConstant(); + bool isCompileTimeConstant() const override { + return fOperator == Token::Kind::TK_MINUS && fOperand->isCompileTimeConstant(); } bool hasProperty(Property property) const override { diff --git a/src/sksl/ir/SkSLProgram.h b/src/sksl/ir/SkSLProgram.h index 6488fc44152e4..cf16d1fd460da 100644 --- a/src/sksl/ir/SkSLProgram.h +++ b/src/sksl/ir/SkSLProgram.h @@ -95,6 +95,9 @@ struct Program { // if false, sk_FragCoord is exactly the same as gl_FragCoord. If true, the y coordinate // must be flipped. bool fFlipY = false; + // if false, sk_FragCoord is exactly the same as gl_FragCoord. If true, the w coordinate + // must be inversed. + bool fInverseW = false; // If true the destination fragment color is read sk_FragColor. It must be declared inout. bool fFragColorIsInOut = false; // if true, Setting objects (e.g. sk_Caps.fbFetchSupport) should be replaced with their diff --git a/src/sksl/ir/SkSLSetting.h b/src/sksl/ir/SkSLSetting.h index 9a69802b5758d..50c2943fc9f42 100644 --- a/src/sksl/ir/SkSLSetting.h +++ b/src/sksl/ir/SkSLSetting.h @@ -22,7 +22,7 @@ struct Setting : public Expression { : INHERITED(offset, kSetting_Kind, value->fType) , fName(std::move(name)) , fValue(std::move(value)) { - SkASSERT(fValue->isConstant()); + SkASSERT(fValue->isCompileTimeConstant()); } std::unique_ptr constantPropagate(const IRGenerator& irGenerator, @@ -44,7 +44,7 @@ struct Setting : public Expression { return false; } - bool isConstant() const override { + bool isCompileTimeConstant() const override { return true; } diff --git a/src/sksl/ir/SkSLSwizzle.h b/src/sksl/ir/SkSLSwizzle.h index 040af8491aa88..4e12bee1669d5 100644 --- a/src/sksl/ir/SkSLSwizzle.h +++ b/src/sksl/ir/SkSLSwizzle.h @@ -106,7 +106,7 @@ struct Swizzle : public Expression { std::unique_ptr constantPropagate(const IRGenerator& irGenerator, const DefinitionMap& definitions) override { - if (fBase->fKind == Expression::kConstructor_Kind && fBase->isConstant()) { + if (fBase->fKind == Expression::kConstructor_Kind && fBase->isCompileTimeConstant()) { // we're swizzling a constant vector, e.g. float4(1).x. Simplify it. SkASSERT(fBase->fKind == Expression::kConstructor_Kind); if (fType.isInteger()) { diff --git a/src/sksl/ir/SkSLVariableReference.cpp b/src/sksl/ir/SkSLVariableReference.cpp index 2de8410ee51f7..a888f956b5368 100644 --- a/src/sksl/ir/SkSLVariableReference.cpp +++ b/src/sksl/ir/SkSLVariableReference.cpp @@ -53,7 +53,7 @@ void VariableReference::setRefKind(RefKind refKind) { std::unique_ptr VariableReference::copy_constant(const IRGenerator& irGenerator, const Expression* expr) { - SkASSERT(expr->isConstant()); + SkASSERT(expr->isCompileTimeConstant()); switch (expr->fKind) { case Expression::kIntLiteral_Kind: return std::unique_ptr(new IntLiteral(irGenerator.fContext, @@ -100,12 +100,12 @@ std::unique_ptr VariableReference::constantPropagate(const IRGenerat return irGenerator.getArg(fOffset, fVariable.fName); } if ((fVariable.fModifiers.fFlags & Modifiers::kConst_Flag) && fVariable.fInitialValue && - fVariable.fInitialValue->isConstant() && fType.kind() != Type::kArray_Kind) { + fVariable.fInitialValue->isCompileTimeConstant() && fType.kind() != Type::kArray_Kind) { return copy_constant(irGenerator, fVariable.fInitialValue); } auto exprIter = definitions.find(&fVariable); if (exprIter != definitions.end() && exprIter->second && - (*exprIter->second)->isConstant()) { + (*exprIter->second)->isCompileTimeConstant()) { return copy_constant(irGenerator, exprIter->second->get()); } return nullptr; diff --git a/src/sksl/ir/SkSLVariableReference.h b/src/sksl/ir/SkSLVariableReference.h index c6751441ddba5..2d0fadec4313f 100644 --- a/src/sksl/ir/SkSLVariableReference.h +++ b/src/sksl/ir/SkSLVariableReference.h @@ -54,10 +54,6 @@ struct VariableReference : public Expression { } } - bool isConstant() const override { - return 0 != (fVariable.fModifiers.fFlags & Modifiers::kConst_Flag); - } - bool isConstantOrUniform() const override { return (fVariable.fModifiers.fFlags & Modifiers::kUniform_Flag) != 0; } diff --git a/src/sksl/lex/RegexParser.cpp b/src/sksl/lex/RegexParser.cpp index 9b5445e1a3d37..be7d09a10632a 100644 --- a/src/sksl/lex/RegexParser.cpp +++ b/src/sksl/lex/RegexParser.cpp @@ -63,8 +63,8 @@ void RegexParser::sequence() { this->quantifiedTerm(); for (;;) { switch (this->peek()) { - case END: // fall through - case '|': // fall through + case END: [[fallthrough]]; + case '|': [[fallthrough]]; case ')': return; default: this->sequence(); diff --git a/src/sksl/sksl_blend.inc b/src/sksl/sksl_blend.inc index ab6dcb8922ddf..4eaa73df6c2dc 100644 --- a/src/sksl/sksl_blend.inc +++ b/src/sksl/sksl_blend.inc @@ -303,4 +303,6 @@ half4 blend(SkBlendMode mode, half4 src, half4 dst) { // The max() guards against division by zero when the incoming color is transparent black half4 unpremul(half4 color) { return half4(color.rgb / max(color.a, 0.0001), color.a); } float4 unpremul_float(float4 color) { return float4(color.rgb / max(color.a, 0.0001), color.a); } + +float2 proj(float3 p) { return p.xy / p.z; } )SKSL" diff --git a/src/sksl/sksl_enums.inc b/src/sksl/sksl_enums.inc index eb60b3b0c5b9d..b29daf93da52c 100644 --- a/src/sksl/sksl_enums.inc +++ b/src/sksl/sksl_enums.inc @@ -13,17 +13,15 @@ R"(/* /** * We have coverage effects that clip rendering to the edge of some geometric primitive. * This enum specifies how that clipping is performed. Not all factories that take a - * GrProcessorEdgeType will succeed with all values and it is up to the caller to check for - * a NULL return. + * GrProcessorEdgeType will succeed with all values and it is up to the caller to verify success. */ enum class GrClipEdgeType { kFillBW, kFillAA, kInverseFillBW, kInverseFillAA, - kHairlineAA, - kLast = kHairlineAA + kLast = kInverseFillAA }; enum class PMConversion { diff --git a/src/sksl/sksl_fp.inc b/src/sksl/sksl_fp.inc index 81362e6f65987..1e6449ec840c2 100644 --- a/src/sksl/sksl_fp.inc +++ b/src/sksl/sksl_fp.inc @@ -17,7 +17,6 @@ layout(builtin=9999) half4 gl_SecondaryFragColorEXT; layout(builtin=10003) half4 sk_InColor; layout(builtin=10004) out half4 sk_OutColor; -layout(builtin=10005) float2[] sk_TransformedCoords2D; layout(builtin=10006) sampler2D[] sk_TextureSamplers; layout(builtin=10011) half sk_Width; layout(builtin=10012) half sk_Height; diff --git a/src/sksl/sksl_interp.inc b/src/sksl/sksl_interp.inc index 894df0883df06..c6644ca39d928 100644 --- a/src/sksl/sksl_interp.inc +++ b/src/sksl/sksl_interp.inc @@ -16,6 +16,8 @@ half3x3 inverse(half3x3 m); half4x4 inverse(half4x4 m); float length($genType x); half length($genHType x); +$genType normalize($genType x); +$genHType normalize($genHType x); $genType pow($genType x, $genType y); $genHType pow($genHType x, $genHType y); $genType sin($genType x); @@ -101,10 +103,6 @@ float distance(float2 a, float2 b) { return length(a - b); } float distance(float3 a, float3 b) { return length(a - b); } float distance(float4 a, float4 b) { return length(a - b); } -float2 normalize(float2 v) { return v / length(v); } -float3 normalize(float3 v) { return v / length(v); } -float4 normalize(float4 v) { return v / length(v); } - float3 cross(float3 a, float3 b) { return float3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, diff --git a/src/sksl/sksl_pipeline.inc b/src/sksl/sksl_pipeline.inc index 2f319513c0bde..8c9d926baa844 100644 --- a/src/sksl/sksl_pipeline.inc +++ b/src/sksl/sksl_pipeline.inc @@ -1,5 +1,6 @@ STRINGIFY( layout(builtin=15) float4 sk_FragCoord; + half4 sample(fragmentProcessor fp); half4 sample(fragmentProcessor fp, float2 coords); half4 sample(fragmentProcessor fp, float3x3 transform); ) diff --git a/src/svg/SkSVGDevice.cpp b/src/svg/SkSVGDevice.cpp index a6cb77d1911f1..3fbe4122ea5ce 100644 --- a/src/svg/SkSVGDevice.cpp +++ b/src/svg/SkSVGDevice.cpp @@ -760,6 +760,9 @@ void SkSVGDevice::syncClipStack(const SkClipStack& cs) { path.addAttribute("clip-rule", "evenodd"); } } break; + case SkClipStack::Element::DeviceSpaceType::kShader: + // TODO: handle shader clipping, perhaps rasterize and apply as a mask image? + break; } return cid; diff --git a/src/utils/SkClipStackUtils.cpp b/src/utils/SkClipStackUtils.cpp index 00b933630e4f7..fade198d6d95c 100644 --- a/src/utils/SkClipStackUtils.cpp +++ b/src/utils/SkClipStackUtils.cpp @@ -14,6 +14,11 @@ void SkClipStack_AsPath(const SkClipStack& cs, SkPath* path) { SkClipStack::Iter iter(cs, SkClipStack::Iter::kBottom_IterStart); while (const SkClipStack::Element* element = iter.next()) { + if (element->getDeviceSpaceType() == SkClipStack::Element::DeviceSpaceType::kShader) { + // TODO: Handle DeviceSpaceType::kShader somehow; it can't be turned into an SkPath + // but perhaps the pdf backend can apply shaders in another way. + continue; + } SkPath operand; if (element->getDeviceSpaceType() != SkClipStack::Element::DeviceSpaceType::kEmpty) { element->asDeviceSpacePath(&operand); diff --git a/src/utils/SkJSON.cpp b/src/utils/SkJSON.cpp index 181ca752e5abc..c53fc1bfc0ad1 100644 --- a/src/utils/SkJSON.cpp +++ b/src/utils/SkJSON.cpp @@ -28,23 +28,22 @@ static constexpr size_t kRecAlign = alignof(Value); void Value::init_tagged(Tag t) { memset(fData8, 0, sizeof(fData8)); - fData8[Value::kTagOffset] = SkTo(t); + fData8[0] = SkTo(t); SkASSERT(this->getTag() == t); } -// Pointer values store a type (in the upper kTagBits bits) and a pointer. +// Pointer values store a type (in the lower kTagBits bits) and a pointer. void Value::init_tagged_pointer(Tag t, void* p) { - *this->cast() = reinterpret_cast(p); - if (sizeof(Value) == sizeof(uintptr_t)) { - // For 64-bit, we rely on the pointer upper bits being unused/zero. - SkASSERT(!(fData8[kTagOffset] & kTagMask)); - fData8[kTagOffset] |= SkTo(t); + *this->cast() = reinterpret_cast(p); + // For 64-bit, we rely on the pointer lower bits being zero. + SkASSERT(!(fData8[0] & kTagMask)); + fData8[0] |= SkTo(t); } else { - // For 32-bit, we need to zero-initialize the upper 32 bits + // For 32-bit, we store the pointer in the upper word SkASSERT(sizeof(Value) == sizeof(uintptr_t) * 2); - this->cast()[kTagOffset >> 2] = 0; - fData8[kTagOffset] = SkTo(t); + this->init_tagged(t); + *this->cast() = reinterpret_cast(p); } SkASSERT(this->getTag() == t); @@ -126,11 +125,8 @@ class FastString final : public Value { return; } - static_assert(static_cast(Tag::kShortString) == 0, "please don't break this"); - static_assert(sizeof(Value) == 8, ""); - - // TODO: LIKELY - if (src && src + 7 <= eos) { + // initFastShortString is faster (doh), but requires access to 6 chars past src. + if (src && src + 6 <= eos) { this->initFastShortString(src, size); } else { this->initShortString(src, size); @@ -140,7 +136,8 @@ class FastString final : public Value { } private: - static constexpr size_t kMaxInlineStringSize = sizeof(Value) - 1; + // first byte reserved for tagging, \0 terminator => 6 usable chars + static constexpr size_t kMaxInlineStringSize = sizeof(Value) - 2; void initLongString(const char* src, size_t size, SkArenaAlloc& alloc) { SkASSERT(size > kMaxInlineStringSize); @@ -162,12 +159,23 @@ class FastString final : public Value { void initFastShortString(const char* src, size_t size) { SkASSERT(size <= kMaxInlineStringSize); - // Load 8 chars and mask out the tag and \0 terminator. uint64_t* s64 = this->cast(); - memcpy(s64, src, 8); + + // Load 8 chars and mask out the tag and \0 terminator. + // Note: we picked kShortString == 0 to avoid setting explicitly below. + static_assert(SkToU8(Tag::kShortString) == 0, "please don't break this"); + + // Since the first byte is occupied by the tag, we want the string chars [0..5] to land + // on bytes [1..6] => the fastest way is to read8 @(src - 1) (always safe, because the + // string requires a " prefix at the very least). + memcpy(s64, src - 1, 8); #if defined(SK_CPU_LENDIAN) - *s64 &= 0x00ffffffffffffffULL >> ((kMaxInlineStringSize - size) * 8); + // The mask for a max-length string (6), with a leading tag and trailing \0 is + // 0x00ffffffffffff00. Accounting for the final left-shift, this becomes + // 0x0000ffffffffffff. + *s64 &= (0x0000ffffffffffffULL >> ((kMaxInlineStringSize - size) * 8)) // trailing \0s + << 8; // tag byte #else static_assert(false, "Big-endian builds are not supported at this time."); #endif diff --git a/src/utils/SkJSON.h b/src/utils/SkJSON.h index 931b30f0a4ed0..d3f0b1d48f0fd 100644 --- a/src/utils/SkJSON.h +++ b/src/utils/SkJSON.h @@ -117,58 +117,69 @@ class alignas(8) Value { char[8] (short string storage) external payload (tagged) pointer - -- highest 3 bits reserved for type storage + -- lowest 3 bits reserved for tag storage */ enum class Tag : uint8_t { - // We picked kShortString == 0 so that tag 0x00 and stored max_size-size (7-7=0) - // conveniently overlap the '\0' terminator, allowing us to store a 7 character - // C string inline. + // n.b.: we picked kShortString == 0 on purpose, + // to enable certain short-string optimizations. kShortString = 0b00000000, // inline payload - kNull = 0b00100000, // no payload - kBool = 0b01000000, // inline payload - kInt = 0b01100000, // inline payload - kFloat = 0b10000000, // inline payload - kString = 0b10100000, // ptr to external storage - kArray = 0b11000000, // ptr to external storage - kObject = 0b11100000, // ptr to external storage + kNull = 0b00000001, // no payload + kBool = 0b00000010, // inline payload + kInt = 0b00000011, // inline payload + kFloat = 0b00000100, // inline payload + kString = 0b00000101, // ptr to external storage + kArray = 0b00000110, // ptr to external storage + kObject = 0b00000111, // ptr to external storage }; - static constexpr uint8_t kTagMask = 0b11100000; + static constexpr uint8_t kTagMask = 0b00000111; void init_tagged(Tag); void init_tagged_pointer(Tag, void*); Tag getTag() const { - return static_cast(fData8[kTagOffset] & kTagMask); + return static_cast(fData8[0] & kTagMask); } - // Access the record data as T. + // Access the record payload as T. // - // This is also used to access the payload for inline records. Since the record type lives in - // the high bits, sizeof(T) must be less than sizeof(Value) when accessing inline payloads. + // Since the tag is stored in the lower bits, we skip the first word whenever feasible. // - // E.g. + // E.g. (U == unused) // // uint8_t // ----------------------------------------------------------------------- - // | val8 | val8 | val8 | val8 | val8 | val8 | val8 | TYPE| + // |TAG| U | val8 | U | U | U | U | U | U | + // ----------------------------------------------------------------------- + // + // uint16_t + // ----------------------------------------------------------------------- + // |TAG| U | val16 | U | U | // ----------------------------------------------------------------------- // // uint32_t // ----------------------------------------------------------------------- - // | val32 | unused | TYPE| + // |TAG| U | val32 | + // ----------------------------------------------------------------------- + // + // T* (32b) + // ----------------------------------------------------------------------- + // |TAG| U | T* (32bits) | // ----------------------------------------------------------------------- // // T* (64b) // ----------------------------------------------------------------------- - // | T* (kTypeShift bits) |TYPE| + // |TAG| T* (61bits) | // ----------------------------------------------------------------------- // template const T* cast() const { static_assert(sizeof (T) <= sizeof(Value), ""); static_assert(alignof(T) <= alignof(Value), ""); - return reinterpret_cast(this); + + return (sizeof(T) > sizeof(*this) / 2) + ? reinterpret_cast(this) + 0 // need all the bits + : reinterpret_cast(this) + 1; // skip the first word (where the tag lives) } template @@ -183,8 +194,8 @@ class alignas(8) Value { return (sizeof(uintptr_t) < sizeof(Value)) // For 32-bit, pointers are stored unmodified. ? *this->cast() - // For 64-bit, we use the high bits of the pointer as tag storage. - : reinterpret_cast(*this->cast() & kTagPointerMask); + // For 64-bit, we use the lower bits of the pointer as tag storage. + : reinterpret_cast(*this->cast() & ~static_cast(kTagMask)); } private: @@ -192,12 +203,7 @@ class alignas(8) Value { uint8_t fData8[kValueSize]; -#if defined(SK_CPU_LENDIAN) - static constexpr size_t kTagOffset = kValueSize - 1; - - static constexpr uintptr_t kTagPointerMask = - ~(static_cast(kTagMask) << ((sizeof(uintptr_t) - 1) * 8)); -#else +#if !defined(SK_CPU_LENDIAN) // The current value layout assumes LE and will take some tweaking for BE. static_assert(false, "Big-endian builds are not supported at this time."); #endif @@ -319,11 +325,11 @@ class ObjectValue final : public VectorValue { public: ObjectValue(const Member* src, size_t size, SkArenaAlloc& alloc); - const Value& operator[](const char*) const; + const Value& operator[](const char*) const; -private: - // Not particularly interesting - hiding for disambiguation. - const Member& operator[](size_t i) const = delete; + const Member& operator[](size_t i) const { + return this->VectorValue::operator[](i); + } }; class DOM final : public SkNoncopyable { diff --git a/src/utils/SkParseColor.cpp b/src/utils/SkParseColor.cpp index ba7c51048f125..9846a8ff5ee09 100644 --- a/src/utils/SkParseColor.cpp +++ b/src/utils/SkParseColor.cpp @@ -8,211 +8,172 @@ #include "include/utils/SkParse.h" -static const unsigned int gColorNames[] = { -0x85891945, 0x32a50000, 0x00f0f8ff, // aliceblue -0x85d44c6b, 0x16e84d0a, 0x00faebd7, // antiquewhite -0x86350800, 0x0000ffff, // aqua -0x86350b43, 0x492e2800, 0x007fffd4, // aquamarine -0x87559140, 0x00f0ffff, // azure -0x88a93940, 0x00f5f5dc, // beige -0x89338d4a, 0x00ffe4c4, // bisque -0x89811ac0, 0x00000000, // black -0x898170d1, 0x1481635f, 0x38800000, 0x00ffebcd, // blanchedalmond -0x89952800, 0x000000ff, // blue -0x89952d93, 0x3d85a000, 0x008a2be2, // blueviolet -0x8a4fbb80, 0x00a52a2a, // brown -0x8ab2666f, 0x3de40000, 0x00deb887, // burlywood -0x8c242d05, 0x32a50000, 0x005f9ea0, // cadetblue -0x8d019525, 0x16b32800, 0x007fff00, // chartreuse -0x8d0f1bd9, 0x06850000, 0x00d2691e, // chocolate -0x8df20b00, 0x00ff7f50, // coral -0x8df27199, 0x3ee59099, 0x54a00000, 0x006495ed, // cornflowerblue -0x8df274d3, 0x31600000, 0x00fff8dc, // cornsilk -0x8e496cdf, 0x38000000, 0x00dc143c, // crimson -0x8f217000, 0x0000ffff, // cyan -0x90325899, 0x54a00000, 0x0000008b, // darkblue -0x903258f3, 0x05c00000, 0x00008b8b, // darkcyan -0x903259df, 0x3085749f, 0x10000000, 0x00b8860b, // darkgoldenrod -0x903259e5, 0x07200000, 0x00a9a9a9, // darkgray -0x903259e5, 0x14ae0000, 0x00006400, // darkgreen -0x90325ad1, 0x05690000, 0x00bdb76b, // darkkhaki -0x90325b43, 0x1caea040, 0x008b008b, // darkmagenta -0x90325bd9, 0x26c53c8b, 0x15c00000, 0x00556b2f, // darkolivegreen -0x90325be5, 0x05c72800, 0x00ff8c00, // darkorange -0x90325be5, 0x0d092000, 0x009932cc, // darkorchid -0x90325c8b, 0x10000000, 0x008b0000, // darkred -0x90325cc3, 0x31af7000, 0x00e9967a, // darksalmon -0x90325ccb, 0x04f2295c, 0x008fbc8f, // darkseagreen -0x90325cd9, 0x0685132b, 0x14000000, 0x00483d8b, // darkslateblue -0x90325cd9, 0x06853c83, 0x64000000, 0x002f4f4f, // darkslategray -0x90325d2b, 0x4a357a67, 0x14000000, 0x0000ced1, // darkturquoise -0x90325d93, 0x3d85a000, 0x009400d3, // darkviolet -0x90a58413, 0x39600000, 0x00ff1493, // deeppink -0x90a584d7, 0x644ca940, 0x0000bfff, // deepskyblue -0x912d3c83, 0x64000000, 0x00696969, // dimgray -0x91e43965, 0x09952800, 0x001e90ff, // dodgerblue -0x993228a5, 0x246b0000, 0x00b22222, // firebrick -0x998f9059, 0x5d09a140, 0x00fffaf0, // floralwhite -0x99f22ce9, 0x1e452b80, 0x00228b22, // forestgreen -0x9aa344d3, 0x04000000, 0x00ff00ff, // fuchsia -0x9c2974c5, 0x3e4f0000, 0x00dcdcdc, // gainsboro -0x9d0f9d2f, 0x21342800, 0x00f8f8ff, // ghostwhite -0x9dec2000, 0x00ffd700, // gold -0x9dec215d, 0x49e40000, 0x00daa520, // goldenrod -0x9e41c800, 0x00808080, // gray -0x9e452b80, 0x00008000, // green -0x9e452bb3, 0x158c7dc0, 0x00adff2f, // greenyellow -0xa1ee2e49, 0x16e00000, 0x00f0fff0, // honeydew -0xa1f4825d, 0x2c000000, 0x00ff69b4, // hotpink -0xa5c4485d, 0x48a40000, 0x00cd5c5c, // indianred -0xa5c449de, 0x004b0082, // indigo -0xa6cf9640, 0x00fffff0, // ivory -0xad015a40, 0x00f0e68c, // khaki -0xb0362b89, 0x16400000, 0x00e6e6fa, // lavender -0xb0362b89, 0x16426567, 0x20000000, 0x00fff0f5, // lavenderblush -0xb03771e5, 0x14ae0000, 0x007cfc00, // lawngreen -0xb0ad7b87, 0x212633dc, 0x00fffacd, // lemonchiffon -0xb1274505, 0x32a50000, 0x00add8e6, // lightblue -0xb1274507, 0x3e416000, 0x00f08080, // lightcoral -0xb1274507, 0x642e0000, 0x00e0ffff, // lightcyan -0xb127450f, 0x3d842ba5, 0x3c992b19, 0x3ee00000, 0x00fafad2, // lightgoldenrodyellow -0xb127450f, 0x48a57000, 0x0090ee90, // lightgreen -0xb127450f, 0x48b90000, 0x00d3d3d3, // lightgrey -0xb1274521, 0x25cb0000, 0x00ffb6c1, // lightpink -0xb1274527, 0x058d7b80, 0x00ffa07a, // lightsalmon -0xb1274527, 0x1427914b, 0x38000000, 0x0020b2aa, // lightseagreen -0xb1274527, 0x2f22654a, 0x0087cefa, // lightskyblue -0xb1274527, 0x303429e5, 0x07200000, 0x00778899, // lightslategray -0xb1274527, 0x50a56099, 0x54a00000, 0x00b0c4de, // lightsteelblue -0xb1274533, 0x158c7dc0, 0x00ffffe0, // lightyellow -0xb12d2800, 0x0000ff00, // lime -0xb12d29e5, 0x14ae0000, 0x0032cd32, // limegreen -0xb12e2b80, 0x00faf0e6, // linen -0xb4272ba9, 0x04000000, 0x00ff00ff, // magenta -0xb4327bdc, 0x00800000, // maroon -0xb4a44d5b, 0x06350b43, 0x492e2800, 0x0066cdaa, // mediumaquamarine -0xb4a44d5b, 0x09952800, 0x000000cd, // mediumblue -0xb4a44d5b, 0x3e434248, 0x00ba55d3, // mediumorchid -0xb4a44d5b, 0x42b2830a, 0x009370db, // mediumpurple -0xb4a44d5b, 0x4ca13c8b, 0x15c00000, 0x003cb371, // mediumseagreen -0xb4a44d5b, 0x4d81a145, 0x32a50000, 0x007b68ee, // mediumslateblue -0xb4a44d5b, 0x4e124b8f, 0x1e452b80, 0x0000fa9a, // mediumspringgreen -0xb4a44d5b, 0x52b28d5f, 0x26650000, 0x0048d1cc, // mediumturquoise -0xb4a44d5b, 0x592f6169, 0x48a40000, 0x00c71585, // mediumvioletred -0xb524724f, 0x2282654a, 0x00191970, // midnightblue -0xb52ea0e5, 0x142d0000, 0x00f5fffa, // mintcream -0xb533a665, 0x3e650000, 0x00ffe4e1, // mistyrose -0xb5e31867, 0x25c00000, 0x00ffe4b5, // moccasin -0xb8360a9f, 0x5d09a140, 0x00ffdead, // navajowhite -0xb836c800, 0x00000080, // navy -0xbd846047, 0x14000000, 0x00fdf5e6, // oldlace -0xbd89b140, 0x00808000, // olive -0xbd89b149, 0x48220000, 0x006b8e23, // olivedrab -0xbe4171ca, 0x00ffa500, // orange -0xbe4171cb, 0x48a40000, 0x00ff4500, // orangered -0xbe434248, 0x00da70d6, // orchid -0xc02c29df, 0x3085749f, 0x10000000, 0x00eee8aa, // palegoldenrod -0xc02c29e5, 0x14ae0000, 0x0098fb98, // palegreen -0xc02c2d2b, 0x4a357a67, 0x14000000, 0x00afeeee, // paleturquoise -0xc02c2d93, 0x3d85a48b, 0x10000000, 0x00db7093, // palevioletred -0xc0300e43, 0x5d098000, 0x00ffefd5, // papayawhip -0xc0a11a21, 0x54c60000, 0x00ffdab9, // peachpuff -0xc0b2a800, 0x00cd853f, // peru -0xc12e5800, 0x00ffc0cb, // pink -0xc1956800, 0x00dda0dd, // plum -0xc1f72165, 0x09952800, 0x00b0e0e6, // powderblue -0xc2b2830a, 0x00800080, // purple -0xc8a40000, 0x00ff0000, // red -0xc9f3c8a5, 0x3eee0000, 0x00bc8f8f, // rosybrown -0xc9f90b05, 0x32a50000, 0x004169e1, // royalblue -0xcc24230b, 0x0a4fbb80, 0x008b4513, // saddlebrown -0xcc2c6bdc, 0x00fa8072, // salmon -0xcc2e2645, 0x49f77000, 0x00f4a460, // sandybrown -0xcca13c8b, 0x15c00000, 0x002e8b57, // seagreen -0xcca19a0b, 0x31800000, 0x00fff5ee, // seashell -0xcd257382, 0x00a0522d, // sienna -0xcd2cb164, 0x00c0c0c0, // silver -0xcd79132b, 0x14000000, 0x0087ceeb, // skyblue -0xcd81a145, 0x32a50000, 0x006a5acd, // slateblue -0xcd81a14f, 0x48390000, 0x00708090, // slategray -0xcdcfb800, 0x00fffafa, // snow -0xce124b8f, 0x1e452b80, 0x0000ff7f, // springgreen -0xce852b05, 0x32a50000, 0x004682b4, // steelblue -0xd02e0000, 0x00d2b48c, // tan -0xd0a16000, 0x00008080, // teal -0xd1099d19, 0x14000000, 0x00d8bfd8, // thistle -0xd1ed0d1e, 0x00ff6347, // tomato -0xd2b28d5f, 0x26650000, 0x0040e0d0, // turquoise -0xd92f6168, 0x00ee82ee, // violet -0xdd050d00, 0x00f5deb3, // wheat -0xdd09a140, 0x00ffffff, // white -0xdd09a167, 0x35eb2800, 0x00f5f5f5, // whitesmoke -0xe4ac63ee, 0x00ffff00, // yellow -0xe4ac63ef, 0x1e452b80, 0x009acd32 // yellowgreen -}; // original = 2505 : replacement = 1616 +#pragma pack(push,1) +static constexpr struct ColorRec { + const char* name; + uint8_t r, g, b; +} gNamedColors[] = { + { "aliceblue", 0xf0,0xf8,0xff }, + { "antiquewhite", 0xfa,0xeb,0xd7 }, + { "aqua", 0x00,0xff,0xff }, + { "aquamarine", 0x7f,0xff,0xd4 }, + { "azure", 0xf0,0xff,0xff }, + { "beige", 0xf5,0xf5,0xdc }, + { "bisque", 0xff,0xe4,0xc4 }, + { "black", 0x00,0x00,0x00 }, + { "blanchedalmond", 0xff,0xeb,0xcd }, + { "blue", 0x00,0x00,0xff }, + { "blueviolet", 0x8a,0x2b,0xe2 }, + { "brown", 0xa5,0x2a,0x2a }, + { "burlywood", 0xde,0xb8,0x87 }, + { "cadetblue", 0x5f,0x9e,0xa0 }, + { "chartreuse", 0x7f,0xff,0x00 }, + { "chocolate", 0xd2,0x69,0x1e }, + { "coral", 0xff,0x7f,0x50 }, + { "cornflowerblue", 0x64,0x95,0xed }, + { "cornsilk", 0xff,0xf8,0xdc }, + { "crimson", 0xdc,0x14,0x3c }, + { "cyan", 0x00,0xff,0xff }, + { "darkblue", 0x00,0x00,0x8b }, + { "darkcyan", 0x00,0x8b,0x8b }, + { "darkgoldenrod", 0xb8,0x86,0x0b }, + { "darkgray", 0xa9,0xa9,0xa9 }, + { "darkgreen", 0x00,0x64,0x00 }, + { "darkkhaki", 0xbd,0xb7,0x6b }, + { "darkmagenta", 0x8b,0x00,0x8b }, + { "darkolivegreen", 0x55,0x6b,0x2f }, + { "darkorange", 0xff,0x8c,0x00 }, + { "darkorchid", 0x99,0x32,0xcc }, + { "darkred", 0x8b,0x00,0x00 }, + { "darksalmon", 0xe9,0x96,0x7a }, + { "darkseagreen", 0x8f,0xbc,0x8f }, + { "darkslateblue", 0x48,0x3d,0x8b }, + { "darkslategray", 0x2f,0x4f,0x4f }, + { "darkturquoise", 0x00,0xce,0xd1 }, + { "darkviolet", 0x94,0x00,0xd3 }, + { "deeppink", 0xff,0x14,0x93 }, + { "deepskyblue", 0x00,0xbf,0xff }, + { "dimgray", 0x69,0x69,0x69 }, + { "dodgerblue", 0x1e,0x90,0xff }, + { "firebrick", 0xb2,0x22,0x22 }, + { "floralwhite", 0xff,0xfa,0xf0 }, + { "forestgreen", 0x22,0x8b,0x22 }, + { "fuchsia", 0xff,0x00,0xff }, + { "gainsboro", 0xdc,0xdc,0xdc }, + { "ghostwhite", 0xf8,0xf8,0xff }, + { "gold", 0xff,0xd7,0x00 }, + { "goldenrod", 0xda,0xa5,0x20 }, + { "gray", 0x80,0x80,0x80 }, + { "green", 0x00,0x80,0x00 }, + { "greenyellow", 0xad,0xff,0x2f }, + { "honeydew", 0xf0,0xff,0xf0 }, + { "hotpink", 0xff,0x69,0xb4 }, + { "indianred", 0xcd,0x5c,0x5c }, + { "indigo", 0x4b,0x00,0x82 }, + { "ivory", 0xff,0xff,0xf0 }, + { "khaki", 0xf0,0xe6,0x8c }, + { "lavender", 0xe6,0xe6,0xfa }, + { "lavenderblush", 0xff,0xf0,0xf5 }, + { "lawngreen", 0x7c,0xfc,0x00 }, + { "lemonchiffon", 0xff,0xfa,0xcd }, + { "lightblue", 0xad,0xd8,0xe6 }, + { "lightcoral", 0xf0,0x80,0x80 }, + { "lightcyan", 0xe0,0xff,0xff }, + { "lightgoldenrodyellow", 0xfa,0xfa,0xd2 }, + { "lightgreen", 0x90,0xee,0x90 }, + { "lightgrey", 0xd3,0xd3,0xd3 }, + { "lightpink", 0xff,0xb6,0xc1 }, + { "lightsalmon", 0xff,0xa0,0x7a }, + { "lightseagreen", 0x20,0xb2,0xaa }, + { "lightskyblue", 0x87,0xce,0xfa }, + { "lightslategray", 0x77,0x88,0x99 }, + { "lightsteelblue", 0xb0,0xc4,0xde }, + { "lightyellow", 0xff,0xff,0xe0 }, + { "lime", 0x00,0xff,0x00 }, + { "limegreen", 0x32,0xcd,0x32 }, + { "linen", 0xfa,0xf0,0xe6 }, + { "magenta", 0xff,0x00,0xff }, + { "maroon", 0x80,0x00,0x00 }, + { "mediumaquamarine", 0x66,0xcd,0xaa }, + { "mediumblue", 0x00,0x00,0xcd }, + { "mediumorchid", 0xba,0x55,0xd3 }, + { "mediumpurple", 0x93,0x70,0xdb }, + { "mediumseagreen", 0x3c,0xb3,0x71 }, + { "mediumslateblue", 0x7b,0x68,0xee }, + { "mediumspringgreen", 0x00,0xfa,0x9a }, + { "mediumturquoise", 0x48,0xd1,0xcc }, + { "mediumvioletred", 0xc7,0x15,0x85 }, + { "midnightblue", 0x19,0x19,0x70 }, + { "mintcream", 0xf5,0xff,0xfa }, + { "mistyrose", 0xff,0xe4,0xe1 }, + { "moccasin", 0xff,0xe4,0xb5 }, + { "navajowhite", 0xff,0xde,0xad }, + { "navy", 0x00,0x00,0x80 }, + { "oldlace", 0xfd,0xf5,0xe6 }, + { "olive", 0x80,0x80,0x00 }, + { "olivedrab", 0x6b,0x8e,0x23 }, + { "orange", 0xff,0xa5,0x00 }, + { "orangered", 0xff,0x45,0x00 }, + { "orchid", 0xda,0x70,0xd6 }, + { "palegoldenrod", 0xee,0xe8,0xaa }, + { "palegreen", 0x98,0xfb,0x98 }, + { "paleturquoise", 0xaf,0xee,0xee }, + { "palevioletred", 0xdb,0x70,0x93 }, + { "papayawhip", 0xff,0xef,0xd5 }, + { "peachpuff", 0xff,0xda,0xb9 }, + { "peru", 0xcd,0x85,0x3f }, + { "pink", 0xff,0xc0,0xcb }, + { "plum", 0xdd,0xa0,0xdd }, + { "powderblue", 0xb0,0xe0,0xe6 }, + { "purple", 0x80,0x00,0x80 }, + { "red", 0xff,0x00,0x00 }, + { "rosybrown", 0xbc,0x8f,0x8f }, + { "royalblue", 0x41,0x69,0xe1 }, + { "saddlebrown", 0x8b,0x45,0x13 }, + { "salmon", 0xfa,0x80,0x72 }, + { "sandybrown", 0xf4,0xa4,0x60 }, + { "seagreen", 0x2e,0x8b,0x57 }, + { "seashell", 0xff,0xf5,0xee }, + { "sienna", 0xa0,0x52,0x2d }, + { "silver", 0xc0,0xc0,0xc0 }, + { "skyblue", 0x87,0xce,0xeb }, + { "slateblue", 0x6a,0x5a,0xcd }, + { "slategray", 0x70,0x80,0x90 }, + { "snow", 0xff,0xfa,0xfa }, + { "springgreen", 0x00,0xff,0x7f }, + { "steelblue", 0x46,0x82,0xb4 }, + { "tan", 0xd2,0xb4,0x8c }, + { "teal", 0x00,0x80,0x80 }, + { "thistle", 0xd8,0xbf,0xd8 }, + { "tomato", 0xff,0x63,0x47 }, + { "turquoise", 0x40,0xe0,0xd0 }, + { "violet", 0xee,0x82,0xee }, + { "wheat", 0xf5,0xde,0xb3 }, + { "white", 0xff,0xff,0xff }, + { "whitesmoke", 0xf5,0xf5,0xf5 }, + { "yellow", 0xff,0xff,0x00 }, + { "yellowgreen", 0x9a,0xcd,0x32 }, +}; +#pragma pack(pop) const char* SkParse::FindNamedColor(const char* name, size_t len, SkColor* color) { - const char* namePtr = name; - unsigned int sixMatches[4]; - unsigned int* sixMatchPtr = sixMatches; - bool first = true; - bool last = false; - char ch; - do { - unsigned int sixMatch = 0; - for (int chIndex = 0; chIndex < 6; chIndex++) { - sixMatch <<= 5; - ch = *namePtr | 0x20; - if (ch < 'a' || ch > 'z') - ch = 0; - else { - ch = ch - 'a' + 1; - namePtr++; - } - sixMatch |= ch ; // turn 'A' (0x41) into 'a' (0x61); - } - sixMatch <<= 1; - sixMatch |= 1; - if (first) { - sixMatch |= 0x80000000; - first = false; - } - ch = *namePtr | 0x20; - last = ch < 'a' || ch > 'z'; - if (last) - sixMatch &= ~1; - len -= 6; - *sixMatchPtr++ = sixMatch; - } while (last == false && len > 0); - const int colorNameSize = sizeof(gColorNames) / sizeof(unsigned int); - int lo = 0; - int hi = colorNameSize - 3; // back off to beginning of yellowgreen - while (lo <= hi) { - int mid = (hi + lo) >> 1; - while ((int) gColorNames[mid] >= 0) - --mid; - sixMatchPtr = sixMatches; - while (gColorNames[mid] == *sixMatchPtr) { - ++mid; - if ((*sixMatchPtr & 1) == 0) { // last - *color = gColorNames[mid] | 0xFF000000; - return namePtr; - } - ++sixMatchPtr; - } - int sixMask = *sixMatchPtr & ~0x80000000; - int midMask = gColorNames[mid] & ~0x80000000; - if (sixMask > midMask) { - lo = mid + 2; // skip color - while ((int) gColorNames[lo] >= 0) - ++lo; - } else if (hi == mid) - return nullptr; - else - hi = mid; + const auto* rec = std::lower_bound(std::begin(gNamedColors), + std::end (gNamedColors), + ColorRec{name, 0,0,0}, // key + [](const ColorRec& rec, const ColorRec& key) { + return strcmp(rec.name, key.name) < 0; + }); + + if (rec == std::end(gNamedColors) || strcmp(name, rec->name)) { + return nullptr; + } + + if (color) { + *color = SkColorSetRGB(rec->r, rec->g, rec->b); } - return nullptr; + + return name + strlen(rec->name); } // !!! move to char utilities diff --git a/src/utils/SkParsePath.cpp b/src/utils/SkParsePath.cpp index 688daae33b172..31a912ca476de 100644 --- a/src/utils/SkParsePath.cpp +++ b/src/utils/SkParsePath.cpp @@ -92,7 +92,7 @@ bool SkParsePath::FromSVGString(const char data[], SkPath* result) { } char ch = data[0]; if (is_digit(ch) || ch == '-' || ch == '+' || ch == '.') { - if (op == '\0') { + if (op == '\0' || op == 'Z') { return false; } } else if (is_sep(ch)) { diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp index ade48e38b0eed..0be035f1efef6 100644 --- a/src/utils/SkShadowUtils.cpp +++ b/src/utils/SkShadowUtils.cpp @@ -17,6 +17,7 @@ #include "include/private/SkIDChangeListener.h" #include "include/utils/SkRandom.h" #include "src/core/SkBlurMask.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkColorFilterPriv.h" #include "src/core/SkDevice.h" #include "src/core/SkDrawShadowInfo.h" @@ -40,13 +41,14 @@ * Final result is black with alpha of Gaussian(B)*G. * The assumption is that the original color's alpha is 1. */ -class SkGaussianColorFilter : public SkColorFilter { +class SkGaussianColorFilter : public SkColorFilterBase { public: SkGaussianColorFilter() : INHERITED() {} #if SK_SUPPORT_GPU - std::unique_ptr asFragmentProcessor(GrRecordingContext*, - const GrColorInfo&) const override; + bool colorFilterAcceptsInputFP() const override { return true; } + GrFPResult asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext*, const GrColorInfo&) const override; #endif protected: @@ -73,7 +75,7 @@ class SkGaussianColorFilter : public SkColorFilter { private: SK_FLATTENABLE_HOOKS(SkGaussianColorFilter) - typedef SkColorFilter INHERITED; + typedef SkColorFilterBase INHERITED; }; sk_sp SkGaussianColorFilter::CreateProc(SkReadBuffer&) { @@ -82,9 +84,11 @@ sk_sp SkGaussianColorFilter::CreateProc(SkReadBuffer&) { #if SK_SUPPORT_GPU -std::unique_ptr SkGaussianColorFilter::asFragmentProcessor( - GrRecordingContext*, const GrColorInfo&) const { - return GrBlurredEdgeFragmentProcessor::Make(GrBlurredEdgeFragmentProcessor::Mode::kGaussian); +GrFPResult SkGaussianColorFilter::asFragmentProcessor(std::unique_ptr inputFP, + GrRecordingContext*, + const GrColorInfo&) const { + return GrFPSuccess(GrBlurredEdgeFragmentProcessor::Make( + std::move(inputFP), GrBlurredEdgeFragmentProcessor::Mode::kGaussian)); } #endif diff --git a/src/utils/SkWhitelistChecksums.inc b/src/utils/SkWhitelistChecksums.inc deleted file mode 100644 index 1f177aca7ea38..0000000000000 --- a/src/utils/SkWhitelistChecksums.inc +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2015 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * GenerateChecksums() in ../../src/utils/SkWhitelistTypefaces.cpp generated SkWhitelistChecksums.inc. - * Run 'whitelist_typefaces --generate' to create anew. - */ - -#include "include/private/SkTDArray.h" - -struct Whitelist { - const char* fFontName; - uint32_t fChecksum; - bool fSerializedNameOnly; - bool fSerializedSub; -}; - -static Whitelist whitelist[] = { - { "Aegean", 0x639a35c7, false, false }, - { "Analecta", 0x639a35c7, false, false }, - { "Arial", 0xbc28cb14, false, false }, - { "DejaVu Sans", 0x639a35c7, false, false }, - { "DejaVu Sans Mono", 0xbc29a5d9, false, false }, - { "DejaVu Serif", 0x9db67efe, false, false }, - { "FreeMono", 0x724884f4, false, false }, - { "FreeSans", 0x7dfc48a3, false, false }, - { "FreeSerif", 0xa1ae8c77, false, false }, - { "Khmer OS", 0x917c40aa, false, false }, - { "Kochi Gothic", 0x962132dd, false, false }, - { "Lohit Kannada", 0x0b6ce863, false, false }, - { "Lohit Marathi", 0x0eb0a941, false, false }, - { "Lohit Oriya", 0xf3e9d313, false, false }, - { "Lohit Punjabi", 0xfd8b26e0, false, false }, - { "Lohit Tamil", 0xa8111d99, false, false }, - { "Lohit Telugu", 0xd34299e0, false, false }, - { "Meera", 0xe3e16220, false, false }, - { "Mukti Narrow", 0x53f7d053, false, false }, - { "NanumBarunGothic", 0x639a35c7, false, false }, - { "NanumGothic", 0xff8d773d, false, false }, - { "OpenSymbol", 0x4fcaf331, false, false }, - { "Symbola", 0x639a35c7, false, false }, - { "TakaoPGothic", 0x068c405a, false, false }, - { "Waree", 0x6a2bfca8, false, false }, - { "WenQuanYi Micro Hei", 0xcdec08a3, false, false }, - { "padmaa", 0x09eb1865, false, false }, -}; - -static const int whitelistCount = (int) SK_ARRAY_COUNT(whitelist); diff --git a/src/utils/SkWhitelistTypefaces.cpp b/src/utils/SkWhitelistTypefaces.cpp deleted file mode 100644 index 3d3dfcccfd5be..0000000000000 --- a/src/utils/SkWhitelistTypefaces.cpp +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright 2015 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "include/core/SkStream.h" -#include "include/core/SkString.h" -#include "include/core/SkTypeface.h" -#include "src/core/SkFontDescriptor.h" -#include "src/core/SkOpts.h" -#include "src/sfnt/SkOTUtils.h" -#include "src/utils/SkUTF.h" - -#include "SkWhitelistChecksums.inc" - -#define WHITELIST_DEBUG 0 - -extern void WhitelistSerializeTypeface(const SkTypeface*, SkWStream* ); -sk_sp WhitelistDeserializeTypeface(SkStream* ); -extern bool CheckChecksums(); -extern bool GenerateChecksums(); - -#if WHITELIST_DEBUG -static bool timesNewRomanSerializedNameOnly = false; -#endif - -#define SUBNAME_PREFIX "sk_" - -static bool font_name_is_local(const char* fontName, SkFontStyle style) { - if (!strcmp(fontName, "DejaVu Sans")) { - return true; - } - sk_sp defaultFace(SkTypeface::MakeFromName(nullptr, style)); - sk_sp foundFace(SkTypeface::MakeFromName(fontName, style)); - return defaultFace != foundFace; -} - -static int whitelist_name_index(const SkTypeface* tf) { - - SkString fontNameStr; - sk_sp nameIter = - SkOTUtils::LocalizedStrings_NameTable::MakeForFamilyNames(*tf); - SkTypeface::LocalizedString familyNameLocalized; - while (nameIter->next(&familyNameLocalized)) { - fontNameStr = familyNameLocalized.fString; - // check against permissible list of names - for (int i = 0; i < whitelistCount; ++i) { - if (fontNameStr.equals(whitelist[i].fFontName)) { - return i; - } - } - } -#if WHITELIST_DEBUG - sk_sp debugIter = - SkOTUtils::LocalizedStrings_NameTable::MakeForFamilyNames(*tf); - while (debugIter->next(&familyNameLocalized)) { - SkDebugf("no match fontName=\"%s\"\n", familyNameLocalized.fString.c_str()); - } -#endif - return -1; -} - -static uint32_t compute_checksum(const SkTypeface* tf) { - std::unique_ptr fontData = tf->makeFontData(); - if (!fontData) { - return 0; - } - SkStreamAsset* fontStream = fontData->getStream(); - if (!fontStream) { - return 0; - } - SkTDArray data; - size_t length = fontStream->getLength(); - if (!length) { - return 0; - } - data.setCount((int) length); - if (!fontStream->peek(data.begin(), length)) { - return 0; - } - return SkOpts::hash(data.begin(), length); -} - -static void serialize_sub(const char* fontName, SkFontStyle style, SkWStream* wstream) { - SkFontDescriptor desc; - SkString subName(SUBNAME_PREFIX); - subName.append(fontName); - const char* familyName = subName.c_str(); - desc.setFamilyName(familyName); - desc.setStyle(style); - desc.serialize(wstream); -#if WHITELIST_DEBUG - for (int i = 0; i < whitelistCount; ++i) { - if (!strcmp(fontName, whitelist[i].fFontName)) { - if (!whitelist[i].fSerializedSub) { - whitelist[i].fSerializedSub = true; - SkDebugf("%s %s\n", __FUNCTION__, familyName); - } - break; - } - } -#endif -} - -static bool is_local(const SkTypeface* tf) { - bool isLocal = false; - SkFontDescriptor desc; - tf->getFontDescriptor(&desc, &isLocal); - return isLocal; -} - -static void serialize_full(const SkTypeface* tf, SkWStream* wstream) { - bool isLocal = false; - SkFontDescriptor desc; - tf->getFontDescriptor(&desc, &isLocal); - - // Embed font data if it's a local font. - if (isLocal && !desc.hasFontData()) { - desc.setFontData(tf->makeFontData()); - } - desc.serialize(wstream); -} - -static void serialize_name_only(const SkTypeface* tf, SkWStream* wstream) { - bool isLocal = false; - SkFontDescriptor desc; - tf->getFontDescriptor(&desc, &isLocal); - SkASSERT(!isLocal); -#if WHITELIST_DEBUG - const char* familyName = desc.getFamilyName(); - if (familyName) { - if (!strcmp(familyName, "Times New Roman")) { - if (!timesNewRomanSerializedNameOnly) { - timesNewRomanSerializedNameOnly = true; - SkDebugf("%s %s\n", __FUNCTION__, familyName); - } - } else { - for (int i = 0; i < whitelistCount; ++i) { - if (!strcmp(familyName, whitelist[i].fFontName)) { - if (!whitelist[i].fSerializedNameOnly) { - whitelist[i].fSerializedNameOnly = true; - SkDebugf("%s %s\n", __FUNCTION__, familyName); - } - break; - } - } - } - } -#endif - desc.serialize(wstream); -} - -void WhitelistSerializeTypeface(const SkTypeface* tf, SkWStream* wstream) { - if (!is_local(tf)) { - serialize_name_only(tf, wstream); - return; - } - int whitelistIndex = whitelist_name_index(tf); - if (whitelistIndex < 0) { - serialize_full(tf, wstream); - return; - } - const char* fontName = whitelist[whitelistIndex].fFontName; - if (!font_name_is_local(fontName, tf->fontStyle())) { -#if WHITELIST_DEBUG - SkDebugf("name not found locally \"%s\" style=%d\n", fontName, tf->style()); -#endif - serialize_full(tf, wstream); - return; - } - uint32_t checksum = compute_checksum(tf); - if (whitelist[whitelistIndex].fChecksum != checksum) { -#if WHITELIST_DEBUG - if (whitelist[whitelistIndex].fChecksum) { - SkDebugf("!!! checksum changed !!!\n"); - } - SkDebugf("checksum updated\n"); - SkDebugf(" { \"%s\", 0x%08x },\n", fontName, checksum); -#endif - whitelist[whitelistIndex].fChecksum = checksum; - } - serialize_sub(fontName, tf->fontStyle(), wstream); -} - -sk_sp WhitelistDeserializeTypeface(SkStream* stream) { - SkFontDescriptor desc; - if (!SkFontDescriptor::Deserialize(stream, &desc)) { - return nullptr; - } - - std::unique_ptr data = desc.detachFontData(); - if (data) { - sk_sp typeface(SkTypeface::MakeFromFontData(std::move(data))); - if (typeface) { - return typeface; - } - } - const char* familyName = desc.getFamilyName(); - if (!strncmp(SUBNAME_PREFIX, familyName, sizeof(SUBNAME_PREFIX) - 1)) { - familyName += sizeof(SUBNAME_PREFIX) - 1; - } - return SkTypeface::MakeFromName(familyName, desc.getStyle()); -} - -bool CheckChecksums() { - for (int i = 0; i < whitelistCount; ++i) { - const char* fontName = whitelist[i].fFontName; - sk_sp tf(SkTypeface::MakeFromName(fontName, SkFontStyle())); - uint32_t checksum = compute_checksum(tf.get()); - if (whitelist[i].fChecksum != checksum) { - return false; - } - } - return true; -} - -const char checksumFileName[] = "SkWhitelistChecksums.inc"; - -const char checksumHeader[] = -"/*" "\n" -" * Copyright 2015 Google Inc." "\n" -" *" "\n" -" * Use of this source code is governed by a BSD-style license that can be" "\n" -" * found in the LICENSE file." "\n" -" *" "\n" -" * %s() in %s generated %s." "\n" -" * Run 'whitelist_typefaces --generate' to create anew." "\n" -" */" "\n" -"" "\n" -"#include \"SkTDArray.h\"" "\n" -"" "\n" -"struct Whitelist {" "\n" -" const char* fFontName;" "\n" -" uint32_t fChecksum;" "\n" -" bool fSerializedNameOnly;" "\n" -" bool fSerializedSub;" "\n" -"};" "\n" -"" "\n" -"static Whitelist whitelist[] = {" "\n"; - -const char checksumEntry[] = -" { \"%s\", 0x%08x, false, false }," "\n"; - -const char checksumTrailer[] = -"};" "\n" -"" "\n" -"static const int whitelistCount = (int) SK_ARRAY_COUNT(whitelist);" "\n"; - - -#include "src/core/SkOSFile.h" - -bool GenerateChecksums() { - FILE* file = sk_fopen(checksumFileName, kWrite_SkFILE_Flag); - if (!file) { - SkDebugf("Can't open %s for writing.\n", checksumFileName); - return false; - } - SkString line; - line.printf(checksumHeader, __FUNCTION__, __FILE__, checksumFileName); - sk_fwrite(line.c_str(), line.size(), file); - for (int i = 0; i < whitelistCount; ++i) { - const char* fontName = whitelist[i].fFontName; - sk_sp tf(SkTypeface::MakeFromName(fontName, SkFontStyle())); - uint32_t checksum = compute_checksum(tf.get()); - line.printf(checksumEntry, fontName, checksum); - sk_fwrite(line.c_str(), line.size(), file); - } - sk_fwrite(checksumTrailer, sizeof(checksumTrailer) - 1, file); - sk_fclose(file); - return true; -} diff --git a/src/utils/mac/SkCGBase.h b/src/utils/mac/SkCGBase.h new file mode 100644 index 0000000000000..a7b0ed06d0537 --- /dev/null +++ b/src/utils/mac/SkCGBase.h @@ -0,0 +1,37 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkCGBase_DEFINED +#define SkCGBase_DEFINED + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#endif + +// Skia extensions for types in CGBase.h + +static inline CGFloat SkScalarToCGFloat(SkScalar scalar) { + return CGFLOAT_IS_DOUBLE ? SkScalarToDouble(scalar) : SkScalarToFloat(scalar); +} + +static inline SkScalar SkScalarFromCGFloat(CGFloat cgFloat) { + return CGFLOAT_IS_DOUBLE ? SkDoubleToScalar(cgFloat) : SkFloatToScalar(cgFloat); +} + +static inline float SkFloatFromCGFloat(CGFloat cgFloat) { + return CGFLOAT_IS_DOUBLE ? static_cast(cgFloat) : cgFloat; +} + +#endif +#endif //SkCGBase_DEFINED diff --git a/src/utils/mac/SkCGGeometry.h b/src/utils/mac/SkCGGeometry.h new file mode 100644 index 0000000000000..04b1263bcd56c --- /dev/null +++ b/src/utils/mac/SkCGGeometry.h @@ -0,0 +1,52 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkCGGeometry_DEFINED +#define SkCGGeometry_DEFINED + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#endif + +// Skia extensions for types in CGGeometry.h + +// Inline versions of these CGRect helpers. +// The CG versions require making a call and a copy of the CGRect on the stack. + +static inline bool SkCGRectIsEmpty(const CGRect& rect) { + return rect.size.width <= 0 || rect.size.height <= 0; +} + +static inline CGFloat SkCGRectGetMinX(const CGRect& rect) { + return rect.origin.x; +} + +static inline CGFloat SkCGRectGetMaxX(const CGRect& rect) { + return rect.origin.x + rect.size.width; +} + +static inline CGFloat SkCGRectGetMinY(const CGRect& rect) { + return rect.origin.y; +} + +static inline CGFloat SkCGRectGetMaxY(const CGRect& rect) { + return rect.origin.y + rect.size.height; +} + +static inline CGFloat SkCGRectGetWidth(const CGRect& rect) { + return rect.size.width; +} + +#endif +#endif //SkCGGeometry_DEFINED diff --git a/src/utils/mac/SkCTFontSmoothBehavior.cpp b/src/utils/mac/SkCTFontSmoothBehavior.cpp new file mode 100644 index 0000000000000..da5168745960f --- /dev/null +++ b/src/utils/mac/SkCTFontSmoothBehavior.cpp @@ -0,0 +1,271 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkTypes.h" + +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +#include "src/utils/mac/SkCTFontSmoothBehavior.h" +#include "src/utils/mac/SkUniqueCFRef.h" + +#ifdef SK_BUILD_FOR_MAC +#import +#endif + +#ifdef SK_BUILD_FOR_IOS +#include +#include +#include +#include +#endif + +static constexpr CGBitmapInfo kBitmapInfoRGB = ((CGBitmapInfo)kCGImageAlphaNoneSkipFirst | + kCGBitmapByteOrder32Host); + +/** Drawn in FontForge, reduced with fonttools ttx, converted by xxd -i, + * this TrueType font contains a glyph of the spider. + * + * To re-forge the original bytes of the TrueType font file, + * remove all ',|( +0x)' from this definition, + * copy the data to the clipboard, + * run 'pbpaste | xxd -p -r - spider.ttf'. + */ +static constexpr const uint8_t kSpiderSymbol_ttf[] = { + 0x00, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x80, 0x00, 0x03, 0x00, 0x40, + 0x47, 0x44, 0x45, 0x46, 0x00, 0x14, 0x00, 0x14, 0x00, 0x00, 0x07, 0xa8, + 0x00, 0x00, 0x00, 0x18, 0x4f, 0x53, 0x2f, 0x32, 0x8a, 0xf4, 0xfb, 0xdb, + 0x00, 0x00, 0x01, 0x48, 0x00, 0x00, 0x00, 0x60, 0x63, 0x6d, 0x61, 0x70, + 0xe0, 0x7f, 0x10, 0x7e, 0x00, 0x00, 0x01, 0xb8, 0x00, 0x00, 0x00, 0x54, + 0x67, 0x61, 0x73, 0x70, 0xff, 0xff, 0x00, 0x03, 0x00, 0x00, 0x07, 0xa0, + 0x00, 0x00, 0x00, 0x08, 0x67, 0x6c, 0x79, 0x66, 0x97, 0x0b, 0x6a, 0xf6, + 0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0x03, 0x40, 0x68, 0x65, 0x61, 0x64, + 0x0f, 0xa2, 0x24, 0x1a, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x36, + 0x68, 0x68, 0x65, 0x61, 0x0e, 0xd3, 0x07, 0x3f, 0x00, 0x00, 0x01, 0x04, + 0x00, 0x00, 0x00, 0x24, 0x68, 0x6d, 0x74, 0x78, 0x10, 0x03, 0x00, 0x44, + 0x00, 0x00, 0x01, 0xa8, 0x00, 0x00, 0x00, 0x0e, 0x6c, 0x6f, 0x63, 0x61, + 0x01, 0xb4, 0x00, 0x28, 0x00, 0x00, 0x02, 0x0c, 0x00, 0x00, 0x00, 0x0a, + 0x6d, 0x61, 0x78, 0x70, 0x00, 0x4a, 0x01, 0x4d, 0x00, 0x00, 0x01, 0x28, + 0x00, 0x00, 0x00, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0xc3, 0xe5, 0x39, 0xd4, + 0x00, 0x00, 0x05, 0x58, 0x00, 0x00, 0x02, 0x28, 0x70, 0x6f, 0x73, 0x74, + 0xff, 0x03, 0x00, 0x67, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x00, 0x20, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x0f, 0x08, 0x1d, + 0x5f, 0x0f, 0x3c, 0xf5, 0x00, 0x0b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd1, 0x97, 0xa8, 0x5a, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xe8, 0x32, 0x33, + 0x00, 0x03, 0xff, 0x3b, 0x08, 0x00, 0x05, 0x55, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x55, 0xff, 0x3b, 0x01, 0x79, 0x08, 0x00, 0x00, 0x03, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x04, 0x01, 0x1c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x2e, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x01, 0x90, 0x00, 0x05, + 0x00, 0x00, 0x05, 0x33, 0x05, 0x99, 0x00, 0x00, 0x01, 0x1e, 0x05, 0x33, + 0x05, 0x99, 0x00, 0x00, 0x03, 0xd7, 0x00, 0x66, 0x02, 0x12, 0x00, 0x00, + 0x05, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x73, 0x6b, 0x69, 0x61, 0x00, 0xc0, 0x00, 0x00, 0xf0, 0x21, + 0x06, 0x66, 0xfe, 0x66, 0x01, 0x79, 0x05, 0x55, 0x00, 0xc5, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x20, 0x00, 0x01, 0x08, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x48, + 0x00, 0x00, 0x00, 0x0e, 0x00, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x0d, 0x00, 0x1d, 0x00, 0x21, 0xf0, 0x21, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x1d, 0x00, 0x21, + 0xf0, 0x21, 0xff, 0xff, 0x00, 0x01, 0xff, 0xf9, 0xff, 0xf5, 0xff, 0xe4, + 0xff, 0xe2, 0x0f, 0xe2, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, + 0x00, 0x14, 0x00, 0x14, 0x01, 0xa0, 0x00, 0x00, 0x00, 0x02, 0x00, 0x44, + 0x00, 0x00, 0x02, 0x64, 0x05, 0x55, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, + 0x33, 0x11, 0x21, 0x11, 0x25, 0x21, 0x11, 0x21, 0x44, 0x02, 0x20, 0xfe, + 0x24, 0x01, 0x98, 0xfe, 0x68, 0x05, 0x55, 0xfa, 0xab, 0x44, 0x04, 0xcd, + 0x00, 0x04, 0x00, 0x03, 0xff, 0x3b, 0x08, 0x00, 0x05, 0x4c, 0x00, 0x15, + 0x00, 0x1d, 0x00, 0x25, 0x01, 0x1b, 0x00, 0x00, 0x01, 0x36, 0x37, 0x36, + 0x27, 0x26, 0x07, 0x06, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, 0x26, 0x07, + 0x06, 0x17, 0x16, 0x17, 0x16, 0x32, 0x37, 0x32, 0x35, 0x34, 0x23, 0x22, + 0x15, 0x14, 0x27, 0x32, 0x35, 0x34, 0x23, 0x22, 0x15, 0x14, 0x03, 0x32, + 0x17, 0x30, 0x17, 0x31, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x33, + 0x32, 0x33, 0x16, 0x33, 0x32, 0x17, 0x16, 0x07, 0x06, 0x23, 0x22, 0x27, + 0x26, 0x27, 0x26, 0x23, 0x22, 0x07, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, + 0x1f, 0x02, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, 0x17, 0x17, 0x16, 0x33, + 0x16, 0x17, 0x16, 0x07, 0x06, 0x23, 0x22, 0x27, 0x27, 0x26, 0x23, 0x22, + 0x07, 0x06, 0x07, 0x06, 0x17, 0x16, 0x17, 0x16, 0x33, 0x32, 0x33, 0x32, + 0x37, 0x36, 0x37, 0x36, 0x17, 0x16, 0x1f, 0x02, 0x16, 0x17, 0x16, 0x15, + 0x14, 0x23, 0x22, 0x27, 0x27, 0x26, 0x27, 0x27, 0x26, 0x27, 0x26, 0x07, + 0x06, 0x07, 0x06, 0x17, 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x07, + 0x06, 0x23, 0x22, 0x27, 0x26, 0x07, 0x06, 0x07, 0x06, 0x15, 0x14, 0x17, + 0x16, 0x17, 0x16, 0x15, 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x27, + 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37, 0x34, 0x27, 0x26, 0x07, + 0x06, 0x07, 0x06, 0x0f, 0x02, 0x06, 0x23, 0x22, 0x27, 0x26, 0x35, 0x34, + 0x37, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x27, 0x26, 0x27, + 0x26, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x07, 0x07, 0x06, 0x23, 0x22, + 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x37, 0x36, 0x37, 0x37, 0x36, + 0x37, 0x36, 0x37, 0x36, 0x35, 0x34, 0x27, 0x26, 0x27, 0x26, 0x27, 0x26, + 0x23, 0x22, 0x07, 0x06, 0x07, 0x06, 0x07, 0x06, 0x27, 0x26, 0x27, 0x26, + 0x27, 0x26, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, 0x37, 0x36, 0x33, 0x32, + 0x17, 0x16, 0x33, 0x32, 0x37, 0x36, 0x35, 0x34, 0x37, 0x36, 0x37, 0x36, + 0x33, 0x04, 0xf5, 0x23, 0x13, 0x11, 0x14, 0x16, 0x1d, 0x1b, 0x4c, 0x1f, + 0x0e, 0x2d, 0x23, 0x14, 0x2c, 0x13, 0x18, 0x25, 0x2c, 0x10, 0x3c, 0x71, + 0x1d, 0x5c, 0x5c, 0x3f, 0xae, 0x5c, 0x5c, 0x3f, 0x6a, 0x27, 0x31, 0x5b, + 0x09, 0x27, 0x36, 0x03, 0x0a, 0x26, 0x35, 0x2e, 0x09, 0x08, 0xc6, 0x13, + 0x81, 0x17, 0x20, 0x18, 0x21, 0x1e, 0x04, 0x04, 0x15, 0x5c, 0x22, 0x26, + 0x48, 0x56, 0x3b, 0x10, 0x21, 0x01, 0x0c, 0x06, 0x06, 0x0f, 0x31, 0x44, + 0x3c, 0x52, 0x4a, 0x1d, 0x11, 0x3f, 0xb4, 0x71, 0x01, 0x26, 0x06, 0x0d, + 0x15, 0x1a, 0x2a, 0x13, 0x53, 0xaa, 0x42, 0x1d, 0x0a, 0x33, 0x20, 0x21, + 0x2b, 0x01, 0x02, 0x3e, 0x21, 0x09, 0x02, 0x02, 0x0f, 0x2d, 0x4b, 0x0a, + 0x22, 0x15, 0x20, 0x1f, 0x72, 0x8b, 0x2d, 0x2f, 0x1d, 0x1f, 0x0e, 0x25, + 0x3f, 0x4d, 0x1b, 0x63, 0x2a, 0x2c, 0x14, 0x22, 0x18, 0x1c, 0x0f, 0x08, + 0x2a, 0x08, 0x08, 0x0d, 0x3b, 0x4c, 0x52, 0x74, 0x27, 0x71, 0x2e, 0x01, + 0x0c, 0x10, 0x15, 0x0d, 0x06, 0x0d, 0x05, 0x01, 0x06, 0x2c, 0x28, 0x14, + 0x1b, 0x05, 0x04, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x16, 0x27, 0x03, 0x0d, + 0x30, 0x4c, 0x4c, 0x4b, 0x1f, 0x0b, 0x22, 0x26, 0x0d, 0x15, 0x0d, 0x2d, + 0x68, 0x34, 0x14, 0x3c, 0x25, 0x12, 0x04, 0x10, 0x18, 0x0b, 0x09, 0x30, + 0x2b, 0x44, 0x66, 0x14, 0x47, 0x47, 0x59, 0x73, 0x25, 0x05, 0x03, 0x1f, + 0x01, 0x08, 0x3f, 0x48, 0x4b, 0x4b, 0x76, 0x2f, 0x49, 0x2d, 0x22, 0x24, + 0x0c, 0x15, 0x08, 0x0e, 0x33, 0x03, 0x44, 0x4c, 0x10, 0x46, 0x13, 0x1f, + 0x27, 0x1b, 0x1d, 0x13, 0x02, 0x24, 0x08, 0x02, 0x42, 0x0e, 0x4d, 0x3c, + 0x19, 0x1b, 0x40, 0x2b, 0x2b, 0x1e, 0x16, 0x11, 0x04, 0x1f, 0x11, 0x04, + 0x18, 0x11, 0x35, 0x01, 0xa3, 0x13, 0x24, 0x1f, 0x0b, 0x0c, 0x19, 0x19, + 0x18, 0x13, 0x0f, 0x0c, 0x1a, 0x18, 0x1f, 0x19, 0x1e, 0x07, 0x1a, 0xc3, + 0x54, 0x51, 0x54, 0x51, 0x04, 0x53, 0x51, 0x54, 0x50, 0x02, 0x48, 0x1a, + 0x31, 0x18, 0x55, 0x74, 0x04, 0x0e, 0x09, 0x0d, 0x06, 0x10, 0x16, 0x1b, + 0x24, 0x01, 0x04, 0x0b, 0x04, 0x10, 0x3f, 0x0a, 0x41, 0x02, 0x41, 0x20, + 0x06, 0x12, 0x16, 0x21, 0x17, 0x2a, 0x1e, 0x15, 0x40, 0x27, 0x11, 0x0e, + 0x1e, 0x11, 0x15, 0x1f, 0x43, 0x13, 0x1a, 0x10, 0x15, 0x1b, 0x04, 0x09, + 0x4d, 0x2a, 0x0f, 0x19, 0x0a, 0x0a, 0x03, 0x05, 0x15, 0x3c, 0x64, 0x21, + 0x4b, 0x2e, 0x21, 0x28, 0x13, 0x47, 0x44, 0x19, 0x3f, 0x11, 0x18, 0x0b, + 0x0a, 0x07, 0x18, 0x0d, 0x07, 0x24, 0x2c, 0x2b, 0x21, 0x32, 0x10, 0x48, + 0x2a, 0x2d, 0x1e, 0x1a, 0x01, 0x0c, 0x43, 0x59, 0x28, 0x4e, 0x1c, 0x0d, + 0x5d, 0x24, 0x14, 0x0a, 0x05, 0x1f, 0x24, 0x32, 0x46, 0x3e, 0x5f, 0x3e, + 0x44, 0x1a, 0x30, 0x15, 0x0d, 0x07, 0x18, 0x2b, 0x03, 0x0d, 0x1a, 0x28, + 0x28, 0x57, 0xb2, 0x29, 0x27, 0x40, 0x2c, 0x23, 0x16, 0x63, 0x58, 0x1a, + 0x0a, 0x18, 0x11, 0x23, 0x08, 0x1b, 0x29, 0x05, 0x04, 0x0b, 0x15, 0x0d, + 0x14, 0x0b, 0x2a, 0x29, 0x5a, 0x62, 0x01, 0x19, 0x1e, 0x05, 0x05, 0x26, + 0x42, 0x42, 0x2a, 0x2a, 0x3f, 0x0d, 0x0f, 0x09, 0x05, 0x07, 0x01, 0x0b, + 0x25, 0x3e, 0x0d, 0x17, 0x11, 0x01, 0x03, 0x0d, 0x13, 0x20, 0x19, 0x11, + 0x03, 0x02, 0x01, 0x04, 0x11, 0x04, 0x05, 0x1b, 0x3d, 0x10, 0x29, 0x20, + 0x04, 0x04, 0x0a, 0x07, 0x04, 0x1f, 0x15, 0x20, 0x3e, 0x0f, 0x2a, 0x1e, + 0x00, 0x00, 0x00, 0x1b, 0x01, 0x4a, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x07, 0x00, 0x27, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x02, 0x00, 0x2e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x0c, 0x00, 0x1b, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0d, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0e, 0x00, 0x1a, 0x00, 0x30, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x4a, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x01, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x98, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x03, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x04, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x05, 0x00, 0x04, 0x00, 0xa6, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x06, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x0d, 0x00, 0x36, 0x00, 0x4a, 0x00, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x00, 0x0e, 0x00, 0x34, 0x00, 0xaa, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x00, 0x00, 0x36, 0x00, 0x4a, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x01, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x02, 0x00, 0x0e, 0x00, 0x98, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x03, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x04, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x05, 0x00, 0x04, 0x00, 0xa6, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x06, 0x00, 0x18, 0x00, 0x80, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x0d, 0x00, 0x36, 0x00, 0x4a, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, + 0x00, 0x0e, 0x00, 0x34, 0x00, 0xaa, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, + 0x67, 0x68, 0x74, 0x20, 0x28, 0x63, 0x29, 0x20, 0x32, 0x30, 0x31, 0x35, + 0x2c, 0x20, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x53, 0x70, 0x69, + 0x64, 0x65, 0x72, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x52, 0x65, 0x67, + 0x75, 0x6c, 0x61, 0x72, 0x56, 0x31, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, + 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x73, 0x2e, 0x73, 0x69, 0x6c, + 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x4f, 0x46, 0x4c, 0x00, 0x43, 0x00, 0x6f, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 0x68, + 0x00, 0x74, 0x00, 0x20, 0x00, 0x28, 0x00, 0x63, 0x00, 0x29, 0x00, 0x20, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x35, 0x00, 0x2c, 0x00, 0x20, + 0x00, 0x47, 0x00, 0x6f, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x2e, 0x00, 0x53, 0x00, 0x70, 0x00, 0x69, 0x00, 0x64, 0x00, 0x65, + 0x00, 0x72, 0x00, 0x53, 0x00, 0x79, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x6f, + 0x00, 0x6c, 0x00, 0x52, 0x00, 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x6c, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x56, 0x00, 0x31, 0x00, 0x68, 0x00, 0x74, + 0x00, 0x74, 0x00, 0x70, 0x00, 0x3a, 0x00, 0x2f, 0x00, 0x2f, 0x00, 0x73, + 0x00, 0x63, 0x00, 0x72, 0x00, 0x69, 0x00, 0x70, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x2e, 0x00, 0x73, 0x00, 0x69, 0x00, 0x6c, 0x00, 0x2e, 0x00, 0x6f, + 0x00, 0x72, 0x00, 0x67, 0x00, 0x2f, 0x00, 0x4f, 0x00, 0x46, 0x00, 0x4c, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x66, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xff, 0xff, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0c, 0x00, 0x14, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00 +}; + +/** + * There does not appear to be a publicly accessible API for determining if lcd + * font smoothing will be applied if we request it. The main issue is that if + * smoothing is applied a gamma of 2.0 will be used, if not a gamma of 1.0. + */ +SkCTFontSmoothBehavior SkCTFontGetSmoothBehavior() { + static SkCTFontSmoothBehavior gSmoothBehavior = []{ + uint32_t noSmoothBitmap[16][16] = {}; + uint32_t smoothBitmap[16][16] = {}; + + SkUniqueCFRef colorspace(CGColorSpaceCreateDeviceRGB()); + SkUniqueCFRef noSmoothContext( + CGBitmapContextCreate(&noSmoothBitmap, 16, 16, 8, 16*4, + colorspace.get(), kBitmapInfoRGB)); + SkUniqueCFRef smoothContext( + CGBitmapContextCreate(&smoothBitmap, 16, 16, 8, 16*4, + colorspace.get(), kBitmapInfoRGB)); + + SkUniqueCFRef data(CFDataCreateWithBytesNoCopy( + kCFAllocatorDefault, kSpiderSymbol_ttf, SK_ARRAY_COUNT(kSpiderSymbol_ttf), + kCFAllocatorNull)); + SkUniqueCFRef desc( + CTFontManagerCreateFontDescriptorFromData(data.get())); + SkUniqueCFRef ctFont(CTFontCreateWithFontDescriptor(desc.get(), 16, nullptr)); + SkASSERT(ctFont); + + CGContextSetShouldSmoothFonts(noSmoothContext.get(), false); + CGContextSetShouldAntialias(noSmoothContext.get(), true); + CGContextSetTextDrawingMode(noSmoothContext.get(), kCGTextFill); + CGContextSetGrayFillColor(noSmoothContext.get(), 1, 1); + + CGContextSetShouldSmoothFonts(smoothContext.get(), true); + CGContextSetShouldAntialias(smoothContext.get(), true); + CGContextSetTextDrawingMode(smoothContext.get(), kCGTextFill); + CGContextSetGrayFillColor(smoothContext.get(), 1, 1); + + CGPoint point = CGPointMake(0, 3); + CGGlyph spiderGlyph = 3; + CTFontDrawGlyphs(ctFont.get(), &spiderGlyph, &point, 1, noSmoothContext.get()); + CTFontDrawGlyphs(ctFont.get(), &spiderGlyph, &point, 1, smoothContext.get()); + + // For debugging. + //SkUniqueCFRef image(CGBitmapContextCreateImage(noSmoothContext())); + //SkUniqueCFRef image(CGBitmapContextCreateImage(smoothContext())); + + SkCTFontSmoothBehavior smoothBehavior = SkCTFontSmoothBehavior::none; + for (int x = 0; x < 16; ++x) { + for (int y = 0; y < 16; ++y) { + uint32_t smoothPixel = smoothBitmap[x][y]; + uint32_t r = (smoothPixel >> 16) & 0xFF; + uint32_t g = (smoothPixel >> 8) & 0xFF; + uint32_t b = (smoothPixel >> 0) & 0xFF; + if (r != g || r != b) { + return SkCTFontSmoothBehavior::subpixel; + } + if (noSmoothBitmap[x][y] != smoothPixel) { + smoothBehavior = SkCTFontSmoothBehavior::some; + } + } + } + return smoothBehavior; + }(); + return gSmoothBehavior; +} + +#endif diff --git a/src/utils/mac/SkCTFontSmoothBehavior.h b/src/utils/mac/SkCTFontSmoothBehavior.h new file mode 100644 index 0000000000000..126cdb3ab2db1 --- /dev/null +++ b/src/utils/mac/SkCTFontSmoothBehavior.h @@ -0,0 +1,23 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkCTFontSmoothBehavior_DEFINED +#define SkCTFontSmoothBehavior_DEFINED + +#include "include/core/SkTypes.h" +#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_IOS) + +enum class SkCTFontSmoothBehavior { + none, // SmoothFonts produces no effect. + some, // SmoothFonts produces some effect, but not subpixel coverage. + subpixel, // SmoothFonts produces some effect and provides subpixel coverage. +}; + +SkCTFontSmoothBehavior SkCTFontGetSmoothBehavior(); + +#endif +#endif // SkCTFontSmoothBehavior_DEFINED diff --git a/src/utils/mac/SkStream_mac.cpp b/src/utils/mac/SkStream_mac.cpp deleted file mode 100644 index b299fced492a8..0000000000000 --- a/src/utils/mac/SkStream_mac.cpp +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -// Remove file after it is removed from downstream builds. diff --git a/src/xps/SkXPSDevice.cpp b/src/xps/SkXPSDevice.cpp index 174a0bc4125fe..ec4ba68fc0318 100644 --- a/src/xps/SkXPSDevice.cpp +++ b/src/xps/SkXPSDevice.cpp @@ -1632,7 +1632,7 @@ void SkXPSDevice::drawPath(const SkPath& platonicPath, return; } } - // The xpsCompatiblePath is now inverse even odd, so fall through. + [[fallthrough]]; // The xpsCompatiblePath is now inverse even odd, so fall through. case SkPathFillType::kInverseEvenOdd: { const SkRect universe = SkRect::MakeLTRB( 0, 0, diff --git a/tests/AdvancedBlendTest.cpp b/tests/AdvancedBlendTest.cpp index 176bf83a7edcf..b69dd2e31a3d0 100644 --- a/tests/AdvancedBlendTest.cpp +++ b/tests/AdvancedBlendTest.cpp @@ -6,7 +6,7 @@ */ #include "include/core/SkBlendMode.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkColorData.h" #include "src/gpu/GrBlend.h" @@ -26,7 +26,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AdvancedBlendTest, reporter, ctxInfo) { static constexpr auto opaque = GrProcessorAnalysisColor::Opaque::kYes; static constexpr auto coverage = GrProcessorAnalysisCoverage::kSingleChannel; - const GrCaps& caps = *ctxInfo.grContext()->priv().caps(); + const GrCaps& caps = *ctxInfo.directContext()->priv().caps(); for (int mode = (int)SkBlendMode::kLastMode; mode > (int)SkBlendMode::kLastCoeffMode; --mode) { const SkBlendMode blendMode = (SkBlendMode)mode; diff --git a/tests/ApplyGammaTest.cpp b/tests/ApplyGammaTest.cpp index f2a16e9b2c1ee..904d94f6e7e54 100644 --- a/tests/ApplyGammaTest.cpp +++ b/tests/ApplyGammaTest.cpp @@ -17,7 +17,7 @@ #include "include/core/SkScalar.h" #include "include/core/SkSurface.h" #include "include/core/SkTypes.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkTemplates.h" #include "src/core/SkUtils.h" @@ -94,7 +94,7 @@ bool check_gamma(uint32_t src, uint32_t dst, bool toSRGB, float error, } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ApplyGamma, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); static constexpr SkISize kBaseSize{256, 256}; static const size_t kRowBytes = sizeof(uint32_t) * kBaseSize.fWidth; diff --git a/tests/BackendAllocationTest.cpp b/tests/BackendAllocationTest.cpp index 443f39b221b62..5ebd917751be3 100644 --- a/tests/BackendAllocationTest.cpp +++ b/tests/BackendAllocationTest.cpp @@ -8,7 +8,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" #include "include/core/SkSurfaceCharacterization.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/gpu/GrContextPriv.h" #include "src/image/SkImage_Base.h" @@ -29,6 +29,7 @@ #endif static void wait_on_backend_work_to_finish(GrContext* context, bool* finishedCreate) { + context->submit(); while (finishedCreate && !(*finishedCreate)) { context->checkAsyncWorkCompletion(); } @@ -154,7 +155,13 @@ static bool isBGRA8(const GrBackendFormat& format) { return false; #endif case GrBackendApi::kDawn: +#ifdef SK_DAWN + wgpu::TextureFormat dawnFormat; + format.asDawnFormat(&dawnFormat); + return dawnFormat == wgpu::TextureFormat::BGRA8Unorm; +#else return false; +#endif case GrBackendApi::kMock: { SkImage::CompressionType compression = format.asMockCompressionType(); if (compression != SkImage::CompressionType::kNone) { @@ -568,7 +575,7 @@ void check_vk_layout(const GrBackendTexture& backendTex, VkLayout layout) { // SkSurface we can create in Ganesh, we can also create a backend texture that is compatible with // its characterization and then create a new surface that wraps that backend texture. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CharacterizationBackendAllocationTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); for (int ct = 0; ct <= kLastEnum_SkColorType; ++ct) { SkColorType colorType = static_cast(ct); @@ -655,7 +662,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CharacterizationBackendAllocationTest, report /////////////////////////////////////////////////////////////////////////////// DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ColorTypeBackendAllocationTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrCaps* caps = context->priv().caps(); constexpr SkColor4f kTransCol { 0, 0.25f, 0.75f, 0.5f }; @@ -821,7 +828,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ColorTypeBackendAllocationTest, reporter, ctx DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GLBackendAllocationTest, reporter, ctxInfo) { sk_gpu_test::GLTestContext* glCtx = ctxInfo.glContext(); GrGLStandard standard = glCtx->gl()->fStandard; - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrGLCaps* glCaps = static_cast(context->priv().caps()); constexpr SkColor4f kTransCol { 0, 0.25f, 0.75f, 0.5f }; @@ -869,97 +876,100 @@ DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GLBackendAllocationTest, reporter, ctxInfo) { }; for (auto combo : combinations) { - GrBackendFormat format = GrBackendFormat::MakeGL(combo.fFormat, GR_GL_TEXTURE_2D); - - if (!glCaps->isFormatTexturable(format)) { - continue; - } + for (GrGLenum target : {GR_GL_TEXTURE_2D, GR_GL_TEXTURE_RECTANGLE}) { + GrBackendFormat format = GrBackendFormat::MakeGL(combo.fFormat, target); - if (GrColorType::kBGRA_8888 == combo.fColorType || - GrColorType::kBGRA_1010102 == combo.fColorType) { - // We allow using a GL_RGBA8 or GR_GL_RGB10_A2 texture as BGRA on desktop GL but not ES - if (kGL_GrGLStandard != standard && - (GR_GL_RGBA8 == combo.fFormat || GR_GL_RGB10_A2 == combo.fFormat)) { + if (!glCaps->isFormatTexturable(format)) { continue; } - } - for (auto mipMapped : { GrMipMapped::kNo, GrMipMapped::kYes }) { - if (GrMipMapped::kYes == mipMapped && !glCaps->mipMapSupport()) { - continue; + if (GrColorType::kBGRA_8888 == combo.fColorType || + GrColorType::kBGRA_1010102 == combo.fColorType) { + // We allow using a GL_RGBA8 or GR_GL_RGB10_A2 texture as BGRA on desktop GL but not + // ES + if (kGL_GrGLStandard != standard && + (GR_GL_RGBA8 == combo.fFormat || GR_GL_RGB10_A2 == combo.fFormat)) { + continue; + } } - for (auto renderable : { GrRenderable::kNo, GrRenderable::kYes }) { - - if (GrRenderable::kYes == renderable) { - if (!glCaps->isFormatAsColorTypeRenderable(combo.fColorType, format)) { - continue; - } + for (auto mipMapped : {GrMipMapped::kNo, GrMipMapped::kYes}) { + if (GrMipMapped::kYes == mipMapped && + (!glCaps->mipMapSupport() || target == GR_GL_TEXTURE_RECTANGLE)) { + continue; } - { - auto uninitCreateMtd = [format](GrContext* context, GrMipMapped mipMapped, - GrRenderable renderable) { - return context->createBackendTexture(32, 32, format, - mipMapped, renderable, - GrProtected::kNo); - }; - - test_wrapping(context, reporter, uninitCreateMtd, - combo.fColorType, mipMapped, renderable, nullptr); - } + for (auto renderable : {GrRenderable::kNo, GrRenderable::kYes}) { + if (GrRenderable::kYes == renderable) { + if (!glCaps->isFormatAsColorTypeRenderable(combo.fColorType, format)) { + continue; + } + } - { - // We're creating backend textures without specifying a color type "view" of - // them at the public API level. Therefore, Ganesh will not apply any swizzles - // before writing the color to the texture. However, our validation code does - // rely on interpreting the texture contents via a SkColorType and therefore - // swizzles may be applied during the read step. - // Ideally we'd update our validation code to use a "raw" read that doesn't - // impose a color type but for now we just munge the data we upload to match the - // expectation. - GrSwizzle swizzle; - switch (combo.fColorType) { - case GrColorType::kAlpha_8: - swizzle = GrSwizzle("aaaa"); - break; - case GrColorType::kAlpha_16: - swizzle = GrSwizzle("aaaa"); - break; - case GrColorType::kAlpha_F16: - swizzle = GrSwizzle("aaaa"); - break; - default: - break; + { + auto uninitCreateMtd = [format](GrContext* context, GrMipMapped mipMapped, + GrRenderable renderable) { + return context->createBackendTexture(32, 32, format, mipMapped, + renderable, GrProtected::kNo); + }; + + test_wrapping(context, reporter, uninitCreateMtd, combo.fColorType, + mipMapped, renderable, nullptr); } - bool finishedBackendCreation = false; - bool* finishedPtr = &finishedBackendCreation; + { + // We're creating backend textures without specifying a color type "view" of + // them at the public API level. Therefore, Ganesh will not apply any + // swizzles before writing the color to the texture. However, our validation + // code does rely on interpreting the texture contents via a SkColorType and + // therefore swizzles may be applied during the read step. Ideally we'd + // update our validation code to use a "raw" read that doesn't impose a + // color type but for now we just munge the data we upload to match the + // expectation. + GrSwizzle swizzle; + switch (combo.fColorType) { + case GrColorType::kAlpha_8: + swizzle = GrSwizzle("aaaa"); + break; + case GrColorType::kAlpha_16: + swizzle = GrSwizzle("aaaa"); + break; + case GrColorType::kAlpha_F16: + swizzle = GrSwizzle("aaaa"); + break; + default: + break; + } - auto createWithColorMtd = [format, swizzle, finishedPtr]( - GrContext* context, const SkColor4f& color, GrMipMapped mipMapped, - GrRenderable renderable) { - auto swizzledColor = swizzle.applyTo(color); - return context->createBackendTexture(32, 32, format, swizzledColor, - mipMapped, renderable, - GrProtected::kNo, mark_signaled, - finishedPtr); - }; - // We make our comparison color using SkPixmap::erase(color) on a pixmap of - // combo.fColorType and then calling SkPixmap::readPixels(). erase() will premul - // the color passed to it. However, createBackendTexture() that takes a - // SkColor4f is color type/alpha type unaware and will simply compute luminance - //from the r, g, b, channels. - SkColor4f color = combo.fColor; - if (combo.fColorType == GrColorType::kGray_8) { - color = {color.fR * color.fA, - color.fG * color.fA, - color.fB * color.fA, - 1.f}; - } + bool finishedBackendCreation = false; + bool* finishedPtr = &finishedBackendCreation; + + auto createWithColorMtd = [format, swizzle, finishedPtr]( + GrContext* context, + const SkColor4f& color, + GrMipMapped mipMapped, + GrRenderable renderable) { + auto swizzledColor = swizzle.applyTo(color); + return context->createBackendTexture( + 32, 32, format, swizzledColor, mipMapped, renderable, + GrProtected::kNo, mark_signaled, finishedPtr); + }; + // We make our comparison color using SkPixmap::erase(color) on a pixmap of + // combo.fColorType and then calling SkPixmap::readPixels(). erase() will + // premul the color passed to it. However, createBackendTexture() that takes + // a SkColor4f is color type/alpha type unaware and will simply compute + // luminance from the r, g, b, channels. + SkColor4f color = combo.fColor; + if (combo.fColorType == GrColorType::kGray_8) { + color = {color.fR * color.fA, + color.fG * color.fA, + color.fB * color.fA, + 1.f}; + } - test_color_init(context, reporter, createWithColorMtd, combo.fColorType, color, - mipMapped, renderable, finishedPtr); + test_color_init(context, reporter, createWithColorMtd, combo.fColorType, + color, mipMapped, renderable, finishedPtr); + } } } } @@ -975,7 +985,7 @@ DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GLBackendAllocationTest, reporter, ctxInfo) { #include "src/gpu/vk/GrVkCaps.h" DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkBackendAllocationTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrVkCaps* vkCaps = static_cast(context->priv().caps()); constexpr SkColor4f kTransCol { 0, 0.25f, 0.75f, 0.5f }; diff --git a/tests/BackendSurfaceMutableStateTest.cpp b/tests/BackendSurfaceMutableStateTest.cpp index 14907ab58ffc2..4ae2ebe861944 100644 --- a/tests/BackendSurfaceMutableStateTest.cpp +++ b/tests/BackendSurfaceMutableStateTest.cpp @@ -7,19 +7,20 @@ #include "include/core/SkImage.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/vk/GrVkTypes.h" +#include "src/gpu/GrContextPriv.h" #include "src/gpu/GrTexture.h" #include "src/gpu/GrTextureProxy.h" #include "src/image/SkImage_Base.h" #include "tests/Test.h" #ifdef SK_VULKAN - +#include "src/gpu/vk/GrVkGpu.h" #include "src/gpu/vk/GrVkTexture.h" DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkBackendSurfaceMutableStateTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrBackendFormat format = GrBackendFormat::MakeVk(VK_FORMAT_R8G8B8A8_UNORM); GrBackendTexture backendTex = context->createBackendTexture( @@ -102,6 +103,41 @@ DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkBackendSurfaceMutableStateTest, reporter, ctxIn REPORTER_ASSERT(reporter, initLayout == info.fImageLayout); REPORTER_ASSERT(reporter, initQueue == info.fCurrentQueueFamily); + // Test using the setBackendTextureStateAPI. Unlike the previous test this will actually add + // real transitions to the image so we need to be careful about doing actual valid transitions. + GrVkGpu* gpu = static_cast(context->priv().getGpu()); + + context->setBackendTextureState(backendTex, newState); + + REPORTER_ASSERT(reporter, backendTex.getVkImageInfo(&info)); + REPORTER_ASSERT(reporter, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL == info.fImageLayout); + REPORTER_ASSERT(reporter, gpu->queueIndex() == info.fCurrentQueueFamily); + + // To test queue transitions, we don't have any other valid queue available so instead we try + // to transition to external queue. + if (gpu->vkCaps().supportsExternalMemory()) { + GrBackendSurfaceMutableState externalState(VK_IMAGE_LAYOUT_GENERAL, + VK_QUEUE_FAMILY_EXTERNAL); + + context->setBackendTextureState(backendTex, externalState); + + REPORTER_ASSERT(reporter, backendTex.getVkImageInfo(&info)); + REPORTER_ASSERT(reporter, VK_IMAGE_LAYOUT_GENERAL == info.fImageLayout); + REPORTER_ASSERT(reporter, VK_QUEUE_FAMILY_EXTERNAL == info.fCurrentQueueFamily); + + context->submit(); + + GrBackendSurfaceMutableState externalState2(VK_IMAGE_LAYOUT_GENERAL, initQueue); + context->setBackendTextureState(backendTex, externalState2); + + REPORTER_ASSERT(reporter, backendTex.getVkImageInfo(&info)); + REPORTER_ASSERT(reporter, VK_IMAGE_LAYOUT_GENERAL == info.fImageLayout); + REPORTER_ASSERT(reporter, gpu->queueIndex() == info.fCurrentQueueFamily); + } + + // We must submit this work before we try to delete the backend texture. + context->submit(true); + context->deleteBackendTexture(backendTex); } diff --git a/tests/BlendTest.cpp b/tests/BlendTest.cpp index 4be3330996bad..f0bfb934ce208 100644 --- a/tests/BlendTest.cpp +++ b/tests/BlendTest.cpp @@ -18,7 +18,7 @@ #include "include/core/SkSurface.h" #include "include/core/SkTypes.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/GrTypes.h" #include "include/private/GrTypesPriv.h" #include "src/gpu/GrCaps.h" @@ -89,7 +89,7 @@ DEF_TEST(Blend_byte_multiply, r) { namespace { static sk_sp create_gpu_surface_backend_texture_as_render_target( - GrContext* context, int sampleCnt, SkISize dimensions, SkColorType colorType, + GrDirectContext* context, int sampleCnt, SkISize dimensions, SkColorType colorType, GrSurfaceOrigin origin, sk_sp* backingSurface) { auto ct = SkColorTypeToGrColorType(colorType); auto format = context->priv().caps()->getDefaultBackendFormat(ct, GrRenderable::kYes); @@ -115,7 +115,7 @@ static sk_sp create_gpu_surface_backend_texture_as_render_target( // Tests blending to a surface with no texture available. DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ES2BlendWithNoTexture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); static constexpr SkISize kDimensions{10, 10}; const SkColorType kColorType = kRGBA_8888_SkColorType; diff --git a/tests/BlurTest.cpp b/tests/BlurTest.cpp index 4e80266924adf..255e720c3bde0 100644 --- a/tests/BlurTest.cpp +++ b/tests/BlurTest.cpp @@ -30,6 +30,7 @@ #include "include/effects/SkBlurDrawLooper.h" #include "include/effects/SkLayerDrawLooper.h" #include "include/effects/SkPerlinNoiseShader.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkFloatBits.h" #include "src/core/SkBlurMask.h" #include "src/core/SkBlurPriv.h" @@ -46,8 +47,6 @@ #include #include -class GrContext; - #define WRITE_CSV 0 /////////////////////////////////////////////////////////////////////////////// @@ -504,7 +503,7 @@ DEF_TEST(BlurAsABlur, reporter) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SmallBoxBlurBug, reporter, ctxInfo) { SkImageInfo info = SkImageInfo::MakeN32Premul(128, 128); - auto surface(SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, info)); + auto surface(SkSurface::MakeRenderTarget(ctxInfo.directContext(), SkBudgeted::kNo, info)); SkCanvas* canvas = surface->getCanvas(); SkRect r = SkRect::MakeXYWH(10, 10, 100, 100); @@ -706,7 +705,7 @@ DEF_TEST(BlurZeroSigma, reporter) { /////////////////////////////////////////////////////////////////////////////////////////// DEF_GPUTEST_FOR_RENDERING_CONTEXTS(BlurMaskBiggerThanDest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkImageInfo ii = SkImageInfo::Make(32, 32, kRGBA_8888_SkColorType, kPremul_SkAlphaType); diff --git a/tests/BulkRectTest.cpp b/tests/BulkRectTest.cpp index a4de4962807bb..f7d6900b85cb6 100644 --- a/tests/BulkRectTest.cpp +++ b/tests/BulkRectTest.cpp @@ -4,6 +4,8 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ + +#include "include/gpu/GrDirectContext.h" #include "src/core/SkBlendModePriv.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" @@ -215,9 +217,9 @@ static void run_test(GrContext* context, skiatest::Reporter* reporter, BulkRectT } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(BulkFillRectTest, reporter, ctxInfo) { - run_test(ctxInfo.grContext(), reporter, bulk_fill_rect_create_test); + run_test(ctxInfo.directContext(), reporter, bulk_fill_rect_create_test); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(BulkTextureRectTest, reporter, ctxInfo) { - run_test(ctxInfo.grContext(), reporter, bulk_texture_rect_create_test); + run_test(ctxInfo.directContext(), reporter, bulk_texture_rect_create_test); } diff --git a/tests/ClearTest.cpp b/tests/ClearTest.cpp index 73d168d3cde85..7969ca6fcd1a3 100644 --- a/tests/ClearTest.cpp +++ b/tests/ClearTest.cpp @@ -15,13 +15,12 @@ #include "include/core/SkRefCnt.h" #include "include/core/SkSurface.h" #include "include/core/SkTypes.h" -#include "include/gpu/GrContext.h" #include "include/gpu/GrContextOptions.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkColorData.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/gpu/GrColor.h" -#include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" #include "src/gpu/GrRenderTargetContext.h" #include "tests/Test.h" @@ -228,7 +227,7 @@ static void clear_op_test(skiatest::Reporter* reporter, GrContext* context) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ClearOp, reporter, ctxInfo) { // Regular clear - clear_op_test(reporter, ctxInfo.grContext()); + clear_op_test(reporter, ctxInfo.directContext()); // Force drawing for clears GrContextOptions options(ctxInfo.options()); @@ -294,7 +293,7 @@ void fullscreen_clear_with_layer_test(skiatest::Reporter* reporter, GrContext* c // From crbug.com/768134 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FullScreenClearWithLayers, reporter, ctxInfo) { // Regular clear - fullscreen_clear_with_layer_test(reporter, ctxInfo.grContext()); + fullscreen_clear_with_layer_test(reporter, ctxInfo.directContext()); // Use draws for clears GrContextOptions options(ctxInfo.options()); diff --git a/tests/ClipBoundsTest.cpp b/tests/ClipBoundsTest.cpp index 2987947a4ad15..03973c2768cea 100644 --- a/tests/ClipBoundsTest.cpp +++ b/tests/ClipBoundsTest.cpp @@ -41,9 +41,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrClipBounds, reporter, ctxInfo) { REPORTER_ASSERT(reporter, isIntersectionOfRects); // wrap the SkClipStack in a GrClip - GrClipStackClip clipData(&stack); + GrClipStackClip clipData({kXSize, kYSize}, &stack); - SkIRect devGrClipBound = clipData.getConservativeBounds(kXSize, kYSize); + SkIRect devGrClipBound = clipData.getConservativeBounds(); // make sure that GrClip is behaving itself REPORTER_ASSERT(reporter, intScreen == devGrClipBound); diff --git a/tests/ClipStackTest.cpp b/tests/ClipStackTest.cpp index 1b4979d373188..6504d6493837d 100644 --- a/tests/ClipStackTest.cpp +++ b/tests/ClipStackTest.cpp @@ -20,8 +20,9 @@ #include "include/core/SkString.h" #include "include/core/SkSurface.h" #include "include/core/SkTypes.h" +#include "include/effects/SkGradientShader.h" #include "include/gpu/GrConfig.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/GrResourceKey.h" #include "include/private/SkTemplates.h" #include "include/utils/SkRandom.h" @@ -294,8 +295,9 @@ static void test_bounds(skiatest::Reporter* reporter, SkPathFillType::kEvenOdd); switch (primType) { + case SkClipStack::Element::DeviceSpaceType::kShader: case SkClipStack::Element::DeviceSpaceType::kEmpty: - SkDEBUGFAIL("Don't call this with kEmpty."); + SkDEBUGFAIL("Don't call this with kEmpty or kShader."); break; case SkClipStack::Element::DeviceSpaceType::kRect: stack.clipRect(rectA, SkMatrix::I(), kIntersect_SkClipOp, false); @@ -846,6 +848,7 @@ static void set_region_to_stack(const SkClipStack& stack, const SkIRect& bounds, elemRegion.setPath(path, boundsRgn); break; } + region->op(elemRegion, (SkRegion::Op)element->getOp()); } } @@ -924,6 +927,16 @@ static void add_oval(const SkRect& rect, bool invert, SkClipOp op, SkClipStack* stack->clipPath(path, SkMatrix::I(), op, doAA); }; +static void add_shader(const SkRect& rect, bool invert, SkClipOp op, SkClipStack* stack, + bool doAA) { + // invert, op, and doAA don't apply to shaders at the SkClipStack level; this is handled earlier + // in the SkCanvas->SkDevice stack. Use rect to produce unique gradients, however. + SkPoint corners[2] = { {rect.fLeft, rect.fTop}, {rect.fRight, rect.fBottom} }; + SkColor colors[2] = { SK_ColorBLACK, SK_ColorTRANSPARENT }; + auto gradient = SkGradientShader::MakeLinear(corners, colors, nullptr, 2, SkTileMode::kDecal); + stack->clipShader(std::move(gradient)); +} + static void add_elem_to_stack(const SkClipStack::Element& element, SkClipStack* stack) { switch (element.getDeviceSpaceType()) { case SkClipStack::Element::DeviceSpaceType::kRect: @@ -938,6 +951,10 @@ static void add_elem_to_stack(const SkClipStack::Element& element, SkClipStack* stack->clipPath(element.getDeviceSpacePath(), SkMatrix::I(), element.getOp(), element.isAA()); break; + case SkClipStack::Element::DeviceSpaceType::kShader: + SkDEBUGFAIL("Why did the reducer put this in the mask elements."); + stack->clipShader(element.refShader()); + break; case SkClipStack::Element::DeviceSpaceType::kEmpty: SkDEBUGFAIL("Why did the reducer produce an explicit empty."); stack->clipEmpty(); @@ -945,7 +962,7 @@ static void add_elem_to_stack(const SkClipStack::Element& element, SkClipStack* } } -static void test_reduced_clip_stack(skiatest::Reporter* reporter) { +static void test_reduced_clip_stack(skiatest::Reporter* reporter, bool enableClipShader) { // We construct random clip stacks, reduce them, and then rasterize both versions to verify that // they are equal. @@ -986,6 +1003,7 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) { add_rect, add_round_rect, add_oval, + add_shader }; SkRandom r; @@ -999,7 +1017,9 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) { int numElems = r.nextRangeU(kMinElemsPerTest, kMaxElemsPerTest); bool doAA = r.nextBiasedBool(kFractionAntialiased); for (int e = 0; e < numElems; ++e) { - SkClipOp op = kOps[r.nextULessThan(SK_ARRAY_COUNT(kOps))]; + size_t opLimit = enableClipShader ? ((size_t) kIntersect_SkClipOp + 1) + : SK_ARRAY_COUNT(kOps); + SkClipOp op = kOps[r.nextULessThan(opLimit)]; if (op == kReplace_SkClipOp) { if (r.nextU() % kReplaceDiv) { --e; @@ -1034,8 +1054,11 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) { bool invert = r.nextBiasedBool(kFractionInverted); - kElementFuncs[r.nextULessThan(SK_ARRAY_COUNT(kElementFuncs))](rect, invert, op, &stack, - doAA); + size_t functionLimit = SK_ARRAY_COUNT(kElementFuncs); + if (!enableClipShader) { + functionLimit--; + } + kElementFuncs[r.nextULessThan(functionLimit)](rect, invert, op, &stack, doAA); if (doSave) { stack.save(); } @@ -1077,6 +1100,10 @@ static void test_reduced_clip_stack(skiatest::Reporter* reporter) { for (ElementList::Iter iter(reduced->maskElements()); iter.get(); iter.next()) { add_elem_to_stack(*iter.get(), &reducedStack); } + if (reduced->hasShader()) { + REPORTER_ASSERT(reporter, enableClipShader); + reducedStack.clipShader(reduced->shader()); + } SkIRect scissor = reduced->hasScissor() ? reduced->scissor() : kIBounds; @@ -1192,8 +1219,8 @@ static void test_reduced_clip_stack_genid(skiatest::Reporter* reporter) { // Other tests: { XYWH(0, 0, 100, 100), 4, genIDD, GrReducedClip::InitialState::kAllOut, stackBounds }, - // Rect in the middle, touches none. - { XYWH(26, 26, 24, 24), 0, SkClipStack::kInvalidGenID, GrReducedClip::InitialState::kAllOut, IXYWH(26, 26, 24, 24) }, + // Rect in the middle, touches none (so should not be drawn) + { XYWH(26, 26, 24, 24), 0, SkClipStack::kInvalidGenID, GrReducedClip::InitialState::kAllOut, SkIRect::MakeEmpty() }, // Rect in the middle, touches all the rects. GenID is the last rect. { XYWH(24, 24, 27, 27), 4, genIDD, GrReducedClip::InitialState::kAllOut, IXYWH(24, 24, 27, 27) }, @@ -1208,17 +1235,16 @@ static void test_reduced_clip_stack_genid(skiatest::Reporter* reporter) { const GrReducedClip reduced(stack, testCases[i].testBounds, caps); REPORTER_ASSERT(reporter, reduced.maskElements().count() == testCases[i].reducedClipCount); - SkASSERT(reduced.maskElements().count() == testCases[i].reducedClipCount); if (reduced.maskElements().count()) { REPORTER_ASSERT(reporter, reduced.maskGenID() == testCases[i].reducedGenID); - SkASSERT(reduced.maskGenID() == testCases[i].reducedGenID); } REPORTER_ASSERT(reporter, reduced.initialState() == testCases[i].initialState); - SkASSERT(reduced.initialState() == testCases[i].initialState); - REPORTER_ASSERT(reporter, reduced.hasScissor()); - SkASSERT(reduced.hasScissor()); - REPORTER_ASSERT(reporter, reduced.scissor() == testCases[i].clipIRect); - SkASSERT(reduced.scissor() == testCases[i].clipIRect); + + bool expectsScissor = !testCases[i].clipIRect.isEmpty(); + REPORTER_ASSERT(reporter, expectsScissor == reduced.hasScissor()); + if (expectsScissor) { + REPORTER_ASSERT(reporter, reduced.scissor() == testCases[i].clipIRect); + } } } } @@ -1509,7 +1535,8 @@ DEF_TEST(ClipStack, reporter) { test_quickContains(reporter); test_invfill_diff_bug(reporter); - test_reduced_clip_stack(reporter); + test_reduced_clip_stack(reporter, /* clipShader */ false); + test_reduced_clip_stack(reporter, /* clipShader */ true); test_reduced_clip_stack_genid(reporter); test_reduced_clip_stack_no_aa_crash(reporter); test_reduced_clip_stack_aa(reporter); @@ -1528,7 +1555,7 @@ sk_sp GrClipStackClip::testingOnly_createClipMask(GrContext* con DEF_GPUTEST_FOR_ALL_CONTEXTS(ClipMaskCache, reporter, ctxInfo) { // This test uses resource key tags which only function in debug builds. #ifdef SK_DEBUG - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkClipStack stack; SkPath path; @@ -1536,6 +1563,8 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ClipMaskCache, reporter, ctxInfo) { path.addCircle(15, 15, 8); path.setFillType(SkPathFillType::kEvenOdd); + SkIRect stackBounds = path.getBounds().roundOut(); + static const char* kTag = GrClipStackClip::kMaskTestTag; GrResourceCache* cache = context->priv().getResourceCache(); @@ -1546,7 +1575,8 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ClipMaskCache, reporter, ctxInfo) { m.setTranslate(0.5, 0.5); stack.save(); stack.clipPath(path, m, SkClipOp::kIntersect, true); - sk_sp mask = GrClipStackClip(&stack).testingOnly_createClipMask(context); + sk_sp mask = + GrClipStackClip(stackBounds.size(), &stack).testingOnly_createClipMask(context); mask->instantiate(context->priv().resourceProvider()); GrTexture* tex = mask->peekTexture(); REPORTER_ASSERT(reporter, 0 == strcmp(tex->getUniqueKey().tag(), kTag)); diff --git a/tests/CodecAnimTest.cpp b/tests/CodecAnimTest.cpp index c052ed2e7d531..9f7e1152236e7 100644 --- a/tests/CodecAnimTest.cpp +++ b/tests/CodecAnimTest.cpp @@ -155,21 +155,13 @@ DEF_TEST(Codec_frames, r) { { 0, kNoFrame, kNoFrame, kNoFrame, 4, 4 }, { kOpaque, kOpaque, kUnpremul, kOpaque, kUnpremul, kUnpremul }, { 525, 500, 525, 437, 609, 729, 444 }, -#ifdef SK_LEGACY_WEBP_LOOP_COUNT - 7, -#else 6, -#endif { kKeep, kKeep, kKeep, kKeep, kKeep, kKeep, kKeep } }, { "images/required.webp", 7, { 0, 1, 1, kNoFrame, 4, 4 }, { kOpaque, kUnpremul, kUnpremul, kOpaque, kOpaque, kOpaque }, { 100, 100, 100, 100, 100, 100, 100 }, -#ifdef SK_LEGACY_WEBP_LOOP_COUNT - 1, -#else 0, -#endif { kKeep, kRestoreBG, kKeep, kKeep, kKeep, kRestoreBG, kKeep } }, }; diff --git a/tests/CompressedBackendAllocationTest.cpp b/tests/CompressedBackendAllocationTest.cpp index 794a874550499..1fa6ea8a12aa2 100644 --- a/tests/CompressedBackendAllocationTest.cpp +++ b/tests/CompressedBackendAllocationTest.cpp @@ -6,10 +6,11 @@ */ #include "include/core/SkCanvas.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkCompressedDataUtils.h" #include "src/core/SkMipMap.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrContextPriv.h" #include "src/image/SkImage_Base.h" #include "tests/Test.h" @@ -35,9 +36,8 @@ static void check_solid_pixmap(skiatest::Reporter* reporter, // Create an SkImage to wrap 'backendTex' sk_sp create_image(GrContext* context, const GrBackendTexture& backendTex) { - const GrCaps* caps = context->priv().caps(); - - SkImage::CompressionType compression = caps->compressionType(backendTex.getBackendFormat()); + SkImage::CompressionType compression = + GrBackendFormatToCompressionType(backendTex.getBackendFormat()); SkAlphaType at = SkCompressionTypeIsOpaque(compression) ? kOpaque_SkAlphaType : kPremul_SkAlphaType; @@ -236,7 +236,7 @@ static void test_compressed_data_init(GrContext* context, } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CompressedBackendAllocationTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrCaps* caps = context->priv().caps(); struct { diff --git a/tests/CopySurfaceTest.cpp b/tests/CopySurfaceTest.cpp index b3eb1747dd3d9..2780daf7dac05 100644 --- a/tests/CopySurfaceTest.cpp +++ b/tests/CopySurfaceTest.cpp @@ -10,7 +10,7 @@ #include "include/core/SkRect.h" #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/GrTypes.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkTemplates.h" @@ -31,7 +31,8 @@ #include DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto direct = ctxInfo.directContext(); + static const int kW = 10; static const int kH = 10; static const size_t kRowBytes = sizeof(uint32_t) * kW; @@ -78,10 +79,10 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { for (auto dstPoint : kDstPoints) { for (auto ii: kImageInfos) { auto src = sk_gpu_test::MakeTextureProxyFromData( - context, sRenderable, sOrigin, ii, srcPixels.get(), + direct, sRenderable, sOrigin, ii, srcPixels.get(), kRowBytes); auto dst = sk_gpu_test::MakeTextureProxyFromData( - context, dRenderable, dOrigin, ii, dstPixels.get(), + direct, dRenderable, dOrigin, ii, dstPixels.get(), kRowBytes); // Should always work if the color type is RGBA, but may not work @@ -93,7 +94,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { continue; } } else { - if (!context->defaultBackendFormat( + if (!direct->defaultBackendFormat( kBGRA_8888_SkColorType, GrRenderable::kNo).isValid()) { continue; } @@ -105,10 +106,10 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { } GrColorType grColorType = SkColorTypeToGrColorType(ii.colorType()); - GrSwizzle dstSwizzle = context->priv().caps()->getReadSwizzle( + GrSwizzle dstSwizzle = direct->priv().caps()->getReadSwizzle( dst->backendFormat(), grColorType); GrSurfaceProxyView dstView(std::move(dst), dOrigin, dstSwizzle); - auto dstContext = GrSurfaceContext::Make(context, + auto dstContext = GrSurfaceContext::Make(direct, std::move(dstView), grColorType, ii.alphaType(), nullptr); @@ -118,7 +119,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(CopySurface, reporter, ctxInfo) { result = dstContext->testCopy(src.get(), srcRect, dstPoint); } else if (dRenderable == GrRenderable::kYes) { SkASSERT(dstContext->asRenderTargetContext()); - GrSwizzle srcSwizzle = context->priv().caps()->getReadSwizzle( + GrSwizzle srcSwizzle = direct->priv().caps()->getReadSwizzle( src->backendFormat(), grColorType); GrSurfaceProxyView view(std::move(src), sOrigin, srcSwizzle); result = dstContext->asRenderTargetContext()->blitTexture( diff --git a/tests/DefaultPathRendererTest.cpp b/tests/DefaultPathRendererTest.cpp index 26799ddd842ca..8d88e762cbdb4 100644 --- a/tests/DefaultPathRendererTest.cpp +++ b/tests/DefaultPathRendererTest.cpp @@ -17,8 +17,8 @@ #include "include/core/SkSurface.h" #include "include/core/SkTypes.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" #include "include/gpu/GrContextOptions.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/GrTypes.h" #include "include/private/GrTypesPriv.h" #include "include/private/SkColorData.h" @@ -92,13 +92,14 @@ static void run_test(GrContext* ctx, skiatest::Reporter* reporter) { GrPaint paint; const SkPMColor4f color = { 1.0f, 0.0f, 0.0f, 1.0f }; - auto fp = GrConstColorProcessor::Make(color, GrConstColorProcessor::InputMode::kIgnore); + auto fp = GrConstColorProcessor::Make(/*inputFP=*/nullptr, color, + GrConstColorProcessor::InputMode::kIgnore); paint.addColorFragmentProcessor(std::move(fp)); rtc->drawPath(nullptr, std::move(paint), GrAA::kNo, SkMatrix::I(), invPath, style); - rtc->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo()); + rtc->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo(), nullptr); } { @@ -110,7 +111,8 @@ static void run_test(GrContext* ctx, skiatest::Reporter* reporter) { GrPaint paint; const SkPMColor4f color = { 0.0f, 1.0f, 0.0f, 1.0f }; - auto fp = GrConstColorProcessor::Make(color, GrConstColorProcessor::InputMode::kIgnore); + auto fp = GrConstColorProcessor::Make(/*inputFP=*/nullptr, color, + GrConstColorProcessor::InputMode::kIgnore); paint.addColorFragmentProcessor(std::move(fp)); rtc->drawPath(nullptr, std::move(paint), GrAA::kNo, @@ -126,13 +128,12 @@ static void run_test(GrContext* ctx, skiatest::Reporter* reporter) { } } } - } DEF_GPUTEST_FOR_CONTEXTS(GrDefaultPathRendererTest, sk_gpu_test::GrContextFactory::IsRenderingContext, reporter, ctxInfo, only_allow_default) { - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); run_test(ctx, reporter); } diff --git a/tests/DeferredDisplayListTest.cpp b/tests/DeferredDisplayListTest.cpp index 18139dc643a46..a24a3efd2d0fe 100644 --- a/tests/DeferredDisplayListTest.cpp +++ b/tests/DeferredDisplayListTest.cpp @@ -22,8 +22,8 @@ #include "include/core/SkSurfaceProps.h" #include "include/core/SkTypes.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" #include "include/gpu/GrContextThreadSafeProxy.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/GrTypes.h" #include "include/gpu/gl/GrGLTypes.h" #include "include/private/GrTypesPriv.h" @@ -166,7 +166,7 @@ class SurfaceParameters { } // Create a DDL whose characterization captures the current settings - std::unique_ptr createDDL(GrContext* context) const { + sk_sp createDDL(GrContext* context) const { SkSurfaceCharacterization c = this->createCharacterization(context); SkAssertResult(c.isValid()); @@ -266,8 +266,9 @@ class SurfaceParameters { // Test out operator== && operator!= DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLOperatorEqTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); + bool mipMapSupport = context->priv().caps()->mipMapSupport(); for (int i = 0; i < SurfaceParameters::kNumParams; ++i) { SurfaceParameters params1(context); params1.modify(i); @@ -277,6 +278,12 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLOperatorEqTest, reporter, ctxInfo) { continue; // can happen on some platforms (ChromeOS) } + if (SurfaceParameters::kMipMipCount == i && !mipMapSupport) { + // If changing the mipmap setting won't result in a different surface characterization, + // skip this step. + continue; + } + for (int j = 0; j < SurfaceParameters::kNumParams; ++j) { SurfaceParameters params2(context); params2.modify(j); @@ -286,6 +293,12 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLOperatorEqTest, reporter, ctxInfo) { continue; // can happen on some platforms (ChromeOS) } + if (SurfaceParameters::kMipMipCount == j && !mipMapSupport) { + // If changing the mipmap setting won't result in a different surface + // characterization, skip this step. + continue; + } + if (i == j) { REPORTER_ASSERT(reporter, char1 == char2); } else { @@ -322,7 +335,7 @@ void DDLSurfaceCharacterizationTestImpl(GrContext* context, skiatest::Reporter* SkBitmap bitmap; bitmap.allocPixels(imageInfo); - std::unique_ptr ddl; + sk_sp ddl; // First, create a DDL using the stock SkSurface parameters { @@ -338,7 +351,7 @@ void DDLSurfaceCharacterizationTestImpl(GrContext* context, skiatest::Reporter* return; } - REPORTER_ASSERT(reporter, s->draw(ddl.get())); + REPORTER_ASSERT(reporter, s->draw(ddl)); s->readPixels(imageInfo, bitmap.getPixels(), bitmap.rowBytes(), 0, 0); context->flushAndSubmit(); gpu->testingOnly_flushGpuAndSync(); @@ -399,7 +412,7 @@ void DDLSurfaceCharacterizationTestImpl(GrContext* context, skiatest::Reporter* continue; } - REPORTER_ASSERT(reporter, !s->draw(ddl.get()), + REPORTER_ASSERT(reporter, !s->draw(ddl), "DDLSurfaceCharacterizationTest failed on parameter: %d\n", i); context->flushAndSubmit(); @@ -418,22 +431,22 @@ void DDLSurfaceCharacterizationTestImpl(GrContext* context, skiatest::Reporter* size_t maxResourceBytes = context->getResourceCacheLimit(); context->setResourceCacheLimit(maxResourceBytes/2); - REPORTER_ASSERT(reporter, !s->draw(ddl.get())); + REPORTER_ASSERT(reporter, !s->draw(ddl)); // DDL TODO: once proxies/ops can be de-instantiated we can re-enable these tests. // For now, DDLs are drawn once. #if 0 // resource limits >= those at characterization time are accepted context->setResourceCacheLimits(2*maxResourceCount, maxResourceBytes); - REPORTER_ASSERT(reporter, s->draw(ddl.get())); + REPORTER_ASSERT(reporter, s->draw(ddl)); s->readPixels(imageInfo, bitmap.getPixels(), bitmap.rowBytes(), 0, 0); context->setResourceCacheLimits(maxResourceCount, 2*maxResourceBytes); - REPORTER_ASSERT(reporter, s->draw(ddl.get())); + REPORTER_ASSERT(reporter, s->draw(ddl)); s->readPixels(imageInfo, bitmap.getPixels(), bitmap.rowBytes(), 0, 0); context->setResourceCacheLimits(maxResourceCount, maxResourceBytes); - REPORTER_ASSERT(reporter, s->draw(ddl.get())); + REPORTER_ASSERT(reporter, s->draw(ddl)); s->readPixels(imageInfo, bitmap.getPixels(), bitmap.rowBytes(), 0, 0); #endif @@ -452,7 +465,7 @@ void DDLSurfaceCharacterizationTestImpl(GrContext* context, skiatest::Reporter* sk_sp s = params.make(context, &backend); if (s) { - REPORTER_ASSERT(reporter, !s->draw(ddl.get())); // bc the DDL was made w/ textureability + REPORTER_ASSERT(reporter, !s->draw(ddl)); // bc the DDL was made w/ textureability context->flushAndSubmit(); gpu->testingOnly_flushGpuAndSync(); @@ -627,7 +640,7 @@ void DDLSurfaceCharacterizationTestImpl(GrContext* context, skiatest::Reporter* // and then tries all sixteen combinations to check the expected compatibility. // Note: this is a GL-only test DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(CharacterizationFBO0nessTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrCaps* caps = context->priv().caps(); sk_sp proxy = context->threadSafeProxy(); const size_t resourceCacheLimit = context->getResourceCacheLimit(); @@ -693,7 +706,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(CharacterizationFBO0nessTest, reporter, ct #endif DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSurfaceCharacterizationTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); DDLSurfaceCharacterizationTestImpl(context, reporter); } @@ -703,7 +716,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSurfaceCharacterizationTest, reporter, ctx // textureable DDL cannot be played into a non-textureable destination but can be replayed // into a textureable destination. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLNonTextureabilityTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGpu* gpu = context->priv().getGpu(); // Create a bitmap that we can readback into @@ -713,7 +726,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLNonTextureabilityTest, reporter, ctxInfo) bitmap.allocPixels(imageInfo); for (bool textureability : { true, false }) { - std::unique_ptr ddl; + sk_sp ddl; // First, create a DDL w/o textureability (and thus no mipmaps). TODO: once we have // reusable DDLs, move this outside of the loop. @@ -737,7 +750,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLNonTextureabilityTest, reporter, ctxInfo) continue; } - REPORTER_ASSERT(reporter, s->draw(ddl.get())); + REPORTER_ASSERT(reporter, s->draw(ddl)); s->readPixels(imageInfo, bitmap.getPixels(), bitmap.rowBytes(), 0, 0); context->flushAndSubmit(); gpu->testingOnly_flushGpuAndSync(); @@ -842,7 +855,7 @@ void DDLMakeRenderTargetTestImpl(GrContext* context, skiatest::Reporter* reporte } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLMakeRenderTargetTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); DDLMakeRenderTargetTestImpl(context, reporter); } @@ -862,7 +875,7 @@ enum class DDLStage { kMakeImage, kDrawImage, kDetach, kDrawDDL }; // This tests the ability to create and use wrapped textures in a DDL world DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLWrapBackendTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrBackendTexture backendTex; CreateBackendTexture(context, &backendTex, kSize, kSize, kRGBA_8888_SkColorType, @@ -929,7 +942,7 @@ static void dummy_done_proc(void*) {} //////////////////////////////////////////////////////////////////////////////// // Test out the behavior of an invalid DDLRecorder DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLInvalidRecorder, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); { SkImageInfo ii = SkImageInfo::MakeN32Premul(32, 32); @@ -974,7 +987,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLInvalidRecorder, reporter, ctxInfo) { //////////////////////////////////////////////////////////////////////////////// // Ensure that flushing while DDL recording doesn't cause a crash DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLFlushWhileRecording, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkImageInfo ii = SkImageInfo::MakeN32Premul(32, 32); sk_sp s = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, ii); @@ -1015,7 +1028,7 @@ static void tracking_done_proc(void* context) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSkSurfaceFlush, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkImageInfo ii = SkImageInfo::Make(32, 32, kRGBA_8888_SkColorType, kPremul_SkAlphaType); sk_sp s = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, ii); @@ -1034,7 +1047,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSkSurfaceFlush, reporter, ctxInfo) { FulfillInfo fulfillInfo; fulfillInfo.fTex = SkPromiseImageTexture::Make(backendTexture); - std::unique_ptr ddl; + sk_sp ddl; { SkDeferredDisplayListRecorder recorder(characterization); @@ -1063,7 +1076,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSkSurfaceFlush, reporter, ctxInfo) { context->flushAndSubmit(); - s->draw(ddl.get()); + s->draw(ddl); GrFlushInfo flushInfo; s->flush(SkSurface::BackendSurfaceAccess::kPresent, flushInfo); @@ -1076,9 +1089,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSkSurfaceFlush, reporter, ctxInfo) { GrBackendApi::kMetal == context->backend()) { // In order to receive the done callback with Vulkan we need to perform the equivalent // of a glFinish - GrFlushInfo flushInfoSyncCpu; - flushInfoSyncCpu.fFlags = kSyncCpu_GrFlushFlag; - s->flush(SkSurface::BackendSurfaceAccess::kPresent, flushInfoSyncCpu); + s->flush(); context->submit(true); } @@ -1093,7 +1104,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLSkSurfaceFlush, reporter, ctxInfo) { //////////////////////////////////////////////////////////////////////////////// // Ensure that reusing a single DDLRecorder to create multiple DDLs works cleanly DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLMultipleDDLs, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkImageInfo ii = SkImageInfo::MakeN32Premul(32, 32); sk_sp s = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, ii); @@ -1113,7 +1124,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLMultipleDDLs, reporter, ctxInfo) { canvas1->save(); canvas1->clipRect(SkRect::MakeXYWH(8, 8, 16, 16)); - std::unique_ptr ddl1 = recorder.detach(); + sk_sp ddl1 = recorder.detach(); SkCanvas* canvas2 = recorder.getCanvas(); @@ -1121,7 +1132,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLMultipleDDLs, reporter, ctxInfo) { p.setColor(SK_ColorGREEN); canvas2->drawRect(SkRect::MakeWH(32, 32), p); - std::unique_ptr ddl2 = recorder.detach(); + sk_sp ddl2 = recorder.detach(); REPORTER_ASSERT(reporter, ddl1->priv().lazyProxyData()); REPORTER_ASSERT(reporter, ddl2->priv().lazyProxyData()); @@ -1130,8 +1141,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLMultipleDDLs, reporter, ctxInfo) { // lazy proxy are all different between the two DDLs REPORTER_ASSERT(reporter, ddl1->priv().lazyProxyData() != ddl2->priv().lazyProxyData()); - s->draw(ddl1.get()); - s->draw(ddl2.get()); + s->draw(ddl1); + s->draw(ddl2); // Make sure the clipRect from DDL1 didn't percolate into DDL2 s->readPixels(ii, bitmap.getPixels(), bitmap.rowBytes(), 0, 0); @@ -1150,7 +1161,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DDLMultipleDDLs, reporter, ctxInfo) { // Check that the texture-specific flags (i.e., for external & rectangle textures) work // for promise images. As such, this is a GL-only test. DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(DDLTextureFlagsTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkImageInfo ii = SkImageInfo::MakeN32Premul(32, 32); sk_sp s = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, ii); @@ -1196,7 +1207,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(DDLTextureFlagsTest, reporter, ctxInfo) { //////////////////////////////////////////////////////////////////////////////// // Test colorType and pixelConfig compatibility. DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(DDLCompatibilityTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); for (int ct = 0; ct <= kLastEnum_SkColorType; ++ct) { SkColorType colorType = static_cast(ct); diff --git a/tests/DetermineDomainModeTest.cpp b/tests/DetermineDomainModeTest.cpp index c9cd5053376cb..bb04099650808 100644 --- a/tests/DetermineDomainModeTest.cpp +++ b/tests/DetermineDomainModeTest.cpp @@ -10,7 +10,7 @@ #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/GrTypes.h" #include "include/private/GrTypesPriv.h" #include "src/gpu/GrCaps.h" @@ -388,7 +388,7 @@ static void proxy_test(skiatest::Reporter* reporter, GrContext* context) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DetermineDomainModeTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); proxy_test(reporter, context); } diff --git a/tests/DeviceTest.cpp b/tests/DeviceTest.cpp index 1ecf9078ded64..32453a4cf1823 100644 --- a/tests/DeviceTest.cpp +++ b/tests/DeviceTest.cpp @@ -11,6 +11,7 @@ #include "include/core/SkRect.h" #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/GrTypes.h" #include "src/core/SkDevice.h" #include "src/core/SkSpecialImage.h" @@ -77,7 +78,7 @@ DEF_TEST(SpecialImage_BitmapDevice, reporter) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_GPUDevice, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); static const int kWidth = 100; static const int kHeight = 90; diff --git a/tests/DrawOpAtlasTest.cpp b/tests/DrawOpAtlasTest.cpp index e5e0378cd46b4..c6145791f4934 100644 --- a/tests/DrawOpAtlasTest.cpp +++ b/tests/DrawOpAtlasTest.cpp @@ -17,7 +17,7 @@ #include "include/core/SkSize.h" #include "include/core/SkTypes.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/GrTypesPriv.h" #include "src/core/SkIPoint16.h" #include "src/gpu/GrCaps.h" @@ -31,10 +31,10 @@ #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrTextureProxy.h" #include "src/gpu/GrXferProcessor.h" +#include "src/gpu/ops/GrAtlasTextOp.h" #include "src/gpu/ops/GrDrawOp.h" #include "src/gpu/ops/GrOp.h" #include "src/gpu/text/GrAtlasManager.h" -#include "src/gpu/text/GrTextContext.h" #include "tests/Test.h" #include "tools/gpu/GrContextFactory.h" @@ -132,7 +132,7 @@ static bool fill_plot(GrDrawOpAtlas* atlas, // This is a basic DrawOpAtlas test. It simply verifies that multitexture atlases correctly // add and remove pages. Note that this is simulating flush-time behavior. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(BasicDrawOpAtlas, reporter, ctxInfo) { - auto context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); auto proxyProvider = context->priv().proxyProvider(); auto resourceProvider = context->priv().resourceProvider(); auto drawingManager = context->priv().drawingManager(); @@ -191,12 +191,10 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(BasicDrawOpAtlas, reporter, ctxInfo) { // when allocating an atlas page. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrAtlasTextOpPreparation, reporter, ctxInfo) { - auto context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); auto gpu = context->priv().getGpu(); auto resourceProvider = context->priv().resourceProvider(); - auto drawingManager = context->priv().drawingManager(); - auto textContext = drawingManager->getTextContext(); auto opMemoryPool = context->priv().opMemoryPool(); auto rtc = GrRenderTargetContext::Make( @@ -212,8 +210,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrAtlasTextOpPreparation, reporter, ctxInfo) SkSimpleMatrixProvider matrixProvider(SkMatrix::I()); std::unique_ptr op = - textContext->createOp_TestingOnly(context, textContext, rtc.get(), paint, font, - matrixProvider, text, 16, 16); + GrAtlasTextOp::CreateOpTestingOnly( + rtc.get(), paint, font, matrixProvider, text, 16, 16); + bool hasMixedSampledCoverage = false; op->finalize(*context->priv().caps(), nullptr, hasMixedSampledCoverage, GrClampType::kAuto); diff --git a/tests/EGLImageTest.cpp b/tests/EGLImageTest.cpp index 54c9e8b64cad9..f6f6b6b2a1ff1 100644 --- a/tests/EGLImageTest.cpp +++ b/tests/EGLImageTest.cpp @@ -5,7 +5,7 @@ * found in the LICENSE file. */ -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRenderTargetContext.h" @@ -47,7 +47,7 @@ static void cleanup(GLTestContext* glctx0, GrGLuint texID0, GLTestContext* glctx } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(EGLImageTest, reporter, ctxInfo) { - GrContext* context0 = ctxInfo.grContext(); + auto context0 = ctxInfo.directContext(); sk_gpu_test::GLTestContext* glCtx0 = ctxInfo.glContext(); // Try to create a second GL context and then check if the contexts have necessary @@ -193,7 +193,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(EGLImageTest, reporter, ctxInfo) { // Should not be able to wrap as a RT { auto temp = GrRenderTargetContext::MakeFromBackendTexture( - context0, colorType, nullptr, backendTex, 1, origin, nullptr, nullptr, nullptr); + context0, colorType, nullptr, backendTex, 1, origin, nullptr, nullptr); if (temp) { ERRORF(reporter, "Should not be able to wrap an EXTERNAL texture as a RT."); } diff --git a/tests/ExtendedSkColorTypeTests.cpp b/tests/ExtendedSkColorTypeTests.cpp index 8aa06cdcba051..a6cc599617d54 100644 --- a/tests/ExtendedSkColorTypeTests.cpp +++ b/tests/ExtendedSkColorTypeTests.cpp @@ -8,6 +8,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkImage.h" #include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "tests/Test.h" @@ -210,6 +211,7 @@ static void gpu_tests(GrContext* context, skiatest::Reporter* reporter, const Te markFinished, &finishedBECreate); } REPORTER_ASSERT(reporter, backendTex.isValid()); + context->submit(); while (backendTex.isValid() && !finishedBECreate) { context->checkAsyncWorkCompletion(); } @@ -301,7 +303,7 @@ DEF_TEST(ExtendedSkColorTypeTests_raster, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ExtendedSkColorTypeTests_gpu, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); for (size_t i = 0; i < SK_ARRAY_COUNT(gTests); ++i) { gpu_tests(context, reporter, gTests[i]); diff --git a/tests/FlattenDrawableTest.cpp b/tests/FlattenDrawableTest.cpp index e1074e050ae18..8e0ff8d3f53d9 100644 --- a/tests/FlattenDrawableTest.cpp +++ b/tests/FlattenDrawableTest.cpp @@ -294,7 +294,7 @@ DEF_TEST(Flattenable_EmptyDeserialze, reporter) { test(SkPathEffect); test(SkMaskFilter); test(SkShaderBase); // todo: make this just be shader! - test(SkColorFilter); + test(SkColorFilterBase); test(SkImageFilter); test(SkDrawLooper); #undef test diff --git a/tests/FloatingPointTextureTest.cpp b/tests/FloatingPointTextureTest.cpp index 5d42bc17f4f68..8ddaa70db2735 100644 --- a/tests/FloatingPointTextureTest.cpp +++ b/tests/FloatingPointTextureTest.cpp @@ -14,7 +14,7 @@ #include "tests/Test.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkHalf.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" @@ -28,7 +28,8 @@ static const int DEV_W = 100, DEV_H = 100; template -void runFPTest(skiatest::Reporter* reporter, GrContext* context, T min, T max, T epsilon, T maxInt, +void runFPTest(skiatest::Reporter* reporter, GrDirectContext* context, + T min, T max, T epsilon, T maxInt, int arraySize, GrColorType colorType) { if (0 != arraySize % 4) { REPORT_FAILURE(reporter, "(0 != arraySize % 4)", @@ -76,7 +77,9 @@ static const int HALF_ALPHA_CONTROL_ARRAY_SIZE = DEV_W * DEV_H * 1 /*alpha-only* static const SkHalf kMaxIntegerRepresentableInHalfFloatingPoint = 0x6800; // 2 ^ 11 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(HalfFloatAlphaTextureTest, reporter, ctxInfo) { - runFPTest(reporter, ctxInfo.grContext(), SK_HalfMin, SK_HalfMax, SK_HalfEpsilon, + auto direct = ctxInfo.directContext(); + + runFPTest(reporter, direct, SK_HalfMin, SK_HalfMax, SK_HalfEpsilon, kMaxIntegerRepresentableInHalfFloatingPoint, HALF_ALPHA_CONTROL_ARRAY_SIZE, GrColorType::kAlpha_F16); } @@ -84,7 +87,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(HalfFloatAlphaTextureTest, reporter, ctxInfo) static const int HALF_RGBA_CONTROL_ARRAY_SIZE = DEV_W * DEV_H * 4 /*RGBA*/; DEF_GPUTEST_FOR_RENDERING_CONTEXTS(HalfFloatRGBATextureTest, reporter, ctxInfo) { - runFPTest(reporter, ctxInfo.grContext(), SK_HalfMin, SK_HalfMax, SK_HalfEpsilon, + auto direct = ctxInfo.directContext(); + + runFPTest(reporter, direct, SK_HalfMin, SK_HalfMax, SK_HalfEpsilon, kMaxIntegerRepresentableInHalfFloatingPoint, HALF_RGBA_CONTROL_ARRAY_SIZE, GrColorType::kRGBA_F16); } diff --git a/tests/GLBackendSurfaceTest.cpp b/tests/GLBackendSurfaceTest.cpp index b5a6ab9939211..f5a61e2e6753d 100644 --- a/tests/GLBackendSurfaceTest.cpp +++ b/tests/GLBackendSurfaceTest.cpp @@ -14,6 +14,7 @@ #include "include/core/SkImage.h" #include "include/core/SkSurface.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/gl/GrGLTypes.h" #include "include/private/GrGLTypesPriv.h" #include "src/gpu/GrContextPriv.h" @@ -46,7 +47,7 @@ static bool params_valid(const GrGLTextureParameters& parameters, const GrGLCaps } DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GLTextureParameters, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrBackendTexture backendTex = context->createBackendTexture( 1, 1, kRGBA_8888_SkColorType, GrMipMapped::kNo, GrRenderable::kNo, GrProtected::kNo); @@ -126,9 +127,7 @@ DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GLTextureParameters, reporter, ctxInfo) { REPORTER_ASSERT(reporter, GrBackendTexture::TestingOnly_Equals(invalidTexture, invalidTexture)); wrappedImage.reset(); - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - context->flush(flushInfo); + context->flush(); context->submit(true); context->deleteBackendTexture(backendTex); } diff --git a/tests/GpuDrawPathTest.cpp b/tests/GpuDrawPathTest.cpp index e8ea898c026eb..813b5426cc48a 100644 --- a/tests/GpuDrawPathTest.cpp +++ b/tests/GpuDrawPathTest.cpp @@ -16,7 +16,7 @@ #include "include/core/SkRect.h" #include "include/core/SkSurface.h" #include "include/effects/SkDashPathEffect.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrPath.h" #include "src/gpu/geometry/GrStyledShape.h" #include "tests/Test.h" @@ -79,7 +79,7 @@ DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(GpuDrawPath, reporter, ctxInfo) { for (auto& sampleCount : {1, 4, 16}) { SkImageInfo info = SkImageInfo::MakeN32Premul(255, 255); auto surface( - SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, info, + SkSurface::MakeRenderTarget(ctxInfo.directContext(), SkBudgeted::kNo, info, sampleCount, nullptr)); if (!surface) { continue; @@ -94,7 +94,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(GrDrawCollapsedPath, reporter, ctxInfo) { // path to be accepted by AAConvexPathRenderer, then be transformed to something without a // computable first direction by a perspective matrix. SkImageInfo info = SkImageInfo::MakeN32Premul(100, 100); - auto surface(SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, info)); + auto surface(SkSurface::MakeRenderTarget(ctxInfo.directContext(), SkBudgeted::kNo, info)); SkPaint paint; paint.setAntiAlias(true); diff --git a/tests/GrAHardwareBufferTest.cpp b/tests/GrAHardwareBufferTest.cpp index 03ed00f20b669..c5fb7c7911546 100644 --- a/tests/GrAHardwareBufferTest.cpp +++ b/tests/GrAHardwareBufferTest.cpp @@ -14,7 +14,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkImage.h" #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrAHardwareBufferImageGenerator.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" @@ -102,7 +102,7 @@ static void basic_draw_test_helper(skiatest::Reporter* reporter, const sk_gpu_test::ContextInfo& info, GrSurfaceOrigin surfaceOrigin) { - GrContext* context = info.grContext(); + auto context = info.directContext(); if (!context->priv().caps()->supportsAHardwareBufferImages()) { return; } @@ -212,7 +212,7 @@ static void surface_draw_test_helper(skiatest::Reporter* reporter, const sk_gpu_test::ContextInfo& info, GrSurfaceOrigin surfaceOrigin) { - GrContext* context = info.grContext(); + auto context = info.directContext(); if (!context->priv().caps()->supportsAHardwareBufferImages()) { return; } diff --git a/tests/GrCCPRTest.cpp b/tests/GrCCPRTest.cpp index 53f9aaaa3d523..d7c713f4ccba0 100644 --- a/tests/GrCCPRTest.cpp +++ b/tests/GrCCPRTest.cpp @@ -10,8 +10,10 @@ #include "include/core/SkMatrix.h" #include "include/core/SkRect.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/gpu/mock/GrMockTypes.h" -#include "include/private/GrRecordingContext.h" #include "src/core/SkPathPriv.h" #include "src/gpu/GrClip.h" #include "src/gpu/GrContextPriv.h" @@ -39,15 +41,16 @@ class CCPRClip : public GrClip { CCPRClip(GrCoverageCountingPathRenderer* ccpr, const SkPath& path) : fCCPR(ccpr), fPath(path) {} private: - bool apply(GrRecordingContext* context, GrRenderTargetContext* rtc, bool useHWAA, - bool hasUserStencilSettings, GrAppliedClip* out, SkRect* bounds) const override { - out->addCoverageFP(fCCPR->makeClipProcessor(rtc->priv().testingOnly_getOpsTaskID(), fPath, + SkIRect getConservativeBounds() const final { return fPath.getBounds().roundOut(); } + Effect apply(GrRecordingContext* context, GrRenderTargetContext* rtc, bool useHWAA, + bool hasUserStencilSettings, GrAppliedClip* out, + SkRect* bounds) const override { + out->addCoverageFP(fCCPR->makeClipProcessor(/*inputFP=*/nullptr, + rtc->priv().testingOnly_getOpsTaskID(), fPath, SkIRect::MakeWH(rtc->width(), rtc->height()), *context->priv().caps())); - return true; + return Effect::kClipped; } - bool quickContains(const SkRect&) const final { return false; } - bool isRRect(const SkRect& rtBounds, SkRRect* rr, GrAA*) const final { return false; } GrCoverageCountingPathRenderer* const fCCPR; const SkPath fPath; @@ -882,8 +885,8 @@ class CCPRRenderingTest { #define DEF_CCPR_RENDERING_TEST(name) \ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(name, reporter, ctxInfo) { \ name test; \ - test.run(reporter, ctxInfo.grContext(), DoStroke::kNo); \ - test.run(reporter, ctxInfo.grContext(), DoStroke::kYes); \ + test.run(reporter, ctxInfo.directContext(), DoStroke::kNo); \ + test.run(reporter, ctxInfo.directContext(), DoStroke::kYes); \ } class CCPR_busyPath : public CCPRRenderingTest { diff --git a/tests/GrContextAbandonTest.cpp b/tests/GrContextAbandonTest.cpp index 0300caacd8918..ecc6347d3e4ce 100644 --- a/tests/GrContextAbandonTest.cpp +++ b/tests/GrContextAbandonTest.cpp @@ -7,6 +7,7 @@ #include "include/core/SkTypes.h" +#include "include/gpu/GrDirectContext.h" #include "tests/Test.h" #include "tools/gpu/GrContextFactory.h" @@ -18,7 +19,7 @@ DEF_GPUTEST(GrContext_abandonContext, reporter, options) { GrContextFactory testFactory(options); GrContextFactory::ContextType ctxType = (GrContextFactory::ContextType) i; ContextInfo info = testFactory.getContextInfo(ctxType); - if (GrContext* context = info.grContext()) { + if (auto context = info.directContext()) { switch (testType) { case 0: context->abandonContext(); diff --git a/tests/GrContextFactoryTest.cpp b/tests/GrContextFactoryTest.cpp index 0cca7729d5fb7..94950e872be07 100644 --- a/tests/GrContextFactoryTest.cpp +++ b/tests/GrContextFactoryTest.cpp @@ -8,6 +8,7 @@ #include "include/core/SkTypes.h" #include "include/core/SkExecutor.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" #include "tests/Test.h" @@ -20,23 +21,23 @@ DEF_GPUTEST(GrContextFactory_abandon, reporter, options) { GrContextFactory testFactory(options); GrContextFactory::ContextType ctxType = (GrContextFactory::ContextType) i; ContextInfo info1 = testFactory.getContextInfo(ctxType); - if (!info1.grContext()) { + if (!info1.directContext()) { continue; } REPORTER_ASSERT(reporter, info1.testContext()); // Ref for comparison. The API does not explicitly say that this stays alive. - info1.grContext()->ref(); + info1.directContext()->ref(); testFactory.abandonContexts(); // Test that we get different context after abandon. ContextInfo info2 = testFactory.getContextInfo(ctxType); - REPORTER_ASSERT(reporter, info2.grContext()); + REPORTER_ASSERT(reporter, info2.directContext()); REPORTER_ASSERT(reporter, info2.testContext()); - REPORTER_ASSERT(reporter, info1.grContext() != info2.grContext()); + REPORTER_ASSERT(reporter, info1.directContext() != info2.directContext()); // The GL context should also change, but it also could get the same address. - info1.grContext()->unref(); + info1.directContext()->unref(); } } @@ -45,35 +46,35 @@ DEF_GPUTEST(GrContextFactory_sharedContexts, reporter, options) { GrContextFactory testFactory(options); GrContextFactory::ContextType ctxType = static_cast(i); ContextInfo info1 = testFactory.getContextInfo(ctxType); - if (!info1.grContext()) { + if (!info1.directContext()) { continue; } // Ref for passing in. The API does not explicitly say that this stays alive. - info1.grContext()->ref(); + info1.directContext()->ref(); testFactory.abandonContexts(); // Test that creating a context in a share group with an abandoned context fails. - ContextInfo info2 = testFactory.getSharedContextInfo(info1.grContext()); - REPORTER_ASSERT(reporter, !info2.grContext()); - info1.grContext()->unref(); + ContextInfo info2 = testFactory.getSharedContextInfo(info1.directContext()); + REPORTER_ASSERT(reporter, !info2.directContext()); + info1.directContext()->unref(); // Create a new base context ContextInfo info3 = testFactory.getContextInfo(ctxType); // Creating a context in a share group may fail, but should never crash. - ContextInfo info4 = testFactory.getSharedContextInfo(info3.grContext()); - if (!info4.grContext()) { + ContextInfo info4 = testFactory.getSharedContextInfo(info3.directContext()); + if (!info4.directContext()) { continue; } - REPORTER_ASSERT(reporter, info3.grContext() != info4.grContext()); + REPORTER_ASSERT(reporter, info3.directContext() != info4.directContext()); REPORTER_ASSERT(reporter, info3.testContext() != info4.testContext()); // Passing a different index should create a new (unique) context. - ContextInfo info5 = testFactory.getSharedContextInfo(info3.grContext(), 1); - REPORTER_ASSERT(reporter, info5.grContext()); + ContextInfo info5 = testFactory.getSharedContextInfo(info3.directContext(), 1); + REPORTER_ASSERT(reporter, info5.directContext()); REPORTER_ASSERT(reporter, info5.testContext()); - REPORTER_ASSERT(reporter, info5.grContext() != info4.grContext()); + REPORTER_ASSERT(reporter, info5.directContext() != info4.directContext()); REPORTER_ASSERT(reporter, info5.testContext() != info4.testContext()); } } @@ -91,12 +92,12 @@ DEF_GPUTEST(GrContextFactory_executorAndTaskGroup, reporter, options) { GrContextFactory::ContextType ctxType = static_cast(i); ContextInfo serialInfo = serialFactory.getContextInfo(ctxType); - if (GrContext* serialContext = serialInfo.grContext()) { + if (auto serialContext = serialInfo.directContext()) { REPORTER_ASSERT(reporter, nullptr == serialContext->priv().getTaskGroup()); } ContextInfo threadedInfo = threadedFactory.getContextInfo(ctxType); - if (GrContext* threadedContext = threadedInfo.grContext()) { + if (auto threadedContext = threadedInfo.directContext()) { REPORTER_ASSERT(reporter, nullptr != threadedContext->priv().getTaskGroup()); } } @@ -105,7 +106,7 @@ DEF_GPUTEST(GrContextFactory_executorAndTaskGroup, reporter, options) { #ifdef SK_ENABLE_DUMP_GPU DEF_GPUTEST_FOR_ALL_CONTEXTS(GrContextDump, reporter, ctxInfo) { // Ensure that GrContext::dump doesn't assert (which is possible, if the JSON code is wrong) - SkString result = ctxInfo.grContext()->dump(); + SkString result = ctxInfo.directContext()->dump(); REPORTER_ASSERT(reporter, !result.isEmpty()); } #endif diff --git a/tests/GrContextOOM.cpp b/tests/GrContextOOM.cpp new file mode 100644 index 0000000000000..31d8e4c67e88e --- /dev/null +++ b/tests/GrContextOOM.cpp @@ -0,0 +1,53 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkCanvas.h" +#include "include/core/SkImageInfo.h" +#include "include/core/SkPaint.h" +#include "include/core/SkRect.h" +#include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" +#include "tests/Test.h" + +DEF_GPUTEST(GrContext_oomed, reporter, originalOptions) { + GrContextOptions options = originalOptions; + options.fRandomGLOOM = true; + options.fSkipGLErrorChecks = GrContextOptions::Enable::kNo; + sk_gpu_test::GrContextFactory factory(options); + for (int ct = 0; ct < sk_gpu_test::GrContextFactory::kContextTypeCnt; ++ct) { + auto contextType = static_cast(ct); + auto context = factory.get(contextType); + if (!context) { + continue; + } + if (context->backend() != GrBackendApi::kOpenGL) { + continue; + } + auto info = SkImageInfo::Make(10, 10, kRGBA_8888_SkColorType, kPremul_SkAlphaType); + for (int run = 0; run < 20; ++run) { + bool oomed = false; + for (int i = 0; i < 500; ++i) { + // Make sure we're actually making a significant number of GL calls and not just + // issuing a small number calls by reusing scratch resources created in a previous + // iteration. + context->freeGpuResources(); + auto surf = + SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, info, 1, nullptr); + SkPaint paint; + surf->getCanvas()->drawRect(SkRect::MakeLTRB(100, 100, 2000, 2000), paint); + surf->flushAndSubmit(); + if ((oomed = context->oomed())) { + REPORTER_ASSERT(reporter, !context->oomed(), "oomed() wasn't cleared"); + break; + } + } + if (!oomed) { + ERRORF(reporter, "Did not OOM on %dth run.", run); + } + } + } +} diff --git a/tests/GrFinishedFlushTest.cpp b/tests/GrFinishedFlushTest.cpp index e702c59921f63..2636d9b683973 100644 --- a/tests/GrFinishedFlushTest.cpp +++ b/tests/GrFinishedFlushTest.cpp @@ -10,7 +10,7 @@ #include #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" @@ -37,7 +37,7 @@ static void busy_wait_for_callback(int* count, int expectedValue, GrContext* ctx } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); SkImageInfo info = SkImageInfo::Make(8, 8, kRGBA_8888_SkColorType, kPremul_SkAlphaType); @@ -47,9 +47,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { canvas->clear(SK_ColorGREEN); auto image = surface->makeImageSnapshot(); - GrFlushInfo flushInfoSyncCpu; - flushInfoSyncCpu.fFlags = kSyncCpu_GrFlushFlag; - ctx->flush(flushInfoSyncCpu); + ctx->flush(); ctx->submit(true); int count = 0; @@ -58,7 +56,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { flushInfoFinishedProc.fFinishedProc = testing_finished_proc; flushInfoFinishedProc.fFinishedContext = (void*)&count; // There is no work on the surface so flushing may immediately call the finished proc. - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfoFinishedProc); + surface->flush(flushInfoFinishedProc); ctx->submit(); REPORTER_ASSERT(reporter, count == 0 || count == 1); // Busy waiting should detect that the work is done. @@ -66,14 +64,15 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { canvas->clear(SK_ColorRED); - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfoFinishedProc); + surface->flush(flushInfoFinishedProc); ctx->submit(); bool expectAsyncCallback = ctx->backend() == GrBackendApi::kVulkan || ((ctx->backend() == GrBackendApi::kOpenGL) && ctx->priv().caps()->fenceSyncSupport()) || ((ctx->backend() == GrBackendApi::kMetal) && ctx->priv().caps()->fenceSyncSupport()) || - ctx->backend() == GrBackendApi::kDawn; + ctx->backend() == GrBackendApi::kDawn || + ctx->backend() == GrBackendApi::kDirect3D; if (expectAsyncCallback) { // On Vulkan the command buffer we just submitted may or may not have finished immediately // so the finish proc may not have been called. @@ -81,7 +80,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { } else { REPORTER_ASSERT(reporter, count == 2); } - ctx->flush(flushInfoSyncCpu); + ctx->flush(); ctx->submit(true); REPORTER_ASSERT(reporter, count == 2); @@ -96,7 +95,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { } else { REPORTER_ASSERT(reporter, count == 3); } - ctx->flush(flushInfoSyncCpu); + ctx->flush(); ctx->submit(true); REPORTER_ASSERT(reporter, count == 3); @@ -111,7 +110,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { } else { REPORTER_ASSERT(reporter, count == 4); } - ctx->flush(flushInfoSyncCpu); + ctx->flush(); ctx->submit(true); REPORTER_ASSERT(reporter, count == 4); @@ -124,7 +123,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { count = 0; int count2 = 0; canvas->clear(SK_ColorGREEN); - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfoFinishedProc); + surface->flush(flushInfoFinishedProc); ctx->submit(); // There is no work to be flushed here so this will return immediately, but make sure the // finished call from this proc isn't called till the previous surface flush also is finished. @@ -133,7 +132,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushFinishedProcTest, reporter, ctxInfo) { ctx->submit(); REPORTER_ASSERT(reporter, count <= 1 && count2 <= count); - ctx->flush(flushInfoSyncCpu); + ctx->flush(); ctx->submit(true); REPORTER_ASSERT(reporter, count == 1); diff --git a/tests/GrMeshTest.cpp b/tests/GrMeshTest.cpp index 1e1639e5017c9..2aa049b632e9a 100644 --- a/tests/GrMeshTest.cpp +++ b/tests/GrMeshTest.cpp @@ -10,7 +10,7 @@ #include #include #include "include/core/SkBitmap.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/GrResourceKey.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" @@ -108,7 +108,7 @@ DEF_GPUTEST_FOR_CONTEXTS(GrMeshTest, IsContextTypeForOutputPNGs, reporter, ctxIn #else DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) { #endif - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); auto rtc = GrRenderTargetContext::Make( context, GrColorType::kRGBA_8888, nullptr, SkBackingFit::kExact, @@ -270,7 +270,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrMeshTest, reporter, ctxInfo) { if (context->priv().caps()->shaderCaps()->vertexIDSupport()) { break; } - // Fallthru. + [[fallthrough]]; case 1: vertexBuffer = helper->fVertBuffer.get(); break; @@ -502,8 +502,7 @@ class GrMeshTestProcessor : public GrGeometryProcessor { }; class GLSLMeshTestProcessor : public GrGLSLGeometryProcessor { - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - const CoordTransformRange& transformIter) final {} + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&) final {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) final { const GrMeshTestProcessor& mp = args.fGP.cast(); diff --git a/tests/GrMipMappedTest.cpp b/tests/GrMipMappedTest.cpp index d645c71ce13ee..773ddd8c6b468 100644 --- a/tests/GrMipMappedTest.cpp +++ b/tests/GrMipMappedTest.cpp @@ -11,9 +11,8 @@ #include "include/core/SkPoint.h" #include "include/core/SkSurface.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrBackendTextureImageGenerator.h" -#include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDrawingManager.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrProxyProvider.h" @@ -34,7 +33,7 @@ static constexpr int kSize = 8; // Test that the correct mip map states are on the GrTextures when wrapping GrBackendTextures in // SkImages and SkSurfaces DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrWrappedMipMappedTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); if (!context->priv().caps()->mipMapSupport()) { return; } @@ -109,7 +108,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrWrappedMipMappedTest, reporter, ctxInfo) { // Test that we correctly copy or don't copy GrBackendTextures in the GrBackendTextureImageGenerator // based on if we will use mips in the draw and the mip status of the GrBackendTexture. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrBackendTextureImageMipMappedTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); if (!context->priv().caps()->mipMapSupport()) { return; } @@ -249,7 +248,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrBackendTextureImageMipMappedTest, reporter, // Test that when we call makeImageSnapshot on an SkSurface we retains the same mip status as the // resource we took the snapshot of. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrImageSnapshotMipMappedTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); if (!context->priv().caps()->mipMapSupport()) { return; } @@ -314,7 +313,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrImageSnapshotMipMappedTest, reporter, ctxIn // Test that we don't create a mip mapped texture if the size is 1x1 even if the filter mode is set // to use mips. This test passes by not crashing or hitting asserts in code. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(Gr1x1TextureMipMappedTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); if (!context->priv().caps()->mipMapSupport()) { return; } @@ -377,6 +376,7 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { GrContextOptions ctxOptions; ctxOptions.fReduceOpsTaskSplitting = enableSortingAndReduction; sk_sp context = GrContext::MakeMock(&mockOptions, ctxOptions); + GrDrawingManager* drawingManager = context->priv().drawingManager(); if (!context) { ERRORF(reporter, "could not create mock context with fReduceOpsTaskSplitting %s.", (Enable::kYes == enableSortingAndReduction) ? "enabled" : "disabled"); @@ -406,10 +406,11 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { context.get(), colorType, nullptr, mipmapProxy, kTopLeft_GrSurfaceOrigin, nullptr); mipmapRTC->clear({.1f,.2f,.3f,.4f}); - REPORTER_ASSERT(reporter, mipmapProxy->getLastRenderTask()); + REPORTER_ASSERT(reporter, drawingManager->getLastRenderTask(mipmapProxy.get())); // mipmapProxy's last render task should now just be the opsTask containing the clear. REPORTER_ASSERT(reporter, - mipmapRTC->testingOnly_PeekLastOpsTask() == mipmapProxy->getLastRenderTask()); + mipmapRTC->testingOnly_PeekLastOpsTask() == + drawingManager->getLastRenderTask(mipmapProxy.get())); // Mipmaps don't get marked dirty until makeClosed(). REPORTER_ASSERT(reporter, !mipmapProxy->mipMapsAreDirty()); @@ -426,7 +427,7 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { // soon as a GrTextureResolveRenderTask was inserted. The way we know they were resolved is // if mipmapProxy->getLastRenderTask() has switched from the opsTask that drew to it, to the // task that resolved its mips. - GrRenderTask* initialMipmapRegenTask = mipmapProxy->getLastRenderTask(); + GrRenderTask* initialMipmapRegenTask = drawingManager->getLastRenderTask(mipmapProxy.get()); REPORTER_ASSERT(reporter, initialMipmapRegenTask); REPORTER_ASSERT(reporter, initialMipmapRegenTask != mipmapRTC->testingOnly_PeekLastOpsTask()); @@ -438,7 +439,8 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { auto rtc2Task = sk_ref_sp(rtc2->testingOnly_PeekLastOpsTask()); // Make sure the mipmap texture still has the same regen task. - REPORTER_ASSERT(reporter, mipmapProxy->getLastRenderTask() == initialMipmapRegenTask); + REPORTER_ASSERT(reporter, + drawingManager->getLastRenderTask(mipmapProxy.get()) == initialMipmapRegenTask); SkASSERT(!mipmapProxy->mipMapsAreDirty()); // Reset everything so we can go again, this time with the first draw not mipmapped. @@ -454,7 +456,8 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { REPORTER_ASSERT(reporter, mipmapRTCTask); // mipmapProxy's last render task should now just be the opsTask containing the clear. - REPORTER_ASSERT(reporter, mipmapRTCTask.get() == mipmapProxy->getLastRenderTask()); + REPORTER_ASSERT(reporter, + mipmapRTCTask.get() == drawingManager->getLastRenderTask(mipmapProxy.get())); // Mipmaps don't get marked dirty until makeClosed(). REPORTER_ASSERT(reporter, !mipmapProxy->mipMapsAreDirty()); @@ -469,7 +472,8 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { REPORTER_ASSERT(reporter, mipmapProxy->mipMapsAreDirty()); // Since mips weren't regenerated, the last render task shouldn't have changed. - REPORTER_ASSERT(reporter, mipmapRTCTask.get() == mipmapProxy->getLastRenderTask()); + REPORTER_ASSERT(reporter, + mipmapRTCTask.get() == drawingManager->getLastRenderTask(mipmapProxy.get())); // Draw the stil-dirty mipmap texture into a second target with mipmap filtering. rtc2 = draw_mipmap_into_new_render_target(context.get(), proxyProvider, colorType, @@ -479,7 +483,7 @@ DEF_GPUTEST(GrManyDependentsMipMappedTest, reporter, /* options */) { // Make sure the mipmap texture now has a new last render task that regenerates the mips, // and that the mipmaps are now clean. - auto mipRegenTask2 = mipmapProxy->getLastRenderTask(); + auto mipRegenTask2 = drawingManager->getLastRenderTask(mipmapProxy.get()); REPORTER_ASSERT(reporter, mipRegenTask2); REPORTER_ASSERT(reporter, mipmapRTCTask.get() != mipRegenTask2); SkASSERT(!mipmapProxy->mipMapsAreDirty()); diff --git a/tests/GrOpListFlushTest.cpp b/tests/GrOpListFlushTest.cpp index 4dea4168f8fba..9bfc889e393ae 100644 --- a/tests/GrOpListFlushTest.cpp +++ b/tests/GrOpListFlushTest.cpp @@ -7,7 +7,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "tests/Test.h" @@ -26,7 +26,7 @@ static bool check_read(skiatest::Reporter* reporter, const SkBitmap& bitmap) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrOpsTaskFlushCount, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGpu* gpu = context->priv().getGpu(); SkImageInfo imageInfo = SkImageInfo::Make(1000, 1, kRGBA_8888_SkColorType, kPremul_SkAlphaType); diff --git a/tests/GrPipelineDynamicStateTest.cpp b/tests/GrPipelineDynamicStateTest.cpp index 2a51c86b92c36..9aecbcfdb9093 100644 --- a/tests/GrPipelineDynamicStateTest.cpp +++ b/tests/GrPipelineDynamicStateTest.cpp @@ -8,8 +8,8 @@ #include "include/core/SkTypes.h" #include "tests/Test.h" -#include "include/gpu/GrContext.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrColor.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGeometryProcessor.h" @@ -91,8 +91,7 @@ class GrPipelineDynamicStateTestProcessor : public GrGeometryProcessor { constexpr GrPrimitiveProcessor::Attribute GrPipelineDynamicStateTestProcessor::kAttributes[]; class GLSLPipelineDynamicStateTestProcessor : public GrGLSLGeometryProcessor { - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&, - const CoordTransformRange&) final {} + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor&) final {} void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) final { const GrPipelineDynamicStateTestProcessor& mp = @@ -185,7 +184,7 @@ class GrPipelineDynamicStateTestOp : public GrDrawOp { }; DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrPipelineDynamicStateTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrResourceProvider* rp = context->priv().resourceProvider(); auto rtc = GrRenderTargetContext::Make( diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp index 39ecf4a82c910..3a8444e24e338 100644 --- a/tests/GrPorterDuffTest.cpp +++ b/tests/GrPorterDuffTest.cpp @@ -9,6 +9,7 @@ #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContextOptions.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrProxyProvider.h" @@ -987,7 +988,7 @@ DEF_GPUTEST(PorterDuffNoDualSourceBlending, reporter, options) { GrContextOptions opts = options; opts.fSuppressDualSourceBlending = true; sk_gpu_test::GrContextFactory mockFactory(opts); - GrContext* ctx = mockFactory.get(sk_gpu_test::GrContextFactory::kMock_ContextType); + auto ctx = mockFactory.get(sk_gpu_test::GrContextFactory::kMock_ContextType); if (!ctx) { SK_ABORT("Failed to create mock context without ARB_blend_func_extended."); } diff --git a/tests/GrSubmittedFlushTest.cpp b/tests/GrSubmittedFlushTest.cpp index 47cdaf2ee5400..a6527895dc648 100644 --- a/tests/GrSubmittedFlushTest.cpp +++ b/tests/GrSubmittedFlushTest.cpp @@ -9,7 +9,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" using namespace sk_gpu_test; @@ -27,7 +27,7 @@ static void testing_submitted_proc(void* ctx, bool success) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(FlushSubmittedProcTest, reporter, ctxInfo) { - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); SkImageInfo info = SkImageInfo::Make(8, 8, kRGBA_8888_SkColorType, kPremul_SkAlphaType); sk_sp surface = SkSurface::MakeRenderTarget(ctx, SkBudgeted::kNo, info); diff --git a/tests/GrSurfaceTest.cpp b/tests/GrSurfaceTest.cpp index b6657c03d4fc4..4ed7515045ca5 100644 --- a/tests/GrSurfaceTest.cpp +++ b/tests/GrSurfaceTest.cpp @@ -7,9 +7,10 @@ #include #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkCompressedDataUtils.h" +#include "src/gpu/GrBackendUtils.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" @@ -26,7 +27,7 @@ // Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static upcasting of texture // and render targets to GrSurface all work as expected. DEF_GPUTEST_FOR_MOCK_CONTEXT(GrSurface, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); auto resourceProvider = context->priv().resourceProvider(); static constexpr SkISize kDesc = {256, 256}; @@ -74,7 +75,7 @@ DEF_GPUTEST_FOR_MOCK_CONTEXT(GrSurface, reporter, ctxInfo) { // This test checks that the isFormatTexturable and isFormatRenderable are // consistent with createTexture's result. DEF_GPUTEST_FOR_ALL_CONTEXTS(GrSurfaceRenderability, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); GrResourceProvider* resourceProvider = context->priv().resourceProvider(); const GrCaps* caps = context->priv().caps(); @@ -84,7 +85,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(GrSurfaceRenderability, reporter, ctxInfo) { auto createTexture = [](SkISize dimensions, GrColorType colorType, const GrBackendFormat& format, GrRenderable renderable, GrResourceProvider* rp) -> sk_sp { - SkImage::CompressionType compression = rp->caps()->compressionType(format); + SkImage::CompressionType compression = GrBackendFormatToCompressionType(format); if (compression != SkImage::CompressionType::kNone) { if (renderable == GrRenderable::kYes) { return nullptr; @@ -349,7 +350,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadOnlyTexture, reporter, context_info) { return (0xFFU << 24) | (x << 16) | (y << 8) | uint8_t((x * y) & 0xFF); }); - GrContext* context = context_info.grContext(); + auto context = context_info.directContext(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); // We test both kRW in addition to kRead mostly to ensure that the calls are structured such @@ -602,10 +603,11 @@ DEF_GPUTEST(TextureIdleProcTest, reporter, options) { // one where the the texture was drawn but the context is not flushed. // In each scenario we test holding a ref beyond the context shutdown and not. - // These tests are difficult to get working with Vulkan and Direct3D. - // See http://skbug.com/8705 and http://skbug.com/8277 + // These tests are difficult to get working with Vulkan, Direct3D, and Dawn. + // See http://skbug.com/8705, http://skbug.com/8277, and http://skbug.com/10326 GrBackendApi api = sk_gpu_test::GrContextFactory::ContextTypeBackend(contextType); - if (api == GrBackendApi::kVulkan || api == GrBackendApi::kDirect3D) { + if (api == GrBackendApi::kVulkan || api == GrBackendApi::kDirect3D || + api == GrBackendApi::kDawn) { continue; } int id = 3; @@ -691,7 +693,7 @@ DEF_GPUTEST(TextureIdleProcTest, reporter, options) { // Tests an idle proc that unrefs another resource down to zero. DEF_GPUTEST_FOR_ALL_CONTEXTS(TextureIdleProcCacheManipulationTest, reporter, contextInfo) { - GrContext* context = contextInfo.grContext(); + auto context = contextInfo.directContext(); // idle proc that releases another texture. auto idleProc = [](void* texture) { reinterpret_cast(texture)->unref(); }; @@ -714,7 +716,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(TextureIdleProcCacheManipulationTest, reporter, con // Similar to above but more complicated. This flushes the context from the idle proc. // crbug.com/933526. DEF_GPUTEST_FOR_ALL_CONTEXTS(TextureIdleProcFlushTest, reporter, contextInfo) { - GrContext* context = contextInfo.grContext(); + auto context = contextInfo.directContext(); // idle proc that flushes the context. auto idleProc = [](void* context) { reinterpret_cast(context)->flushAndSubmit(); }; @@ -750,7 +752,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(TextureIdleProcFlushTest, reporter, contextInfo) { } DEF_GPUTEST_FOR_ALL_CONTEXTS(TextureIdleProcRerefTest, reporter, contextInfo) { - GrContext* context = contextInfo.grContext(); + auto context = contextInfo.directContext(); // idle proc that refs the texture auto idleProc = [](void* texture) { reinterpret_cast(texture)->ref(); }; // release proc to check whether the texture was released or not. @@ -773,7 +775,7 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(TextureIdleProcRerefTest, reporter, contextInfo) { } DEF_GPUTEST_FOR_ALL_CONTEXTS(TextureIdleStateTest, reporter, contextInfo) { - GrContext* context = contextInfo.grContext(); + auto context = contextInfo.directContext(); for (const auto& idleMaker : {make_wrapped_texture, make_normal_texture}) { auto idleTexture = idleMaker(context, GrRenderable::kNo); diff --git a/tests/GrTestingBackendTextureUploadTest.cpp b/tests/GrTestingBackendTextureUploadTest.cpp index a4ba4c30d9f77..2d6fbffab5413 100644 --- a/tests/GrTestingBackendTextureUploadTest.cpp +++ b/tests/GrTestingBackendTextureUploadTest.cpp @@ -5,6 +5,7 @@ * found in the LICENSE file. */ +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" @@ -15,6 +16,10 @@ void testing_only_texture_test(skiatest::Reporter* reporter, GrContext* context, SkColorType ct, GrRenderable renderable, bool doDataUpload, GrMipMapped mipMapped) { + auto direct = context->asDirectContext(); + if (!direct) { + return; + } const int kWidth = 16; const int kHeight = 16; @@ -25,11 +30,11 @@ void testing_only_texture_test(skiatest::Reporter* reporter, GrContext* context, expectedPixels.alloc(ii); actualPixels.alloc(ii); - const GrCaps* caps = context->priv().caps(); + const GrCaps* caps = direct->priv().caps(); GrColorType grCT = SkColorTypeToGrColorType(ct); - GrBackendFormat backendFormat = context->defaultBackendFormat(ct, renderable); + GrBackendFormat backendFormat = direct->defaultBackendFormat(ct, renderable); if (!backendFormat.isValid()) { return; } @@ -41,11 +46,11 @@ void testing_only_texture_test(skiatest::Reporter* reporter, GrContext* context, FillPixelData(kWidth, kHeight, expectedPixels.writable_addr32(0, 0)); - backendTex = context->createBackendTexture(&expectedPixels, 1, - renderable, GrProtected::kNo); + backendTex = direct->createBackendTexture(&expectedPixels, 1, + renderable, GrProtected::kNo); } else { - backendTex = context->createBackendTexture(kWidth, kHeight, ct, SkColors::kTransparent, - mipMapped, renderable, GrProtected::kNo); + backendTex = direct->createBackendTexture(kWidth, kHeight, ct, SkColors::kTransparent, + mipMapped, renderable, GrProtected::kNo); size_t allocSize = SkAutoPixmapStorage::AllocSize(ii, nullptr); // createBackendTexture will fill the texture with 0's if no data is provided, so @@ -64,23 +69,23 @@ void testing_only_texture_test(skiatest::Reporter* reporter, GrContext* context, sk_sp wrappedProxy; if (GrRenderable::kYes == renderable) { - wrappedProxy = context->priv().proxyProvider()->wrapRenderableBackendTexture( - backendTex, 1, kAdopt_GrWrapOwnership, GrWrapCacheable::kNo); + wrappedProxy = direct->priv().proxyProvider()->wrapRenderableBackendTexture( + backendTex, 1, kAdopt_GrWrapOwnership, GrWrapCacheable::kNo, nullptr); } else { - wrappedProxy = context->priv().proxyProvider()->wrapBackendTexture( + wrappedProxy = direct->priv().proxyProvider()->wrapBackendTexture( backendTex, kAdopt_GrWrapOwnership, GrWrapCacheable::kNo, GrIOType::kRW_GrIOType); } REPORTER_ASSERT(reporter, wrappedProxy); - GrSwizzle swizzle = context->priv().caps()->getReadSwizzle(wrappedProxy->backendFormat(), grCT); + GrSwizzle swizzle = direct->priv().caps()->getReadSwizzle(wrappedProxy->backendFormat(), grCT); GrSurfaceProxyView view(std::move(wrappedProxy), kTopLeft_GrSurfaceOrigin, swizzle); - auto surfaceContext = GrSurfaceContext::Make(context, std::move(view), grCT, + auto surfaceContext = GrSurfaceContext::Make(direct, std::move(view), grCT, kPremul_SkAlphaType, nullptr); REPORTER_ASSERT(reporter, surfaceContext); bool result = surfaceContext->readPixels({grCT, kPremul_SkAlphaType, nullptr, kWidth, kHeight}, actualPixels.writable_addr(), actualPixels.rowBytes(), - {0, 0}, context); + {0, 0}, direct); REPORTER_ASSERT(reporter, result); REPORTER_ASSERT(reporter, @@ -92,11 +97,11 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrTestingBackendTextureUploadTest, reporter, for (auto colorType: { kRGBA_8888_SkColorType, kBGRA_8888_SkColorType }) { for (auto renderable: { GrRenderable::kYes, GrRenderable::kNo }) { for (bool doDataUpload: {true, false}) { - testing_only_texture_test(reporter, ctxInfo.grContext(), colorType, + testing_only_texture_test(reporter, ctxInfo.directContext(), colorType, renderable, doDataUpload, GrMipMapped::kNo); if (!doDataUpload) { - testing_only_texture_test(reporter, ctxInfo.grContext(), colorType, + testing_only_texture_test(reporter, ctxInfo.directContext(), colorType, renderable, doDataUpload, GrMipMapped::kYes); } } diff --git a/tests/GrTextureMipMapInvalidationTest.cpp b/tests/GrTextureMipMapInvalidationTest.cpp index cdc5d8fcb4bb8..a01b887790672 100644 --- a/tests/GrTextureMipMapInvalidationTest.cpp +++ b/tests/GrTextureMipMapInvalidationTest.cpp @@ -7,7 +7,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrTexturePriv.h" #include "src/image/SkImage_Base.h" @@ -16,7 +16,7 @@ // Tests that MIP maps are created and invalidated as expected when drawing to and from GrTextures. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrTextureMipMapInvalidationTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); if (!context->priv().caps()->mipMapSupport()) { return; } @@ -65,7 +65,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrTextureMipMapInvalidationTest, reporter, ct } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReimportImageTextureWithMipLevels, reporter, ctxInfo) { - auto* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); if (!ctx->priv().caps()->mipMapSupport()) { return; } diff --git a/tests/GrUploadPixelsTests.cpp b/tests/GrUploadPixelsTests.cpp index 602aa9d38d64a..a1294cd2dc4ee 100644 --- a/tests/GrUploadPixelsTests.cpp +++ b/tests/GrUploadPixelsTests.cpp @@ -9,6 +9,7 @@ #include "include/core/SkTypes.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" #include "src/gpu/GrSurfaceContext.h" @@ -21,7 +22,7 @@ using sk_gpu_test::GrContextFactory; -void basic_texture_test(skiatest::Reporter* reporter, GrContext* context, SkColorType ct, +void basic_texture_test(skiatest::Reporter* reporter, GrDirectContext* context, SkColorType ct, GrRenderable renderable) { const int kWidth = 16; const int kHeight = 16; @@ -92,11 +93,13 @@ void basic_texture_test(skiatest::Reporter* reporter, GrContext* context, SkColo } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrUploadPixelsTests, reporter, ctxInfo) { + auto direct = ctxInfo.directContext(); + // RGBA - basic_texture_test(reporter, ctxInfo.grContext(), kRGBA_8888_SkColorType, GrRenderable::kNo); - basic_texture_test(reporter, ctxInfo.grContext(), kRGBA_8888_SkColorType, GrRenderable::kYes); + basic_texture_test(reporter, direct, kRGBA_8888_SkColorType, GrRenderable::kNo); + basic_texture_test(reporter, direct, kRGBA_8888_SkColorType, GrRenderable::kYes); // BGRA - basic_texture_test(reporter, ctxInfo.grContext(), kBGRA_8888_SkColorType, GrRenderable::kNo); - basic_texture_test(reporter, ctxInfo.grContext(), kBGRA_8888_SkColorType, GrRenderable::kYes); + basic_texture_test(reporter, direct, kBGRA_8888_SkColorType, GrRenderable::kNo); + basic_texture_test(reporter, direct, kBGRA_8888_SkColorType, GrRenderable::kYes); } diff --git a/tests/ImageFilterCacheTest.cpp b/tests/ImageFilterCacheTest.cpp index e5fb544027e38..46aa8c3dadcf6 100644 --- a/tests/ImageFilterCacheTest.cpp +++ b/tests/ImageFilterCacheTest.cpp @@ -198,7 +198,7 @@ DEF_TEST(ImageFilterCache_ImageBackedRaster, reporter) { test_image_backed(reporter, nullptr, srcImage); } -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" @@ -214,7 +214,7 @@ static GrSurfaceProxyView create_proxy_view(GrRecordingContext* context) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterCache_ImageBackedGPU, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrSurfaceProxyView srcView = create_proxy_view(context); if (!srcView.proxy()) { @@ -255,7 +255,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterCache_ImageBackedGPU, reporter, ct } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterCache_GPUBacked, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrSurfaceProxyView srcView = create_proxy_view(context); if (!srcView.proxy()) { diff --git a/tests/ImageFilterTest.cpp b/tests/ImageFilterTest.cpp index 212da864ec5f1..f8de5dcd3cfbb 100644 --- a/tests/ImageFilterTest.cpp +++ b/tests/ImageFilterTest.cpp @@ -18,18 +18,18 @@ #include "include/effects/SkImageFilters.h" #include "include/effects/SkPerlinNoiseShader.h" #include "include/effects/SkTableColorFilter.h" +#include "include/gpu/GrDirectContext.h" +#include "src/core/SkColorFilterBase.h" #include "src/core/SkImageFilter_Base.h" #include "src/core/SkReadBuffer.h" #include "src/core/SkSpecialImage.h" #include "src/core/SkSpecialSurface.h" +#include "src/gpu/GrCaps.h" +#include "src/gpu/GrRecordingContextPriv.h" #include "tests/Test.h" #include "tools/Resources.h" #include "tools/ToolUtils.h" -#include "include/gpu/GrContext.h" -#include "src/gpu/GrCaps.h" -#include "src/gpu/GrContextPriv.h" - static const int kBitmapSize = 4; namespace { @@ -491,6 +491,19 @@ static void test_cropRects(skiatest::Reporter* reporter, GrContext* context) { } } +static bool special_image_to_bitmap(const SkSpecialImage* src, SkBitmap* dst) { + sk_sp img = src->asImage(); + if (!img) { + return false; + } + + if (!dst->tryAllocN32Pixels(src->width(), src->height())) { + return false; + } + + return img->readPixels(dst->pixmap(), src->subset().fLeft, src->subset().fTop); +} + static void test_negative_blur_sigma(skiatest::Reporter* reporter, GrContext* context) { // Check that SkBlurImageFilter will accept a negative sigma, either in // the given arguments or after CTM application. @@ -500,12 +513,9 @@ static void test_negative_blur_sigma(skiatest::Reporter* reporter, GrContext* co sk_sp positiveFilter(SkImageFilters::Blur(kBlurSigma, kBlurSigma, nullptr)); sk_sp negativeFilter(SkImageFilters::Blur(-kBlurSigma, kBlurSigma, nullptr)); - SkBitmap gradient = make_gradient_circle(kWidth, kHeight); - sk_sp imgSrc(SkSpecialImage::MakeFromRaster(SkIRect::MakeWH(kWidth, kHeight), - gradient)); - if (context) { - imgSrc = imgSrc->makeTextureImage(context); - } + sk_sp gradient = SkImage::MakeFromBitmap(make_gradient_circle(kWidth, kHeight)); + sk_sp imgSrc( + SkSpecialImage::MakeFromImage(context, SkIRect::MakeWH(kWidth, kHeight), gradient)); SkIPoint offset; SkImageFilter_Base::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr, @@ -536,10 +546,10 @@ static void test_negative_blur_sigma(skiatest::Reporter* reporter, GrContext* co SkBitmap positiveResultBM1, positiveResultBM2; SkBitmap negativeResultBM1, negativeResultBM2; - REPORTER_ASSERT(reporter, positiveResult1->getROPixels(&positiveResultBM1)); - REPORTER_ASSERT(reporter, positiveResult2->getROPixels(&positiveResultBM2)); - REPORTER_ASSERT(reporter, negativeResult1->getROPixels(&negativeResultBM1)); - REPORTER_ASSERT(reporter, negativeResult2->getROPixels(&negativeResultBM2)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(positiveResult1.get(), &positiveResultBM1)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(positiveResult2.get(), &positiveResultBM2)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(negativeResult1.get(), &negativeResultBM1)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(negativeResult2.get(), &negativeResultBM2)); for (int y = 0; y < kHeight; y++) { int diffs = memcmp(positiveResultBM1.getAddr32(0, y), @@ -571,7 +581,7 @@ DEF_TEST(ImageFilterNegativeBlurSigma, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterNegativeBlurSigma_Gpu, reporter, ctxInfo) { - test_negative_blur_sigma(reporter, ctxInfo.grContext()); + test_negative_blur_sigma(reporter, ctxInfo.directContext()); } static void test_morphology_radius_with_mirror_ctm(skiatest::Reporter* reporter, GrContext* context) { @@ -590,12 +600,9 @@ static void test_morphology_radius_with_mirror_ctm(skiatest::Reporter* reporter, paint.setColor(SK_ColorWHITE); canvas.drawRect(SkRect::MakeXYWH(kWidth / 4, kHeight / 4, kWidth / 2, kHeight / 2), paint); - - sk_sp imgSrc(SkSpecialImage::MakeFromRaster(SkIRect::MakeWH(kWidth, kHeight), - bitmap)); - if (context) { - imgSrc = imgSrc->makeTextureImage(context); - } + sk_sp image = SkImage::MakeFromBitmap(bitmap); + sk_sp imgSrc( + SkSpecialImage::MakeFromImage(context, SkIRect::MakeWH(kWidth, kHeight), image)); SkIPoint offset; SkImageFilter_Base::Context ctx(SkMatrix::I(), SkIRect::MakeWH(32, 32), nullptr, @@ -627,9 +634,9 @@ static void test_morphology_radius_with_mirror_ctm(skiatest::Reporter* reporter, SkBitmap normalResultBM, mirrorXResultBM, mirrorYResultBM; - REPORTER_ASSERT(reporter, normalResult->getROPixels(&normalResultBM)); - REPORTER_ASSERT(reporter, mirrorXResult->getROPixels(&mirrorXResultBM)); - REPORTER_ASSERT(reporter, mirrorYResult->getROPixels(&mirrorYResultBM)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(normalResult.get(), &normalResultBM)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(mirrorXResult.get(), &mirrorXResultBM)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(mirrorYResult.get(), &mirrorYResultBM)); for (int y = 0; y < kHeight; y++) { int diffs = memcmp(normalResultBM.getAddr32(0, y), @@ -654,7 +661,7 @@ DEF_TEST(MorphologyFilterRadiusWithMirrorCTM, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(MorphologyFilterRadiusWithMirrorCTM_Gpu, reporter, ctxInfo) { - test_morphology_radius_with_mirror_ctm(reporter, ctxInfo.grContext()); + test_morphology_radius_with_mirror_ctm(reporter, ctxInfo.directContext()); } static void test_zero_blur_sigma(skiatest::Reporter* reporter, GrContext* context) { @@ -678,7 +685,7 @@ static void test_zero_blur_sigma(skiatest::Reporter* reporter, GrContext* contex SkBitmap resultBM; - REPORTER_ASSERT(reporter, result->getROPixels(&resultBM)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(result.get(), &resultBM)); for (int y = 0; y < resultBM.height(); y++) { for (int x = 0; x < resultBM.width(); x++) { @@ -696,7 +703,7 @@ DEF_TEST(ImageFilterZeroBlurSigma, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterZeroBlurSigma_Gpu, reporter, ctxInfo) { - test_zero_blur_sigma(reporter, ctxInfo.grContext()); + test_zero_blur_sigma(reporter, ctxInfo.directContext()); } @@ -708,7 +715,7 @@ static void test_fail_affects_transparent_black(skiatest::Reporter* reporter, Gr SkImageFilter_Base::Context ctx(SkMatrix::I(), SkIRect::MakeXYWH(0, 0, 1, 1), nullptr, kN32_SkColorType, nullptr, source.get()); sk_sp green(SkColorFilters::Blend(SK_ColorGREEN, SkBlendMode::kSrc)); - SkASSERT(green->affectsTransparentBlack()); + SkASSERT(as_CFB(green)->affectsTransparentBlack()); sk_sp greenFilter(SkImageFilters::ColorFilter(std::move(green), std::move(failFilter))); SkIPoint offset; @@ -716,7 +723,7 @@ static void test_fail_affects_transparent_black(skiatest::Reporter* reporter, Gr REPORTER_ASSERT(reporter, nullptr != result.get()); if (result.get()) { SkBitmap resultBM; - REPORTER_ASSERT(reporter, result->getROPixels(&resultBM)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(result.get(), &resultBM)); REPORTER_ASSERT(reporter, *resultBM.getAddr32(0, 0) == SK_ColorGREEN); } } @@ -726,7 +733,7 @@ DEF_TEST(ImageFilterFailAffectsTransparentBlack, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterFailAffectsTransparentBlack_Gpu, reporter, ctxInfo) { - test_fail_affects_transparent_black(reporter, ctxInfo.grContext()); + test_fail_affects_transparent_black(reporter, ctxInfo.directContext()); } DEF_TEST(ImageFilterDrawTiled, reporter) { @@ -1004,7 +1011,7 @@ DEF_TEST(ImageFilterMergeResultSize, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterMergeResultSize_Gpu, reporter, ctxInfo) { - test_imagefilter_merge_result_size(reporter, ctxInfo.grContext()); + test_imagefilter_merge_result_size(reporter, ctxInfo.directContext()); } static void draw_blurred_rect(SkCanvas* canvas) { @@ -1163,7 +1170,7 @@ DEF_TEST(ImageFilterMatrixConvolutionBigKernel, reporter) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterMatrixConvolutionBigKernel_Gpu, reporter, ctxInfo) { - test_big_kernel(reporter, ctxInfo.grContext()); + test_big_kernel(reporter, ctxInfo.directContext()); } DEF_TEST(ImageFilterCropRect, reporter) { @@ -1171,7 +1178,7 @@ DEF_TEST(ImageFilterCropRect, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterCropRect_Gpu, reporter, ctxInfo) { - test_cropRects(reporter, ctxInfo.grContext()); + test_cropRects(reporter, ctxInfo.directContext()); } DEF_TEST(ImageFilterMatrix, reporter) { @@ -1233,7 +1240,7 @@ DEF_TEST(ImageFilterClippedPictureImageFilter, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterClippedPictureImageFilter_Gpu, reporter, ctxInfo) { - test_clipped_picture_imagefilter(reporter, ctxInfo.grContext()); + test_clipped_picture_imagefilter(reporter, ctxInfo.directContext()); } DEF_TEST(ImageFilterEmptySaveLayer, reporter) { @@ -1460,7 +1467,7 @@ DEF_TEST(ComposedImageFilterOffset, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ComposedImageFilterOffset_Gpu, reporter, ctxInfo) { - test_composed_imagefilter_offset(reporter, ctxInfo.grContext()); + test_composed_imagefilter_offset(reporter, ctxInfo.directContext()); } static void test_composed_imagefilter_bounds(skiatest::Reporter* reporter, GrContext* context) { @@ -1492,7 +1499,7 @@ static void test_composed_imagefilter_bounds(skiatest::Reporter* reporter, GrCon REPORTER_ASSERT(reporter, result->subset().size() == SkISize::Make(100, 100)); SkBitmap resultBM; - REPORTER_ASSERT(reporter, result->getROPixels(&resultBM)); + REPORTER_ASSERT(reporter, special_image_to_bitmap(result.get(), &resultBM)); REPORTER_ASSERT(reporter, resultBM.getColor(50, 50) == SK_ColorGREEN); } @@ -1501,7 +1508,7 @@ DEF_TEST(ComposedImageFilterBounds, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ComposedImageFilterBounds_Gpu, reporter, ctxInfo) { - test_composed_imagefilter_bounds(reporter, ctxInfo.grContext()); + test_composed_imagefilter_bounds(reporter, ctxInfo.directContext()); } DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { @@ -1519,7 +1526,7 @@ DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { { SkColorFilter* grayCF; REPORTER_ASSERT(reporter, gray->asAColorFilter(&grayCF)); - REPORTER_ASSERT(reporter, !grayCF->affectsTransparentBlack()); + REPORTER_ASSERT(reporter, !as_CFB(grayCF)->affectsTransparentBlack()); grayCF->unref(); } REPORTER_ASSERT(reporter, gray->canComputeFastBounds()); @@ -1538,7 +1545,7 @@ DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { sk_sp greenCF(SkColorFilters::Matrix(greenMatrix)); sk_sp green(SkImageFilters::ColorFilter(greenCF, nullptr)); - REPORTER_ASSERT(reporter, greenCF->affectsTransparentBlack()); + REPORTER_ASSERT(reporter, as_CFB(greenCF)->affectsTransparentBlack()); REPORTER_ASSERT(reporter, !green->canComputeFastBounds()); sk_sp greenBlur(SkImageFilters::Blur(SK_Scalar1, SK_Scalar1, @@ -1555,13 +1562,13 @@ DEF_TEST(ImageFilterCanComputeFastBounds, reporter) { sk_sp identityCF(SkTableColorFilter::MakeARGB(identity, identity, identity, allOne)); sk_sp identityFilter(SkImageFilters::ColorFilter(identityCF, nullptr)); - REPORTER_ASSERT(reporter, !identityCF->affectsTransparentBlack()); + REPORTER_ASSERT(reporter, !as_CFB(identityCF)->affectsTransparentBlack()); REPORTER_ASSERT(reporter, identityFilter->canComputeFastBounds()); sk_sp forceOpaqueCF(SkTableColorFilter::MakeARGB(allOne, identity, identity, identity)); sk_sp forceOpaque(SkImageFilters::ColorFilter(forceOpaqueCF, nullptr)); - REPORTER_ASSERT(reporter, forceOpaqueCF->affectsTransparentBlack()); + REPORTER_ASSERT(reporter, as_CFB(forceOpaqueCF)->affectsTransparentBlack()); REPORTER_ASSERT(reporter, !forceOpaque->canComputeFastBounds()); } @@ -1604,7 +1611,7 @@ static void test_large_blur_input(skiatest::Reporter* reporter, SkCanvas* canvas int largeW = 5000; int largeH = 5000; // If we're GPU-backed make the bitmap too large to be converted into a texture. - if (GrContext* ctx = canvas->getGrContext()) { + if (auto ctx = canvas->recordingContext()) { largeW = ctx->priv().caps()->maxTextureSize() + 1; } @@ -1709,12 +1716,12 @@ DEF_TEST(ImageFilterMakeWithFilter, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterMakeWithFilter_Gpu, reporter, ctxInfo) { - test_make_with_filter(reporter, ctxInfo.grContext()); + test_make_with_filter(reporter, ctxInfo.directContext()); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterHugeBlur_Gpu, reporter, ctxInfo) { - sk_sp surf(SkSurface::MakeRenderTarget(ctxInfo.grContext(), + sk_sp surf(SkSurface::MakeRenderTarget(ctxInfo.directContext(), SkBudgeted::kNo, SkImageInfo::MakeN32Premul(100, 100))); @@ -1726,7 +1733,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageFilterHugeBlur_Gpu, reporter, ctxInfo) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(XfermodeImageFilterCroppedInput_Gpu, reporter, ctxInfo) { sk_sp surf(SkSurface::MakeRenderTarget( - ctxInfo.grContext(), + ctxInfo.directContext(), SkBudgeted::kNo, SkImageInfo::Make(1, 1, kRGBA_8888_SkColorType, kPremul_SkAlphaType))); @@ -1735,7 +1742,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(XfermodeImageFilterCroppedInput_Gpu, reporter DEF_GPUTEST_FOR_ALL_CONTEXTS(ImageFilterBlurLargeImage_Gpu, reporter, ctxInfo) { auto surface(SkSurface::MakeRenderTarget( - ctxInfo.grContext(), SkBudgeted::kYes, + ctxInfo.directContext(), SkBudgeted::kYes, SkImageInfo::Make(100, 100, kRGBA_8888_SkColorType, kPremul_SkAlphaType))); test_large_blur_input(reporter, surface->getCanvas()); } diff --git a/tests/ImageIsOpaqueTest.cpp b/tests/ImageIsOpaqueTest.cpp index d7fced9554e06..67b5e87fde7d5 100644 --- a/tests/ImageIsOpaqueTest.cpp +++ b/tests/ImageIsOpaqueTest.cpp @@ -12,7 +12,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkImage.h" #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkReadBuffer.h" #include "src/core/SkWriteBuffer.h" @@ -33,7 +33,7 @@ DEF_TEST(ImageIsOpaqueTest, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageIsOpaqueTest_Gpu, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkImageInfo infoTransparent = SkImageInfo::MakeN32Premul(5, 5); auto surfaceTransparent(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, infoTransparent)); check_isopaque(reporter, surfaceTransparent, false); diff --git a/tests/ImageNewShaderTest.cpp b/tests/ImageNewShaderTest.cpp index 6dae947add233..f5c22f1e0aa07 100644 --- a/tests/ImageNewShaderTest.cpp +++ b/tests/ImageNewShaderTest.cpp @@ -10,10 +10,9 @@ #include "include/core/SkShader.h" #include "include/core/SkSurface.h" #include "include/core/SkTypes.h" +#include "include/gpu/GrDirectContext.h" #include "tests/Test.h" -#include "include/gpu/GrContext.h" - static void test_bitmap_equality(skiatest::Reporter* reporter, SkBitmap& bm1, SkBitmap& bm2) { REPORTER_ASSERT(reporter, bm1.computeByteSize() == bm2.computeByteSize()); REPORTER_ASSERT(reporter, 0 == memcmp(bm1.getPixels(), bm2.getPixels(), bm1.computeByteSize())); @@ -132,12 +131,14 @@ static void raster_to_gpu(skiatest::Reporter* reporter, GrContext* context) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageNewShader_GPU, reporter, ctxInfo) { + auto context = ctxInfo.directContext(); + // GPU -> GPU - gpu_to_gpu(reporter, ctxInfo.grContext()); + gpu_to_gpu(reporter, context); // GPU -> RASTER - gpu_to_raster(reporter, ctxInfo.grContext()); + gpu_to_raster(reporter, context); // RASTER -> GPU - raster_to_gpu(reporter, ctxInfo.grContext()); + raster_to_gpu(reporter, context); } diff --git a/tests/ImageTest.cpp b/tests/ImageTest.cpp index 3b6707343e4c3..e90af19331525 100644 --- a/tests/ImageTest.cpp +++ b/tests/ImageTest.cpp @@ -21,6 +21,7 @@ #include "include/core/SkStream.h" #include "include/core/SkSurface.h" #include "include/gpu/GrContextThreadSafeProxy.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkImagePriv.h" @@ -182,7 +183,7 @@ DEF_TEST(ImageEncode, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageEncode_Gpu, reporter, ctxInfo) { - test_encode(reporter, create_gpu_image(ctxInfo.grContext()).get()); + test_encode(reporter, create_gpu_image(ctxInfo.directContext()).get()); } DEF_TEST(Image_MakeFromRasterBitmap, reporter) { @@ -338,7 +339,7 @@ DEF_TEST(image_newfrombitmap, reporter) { */ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkImage_Gpu2Cpu, reporter, ctxInfo) { SkImageInfo info = SkImageInfo::MakeN32(20, 20, kOpaque_SkAlphaType); - sk_sp image(create_gpu_image(ctxInfo.grContext())); + sk_sp image(create_gpu_image(ctxInfo.directContext())); const auto desc = SkBitmapCacheDesc::Make(image.get()); auto surface(SkSurface::MakeRaster(info)); @@ -371,7 +372,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkImage_Gpu2Cpu, reporter, ctxInfo) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkImage_makeTextureImage, reporter, contextInfo) { - GrContext* context = contextInfo.grContext(); + auto context = contextInfo.directContext(); sk_gpu_test::TestContext* testContext = contextInfo.testContext(); GrContextFactory otherFactory; ContextInfo otherContextInfo = otherFactory.getContextInfo(contextInfo.type()); @@ -387,8 +388,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkImage_makeTextureImage, reporter, contextIn // Create a texture image in a another GrContext. [otherContextInfo] { auto restore = otherContextInfo.testContext()->makeCurrentAndAutoRestore(); - sk_sp otherContextImage = create_gpu_image(otherContextInfo.grContext()); - otherContextInfo.grContext()->flushAndSubmit(); + auto otherContextImage = create_gpu_image(otherContextInfo.directContext()); + otherContextInfo.directContext()->flushAndSubmit(); return otherContextImage; }}; for (auto mipMapped : {GrMipMapped::kNo, GrMipMapped::kYes}) { @@ -448,7 +449,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkImage_makeTextureImage, reporter, contextIn } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkImage_makeNonTextureImage, reporter, contextInfo) { - GrContext* context = contextInfo.grContext(); + auto context = contextInfo.directContext(); std::function()> imageFactories[] = { create_image, @@ -475,7 +476,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkImage_makeNonTextureImage, reporter, contex } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrContext_colorTypeSupportedAsImage, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); static constexpr int kSize = 10; @@ -509,7 +510,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(UnpremulTextureImage, reporter, ctxInfo) { SkColorSetARGB((U8CPU)y, 255 - (U8CPU)y, (U8CPU)x, 255 - (U8CPU)x); } } - auto texImage = SkImage::MakeFromBitmap(bmp)->makeTextureImage(ctxInfo.grContext()); + auto texImage = SkImage::MakeFromBitmap(bmp)->makeTextureImage(ctxInfo.directContext()); if (!texImage || texImage->alphaType() != kUnpremul_SkAlphaType) { ERRORF(reporter, "Failed to make unpremul texture image."); return; @@ -705,7 +706,7 @@ DEF_TEST(ImageReadPixels, reporter) { image_test_read_pixels(reporter, image.get()); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageReadPixels_Gpu, reporter, ctxInfo) { - image_test_read_pixels(reporter, create_gpu_image(ctxInfo.grContext()).get()); + image_test_read_pixels(reporter, create_gpu_image(ctxInfo.directContext()).get()); } static void check_legacy_bitmap(skiatest::Reporter* reporter, const SkImage* image, @@ -761,7 +762,7 @@ DEF_TEST(ImageLegacyBitmap, reporter) { test_legacy_bitmap(reporter, image.get()); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageLegacyBitmap_Gpu, reporter, ctxInfo) { - sk_sp image(create_gpu_image(ctxInfo.grContext())); + sk_sp image(create_gpu_image(ctxInfo.directContext())); test_legacy_bitmap(reporter, image.get()); } @@ -801,7 +802,7 @@ DEF_TEST(ImagePeek, reporter) { test_peek(reporter, image.get(), false); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImagePeek_Gpu, reporter, ctxInfo) { - sk_sp image(create_gpu_image(ctxInfo.grContext())); + sk_sp image(create_gpu_image(ctxInfo.directContext())); test_peek(reporter, image.get(), false); } @@ -817,7 +818,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkImage_NewFromTextureRelease, reporter, c const int kWidth = 10; const int kHeight = 10; - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); SkImageInfo ii = SkImageInfo::Make(kWidth, kHeight, SkColorType::kRGBA_8888_SkColorType, kPremul_SkAlphaType); @@ -860,7 +861,7 @@ static void test_cross_context_image(skiatest::Reporter* reporter, const GrConte GrContextFactory testFactory(options); GrContextFactory::ContextType ctxType = static_cast(i); ContextInfo ctxInfo = testFactory.getContextInfo(ctxType); - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); if (!ctx) { continue; } @@ -919,7 +920,7 @@ static void test_cross_context_image(skiatest::Reporter* reporter, const GrConte sk_gpu_test::TestContext* testContext = ctxInfo.testContext(); ContextInfo otherContextInfo = testFactory.getSharedContextInfo(ctx); - GrContext* otherCtx = otherContextInfo.grContext(); + auto otherCtx = otherContextInfo.directContext(); sk_gpu_test::TestContext* otherTestContext = otherContextInfo.testContext(); // Creating a context in a share group may fail @@ -1032,7 +1033,7 @@ DEF_GPUTEST(SkImage_CrossContextGrayAlphaConfigs, reporter, options) { GrContextFactory testFactory(options); GrContextFactory::ContextType ctxType = static_cast(i); ContextInfo ctxInfo = testFactory.getContextInfo(ctxType); - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); if (!ctx || !ctx->priv().caps()->crossContextTextureSupport()) { continue; } @@ -1051,7 +1052,7 @@ DEF_GPUTEST(SkImage_CrossContextGrayAlphaConfigs, reporter, options) { } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(makeBackendTexture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); sk_gpu_test::TestContext* testContext = ctxInfo.testContext(); sk_sp proxy = context->threadSafeProxy(); @@ -1076,8 +1077,8 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(makeBackendTexture, reporter, ctxInfo) { // Create a texture image in a another GrContext. { [otherContextInfo] { auto restore = otherContextInfo.testContext()->makeCurrentAndAutoRestore(); - sk_sp otherContextImage = create_gpu_image(otherContextInfo.grContext()); - otherContextInfo.grContext()->flushAndSubmit(); + sk_sp otherContextImage = create_gpu_image(otherContextInfo.directContext()); + otherContextInfo.directContext()->flushAndSubmit(); return otherContextImage; }, false, false }, // Create an image that is too large to be texture backed. @@ -1315,8 +1316,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageScalePixels_Gpu, reporter, ctxInfo) { const SkColor red = SK_ColorRED; SkImageInfo info = SkImageInfo::MakeN32Premul(16, 16); - sk_sp surface = SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, - info); + sk_sp surface = SkSurface::MakeRenderTarget(ctxInfo.directContext(), + SkBudgeted::kNo, info); surface->getCanvas()->clear(red); sk_sp gpuImage = surface->makeImageSnapshot(); test_scale_pixels(reporter, gpuImage.get(), pmRed); @@ -1364,9 +1365,9 @@ static sk_sp make_yuva_image(GrContext* c) { } DEF_GPUTEST_FOR_ALL_CONTEXTS(ImageFlush, reporter, ctxInfo) { - auto c = ctxInfo.grContext(); + auto direct = ctxInfo.directContext(); auto ii = SkImageInfo::Make(10, 10, kRGBA_8888_SkColorType, kPremul_SkAlphaType); - auto s = SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kYes, ii, 1, nullptr); + auto s = SkSurface::MakeRenderTarget(direct, SkBudgeted::kYes, ii, 1, nullptr); s->getCanvas()->clear(SK_ColorRED); auto i0 = s->makeImageSnapshot(); @@ -1374,59 +1375,58 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ImageFlush, reporter, ctxInfo) { auto i1 = s->makeImageSnapshot(); s->getCanvas()->clear(SK_ColorGREEN); // Make a YUVA image. - auto i2 = make_yuva_image(c); + auto i2 = make_yuva_image(direct); // Flush all the setup work we did above and then make little lambda that reports the flush // count delta since the last time it was called. - c->flushAndSubmit(); - auto numSubmits = [c, submitCnt = c->priv().getGpu()->stats()->numSubmitToGpus()]() mutable { - int curr = c->priv().getGpu()->stats()->numSubmitToGpus(); + direct->flushAndSubmit(); + auto numSubmits = [direct, + submitCnt = direct->priv().getGpu()->stats()->numSubmitToGpus()]() mutable { + int curr = direct->priv().getGpu()->stats()->numSubmitToGpus(); int n = curr - submitCnt; submitCnt = curr; return n; }; // Images aren't used therefore flush is ignored, but submit is still called. - i0->flushAndSubmit(c); - i1->flushAndSubmit(c); - i2->flushAndSubmit(c); + i0->flushAndSubmit(direct); + i1->flushAndSubmit(direct); + i2->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 3); // Syncing forces the flush to happen even if the images aren't used. - GrFlushInfo syncInfo; - syncInfo.fFlags = kSyncCpu_GrFlushFlag; - i0->flush(c, syncInfo); - c->submit(true); + i0->flush(direct); + direct->submit(true); REPORTER_ASSERT(reporter, numSubmits() == 1); - i1->flush(c, syncInfo); - c->submit(true); + i1->flush(direct); + direct->submit(true); REPORTER_ASSERT(reporter, numSubmits() == 1); - i2->flush(c, syncInfo); - c->submit(true); + i2->flush(direct); + direct->submit(true); REPORTER_ASSERT(reporter, numSubmits() == 1); // Use image 1 s->getCanvas()->drawImage(i1, 0, 0); // Flushing image 0 should do nothing, but submit is still called. - i0->flushAndSubmit(c); + i0->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Flushing image 1 should flush. - i1->flushAndSubmit(c); + i1->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Flushing image 2 should do nothing, but submit is still called. - i2->flushAndSubmit(c); + i2->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Use image 2 s->getCanvas()->drawImage(i2, 0, 0); // Flushing image 0 should do nothing, but submit is still called. - i0->flushAndSubmit(c); + i0->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Flushing image 1 do nothing, but submit is still called. - i1->flushAndSubmit(c); + i1->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Flushing image 2 should flush. - i2->flushAndSubmit(c); + i2->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Since we just did a simple image draw it should not have been flattened. REPORTER_ASSERT(reporter, @@ -1434,40 +1434,40 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ImageFlush, reporter, ctxInfo) { REPORTER_ASSERT(reporter, static_cast(as_IB(i2.get()))->isTextureBacked()); // Flatten it and repeat. - as_IB(i2.get())->view(c); + as_IB(i2.get())->view(direct); REPORTER_ASSERT(reporter, static_cast(as_IB(i2.get()))->testingOnly_IsFlattened()); REPORTER_ASSERT(reporter, static_cast(as_IB(i2.get()))->isTextureBacked()); s->getCanvas()->drawImage(i2, 0, 0); // Flushing image 0 should do nothing, but submit is still called. - i0->flushAndSubmit(c); + i0->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Flushing image 1 do nothing, but submit is still called. - i1->flushAndSubmit(c); + i1->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Flushing image 2 should flush. - i2->flushAndSubmit(c); + i2->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Test case where flatten happens before the first flush. - i2 = make_yuva_image(c); + i2 = make_yuva_image(direct); // On some systems where preferVRAMUseOverFlushes is false (ANGLE on Windows) the above may // actually flush in order to make textures for the YUV planes. TODO: Remove this when we // make the YUVA planes from backend textures rather than pixmaps that GrContext must upload. // Calling numSubmits rebases the flush count from here. numSubmits(); - as_IB(i2.get())->view(c); + as_IB(i2.get())->view(direct); REPORTER_ASSERT(reporter, static_cast(as_IB(i2.get()))->testingOnly_IsFlattened()); REPORTER_ASSERT(reporter, static_cast(as_IB(i2.get()))->isTextureBacked()); s->getCanvas()->drawImage(i2, 0, 0); // Flushing image 0 should do nothing, but submit is still called. - i0->flushAndSubmit(c); + i0->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Flushing image 1 do nothing, but submit is still called. - i1->flushAndSubmit(c); + i1->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); // Flushing image 2 should flush, but submit is still called. - i2->flushAndSubmit(c); + i2->flushAndSubmit(direct); REPORTER_ASSERT(reporter, numSubmits() == 1); } diff --git a/tests/LazyProxyTest.cpp b/tests/LazyProxyTest.cpp index 9f3009010cdfe..77965a4b3436c 100644 --- a/tests/LazyProxyTest.cpp +++ b/tests/LazyProxyTest.cpp @@ -146,9 +146,9 @@ class LazyProxyTest final : public GrOnFlushCallbackObject { }, format, GrRenderable::kYes, 1, GrProtected::kNo, *proxyProvider->caps(), GrSurfaceProxy::UseAllocator::kYes); - fAccess.set(GrSurfaceProxyView(fLazyProxy, kOrigin, readSwizzle), - GrSamplerState::Filter::kNearest); - this->setTextureSamplerCnt(1); + auto atlasEffect = GrTextureEffect::Make({fLazyProxy, kOrigin, readSwizzle}, + kPremul_SkAlphaType); + this->registerChild(std::move(atlasEffect)); } private: @@ -159,14 +159,12 @@ class LazyProxyTest final : public GrOnFlushCallbackObject { GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { return nullptr; } void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} bool onIsEqual(const GrFragmentProcessor&) const override { return false; } - const TextureSampler& onTextureSampler(int) const override { return fAccess; } GrRecordingContext* const fContext; GrProxyProvider* const fProxyProvider; LazyProxyTest* const fTest; GrTextureProxy* const fAtlas; sk_sp fLazyProxy; - TextureSampler fAccess; }; @@ -177,14 +175,16 @@ class LazyProxyTest final : public GrOnFlushCallbackObject { , fAtlas(atlas) {} private: - bool apply(GrRecordingContext* context, GrRenderTargetContext*, bool useHWAA, - bool hasUserStencilSettings, GrAppliedClip* out, SkRect* bounds) const override { + SkIRect getConservativeBounds() const final { + return SkIRect::MakeSize(fAtlas->dimensions()); + } + Effect apply(GrRecordingContext* context, GrRenderTargetContext*, bool useHWAA, + bool hasUserStencilSettings, GrAppliedClip* out, + SkRect* bounds) const override { GrProxyProvider* proxyProvider = context->priv().proxyProvider(); out->addCoverageFP(std::make_unique(context, proxyProvider, fTest, fAtlas)); - return true; + return Effect::kClipped; } - bool quickContains(const SkRect&) const final { return false; } - bool isRRect(const SkRect& rtBounds, SkRRect* rr, GrAA*) const final { return false; } LazyProxyTest* const fTest; GrTextureProxy* fAtlas; diff --git a/tests/MatrixColorFilterTest.cpp b/tests/MatrixColorFilterTest.cpp index ea558cf444538..62507c8f0f8b5 100644 --- a/tests/MatrixColorFilterTest.cpp +++ b/tests/MatrixColorFilterTest.cpp @@ -10,12 +10,13 @@ #include "include/core/SkPaint.h" #include "include/core/SkSurface.h" #include "include/effects/SkColorMatrix.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "tests/Test.h" #include "tests/TestUtils.h" DEF_GPUTEST_FOR_RENDERING_CONTEXTS(MatrixColorFilter_TransparentBlack, reporter, info) { - auto* context = info.grContext(); + auto context = info.directContext(); // Make a transparent black image rather than use a paint color to avoid an optimization that // applies the color filter on the CPU to paint colors. auto imgSurf = SkSurface::MakeRenderTarget(context, SkBudgeted::kYes, diff --git a/tests/MtlBackendAllocationTest.mm b/tests/MtlBackendAllocationTest.mm index fe164721fa4d9..f90a38fa8e60d 100644 --- a/tests/MtlBackendAllocationTest.mm +++ b/tests/MtlBackendAllocationTest.mm @@ -5,7 +5,7 @@ * found in the LICENSE file. */ -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "tests/Test.h" @@ -34,7 +34,7 @@ static void mark_signaled(void* context) { } DEF_GPUTEST_FOR_METAL_CONTEXT(MtlBackendAllocationTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrMtlCaps* mtlCaps = static_cast(context->priv().caps()); constexpr SkColor4f kTransCol { 0, 0.25f, 0.75f, 0.5f }; diff --git a/tests/MtlCopySurfaceTest.mm b/tests/MtlCopySurfaceTest.mm index 9b1e1eed4febc..41a0f62b85718 100644 --- a/tests/MtlCopySurfaceTest.mm +++ b/tests/MtlCopySurfaceTest.mm @@ -6,7 +6,7 @@ */ #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/mtl/GrMtlGpu.h" @@ -22,7 +22,7 @@ static const int kWidth = 1024; static const int kHeight = 768; - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); // This is a bit weird, but it's the only way to get a framebufferOnly surface GrMtlGpu* gpu = (GrMtlGpu*) context->priv().getGpu(); @@ -42,7 +42,7 @@ GrBackendRenderTarget backendRT(kWidth, kHeight, 1, fbInfo); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); - sk_sp srcProxy = proxyProvider->wrapBackendRenderTarget(backendRT); + sk_sp srcProxy = proxyProvider->wrapBackendRenderTarget(backendRT, nullptr); auto dstProxy = GrSurfaceProxy::Copy(context, srcProxy.get(), diff --git a/tests/OnFlushCallbackTest.cpp b/tests/OnFlushCallbackTest.cpp index e817b4a6a5998..afaf4b81a3632 100644 --- a/tests/OnFlushCallbackTest.cpp +++ b/tests/OnFlushCallbackTest.cpp @@ -9,6 +9,7 @@ #include "include/core/SkBitmap.h" #include "include/gpu/GrBackendSemaphore.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkPointPriv.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDefaultGeoProcFactory.h" @@ -84,7 +85,7 @@ class NonAARectOp : public GrMeshDrawOp { GrProcessorAnalysisColor gpColor; gpColor.setToUnknown(); // We ignore the clip so pass this rather than the GrAppliedClip param. - static GrAppliedClip kNoClip; + static GrAppliedClip kNoClip = GrAppliedClip::Disabled(); return fHelper.finalizeProcessors(caps, &kNoClip, hasMixedSampledCoverage, clampType, GrProcessorAnalysisCoverage::kNone, &gpColor); } @@ -561,7 +562,7 @@ static void test_color(skiatest::Reporter* reporter, const SkBitmap& bm, int x, DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(OnFlushCallbackTest, reporter, ctxInfo) { static const int kNumViews = 3; - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); auto proxyProvider = context->priv().proxyProvider(); AtlasObject object(reporter); @@ -598,7 +599,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(OnFlushCallbackTest, reporter, ctxInfo) { rtc->drawRect(nullptr, std::move(paint), GrAA::kNo, SkMatrix::I(), r); } - rtc->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo()); + rtc->flush(SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo(), nullptr); SkBitmap readBack; readBack.allocN32Pixels(kFinalWidth, kFinalHeight); diff --git a/tests/OpChainTest.cpp b/tests/OpChainTest.cpp index f86eb04037139..8ebf5cccaff3b 100644 --- a/tests/OpChainTest.cpp +++ b/tests/OpChainTest.cpp @@ -202,6 +202,7 @@ DEF_GPUTEST(OpChainTest, reporter, /*ctxInfo*/) { SkRandom random; bool repeat = false; Combinable combinable; + GrDrawingManager* drawingMgr = context->priv().drawingManager(); for (int p = 0; p < kNumPermutations; ++p) { for (int i = 0; i < kNumOps - 2 && !repeat; ++i) { // The current implementation of nextULessThan() is biased. :( @@ -216,7 +217,8 @@ DEF_GPUTEST(OpChainTest, reporter, /*ctxInfo*/) { GrOpFlushState flushState(context->priv().getGpu(), context->priv().resourceProvider(), &tracker); - GrOpsTask opsTask(context->priv().arenas(), + GrOpsTask opsTask(drawingMgr, + context->priv().arenas(), GrSurfaceProxyView(proxy, kOrigin, writeSwizzle), context->priv().auditTrail()); // This assumes the particular values of kRanges. @@ -232,14 +234,15 @@ DEF_GPUTEST(OpChainTest, reporter, /*ctxInfo*/) { range.fOffset += pos; auto op = TestOp::Make(context.get(), value, range, result, &combinable); op->writeResult(validResult); - opsTask.addOp(std::move(op), + opsTask.addOp(drawingMgr, std::move(op), GrTextureResolveManager(context->priv().drawingManager()), *context->priv().caps()); } opsTask.makeClosed(*context->priv().caps()); opsTask.prepare(&flushState); opsTask.execute(&flushState); - opsTask.endFlush(); + opsTask.endFlush(drawingMgr); + opsTask.disown(drawingMgr); #if 0 // Useful to repeat a random configuration that fails the test while debugger attached. if (!std::equal(result, result + result_width(), validResult)) { repeat = true; diff --git a/tests/PDFTaggedTableTest.cpp b/tests/PDFTaggedTableTest.cpp index 736c9ca70dda9..f108970d4b913 100644 --- a/tests/PDFTaggedTableTest.cpp +++ b/tests/PDFTaggedTableTest.cpp @@ -81,15 +81,19 @@ DEF_TEST(SkPDF_tagged_table, r) { cell->fTypeString = "TH"; } else { cell->fTypeString = "TD"; + std::vector headerIds; + headerIds.push_back(10 + rowIndex * kColCount); // Row header + headerIds.push_back(10 + colIndex); // Col header. + cell->fAttributes.appendNodeIdArray( + "Table", "Headers", headerIds); } - cell->fChildCount = 0; if (cellIndex == 13) { cell->fAttributes.appendInt("Table", "RowSpan", 2); } else if (cellIndex == 14 || cellIndex == 18) { cell->fAttributes.appendInt("Table", "ColSpan", 2); } else if (rowIndex == 0 || colIndex == 0) { - cell->fAttributes.appendString( + cell->fAttributes.appendName( "Table", "Scope", rowIndex == 0 ? "Column" : "Row"); } cells.push_back(std::move(cell)); diff --git a/tests/PDFTaggedTest.cpp b/tests/PDFTaggedTest.cpp index fa1c896cdbf0c..385e6275b60e3 100644 --- a/tests/PDFTaggedTest.cpp +++ b/tests/PDFTaggedTest.cpp @@ -35,72 +35,69 @@ DEF_TEST(SkPDF_tagged_doc, r) { metadata.fModified = now; // The document tag. - PDFTag root; - root.fNodeId = 1; - root.fType = SkPDF::DocumentStructureType::kDocument; - root.fChildCount = 6; - PDFTag rootChildren[6]; - root.fChildren = rootChildren; + auto root = std::make_unique(); + root->fNodeId = 1; + root->fType = SkPDF::DocumentStructureType::kDocument; // Heading. - PDFTag& h1 = rootChildren[0]; - h1.fNodeId = 2; - h1.fType = SkPDF::DocumentStructureType::kH1; - h1.fChildCount = 0; + auto h1 = std::make_unique(); + h1->fNodeId = 2; + h1->fType = SkPDF::DocumentStructureType::kH1; + root->fChildVector.push_back(std::move(h1)); // Initial paragraph. - PDFTag& p = rootChildren[1]; - p.fNodeId = 3; - p.fType = SkPDF::DocumentStructureType::kP; - p.fChildCount = 0; + auto p = std::make_unique(); + p->fNodeId = 3; + p->fType = SkPDF::DocumentStructureType::kP; + root->fChildVector.push_back(std::move(p)); // Hidden div. This is never referenced by marked content // so it should not appear in the resulting PDF. - PDFTag& div = rootChildren[2]; - div.fNodeId = 4; - div.fType = SkPDF::DocumentStructureType::kDiv; - div.fChildCount = 0; + auto div = std::make_unique(); + div->fNodeId = 4; + div->fType = SkPDF::DocumentStructureType::kDiv; + root->fChildVector.push_back(std::move(div)); // A bulleted list of two items. - PDFTag& l = rootChildren[3]; - l.fNodeId = 5; - l.fType = SkPDF::DocumentStructureType::kL; - l.fChildCount = 4; - PDFTag listChildren[4]; - l.fChildren = listChildren; - - PDFTag& lm1 = listChildren[0]; - lm1.fNodeId = 6; - lm1.fType = SkPDF::DocumentStructureType::kLbl; - lm1.fChildCount = 0; - PDFTag& li1 = listChildren[1]; - li1.fNodeId = 7; - li1.fType = SkPDF::DocumentStructureType::kLI; - li1.fChildCount = 0; - - PDFTag& lm2 = listChildren[2]; - lm2.fNodeId = 8; - lm2.fType = SkPDF::DocumentStructureType::kLbl; - lm2.fChildCount = 0; - PDFTag& li2 = listChildren[3]; - li2.fNodeId = 9; - li2.fType = SkPDF::DocumentStructureType::kLI; - li2.fChildCount = 0; + auto l = std::make_unique(); + l->fNodeId = 5; + l->fType = SkPDF::DocumentStructureType::kL; + + auto lm1 = std::make_unique(); + lm1->fNodeId = 6; + lm1->fType = SkPDF::DocumentStructureType::kLbl; + l->fChildVector.push_back(std::move(lm1)); + + auto li1 = std::make_unique(); + li1->fNodeId = 7; + li1->fType = SkPDF::DocumentStructureType::kLI; + l->fChildVector.push_back(std::move(li1)); + + auto lm2 = std::make_unique(); + lm2->fNodeId = 8; + lm2->fType = SkPDF::DocumentStructureType::kLbl; + l->fChildVector.push_back(std::move(lm2)); + auto li2 = std::make_unique(); + li2->fNodeId = 9; + li2->fType = SkPDF::DocumentStructureType::kLI; + l->fChildVector.push_back(std::move(li2)); + + root->fChildVector.push_back(std::move(l)); // Paragraph spanning two pages. - PDFTag& p2 = rootChildren[4]; - p2.fNodeId = 10; - p2.fType = SkPDF::DocumentStructureType::kP; - p2.fChildCount = 0; + auto p2 = std::make_unique(); + p2->fNodeId = 10; + p2->fType = SkPDF::DocumentStructureType::kP; + root->fChildVector.push_back(std::move(p2)); // Image with alt text. - PDFTag& img = rootChildren[5]; - img.fNodeId = 11; - img.fType = SkPDF::DocumentStructureType::kFigure; - img.fAlt = "Red box"; - img.fChildCount = 0; + auto img = std::make_unique(); + img->fNodeId = 11; + img->fType = SkPDF::DocumentStructureType::kFigure; + img->fAlt = "Red box"; + root->fChildVector.push_back(std::move(img)); - metadata.fStructureElementTreeRoot = &root; + metadata.fStructureElementTreeRoot = root.get(); sk_sp document = SkPDF::MakeDocument( &outputStream, metadata); diff --git a/tests/PackedConfigsTextureTest.cpp b/tests/PackedConfigsTextureTest.cpp index bd3bf16a9838c..cde112121174d 100644 --- a/tests/PackedConfigsTextureTest.cpp +++ b/tests/PackedConfigsTextureTest.cpp @@ -13,7 +13,7 @@ #include "tests/Test.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" #include "src/gpu/GrProxyProvider.h" @@ -97,7 +97,7 @@ static void check_565(skiatest::Reporter* reporter, } } -static void run_test(skiatest::Reporter* reporter, GrContext* context, int arraySize, +static void run_test(skiatest::Reporter* reporter, GrDirectContext* context, int arraySize, SkColorType colorType) { SkTDArray controlPixelData; // We will read back into an 8888 buffer since 565/4444 read backs aren't supported @@ -146,13 +146,17 @@ static void run_test(skiatest::Reporter* reporter, GrContext* context, int array static const int CONTROL_ARRAY_SIZE = DEV_W * DEV_H; DEF_GPUTEST_FOR_RENDERING_CONTEXTS(RGBA4444TextureTest, reporter, ctxInfo) { - if (ctxInfo.grContext()->colorTypeSupportedAsImage(kARGB_4444_SkColorType)) { - run_test(reporter, ctxInfo.grContext(), CONTROL_ARRAY_SIZE, kARGB_4444_SkColorType); + auto direct = ctxInfo.directContext(); + + if (direct->colorTypeSupportedAsImage(kARGB_4444_SkColorType)) { + run_test(reporter, direct, CONTROL_ARRAY_SIZE, kARGB_4444_SkColorType); } } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(RGB565TextureTest, reporter, ctxInfo) { - if (ctxInfo.grContext()->colorTypeSupportedAsImage(kRGB_565_SkColorType)) { - run_test(reporter, ctxInfo.grContext(), CONTROL_ARRAY_SIZE, kRGB_565_SkColorType); + auto direct = ctxInfo.directContext(); + + if (direct->colorTypeSupportedAsImage(kRGB_565_SkColorType)) { + run_test(reporter, direct, CONTROL_ARRAY_SIZE, kRGB_565_SkColorType); } } diff --git a/tests/ParseColorTest.cpp b/tests/ParseColorTest.cpp new file mode 100644 index 0000000000000..35f80de803912 --- /dev/null +++ b/tests/ParseColorTest.cpp @@ -0,0 +1,194 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/utils/SkParse.h" +#include "tests/Test.h" + +static constexpr struct { + const char* fName; + SkColor fColor; +} gNamedColors[] = { + { "aliceblue", 0xfff0f8ff }, + { "antiquewhite", 0xfffaebd7 }, + { "aqua", 0xff00ffff }, + { "aquamarine", 0xff7fffd4 }, + { "azure", 0xfff0ffff }, + { "beige", 0xfff5f5dc }, + { "bisque", 0xffffe4c4 }, + { "black", 0xff000000 }, + { "blanchedalmond", 0xffffebcd }, + { "blue", 0xff0000ff }, + { "blueviolet", 0xff8a2be2 }, + { "brown", 0xffa52a2a }, + { "burlywood", 0xffdeb887 }, + { "cadetblue", 0xff5f9ea0 }, + { "chartreuse", 0xff7fff00 }, + { "chocolate", 0xffd2691e }, + { "coral", 0xffff7f50 }, + { "cornflowerblue", 0xff6495ed }, + { "cornsilk", 0xfffff8dc }, + { "crimson", 0xffdc143c }, + { "cyan", 0xff00ffff }, + { "darkblue", 0xff00008b }, + { "darkcyan", 0xff008b8b }, + { "darkgoldenrod", 0xffb8860b }, + { "darkgray", 0xffa9a9a9 }, + { "darkgreen", 0xff006400 }, + { "darkkhaki", 0xffbdb76b }, + { "darkmagenta", 0xff8b008b }, + { "darkolivegreen", 0xff556b2f }, + { "darkorange", 0xffff8c00 }, + { "darkorchid", 0xff9932cc }, + { "darkred", 0xff8b0000 }, + { "darksalmon", 0xffe9967a }, + { "darkseagreen", 0xff8fbc8f }, + { "darkslateblue", 0xff483d8b }, + { "darkslategray", 0xff2f4f4f }, + { "darkturquoise", 0xff00ced1 }, + { "darkviolet", 0xff9400d3 }, + { "deeppink", 0xffff1493 }, + { "deepskyblue", 0xff00bfff }, + { "dimgray", 0xff696969 }, + { "dodgerblue", 0xff1e90ff }, + { "firebrick", 0xffb22222 }, + { "floralwhite", 0xfffffaf0 }, + { "forestgreen", 0xff228b22 }, + { "fuchsia", 0xffff00ff }, + { "gainsboro", 0xffdcdcdc }, + { "ghostwhite", 0xfff8f8ff }, + { "gold", 0xffffd700 }, + { "goldenrod", 0xffdaa520 }, + { "gray", 0xff808080 }, + { "green", 0xff008000 }, + { "greenyellow", 0xffadff2f }, + { "honeydew", 0xfff0fff0 }, + { "hotpink", 0xffff69b4 }, + { "indianred", 0xffcd5c5c }, + { "indigo", 0xff4b0082 }, + { "ivory", 0xfffffff0 }, + { "khaki", 0xfff0e68c }, + { "lavender", 0xffe6e6fa }, + { "lavenderblush", 0xfffff0f5 }, + { "lawngreen", 0xff7cfc00 }, + { "lemonchiffon", 0xfffffacd }, + { "lightblue", 0xffadd8e6 }, + { "lightcoral", 0xfff08080 }, + { "lightcyan", 0xffe0ffff }, + { "lightgoldenrodyellow", 0xfffafad2 }, + { "lightgreen", 0xff90ee90 }, + { "lightgrey", 0xffd3d3d3 }, + { "lightpink", 0xffffb6c1 }, + { "lightsalmon", 0xffffa07a }, + { "lightseagreen", 0xff20b2aa }, + { "lightskyblue", 0xff87cefa }, + { "lightslategray", 0xff778899 }, + { "lightsteelblue", 0xffb0c4de }, + { "lightyellow", 0xffffffe0 }, + { "lime", 0xff00ff00 }, + { "limegreen", 0xff32cd32 }, + { "linen", 0xfffaf0e6 }, + { "magenta", 0xffff00ff }, + { "maroon", 0xff800000 }, + { "mediumaquamarine", 0xff66cdaa }, + { "mediumblue", 0xff0000cd }, + { "mediumorchid", 0xffba55d3 }, + { "mediumpurple", 0xff9370db }, + { "mediumseagreen", 0xff3cb371 }, + { "mediumslateblue", 0xff7b68ee }, + { "mediumspringgreen", 0xff00fa9a }, + { "mediumturquoise", 0xff48d1cc }, + { "mediumvioletred", 0xffc71585 }, + { "midnightblue", 0xff191970 }, + { "mintcream", 0xfff5fffa }, + { "mistyrose", 0xffffe4e1 }, + { "moccasin", 0xffffe4b5 }, + { "navajowhite", 0xffffdead }, + { "navy", 0xff000080 }, + { "oldlace", 0xfffdf5e6 }, + { "olive", 0xff808000 }, + { "olivedrab", 0xff6b8e23 }, + { "orange", 0xffffa500 }, + { "orangered", 0xffff4500 }, + { "orchid", 0xffda70d6 }, + { "palegoldenrod", 0xffeee8aa }, + { "palegreen", 0xff98fb98 }, + { "paleturquoise", 0xffafeeee }, + { "palevioletred", 0xffdb7093 }, + { "papayawhip", 0xffffefd5 }, + { "peachpuff", 0xffffdab9 }, + { "peru", 0xffcd853f }, + { "pink", 0xffffc0cb }, + { "plum", 0xffdda0dd }, + { "powderblue", 0xffb0e0e6 }, + { "purple", 0xff800080 }, + { "red", 0xffff0000 }, + { "rosybrown", 0xffbc8f8f }, + { "royalblue", 0xff4169e1 }, + { "saddlebrown", 0xff8b4513 }, + { "salmon", 0xfffa8072 }, + { "sandybrown", 0xfff4a460 }, + { "seagreen", 0xff2e8b57 }, + { "seashell", 0xfffff5ee }, + { "sienna", 0xffa0522d }, + { "silver", 0xffc0c0c0 }, + { "skyblue", 0xff87ceeb }, + { "slateblue", 0xff6a5acd }, + { "slategray", 0xff708090 }, + { "snow", 0xfffffafa }, + { "springgreen", 0xff00ff7f }, + { "steelblue", 0xff4682b4 }, + { "tan", 0xffd2b48c }, + { "teal", 0xff008080 }, + { "thistle", 0xffd8bfd8 }, + { "tomato", 0xffff6347 }, + { "turquoise", 0xff40e0d0 }, + { "violet", 0xffee82ee }, + { "wheat", 0xfff5deb3 }, + { "white", 0xffffffff }, + { "whitesmoke", 0xfff5f5f5 }, + { "yellow", 0xffffff00 }, + { "yellowgreen", 0xff9acd32 }, +}; + +static bool is_valid_name(const SkString& name) { + for (const auto& c : gNamedColors) { + if (name.equals(c.fName)) return true; + } + return false; +} + +DEF_TEST(ParseNamedColor, reporter) { + SkColor color; + + for (const auto& c : gNamedColors) { + // check the real name + REPORTER_ASSERT(reporter, SkParse::FindNamedColor(c.fName , strlen(c.fName), &color) + == c.fName + strlen(c.fName)); + REPORTER_ASSERT(reporter, color == c.fColor); + + // check partial prefixes + for (int l = strlen(c.fName) - 1; l >= 0; --l) { + SkString s(c.fName, l); + // some substrings are valid color names + if (is_valid_name(s)) continue; + + REPORTER_ASSERT(reporter, SkParse::FindNamedColor(s.c_str(), l, &color) == nullptr); + } + + // check suffixes + SkString s(c.fName, strlen(c.fName)); + s.append("A"); + REPORTER_ASSERT(reporter, SkParse::FindNamedColor(s.c_str(), s.size(), &color) == nullptr); + } + + // some oddballs + REPORTER_ASSERT(reporter, SkParse::FindNamedColor("" , 0, &color) == nullptr); + REPORTER_ASSERT(reporter, SkParse::FindNamedColor("aaa", 3, &color) == nullptr); + REPORTER_ASSERT(reporter, SkParse::FindNamedColor("zzz", 3, &color) == nullptr); + REPORTER_ASSERT(reporter, SkParse::FindNamedColor("aaaaaaaaaaaa", 12, &color) == nullptr); + REPORTER_ASSERT(reporter, SkParse::FindNamedColor("zzzzzzzzzzzz", 12, &color) == nullptr); +} diff --git a/tests/PathBuilderTest.cpp b/tests/PathBuilderTest.cpp new file mode 100644 index 0000000000000..505b5649622a4 --- /dev/null +++ b/tests/PathBuilderTest.cpp @@ -0,0 +1,168 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkPathBuilder.h" +#include "src/core/SkPathPriv.h" +#include "tests/Test.h" + +static void is_empty(skiatest::Reporter* reporter, const SkPath& p) { + REPORTER_ASSERT(reporter, p.getBounds().isEmpty()); + REPORTER_ASSERT(reporter, p.countPoints() == 0); +} + +DEF_TEST(pathbuilder, reporter) { + SkPathBuilder b; + + is_empty(reporter, b.snapshot()); + is_empty(reporter, b.detach()); + + b.moveTo(10, 10).lineTo(20, 20).quadTo(30, 10, 10, 20); + + SkPath p0 = b.snapshot(); + SkPath p1 = b.snapshot(); + SkPath p2 = b.detach(); + + REPORTER_ASSERT(reporter, p0.getBounds() == SkRect::MakeLTRB(10, 10, 30, 20)); + REPORTER_ASSERT(reporter, p0.countPoints() == 4); + + REPORTER_ASSERT(reporter, p0 == p1); + REPORTER_ASSERT(reporter, p0 == p2); + + is_empty(reporter, b.snapshot()); + is_empty(reporter, b.detach()); +} + +static bool check_points(const SkPath& path, const SkPoint expected[], size_t count) { + std::vector iter_pts; + + for (auto [v, p, w] : SkPathPriv::Iterate(path)) { + switch (v) { + case SkPathVerb::kMove: + iter_pts.push_back(p[0]); + break; + case SkPathVerb::kLine: + iter_pts.push_back(p[1]); + break; + case SkPathVerb::kQuad: + case SkPathVerb::kConic: + iter_pts.push_back(p[1]); + iter_pts.push_back(p[2]); + break; + case SkPathVerb::kCubic: + iter_pts.push_back(p[1]); + iter_pts.push_back(p[2]); + iter_pts.push_back(p[3]); + break; + case SkPathVerb::kClose: + break; + } + } + if (iter_pts.size() != count) { + return false; + } + for (size_t i = 0; i < count; ++i) { + if (iter_pts[i] != expected[i]) { + return false; + } + } + return true; +} + +DEF_TEST(pathbuilder_missing_move, reporter) { + SkPathBuilder b; + + b.lineTo(10, 10).lineTo(20, 30); + const SkPoint pts0[] = { + {0, 0}, {10, 10}, {20, 30}, + }; + REPORTER_ASSERT(reporter, check_points(b.snapshot(), pts0, SK_ARRAY_COUNT(pts0))); + + b.reset().moveTo(20, 20).lineTo(10, 10).lineTo(20, 30).close().lineTo(60, 60); + const SkPoint pts1[] = { + {20, 20}, {10, 10}, {20, 30}, + {20, 20}, {60, 60}, + }; + REPORTER_ASSERT(reporter, check_points(b.snapshot(), pts1, SK_ARRAY_COUNT(pts1))); +} + +DEF_TEST(pathbuilder_addRect, reporter) { + const SkRect r = { 10, 20, 30, 40 }; + + for (int i = 0; i < 4; ++i) { + for (auto dir : {SkPathDirection::kCW, SkPathDirection::kCCW}) { + SkPathBuilder b; + b.addRect(r, dir, i); + auto bp = b.detach(); + + SkRect r2; + bool closed = false; + SkPathDirection dir2; + REPORTER_ASSERT(reporter, bp.isRect(&r2, &closed, &dir2)); + REPORTER_ASSERT(reporter, r2 == r); + REPORTER_ASSERT(reporter, closed); + REPORTER_ASSERT(reporter, dir == dir2); + + SkPath p; + p.addRect(r, dir, i); + REPORTER_ASSERT(reporter, p == bp); + } + } +} + +DEF_TEST(pathbuilder_addOval, reporter) { + const SkRect r = { 10, 20, 30, 40 }; + + for (int i = 0; i < 4; ++i) { + for (auto dir : {SkPathDirection::kCW, SkPathDirection::kCCW}) { + SkPathBuilder b; + b.addOval(r, dir, i); + auto bp = b.detach(); + + SkPath p; + p.addOval(r, dir, i); + REPORTER_ASSERT(reporter, p == bp); + } + } +} + +DEF_TEST(pathbuilder_addRRect, reporter) { + const SkRRect rr = SkRRect::MakeRectXY({ 10, 20, 30, 40 }, 5, 6); + + for (int i = 0; i < 4; ++i) { + for (auto dir : {SkPathDirection::kCW, SkPathDirection::kCCW}) { + SkPathBuilder b; + b.addRRect(rr, dir, i); + auto bp = b.detach(); + + SkPath p; + p.addRRect(rr, dir, i); + REPORTER_ASSERT(reporter, p == bp); + } + } +} + +#include "include/utils/SkRandom.h" + +DEF_TEST(pathbuilder_make, reporter) { + constexpr int N = 100; + uint8_t vbs[N]; + SkPoint pts[N]; + + SkRandom rand; + SkPathBuilder b; + b.moveTo(0, 0); + pts[0] = {0, 0}; vbs[0] = (uint8_t)SkPathVerb::kMove; + for (int i = 1; i < N; ++i) { + float x = rand.nextF(); + float y = rand.nextF(); + b.lineTo(x, y); + pts[i] = {x, y}; vbs[i] = (uint8_t)SkPathVerb::kLine; + } + auto p0 = b.detach(); + auto p1 = SkPath::Make(pts, N, vbs, N, nullptr, 0, p0.getFillType()); + REPORTER_ASSERT(reporter, p0 == p1); +} diff --git a/tests/PathOpsChalkboardTest.cpp b/tests/PathOpsChalkboardTest.cpp index b75dfdda1b11f..83cd02a93336c 100644 --- a/tests/PathOpsChalkboardTest.cpp +++ b/tests/PathOpsChalkboardTest.cpp @@ -140,6 +140,7 @@ static void chalkboard_threaded(skiatest::Reporter* reporter, const char* filena } break; } + [[fallthrough]]; default: testlines = 0; for (int i = 0; i < bitCount; ++i) { diff --git a/tests/PathTest.cpp b/tests/PathTest.cpp index 5f9800c898fab..fd5dcddf878b0 100644 --- a/tests/PathTest.cpp +++ b/tests/PathTest.cpp @@ -22,8 +22,8 @@ #include "src/core/SkAutoMalloc.h" #include "src/core/SkGeometry.h" #include "src/core/SkPathPriv.h" -#include "src/core/SkReader32.h" -#include "src/core/SkWriter32.h" +#include "src/core/SkReadBuffer.h" +#include "src/core/SkWriteBuffer.h" #include "tests/Test.h" #include @@ -2588,12 +2588,12 @@ static void test_isNestedFillRects(skiatest::Reporter* reporter) { static void write_and_read_back(skiatest::Reporter* reporter, const SkPath& p) { - SkWriter32 writer; + SkBinaryWriteBuffer writer; writer.writePath(p); size_t size = writer.bytesWritten(); SkAutoMalloc storage(size); - writer.flatten(storage.get()); - SkReader32 reader(storage.get(), size); + writer.writeToMemory(storage.get()); + SkReadBuffer reader(storage.get(), size); SkPath readBack; REPORTER_ASSERT(reporter, readBack != p); diff --git a/tests/PinnedImageTest.cpp b/tests/PinnedImageTest.cpp index 6ec2bb0e6bb29..32697d2534284 100644 --- a/tests/PinnedImageTest.cpp +++ b/tests/PinnedImageTest.cpp @@ -15,6 +15,7 @@ using namespace sk_gpu_test; #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkImagePriv.h" static bool surface_is_expected_color(SkSurface* surf, const SkImageInfo& ii, SkColor color) { @@ -98,12 +99,12 @@ static void cleanup_test(skiatest::Reporter* reporter) { { sk_sp img; - GrContext* context = nullptr; + GrDirectContext* context = nullptr; { GrContextFactory testFactory; ContextInfo info = testFactory.getContextInfo(ctxType); - context = info.grContext(); + context = info.directContext(); if (!context) { continue; } @@ -123,6 +124,6 @@ static void cleanup_test(skiatest::Reporter* reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(PinnedImageTest, reporter, ctxInfo) { - basic_test(reporter, ctxInfo.grContext()); + basic_test(reporter, ctxInfo.directContext()); cleanup_test(reporter); } diff --git a/tests/PremulAlphaRoundTripTest.cpp b/tests/PremulAlphaRoundTripTest.cpp index f4a252b157261..c9a7073d1bbab 100644 --- a/tests/PremulAlphaRoundTripTest.cpp +++ b/tests/PremulAlphaRoundTripTest.cpp @@ -7,6 +7,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" #include "tests/Test.h" #include "tools/ToolUtils.h" @@ -101,8 +102,7 @@ DEF_TEST(PremulAlphaRoundTrip, reporter) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(PremulAlphaRoundTrip_Gpu, reporter, ctxInfo) { const SkImageInfo info = SkImageInfo::MakeN32Premul(256, 256); - sk_sp surf(SkSurface::MakeRenderTarget(ctxInfo.grContext(), - SkBudgeted::kNo, - info)); + sk_sp surf(SkSurface::MakeRenderTarget(ctxInfo.directContext(), + SkBudgeted::kNo, info)); test_premul_alpha_roundtrip(reporter, surf.get()); } diff --git a/tests/PrimitiveProcessorTest.cpp b/tests/PrimitiveProcessorTest.cpp index e99d55a567aa0..0e95d2eb84e86 100644 --- a/tests/PrimitiveProcessorTest.cpp +++ b/tests/PrimitiveProcessorTest.cpp @@ -11,7 +11,7 @@ #include "tests/Test.h" #include "include/core/SkString.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkPointPriv.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGeometryProcessor.h" @@ -84,8 +84,7 @@ class Op : public GrMeshDrawOp { fragBuilder->codeAppendf("%s = half4(1);", args.fOutputCoverage); } void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& primProc, - const CoordTransformRange&) override {} + const GrPrimitiveProcessor& primProc) override {} }; return new GLSLGP(); } @@ -167,7 +166,7 @@ class Op : public GrMeshDrawOp { } DEF_GPUTEST_FOR_ALL_CONTEXTS(VertexAttributeCount, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); #if GR_GPU_STATS GrGpu* gpu = context->priv().getGpu(); #endif diff --git a/tests/ProcessorTest.cpp b/tests/ProcessorTest.cpp index dfd9b51db8d43..33ab5ba251d51 100644 --- a/tests/ProcessorTest.cpp +++ b/tests/ProcessorTest.cpp @@ -7,7 +7,7 @@ #include "tests/Test.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrClip.h" #include "src/gpu/GrContextPriv.h" @@ -91,9 +91,8 @@ class TestFP : public GrFragmentProcessor { static std::unique_ptr Make(std::unique_ptr child) { return std::unique_ptr(new TestFP(std::move(child))); } - static std::unique_ptr Make(const SkTArray& views, - const SkTArray>& buffers) { - return std::unique_ptr(new TestFP(views, buffers)); + static std::unique_ptr Make(const SkTArray& views) { + return std::unique_ptr(new TestFP(views)); } const char* name() const override { return "test"; } @@ -108,29 +107,20 @@ class TestFP : public GrFragmentProcessor { } private: - TestFP(const SkTArray& views, - const SkTArray>& buffers) - : INHERITED(kTestFP_ClassID, kNone_OptimizationFlags), fSamplers(4) { + TestFP(const SkTArray& views) + : INHERITED(kTestFP_ClassID, kNone_OptimizationFlags) { for (const auto& view : views) { - fSamplers.emplace_back(view); + this->registerChild(GrTextureEffect::Make(view, kUnknown_SkAlphaType)); } - this->setTextureSamplerCnt(fSamplers.count()); } TestFP(std::unique_ptr child) - : INHERITED(kTestFP_ClassID, kNone_OptimizationFlags), fSamplers(4) { - this->registerChildProcessor(std::move(child)); + : INHERITED(kTestFP_ClassID, kNone_OptimizationFlags) { + this->registerChild(std::move(child)); } - explicit TestFP(const TestFP& that) - : INHERITED(kTestFP_ClassID, that.optimizationFlags()), fSamplers(4) { - for (int i = 0; i < that.fSamplers.count(); ++i) { - fSamplers.emplace_back(that.fSamplers[i]); - } - for (int i = 0; i < that.numChildProcessors(); ++i) { - this->registerChildProcessor(that.childProcessor(i).clone()); - } - this->setTextureSamplerCnt(fSamplers.count()); + explicit TestFP(const TestFP& that) : INHERITED(kTestFP_ClassID, that.optimizationFlags()) { + this->cloneAndRegisterAllChildProcessors(that); } virtual GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { @@ -148,15 +138,13 @@ class TestFP : public GrFragmentProcessor { } bool onIsEqual(const GrFragmentProcessor&) const override { return false; } - const TextureSampler& onTextureSampler(int i) const override { return fSamplers[i]; } - SkSTArray<4, TextureSampler> fSamplers; typedef GrFragmentProcessor INHERITED; }; } DEF_GPUTEST_FOR_ALL_CONTEXTS(ProcessorRefTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); static constexpr SkISize kDims = {10, 10}; @@ -177,9 +165,8 @@ DEF_GPUTEST_FOR_ALL_CONTEXTS(ProcessorRefTest, reporter, ctxInfo) { { SkTArray views; - SkTArray> buffers; views.push_back({proxy, kTopLeft_GrSurfaceOrigin, swizzle}); - auto fp = TestFP::Make(std::move(views), std::move(buffers)); + auto fp = TestFP::Make(std::move(views)); for (int i = 0; i < parentCnt; ++i) { fp = TestFP::Make(std::move(fp)); } @@ -256,10 +243,13 @@ void test_draw_op(GrContext* context, } // This assumes that the output buffer will be the same size as inputDataView -void render_fp(GrContext* context, GrRenderTargetContext* rtc, GrFragmentProcessor* fp, - GrSurfaceProxyView inputDataView, SkAlphaType inputAlphaType, GrColor* buffer) { - // test_draw_op needs to take ownership of an FP, so give it a clone that it can own - test_draw_op(context, rtc, fp->clone(), inputDataView, inputAlphaType); +void render_fp(GrContext* context, + GrRenderTargetContext* rtc, + std::unique_ptr fp, + GrSurfaceProxyView inputDataView, + SkAlphaType inputAlphaType, + GrColor* buffer) { + test_draw_op(context, rtc, std::move(fp), inputDataView, inputAlphaType); memset(buffer, 0x0, sizeof(GrColor) * inputDataView.proxy()->width() * inputDataView.proxy()->height()); rtc->readPixels(SkImageInfo::Make(inputDataView.proxy()->dimensions(), kRGBA_8888_SkColorType, @@ -486,7 +476,7 @@ bool legal_modulation(const GrColor in[3], const GrColor out[3]) { } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); auto resourceProvider = context->priv().resourceProvider(); using FPFactory = GrFragmentProcessorTestFactory; @@ -555,30 +545,21 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, repor continue; } + // All draws use a clone so that we can continue to query fp. ProcessorCloneTest should + // validate that clones are equivalent to the original. if (fp->compatibleWithCoverageAsAlpha()) { // 2nd and 3rd frames are only used when checking coverage optimization - render_fp(context, rtc.get(), fp.get(), inputTexture2, kPremul_SkAlphaType, + render_fp(context, rtc.get(), fp->clone(), inputTexture2, kPremul_SkAlphaType, readData2.get()); - render_fp(context, rtc.get(), fp.get(), inputTexture3, kPremul_SkAlphaType, + render_fp(context, rtc.get(), fp->clone(), inputTexture3, kPremul_SkAlphaType, readData3.get()); } + // Draw base frame last so that rtc holds the original FP behavior if we need to // dump the image to the log. - render_fp(context, rtc.get(), fp.get(), inputTexture1, kPremul_SkAlphaType, + render_fp(context, rtc.get(), fp->clone(), inputTexture1, kPremul_SkAlphaType, readData1.get()); - if (0) { // Useful to see what FPs are being tested. - SkString children; - for (int c = 0; c < fp->numChildProcessors(); ++c) { - if (!c) { - children.append("("); - } - children.append(fp->childProcessor(c).name()); - children.append(c == fp->numChildProcessors() - 1 ? ")" : ", "); - } - SkDebugf("%s %s\n", fp->name(), children.c_str()); - } - // This test has a history of being flaky on a number of devices. If an FP is logically // violating the optimizations, it's reasonable to expect it to violate requirements on // a large number of pixels in the image. Sporadic pixel violations are more indicative @@ -725,10 +706,27 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorOptimizationValidationTest, repor } } -// Tests that fragment processors returned by GrFragmentProcessor::clone() are equivalent to their -// progenitors. +static void describe_fp_children(const GrFragmentProcessor& fp, + std::string indent, + SkString* text) { + for (int index = 0; index < fp.numChildProcessors(); ++index) { + const GrFragmentProcessor& childFP = fp.childProcessor(index); + text->appendf("\n%s(#%d) -> %s", indent.c_str(), index, childFP.name()); + describe_fp_children(childFP, indent + "\t", text); + } +} + +static SkString describe_fp(const GrFragmentProcessor& fp) { + SkString text; + text.printf("\n%s", fp.name()); + describe_fp_children(fp, "\t", &text); + return text; +} + +// Tests that a fragment processor returned by GrFragmentProcessor::clone() is equivalent to its +// progenitor. DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorCloneTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); auto resourceProvider = context->priv().resourceProvider(); SkRandom random; @@ -767,28 +765,40 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorCloneTest, reporter, ctxInfo) { for (int i = 0; i < GrFragmentProcessorTestFactory::Count(); ++i) { static constexpr int kTimesToInvokeFactory = 10; for (int j = 0; j < kTimesToInvokeFactory; ++j) { - auto fp = GrFragmentProcessorTestFactory::MakeIdx(i, &testData); - auto clone = fp->clone(); + std::unique_ptr fp = + GrFragmentProcessorTestFactory::MakeIdx(i, &testData); + std::unique_ptr clone = fp->clone(); if (!clone) { ERRORF(reporter, "Clone of processor %s failed.", fp->name()); continue; } const char* name = fp->name(); - REPORTER_ASSERT(reporter, !strcmp(fp->name(), clone->name())); + REPORTER_ASSERT(reporter, !strcmp(fp->name(), clone->name()), + "%s\n", describe_fp(*fp).c_str()); REPORTER_ASSERT(reporter, fp->compatibleWithCoverageAsAlpha() == - clone->compatibleWithCoverageAsAlpha()); - REPORTER_ASSERT(reporter, fp->isEqual(*clone)); - REPORTER_ASSERT(reporter, fp->preservesOpaqueInput() == clone->preservesOpaqueInput()); + clone->compatibleWithCoverageAsAlpha(), + "%s\n", describe_fp(*fp).c_str()); + REPORTER_ASSERT(reporter, fp->isEqual(*clone), + "%s\n", describe_fp(*fp).c_str()); + REPORTER_ASSERT(reporter, fp->preservesOpaqueInput() == clone->preservesOpaqueInput(), + "%s\n", describe_fp(*fp).c_str()); REPORTER_ASSERT(reporter, fp->hasConstantOutputForConstantInput() == - clone->hasConstantOutputForConstantInput()); - REPORTER_ASSERT(reporter, fp->numChildProcessors() == clone->numChildProcessors()); - REPORTER_ASSERT(reporter, fp->usesLocalCoords() == clone->usesLocalCoords()); + clone->hasConstantOutputForConstantInput(), + "%s\n", describe_fp(*fp).c_str()); + REPORTER_ASSERT(reporter, fp->numChildProcessors() == clone->numChildProcessors(), + "%s\n", describe_fp(*fp).c_str()); + REPORTER_ASSERT(reporter, fp->sampleCoordsDependOnLocalCoords() == + clone->sampleCoordsDependOnLocalCoords(), + "%s\n", describe_fp(*fp).c_str()); + REPORTER_ASSERT(reporter, fp->referencesSampleCoords() == + clone->referencesSampleCoords(), + "%s\n", describe_fp(*fp).c_str()); // Draw with original and read back the results. - render_fp(context, rtc.get(), fp.get(), inputTexture, kPremul_SkAlphaType, + render_fp(context, rtc.get(), std::move(fp), inputTexture, kPremul_SkAlphaType, readData1.get()); // Draw with clone and read back the results. - render_fp(context, rtc.get(), clone.get(), inputTexture, kPremul_SkAlphaType, + render_fp(context, rtc.get(), std::move(clone), inputTexture, kPremul_SkAlphaType, readData2.get()); // Check that the results are the same. @@ -825,10 +835,10 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorCloneTest, reporter, ctxInfo) { auto info = SkImageInfo::Make(kRenderSize, kRenderSize, kRGBA_8888_SkColorType, kUnpremul_SkAlphaType); - SkString input, orig, clone; - if (log_texture_view(context, inputTexture, &input) && - log_pixels(readData1.get(), kRenderSize, &orig) && - log_pixels(readData2.get(), kRenderSize, &clone)) { + SkString inputURL, origURL, cloneURL; + if (log_texture_view(context, inputTexture, &inputURL) && + log_pixels(readData1.get(), kRenderSize, &origURL) && + log_pixels(readData2.get(), kRenderSize, &cloneURL)) { ERRORF(reporter, "\nInput image:\n%s\n\n" "===========================================================" @@ -837,7 +847,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(ProcessorCloneTest, reporter, ctxInfo) { "===========================================================" "\n\n" "Clone output image:\n%s\n", - input.c_str(), orig.c_str(), clone.c_str()); + inputURL.c_str(), origURL.c_str(), cloneURL.c_str()); loggedFirstFailure = true; } } diff --git a/tests/ProgramsTest.cpp b/tests/ProgramsTest.cpp index bb7622e59c53a..9b71ddfaa8ead 100644 --- a/tests/ProgramsTest.cpp +++ b/tests/ProgramsTest.cpp @@ -9,6 +9,7 @@ #include "include/core/SkTypes.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkChecksum.h" #include "include/utils/SkRandom.h" #include "src/gpu/GrAutoLocaleSetter.h" @@ -43,7 +44,7 @@ class GLBigKeyProcessor : public GrGLSLFragmentProcessor { public: void emitCode(EmitArgs& args) override { // pass through - GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; if (args.fInputColor) { fragBuilder->codeAppendf("%s = %s;\n", args.fOutputColor, args.fInputColor); } else { @@ -126,7 +127,7 @@ class BlockInputFragmentProcessor : public GrFragmentProcessor { BlockInputFragmentProcessor(std::unique_ptr child) : INHERITED(kBlockInputFragmentProcessor_ClassID, kNone_OptimizationFlags) { - this->registerChildProcessor(std::move(child)); + this->registerChild(std::move(child)); } void onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override {} @@ -208,12 +209,12 @@ static std::unique_ptr create_random_proc_tree(GrProcessorT (int)SkBlendMode::kLastMode)); std::unique_ptr fp; if (d->fRandom->nextF() < 0.5f) { - fp = GrXfermodeFragmentProcessor::MakeFromTwoProcessors(std::move(minLevelsChild), - std::move(otherChild), mode); + fp = GrXfermodeFragmentProcessor::Make(std::move(minLevelsChild), + std::move(otherChild), mode); SkASSERT(fp); } else { - fp = GrXfermodeFragmentProcessor::MakeFromTwoProcessors(std::move(otherChild), - std::move(minLevelsChild), mode); + fp = GrXfermodeFragmentProcessor::Make(std::move(otherChild), + std::move(minLevelsChild), mode); SkASSERT(fp); } return fp; @@ -310,8 +311,8 @@ bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages, int ma GrDrawRandomOp(&random, renderTargetContext.get(), std::move(paint)); } // Flush everything, test passes if flush is successful(ie, no asserts are hit, no crashes) - if (drawingManager->flush(nullptr, 0, SkSurface::BackendSurfaceAccess::kNoAccess, GrFlushInfo(), - GrPrepareForExternalIORequests())) { + if (drawingManager->flush(nullptr, 0, SkSurface::BackendSurfaceAccess::kNoAccess, + GrFlushInfo(), nullptr)) { drawingManager->submitToGpu(false); } @@ -337,7 +338,7 @@ bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages, int ma paint.addColorFragmentProcessor(std::move(blockFP)); GrDrawRandomOp(&random, renderTargetContext.get(), std::move(paint)); if (drawingManager->flush(nullptr, 0, SkSurface::BackendSurfaceAccess::kNoAccess, - GrFlushInfo(), GrPrepareForExternalIORequests())) { + GrFlushInfo(), nullptr)) { drawingManager->submitToGpu(false); } } @@ -350,7 +351,7 @@ bool GrDrawingManager::ProgramUnitTest(GrContext* context, int maxStages, int ma static int get_programs_max_stages(const sk_gpu_test::ContextInfo& ctxInfo) { int maxStages = 6; #ifdef SK_GL - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); if (skiatest::IsGLContextType(ctxInfo.type())) { GrGLGpu* gpu = static_cast(context->priv().getGpu()); if (kGLES_GrGLStandard == gpu->glStandard()) { @@ -390,7 +391,7 @@ static int get_programs_max_levels(const sk_gpu_test::ContextInfo& ctxInfo) { maxTreeLevels = 2; #endif #ifdef SK_BUILD_FOR_ANDROID - GrGLGpu* gpu = static_cast(ctxInfo.grContext()->priv().getGpu()); + GrGLGpu* gpu = static_cast(ctxInfo.directContext()->priv().getGpu()); // Tecno Spark 3 Pro with Power VR Rogue GE8300 will fail shader compiles with // no message if the shader is particularly long. if (gpu->ctxInfo().vendor() == kImagination_GrGLVendor) { @@ -416,7 +417,7 @@ static void test_programs(skiatest::Reporter* reporter, const sk_gpu_test::Conte return; } - REPORTER_ASSERT(reporter, GrDrawingManager::ProgramUnitTest(ctxInfo.grContext(), maxStages, + REPORTER_ASSERT(reporter, GrDrawingManager::ProgramUnitTest(ctxInfo.directContext(), maxStages, maxLevels)); } diff --git a/tests/PromiseImageTest.cpp b/tests/PromiseImageTest.cpp index c70e356a2165a..3aff51957ea79 100644 --- a/tests/PromiseImageTest.cpp +++ b/tests/PromiseImageTest.cpp @@ -10,6 +10,7 @@ #include "include/core/SkColorFilter.h" #include "include/core/SkPromiseImageTexture.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrTexture.h" @@ -143,8 +144,8 @@ static void check_all_flushed_but_not_synced(skiatest::Reporter* reporter, GrBackendApi api, int expectedFulfillCnt = 1) { DoneBalanceExpectation doneBalanceExpectation = DoneBalanceExpectation::kBalanced; - // On Vulkan Done isn't guaranteed to be called until a sync has occurred. - if (api == GrBackendApi::kVulkan) { + // On Vulkan and D3D Done isn't guaranteed to be called until a sync has occurred. + if (api == GrBackendApi::kVulkan || api == GrBackendApi::kDirect3D) { doneBalanceExpectation = expectedFulfillCnt == 1 ? DoneBalanceExpectation::kBalancedOrOffByOne : DoneBalanceExpectation::kUnknown; @@ -165,7 +166,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(PromiseImageTest, reporter, ctxInfo) { const int kWidth = 10; const int kHeight = 10; - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); GrGpu* gpu = ctx->priv().getGpu(); GrBackendTexture backendTex = ctx->createBackendTexture( @@ -254,8 +255,11 @@ DEF_GPUTEST(PromiseImageTextureShutdown, reporter, ctxInfo) { auto contextType = static_cast(type); // These tests are difficult to get working with Vulkan. See http://skbug.com/8705 // and http://skbug.com/8275 + // Also problematic on Dawn; see http://skbug.com/10326 + // And Direct3D, for similar reasons. GrBackendApi api = sk_gpu_test::GrContextFactory::ContextTypeBackend(contextType); - if (api == GrBackendApi::kVulkan) { + if (api == GrBackendApi::kVulkan || api == GrBackendApi::kDawn || + api == GrBackendApi::kDirect3D) { continue; } DeathFn contextKillers[] = {destroy, abandon, releaseResourcesAndAbandon}; @@ -303,7 +307,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(PromiseImageTextureFullCache, reporter, ctxIn const int kWidth = 10; const int kHeight = 10; - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); GrBackendTexture backendTex = ctx->createBackendTexture( kWidth, kHeight, kAlpha_8_SkColorType, @@ -370,7 +374,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(PromiseImageNullFulfill, reporter, ctxInfo) { const int kWidth = 10; const int kHeight = 10; - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); // Do all this just to get a valid backend format for the image. GrBackendTexture backendTex; diff --git a/tests/ProxyConversionTest.cpp b/tests/ProxyConversionTest.cpp index e5bdfda07290a..f3709097d634e 100644 --- a/tests/ProxyConversionTest.cpp +++ b/tests/ProxyConversionTest.cpp @@ -10,6 +10,7 @@ #include "tests/Test.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrProxyProvider.h" @@ -26,7 +27,7 @@ static sk_sp make_wrapped_rt(GrProxyProvider* provider, GrColorType colorType) { auto backendRT = gpu->createTestingOnlyBackendRenderTarget(size.width(), size.height(), colorType); - return provider->wrapBackendRenderTarget(backendRT, nullptr, nullptr); + return provider->wrapBackendRenderTarget(backendRT, nullptr); } void clean_up_wrapped_rt(GrGpu* gpu, sk_sp proxy) { @@ -56,8 +57,9 @@ static sk_sp make_texture(GrProxyProvider* provider, // Test converting between RenderTargetProxies and TextureProxies for preinstantiated Proxies DEF_GPUTEST_FOR_RENDERING_CONTEXTS(PreinstantiatedProxyConversionTest, reporter, ctxInfo) { - GrProxyProvider* proxyProvider = ctxInfo.grContext()->priv().proxyProvider(); - GrGpu* gpu = ctxInfo.grContext()->priv().getGpu(); + auto context = ctxInfo.directContext(); + GrProxyProvider* proxyProvider = context->priv().proxyProvider(); + GrGpu* gpu = context->priv().getGpu(); static constexpr auto kSize = SkISize::Make(64, 64); static constexpr auto kColorType = GrColorType::kRGBA_8888; @@ -122,7 +124,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(PreinstantiatedProxyConversionTest, reporter, // Test converting between RenderTargetProxies and TextureProxies for deferred // Proxies DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DefferredProxyConversionTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); const GrCaps* caps = context->priv().caps(); diff --git a/tests/ProxyRefTest.cpp b/tests/ProxyRefTest.cpp index 64de3ded714cb..6c846f939af3b 100644 --- a/tests/ProxyRefTest.cpp +++ b/tests/ProxyRefTest.cpp @@ -9,6 +9,7 @@ #include "tests/Test.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRenderTargetProxy.h" @@ -40,12 +41,13 @@ static sk_sp make_wrapped(GrContext* context) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ProxyRefTest, reporter, ctxInfo) { - GrResourceProvider* resourceProvider = ctxInfo.grContext()->priv().resourceProvider(); + auto direct = ctxInfo.directContext(); + GrResourceProvider* resourceProvider = direct->priv().resourceProvider(); for (auto make : { make_deferred, make_wrapped }) { // An extra ref { - sk_sp proxy((*make)(ctxInfo.grContext())); + sk_sp proxy((*make)(direct)); if (proxy) { sk_sp extraRef(proxy); @@ -62,7 +64,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ProxyRefTest, reporter, ctxInfo) { // Multiple normal refs { - sk_sp proxy((*make)(ctxInfo.grContext())); + sk_sp proxy((*make)(direct)); if (proxy.get()) { proxy->ref(); proxy->ref(); @@ -83,7 +85,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ProxyRefTest, reporter, ctxInfo) { // Continue using (reffing) proxy after instantiation { - sk_sp proxy((*make)(ctxInfo.grContext())); + sk_sp proxy((*make)(direct)); if (proxy) { sk_sp firstExtraRef(proxy); diff --git a/tests/ProxyTest.cpp b/tests/ProxyTest.cpp index 778c4c6bb0c09..92a3cba6d64a6 100644 --- a/tests/ProxyTest.cpp +++ b/tests/ProxyTest.cpp @@ -10,6 +10,7 @@ #include "tests/Test.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRenderTargetPriv.h" @@ -109,9 +110,10 @@ static void check_texture(skiatest::Reporter* reporter, DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DeferredProxyTest, reporter, ctxInfo) { - GrProxyProvider* proxyProvider = ctxInfo.grContext()->priv().proxyProvider(); - GrResourceProvider* resourceProvider = ctxInfo.grContext()->priv().resourceProvider(); - const GrCaps& caps = *ctxInfo.grContext()->priv().caps(); + auto direct = ctxInfo.directContext(); + GrProxyProvider* proxyProvider = direct->priv().proxyProvider(); + GrResourceProvider* resourceProvider = direct->priv().resourceProvider(); + const GrCaps& caps = *direct->priv().caps(); int attempt = 0; // useful for debugging @@ -205,11 +207,11 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(DeferredProxyTest, reporter, ctxInfo) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { - GrProxyProvider* proxyProvider = ctxInfo.grContext()->priv().proxyProvider(); - GrContext* context = ctxInfo.grContext(); - GrResourceProvider* resourceProvider = context->priv().resourceProvider(); - GrGpu* gpu = context->priv().getGpu(); - const GrCaps& caps = *context->priv().caps(); + auto direct = ctxInfo.directContext(); + GrProxyProvider* proxyProvider = direct->priv().proxyProvider(); + GrResourceProvider* resourceProvider = direct->priv().resourceProvider(); + GrGpu* gpu = direct->priv().getGpu(); + const GrCaps& caps = *direct->priv().caps(); static const int kWidthHeight = 100; @@ -221,11 +223,11 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { // Tests wrapBackendRenderTarget with a GrBackendRenderTarget // Our test-only function that creates a backend render target doesn't currently support // sample counts :(. - if (ctxInfo.grContext()->colorTypeSupportedAsSurface(colorType)) { + if (direct->colorTypeSupportedAsSurface(colorType)) { GrBackendRenderTarget backendRT = gpu->createTestingOnlyBackendRenderTarget( kWidthHeight, kWidthHeight, grColorType); sk_sp sProxy( - proxyProvider->wrapBackendRenderTarget(backendRT, nullptr, nullptr)); + proxyProvider->wrapBackendRenderTarget(backendRT, nullptr)); check_surface(reporter, sProxy.get(), kWidthHeight, kWidthHeight, SkBudgeted::kNo); static constexpr int kExpectedNumSamples = 1; check_rendertarget(reporter, caps, resourceProvider, sProxy->asRenderTargetProxy(), @@ -253,7 +255,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { GrBackendRenderTarget backendRT(kWidthHeight, kWidthHeight, numSamples, kStencilBits, fboInfo); sk_sp sProxy( - proxyProvider->wrapBackendRenderTarget(backendRT, nullptr, nullptr)); + proxyProvider->wrapBackendRenderTarget(backendRT, nullptr)); check_surface(reporter, sProxy.get(), kWidthHeight, kWidthHeight, SkBudgeted::kNo); check_rendertarget(reporter, caps, resourceProvider, sProxy->asRenderTargetProxy(), supportedNumSamples, SkBackingFit::kExact, 0); @@ -263,13 +265,13 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { // Tests wrapBackendRenderTarget with a GrBackendTexture { GrBackendTexture backendTex; - CreateBackendTexture(context, &backendTex, kWidthHeight, kWidthHeight, colorType, + CreateBackendTexture(direct, &backendTex, kWidthHeight, kWidthHeight, colorType, SkColors::kTransparent, GrMipMapped::kNo, GrRenderable::kYes, GrProtected::kNo); sk_sp sProxy = proxyProvider->wrapBackendTextureAsRenderTarget( backendTex, supportedNumSamples); if (!sProxy) { - context->deleteBackendTexture(backendTex); + direct->deleteBackendTexture(backendTex); continue; // This can fail on Mesa } @@ -278,21 +280,21 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { supportedNumSamples, SkBackingFit::kExact, caps.maxWindowRectangles()); - context->deleteBackendTexture(backendTex); + direct->deleteBackendTexture(backendTex); } // Tests wrapBackendTexture that is only renderable { GrBackendTexture backendTex; - CreateBackendTexture(context, &backendTex, kWidthHeight, kWidthHeight, colorType, + CreateBackendTexture(direct, &backendTex, kWidthHeight, kWidthHeight, colorType, SkColors::kTransparent, GrMipMapped::kNo, GrRenderable::kYes, GrProtected::kNo); sk_sp sProxy = proxyProvider->wrapRenderableBackendTexture( backendTex, supportedNumSamples, kBorrow_GrWrapOwnership, - GrWrapCacheable::kNo, nullptr, nullptr); + GrWrapCacheable::kNo, nullptr); if (!sProxy) { - context->deleteBackendTexture(backendTex); + direct->deleteBackendTexture(backendTex); continue; // This can fail on Mesa } @@ -301,21 +303,21 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { supportedNumSamples, SkBackingFit::kExact, caps.maxWindowRectangles()); - context->deleteBackendTexture(backendTex); + direct->deleteBackendTexture(backendTex); } // Tests wrapBackendTexture that is only textureable { // Internal offscreen texture GrBackendTexture backendTex; - CreateBackendTexture(context, &backendTex, kWidthHeight, kWidthHeight, colorType, + CreateBackendTexture(direct, &backendTex, kWidthHeight, kWidthHeight, colorType, SkColors::kTransparent, GrMipMapped::kNo, GrRenderable::kNo, GrProtected::kNo); sk_sp sProxy = proxyProvider->wrapBackendTexture( backendTex, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, kRead_GrIOType); if (!sProxy) { - context->deleteBackendTexture(backendTex); + direct->deleteBackendTexture(backendTex); continue; } @@ -323,15 +325,15 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WrappedProxyTest, reporter, ctxInfo) { check_texture(reporter, resourceProvider, sProxy->asTextureProxy(), SkBackingFit::kExact); - context->deleteBackendTexture(backendTex); + direct->deleteBackendTexture(backendTex); } } } } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ZeroSizedProxyTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); - GrProxyProvider* provider = context->priv().proxyProvider(); + auto direct = ctxInfo.directContext(); + GrProxyProvider* provider = direct->priv().proxyProvider(); for (auto renderable : {GrRenderable::kNo, GrRenderable::kYes}) { for (auto fit : { SkBackingFit::kExact, SkBackingFit::kApprox }) { @@ -342,7 +344,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ZeroSizedProxyTest, reporter, ctxInfo) { } const GrBackendFormat format = - context->priv().caps()->getDefaultBackendFormat( + direct->priv().caps()->getDefaultBackendFormat( GrColorType::kRGBA_8888, renderable); diff --git a/tests/ReadPixelsTest.cpp b/tests/ReadPixelsTest.cpp index 28d13594acd85..b418d2c1bf7bc 100644 --- a/tests/ReadPixelsTest.cpp +++ b/tests/ReadPixelsTest.cpp @@ -5,11 +5,11 @@ * found in the LICENSE file. */ -#include #include "include/core/SkCanvas.h" +#include "include/core/SkImage.h" #include "include/core/SkSurface.h" #include "include/effects/SkGradientShader.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkColorData.h" #include "include/private/SkHalf.h" #include "include/private/SkImageInfoPriv.h" @@ -23,9 +23,12 @@ #include "tests/Test.h" #include "tests/TestUtils.h" #include "tools/ToolUtils.h" +#include "tools/gpu/BackendTextureImageFactory.h" #include "tools/gpu/GrContextFactory.h" #include "tools/gpu/ProxyUtils.h" +#include + static const int DEV_W = 100, DEV_H = 100; static const SkIRect DEV_RECT = SkIRect::MakeWH(DEV_W, DEV_H); static const SkRect DEV_RECT_S = SkRect::MakeWH(DEV_W * SK_Scalar1, @@ -419,19 +422,20 @@ static void test_readpixels_texture(skiatest::Reporter* reporter, } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Texture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto direct = ctxInfo.directContext(); + SkBitmap bmp = make_src_bitmap(); // On the GPU we will also try reading back from a non-renderable texture. for (auto origin : {kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin}) { for (auto renderable : {GrRenderable::kNo, GrRenderable::kYes}) { sk_sp proxy = sk_gpu_test::MakeTextureProxyFromData( - context, renderable, origin, bmp.info(), bmp.getPixels(), bmp.rowBytes()); + direct, renderable, origin, bmp.info(), bmp.getPixels(), bmp.rowBytes()); GrColorType grColorType = SkColorTypeToGrColorType(bmp.colorType()); - GrSwizzle swizzle = context->priv().caps()->getReadSwizzle(proxy->backendFormat(), + GrSwizzle swizzle = direct->priv().caps()->getReadSwizzle(proxy->backendFormat(), grColorType); GrSurfaceProxyView view(std::move(proxy), origin, swizzle); - auto sContext = GrSurfaceContext::Make(context, std::move(view), + auto sContext = GrSurfaceContext::Make(direct, std::move(view), grColorType, kPremul_SkAlphaType, nullptr); auto info = SkImageInfo::Make(DEV_W, DEV_H, kN32_SkColorType, kPremul_SkAlphaType); test_readpixels_texture(reporter, std::move(sContext), info); @@ -647,8 +651,15 @@ struct GpuReadPixelTestRules { // the pixmap. template using GpuSrcFactory = T(SkPixmap&); +enum class GpuReadResult { + kFail, + kSuccess, + kExcusedFailure, +}; + // Does a read from the T into the pixmap. -template using GpuReadSrcFn = bool(const T&, const SkIVector& offset, const SkPixmap&); +template +using GpuReadSrcFn = GpuReadResult(const T&, const SkIVector& offset, const SkPixmap&); } // anonymous namespace @@ -685,19 +696,19 @@ static void gpu_read_pixels_test_driver(skiatest::Reporter* reporter, dstPixels.computeByteSize(), kInitialByte); - const bool success = read(src, offset, dstPixels); + const GpuReadResult result = read(src, offset, dstPixels); if (!SkIRect::Intersects(rect, surfBounds)) { - REPORTER_ASSERT(reporter, !success); + REPORTER_ASSERT(reporter, result != GpuReadResult::kSuccess); } else if (readCT == kUnknown_SkColorType) { - REPORTER_ASSERT(reporter, !success); + REPORTER_ASSERT(reporter, result != GpuReadResult::kSuccess); } else if (readAT == kUnknown_SkAlphaType) { - REPORTER_ASSERT(reporter, !success); + REPORTER_ASSERT(reporter, result != GpuReadResult::kSuccess); } else if (!rules.fUncontainedRectSucceeds && !surfBounds.contains(rect)) { - REPORTER_ASSERT(reporter, !success); + REPORTER_ASSERT(reporter, result != GpuReadResult::kSuccess); } else if (!rules.fAllowUnpremulRead && readAT == kUnpremul_SkAlphaType) { - REPORTER_ASSERT(reporter, !success); - } else if (!success) { + REPORTER_ASSERT(reporter, result != GpuReadResult::kSuccess); + } else if (result == GpuReadResult::kFail) { // TODO: Support RGB/BGR 101010x, BGRA 1010102 on the GPU. if (SkColorTypeToGrColorType(readCT) != GrColorType::kUnknown) { ERRORF(reporter, @@ -716,7 +727,7 @@ static void gpu_read_pixels_test_driver(skiatest::Reporter* reporter, // Considering the rect we tried to read and the surface bounds figure out which pixels in // both src and dst space should actually have been read and written. SkIRect srcReadRect; - if (success && srcReadRect.intersect(surfBounds, rect)) { + if (result == GpuReadResult::kSuccess && srcReadRect.intersect(surfBounds, rect)) { SkIRect dstWriteRect = srcReadRect.makeOffset(-rect.fLeft, -rect.fTop); const bool lumConversion = @@ -724,18 +735,19 @@ static void gpu_read_pixels_test_driver(skiatest::Reporter* reporter, (SkColorTypeChannelFlags(readCT) & kGray_SkColorChannelFlag); // A CS or luminance conversion allows a 3 value difference and otherwise a 2 value // difference. Note that sometimes read back on GPU can be lossy even when there no - // conversion at allbecause GPU->CPU read may go to a lower bit depth format and then be - // promoted back to the original type. For example, GL ES cannot read to 1010102, so we - // go through 8888. + // conversion at all because GPU->CPU read may go to a lower bit depth format and then + // be promoted back to the original type. For example, GL ES cannot read to 1010102, so + // we go through 8888. const float numer = (lumConversion || csConversion) ? 3.f : 2.f; - int rgbBits = std::min({min_rgb_channel_bits(readCT), - min_rgb_channel_bits(srcCT), - 8}); + int rgbBits = std::min( + {min_rgb_channel_bits(readCT), min_rgb_channel_bits(srcCT), 8}); float tol = numer / (1 << rgbBits); float alphaTol = 0; if (readAT != kOpaque_SkAlphaType && srcAT != kOpaque_SkAlphaType) { - const int alphaBits = std::min(alpha_channel_bits(readCT), - alpha_channel_bits(srcCT)); + // Alpha can also get squashed down to 8 bits going through an intermediate + // color format. + const int alphaBits = + std::min({alpha_channel_bits(readCT), alpha_channel_bits(srcCT), 8}); alphaTol = 2.f / (1 << alphaBits); } @@ -924,20 +936,20 @@ static void gpu_read_pixels_test_driver(skiatest::Reporter* reporter, namespace { struct AsyncContext { bool fCalled = false; - std::unique_ptr fResult; + std::unique_ptr fResult; }; } // anonymous namespace // Making this a lambda in the test functions caused: // "error: cannot compile this forwarded non-trivially copyable parameter yet" // on x86/Win/Clang bot, referring to 'result'. -static void async_callback(void* c, std::unique_ptr result) { +static void async_callback(void* c, std::unique_ptr result) { auto context = static_cast(c); context->fResult = std::move(result); context->fCalled = true; }; -DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AsyncReadPixels, reporter, ctxInfo) { +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceAsyncReadPixels, reporter, ctxInfo) { using Surface = sk_sp; auto reader = std::function>([](const Surface& surface, const SkIVector& offset, @@ -946,18 +958,18 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AsyncReadPixels, reporter, ctxInfo) { auto rect = SkIRect::MakeSize(pixels.dimensions()).makeOffset(offset); // Rescale quality and linearity don't matter since we're doing a non-scaling readback. - surface->asyncRescaleAndReadPixels(pixels.info(), rect, SkSurface::RescaleGamma::kSrc, + surface->asyncRescaleAndReadPixels(pixels.info(), rect, SkImage::RescaleGamma::kSrc, kNone_SkFilterQuality, async_callback, &context); surface->getContext()->submit(); while (!context.fCalled) { surface->getCanvas()->getGrContext()->checkAsyncWorkCompletion(); } if (!context.fResult) { - return false; + return GpuReadResult::kFail; } SkRectMemcpy(pixels.writable_addr(), pixels.rowBytes(), context.fResult->data(0), context.fResult->rowBytes(0), pixels.info().minRowBytes(), pixels.height()); - return true; + return GpuReadResult::kSuccess; }); GpuReadPixelTestRules rules; rules.fAllowUnpremulSrc = false; @@ -966,7 +978,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AsyncReadPixels, reporter, ctxInfo) { for (GrSurfaceOrigin origin : {kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin}) { auto factory = std::function>( - [context = ctxInfo.grContext(), origin](const SkPixmap& src) { + [context = ctxInfo.directContext(), origin](const SkPixmap& src) { if (src.colorType() == kRGB_888x_SkColorType) { return Surface(); } @@ -981,11 +993,65 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AsyncReadPixels, reporter, ctxInfo) { } } +DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageAsyncReadPixels, reporter, ctxInfo) { + using Image = sk_sp; + auto context = ctxInfo.directContext(); + auto reader = std::function>([context](const Image& image, + const SkIVector& offset, + const SkPixmap& pixels) { + AsyncContext asyncContext; + auto rect = SkIRect::MakeSize(pixels.dimensions()).makeOffset(offset); + // The GPU implementation is based on rendering and will fail for non-renderable color + // types. + auto ct = SkColorTypeToGrColorType(image->colorType()); + auto format = context->priv().caps()->getDefaultBackendFormat(ct, GrRenderable::kYes); + if (!context->priv().caps()->isFormatAsColorTypeRenderable(ct, format)) { + return GpuReadResult::kExcusedFailure; + } + + // Rescale quality and linearity don't matter since we're doing a non-scaling readback. + image->asyncRescaleAndReadPixels(pixels.info(), rect, SkImage::RescaleGamma::kSrc, + kNone_SkFilterQuality, async_callback, &asyncContext); + context->submit(); + while (!asyncContext.fCalled) { + context->checkAsyncWorkCompletion(); + } + if (!asyncContext.fResult) { + return GpuReadResult::kFail; + } + SkRectMemcpy(pixels.writable_addr(), pixels.rowBytes(), asyncContext.fResult->data(0), + asyncContext.fResult->rowBytes(0), pixels.info().minRowBytes(), + pixels.height()); + return GpuReadResult::kSuccess; + }); + + GpuReadPixelTestRules rules; + rules.fAllowUnpremulSrc = true; + // GPU doesn't support reading to kUnpremul because the rescaling works by rendering and now + // we only support premul rendering. + rules.fAllowUnpremulRead = false; + rules.fUncontainedRectSucceeds = false; + + for (auto origin : {kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin}) { + for (auto renderable : {GrRenderable::kNo, GrRenderable::kYes}) { + auto factory = std::function>([&](const SkPixmap& src) { + if (src.colorType() == kRGB_888x_SkColorType) { + return Image(); + } + return sk_gpu_test::MakeBackendTextureImage(ctxInfo.directContext(), src, + renderable, origin); + }); + gpu_read_pixels_test_driver(reporter, rules, factory, reader); + } + } +} + DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Gpu, reporter, ctxInfo) { using Surface = sk_sp; auto reader = std::function>( [](const Surface& surface, const SkIVector& offset, const SkPixmap& pixels) { - return surface->readPixels(pixels, offset.fX, offset.fY); + return surface->readPixels(pixels, offset.fX, offset.fY) ? GpuReadResult::kSuccess + : GpuReadResult::kFail; }); GpuReadPixelTestRules rules; rules.fAllowUnpremulSrc = false; @@ -994,7 +1060,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadPixels_Gpu, reporter, ctxInfo) { for (GrSurfaceOrigin origin : {kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin}) { auto factory = std::function>( - [context = ctxInfo.grContext(), origin](const SkPixmap& src) { + [context = ctxInfo.directContext(), origin](const SkPixmap& src) { if (src.colorType() == kRGB_888x_SkColorType) { return Surface(); } @@ -1035,9 +1101,12 @@ DEF_GPUTEST(AsyncReadPixelsContextShutdown, reporter, options) { // Vulkan context abandoning without resource release has issues outside of the scope of // this test. if (type == sk_gpu_test::GrContextFactory::kVulkan_ContextType && - (sequence == ShutdownSequence::kAbandon_FreeResult_DestroyContext || - sequence == ShutdownSequence::kAbandon_DestroyContext_FreeResult || - sequence == ShutdownSequence::kFreeResult_Abandon_DestroyContext)) { + (sequence == ShutdownSequence::kFreeResult_ReleaseAndAbandon_DestroyContext || + sequence == ShutdownSequence::kFreeResult_Abandon_DestroyContext || + sequence == ShutdownSequence::kReleaseAndAbandon_FreeResult_DestroyContext || + sequence == ShutdownSequence::kReleaseAndAbandon_DestroyContext_FreeResult || + sequence == ShutdownSequence::kAbandon_FreeResult_DestroyContext || + sequence == ShutdownSequence::kAbandon_DestroyContext_FreeResult)) { continue; } for (bool yuv : {false, true}) { @@ -1059,10 +1128,10 @@ DEF_GPUTEST(AsyncReadPixelsContextShutdown, reporter, options) { if (yuv) { surf->asyncRescaleAndReadPixelsYUV420( kIdentity_SkYUVColorSpace, SkColorSpace::MakeSRGB(), ii.bounds(), - ii.dimensions(), SkSurface::RescaleGamma::kSrc, kNone_SkFilterQuality, + ii.dimensions(), SkImage::RescaleGamma::kSrc, kNone_SkFilterQuality, &async_callback, &cbContext); } else { - surf->asyncRescaleAndReadPixels(ii, ii.bounds(), SkSurface::RescaleGamma::kSrc, + surf->asyncRescaleAndReadPixels(ii, ii.bounds(), SkImage::RescaleGamma::kSrc, kNone_SkFilterQuality, &async_callback, &cbContext); } @@ -1075,6 +1144,10 @@ DEF_GPUTEST(AsyncReadPixelsContextShutdown, reporter, options) { sk_gpu_test::GrContextFactory::ContextTypeName(type), yuv); continue; } + // For vulkan we need to release all refs to the GrContext before trying to destroy + // the test context. The surface here is holding a ref. + surf.reset(); + // The real test is that we don't crash, get Vulkan validation errors, etc, during // this shutdown sequence. switch (sequence) { diff --git a/tests/ReadWriteAlphaTest.cpp b/tests/ReadWriteAlphaTest.cpp index df18ab9c7b5e2..bebccf08f2370 100644 --- a/tests/ReadWriteAlphaTest.cpp +++ b/tests/ReadWriteAlphaTest.cpp @@ -9,7 +9,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkTo.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrContextPriv.h" @@ -48,7 +48,7 @@ static void validate_alpha_data(skiatest::Reporter* reporter, int w, int h, cons } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadWriteAlpha, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto direct = ctxInfo.directContext(); unsigned char alphaData[X_SIZE * Y_SIZE]; @@ -67,17 +67,17 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadWriteAlpha, reporter, ctxInfo) { SkBitmap bitmap; bitmap.installPixels(ii, alphaDataCopy, ii.minRowBytes()); bitmap.setImmutable(); - GrBitmapTextureMaker maker(context, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted); + GrBitmapTextureMaker maker(direct, bitmap, GrImageTexGenPolicy::kNew_Uncached_Budgeted); auto view = maker.view(GrMipMapped::kNo); if (!view.proxy()) { ERRORF(reporter, "Could not create alpha texture."); return; } - auto sContext = GrSurfaceContext::Make(context, std::move(view), maker.colorType(), + auto sContext = GrSurfaceContext::Make(direct, std::move(view), maker.colorType(), kPremul_SkAlphaType, nullptr); - sk_sp surf(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, ii)); + sk_sp surf(SkSurface::MakeRenderTarget(direct, SkBudgeted::kNo, ii)); // create a distinctive texture for (int y = 0; y < Y_SIZE; ++y) { @@ -187,16 +187,16 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReadWriteAlpha, reporter, ctxInfo) { auto origin = GrRenderable::kYes == renderable ? kBottomLeft_GrSurfaceOrigin : kTopLeft_GrSurfaceOrigin; auto proxy = sk_gpu_test::MakeTextureProxyFromData( - context, renderable, origin, + direct, renderable, origin, {info.fColorType, info.fAlphaType, nullptr, X_SIZE, Y_SIZE}, rgbaData, 0); if (!proxy) { continue; } - GrSwizzle swizzle = context->priv().caps()->getReadSwizzle(proxy->backendFormat(), - info.fColorType); + GrSwizzle swizzle = direct->priv().caps()->getReadSwizzle(proxy->backendFormat(), + info.fColorType); GrSurfaceProxyView view(std::move(proxy), origin, swizzle); - auto sContext = GrSurfaceContext::Make(context, std::move(view), info.fColorType, + auto sContext = GrSurfaceContext::Make(direct, std::move(view), info.fColorType, kPremul_SkAlphaType, nullptr); for (auto rowBytes : kRowBytes) { diff --git a/tests/Reader32Test.cpp b/tests/Reader32Test.cpp deleted file mode 100644 index b0a083425ccbb..0000000000000 --- a/tests/Reader32Test.cpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2011 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "src/core/SkReader32.h" -#include "tests/Test.h" - -static void assert_eof(skiatest::Reporter* reporter, const SkReader32& reader) { - REPORTER_ASSERT(reporter, reader.eof()); - REPORTER_ASSERT(reporter, reader.size() == reader.offset()); - REPORTER_ASSERT(reporter, (const char*)reader.peek() == - (const char*)reader.base() + reader.size()); -} - -static void assert_start(skiatest::Reporter* reporter, const SkReader32& reader) { - REPORTER_ASSERT(reporter, 0 == reader.offset()); - REPORTER_ASSERT(reporter, reader.size() == reader.available()); - REPORTER_ASSERT(reporter, reader.isAvailable(reader.size())); - REPORTER_ASSERT(reporter, !reader.isAvailable(reader.size() + 1)); - REPORTER_ASSERT(reporter, reader.peek() == reader.base()); -} - -static void assert_empty(skiatest::Reporter* reporter, const SkReader32& reader) { - REPORTER_ASSERT(reporter, 0 == reader.size()); - REPORTER_ASSERT(reporter, 0 == reader.offset()); - REPORTER_ASSERT(reporter, 0 == reader.available()); - REPORTER_ASSERT(reporter, !reader.isAvailable(1)); - assert_eof(reporter, reader); - assert_start(reporter, reader); -} - -DEF_TEST(Reader32, reporter) { - SkReader32 reader; - assert_empty(reporter, reader); - REPORTER_ASSERT(reporter, nullptr == reader.base()); - REPORTER_ASSERT(reporter, nullptr == reader.peek()); - - size_t i; - - const int32_t data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; - const SkScalar data2[] = { 0, SK_Scalar1, -SK_Scalar1, SK_Scalar1/2 }; - const size_t bufsize = sizeof(data) > sizeof(data2) ? - sizeof(data) : sizeof(data2); - char buffer[bufsize]; - - reader.setMemory(data, sizeof(data)); - for (i = 0; i < SK_ARRAY_COUNT(data); ++i) { - REPORTER_ASSERT(reporter, sizeof(data) == reader.size()); - REPORTER_ASSERT(reporter, i*4 == reader.offset()); - REPORTER_ASSERT(reporter, (const void*)data == reader.base()); - REPORTER_ASSERT(reporter, (const void*)&data[i] == reader.peek()); - REPORTER_ASSERT(reporter, data[i] == reader.readInt()); - } - assert_eof(reporter, reader); - reader.rewind(); - assert_start(reporter, reader); - reader.read(buffer, sizeof(data)); - REPORTER_ASSERT(reporter, !memcmp(data, buffer, sizeof(data))); - - reader.setMemory(data2, sizeof(data2)); - for (i = 0; i < SK_ARRAY_COUNT(data2); ++i) { - REPORTER_ASSERT(reporter, sizeof(data2) == reader.size()); - REPORTER_ASSERT(reporter, i*4 == reader.offset()); - REPORTER_ASSERT(reporter, (const void*)data2 == reader.base()); - REPORTER_ASSERT(reporter, (const void*)&data2[i] == reader.peek()); - REPORTER_ASSERT(reporter, data2[i] == reader.readScalar()); - } - assert_eof(reporter, reader); - reader.rewind(); - assert_start(reporter, reader); - reader.read(buffer, sizeof(data2)); - REPORTER_ASSERT(reporter, !memcmp(data2, buffer, sizeof(data2))); - - reader.setMemory(nullptr, 0); - assert_empty(reporter, reader); - REPORTER_ASSERT(reporter, nullptr == reader.base()); - REPORTER_ASSERT(reporter, nullptr == reader.peek()); - - // need to handle read(null, 0) and not get undefined behavior from memcpy - { - uint32_t storage[100 / sizeof(uint32_t)]; - reader.setMemory(storage, sizeof(storage)); - char buffer[10]; - reader.read(buffer, 0); // easy case, since we pass a ptr - reader.read(nullptr, 0); // undef case, read() can't blindly call memcpy - } -} diff --git a/tests/RecordOptsTest.cpp b/tests/RecordOptsTest.cpp index 2677b37e9953a..382b3cbb0a2f5 100644 --- a/tests/RecordOptsTest.cpp +++ b/tests/RecordOptsTest.cpp @@ -193,18 +193,6 @@ DEF_TEST(RecordOpts_NoopSaveLayerDrawRestore, r) { recorder.drawRect(draw, opaqueDrawPaint); recorder.restore(); assert_savelayer_draw_restore(r, &record, 18, false); - - // saveLayer w/ clip mask should also NOT go away -#ifdef SK_SUPPORT_LEGACY_LAYERCLIPMASK - { - sk_sp surface(SkSurface::MakeRasterN32Premul(10, 10)); - recorder.saveLayer({ nullptr, nullptr, nullptr, surface->makeImageSnapshot().get(), - nullptr, 0}); - recorder.drawRect(draw, opaqueDrawPaint); - recorder.restore(); - assert_savelayer_draw_restore(r, &record, 21, false); - } -#endif } #endif diff --git a/tests/RectangleTextureTest.cpp b/tests/RectangleTextureTest.cpp index bdb1926e8ea0f..3f295ecb3171b 100644 --- a/tests/RectangleTextureTest.cpp +++ b/tests/RectangleTextureTest.cpp @@ -8,7 +8,7 @@ #include "tests/Test.h" #include "tests/TestUtils.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrRenderTargetContext.h" @@ -21,12 +21,9 @@ #include "src/gpu/gl/GrGLUtil.h" #endif #include "tools/gpu/ProxyUtils.h" -#ifdef SK_GL -#include "tools/gpu/gl/GLTestContext.h" -#endif // skbug.com/5932 -static void test_basic_draw_as_src(skiatest::Reporter* reporter, GrContext* context, +static void test_basic_draw_as_src(skiatest::Reporter* reporter, GrRecordingContext* context, GrSurfaceProxyView rectView, GrColorType colorType, SkAlphaType alphaType, uint32_t expectedPixelValues[]) { auto rtContext = GrRenderTargetContext::Make( @@ -90,7 +87,7 @@ static void test_clear(skiatest::Reporter* reporter, GrSurfaceContext* rectConte } static void test_copy_to_surface(skiatest::Reporter* reporter, - GrContext* context, + GrDirectContext* context, GrSurfaceContext* dstContext, const char* testName) { @@ -119,40 +116,37 @@ static void test_copy_to_surface(skiatest::Reporter* reporter, #ifdef SK_GL DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(RectangleTexture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); - GrProxyProvider* proxyProvider = context->priv().proxyProvider(); - sk_gpu_test::GLTestContext* glContext = ctxInfo.glContext(); + auto direct = ctxInfo.directContext(); + + GrProxyProvider* proxyProvider = direct->priv().proxyProvider(); static const int kWidth = 16; static const int kHeight = 16; - GrColor pixels[kWidth * kHeight]; + uint32_t pixels[kWidth * kHeight]; for (int y = 0; y < kHeight; ++y) { for (int x = 0; x < kWidth; ++x) { pixels[y * kWidth + x] = y * kWidth + x; } } + auto ii = SkImageInfo::Make(kWidth, kHeight, kRGBA_8888_SkColorType, kPremul_SkAlphaType); + SkPixmap pm(ii, pixels, sizeof(uint32_t)*kWidth); for (auto origin : { kBottomLeft_GrSurfaceOrigin, kTopLeft_GrSurfaceOrigin }) { bool useBLOrigin = kBottomLeft_GrSurfaceOrigin == origin; - GrGLuint rectTexID = glContext->createTextureRectangle(kWidth, kHeight, GR_GL_RGBA, - GR_GL_RGBA, GR_GL_UNSIGNED_BYTE, - pixels); - - if (!rectTexID) { - return; + auto format = GrBackendFormat::MakeGL(GR_GL_RGBA8, GR_GL_TEXTURE_RECTANGLE); + GrBackendTexture rectangleTex = direct->createBackendTexture(kWidth, + kHeight, + format, + GrMipMapped::kNo, + GrRenderable::kYes); + if (!rectangleTex.isValid()) { + continue; } - // Let GrContext know that we messed with the GL context directly. - context->resetContext(); - - // Wrap the rectangle texture ID in a GrTexture - GrGLTextureInfo rectangleInfo; - rectangleInfo.fID = rectTexID; - rectangleInfo.fTarget = GR_GL_TEXTURE_RECTANGLE; - rectangleInfo.fFormat = GR_GL_RGBA8; - - GrBackendTexture rectangleTex(kWidth, kHeight, GrMipMapped::kNo, rectangleInfo); + if (!direct->updateBackendTexture(rectangleTex, &pm, 1, nullptr, nullptr)) { + continue; + } GrColor refPixels[kWidth * kHeight]; for (int y = 0; y < kHeight; ++y) { @@ -166,8 +160,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(RectangleTexture, reporter, ctxInfo) { rectangleTex, kBorrow_GrWrapOwnership, GrWrapCacheable::kNo, kRW_GrIOType); if (!rectProxy) { - ERRORF(reporter, "Error creating proxy for rectangle texture."); - GR_GL_CALL(glContext->gl(), DeleteTextures(1, &rectTexID)); + direct->deleteBackendTexture(rectangleTex); continue; } @@ -180,31 +173,31 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(RectangleTexture, reporter, ctxInfo) { SkASSERT(rectProxy->hasRestrictedSampling()); SkASSERT(rectProxy->peekTexture()->texturePriv().hasRestrictedSampling()); - GrSwizzle swizzle = context->priv().caps()->getReadSwizzle(rectangleTex.getBackendFormat(), - GrColorType::kRGBA_8888); + GrSwizzle swizzle = direct->priv().caps()->getReadSwizzle(rectangleTex.getBackendFormat(), + GrColorType::kRGBA_8888); GrSurfaceProxyView view(rectProxy, origin, swizzle); - test_basic_draw_as_src(reporter, context, view, GrColorType::kRGBA_8888, + test_basic_draw_as_src(reporter, direct, view, GrColorType::kRGBA_8888, kPremul_SkAlphaType, refPixels); // Test copy to both a texture and RT - TestCopyFromSurface(reporter, context, rectProxy.get(), origin, GrColorType::kRGBA_8888, + TestCopyFromSurface(reporter, direct, rectProxy.get(), origin, GrColorType::kRGBA_8888, refPixels, "RectangleTexture-copy-from"); - auto rectContext = GrSurfaceContext::Make(context, std::move(view), + auto rectContext = GrSurfaceContext::Make(direct, std::move(view), GrColorType::kRGBA_8888, kPremul_SkAlphaType, nullptr); SkASSERT(rectContext); TestReadPixels(reporter, rectContext.get(), refPixels, "RectangleTexture-read"); - test_copy_to_surface(reporter, context, rectContext.get(), "RectangleTexture-copy-to"); + test_copy_to_surface(reporter, direct, rectContext.get(), "RectangleTexture-copy-to"); TestWritePixels(reporter, rectContext.get(), true, "RectangleTexture-write"); test_clear(reporter, rectContext.get()); - GR_GL_CALL(glContext->gl(), DeleteTextures(1, &rectTexID)); + direct->deleteBackendTexture(rectangleTex); } } #endif diff --git a/tests/RenderTargetContextTest.cpp b/tests/RenderTargetContextTest.cpp index 395a09a3843c1..c44eadcbb5adb 100644 --- a/tests/RenderTargetContextTest.cpp +++ b/tests/RenderTargetContextTest.cpp @@ -9,6 +9,7 @@ #include "tests/Test.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" #include "src/gpu/GrRenderTargetContext.h" @@ -33,7 +34,7 @@ static void check_instantiation_status(skiatest::Reporter* reporter, } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(RenderTargetContextTest, reporter, ctxInfo) { - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); // Calling instantiate on a GrRenderTargetContext's textureProxy also instantiates the // GrRenderTargetContext diff --git a/tests/RepeatedClippedBlurTest.cpp b/tests/RepeatedClippedBlurTest.cpp index 6937d48f329d0..1db63bebeaaf5 100644 --- a/tests/RepeatedClippedBlurTest.cpp +++ b/tests/RepeatedClippedBlurTest.cpp @@ -8,6 +8,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" #include "include/effects/SkImageFilters.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrResourceCache.h" #include "tests/Test.h" @@ -22,7 +23,7 @@ // 2D canvas and compositor image filtering. In this case Chrome doesn't regularly purge // the cache. This would result in Ganesh quickly running up to its max cache limit. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(RepeatedClippedBlurTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrResourceCache* cache = context->priv().getResourceCache(); const SkImageInfo ii = SkImageInfo::Make(1024, 600, kRGBA_8888_SkColorType, diff --git a/tests/ResourceAllocatorTest.cpp b/tests/ResourceAllocatorTest.cpp index 0293731d7f0c4..165827323f342 100644 --- a/tests/ResourceAllocatorTest.cpp +++ b/tests/ResourceAllocatorTest.cpp @@ -7,6 +7,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrProxyProvider.h" @@ -115,9 +116,10 @@ static void non_overlap_test(skiatest::Reporter* reporter, GrResourceProvider* r } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorTest, reporter, ctxInfo) { - const GrCaps* caps = ctxInfo.grContext()->priv().caps(); - GrProxyProvider* proxyProvider = ctxInfo.grContext()->priv().proxyProvider(); - GrResourceProvider* resourceProvider = ctxInfo.grContext()->priv().resourceProvider(); + auto direct = ctxInfo.directContext(); + const GrCaps* caps = direct->priv().caps(); + GrProxyProvider* proxyProvider = direct->priv().proxyProvider(); + GrResourceProvider* resourceProvider = direct->priv().resourceProvider(); struct TestCase { ProxyParams fP1; @@ -158,8 +160,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorTest, reporter, ctxInfo) { } auto beFormat = caps->getDefaultBackendFormat(GrColorType::kRGBA_8888, GrRenderable::kYes); - int k2 = ctxInfo.grContext()->priv().caps()->getRenderTargetSampleCount(2, beFormat); - int k4 = ctxInfo.grContext()->priv().caps()->getRenderTargetSampleCount(4, beFormat); + int k2 = direct->priv().caps()->getRenderTargetSampleCount(2, beFormat); + int k4 = direct->priv().caps()->getRenderTargetSampleCount(4, beFormat); //-------------------------------------------------------------------------------------------- TestCase gNonOverlappingTests[] = { @@ -214,13 +216,13 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorTest, reporter, ctxInfo) { {{64, kNotRT, kRGBA, kE, 1, kNotB}, {64, kNotRT, kRGBA, kE, 1, kNotB}, kDontShare}}; GrBackendTexture backEndTex; - sk_sp p1 = make_backend(ctxInfo.grContext(), t[0].fP1, &backEndTex); + sk_sp p1 = make_backend(direct, t[0].fP1, &backEndTex); sk_sp p2 = make_deferred(proxyProvider, caps, t[0].fP2); non_overlap_test(reporter, resourceProvider, std::move(p1), std::move(p2), t[0].fExpectation); - cleanup_backend(ctxInfo.grContext(), backEndTex); + cleanup_backend(direct, backEndTex); } } @@ -237,7 +239,7 @@ static void draw(GrContext* context) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorStressTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); size_t maxBytes = context->getResourceCacheLimit(); @@ -282,7 +284,7 @@ sk_sp make_lazy(GrProxyProvider* proxyProvider, const GrCaps* ca // it is over budget. The two opsTasks should be flushed separately and the opsTask indices // returned from assign should be correct. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorOverBudgetTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrCaps* caps = context->priv().caps(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); GrResourceProvider* resourceProvider = context->priv().resourceProvider(); @@ -340,7 +342,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorOverBudgetTest, reporter, ct // http://crbug.com/996610. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorCurOpsTaskIndexTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrCaps* caps = context->priv().caps(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); GrResourceProvider* resourceProvider = context->priv().resourceProvider(); @@ -370,8 +372,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorCurOpsTaskIndexTest, // Wrapped proxy that will be ignored by the resourceAllocator. We use this to try and get the // resource allocator fCurOpsTaskIndex to fall behind what it really should be. GrBackendTexture backEndTex; - sk_sp proxyWrapped = make_backend(ctxInfo.grContext(), params, - &backEndTex); + sk_sp proxyWrapped = make_backend(context, params, &backEndTex); if (!proxyWrapped) { return; } @@ -379,10 +380,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorCurOpsTaskIndexTest, // Same as above, but we actually need to have at least two intervals that don't go through the // resource allocator to expose the index bug. GrBackendTexture backEndTex2; - sk_sp proxyWrapped2 = make_backend(ctxInfo.grContext(), params, - &backEndTex2); + sk_sp proxyWrapped2 = make_backend(context, params, &backEndTex2); if (!proxyWrapped2) { - cleanup_backend(ctxInfo.grContext(), backEndTex); + cleanup_backend(context, backEndTex); return; } @@ -423,8 +423,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceAllocatorCurOpsTaskIndexTest, REPORTER_ASSERT(reporter, GrResourceAllocator::AssignError::kNoError == error); REPORTER_ASSERT(reporter, 3 == startIndex && 4 == stopIndex); - cleanup_backend(ctxInfo.grContext(), backEndTex); - cleanup_backend(ctxInfo.grContext(), backEndTex2); + cleanup_backend(context, backEndTex); + cleanup_backend(context, backEndTex2); context->setResourceCacheLimit(origMaxBytes); } diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp index cf20b3bdf3ea1..d5c548604b5fb 100644 --- a/tests/ResourceCacheTest.cpp +++ b/tests/ResourceCacheTest.cpp @@ -7,7 +7,7 @@ #include "include/core/SkTypes.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrGpuResourceCacheAccess.h" @@ -34,7 +34,7 @@ static const int gHeight = 480; //////////////////////////////////////////////////////////////////////////////// DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceCacheCache, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); auto surface(SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, info)); SkCanvas* canvas = surface->getCanvas(); @@ -110,7 +110,7 @@ static sk_sp create_RT_with_SB(GrResourceProvider* provider, // This currently fails on ES3 ANGLE contexts DEF_GPUTEST_FOR_CONTEXTS(ResourceCacheStencilBuffers, &is_rendering_and_not_angle_es3, reporter, ctxInfo, nullptr) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrCaps* caps = context->priv().caps(); if (caps->avoidStencilBuffers()) { @@ -184,7 +184,7 @@ DEF_GPUTEST_FOR_CONTEXTS(ResourceCacheStencilBuffers, &is_rendering_and_not_angl } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceCacheWrappedResources, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrResourceProvider* resourceProvider = context->priv().resourceProvider(); GrGpu* gpu = context->priv().getGpu(); // this test is only valid for GL @@ -1557,7 +1557,7 @@ DEF_GPUTEST(ResourceCacheMisc, reporter, /* options */) { // This simulates a portion of Chrome's context abandonment processing. // Please see: crbug.com/1011368 and crbug.com/1014993 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ResourceMessagesAfterAbandon, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGpu* gpu = context->priv().getGpu(); GrResourceCache* cache = context->priv().getResourceCache(); @@ -1630,7 +1630,7 @@ static sk_sp make_mipmap_proxy(GrContext* context, // Exercise GrSurface::gpuMemorySize for different combos of MSAA, RT-only, // Texture-only, both-RT-and-Texture and MIPmapped DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GPUMemorySize, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrResourceProvider* resourceProvider = context->priv().resourceProvider(); const GrCaps* caps = context->priv().caps(); @@ -1686,7 +1686,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GPUMemorySize, reporter, ctxInfo) { #if GR_GPU_STATS DEF_GPUTEST_FOR_MOCK_CONTEXT(OverbudgetFlush, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); context->setResourceCacheLimit(1); // Helper that determines if cache is overbudget. diff --git a/tests/SRGBReadWritePixelsTest.cpp b/tests/SRGBReadWritePixelsTest.cpp index 5e85e01987b71..18448702e2f16 100644 --- a/tests/SRGBReadWritePixelsTest.cpp +++ b/tests/SRGBReadWritePixelsTest.cpp @@ -8,6 +8,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" #include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrImageInfo.h" @@ -228,7 +229,7 @@ static void test_write_read(Encoding contextEncoding, Encoding writeEncoding, En // Test all combinations of writePixels/readPixels where the surface context/write source/read dst // are sRGB, linear, or untagged RGBA_8888. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SRGBReadWritePixels, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); if (!context->priv().caps()->getDefaultBackendFormat(GrColorType::kRGBA_8888_SRGB, GrRenderable::kNo).isValid()) { return; diff --git a/tests/SerializationTest.cpp b/tests/SerializationTest.cpp index 2c0077aac24f1..fd1cbfb2386eb 100644 --- a/tests/SerializationTest.cpp +++ b/tests/SerializationTest.cpp @@ -17,6 +17,7 @@ #include "include/private/SkFixed.h" #include "include/private/SkTemplates.h" #include "src/core/SkAnnotationKeys.h" +#include "src/core/SkAutoMalloc.h" #include "src/core/SkFontDescriptor.h" #include "src/core/SkMatrixPriv.h" #include "src/core/SkOSFile.h" @@ -301,9 +302,9 @@ static void TestColorFilterSerialization(skiatest::Reporter* reporter) { for (int i = 0; i < 256; ++i) { table[i] = (i * 41) % 256; } - auto colorFilter(SkTableColorFilter::Make(table)); + auto filter = SkTableColorFilter::Make(table); sk_sp copy( - TestFlattenableSerialization(colorFilter.get(), true, reporter)); + TestFlattenableSerialization(as_CFB(filter.get()), true, reporter)); } static SkBitmap draw_picture(SkPicture& picture) { @@ -334,9 +335,38 @@ static void compare_bitmaps(skiatest::Reporter* reporter, } REPORTER_ASSERT(reporter, 0 == pixelErrors); } -static void serialize_and_compare_typeface(sk_sp typeface, const char* text, - skiatest::Reporter* reporter) -{ + +static sk_sp serialize_typeface_proc(SkTypeface* typeface, void* ctx) { + // Write out typeface ID followed by entire typeface. + SkDynamicMemoryWStream stream; + sk_sp data(typeface->serialize(SkTypeface::SerializeBehavior::kDoIncludeData)); + uint32_t typeface_id = typeface->uniqueID(); + stream.write(&typeface_id, sizeof(typeface_id)); + stream.write(data->data(), data->size()); + return stream.detachAsData(); +} + +static sk_sp deserialize_typeface_proc(const void* data, size_t length, void* ctx) { + SkStream* stream; + if (length < sizeof(stream)) { + return nullptr; + } + memcpy(&stream, data, sizeof(stream)); + + SkFontID id; + if (!stream->read(&id, sizeof(id))) { + return nullptr; + } + + sk_sp typeface = SkTypeface::MakeDeserialize(stream); + return typeface; +} + +static void serialize_and_compare_typeface(sk_sp typeface, + const char* text, + const SkSerialProcs* serial_procs, + const SkDeserialProcs* deserial_procs, + skiatest::Reporter* reporter) { // Create a font with the typeface. SkPaint paint; paint.setColor(SK_ColorGRAY); @@ -354,9 +384,9 @@ static void serialize_and_compare_typeface(sk_sp typeface, const cha // Serlialize picture and create its clone from stream. SkDynamicMemoryWStream stream; - picture->serialize(&stream); + picture->serialize(&stream, serial_procs); std::unique_ptr inputStream(stream.detachAsStream()); - sk_sp loadedPicture(SkPicture::MakeFromStream(inputStream.get())); + sk_sp loadedPicture(SkPicture::MakeFromStream(inputStream.get(), deserial_procs)); // Draw both original and clone picture and compare bitmaps -- they should be identical. SkBitmap origBitmap = draw_picture(*picture); @@ -364,14 +394,17 @@ static void serialize_and_compare_typeface(sk_sp typeface, const cha compare_bitmaps(reporter, origBitmap, destBitmap); } -static void TestPictureTypefaceSerialization(skiatest::Reporter* reporter) { +static void TestPictureTypefaceSerialization(const SkSerialProcs* serial_procs, + const SkDeserialProcs* deserial_procs, + skiatest::Reporter* reporter) { { // Load typeface from file to test CreateFromFile with index. auto typeface = MakeResourceAsTypeface("fonts/test.ttc", 1); if (!typeface) { INFOF(reporter, "Could not run fontstream test because test.ttc not found."); } else { - serialize_and_compare_typeface(std::move(typeface), "A!", reporter); + serialize_and_compare_typeface(std::move(typeface), "A!", serial_procs, deserial_procs, + reporter); } } @@ -387,7 +420,8 @@ static void TestPictureTypefaceSerialization(skiatest::Reporter* reporter) { if (!typeface) { INFOF(reporter, "Could not run fontstream test because Distortable.ttf not created."); } else { - serialize_and_compare_typeface(std::move(typeface), "ab", reporter); + serialize_and_compare_typeface(std::move(typeface), "ab", serial_procs, + deserial_procs, reporter); } } } @@ -543,6 +577,53 @@ DEF_TEST(Serialization, reporter) { TestArraySerialization(data, reporter); } + // Test skipByteArray + { + // Valid case with non-empty array: + { + unsigned char data[kArraySize] = { 1, 2, 3 }; + SkBinaryWriteBuffer writer; + writer.writeByteArray(data, kArraySize); + SkAutoMalloc buf(writer.bytesWritten()); + writer.writeToMemory(buf.get()); + + SkReadBuffer reader(buf.get(), writer.bytesWritten()); + size_t len = ~0; + const void* arr = reader.skipByteArray(&len); + REPORTER_ASSERT(reporter, arr); + REPORTER_ASSERT(reporter, len == kArraySize); + REPORTER_ASSERT(reporter, memcmp(arr, data, len) == 0); + } + + // Writing a zero length array (can be detected as valid by non-nullptr return): + { + SkBinaryWriteBuffer writer; + writer.writeByteArray(nullptr, 0); + SkAutoMalloc buf(writer.bytesWritten()); + writer.writeToMemory(buf.get()); + + SkReadBuffer reader(buf.get(), writer.bytesWritten()); + size_t len = ~0; + const void* arr = reader.skipByteArray(&len); + REPORTER_ASSERT(reporter, arr); + REPORTER_ASSERT(reporter, len == 0); + } + + // If the array can't be safely read, should return nullptr: + { + SkBinaryWriteBuffer writer; + writer.writeUInt(kArraySize); + SkAutoMalloc buf(writer.bytesWritten()); + writer.writeToMemory(buf.get()); + + SkReadBuffer reader(buf.get(), writer.bytesWritten()); + size_t len = ~0; + const void* arr = reader.skipByteArray(&len); + REPORTER_ASSERT(reporter, !arr); + REPORTER_ASSERT(reporter, len == 0); + } + } + // Test invalid deserializations { SkImageInfo info = SkImageInfo::MakeN32Premul(kBitmapSize, kBitmapSize); @@ -586,7 +667,13 @@ DEF_TEST(Serialization, reporter) { } } - TestPictureTypefaceSerialization(reporter); + TestPictureTypefaceSerialization(nullptr, nullptr, reporter); + + SkSerialProcs serial_procs; + serial_procs.fTypefaceProc = serialize_typeface_proc; + SkDeserialProcs deserial_procs; + deserial_procs.fTypefaceProc = deserialize_typeface_proc; + TestPictureTypefaceSerialization(&serial_procs, &deserial_procs, reporter); } /////////////////////////////////////////////////////////////////////////////////////////////////// @@ -740,8 +827,6 @@ DEF_TEST(WriteBuffer_external_memory_flattenable, reporter) { REPORTER_ASSERT(reporter, path_effect->serialize(storage.get(), storage_size) != 0u); } -#include "src/core/SkAutoMalloc.h" - DEF_TEST(ReadBuffer_empty, reporter) { SkBinaryWriteBuffer writer; writer.writeInt(123); diff --git a/tests/ShaderOpacityTest.cpp b/tests/ShaderOpacityTest.cpp index bfdf3e7dd0898..13357b3aeb993 100644 --- a/tests/ShaderOpacityTest.cpp +++ b/tests/ShaderOpacityTest.cpp @@ -6,10 +6,13 @@ */ #include "include/core/SkBitmap.h" +#include "include/core/SkCanvas.h" #include "include/core/SkShader.h" +#include "include/core/SkSurface.h" #include "include/effects/SkGradientShader.h" #include "src/shaders/SkColorShader.h" #include "tests/Test.h" +#include "tools/ToolUtils.h" static void test_bitmap(skiatest::Reporter* reporter) { SkImageInfo info = SkImageInfo::MakeN32Premul(2, 2); @@ -95,3 +98,51 @@ DEF_TEST(ShaderOpacity, reporter) { test_color(reporter); test_bitmap(reporter); } + +DEF_TEST(image_shader_filtering, reporter) { + auto make_checker_img = [](int w, int h) { + auto info = SkImageInfo::Make(w, h, kRGBA_8888_SkColorType, kOpaque_SkAlphaType); + auto surf = SkSurface::MakeRaster(info); + ToolUtils::draw_checkerboard(surf->getCanvas(), SK_ColorRED, SK_ColorBLUE, 2); + return surf->makeImageSnapshot(); + }; + + auto img = make_checker_img(4, 4); + + const SkFilterQuality quals[] = { + kNone_SkFilterQuality, + kLow_SkFilterQuality, + kMedium_SkFilterQuality, + kHigh_SkFilterQuality, + }; + const SkScalar scales[] = { 3.0f, 1.0f, 0.5f, 0.25f, 0.125f }; + + auto make_img = [&](const SkPaint& paint) { + auto info = SkImageInfo::Make(70, 70, kRGBA_8888_SkColorType, kPremul_SkAlphaType); + auto surf = SkSurface::MakeRaster(info); + auto canvas = surf->getCanvas(); + canvas->scale(1.06f, 1.06f); // nicely exaggerates noise when not filtering + canvas->drawRect({0, 0, 64, 64}, paint); + return surf->makeImageSnapshot(); + }; + + SkPaint paint; + for (auto q : quals) { + for (auto scale : scales) { + SkMatrix m = SkMatrix::Scale(scale, scale); + paint.setFilterQuality(kNone_SkFilterQuality); // this setting should be ignored + paint.setShader(img->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m, q)); + auto img0 = make_img(paint); + + paint.setFilterQuality(q); // this should (still) be ignored + auto img1 = make_img(paint); + + // make legacy form of shader, relying on the paint's filter-quality (q) + paint.setShader(img->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, &m)); + auto img2 = make_img(paint); + + REPORTER_ASSERT(reporter, ToolUtils::equal_pixels(img0.get(), img1.get())); + REPORTER_ASSERT(reporter, ToolUtils::equal_pixels(img0.get(), img2.get())); + } + } +} diff --git a/tests/SkNxTest.cpp b/tests/SkNxTest.cpp index 0f189dfe1ceb9..605e8024baf6b 100644 --- a/tests/SkNxTest.cpp +++ b/tests/SkNxTest.cpp @@ -84,15 +84,24 @@ void test_Ni(skiatest::Reporter* r) { v.store(vals); switch (N) { - case 8: REPORTER_ASSERT(r, vals[4] == e && vals[5] == f && vals[6] == g && vals[7] == h); - case 4: REPORTER_ASSERT(r, vals[2] == c && vals[3] == d); - case 2: REPORTER_ASSERT(r, vals[0] == a && vals[1] == b); + case 8: + REPORTER_ASSERT(r, vals[4] == e && vals[5] == f && vals[6] == g && vals[7] == h); + [[fallthrough]]; + case 4: + REPORTER_ASSERT(r, vals[2] == c && vals[3] == d); + [[fallthrough]]; + case 2: + REPORTER_ASSERT(r, vals[0] == a && vals[1] == b); } switch (N) { - case 8: REPORTER_ASSERT(r, v[4] == e && v[5] == f && - v[6] == g && v[7] == h); - case 4: REPORTER_ASSERT(r, v[2] == c && v[3] == d); - case 2: REPORTER_ASSERT(r, v[0] == a && v[1] == b); + case 8: + REPORTER_ASSERT(r, v[4] == e && v[5] == f && v[6] == g && v[7] == h); + [[fallthrough]]; + case 4: + REPORTER_ASSERT(r, v[2] == c && v[3] == d); + [[fallthrough]]; + case 2: + REPORTER_ASSERT(r, v[0] == a && v[1] == b); } }; diff --git a/tests/SkRemoteGlyphCacheTest.cpp b/tests/SkRemoteGlyphCacheTest.cpp index 69ebf413aae0f..f5ed12ff46ea3 100644 --- a/tests/SkRemoteGlyphCacheTest.cpp +++ b/tests/SkRemoteGlyphCacheTest.cpp @@ -8,6 +8,7 @@ #include "include/core/SkGraphics.h" #include "include/core/SkSurface.h" #include "include/core/SkTextBlob.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkMutex.h" #include "src/core/SkDraw.h" #include "src/core/SkRemoteGlyphCache.h" @@ -16,13 +17,14 @@ #include "src/core/SkStrikeSpec.h" #include "src/core/SkSurfacePriv.h" #include "src/core/SkTypeface_remote.h" +#include "src/gpu/GrContextPriv.h" +#include "src/gpu/GrRecordingContextPriv.h" +#include "src/gpu/text/GrSDFTOptions.h" #include "tests/Test.h" #include "tools/Resources.h" #include "tools/ToolUtils.h" #include "tools/fonts/TestEmptyTypeface.h" -#include "src/gpu/text/GrTextContext.h" - class DiscardableManager : public SkStrikeServer::DiscardableHandleManager, public SkStrikeClient::DiscardableHandleManager { public: @@ -197,6 +199,7 @@ DEF_TEST(SkRemoteGlyphCache_TypefaceSerialization, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_StrikeSerialization, reporter, ctxInfo) { + auto direct = ctxInfo.directContext(); sk_sp discardableManager = sk_make_sp(); SkStrikeServer server(discardableManager.get()); SkStrikeClient client(discardableManager, false); @@ -208,9 +211,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_StrikeSerialization, repor int glyphCount = 10; auto serverBlob = buildTextBlob(serverTf, glyphCount); - auto props = FindSurfaceProps(ctxInfo.grContext()); + auto props = FindSurfaceProps(direct); SkTextBlobCacheDiffCanvas cache_diff_canvas(10, 10, props, &server, - ctxInfo.grContext()->supportsDistanceFieldText()); + direct->supportsDistanceFieldText()); #ifdef SK_CAPTURE_DRAW_TEXT_BLOB { SkDynamicMemoryWStream wStream; @@ -234,8 +237,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_StrikeSerialization, repor client.readStrikeData(serverStrikeData.data(), serverStrikeData.size())); auto clientBlob = buildTextBlob(clientTf, glyphCount); - SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, ctxInfo.grContext()); - SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, ctxInfo.grContext()); + SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, direct); + SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, direct); compare_blobs(expected, actual, reporter); REPORTER_ASSERT(reporter, !discardableManager->hasCacheMiss()); @@ -259,7 +262,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_ReleaseTypeFace, reporter, auto serverBlob = buildTextBlob(serverTf, glyphCount); const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); SkTextBlobCacheDiffCanvas cache_diff_canvas( - 10, 10, props, &server, ctxInfo.grContext()->supportsDistanceFieldText()); + 10, 10, props, &server, ctxInfo.directContext()->supportsDistanceFieldText()); cache_diff_canvas.drawTextBlob(serverBlob.get(), 0, 0, paint); REPORTER_ASSERT(reporter, !serverTf->unique()); @@ -453,6 +456,7 @@ DEF_TEST(SkRemoteGlyphCache_PurgesServerEntries, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsPath, reporter, ctxInfo) { + auto direct = ctxInfo.directContext(); sk_sp discardableManager = sk_make_sp(); SkStrikeServer server(discardableManager.get()); SkStrikeClient client(discardableManager, false); @@ -468,9 +472,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsPath, reporter, int glyphCount = 10; auto serverBlob = buildTextBlob(serverTf, glyphCount); - auto props = FindSurfaceProps(ctxInfo.grContext()); + auto props = FindSurfaceProps(direct); SkTextBlobCacheDiffCanvas cache_diff_canvas( - 10, 10, props, &server, ctxInfo.grContext()->supportsDistanceFieldText()); + 10, 10, props, &server, direct->supportsDistanceFieldText()); cache_diff_canvas.drawTextBlob(serverBlob.get(), 0, 0, paint); std::vector serverStrikeData; @@ -482,8 +486,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsPath, reporter, client.readStrikeData(serverStrikeData.data(), serverStrikeData.size())); auto clientBlob = buildTextBlob(clientTf, glyphCount); - SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, ctxInfo.grContext()); - SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, ctxInfo.grContext()); + SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, direct); + SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, direct); compare_blobs(expected, actual, reporter, 1); REPORTER_ASSERT(reporter, !discardableManager->hasCacheMiss()); @@ -528,6 +532,7 @@ sk_sp make_blob_causing_fallback( DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsMaskWithPathFallback, reporter, ctxInfo) { + auto direct = ctxInfo.directContext(); sk_sp discardableManager = sk_make_sp(); SkStrikeServer server(discardableManager.get()); SkStrikeClient client(discardableManager, false); @@ -543,9 +548,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsMaskWithPathFall auto serverBlob = make_blob_causing_fallback(serverTf, serverTf.get(), reporter); - auto props = FindSurfaceProps(ctxInfo.grContext()); + auto props = FindSurfaceProps(direct); SkTextBlobCacheDiffCanvas cache_diff_canvas( - 10, 10, props, &server, ctxInfo.grContext()->supportsDistanceFieldText()); + 10, 10, props, &server, direct->supportsDistanceFieldText()); cache_diff_canvas.drawTextBlob(serverBlob.get(), 0, 0, paint); std::vector serverStrikeData; @@ -558,8 +563,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsMaskWithPathFall auto clientBlob = make_blob_causing_fallback(clientTf, serverTf.get(), reporter); - SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, ctxInfo.grContext()); - SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, ctxInfo.grContext()); + SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, direct); + SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, direct); compare_blobs(expected, actual, reporter); REPORTER_ASSERT(reporter, !discardableManager->hasCacheMiss()); @@ -643,6 +648,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsSDFTWithAllARGBF #endif DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextXY, reporter, ctxInfo) { + auto direct = ctxInfo.directContext(); sk_sp discardableManager = sk_make_sp(); SkStrikeServer server(discardableManager.get()); SkStrikeClient client(discardableManager, false); @@ -655,9 +661,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextXY, reporter, ctxI int glyphCount = 10; auto serverBlob = buildTextBlob(serverTf, glyphCount); - auto props = FindSurfaceProps(ctxInfo.grContext()); + auto props = FindSurfaceProps(direct); SkTextBlobCacheDiffCanvas cache_diff_canvas( - 10, 10, props, &server, ctxInfo.grContext()->supportsDistanceFieldText()); + 10, 10, props, &server, direct->supportsDistanceFieldText()); cache_diff_canvas.drawTextBlob(serverBlob.get(), 0.5, 0, paint); std::vector serverStrikeData; @@ -669,8 +675,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextXY, reporter, ctxI client.readStrikeData(serverStrikeData.data(), serverStrikeData.size())); auto clientBlob = buildTextBlob(clientTf, glyphCount); - SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, ctxInfo.grContext(), nullptr, 0.5); - SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, ctxInfo.grContext(), nullptr, 0.5); + SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, direct, nullptr, 0.5); + SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, direct, nullptr, 0.5); compare_blobs(expected, actual, reporter); REPORTER_ASSERT(reporter, !discardableManager->hasCacheMiss()); @@ -679,6 +685,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextXY, reporter, ctxI } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsDFT, reporter, ctxInfo) { + auto direct = ctxInfo.directContext(); sk_sp discardableManager = sk_make_sp(); SkStrikeServer server(discardableManager.get()); SkStrikeClient client(discardableManager, false); @@ -688,10 +695,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsDFT, reporter, c // A scale transform forces fallback to dft. SkMatrix matrix = SkMatrix::Scale(16, 16); SkSurfaceProps surfaceProps(0, kUnknown_SkPixelGeometry); - GrTextContext::Options options; - GrTextContext::SanitizeOptions(&options); - REPORTER_ASSERT(reporter, GrTextContext::CanDrawAsDistanceFields( - paint, font, matrix, surfaceProps, true, options)); + GrSDFTOptions options = direct->priv().asRecordingContext()->priv().SDFTOptions(); + REPORTER_ASSERT(reporter, + options.canDrawAsDistanceFields(paint, font, matrix, surfaceProps, true)); // Server. auto serverTf = SkTypeface::MakeFromName("monospace", SkFontStyle()); @@ -701,7 +707,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsDFT, reporter, c auto serverBlob = buildTextBlob(serverTf, glyphCount); const SkSurfaceProps props(SkSurfaceProps::kLegacyFontHost_InitType); SkTextBlobCacheDiffCanvas cache_diff_canvas( - 10, 10, props, &server, ctxInfo.grContext()->supportsDistanceFieldText()); + 10, 10, props, &server, direct->supportsDistanceFieldText()); cache_diff_canvas.concat(matrix); cache_diff_canvas.drawTextBlob(serverBlob.get(), 0, 0, paint); @@ -714,8 +720,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_DrawTextAsDFT, reporter, c client.readStrikeData(serverStrikeData.data(), serverStrikeData.size())); auto clientBlob = buildTextBlob(clientTf, glyphCount); - SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, ctxInfo.grContext(), &matrix); - SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, ctxInfo.grContext(), &matrix); + SkBitmap expected = RasterBlob(serverBlob, 10, 10, paint, direct, &matrix); + SkBitmap actual = RasterBlob(clientBlob, 10, 10, paint, direct, &matrix); compare_blobs(expected, actual, reporter); REPORTER_ASSERT(reporter, !discardableManager->hasCacheMiss()); @@ -738,7 +744,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_CacheMissReporting, report // Raster the client-side blob without the glyph data, we should get cache miss notifications. SkPaint paint; SkMatrix matrix = SkMatrix::I(); - RasterBlob(clientBlob, 10, 10, paint, ctxInfo.grContext(), &matrix); + RasterBlob(clientBlob, 10, 10, paint, ctxInfo.directContext(), &matrix); REPORTER_ASSERT(reporter, discardableManager->cacheMissCount(SkStrikeClient::kFontMetrics) == 1); REPORTER_ASSERT(reporter, @@ -779,6 +785,7 @@ sk_sp MakeEmojiBlob(sk_sp serverTf, SkScalar textSize, } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_TypefaceWithNoPaths, reporter, ctxInfo) { + auto direct = ctxInfo.directContext(); sk_sp discardableManager = sk_make_sp(); SkStrikeServer server(discardableManager.get()); SkStrikeClient client(discardableManager, false); @@ -789,9 +796,9 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_TypefaceWithNoPaths, repor for (SkScalar textSize : { 70, 180, 270, 340}) { auto serverBlob = MakeEmojiBlob(serverTf, textSize); - auto props = FindSurfaceProps(ctxInfo.grContext()); + auto props = FindSurfaceProps(direct); SkTextBlobCacheDiffCanvas cache_diff_canvas( - 500, 500, props, &server, ctxInfo.grContext()->supportsDistanceFieldText()); + 500, 500, props, &server, direct->supportsDistanceFieldText()); SkPaint paint; cache_diff_canvas.drawTextBlob(serverBlob.get(), 100, 100, paint); @@ -805,7 +812,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRemoteGlyphCache_TypefaceWithNoPaths, repor auto clientBlob = MakeEmojiBlob(serverTf, textSize, clientTf); REPORTER_ASSERT(reporter, clientBlob); - RasterBlob(clientBlob, 500, 500, paint, ctxInfo.grContext()); + RasterBlob(clientBlob, 500, 500, paint, direct); REPORTER_ASSERT(reporter, !discardableManager->hasCacheMiss()); discardableManager->resetCacheMissCounts(); } diff --git a/tests/SkRuntimeEffectTest.cpp b/tests/SkRuntimeEffectTest.cpp index 082a98aa07c8e..6d1000ca29358 100644 --- a/tests/SkRuntimeEffectTest.cpp +++ b/tests/SkRuntimeEffectTest.cpp @@ -9,7 +9,7 @@ #include "include/core/SkPaint.h" #include "include/core/SkSurface.h" #include "include/effects/SkRuntimeEffect.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkTLazy.h" #include "tests/Test.h" @@ -76,7 +76,7 @@ class TestEffect { } void test(skiatest::Reporter* r, sk_sp surface, - uint32_t TL, uint32_t TR, uint32_t BL, uint32_t BR) { + uint32_t TL, uint32_t TR, uint32_t BL, uint32_t BR, SkScalar rotate = 0.0f) { auto shader = fBuilder->makeShader(nullptr, false); if (!shader) { REPORT_FAILURE(r, "shader", SkString("Effect didn't produce a shader")); @@ -86,6 +86,7 @@ class TestEffect { SkPaint paint; paint.setShader(std::move(shader)); paint.setBlendMode(SkBlendMode::kSrc); + surface->getCanvas()->rotate(rotate); surface->getCanvas()->drawPaint(paint); uint32_t actual[4]; @@ -153,11 +154,8 @@ static void test_RuntimeEffect_Shaders(skiatest::Reporter* r, GrContext* context // Test sk_FragCoord, which we output to color. Since the surface is 2x2, we should see // (0,0), (1,0), (0,1), (1,1), multiply by 0.498 to make sure we're not saturating unexpectedly. - // TODO: Remove this when sk_FragCoord is supported by interpreter. - if (context) { - TestEffect fragCoord(r, "", "color = half4(0.498 * (half2(sk_FragCoord.xy) - 0.5), 0, 1);"); - fragCoord.test(r, surface, 0xFF000000, 0xFF00007F, 0xFF007F00, 0xFF007F7F); - } + TestEffect fragCoord(r, "", "color = half4(0.498 * (half2(sk_FragCoord.xy) - 0.5), 0, 1);"); + fragCoord.test(r, surface, 0xFF000000, 0xFF00007F, 0xFF007F00, 0xFF007F7F, 45.0f); } DEF_TEST(SkRuntimeEffectSimple, r) { @@ -165,5 +163,5 @@ DEF_TEST(SkRuntimeEffectSimple, r) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SkRuntimeEffectSimple_GPU, r, ctxInfo) { - test_RuntimeEffect_Shaders(r, ctxInfo.grContext()); + test_RuntimeEffect_Shaders(r, ctxInfo.directContext()); } diff --git a/tests/SkSLErrorTest.cpp b/tests/SkSLErrorTest.cpp index 73e364a2bcd25..c0af2e6d6e64f 100644 --- a/tests/SkSLErrorTest.cpp +++ b/tests/SkSLErrorTest.cpp @@ -37,6 +37,15 @@ static void test_success(skiatest::Reporter* r, const char* src) { REPORTER_ASSERT(r, program); } +DEF_TEST(SkSLConstVariableComparison, r) { + test_success(r, + "void main() {" + " const float4 a = float4(0);" + " const float4 b = float4(1);" + " if (a == b) { discard; }" + "}"); +} + DEF_TEST(SkSLOpenArray, r) { test_failure(r, "void main(inout float4 color) { color.r[ = ( color.g ); }", diff --git a/tests/SkSLFPTest.cpp b/tests/SkSLFPTest.cpp index 1baa8870e711c..6bf42d8c0cac2 100644 --- a/tests/SkSLFPTest.cpp +++ b/tests/SkSLFPTest.cpp @@ -10,7 +10,7 @@ #include "tests/Test.h" -static void test(skiatest::Reporter* r, const char* src, const GrShaderCaps& caps, +static void test(skiatest::Reporter* r, const GrShaderCaps& caps, const char* src, std::vector expectedH, std::vector expectedCPP) { SkSL::Program::Settings settings; settings.fCaps = ∩︀ @@ -35,8 +35,10 @@ static void test(skiatest::Reporter* r, const char* src, const GrShaderCaps& cap for (const char* expected : expectedH) { bool found = strstr(output.str().c_str(), expected); if (!found) { - SkDebugf("HEADER MISMATCH:\nsource:\n%s\n\nexpected:\n'%s'\n\nreceived:\n'%s'", src, - expected, output.str().c_str()); + SkDebugf("HEADER MISMATCH:\nsource:\n%s\n\n" + "header expected:\n'%s'\n\n" + "header received:\n'%s'", + src, expected, output.str().c_str()); } REPORTER_ASSERT(r, found); } @@ -51,8 +53,10 @@ static void test(skiatest::Reporter* r, const char* src, const GrShaderCaps& cap for (const char* expected : expectedCPP) { bool found = strstr(output.str().c_str(), expected); if (!found) { - SkDebugf("CPP MISMATCH:\nsource:\n%s\n\nexpected:\n'%s'\n\nreceived:\n'%s'", src, - expected, output.str().c_str()); + SkDebugf("CPP MISMATCH:\nsource:\n%s\n\n" + "cpp expected:\n'%s'\n\n" + "cpp received:\n'%s'", + src, expected, output.str().c_str()); } REPORTER_ASSERT(r, found); } @@ -73,130 +77,145 @@ static void test_failure(skiatest::Reporter* r, const char* src, const char* err } SkSL::String skError(error); if (compiler.errorText() != skError) { - SkDebugf("SKSL ERROR:\n source: %s\n expected: %s received: %s", src, error, - compiler.errorText().c_str()); + SkDebugf("SKSL ERROR:\n source: %s\n expected: %s received: %s", + src, error, compiler.errorText().c_str()); } REPORTER_ASSERT(r, compiler.errorText() == skError); } DEF_TEST(SkSLFPHelloWorld, r) { test(r, - "/* HEADER */" - "void main() {" - "sk_OutColor = half4(1);" - "}", - *SkSL::ShaderCapsFactory::Default(), - { - "/* HEADER */\n" - "\n" - "/**************************************************************************************************\n" - " *** This file was autogenerated from GrTest.fp; do not modify.\n" - " **************************************************************************************************/\n" - "#ifndef GrTest_DEFINED\n" - "#define GrTest_DEFINED\n" - "#include \"include/core/SkTypes.h\"\n" - "#include \"include/core/SkM44.h\"\n\n" - "#include \"src/gpu/GrCoordTransform.h\"\n" - "#include \"src/gpu/GrFragmentProcessor.h\"\n" - "class GrTest : public GrFragmentProcessor {\n" - "public:\n" - " static std::unique_ptr Make() {\n" - " return std::unique_ptr(new GrTest());\n" - " }\n" - " GrTest(const GrTest& src);\n" - " std::unique_ptr clone() const override;\n" - " const char* name() const override { return \"Test\"; }\n" - "private:\n" - " GrTest()\n" - " : INHERITED(kGrTest_ClassID, kNone_OptimizationFlags) {\n" - " }\n" - " GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;\n" - " void onGetGLSLProcessorKey(const GrShaderCaps&,GrProcessorKeyBuilder*) const " - "override;\n" - " bool onIsEqual(const GrFragmentProcessor&) const override;\n" - " GR_DECLARE_FRAGMENT_PROCESSOR_TEST\n" - " typedef GrFragmentProcessor INHERITED;\n" - "};\n" - "#endif\n" + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + /* HELLO WORLD */ + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{ +R"__Header__(/* HELLO WORLD */ + +/************************************************************************************************** + *** This file was autogenerated from GrTest.fp; do not modify. + **************************************************************************************************/ +#ifndef GrTest_DEFINED +#define GrTest_DEFINED + +#include "include/core/SkM44.h" +#include "include/core/SkTypes.h" + + +#include "src/gpu/GrFragmentProcessor.h" + +class GrTest : public GrFragmentProcessor { +public: + static std::unique_ptr Make() { + return std::unique_ptr(new GrTest()); + } + GrTest(const GrTest& src); + std::unique_ptr clone() const override; + const char* name() const override { return "Test"; } +private: + GrTest() + : INHERITED(kGrTest_ClassID, kNone_OptimizationFlags) { + } + GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; + void onGetGLSLProcessorKey(const GrShaderCaps&,GrProcessorKeyBuilder*) const override; + bool onIsEqual(const GrFragmentProcessor&) const override; + GR_DECLARE_FRAGMENT_PROCESSOR_TEST + typedef GrFragmentProcessor INHERITED; +}; +#endif +)__Header__" }, - { - "/**************************************************************************************************\n" - " *** This file was autogenerated from GrTest.fp; do not modify.\n" - " **************************************************************************************************/\n" - "#include \"GrTest.h\"\n\n" - "#include \"src/gpu/GrTexture.h\"\n" - "#include \"src/gpu/glsl/GrGLSLFragmentProcessor.h\"\n" - "#include \"src/gpu/glsl/GrGLSLFragmentShaderBuilder.h\"\n" - "#include \"src/gpu/glsl/GrGLSLProgramBuilder.h\"\n" - "#include \"src/sksl/SkSLCPP.h\"\n" - "#include \"src/sksl/SkSLUtil.h\"\n" - "class GrGLSLTest : public GrGLSLFragmentProcessor {\n" - "public:\n" - " GrGLSLTest() {}\n" - " void emitCode(EmitArgs& args) override {\n" - " GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;\n" - " const GrTest& _outer = args.fFp.cast();\n" - " (void) _outer;\n" - " fragBuilder->codeAppendf(\"%s = half4(1.0);\\n\", args.fOutputColor);\n" - " }\n" - "private:\n" - " void onSetData(const GrGLSLProgramDataManager& pdman, " - "const GrFragmentProcessor& _proc) override {\n" - " }\n" - "};\n" - "GrGLSLFragmentProcessor* GrTest::onCreateGLSLInstance() const {\n" - " return new GrGLSLTest();\n" - "}\n" - "void GrTest::onGetGLSLProcessorKey(const GrShaderCaps& caps, " - "GrProcessorKeyBuilder* b) const {\n" - "}\n" - "bool GrTest::onIsEqual(const GrFragmentProcessor& other) const {\n" - " const GrTest& that = other.cast();\n" - " (void) that;\n" - " return true;\n" - "}\n" - "GrTest::GrTest(const GrTest& src)\n" - ": INHERITED(kGrTest_ClassID, src.optimizationFlags()) {\n" - "}\n" - "std::unique_ptr GrTest::clone() const {\n" - " return std::unique_ptr(new GrTest(*this));\n" - "}\n" + /*expectedCPP=*/{ +R"__Cpp__(/* HELLO WORLD */ + +/************************************************************************************************** + *** This file was autogenerated from GrTest.fp; do not modify. + **************************************************************************************************/ +#include "GrTest.h" + +#include "src/gpu/GrTexture.h" +#include "src/gpu/glsl/GrGLSLFragmentProcessor.h" +#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" +#include "src/gpu/glsl/GrGLSLProgramBuilder.h" +#include "src/sksl/SkSLCPP.h" +#include "src/sksl/SkSLUtil.h" +class GrGLSLTest : public GrGLSLFragmentProcessor { +public: + GrGLSLTest() {} + void emitCode(EmitArgs& args) override { + GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; + const GrTest& _outer = args.fFp.cast(); + (void) _outer; + fragBuilder->codeAppendf( +R"SkSL(%s = half4(1.0); +)SkSL" +, args.fOutputColor); + } +private: + void onSetData(const GrGLSLProgramDataManager& pdman, const GrFragmentProcessor& _proc) override { + } +}; +GrGLSLFragmentProcessor* GrTest::onCreateGLSLInstance() const { + return new GrGLSLTest(); +} +void GrTest::onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const { +} +bool GrTest::onIsEqual(const GrFragmentProcessor& other) const { + const GrTest& that = other.cast(); + (void) that; + return true; +} +GrTest::GrTest(const GrTest& src) +: INHERITED(kGrTest_ClassID, src.optimizationFlags()) { +} +std::unique_ptr GrTest::clone() const { + return std::unique_ptr(new GrTest(*this)); +} +)__Cpp__" }); } DEF_TEST(SkSLFPInput, r) { test(r, - "layout(key) in half2 point;" - "void main() {" - "sk_OutColor = half4(point, point);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + layout(key) in half2 point; + void main() { + sk_OutColor = half4(point, point); + } + )__SkSL__", + /*expectedH=*/{ "static std::unique_ptr Make(SkPoint point) {", "return std::unique_ptr(new GrTest(point));", "GrTest(SkPoint point)", ", point(point)" }, - { - "fragBuilder->codeAppendf(\"%s = half4(half2(%f, %f), half2(%f, %f));\\n\", " - "args.fOutputColor, _outer.point.fX, _outer.point.fY, " - "_outer.point.fX, _outer.point.fY);", + /*expectedCPP=*/{ + "fragBuilder->codeAppendf(\n" + "R\"SkSL(%s = half4(half2(%f, %f), half2(%f, %f));\n" + ")SkSL\"\n" + ", args.fOutputColor, _outer.point.fX, _outer.point.fY, _outer.point.fX, _outer.point.fY);", "if (point != that.point) return false;" }); } DEF_TEST(SkSLFPUniform, r) { test(r, - "uniform half4 color;" - "void main() {" - "sk_OutColor = color;" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + uniform half4 color; + void main() { + sk_OutColor = color; + } + )__SkSL__", + /*expectedH=*/{ "static std::unique_ptr Make()" }, - { - "colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, " + /*expectedCPP=*/{ + "colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, " "kHalf4_GrSLType, \"color\");", }); } @@ -206,15 +225,17 @@ DEF_TEST(SkSLFPUniform, r) { // local variable. DEF_TEST(SkSLFPInUniform, r) { test(r, - "in uniform half4 color;" - "void main() {" - "sk_OutColor = color;" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + in uniform half4 color; + void main() { + sk_OutColor = color; + } + )__SkSL__", + /*expectedH=*/{ "static std::unique_ptr Make(SkRect color) {", }, - { + /*expectedCPP=*/{ "colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, " "kHalf4_GrSLType, \"color\");", "pdman.set4fv(colorVar, 1, reinterpret_cast(&(_outer.color)));" @@ -224,15 +245,17 @@ DEF_TEST(SkSLFPInUniform, r) { // As above, but tests in uniform's ability to override the default ctype. DEF_TEST(SkSLFPInUniformCType, r) { test(r, - "layout(ctype=SkPMColor4f) in uniform half4 color;" - "void main() {" - "sk_OutColor = color;" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + layout(ctype=SkPMColor4f) in uniform half4 color; + void main() { + sk_OutColor = color; + } + )__SkSL__", + /*expectedH=*/{ "static std::unique_ptr Make(SkPMColor4f color) {", }, - { + /*expectedCPP=*/{ "colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, " "kHalf4_GrSLType, \"color\");", "pdman.set4fv(colorVar, 1, (_outer.color).vec());" @@ -244,15 +267,17 @@ DEF_TEST(SkSLFPInUniformCType, r) { // setUniform call is removed in favor of a local variable. DEF_TEST(SkSLFPTrackedInUniform, r) { test(r, - "layout(tracked) in uniform half4 color;" - "void main() {" - "sk_OutColor = color;" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + layout(tracked) in uniform half4 color; + void main() { + sk_OutColor = color; + } + )__SkSL__", + /*expectedH=*/{ "static std::unique_ptr Make(SkRect color) {", }, - { + /*expectedCPP=*/{ "SkRect colorPrev = SkRect::MakeEmpty();", "colorVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, " "kHalf4_GrSLType, \"color\");", @@ -267,15 +292,17 @@ DEF_TEST(SkSLFPTrackedInUniform, r) { // setUniform (i.e. it references the value multiple times). DEF_TEST(SkSLFPNonInlinedInUniform, r) { test(r, - "in uniform half2 point;" - "void main() {" - "sk_OutColor = half4(point, point);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + in uniform half2 point; + void main() { + sk_OutColor = half4(point, point); + } + )__SkSL__", + /*expectedH=*/{ "static std::unique_ptr Make(SkPoint point) {", }, - { + /*expectedCPP=*/{ "pointVar = args.fUniformHandler->addUniform(&_outer, kFragment_GrShaderFlag, " "kHalf2_GrSLType, \"point\");", "const SkPoint& pointValue = _outer.point;", @@ -287,20 +314,22 @@ DEF_TEST(SkSLFPNonInlinedInUniform, r) { // state tracking and custom ctypes to really put the code generation through its paces. DEF_TEST(SkSLFPConditionalInUniform, r) { test(r, - "layout(key) in bool test;" - "layout(ctype=SkPMColor4f, tracked, when=test) in uniform half4 color;" - "void main() {" - " if (test) {" - " sk_OutColor = color;" - " } else {" - " sk_OutColor = half4(1);" - " }" - "}", - *SkSL::ShaderCapsFactory::Default(), - { + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + layout(key) in bool test; + layout(ctype=SkPMColor4f, tracked, when=test) in uniform half4 color; + void main() { + if (test) { + sk_OutColor = color; + } else { + sk_OutColor = half4(1); + } + } + )__SkSL__", + /*expectedH=*/{ "static std::unique_ptr Make(bool test, SkPMColor4f color) {", }, - { + /*expectedCPP=*/{ "SkPMColor4f colorPrev = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN}", "auto test = _outer.test;", "if (test) {", @@ -316,114 +345,136 @@ DEF_TEST(SkSLFPConditionalInUniform, r) { DEF_TEST(SkSLFPSections, r) { test(r, - "@header { header section }" - "void main() {" - "sk_OutColor = half4(1);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + @header { header section } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{ "header section" }, - {}); + /*expectedCPP=*/{}); test(r, - "@class { class section }" - "void main() {" - "sk_OutColor = half4(1);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + @class { class section } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{ "class GrTest : public GrFragmentProcessor {\n" "public:\n" " class section" }, - {}); - test(r, - "@cpp { cpp section }" - "void main() {" - "sk_OutColor = half4(1);" - "}", - *SkSL::ShaderCapsFactory::Default(), - {}, - {"cpp section"}); + /*expectedCPP=*/{}); + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + @cpp { cpp section } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{}, + /*expectedCPP=*/{ + "cpp section" + }); test(r, - "@constructorParams { int x, float y, std::vector z }" - "in float w;" - "void main() {" - "sk_OutColor = half4(1);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + @constructorParams { int x, float y, std::vector z } + in float w; + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{ "Make(float w, int x, float y, std::vector z )", "return std::unique_ptr(new GrTest(w, x, y, z));", "GrTest(float w, int x, float y, std::vector z )", ", w(w) {" }, - {}); + /*expectedCPP=*/{}); test(r, - "@constructor { constructor section }" - "void main() {" - "sk_OutColor = half4(1);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + @constructor { constructor section } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{ "private:\n constructor section" }, - {}); + /*expectedCPP=*/{}); test(r, - "@initializers { initializers section }" - "void main() {" - "sk_OutColor = half4(1);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + @initializers { initializers section } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{ ": INHERITED(kGrTest_ClassID, kNone_OptimizationFlags)\n , initializers section" }, - {}); - test(r, - "half x = 10;" - "@emitCode { fragBuilder->codeAppendf(\"half y = %d\\n\", x * 2); }" - "void main() {" - "sk_OutColor = half4(1);" - "}", - *SkSL::ShaderCapsFactory::Default(), - {}, - { + /*expectedCPP=*/{}); + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + half x = 10; + @emitCode { fragBuilder->codeAppendf("half y = %d\n", x * 2); } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{}, + /*expectedCPP=*/{ "x = 10.0;\n" " fragBuilder->codeAppendf(\"half y = %d\\n\", x * 2);" }); test(r, - "@fields { fields section }" - "@clone { }" - "void main() {" - "sk_OutColor = half4(1);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + @fields { fields section } + @clone { } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{ "const char* name() const override { return \"Test\"; }\n" " fields section private:" }, - {}); + /*expectedCPP=*/{}); test(r, - "@make { make section }" - "void main() {" - "sk_OutColor = half4(1);" - "}", *SkSL::ShaderCapsFactory::Default(), - { + R"__SkSL__( + @make { make section } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{ "public:\n" " make section" }, - {}); - test(r, - "uniform half calculated;" - "layout(key) in half provided;" - "@setData(varName) { varName.set1f(calculated, provided * 2); }" - "void main() {" - "sk_OutColor = half4(1);" - "}", - *SkSL::ShaderCapsFactory::Default(), - {}, - { + /*expectedCPP=*/{}); + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + uniform half calculated; + layout(key) in half provided; + @setData(varName) { varName.set1f(calculated, provided * 2); } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{}, + /*expectedCPP=*/{ "void onSetData(const GrGLSLProgramDataManager& varName, " "const GrFragmentProcessor& _proc) override {\n", "UniformHandle& calculated = calculatedVar;", @@ -431,13 +482,15 @@ DEF_TEST(SkSLFPSections, r) { "varName.set1f(calculated, provided * 2);" }); test(r, - "@test(testDataName) { testDataName section }" - "void main() {" - "sk_OutColor = half4(1);" - "}", *SkSL::ShaderCapsFactory::Default(), - {}, - { + R"__SkSL__( + @test(testDataName) { testDataName section } + void main() { + sk_OutColor = half4(1); + } + )__SkSL__", + /*expectedH=*/{}, + /*expectedCPP=*/{ "#if GR_TEST_UTILS\n" "std::unique_ptr GrTest::TestCreate(GrProcessorTestData* testDataName) {\n" " testDataName section }\n" @@ -445,359 +498,513 @@ DEF_TEST(SkSLFPSections, r) { }); } -DEF_TEST(SkSLFPTransformedCoords, r) { +DEF_TEST(SkSLFPMainCoords, r) { test(r, - "void main() {" - "sk_OutColor = half4(sk_TransformedCoords2D[0], sk_TransformedCoords2D[0]);" - "}", *SkSL::ShaderCapsFactory::Default(), - {}, - { - "SkString sk_TransformedCoords2D_0 = " - "fragBuilder->ensureCoords2D(args.fTransformedCoords[0].fVaryingPoint, " - "_outer.sampleMatrix());", - "fragBuilder->codeAppendf(\"%s = half4(%s, %s);\\n\", args.fOutputColor, " - "sk_TransformedCoords2D_0.c_str(), sk_TransformedCoords2D_0.c_str());" + R"__SkSL__( + void main(float2 coord) { + sk_OutColor = half4(coord, coord); + } + )__SkSL__", + /*expectedH=*/{ + "this->setUsesSampleCoordsDirectly();" + }, + /*expectedCPP=*/{ + "fragBuilder->codeAppendf(\n" + "R\"SkSL(%s = half4(%s, %s);\n" + ")SkSL\"\n" + ", args.fOutputColor, args.fSampleCoord, args.fSampleCoord);" }); } DEF_TEST(SkSLFPLayoutWhen, r) { test(r, - "layout(when=someExpression(someOtherExpression())) uniform half sometimes;" - "void main() {" - "}", *SkSL::ShaderCapsFactory::Default(), - {}, - { + R"__SkSL__( + layout(when=someExpression(someOtherExpression())) uniform half sometimes; + void main() { + } + )__SkSL__", + /*expectedH=*/{}, + /*expectedCPP=*/{ "if (someExpression(someOtherExpression())) {\n" " sometimesVar = args.fUniformHandler->addUniform" }); - } DEF_TEST(SkSLFPChildProcessors, r) { test(r, - "in fragmentProcessor child1;" - "in fragmentProcessor child2;" - "void main() {" - " sk_OutColor = sample(child1) * sample(child2);" - "}", *SkSL::ShaderCapsFactory::Default(), - { - "this->registerChildProcessor(std::move(child1));", - "this->registerChildProcessor(std::move(child2));" + R"__SkSL__( + in fragmentProcessor child1; + in fragmentProcessor child2; + void main() { + sk_OutColor = sample(child1) * sample(child2); + } + )__SkSL__", + /*expectedH=*/{ + "child1_index = this->registerChild(std::move(child1), SkSL::SampleUsage::PassThrough());", + "child2_index = this->registerChild(std::move(child2), SkSL::SampleUsage::PassThrough());" }, - { - "SkString _sample93;\n", - "_sample93 = this->invokeChild(_outer.child1_index, args);\n", - "SkString _sample110;\n", - "_sample110 = this->invokeChild(_outer.child2_index, args);\n", - "fragBuilder->codeAppendf(\"%s = %s * %s;\\n\", args.fOutputColor, _sample93.c_str(), " - "_sample110.c_str());\n", - "{", - " auto clone = src.childProcessor(child1_index).clone();", - " if (src.childProcessor(child1_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", - "{", - " auto clone = src.childProcessor(child2_index).clone();", - " if (src.childProcessor(child2_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", + /*expectedCPP=*/{ + "SkString _sample149;\n", + "_sample149 = this->invokeChild(_outer.child1_index, args);\n", + "SkString _sample166;\n", + "_sample166 = this->invokeChild(_outer.child2_index, args);\n", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(%s = %s * %s;\n" + ")SkSL\"\n" + ", args.fOutputColor, _sample149.c_str(), _sample166.c_str());", + "child1_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child1_index));", + "child2_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child2_index));", }); } DEF_TEST(SkSLFPChildProcessorsWithInput, r) { test(r, - "in fragmentProcessor child1;" - "in fragmentProcessor child2;" - "void main() {" - " half4 childIn = sk_InColor;" - " half4 childOut1 = sample(child1, childIn);" - " half4 childOut2 = sample(child2, childOut1);" - " sk_OutColor = childOut2;" - "}", - *SkSL::ShaderCapsFactory::Default(), - { - "this->registerChildProcessor(std::move(child1));", - "this->registerChildProcessor(std::move(child2));" + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor child1; + in fragmentProcessor child2; + void main() { + half4 childIn = sk_InColor; + half4 childOut1 = sample(child1, childIn); + half4 childOut2 = sample(child2, childOut1); + sk_OutColor = childOut2; + } + )__SkSL__", + /*expectedH=*/{ + "child1_index = this->registerChild(std::move(child1), SkSL::SampleUsage::PassThrough());", + "child2_index = this->registerChild(std::move(child2), SkSL::SampleUsage::PassThrough());" }, - { - "SkString _input128(\"childIn\");", - "SkString _sample128;", - "_sample128 = this->invokeChild(_outer.child1_index, _input128.c_str(), args);", - "fragBuilder->codeAppendf(\"\\nhalf4 childOut1 = %s;\", _sample128.c_str());", - "SkString _input174(\"childOut1\");", - "SkString _sample174;", - "_sample174 = this->invokeChild(_outer.child2_index, _input174.c_str(), args);", - "{", - " auto clone = src.childProcessor(child1_index).clone();", - " if (src.childProcessor(child1_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", - "{", - " auto clone = src.childProcessor(child2_index).clone();", - " if (src.childProcessor(child2_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}" + /*expectedCPP=*/{ + "SkString _input198(\"childIn\");", + "SkString _sample198;", + "_sample198 = this->invokeChild(_outer.child1_index, _input198.c_str(), args);", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(\n" + "half4 childOut1 = %s;)SkSL\"\n" + ", _sample198.c_str());", + "SkString _input258(\"childOut1\");", + "SkString _sample258;", + "_sample258 = this->invokeChild(_outer.child2_index, _input258.c_str(), args);", + "child1_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child1_index));", + "child2_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child2_index));", }); } DEF_TEST(SkSLFPChildProcessorWithInputExpression, r) { test(r, - "in fragmentProcessor child;" - "void main() {" - " sk_OutColor = sample(child, sk_InColor * half4(0.5));" - "}", *SkSL::ShaderCapsFactory::Default(), - { - "this->registerChildProcessor(std::move(child));", + R"__SkSL__( + in fragmentProcessor child; + void main() { + sk_OutColor = sample(child, sk_InColor * half4(0.5)); + } + )__SkSL__", + /*expectedH=*/{ + "child_index = this->registerChild(std::move(child), SkSL::SampleUsage::PassThrough());", }, - { - "SkString _input64 = SkStringPrintf(\"%s * half4(0.5)\", args.fInputColor);", - "SkString _sample64;", - "_sample64 = this->invokeChild(_outer.child_index, _input64.c_str(), args);", - "fragBuilder->codeAppendf(\"%s = %s;\\n\", args.fOutputColor, _sample64.c_str());", - "{", - " auto clone = src.childProcessor(child_index).clone();", - " if (src.childProcessor(child_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", + /*expectedCPP=*/{ + "SkString _input106 = SkStringPrintf(\"%s * half4(0.5)\", args.fInputColor);", + "SkString _sample106;", + "_sample106 = this->invokeChild(_outer.child_index, _input106.c_str(), args);", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(%s = %s;\n" + ")SkSL\"\n" + ", args.fOutputColor, _sample106.c_str());", + "child_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child_index));", }); } DEF_TEST(SkSLFPNestedChildProcessors, r) { test(r, - "in fragmentProcessor child1;" - "in fragmentProcessor child2;" - "void main() {" - " sk_OutColor = sample(child2, sk_InColor * sample(child1, sk_InColor * half4(0.5)));" - "}", *SkSL::ShaderCapsFactory::Default(), - { - "this->registerChildProcessor(std::move(child1));", - "this->registerChildProcessor(std::move(child2));" + R"__SkSL__( + in fragmentProcessor child1; + in fragmentProcessor child2; + void main() { + sk_OutColor = sample(child2, sk_InColor * sample(child1, sk_InColor * half4(0.5))); + } + )__SkSL__", + /*expectedH=*/{ + "child1_index = this->registerChild(std::move(child1), SkSL::SampleUsage::PassThrough());", + "child2_index = this->registerChild(std::move(child2), SkSL::SampleUsage::PassThrough());" }, - { - "SkString _input121 = SkStringPrintf(\"%s * half4(0.5)\", args.fInputColor);", - "SkString _sample121;", - "_sample121 = this->invokeChild(_outer.child1_index, _input121.c_str(), args);", - "SkString _input93 = SkStringPrintf(\"%s * %s\", args.fInputColor, _sample121.c_str());", - "SkString _sample93;", - "_sample93 = this->invokeChild(_outer.child2_index, _input93.c_str(), args);", - "fragBuilder->codeAppendf(\"%s = %s;\\n\", args.fOutputColor, _sample93.c_str());", - "{", - " auto clone = src.childProcessor(child1_index).clone();", - " if (src.childProcessor(child1_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", - "{", - " auto clone = src.childProcessor(child2_index).clone();", - " if (src.childProcessor(child2_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", + /*expectedCPP=*/{ + "SkString _input177 = SkStringPrintf(\"%s * half4(0.5)\", args.fInputColor);", + "SkString _sample177;", + "_sample177 = this->invokeChild(_outer.child1_index, _input177.c_str(), args);", + "SkString _input149 = SkStringPrintf(\"%s * %s\", args.fInputColor, _sample177.c_str());", + "SkString _sample149;", + "_sample149 = this->invokeChild(_outer.child2_index, _input149.c_str(), args);", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(%s = %s;\n" + ")SkSL\"\n" + ", args.fOutputColor, _sample149.c_str());", + "child1_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child1_index));", + "child2_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child2_index));", }); } DEF_TEST(SkSLFPChildFPAndGlobal, r) { test(r, - "in fragmentProcessor child;" - "bool hasCap = sk_Caps.externalTextureSupport;" - "void main() {" - " if (hasCap) {" - " sk_OutColor = sample(child, sk_InColor);" - " } else {" - " sk_OutColor = half4(1);" - " }" - "}", - *SkSL::ShaderCapsFactory::Default(), - { - "this->registerChildProcessor(std::move(child));" + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor child; + bool hasCap = sk_Caps.externalTextureSupport; + void main() { + if (hasCap) { + sk_OutColor = sample(child, sk_InColor); + } else { + sk_OutColor = half4(1); + } + } + )__SkSL__", + /*expectedH=*/{ + "child_index = this->registerChild(std::move(child), SkSL::SampleUsage::PassThrough());" }, - { + /*expectedCPP=*/{ "hasCap = sk_Caps.externalTextureSupport;", - "fragBuilder->codeAppendf(\"bool hasCap = %s;\\nif (hasCap) {\", (hasCap ? \"true\" : " - "\"false\"));", - "SkString _input130 = SkStringPrintf(\"%s\", args.fInputColor);", - "SkString _sample130;", - "_sample130 = this->invokeChild(_outer.child_index, _input130.c_str(), args);", - "fragBuilder->codeAppendf(\"\\n %s = %s;\\n} else {\\n %s = half4(1.0);\\n}\\n\"," - " args.fOutputColor, _sample130.c_str(), args.fOutputColor);", - "{", - " auto clone = src.childProcessor(child_index).clone();", - " if (src.childProcessor(child_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", - }); + + "fragBuilder->codeAppendf(\n" + "R\"SkSL(bool hasCap = %s;\n" + "if (hasCap) {)SkSL\"\n" + ", (hasCap ? \"true\" : \"false\"));", + "SkString _input200(args.fInputColor);", + "SkString _sample200;", + "_sample200 = this->invokeChild(_outer.child_index, _input200.c_str(), args);", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(\n" + " %s = %s;\n" + "} else {\n" + " %s = half4(1.0);\n" + "}\n" + ")SkSL\"\n" + ", args.fOutputColor, _sample200.c_str(), args.fOutputColor);", + "child_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child_index));", + }); } DEF_TEST(SkSLFPChildProcessorInlineFieldAccess, r) { test(r, - "in fragmentProcessor child;" - "void main() {" - " if (child.preservesOpaqueInput) {" - " sk_OutColor = sample(child, sk_InColor);" - " } else {" - " sk_OutColor = half4(1);" - " }" - "}", - *SkSL::ShaderCapsFactory::Default(), - { - "this->registerChildProcessor(std::move(child));" + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor child; + void main() { + if (child.preservesOpaqueInput) { + sk_OutColor = sample(child, sk_InColor); + } else { + sk_OutColor = half4(1); + } + } + )__SkSL__", + /*expectedH=*/{ + "child_index = this->registerChild(std::move(child), SkSL::SampleUsage::PassThrough());" }, - { - "fragBuilder->codeAppendf(\"if (%s) {\", " - "(_outer.childProcessor(_outer.child_index).preservesOpaqueInput() ? ", - "SkString _input105 = SkStringPrintf(\"%s\", args.fInputColor);", - "SkString _sample105;", - "_sample105 = this->invokeChild(_outer.child_index, _input105.c_str(), args);", - "fragBuilder->codeAppendf(\"\\n %s = %s;\\n} else {\\n %s = half4(1.0);\\n}\\n\"," - " args.fOutputColor, _sample105.c_str(), args.fOutputColor);", - "{", - " auto clone = src.childProcessor(child_index).clone();", - " if (src.childProcessor(child_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", + /*expectedCPP=*/{ + "fragBuilder->codeAppendf(\n" + "R\"SkSL(if (%s) {)SkSL\"\n" + ", (_outer.childProcessor(_outer.child_index).preservesOpaqueInput() ? \"true\" : \"false\"));", + "SkString _input161(args.fInputColor);", + "SkString _sample161;", + "_sample161 = this->invokeChild(_outer.child_index, _input161.c_str(), args);", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(\n" + " %s = %s;\n" + "} else {\n" + " %s = half4(1.0);\n" + "}\n" + ")SkSL\"\n" + ", args.fOutputColor, _sample161.c_str(), args.fOutputColor);", + "child_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child_index));", }); } DEF_TEST(SkSLFPChildProcessorFieldAccess, r) { test(r, - "in fragmentProcessor child;" - "bool opaque = child.preservesOpaqueInput;" - "void main() {" - " if (opaque) {" - " sk_OutColor = sample(child);" - " } else {" - " sk_OutColor = half4(0.5);" - " }" - "}", - *SkSL::ShaderCapsFactory::Default(), - { - "this->registerChildProcessor(std::move(child));" + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor child; + bool opaque = child.preservesOpaqueInput; + void main() { + if (opaque) { + sk_OutColor = sample(child); + } else { + sk_OutColor = half4(0.5); + } + } + )__SkSL__", + /*expectedH=*/{ + "child_index = this->registerChild(std::move(child), SkSL::SampleUsage::PassThrough());" }, - { + /*expectedCPP=*/{ "opaque = _outer.childProcessor(_outer.child_index).preservesOpaqueInput();", - "fragBuilder->codeAppendf(\"bool opaque = %s;\\nif (opaque) {\", (opaque ? \"true\" : " - "\"false\"));", - "SkString _sample126;", - "_sample126 = this->invokeChild(_outer.child_index, args);", - "fragBuilder->codeAppendf(\"\\n %s = %s;\\n} else {\\n %s = half4(0.5);\\n}\\n\"," - " args.fOutputColor, _sample126.c_str(), args.fOutputColor);", - "{", - " auto clone = src.childProcessor(child_index).clone();", - " if (src.childProcessor(child_index).isSampledWithExplicitCoords()) {", - " clone->setSampledWithExplicitCoords();", - " }", - " this->registerChildProcessor(std::move(clone));", - "}", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(bool opaque = %s;\n" + "if (opaque) {)SkSL\"\n" + ", (opaque ? \"true\" : \"false\"));", + "SkString _sample196;", + "_sample196 = this->invokeChild(_outer.child_index, args);", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(\n" + " %s = %s;\n" + "} else {\n" + " %s = half4(0.5);\n" + "}\n" + ")SkSL\"\n" + ", args.fOutputColor, _sample196.c_str(), args.fOutputColor);", + "child_index = this->cloneAndRegisterChildProcessor(src.childProcessor(src.child_index));", }); } DEF_TEST(SkSLFPNullableChildProcessor, r) { test(r, - "in fragmentProcessor? child;" - "void main() {" - " if (child != null) {" - " sk_OutColor = sample(child);" - " } else {" - " sk_OutColor = half4(0.5);" - " }" - "}", - *SkSL::ShaderCapsFactory::Default(), - {}, - { - "fragBuilder->codeAppendf(\"if (%s) {\", _outer.child_index >= 0 ? \"true\" : " - "\"false\");", - "SkString _sample93;", + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor? child; + void main() { + if (child != null) { + sk_OutColor = sample(child); + } else { + sk_OutColor = half4(0.5); + } + } + )__SkSL__", + /*expectedH=*/{}, + /*expectedCPP=*/{ + "fragBuilder->codeAppendf(\n" + "R\"SkSL(if (%s) {)SkSL\"\n" + ", _outer.child_index >= 0 ? \"true\" : \"false\");", + "SkString _sample149;", "if (_outer.child_index >= 0) {", - "_sample93 = this->invokeChild(_outer.child_index, args);", - "}", - "fragBuilder->codeAppendf(\"\\n %s = %s;\\n} else {\\n %s = half4(0.5);\\n}\\n\"," - " args.fOutputColor, _sample93.c_str(), args.fOutputColor);" - + "_sample149 = this->invokeChild(_outer.child_index, args);", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(\n" + " %s = %s;\n" + "} else {\n" + " %s = half4(0.5);\n" + "}\n" + ")SkSL\"\n" + ", args.fOutputColor, _sample149.c_str(), args.fOutputColor);", }); } DEF_TEST(SkSLFPBadIn, r) { test_failure(r, - "in half4 c;" - "void main() {" - " sk_OutColor = c;" - "}", - "error: 1: 'in' variable must be either 'uniform' or 'layout(key)', or there must be a " + R"__SkSL__( + in half4 c; + void main() { + sk_OutColor = c; + } + )__SkSL__", + "error: 4: 'in' variable must be either 'uniform' or 'layout(key)', or there must be a " "custom @setData function\n1 error\n"); } DEF_TEST(SkSLFPSampleCoords, r) { test(r, - "in fragmentProcessor child;" - "@coordTransform { SkMatrix() }" - "void main() {" - " sk_OutColor = sample(child) + sample(child, sk_TransformedCoords2D[0] / 2);" - "}", - *SkSL::ShaderCapsFactory::Default(), - {}, - { - "SkString _sample94;\n", - "_sample94 = this->invokeChild(_outer.child_index, args);\n", - "SkString _sample110;\n", - "SkString sk_TransformedCoords2D_0 = fragBuilder->ensureCoords2D(" - "args.fTransformedCoords[0].fVaryingPoint, " - "_outer.sampleMatrix());\n", - "SkString _coords110 = SkStringPrintf(\"%s / 2.0\", " - "sk_TransformedCoords2D_0.c_str());\n", - "_sample110 = this->invokeChild(_outer.child_index, args, _coords110.c_str());\n", - "fragBuilder->codeAppendf(\"%s = %s + %s;\\n\", args.fOutputColor, _sample94.c_str(), " - "_sample110.c_str());\n" - }); + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor child; + void main(float2 coord) { + sk_OutColor = sample(child) + sample(child, coord / 2); + } + )__SkSL__", + /*expectedH=*/{ + "child_index = this->registerChild(std::move(child), SkSL::SampleUsage(SkSL::SampleUsage::Kind::kNone, \"\", false, true, true));", + "this->setUsesSampleCoordsDirectly();" + }, + /*expectedCPP=*/{ + "SkString _sample118;\n", + "_sample118 = this->invokeChild(_outer.child_index, args);\n", + "SkString _sample118;\n", + "SkString _coords134 = SkStringPrintf(\"%s / 2.0\", args.fSampleCoord);\n", + "_sample134 = this->invokeChild(_outer.child_index, args, _coords134.c_str());\n", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(%s = %s + %s;\n" + ")SkSL\"\n" + ", args.fOutputColor, _sample118.c_str(), _sample134.c_str());" + }); } DEF_TEST(SkSLFPFunction, r) { test(r, - "in fragmentProcessor? child;" - "half4 flip(half4 c) { return c.abgr; }" - "void main() {" - " sk_OutColor = flip(sk_InColor);" - "}", *SkSL::ShaderCapsFactory::Default(), - {}, - { + R"__SkSL__( + in fragmentProcessor? child; + half4 flip(half4 c) { return c.abgr; } + void main() { + sk_OutColor = flip(sk_InColor); + } + )__SkSL__", + /*expectedH=*/{}, + /*expectedCPP=*/{ "SkString flip_name;", "const GrShaderVar flip_args[] = { GrShaderVar(\"c\", kHalf4_GrSLType)};", - "fragBuilder->emitFunction(kHalf4_GrSLType, \"flip\", 1, flip_args, " - "\"return c.wzyx;\\n\", &flip_name);", - "fragBuilder->codeAppendf(\"half4 inlineResult101;\\nhalf4 inlineArg101_0 = %s;\\n{\\n inlineResult101 = inlineArg101_0.wzyx;\\n}\\n%s = inlineResult101;\\n\\n\", args.fInputColor, " - "args.fOutputColor);" + "fragBuilder->emitFunction(kHalf4_GrSLType, \"flip\", 1, flip_args,\n" + "R\"SkSL(return c.wzyx;\n" + ")SkSL\", &flip_name);", + "fragBuilder->codeAppendf(\n" + "R\"SkSL(half4 inlineResult0;\n" + "half4 inlineArg1_0 = %s;\n" + "{\n" + " inlineResult0 = inlineArg1_0.wzyx;\n" + "}\n" + "%s = inlineResult0;\n" + "\n" + ")SkSL\"\n" + ", args.fInputColor, args.fOutputColor);" }); } -DEF_TEST(SkSLFPMatrixSample, r) { - test(r, - "in fragmentProcessor? child;" - "void main() {" - " sk_OutColor = sample(child, float3x3(2));" - "}", - *SkSL::ShaderCapsFactory::Default(), - {}, - { +DEF_TEST(SkSLFPMatrixSampleConstant, r) { + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor? child; + void main() { + sk_OutColor = sample(child, float3x3(2)); + } + )__SkSL__", + /*expectedH=*/{ + "this->registerChild(std::move(child), " + "SkSL::SampleUsage::UniformMatrix(\"float3x3(2.0)\", true));" + }, + /*expectedCPP=*/{ + "this->invokeChildWithMatrix(_outer.child_index, args)" + }); +} + +DEF_TEST(SkSLFPMatrixSampleUniform, r) { + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor? child; + uniform float3x3 matrix; + void main() { + sk_OutColor = sample(child, matrix); + } + )__SkSL__", + /*expectedH=*/{ + // Since 'matrix' is just a uniform, the generated code can't determine perspective. + "this->registerChild(std::move(child), " + "SkSL::SampleUsage::UniformMatrix(\"matrix\", true));" + }, + /*expectedCPP=*/{ + "this->invokeChildWithMatrix(_outer.child_index, args)" + }); +} + +DEF_TEST(SkSLFPMatrixSampleInUniform, r) { + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor? child; + in uniform float3x3 matrix; + void main() { + sk_OutColor = sample(child, matrix); + } + )__SkSL__", + /*expectedH=*/{ + // Since 'matrix' is marked 'in', we can detect perspective at runtime + "this->registerChild(std::move(child), " + "SkSL::SampleUsage::UniformMatrix(\"matrix\", matrix.hasPerspective()));" + }, + /*expectedCPP=*/{ + "this->invokeChildWithMatrix(_outer.child_index, args)" + }); +} + +DEF_TEST(SkSLFPMatrixSampleMultipleInUniforms, r) { + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor? child; + in uniform float3x3 matrixA; + in uniform float3x3 matrixB; + void main() { + sk_OutColor = sample(child, matrixA); + sk_OutColor += sample(child, matrixB); + } + )__SkSL__", + /*expectedH=*/{ + // FIXME it would be nice if codegen can produce + // (matrixA.hasPerspective() || matrixB.hasPerspective()) even though it's variable. + "this->registerChild(std::move(child), " + "SkSL::SampleUsage::VariableMatrix(true));" + }, + /*expectedCPP=*/{ + "SkString _matrix191(args.fUniformHandler->getUniformCStr(matrixAVar));", + "this->invokeChildWithMatrix(_outer.child_index, args, _matrix191.c_str());", + "SkString _matrix247(args.fUniformHandler->getUniformCStr(matrixBVar));", + "this->invokeChildWithMatrix(_outer.child_index, args, _matrix247.c_str());" + }); +} + +DEF_TEST(SkSLFPMatrixSampleConstUniformExpression, r) { + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor? child; + uniform float3x3 matrix; + void main() { + sk_OutColor = sample(child, 0.5 * matrix); + } + )__SkSL__", + /*expectedH=*/{ + // FIXME: "0.5 * matrix" is a uniform expression and could be lifted to the vertex + // shader, once downstream code is able to properly map 'matrix' within the expression. + "this->registerChild(std::move(child), " + "SkSL::SampleUsage::VariableMatrix(true));" + }, + /*expectedCPP=*/{ + "SkString _matrix145 = SkStringPrintf(\"0.5 * %s\", " + "args.fUniformHandler->getUniformCStr(matrixVar));", + "this->invokeChildWithMatrix(_outer.child_index, args, _matrix145.c_str());" + }); +} + +DEF_TEST(SkSLFPMatrixSampleConstantAndExplicitly, r) { + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor? child; + void main(float2 coord) { + sk_OutColor = sample(child, float3x3(0.5)); + sk_OutColor = sample(child, coord / 2); + } + )__SkSL__", + /*expectedH=*/{ + "this->registerChild(std::move(child), " + "SkSL::SampleUsage(SkSL::SampleUsage::Kind::kUniform, \"float3x3(0.5)\", true, true, false));" + }, + /*expectedCPP=*/{ + "this->invokeChildWithMatrix(_outer.child_index, args)", + "SkString _coords180 = SkStringPrintf(\"%s / 2.0\", args.fSampleCoord);", + "this->invokeChild(_outer.child_index, args, _coords180.c_str())", + }); +} + +DEF_TEST(SkSLFPMatrixSampleVariableAndExplicitly, r) { + test(r, + *SkSL::ShaderCapsFactory::Default(), + R"__SkSL__( + in fragmentProcessor? child; + void main(float2 coord) { + float3x3 matrix = float3x3(sk_InColor.a); + sk_OutColor = sample(child, matrix); + sk_OutColor = sample(child, coord / 2); + } + )__SkSL__", + /*expectedH=*/{ + "this->registerChild(std::move(child), " + "SkSL::SampleUsage(SkSL::SampleUsage::Kind::kVariable, \"\", true, true, false));" + }, + /*expectedCPP=*/{ + "SkString _matrix178(\"matrix\");", + "this->invokeChildWithMatrix(_outer.child_index, args, _matrix178.c_str())", + "SkString _coords232 = SkStringPrintf(\"%s / 2.0\", args.fSampleCoord);", + "this->invokeChild(_outer.child_index, args, _coords232.c_str()", }); } diff --git a/tests/SkSLGLSLTest.cpp b/tests/SkSLGLSLTest.cpp index a83e2e88e60ab..432a4a95d4181 100644 --- a/tests/SkSLGLSLTest.cpp +++ b/tests/SkSLGLSLTest.cpp @@ -106,21 +106,21 @@ DEF_TEST(SkSLFunctions, r) { "out vec4 sk_FragColor;\n" "void main() {\n" " float x = 10.0;\n" - " float inlineArg161_0 = x;\n" + " float inlineArg2_0 = x;\n" " {\n" " float y[2], z;\n" - " y[0] = inlineArg161_0;\n" - " y[1] = inlineArg161_0 * 2.0;\n" - " float inlineResult117;\n" - " float[2] inlineArg117_0 = y;\n" + " y[0] = inlineArg2_0;\n" + " y[1] = inlineArg2_0 * 2.0;\n" + " float inlineResult0;\n" + " float[2] inlineArg1_0 = y;\n" " {\n" - " inlineResult117 = inlineArg117_0[0] * inlineArg117_0[1];\n" + " inlineResult0 = inlineArg1_0[0] * inlineArg1_0[1];\n" " }\n" - " z = inlineResult117;\n" + " z = inlineResult0;\n" "\n" - " inlineArg161_0 = z;\n" + " inlineArg2_0 = z;\n" " }\n" - " x = inlineArg161_0;\n" + " x = inlineArg2_0;\n" "\n" " sk_FragColor = vec4(x);\n" "}\n"); @@ -1635,6 +1635,79 @@ DEF_TEST(SkSLSwitch, r) { " }\n" " sk_FragColor = vec4(x);\n" "}\n"); + // static test w/ break in a block + test(r, + "void main() {" + " float x = 0.0;" + " switch (0) {" + " case 0: {" + " x = 0.0;" + " sk_FragColor = half4(half(x));" + " break;" + " }" + " case 1:" + " x = 1.0;" + " }" + "}", + *SkSL::ShaderCapsFactory::Default(), + "#version 400\n" + "out vec4 sk_FragColor;\n" + "void main() {\n" + " {\n" + " {\n" + " sk_FragColor = vec4(0.0);\n" + " }\n" + " }\n" + "}\n"); + // static test w/ static conditional break in a block + test(r, + "void main() {" + " float x = 0.0;" + " switch (0) {" + " case 0:" + " x = 0.0;" + " if (x < 1) { sk_FragColor = half4(half(x)); break; }" + " case 1:" + " x = 1.0;" + " }" + "}", + *SkSL::ShaderCapsFactory::Default(), + "#version 400\n" + "out vec4 sk_FragColor;\n" + "void main() {\n" + " {\n" + " {\n" + " sk_FragColor = vec4(0.0);\n" + " }\n" + " }\n" + "}\n"); + // static test w/ non-static conditional break in a block + test(r, + "void main() {" + " float x = 0.0;" + " switch (0) {" + " case 0:" + " x = 0.0;" + " if (x < sqrt(1)) { sk_FragColor = half4(half(x)); break; }" + " case 1:" + " x = 1.0;" + " }" + "}", + *SkSL::ShaderCapsFactory::Default(), + "#version 400\n" + "out vec4 sk_FragColor;\n" + "void main() {\n" + " switch (0) {\n" + " case 0:\n" + " ;\n" + " if (0.0 < sqrt(1.0)) {\n" + " sk_FragColor = vec4(0.0);\n" + " break;\n" + " }\n" + " case 1:\n" + " ;\n" + " }\n" + "}\n"); } DEF_TEST(SkSLRectangleTexture, r) { @@ -2473,3 +2546,24 @@ DEF_TEST(SkSLNegatedVectorLiteral, r) { " sk_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n" "}\n"); } + +DEF_TEST(SkSLDiscard, r) { + test(r, + "void main() {" + "half x;" + " @switch (1) {" + " case 0: x = 0; break;" + " default: x = 1; discard;" + " }" + " sk_FragColor = half4(x);" + "}", + *SkSL::ShaderCapsFactory::Default(), + "#version 400\n" + "void main() {\n" + " float x;\n" + " {\n" + " x = 1.0;\n" + " discard;\n" + " }\n" + "}\n"); +} diff --git a/tests/SkSLMetalTest.cpp b/tests/SkSLMetalTest.cpp index a8640bad7f4bb..41c440fca22d5 100644 --- a/tests/SkSLMetalTest.cpp +++ b/tests/SkSLMetalTest.cpp @@ -9,7 +9,7 @@ #include "tests/Test.h" -static void test(skiatest::Reporter* r, const char* src, const SkSL::Program::Settings& settings, +static void test(skiatest::Reporter* r, const SkSL::Program::Settings& settings, const char* src, const char* expected, SkSL::Program::Inputs* inputs, SkSL::Program::Kind kind = SkSL::Program::kFragment_Kind) { SkSL::Compiler compiler; @@ -32,18 +32,17 @@ static void test(skiatest::Reporter* r, const char* src, const SkSL::Program::Se } } -static void test(skiatest::Reporter* r, const char* src, const GrShaderCaps& caps, +static void test(skiatest::Reporter* r, const GrShaderCaps& caps, const char* src, const char* expected, SkSL::Program::Kind kind = SkSL::Program::kFragment_Kind) { SkSL::Program::Settings settings; settings.fCaps = ∩︀ SkSL::Program::Inputs inputs; - test(r, src, settings, expected, &inputs, kind); + test(r, settings, src, expected, &inputs, kind); } DEF_TEST(SkSLMetalHelloWorld, r) { - test(r, + test(r, *SkSL::ShaderCapsFactory::Default(), "void main() { sk_FragColor = half4(0.75); }", - *SkSL::ShaderCapsFactory::Default(), "#include \n" "#include \n" "using namespace metal;\n" @@ -61,15 +60,15 @@ DEF_TEST(SkSLMetalHelloWorld, r) { } DEF_TEST(SkSLMetal2x2MatrixCopyFromFloat2x2, r) { - test(r, R"__SkSL__( + test(r, *SkSL::ShaderCapsFactory::Default(), +R"__SkSL__( void main() { float2x2 m1 = float2x2(float2(1, 2), float2(3, 4)); float2x2 m2 = m1; float2x2 m3 = float2x2(m1); sk_FragColor = half4(half(m1[0][0] + m2[0][0] + m3[0][0])); })__SkSL__", - *SkSL::ShaderCapsFactory::Default(), - R"__MSL__(#include +R"__MSL__(#include #include using namespace metal; struct Inputs { @@ -87,14 +86,14 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front } DEF_TEST(SkSLMetal2x2MatrixCopyFromConstantPropagatedFloat4, r) { - test(r, R"__SkSL__( + test(r, *SkSL::ShaderCapsFactory::Default(), +R"__SkSL__( void main() { float2x2 m1 = float2x2(float4(1, 2, 3, 4)); float2x2 m2 = m1; float2x2 m3 = float2x2(m1); sk_FragColor = half4(half(m1[0][0] + m2[0][0] + m3[0][0])); })__SkSL__", - *SkSL::ShaderCapsFactory::Default(), R"__MSL__(#include #include using namespace metal; @@ -116,7 +115,8 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front } DEF_TEST(SkSLMetalMatrices, r) { - test(r, R"__SkSL__( + test(r, *SkSL::ShaderCapsFactory::Default(), +R"__SkSL__( void main() { float2x2 m1 = float2x2(float4(1, 2, 3, 4)); float2x2 m2 = float2x2(float4(0)); @@ -132,7 +132,6 @@ void main() { sk_FragColor = half4(half(m1[0][0] + m2[0][0] + m3[0][0] + m4[0][0] + m5[0][0] + m6[0][0] + m7[0][0] + m8[0][0] + m9[0][0] + m10[0][0] + m11[0][0])); })__SkSL__", - *SkSL::ShaderCapsFactory::Default(), R"__MSL__(#include #include using namespace metal; @@ -161,11 +160,10 @@ fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front } DEF_TEST(SkSLMetalConstantSwizzle, r) { - test(r, + test(r, *SkSL::ShaderCapsFactory::Default(), "void main() {" "sk_FragColor = half4(0.5).rgb1;" "}", - *SkSL::ShaderCapsFactory::Default(), "#include \n" "#include \n" "using namespace metal;\n" @@ -181,3 +179,81 @@ DEF_TEST(SkSLMetalConstantSwizzle, r) { " return *_out;\n" "}\n"); } + +DEF_TEST(SkSLMetalNumericGlobals, r) { + test(r, *SkSL::ShaderCapsFactory::Default(), +R"__SkSL__( +half attr1; +int attr2 = 123; +float attr3; +half4 attr4 = half4(4, 5, 6, 7); +void main() +{ + sk_FragColor = half4(attr1, attr2, half(attr3), attr4.x); +} +)__SkSL__", +R"__MSL__(#include +#include +using namespace metal; +struct Inputs { +}; +struct Outputs { + float4 sk_FragColor [[color(0)]]; +}; +struct Globals { + float attr1; + int attr2; + float attr3; + float4 attr4; +}; + + + +fragment Outputs fragmentMain(Inputs _in [[stage_in]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) { + Globals globalStruct{{}, 123, {}, float4(4.0, 5.0, 6.0, 7.0)}; + thread Globals* _globals = &globalStruct; + (void)_globals; + Outputs _outputStruct; + thread Outputs* _out = &_outputStruct; + _out->sk_FragColor = float4(_globals->attr1, float(_globals->attr2), _globals->attr3, _globals->attr4.x); + return *_out; +} +)__MSL__"); +} + +DEF_TEST(SkSLMetalSamplerGlobals, r) { + test(r, *SkSL::ShaderCapsFactory::Default(), +R"__SkSL__( +layout(binding=1) uniform sampler2D texA; +layout(binding=0) uniform sampler2D texB; +void main() +{ + sk_FragColor = sample(texA, half2(0)) * sample(texB, half2(0)); +} +)__SkSL__", +R"__MSL__(#include +#include +using namespace metal; +struct Inputs { +}; +struct Outputs { + float4 sk_FragColor [[color(0)]]; +}; +struct Globals { + texture2d texA; + sampler texASmplr; + texture2d texB; + sampler texBSmplr; +}; + +fragment Outputs fragmentMain(Inputs _in [[stage_in]], texture2d texA[[texture(1)]], sampler texASmplr[[sampler(1)]], texture2d texB[[texture(0)]], sampler texBSmplr[[sampler(0)]], bool _frontFacing [[front_facing]], float4 _fragCoord [[position]]) { + Globals globalStruct{texA, texASmplr, texB, texBSmplr}; + thread Globals* _globals = &globalStruct; + (void)_globals; + Outputs _outputStruct; + thread Outputs* _out = &_outputStruct; + _out->sk_FragColor = _globals->texA.sample(_globals->texASmplr, float2(0.0)) * _globals->texB.sample(_globals->texBSmplr, float2(0.0)); + return *_out; +} +)__MSL__"); +} diff --git a/tests/SkVMTest.cpp b/tests/SkVMTest.cpp index 970f994bc4a25..6bcb47023e941 100644 --- a/tests/SkVMTest.cpp +++ b/tests/SkVMTest.cpp @@ -1332,6 +1332,7 @@ DEF_TEST(SkVM_Assembler, r) { a.vmovups(A::ymm5, A::Mem{A::rsi}); a.vmovups(A::Mem{A::rsi}, A::ymm5); + a.vmovups(A::xmm5, A::Mem{A::rsi}); a.vmovups(A::Mem{A::rsi}, A::xmm5); a.vpmovzxwd(A::ymm4, A::Mem{A::rsi}); @@ -1343,6 +1344,7 @@ DEF_TEST(SkVM_Assembler, r) { 0xc5, 0xfc, 0x10, 0b00'101'110, 0xc5, 0xfc, 0x11, 0b00'101'110, + 0xc5, 0xf8, 0x10, 0b00'101'110, 0xc5, 0xf8, 0x11, 0b00'101'110, 0xc4,0xe2,0x7d, 0x33, 0b00'100'110, diff --git a/tests/Skbug5221.cpp b/tests/Skbug5221.cpp index df83f9cb8d27a..98ad5615165a6 100644 --- a/tests/Skbug5221.cpp +++ b/tests/Skbug5221.cpp @@ -10,6 +10,7 @@ #include "include/core/SkCanvas.h" #include "include/core/SkFont.h" #include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" // This passes by not crashing. static void test(SkCanvas* canvas) { @@ -24,7 +25,7 @@ DEF_TEST(skbug5221, r) { DEF_GPUTEST_FOR_ALL_CONTEXTS(skbug5221_GPU, r, contextInfo) { sk_sp surface(SkSurface::MakeRenderTarget( - contextInfo.grContext(), SkBudgeted::kYes, + contextInfo.directContext(), SkBudgeted::kYes, SkImageInfo::Make(256, 256, kRGBA_8888_SkColorType, kPremul_SkAlphaType))); test(surface->getCanvas()); } diff --git a/tests/Skbug6653.cpp b/tests/Skbug6653.cpp index e8e29f9546006..383d7d4f75828 100644 --- a/tests/Skbug6653.cpp +++ b/tests/Skbug6653.cpp @@ -5,12 +5,10 @@ * found in the LICENSE file. */ -#include "include/core/SkTypes.h" - #include "include/core/SkCanvas.h" #include "include/core/SkSurface.h" - -#include "include/gpu/GrContext.h" +#include "include/core/SkTypes.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "tests/Test.h" @@ -97,7 +95,7 @@ static void test_bug_6653(GrContext* ctx, skiatest::Reporter* reporter, const ch // Tests that readPixels returns up-to-date results. This has failed on several GPUs, // from multiple vendors, in MSAA mode. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(skbug6653, reporter, ctxInfo) { - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); test_bug_6653(ctx, reporter, "Default"); } diff --git a/tests/SpecialImageTest.cpp b/tests/SpecialImageTest.cpp index 1144b3521c1e0..45064e15d506f 100644 --- a/tests/SpecialImageTest.cpp +++ b/tests/SpecialImageTest.cpp @@ -10,20 +10,18 @@ #include "include/core/SkImage.h" #include "include/core/SkPixmap.h" #include "include/core/SkSurface.h" +#include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkSpecialImage.h" #include "src/core/SkSpecialSurface.h" -#include "tests/Test.h" - -#include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" #include "src/gpu/GrBitmapTextureMaker.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrSurfaceProxy.h" #include "src/gpu/GrTextureProxy.h" #include "src/gpu/SkGr.h" - +#include "tests/Test.h" // This test creates backing resources exactly sized to [kFullSize x kFullSize]. // It then wraps them in an SkSpecialImage with only the center (red) region being active. @@ -78,11 +76,13 @@ static void test_image(const sk_sp& img, skiatest::Reporter* rep } //-------------- - // Test getROPixels - this should always succeed regardless of backing store - SkBitmap bitmap; - REPORTER_ASSERT(reporter, img->getROPixels(&bitmap)); - REPORTER_ASSERT(reporter, kSmallerSize == bitmap.width()); - REPORTER_ASSERT(reporter, kSmallerSize == bitmap.height()); + // Test getROPixels - this only works for raster-backed special images + if (!img->isTextureBacked()) { + SkBitmap bitmap; + REPORTER_ASSERT(reporter, img->getROPixels(&bitmap)); + REPORTER_ASSERT(reporter, kSmallerSize == bitmap.width()); + REPORTER_ASSERT(reporter, kSmallerSize == bitmap.height()); + } //-------------- // Test that draw restricts itself to the subset @@ -183,76 +183,8 @@ DEF_TEST(SpecialImage_Image_Legacy, reporter) { test_specialimage_image(reporter); } -static void test_texture_backed(skiatest::Reporter* reporter, - const sk_sp& orig, - const sk_sp& gpuBacked) { - REPORTER_ASSERT(reporter, gpuBacked); - REPORTER_ASSERT(reporter, gpuBacked->isTextureBacked()); - REPORTER_ASSERT(reporter, gpuBacked->uniqueID() == orig->uniqueID()); - REPORTER_ASSERT(reporter, gpuBacked->subset().width() == orig->subset().width() && - gpuBacked->subset().height() == orig->subset().height()); - REPORTER_ASSERT(reporter, gpuBacked->getColorSpace() == orig->getColorSpace()); -} - -// Test out the SkSpecialImage::makeTextureImage entry point -DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_MakeTexture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); - SkBitmap bm = create_bm(); - - const SkIRect& subset = SkIRect::MakeXYWH(kPad, kPad, kSmallerSize, kSmallerSize); - - { - // raster - sk_sp rasterImage(SkSpecialImage::MakeFromRaster( - SkIRect::MakeWH(kFullSize, - kFullSize), - bm)); - - { - sk_sp fromRaster(rasterImage->makeTextureImage(context)); - test_texture_backed(reporter, rasterImage, fromRaster); - } - - { - sk_sp subRasterImage(rasterImage->makeSubset(subset)); - - sk_sp fromSubRaster(subRasterImage->makeTextureImage(context)); - test_texture_backed(reporter, subRasterImage, fromSubRaster); - } - } - - { - // gpu - GrBitmapTextureMaker maker(context, bm, GrImageTexGenPolicy::kNew_Uncached_Budgeted); - auto view = maker.view(GrMipMapped::kNo); - if (!view) { - return; - } - - sk_sp gpuImage( - SkSpecialImage::MakeDeferredFromGpu(context, - SkIRect::MakeWH(kFullSize, kFullSize), - kNeedNewImageUniqueID_SpecialImage, - std::move(view), - maker.colorType(), - nullptr)); - - { - sk_sp fromGPU(gpuImage->makeTextureImage(context)); - test_texture_backed(reporter, gpuImage, fromGPU); - } - - { - sk_sp subGPUImage(gpuImage->makeSubset(subset)); - - sk_sp fromSubGPU(subGPUImage->makeTextureImage(context)); - test_texture_backed(reporter, subGPUImage, fromSubGPU); - } - } -} - DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_Gpu, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); SkBitmap bm = create_bm(); GrBitmapTextureMaker maker(context, bm, GrImageTexGenPolicy::kNew_Uncached_Budgeted); auto view = maker.view(GrMipMapped::kNo); @@ -286,41 +218,3 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_Gpu, reporter, ctxInfo) { test_image(subSImg2, reporter, context, true); } } - -DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialImage_ReadbackAndCachingSubsets_Gpu, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); - SkImageInfo ii = SkImageInfo::Make(50, 50, kN32_SkColorType, kPremul_SkAlphaType); - auto surface = SkSurface::MakeRenderTarget(context, SkBudgeted::kNo, ii); - - // Fill out our surface: - // Green | Blue - // Red | Green - { - surface->getCanvas()->clear(SK_ColorGREEN); - SkPaint p; - p.setColor(SK_ColorRED); - surface->getCanvas()->drawRect(SkRect::MakeXYWH(0, 25, 25, 25), p); - p.setColor(SK_ColorBLUE); - surface->getCanvas()->drawRect(SkRect::MakeXYWH(25, 0, 25, 25), p); - } - - auto image = surface->makeImageSnapshot(); - auto redImg = SkSpecialImage::MakeFromImage(context, SkIRect::MakeXYWH(10, 30, 10, 10), image); - auto blueImg = SkSpecialImage::MakeFromImage(context, SkIRect::MakeXYWH(30, 10, 10, 10), image); - - // This isn't necessary, but if it ever becomes false, then the cache collision bug that we're - // checking below is irrelevant. - REPORTER_ASSERT(reporter, redImg->uniqueID() == blueImg->uniqueID()); - - SkBitmap redBM, blueBM; - SkAssertResult(redImg->getROPixels(&redBM)); - SkAssertResult(blueImg->getROPixels(&blueBM)); - - // Each image should read from the correct sub-rect. Past bugs (skbug.com/8448) have included: - // - Always reading back from (0, 0), producing green - // - Incorrectly hitting the cache on the 2nd read-back, causing blueBM to be red - REPORTER_ASSERT(reporter, redBM.getColor(0, 0) == SK_ColorRED, - "0x%08x != 0x%08x", redBM.getColor(0, 0), SK_ColorRED); - REPORTER_ASSERT(reporter, blueBM.getColor(0, 0) == SK_ColorBLUE, - "0x%08x != 0x%08x", blueBM.getColor(0, 0), SK_ColorBLUE); -} diff --git a/tests/SpecialSurfaceTest.cpp b/tests/SpecialSurfaceTest.cpp index d98c2094cd5a3..c3f185eb107df 100644 --- a/tests/SpecialSurfaceTest.cpp +++ b/tests/SpecialSurfaceTest.cpp @@ -7,14 +7,13 @@ #include "include/core/SkBitmap.h" #include "include/core/SkCanvas.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkSpecialImage.h" #include "src/core/SkSpecialSurface.h" -#include "tests/Test.h" - -#include "include/gpu/GrContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/SkGr.h" +#include "tests/Test.h" class TestingSpecialSurfaceAccess { public: @@ -78,13 +77,14 @@ DEF_TEST(SpecialSurface_Raster2, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SpecialSurface_Gpu1, reporter, ctxInfo) { + auto direct = ctxInfo.directContext(); + for (auto colorType : {GrColorType::kRGBA_8888, GrColorType::kRGBA_1010102}) { - if (!ctxInfo.grContext()->colorTypeSupportedAsSurface( - GrColorTypeToSkColorType(colorType))) { + if (!direct->colorTypeSupportedAsSurface(GrColorTypeToSkColorType(colorType))) { continue; } sk_sp surf(SkSpecialSurface::MakeRenderTarget( - ctxInfo.grContext(), kSmallerSize, kSmallerSize, colorType, nullptr)); + direct, kSmallerSize, kSmallerSize, colorType, nullptr)); test_surface(surf, reporter, 0); } } diff --git a/tests/SrcSrcOverBatchTest.cpp b/tests/SrcSrcOverBatchTest.cpp index 48e5a39b6f5db..156de0096e756 100644 --- a/tests/SrcSrcOverBatchTest.cpp +++ b/tests/SrcSrcOverBatchTest.cpp @@ -11,11 +11,12 @@ #include "include/core/SkCanvas.h" #include "include/core/SkShader.h" #include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" #include "tests/Test.h" #include "tools/gpu/GrContextFactory.h" DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SrcSrcOverBatchTest, reporter, ctxInfo) { - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); static const int kSize = 8; const SkImageInfo ii = SkImageInfo::Make(kSize, kSize, kRGBA_8888_SkColorType, diff --git a/tests/StringTest.cpp b/tests/StringTest.cpp index e20732a18682e..5bd6bb9913d88 100644 --- a/tests/StringTest.cpp +++ b/tests/StringTest.cpp @@ -162,33 +162,35 @@ DEF_TEST(String, reporter) { } REPORTER_ASSERT(reporter, SkStringPrintf("%i", 0).equals("0")); +} - // 2000 is larger than the static buffer size inside SkString.cpp - a = SkStringPrintf("%2000s", " "); - REPORTER_ASSERT(reporter, a.size() == 2000); - for (size_t i = 0; i < a.size(); ++i) { - if (a[i] != ' ') { - ERRORF(reporter, "SkStringPrintf fail: a[%zu] = '%c'", i, a[i]); - break; - } +static void assert_2000_spaces(skiatest::Reporter* reporter, const SkString& str) { + REPORTER_ASSERT(reporter, str.size() == 2000); + for (size_t i = 0; i < str.size(); ++i) { + REPORTER_ASSERT(reporter, str[i] == ' '); } - a.reset(); +} + +DEF_TEST(String_overflow, reporter) { + // 2000 is larger than the static buffer size inside SkString.cpp + SkString a = SkStringPrintf("%2000s", " "); + assert_2000_spaces(reporter, a); + + a = "X"; a.printf("%2000s", " "); - REPORTER_ASSERT(reporter, a.size() == 2000); - for (size_t i = 0; i < a.size(); ++i) { - if (a[i] != ' ') { - ERRORF(reporter, "SkString::printf fail: a[%zu] = '%c'", i, a[i]); - break; - } - } - a.appendf("%2000s", " "); - REPORTER_ASSERT(reporter, a.size() == 4000); - for (size_t i = 0; i < a.size(); ++i) { - if (a[i] != ' ') { - ERRORF(reporter, "SkString::appendf fail: a[%zu] = '%c'", i, a[i]); - break; - } - } + assert_2000_spaces(reporter, a); + + a = "X"; + a.appendf("%1999s", " "); + REPORTER_ASSERT(reporter, a[0] == 'X'); + a[0] = ' '; + assert_2000_spaces(reporter, a); + + a = "X"; + a.prependf("%1999s", " "); + REPORTER_ASSERT(reporter, a[1999] == 'X'); + a[1999] = ' '; + assert_2000_spaces(reporter, a); } DEF_TEST(String_SkStrSplit, r) { @@ -320,3 +322,132 @@ DEF_TEST(String_fromUTF16, r) { REPORTER_ASSERT(r, SkStringFromUTF16(test3, SK_ARRAY_COUNT(test3)).equals("αβγδε ζηθικ")); } +static void test_va_list_print(skiatest::Reporter* r, const char format[], ...) { + va_list args; + va_start(args, format); + + SkString str("123"); + str.printVAList(format, args); + REPORTER_ASSERT(r, str.equals("hello world")); + + va_end(args); +} + +static void test_va_list_append(skiatest::Reporter* r, const char format[], ...) { + va_list args; + va_start(args, format); + + SkString str("123"); + str.appendVAList(format, args); + REPORTER_ASSERT(r, str.equals("123hello world")); + + va_end(args); +} + +static void test_va_list_prepend(skiatest::Reporter* r, const char format[], ...) { + va_list args; + va_start(args, format); + + SkString str("123"); + str.prependVAList(format, args); + REPORTER_ASSERT(r, str.equals("hello world123")); + + va_end(args); +} + +DEF_TEST(String_VAList, r) { + test_va_list_print(r, "%s %c%c%c%c%c", "hello", 'w', 'o', 'r', 'l', 'd'); + test_va_list_append(r, "%s %c%c%c%c%c", "hello", 'w', 'o', 'r', 'l', 'd'); + test_va_list_prepend(r, "%s %c%c%c%c%c", "hello", 'w', 'o', 'r', 'l', 'd'); +} + +static void test_va_list_overflow_print(skiatest::Reporter* r, const char format[], ...) { + va_list args; + va_start(args, format); + + SkString str("X"); + str.printVAList(format, args); + assert_2000_spaces(r, str); + + va_end(args); +} + +static void test_va_list_overflow_append(skiatest::Reporter* r, const char format[], ...) { + va_list args; + va_start(args, format); + + SkString str("X"); + str.appendVAList(format, args); + REPORTER_ASSERT(r, str[0] == 'X'); + str[0] = ' '; + assert_2000_spaces(r, str); + + va_end(args); +} + +static void test_va_list_overflow_prepend(skiatest::Reporter* r, const char format[], ...) { + va_list args; + va_start(args, format); + + SkString str("X"); + str.prependVAList(format, args); + REPORTER_ASSERT(r, str[1999] == 'X'); + str[1999] = ' '; + assert_2000_spaces(r, str); + + va_end(args); +} + +DEF_TEST(String_VAList_overflow, r) { + test_va_list_overflow_print(r, "%2000s", " "); + test_va_list_overflow_append(r, "%1999s", " "); + test_va_list_overflow_prepend(r, "%1999s", " "); +} + +DEF_TEST(String_resize_to_nothing, r) { + SkString s("hello world!"); + REPORTER_ASSERT(r, s.equals("hello world!")); + s.resize(0); + REPORTER_ASSERT(r, s.equals("")); +} + +DEF_TEST(String_resize_shrink, r) { + SkString s("hello world!"); + REPORTER_ASSERT(r, s.equals("hello world!")); + s.resize(5); + REPORTER_ASSERT(r, s.equals("hello")); +} + +DEF_TEST(String_resize_grow, r) { + SkString s("hello world!"); + REPORTER_ASSERT(r, s.equals("hello world!")); + s.resize(25); + REPORTER_ASSERT(r, 0 == strcmp(s.c_str(), "hello world!")); // no promises about data past \0 + REPORTER_ASSERT(r, s.size() == 25); +} + +DEF_TEST(String_resize_after_assignment, r) { + SkString s("hello world!"); + SkString t; + t = s; + REPORTER_ASSERT(r, s.equals("hello world!")); + s.resize(25); + REPORTER_ASSERT(r, 0 == strcmp(s.c_str(), "hello world!")); + REPORTER_ASSERT(r, s.size() == 25); + s.resize(5); + REPORTER_ASSERT(r, s.equals("hello")); +} + +static void resize_helper_function(skiatest::Reporter* r, SkString s) { + REPORTER_ASSERT(r, s.equals("hello world!")); + s.resize(5); + REPORTER_ASSERT(r, s.equals("hello")); + s.resize(25); + REPORTER_ASSERT(r, 0 == strcmp(s.c_str(), "hello")); + REPORTER_ASSERT(r, s.size() == 25); +} + +DEF_TEST(String_resize_after_copy_construction, r) { + SkString s("hello world!"); + resize_helper_function(r, s); +} diff --git a/tests/SurfaceSemaphoreTest.cpp b/tests/SurfaceSemaphoreTest.cpp index 91519edde4494..990e0783fb6d3 100644 --- a/tests/SurfaceSemaphoreTest.cpp +++ b/tests/SurfaceSemaphoreTest.cpp @@ -9,6 +9,7 @@ #include "include/core/SkSurface.h" #include "include/gpu/GrBackendSemaphore.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrCaps.h" #include "src/gpu/GrContextPriv.h" #include "tests/Test.h" @@ -71,7 +72,7 @@ void draw_child(skiatest::Reporter* reporter, const SkImageInfo childII = SkImageInfo::Make(CHILD_W, CHILD_H, kRGBA_8888_SkColorType, kPremul_SkAlphaType); - GrContext* childCtx = childInfo.grContext(); + auto childCtx = childInfo.directContext(); sk_sp childSurface(SkSurface::MakeRenderTarget(childCtx, SkBudgeted::kNo, childII, 0, kTopLeft_GrSurfaceOrigin, nullptr)); @@ -112,7 +113,7 @@ void surface_semaphore_test(skiatest::Reporter* reporter, const sk_gpu_test::ContextInfo& childInfo1, const sk_gpu_test::ContextInfo& childInfo2, FlushType flushType) { - GrContext* mainCtx = mainInfo.grContext(); + auto mainCtx = mainInfo.directContext(); if (!mainCtx->priv().caps()->semaphoreSupport()) { return; } @@ -209,12 +210,12 @@ DEF_GPUTEST(SurfaceSemaphores, reporter, options) { } skiatest::ReporterContext ctx( reporter, SkString(sk_gpu_test::GrContextFactory::ContextTypeName(contextType))); - if (ctxInfo.grContext()) { + if (ctxInfo.directContext()) { sk_gpu_test::ContextInfo child1 = - factory.getSharedContextInfo(ctxInfo.grContext(), 0); + factory.getSharedContextInfo(ctxInfo.directContext(), 0); sk_gpu_test::ContextInfo child2 = - factory.getSharedContextInfo(ctxInfo.grContext(), 1); - if (!child1.grContext() || !child2.grContext()) { + factory.getSharedContextInfo(ctxInfo.directContext(), 1); + if (!child1.directContext() || !child2.directContext()) { continue; } @@ -226,7 +227,7 @@ DEF_GPUTEST(SurfaceSemaphores, reporter, options) { #endif DEF_GPUTEST_FOR_RENDERING_CONTEXTS(EmptySurfaceSemaphoreTest, reporter, ctxInfo) { - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); if (!ctx->priv().caps()->semaphoreSupport()) { return; } diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp index 7c3924d86508a..c2a81dca166d7 100644 --- a/tests/SurfaceTest.cpp +++ b/tests/SurfaceTest.cpp @@ -13,7 +13,7 @@ #include "include/core/SkRegion.h" #include "include/core/SkSurface.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkAutoPixmapStorage.h" #include "src/core/SkDevice.h" #include "src/core/SkUtils.h" @@ -88,11 +88,11 @@ DEF_TEST(SurfaceEmpty, reporter) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceEmpty_Gpu, reporter, ctxInfo) { const SkImageInfo info = SkImageInfo::Make(0, 0, kN32_SkColorType, kPremul_SkAlphaType); REPORTER_ASSERT(reporter, nullptr == - SkSurface::MakeRenderTarget(ctxInfo.grContext(), SkBudgeted::kNo, info)); + SkSurface::MakeRenderTarget(ctxInfo.directContext(), SkBudgeted::kNo, info)); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrContext_colorTypeSupportedAsSurface, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); for (int ct = 0; ct < kLastEnum_SkColorType; ++ct) { static constexpr int kSize = 10; @@ -201,7 +201,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrContext_colorTypeSupportedAsSurface, report } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrContext_maxSurfaceSamplesForColorType, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); static constexpr int kSize = 10; @@ -281,7 +281,7 @@ DEF_TEST(SurfaceCanvasPeek, reporter) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceCanvasPeek_Gpu, reporter, ctxInfo) { for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { SkImageInfo requestInfo; - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, &requestInfo)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, &requestInfo)); test_canvas_peek(reporter, surface, requestInfo, false); } } @@ -309,7 +309,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceSnapshotAlphaType_Gpu, reporter, ctxIn for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { // GPU doesn't support creating unpremul surfaces, so only test opaque + premul for (auto& at : { kOpaque_SkAlphaType, kPremul_SkAlphaType }) { - auto surface(surface_func(ctxInfo.grContext(), at, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), at, nullptr)); test_snapshot_alphatype(reporter, surface, at); } } @@ -350,11 +350,11 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBackendSurfaceAccessCopyOnWrite_Gpu, r for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { for (auto& accessMode : accessModes) { { - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); test_backend_texture_access_copy_on_write(reporter, surface.get(), accessMode); } { - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); test_backend_rendertarget_access_copy_on_write(reporter, surface.get(), accessMode); } } @@ -389,12 +389,12 @@ static void test_backend_unique_id(skiatest::Reporter* reporter, SkSurface* surf DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBackendHandleAccessIDs_Gpu, reporter, ctxInfo) { for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { { - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); test_backend_unique_id(reporter, surface.get()); } { - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); test_backend_unique_id( reporter, surface.get()); } @@ -463,7 +463,7 @@ DEF_TEST(SurfaceCopyOnWrite, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceCopyOnWrite_Gpu, reporter, ctxInfo) { for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); test_copy_on_write(reporter, surface.get()); } } @@ -483,7 +483,7 @@ DEF_TEST(SurfaceWriteableAfterSnapshotRelease, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceWriteableAfterSnapshotRelease_Gpu, reporter, ctxInfo) { for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); test_writable_after_snapshot_release(reporter, surface.get()); } } @@ -528,8 +528,8 @@ static void test_crbug263329(skiatest::Reporter* reporter, } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceCRBug263329_Gpu, reporter, ctxInfo) { for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { - auto surface1(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); - auto surface2(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface1(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); + auto surface2(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); test_crbug263329(reporter, surface1.get(), surface2.get()); } } @@ -543,7 +543,7 @@ DEF_TEST(SurfaceGetTexture, reporter) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfacepeekTexture_Gpu, reporter, ctxInfo) { for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); sk_sp image(surface->makeImageSnapshot()); REPORTER_ASSERT(reporter, as_IB(image)->isTextureBacked()); @@ -575,7 +575,7 @@ static SkBudgeted is_budgeted(const sk_sp image) { DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceBudget, reporter, ctxInfo) { SkImageInfo info = SkImageInfo::MakeN32Premul(8,8); for (auto budgeted : { SkBudgeted::kNo, SkBudgeted::kYes }) { - auto surface(SkSurface::MakeRenderTarget(ctxInfo.grContext(), budgeted, info)); + auto surface(SkSurface::MakeRenderTarget(ctxInfo.directContext(), budgeted, info)); SkASSERT(surface); REPORTER_ASSERT(reporter, budgeted == is_budgeted(surface)); @@ -628,7 +628,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceNoCanvas_Gpu, reporter, ctxInfo) { for (auto& surface_func : { &create_gpu_surface, &create_gpu_scratch_surface }) { for (auto& test_func : { &test_no_canvas1, &test_no_canvas2 }) { for (auto& mode : modes) { - auto surface(surface_func(ctxInfo.grContext(), kPremul_SkAlphaType, nullptr)); + auto surface(surface_func(ctxInfo.directContext(), kPremul_SkAlphaType, nullptr)); test_func(reporter, surface.get(), mode); } } @@ -795,7 +795,7 @@ static void test_surface_context_clear(skiatest::Reporter* reporter, } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceClear_Gpu, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); // Snaps an image from a surface and then makes a GrSurfaceContext from the image's texture. auto makeImageSurfaceContext = [context](SkSurface* surface) { sk_sp i(surface->makeImageSnapshot()); @@ -897,7 +897,7 @@ static void test_surface_draw_partially( } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfacePartialDraw_Gpu, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); static const SkColor4f kOrigColor { 0.667f, 0.733f, 0.8f, 1 }; @@ -933,7 +933,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceWrappedWithRelease_Gpu, reporter, ctxI const int kWidth = 10; const int kHeight = 10; - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); GrGpu* gpu = ctx->priv().getGpu(); for (bool useTexture : {false, true}) { @@ -975,9 +975,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceWrappedWithRelease_Gpu, reporter, ctxI } surface->getCanvas()->clear(SK_ColorRED); - GrFlushInfo info; - info.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, info); + surface->flush(); ctx->submit(true); // Now exercise the release proc @@ -994,7 +992,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(SurfaceWrappedWithRelease_Gpu, reporter, ctxI } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceAttachStencil_Gpu, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); const GrCaps* caps = context->priv().caps(); if (caps->avoidStencilBuffers()) { @@ -1027,7 +1025,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceAttachStencil_Gpu, reporter, ctxInf } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ReplaceSurfaceBackendTexture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); for (int sampleCnt : {1, 2}) { GrBackendTexture backendTexture1; @@ -1151,7 +1149,7 @@ DEF_TEST(OverdrawSurface_Raster, r) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(OverdrawSurface_Gpu, r, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); sk_sp surface = create_gpu_surface(context); test_overdraw_surface(r, surface.get()); } diff --git a/tests/Test.h b/tests/Test.h index c5ba79fd56f63..270099e8a62c7 100644 --- a/tests/Test.h +++ b/tests/Test.h @@ -118,6 +118,7 @@ typedef bool GrContextTypeFilterFn(GrContextFactoryContextType); extern bool IsGLContextType(GrContextFactoryContextType); extern bool IsVulkanContextType(GrContextFactoryContextType); extern bool IsMetalContextType(GrContextFactoryContextType); +extern bool IsDirect3DContextType(GrContextFactoryContextType); extern bool IsRenderingGLContextType(GrContextFactoryContextType); extern bool IsRenderingGLOrMetalContextType(GrContextFactoryContextType); extern bool IsMockContextType(GrContextFactoryContextType); @@ -214,6 +215,9 @@ static inline SkString reporter_string(const char* fmt, Args... args) { #define DEF_GPUTEST_FOR_METAL_CONTEXT(name, reporter, context_info) \ DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsMetalContextType, \ reporter, context_info, nullptr) +#define DEF_GPUTEST_FOR_D3D_CONTEXT(name, reporter, context_info) \ + DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsDirect3DContextType, \ + reporter, context_info, nullptr) #define REQUIRE_PDF_DOCUMENT(TEST_NAME, REPORTER) \ do { \ diff --git a/tests/TestTest.cpp b/tests/TestTest.cpp index 8039b874fa0f6..13d6ef41ce8d1 100644 --- a/tests/TestTest.cpp +++ b/tests/TestTest.cpp @@ -24,19 +24,19 @@ DEF_GPUTEST(TestGpuFactory, reporter, factory) { // Note: Some of the contexts might not produce a rendering output. DEF_GPUTEST_FOR_ALL_CONTEXTS(TestGpuAllContexts, reporter, ctxInfo) { REPORTER_ASSERT(reporter, reporter); - REPORTER_ASSERT(reporter, ctxInfo.grContext()); + REPORTER_ASSERT(reporter, ctxInfo.directContext()); } // This is an example of a GPU test that tests a property that should work for all GPU contexts that // produce a rendering output. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TestGpuRenderingContexts, reporter, ctxInfo) { REPORTER_ASSERT(reporter, reporter); - REPORTER_ASSERT(reporter, ctxInfo.grContext()); + REPORTER_ASSERT(reporter, ctxInfo.directContext()); } // This is an example of a GPU test that tests a property that uses the mock context. It should // be used if the test tests some behavior that is mocked with the mock context. DEF_GPUTEST_FOR_MOCK_CONTEXT(TestMockContext, reporter, ctxInfo) { REPORTER_ASSERT(reporter, reporter); - REPORTER_ASSERT(reporter, ctxInfo.grContext()); + REPORTER_ASSERT(reporter, ctxInfo.directContext()); } diff --git a/tests/TestUtils.cpp b/tests/TestUtils.cpp index ea76f45dd35ac..6db730bba7cae 100644 --- a/tests/TestUtils.cpp +++ b/tests/TestUtils.cpp @@ -133,6 +133,7 @@ bool CreateBackendTexture(GrContext* context, color, mipMapped, renderable, isProtected, markFinished, &finishedBECreate); if (backendTex->isValid()) { + context->submit(); while (!finishedBECreate) { context->checkAsyncWorkCompletion(); } @@ -141,9 +142,7 @@ bool CreateBackendTexture(GrContext* context, } void DeleteBackendTexture(GrContext* context, const GrBackendTexture& backendTex) { - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - context->flush(flushInfo); + context->flush(); context->submit(true); context->deleteBackendTexture(backendTex); } diff --git a/tests/TextBlobCacheTest.cpp b/tests/TextBlobCacheTest.cpp index 9b110dd7011c2..6e72d9e64ac81 100644 --- a/tests/TextBlobCacheTest.cpp +++ b/tests/TextBlobCacheTest.cpp @@ -17,6 +17,7 @@ #include "include/core/SkSurface.h" #include "include/core/SkTextBlob.h" #include "include/core/SkTypeface.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkGlyphRun.h" #include "tools/fonts/RandomScalerContext.h" @@ -29,6 +30,7 @@ #include "include/gpu/GrContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/text/GrAtlasManager.h" +#include "src/gpu/text/GrTextBlobCache.h" static void draw(SkCanvas* canvas, int redraw, const SkTArray>& blobs) { int yOffset = 0; @@ -50,6 +52,15 @@ static void setup_always_evict_atlas(GrContext* context) { context->priv().getAtlasManager()->setAtlasDimensionsToMinimum_ForTesting(); } +class GrTextBlobTestingPeer { +public: + static void SetBudget(GrTextBlobCache* cache, size_t budget) { + SkAutoMutexExclusive lock{cache->fMutex}; + cache->fSizeBudget = budget; + cache->internalCheckPurge(); + } +}; + // This test hammers the GPU textblobcache and font atlas static void text_blob_cache_inner(skiatest::Reporter* reporter, GrContext* context, int maxTotalText, int maxGlyphID, int maxFamilies, bool normal, @@ -61,7 +72,7 @@ static void text_blob_cache_inner(skiatest::Reporter* reporter, GrContext* conte // configure our context for maximum stressing of cache and atlas if (stressTest) { setup_always_evict_atlas(context); - context->priv().testingOnly_setTextBlobCacheLimit(0); + GrTextBlobTestingPeer::SetBudget(context->priv().getTextBlobCache(), 0); } SkImageInfo info = SkImageInfo::Make(kWidth, kHeight, kRGBA_8888_SkColorType, @@ -160,19 +171,19 @@ static void text_blob_cache_inner(skiatest::Reporter* reporter, GrContext* conte } DEF_GPUTEST_FOR_MOCK_CONTEXT(TextBlobCache, reporter, ctxInfo) { - text_blob_cache_inner(reporter, ctxInfo.grContext(), 1024, 256, 30, true, false); + text_blob_cache_inner(reporter, ctxInfo.directContext(), 1024, 256, 30, true, false); } DEF_GPUTEST_FOR_MOCK_CONTEXT(TextBlobStressCache, reporter, ctxInfo) { - text_blob_cache_inner(reporter, ctxInfo.grContext(), 256, 256, 10, true, true); + text_blob_cache_inner(reporter, ctxInfo.directContext(), 256, 256, 10, true, true); } DEF_GPUTEST_FOR_MOCK_CONTEXT(TextBlobAbnormal, reporter, ctxInfo) { - text_blob_cache_inner(reporter, ctxInfo.grContext(), 256, 256, 10, false, false); + text_blob_cache_inner(reporter, ctxInfo.directContext(), 256, 256, 10, false, false); } DEF_GPUTEST_FOR_MOCK_CONTEXT(TextBlobStressAbnormal, reporter, ctxInfo) { - text_blob_cache_inner(reporter, ctxInfo.grContext(), 256, 256, 10, false, true); + text_blob_cache_inner(reporter, ctxInfo.directContext(), 256, 256, 10, false, true); } static const int kScreenDim = 160; @@ -287,10 +298,10 @@ void write_png(const std::string& filename, const SkBitmap& bitmap) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TextBlobJaggedGlyph, reporter, ctxInfo) { - auto grContext = ctxInfo.grContext(); + auto direct = ctxInfo.directContext(); const SkImageInfo info = SkImageInfo::Make(kScreenDim, kScreenDim, kN32_SkColorType, kPremul_SkAlphaType); - auto surface = SkSurface::MakeRenderTarget(grContext, SkBudgeted::kNo, info); + auto surface = SkSurface::MakeRenderTarget(direct, SkBudgeted::kNo, info); auto blob = make_blob(); @@ -343,10 +354,10 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TextBlobJaggedGlyph, reporter, ctxInfo) { } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TextBlobSmoothScroll, reporter, ctxInfo) { - auto grContext = ctxInfo.grContext(); + auto direct = ctxInfo.directContext(); const SkImageInfo info = SkImageInfo::Make(kScreenDim, kScreenDim, kN32_SkColorType, kPremul_SkAlphaType); - auto surface = SkSurface::MakeRenderTarget(grContext, SkBudgeted::kNo, info); + auto surface = SkSurface::MakeRenderTarget(direct, SkBudgeted::kNo, info); auto movingBlob = make_blob(); diff --git a/tests/TextureBindingsResetTest.cpp b/tests/TextureBindingsResetTest.cpp index cfcff667d7b76..acfbae659234a 100644 --- a/tests/TextureBindingsResetTest.cpp +++ b/tests/TextureBindingsResetTest.cpp @@ -6,6 +6,7 @@ */ #include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/gl/GrGLDefines.h" #include "src/gpu/gl/GrGLGpu.h" @@ -17,7 +18,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(TextureBindingsResetTest, reporter, ctxInfo) { #define GL(F) GR_GL_CALL(ctxInfo.glContext()->gl(), F) - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGpu* gpu = context->priv().getGpu(); GrGLGpu* glGpu = static_cast(context->priv().getGpu()); @@ -135,18 +136,11 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(TextureBindingsResetTest, reporter, ctxInf } if (supportRectangle) { - GrGLuint id = ctxInfo.glContext()->createTextureRectangle(10, 10, GR_GL_RGBA, GR_GL_RGBA, - GR_GL_UNSIGNED_BYTE, nullptr); - // Above texture creation will have messed with GL state and bindings. - resetBindings(); - context->resetContext(); - if (id) { - GrGLTextureInfo info; - info.fTarget = GR_GL_TEXTURE_RECTANGLE; - info.fFormat = GR_GL_RGBA8; - info.fID = id; - GrBackendTexture backendTexture(10, 10, GrMipMapped::kNo, info); - img = SkImage::MakeFromTexture(context, backendTexture, kTopLeft_GrSurfaceOrigin, + auto format = GrBackendFormat::MakeGL(GR_GL_RGBA8, GR_GL_TEXTURE_RECTANGLE); + GrBackendTexture rectangleTexture = + context->createBackendTexture(10, 10, format, GrMipMapped::kNo, GrRenderable::kNo); + if (rectangleTexture.isValid()) { + img = SkImage::MakeFromTexture(context, rectangleTexture, kTopLeft_GrSurfaceOrigin, kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr); REPORTER_ASSERT(reporter, img); surf->getCanvas()->drawImage(img, 0, 0); @@ -155,8 +149,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(TextureBindingsResetTest, reporter, ctxInf context->resetGLTextureBindings(); checkBindings(); resetBindings(); - GL(DeleteTextures(1, &id)); - context->resetContext(); + context->deleteBackendTexture(rectangleTexture); } } diff --git a/tests/TextureProxyTest.cpp b/tests/TextureProxyTest.cpp index 285db98085efc..543b70d272595 100644 --- a/tests/TextureProxyTest.cpp +++ b/tests/TextureProxyTest.cpp @@ -10,6 +10,7 @@ #include "tests/Test.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrProxyProvider.h" #include "src/gpu/GrResourceCache.h" @@ -287,7 +288,7 @@ static void invalidation_and_instantiation_test(GrContext* context, skiatest::Re } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TextureProxyTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); GrResourceCache* cache = context->priv().getResourceCache(); diff --git a/tests/TextureStripAtlasManagerTest.cpp b/tests/TextureStripAtlasManagerTest.cpp index 65cd5234247ab..bfead52bf58b3 100644 --- a/tests/TextureStripAtlasManagerTest.cpp +++ b/tests/TextureStripAtlasManagerTest.cpp @@ -11,6 +11,7 @@ #include "include/core/SkSurface.h" #include "include/effects/SkGradientShader.h" #include "include/effects/SkTableColorFilter.h" +#include "include/gpu/GrDirectContext.h" #include "tests/Test.h" #include "tools/Resources.h" @@ -18,7 +19,7 @@ // The gradient shader will use the texture strip atlas if it has too many colors. Make sure // abandoning the context works. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TextureStripAtlasManagerGradientTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); static const SkColor gColors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN, SK_ColorMAGENTA, SK_ColorYELLOW, @@ -48,7 +49,7 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TextureStripAtlasManagerGradientTest, reporte // The table color filter uses the texture strip atlas. Make sure abandoning the context works. DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TextureStripAtlasManagerColorFilterTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); sk_sp img = GetResourceAsImage("images/mandrill_128.png"); diff --git a/tests/TraceMemoryDumpTest.cpp b/tests/TraceMemoryDumpTest.cpp index 6b1e59a5dc880..d22c20041e0cc 100644 --- a/tests/TraceMemoryDumpTest.cpp +++ b/tests/TraceMemoryDumpTest.cpp @@ -6,6 +6,7 @@ */ #include "include/core/SkTraceMemoryDump.h" +#include "include/gpu/GrDirectContext.h" #include "tests/Test.h" @@ -75,7 +76,7 @@ void ValidateMemoryDumps(skiatest::Reporter* reporter, GrContext* context, size_ #ifdef SK_GL DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_ownedGLBuffer, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGLGpu* gpu = static_cast(context->priv().getGpu()); const size_t kMemorySize = 1024; sk_sp buffer = @@ -85,7 +86,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_ownedGLBuffer, reporter, } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_ownedGLTexture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGLGpu* gpu = static_cast(context->priv().getGpu()); GrGLTexture::Desc desc; @@ -102,7 +103,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_ownedGLTexture, reporter } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_unownedGLTexture, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGLGpu* gpu = static_cast(context->priv().getGpu()); GrGLTexture::Desc desc; @@ -122,7 +123,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_unownedGLTexture, report } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_ownedGLRenderTarget, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGLGpu* gpu = static_cast(context->priv().getGpu()); static constexpr auto kSize = SkISize::Make(64, 64); @@ -140,7 +141,7 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_ownedGLRenderTarget, rep } DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SkTraceMemoryDump_unownedGLRenderTarget, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrGLGpu* gpu = static_cast(context->priv().getGpu()); static constexpr auto kSize = SkISize::Make(64, 64); diff --git a/tests/TransferPixelsTest.cpp b/tests/TransferPixelsTest.cpp index 91f82063658cb..9685743186550 100644 --- a/tests/TransferPixelsTest.cpp +++ b/tests/TransferPixelsTest.cpp @@ -10,6 +10,7 @@ #include "include/core/SkTypes.h" #include "include/core/SkSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrImageInfo.h" @@ -245,7 +246,7 @@ void basic_transfer_to_test(skiatest::Reporter* reporter, GrContext* context, Gr void basic_transfer_from_test(skiatest::Reporter* reporter, const sk_gpu_test::ContextInfo& ctxInfo, GrColorType colorType, GrRenderable renderable) { - auto context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); auto caps = context->priv().caps(); if (GrCaps::kNone_MapFlags == caps->mapBufferFlags()) { return; @@ -400,7 +401,7 @@ void basic_transfer_from_test(skiatest::Reporter* reporter, const sk_gpu_test::C } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TransferPixelsToTextureTest, reporter, ctxInfo) { - if (!ctxInfo.grContext()->priv().caps()->transferFromBufferToTextureSupport()) { + if (!ctxInfo.directContext()->priv().caps()->transferFromBufferToTextureSupport()) { return; } for (auto renderable : {GrRenderable::kNo, GrRenderable::kYes}) { @@ -425,14 +426,14 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TransferPixelsToTextureTest, reporter, ctxInf GrColorType::kRGBA_16161616, GrColorType::kRG_F16, }) { - basic_transfer_to_test(reporter, ctxInfo.grContext(), colorType, renderable); + basic_transfer_to_test(reporter, ctxInfo.directContext(), colorType, renderable); } } } // TODO(bsalomon): Metal DEF_GPUTEST_FOR_RENDERING_CONTEXTS(TransferPixelsFromTextureTest, reporter, ctxInfo) { - if (!ctxInfo.grContext()->priv().caps()->transferFromSurfaceToBufferSupport()) { + if (!ctxInfo.directContext()->priv().caps()->transferFromSurfaceToBufferSupport()) { return; } for (auto renderable : {GrRenderable::kNo, GrRenderable::kYes}) { diff --git a/tests/TriangulatingPathRendererTests.cpp b/tests/TriangulatingPathRendererTests.cpp index ff0fc3a834bdb..99eaac66d551d 100644 --- a/tests/TriangulatingPathRendererTests.cpp +++ b/tests/TriangulatingPathRendererTests.cpp @@ -9,7 +9,7 @@ #include "include/core/SkPath.h" #include "include/effects/SkGradientShader.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrStyle.h" @@ -732,7 +732,7 @@ static void test_path(GrContext* ctx, } DEF_GPUTEST_FOR_ALL_CONTEXTS(TriangulatingPathRendererTests, reporter, ctxInfo) { - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); auto rtc = GrRenderTargetContext::Make( ctx, GrColorType::kRGBA_8888, nullptr, SkBackingFit::kApprox, {800, 800}, 1, GrMipMapped::kNo, GrProtected::kNo, kTopLeft_GrSurfaceOrigin); diff --git a/tests/VkBackendSurfaceTest.cpp b/tests/VkBackendSurfaceTest.cpp index fc5b250aeb49a..8508423ab893a 100644 --- a/tests/VkBackendSurfaceTest.cpp +++ b/tests/VkBackendSurfaceTest.cpp @@ -18,8 +18,8 @@ #include "include/core/SkImage.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/vk/GrVkTypes.h" -#include "src/gpu/GrContextPriv.h" #include "src/gpu/GrRenderTargetContext.h" #include "src/gpu/GrTexture.h" #include "src/gpu/GrTextureProxy.h" @@ -32,7 +32,7 @@ #include "src/image/SkSurface_Gpu.h" DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkImageLayoutTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrBackendTexture backendTex; CreateBackendTexture(context, &backendTex, 1, 1, kRGBA_8888_SkColorType, SkColors::kTransparent, @@ -123,220 +123,6 @@ DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkImageLayoutTest, reporter, ctxInfo) { context->deleteBackendTexture(backendTex); } -static void testing_release_proc(void* ctx) { - int* count = (int*)ctx; - *count += 1; -} - -// Test to make sure we don't call our release proc on an image until we've transferred it back to -// its original queue family. -DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkReleaseExternalQueueTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); - GrGpu* gpu = context->priv().getGpu(); - GrVkGpu* vkGpu = static_cast(gpu); - if (!vkGpu->vkCaps().supportsExternalMemory()) { - return; - } - - for (bool useExternal : {false, true}) { - GrBackendTexture backendTex = context->createBackendTexture(1, 1, - kRGBA_8888_SkColorType, - SkColors::kTransparent, - GrMipMapped::kNo, - GrRenderable::kNo, - GrProtected::kNo); - sk_sp image; - int count = 0; - if (useExternal) { - // Make a backend texture with an external queue family; - GrVkImageInfo vkInfo; - if (!backendTex.getVkImageInfo(&vkInfo)) { - return; - } - vkInfo.fCurrentQueueFamily = VK_QUEUE_FAMILY_EXTERNAL; - - GrBackendTexture vkExtTex(1, 1, vkInfo); - REPORTER_ASSERT(reporter, vkExtTex.isValid()); - image = SkImage::MakeFromTexture(context, vkExtTex, - kTopLeft_GrSurfaceOrigin, - kRGBA_8888_SkColorType, - kPremul_SkAlphaType, - nullptr, testing_release_proc, - (void*)&count); - - } else { - image = SkImage::MakeFromTexture(context, backendTex, - kTopLeft_GrSurfaceOrigin, - kRGBA_8888_SkColorType, - kPremul_SkAlphaType, - nullptr, testing_release_proc, - (void*)&count); - } - - if (!image) { - continue; - } - - REPORTER_ASSERT(reporter, !count); - - SkImage_GpuBase* gpuImage = static_cast(as_IB(image)); - GrTexture* texture = gpuImage->getTexture(); - REPORTER_ASSERT(reporter, texture); - GrVkTexture* vkTex = static_cast(texture); - - if (useExternal) { - // Testing helper so we claim that we don't need to transition from our fake external - // queue first. - vkTex->setCurrentQueueFamilyToGraphicsQueue(vkGpu); - } - - image.reset(); - - // Resetting the image should only trigger the release proc if we are not using an external - // queue. When using an external queue when we free the SkImage and the underlying - // GrTexture, we submit a queue transition on the command buffer. - if (useExternal) { - REPORTER_ASSERT(reporter, !count); - } else { - REPORTER_ASSERT(reporter, count == 1); - } - - gpu->testingOnly_flushGpuAndSync(); - - // Now that we flushed and waited the release proc should have be triggered. - REPORTER_ASSERT(reporter, count == 1); - - context->deleteBackendTexture(backendTex); - } -} - -// Test to make sure we transition to the original queue when requests for prepareforexternalio are -// in flush calls -DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkPrepareForExternalIOQueueTransitionTest, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); - - GrVkGpu* vkGpu = static_cast(context->priv().getGpu()); - if (!vkGpu->vkCaps().supportsExternalMemory()) { - return; - } - - for (bool useSurface : {false, true}) { - for (bool preparePresent : {false, true}) { - if (!useSurface && preparePresent) { - // We don't set textures to present - continue; - } - GrBackendTexture backendTex = context->createBackendTexture( - 4, 4, kRGBA_8888_SkColorType, - SkColors::kTransparent, GrMipMapped::kNo, - useSurface ? GrRenderable::kYes : GrRenderable::kNo, - GrProtected::kNo); - - // Make a backend texture with an external queue family and general layout. - GrVkImageInfo vkInfo; - if (!backendTex.getVkImageInfo(&vkInfo)) { - return; - } - - // We can't actually make an external texture in our test. However, we lie and say it is - // and then will manually go and swap the queue to the graphics queue once we wrap it. - if (preparePresent) { - // We don't transition to present to things that are going to external for foreign - // queues. - vkInfo.fCurrentQueueFamily = vkGpu->queueIndex(); - } else { - vkInfo.fCurrentQueueFamily = VK_QUEUE_FAMILY_EXTERNAL; - } - - GrBackendTexture vkExtTex(1, 1, vkInfo); - - sk_sp image; - sk_sp surface; - GrTexture* texture; - if (useSurface) { - surface = SkSurface::MakeFromBackendTexture(context, vkExtTex, - kTopLeft_GrSurfaceOrigin, 0, kRGBA_8888_SkColorType, nullptr, nullptr); - REPORTER_ASSERT(reporter, surface.get()); - if (!surface) { - continue; - } - SkSurface_Gpu* gpuSurface = static_cast(surface.get()); - auto* rtc = gpuSurface->getDevice()->accessRenderTargetContext(); - texture = rtc->asTextureProxy()->peekTexture(); - } else { - image = SkImage::MakeFromTexture(context, vkExtTex, kTopLeft_GrSurfaceOrigin, - kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr, nullptr, nullptr); - - REPORTER_ASSERT(reporter, image.get()); - if (!image) { - continue; - } - - SkImage_GpuBase* gpuImage = static_cast(as_IB(image)); - texture = gpuImage->getTexture(); - } - - REPORTER_ASSERT(reporter, texture); - GrVkTexture* vkTex = static_cast(texture); - - // Testing helper so we claim that we don't need to transition from our fake external - // queue first. - vkTex->setCurrentQueueFamilyToGraphicsQueue(vkGpu); - - GrBackendTexture newBackendTexture; - if (useSurface) { - newBackendTexture = surface->getBackendTexture( - SkSurface::kFlushRead_TextureHandleAccess); - } else { - newBackendTexture = image->getBackendTexture(false); - } - GrVkImageInfo newVkInfo; - REPORTER_ASSERT(reporter, newBackendTexture.getVkImageInfo(&newVkInfo)); - REPORTER_ASSERT(reporter, newVkInfo.fCurrentQueueFamily == vkGpu->queueIndex()); - VkImageLayout oldLayout = newVkInfo.fImageLayout; - - GrPrepareForExternalIORequests externalRequests; - SkImage* imagePtr; - SkSurface* surfacePtr; - if (useSurface) { - externalRequests.fNumSurfaces = 1; - surfacePtr = surface.get(); - externalRequests.fSurfaces = &surfacePtr; - externalRequests.fPrepareSurfaceForPresent = &preparePresent; - } else { - externalRequests.fNumImages = 1; - imagePtr = image.get(); - externalRequests.fImages = &imagePtr; - - } - context->flush(GrFlushInfo(), externalRequests); - context->submit(); - - if (useSurface) { - newBackendTexture = surface->getBackendTexture( - SkSurface::kFlushRead_TextureHandleAccess); - } else { - newBackendTexture = image->getBackendTexture(false); - } - REPORTER_ASSERT(reporter, newBackendTexture.getVkImageInfo(&newVkInfo)); - if (preparePresent) { - REPORTER_ASSERT(reporter, newVkInfo.fCurrentQueueFamily == vkGpu->queueIndex()); - REPORTER_ASSERT(reporter, - newVkInfo.fImageLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); - } else { - REPORTER_ASSERT(reporter, newVkInfo.fCurrentQueueFamily == VK_QUEUE_FAMILY_EXTERNAL); - REPORTER_ASSERT(reporter, newVkInfo.fImageLayout == oldLayout); - } - - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - context->flush(flushInfo); - context->submit(true); - context->deleteBackendTexture(backendTex); - } - } -} - // This test is disabled because it executes illegal vulkan calls which cause the validations layers // to fail and makes us assert. Once fixed to use a valid vulkan call sequence it should be // renenabled, see skbug.com/8936. diff --git a/tests/VkDrawableTest.cpp b/tests/VkDrawableTest.cpp index a139742f25caf..d3e6e8fd36196 100644 --- a/tests/VkDrawableTest.cpp +++ b/tests/VkDrawableTest.cpp @@ -16,6 +16,7 @@ #include "include/core/SkDrawable.h" #include "include/core/SkSurface.h" #include "include/gpu/GrBackendDrawableInfo.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/vk/GrVkGpu.h" #include "src/gpu/vk/GrVkInterface.h" @@ -263,7 +264,7 @@ void draw_drawable_test(skiatest::Reporter* reporter, GrContext* context, GrCont } DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkDrawableTest, reporter, ctxInfo) { - draw_drawable_test(reporter, ctxInfo.grContext(), nullptr); + draw_drawable_test(reporter, ctxInfo.directContext(), nullptr); } DEF_GPUTEST(VkDrawableImportTest, reporter, options) { @@ -277,14 +278,14 @@ DEF_GPUTEST(VkDrawableImportTest, reporter, options) { sk_gpu_test::ContextInfo ctxInfo = factory.getContextInfo(contextType); skiatest::ReporterContext ctx( reporter, SkString(sk_gpu_test::GrContextFactory::ContextTypeName(contextType))); - if (ctxInfo.grContext()) { + if (ctxInfo.directContext()) { sk_gpu_test::ContextInfo child = - factory.getSharedContextInfo(ctxInfo.grContext(), 0); - if (!child.grContext()) { + factory.getSharedContextInfo(ctxInfo.directContext(), 0); + if (!child.directContext()) { continue; } - draw_drawable_test(reporter, ctxInfo.grContext(), child.grContext()); + draw_drawable_test(reporter, ctxInfo.directContext(), child.directContext()); } } } diff --git a/tests/VkHardwareBufferTest.cpp b/tests/VkHardwareBufferTest.cpp index 613615b7bddfa..16811b957ad93 100644 --- a/tests/VkHardwareBufferTest.cpp +++ b/tests/VkHardwareBufferTest.cpp @@ -15,7 +15,7 @@ #include "include/core/SkImage.h" #include "include/core/SkSurface.h" #include "include/gpu/GrBackendSemaphore.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "include/gpu/vk/GrVkBackendContext.h" #include "include/gpu/vk/GrVkExtensions.h" #include "src/core/SkAutoMalloc.h" @@ -60,7 +60,7 @@ class BaseTestHelper { virtual void makeCurrent() = 0; - virtual GrContext* grContext() = 0; + virtual GrDirectContext* directContext() = 0; int getFdHandle() { return fFdHandle; } @@ -110,7 +110,7 @@ class EGLTestHelper : public BaseTestHelper { void makeCurrent() override { fGLCtx->makeCurrent(); } - GrContext* grContext() override { return fGrContext; } + GrDirectContext* directContext() override { return fDirectContext; } private: bool importHardwareBuffer(skiatest::Reporter* reporter, AHardwareBuffer* buffer); @@ -136,14 +136,14 @@ class EGLTestHelper : public BaseTestHelper { sk_gpu_test::ContextInfo fGLESContextInfo; sk_gpu_test::GLTestContext* fGLCtx = nullptr; - GrContext* fGrContext = nullptr; + GrDirectContext* fDirectContext = nullptr; }; bool EGLTestHelper::init(skiatest::Reporter* reporter) { fGLESContextInfo = fFactory.getContextInfo(sk_gpu_test::GrContextFactory::kGLES_ContextType); - fGrContext = fGLESContextInfo.grContext(); + fDirectContext = fGLESContextInfo.directContext(); fGLCtx = fGLESContextInfo.glContext(); - if (!fGrContext || !fGLCtx) { + if (!fDirectContext || !fGLCtx) { return false; } @@ -217,7 +217,7 @@ bool EGLTestHelper::init(skiatest::Reporter* reporter) { } bool EGLTestHelper::importHardwareBuffer(skiatest::Reporter* reporter, AHardwareBuffer* buffer) { - GrGLClearErr(fGLCtx->gl()); + while (fGLCtx->gl()->fFunctions.fGetError() != GR_GL_NO_ERROR) {} EGLClientBuffer eglClientBuffer = fEGLGetNativeClientBufferANDROID(buffer); EGLint eglAttribs[] = { EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, @@ -237,19 +237,18 @@ bool EGLTestHelper::importHardwareBuffer(skiatest::Reporter* reporter, AHardware return false; } GR_GL_CALL_NOERRCHECK(fGLCtx->gl(), BindTexture(GR_GL_TEXTURE_2D, fTexID)); - if (GR_GL_GET_ERROR(fGLCtx->gl()) != GR_GL_NO_ERROR) { + if (fGLCtx->gl()->fFunctions.fGetError() != GR_GL_NO_ERROR) { ERRORF(reporter, "Failed to bind GL Texture"); return false; } fEGLImageTargetTexture2DOES(GL_TEXTURE_2D, fImage); - GLenum status = GL_NO_ERROR; - if ((status = glGetError()) != GL_NO_ERROR) { - ERRORF(reporter, "EGLImageTargetTexture2DOES failed (%#x)", (int) status); + if (GrGLenum error = fGLCtx->gl()->fFunctions.fGetError(); error != GR_GL_NO_ERROR) { + ERRORF(reporter, "EGLImageTargetTexture2DOES failed (%#x)", (int) error); return false; } - fGrContext->resetContext(kTextureBinding_GrGLBackendState); + fDirectContext->resetContext(kTextureBinding_GrGLBackendState); return true; } @@ -266,12 +265,12 @@ sk_sp EGLTestHelper::importHardwareBufferForRead(skiatest::Reporter* re GrBackendTexture backendTex(DEV_W, DEV_H, GrMipMapped::kNo, textureInfo); REPORTER_ASSERT(reporter, backendTex.isValid()); - sk_sp image = SkImage::MakeFromTexture(fGrContext, - backendTex, - kTopLeft_GrSurfaceOrigin, - kRGBA_8888_SkColorType, - kPremul_SkAlphaType, - nullptr); + sk_sp image = SkImage::MakeFromTexture(fDirectContext, + backendTex, + kTopLeft_GrSurfaceOrigin, + kRGBA_8888_SkColorType, + kPremul_SkAlphaType, + nullptr); if (!image) { ERRORF(reporter, "Failed to make wrapped GL SkImage"); @@ -294,7 +293,7 @@ sk_sp EGLTestHelper::importHardwareBufferForWrite(skiatest::Reporter* GrBackendTexture backendTex(DEV_W, DEV_H, GrMipMapped::kNo, textureInfo); REPORTER_ASSERT(reporter, backendTex.isValid()); - sk_sp surface = SkSurface::MakeFromBackendTexture(fGrContext, + sk_sp surface = SkSurface::MakeFromBackendTexture(fDirectContext, backendTex, kTopLeft_GrSurfaceOrigin, 0, @@ -358,10 +357,8 @@ bool EGLTestHelper::importAndWaitOnSemaphore(skiatest::Reporter* reporter, int f } void EGLTestHelper::doClientSync() { - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - this->grContext()->flush(flushInfo); - this->grContext()->submit(true); + this->directContext()->flush(); + this->directContext()->submit(true); } #endif // SK_GL @@ -407,7 +404,7 @@ class VulkanTestHelper : public BaseTestHelper { } } void cleanup() override { - fGrContext.reset(); + fDirectContext.reset(); this->releaseImage(); if (fSignalSemaphore != VK_NULL_HANDLE) { fVkDestroySemaphore(fDevice, fSignalSemaphore, nullptr); @@ -438,11 +435,11 @@ class VulkanTestHelper : public BaseTestHelper { bool init(skiatest::Reporter* reporter) override; void doClientSync() override { - if (!fGrContext) { + if (!fDirectContext) { return; } - fGrContext->priv().getGpu()->testingOnly_flushGpuAndSync(); + fDirectContext->priv().getGpu()->testingOnly_flushGpuAndSync(); } bool flushSurfaceAndSignalSemaphore(skiatest::Reporter* reporter, sk_sp) override; @@ -457,7 +454,7 @@ class VulkanTestHelper : public BaseTestHelper { void makeCurrent() override {} - GrContext* grContext() override { return fGrContext.get(); } + GrDirectContext* directContext() override { return fDirectContext.get(); } private: bool checkOptimalHardwareBuffer(skiatest::Reporter* reporter); @@ -505,7 +502,7 @@ class VulkanTestHelper : public BaseTestHelper { VkDevice fDevice = VK_NULL_HANDLE; GrVkBackendContext fBackendContext; - sk_sp fGrContext; + sk_sp fDirectContext; }; bool VulkanTestHelper::init(skiatest::Reporter* reporter) { @@ -579,9 +576,13 @@ bool VulkanTestHelper::init(skiatest::Reporter* reporter) { ACQUIRE_DEVICE_VK_PROC(ImportSemaphoreFdKHR); ACQUIRE_DEVICE_VK_PROC(DestroySemaphore); - fGrContext = GrContext::MakeVulkan(fBackendContext); - REPORTER_ASSERT(reporter, fGrContext.get()); - if (!fGrContext) { + // CONTEXT TODO: MakeVulkan should return an sk_sp + auto tmp = GrContext::MakeVulkan(fBackendContext); + if (tmp) { + fDirectContext = sk_ref_sp(tmp->asDirectContext()); + } + REPORTER_ASSERT(reporter, fDirectContext.get()); + if (!fDirectContext) { return false; } @@ -805,7 +806,7 @@ sk_sp VulkanTestHelper::importHardwareBufferForRead(skiatest::Reporter* GrBackendTexture backendTex(DEV_W, DEV_H, imageInfo); - sk_sp wrappedImage = SkImage::MakeFromTexture(fGrContext.get(), + sk_sp wrappedImage = SkImage::MakeFromTexture(fDirectContext.get(), backendTex, kTopLeft_GrSurfaceOrigin, kRGBA_8888_SkColorType, @@ -831,8 +832,8 @@ bool VulkanTestHelper::flushSurfaceAndSignalSemaphore(skiatest::Reporter* report GrFlushInfo info; info.fNumSemaphores = 1; info.fSignalSemaphores = &semaphore; - GrSemaphoresSubmitted submitted = fGrContext->flush(info); - fGrContext->submit(); + GrSemaphoresSubmitted submitted = fDirectContext->flush(info); + fDirectContext->submit(); if (GrSemaphoresSubmitted::kNo == submitted) { ERRORF(reporter, "Failing call to flush on GrContext"); return false; @@ -967,7 +968,7 @@ sk_sp VulkanTestHelper::importHardwareBufferForWrite(skiatest::Report GrBackendTexture backendTex(DEV_W, DEV_H, imageInfo); - sk_sp surface = SkSurface::MakeFromBackendTexture(fGrContext.get(), + sk_sp surface = SkSurface::MakeFromBackendTexture(fDirectContext.get(), backendTex, kTopLeft_GrSurfaceOrigin, 0, @@ -1242,13 +1243,13 @@ void run_test(skiatest::Reporter* reporter, const GrContextOptions& options, return; } - GrContext* grContext = dstHelper->grContext(); + auto direct = dstHelper->directContext(); // Make SkSurface to render wrapped HWB into. SkImageInfo imageInfo = SkImageInfo::Make(DEV_W, DEV_H, kRGBA_8888_SkColorType, kPremul_SkAlphaType, nullptr); - sk_sp dstSurf = SkSurface::MakeRenderTarget(grContext, + sk_sp dstSurf = SkSurface::MakeRenderTarget(direct, SkBudgeted::kNo, imageInfo, 0, kTopLeft_GrSurfaceOrigin, nullptr, false); diff --git a/tests/VkProtectedContextTest.cpp b/tests/VkProtectedContextTest.cpp index c238d6db87f1d..db30f8b693aaf 100644 --- a/tests/VkProtectedContextTest.cpp +++ b/tests/VkProtectedContextTest.cpp @@ -20,165 +20,40 @@ #include "include/gpu/vk/GrVkExtensions.h" #include "tests/Test.h" #include "tools/gpu/GrContextFactory.h" -#include "tools/gpu/vk/VkTestUtils.h" +#include "tools/gpu/vk/VkTestHelper.h" -namespace { - -#define DECLARE_VK_PROC(name) PFN_vk##name fVk##name - -#define ACQUIRE_INST_VK_PROC(name) \ - fVk##name = reinterpret_cast(getProc("vk" #name, fBackendContext.fInstance,\ - VK_NULL_HANDLE)); \ - if (fVk##name == nullptr) { \ - ERRORF(reporter, "Function ptr for vk%s could not be acquired\n", #name); \ - return false; \ - } - -#define ACQUIRE_DEVICE_VK_PROC(name) \ - fVk##name = reinterpret_cast(getProc("vk" #name, VK_NULL_HANDLE, fDevice)); \ - if (fVk##name == nullptr) { \ - ERRORF(reporter, "Function ptr for vk%s could not be acquired\n", #name); \ - return false; \ - } - -class VulkanTestHelper { -public: - VulkanTestHelper(bool isProtected) : fIsProtected(isProtected) {} - - ~VulkanTestHelper() { - cleanup(); - } - - bool init(skiatest::Reporter* reporter); - - GrContext* grContext() { return fGrContext.get(); } - - sk_sp createSkSurface(skiatest::Reporter* reporter); - - private: - void cleanup(); - - DECLARE_VK_PROC(DestroyInstance); - DECLARE_VK_PROC(DeviceWaitIdle); - DECLARE_VK_PROC(DestroyDevice); - - bool fIsProtected = false; - VkDevice fDevice = VK_NULL_HANDLE; - - GrVkExtensions* fExtensions = nullptr; - VkPhysicalDeviceFeatures2* fFeatures = nullptr; - VkDebugReportCallbackEXT fDebugCallback = VK_NULL_HANDLE; - PFN_vkDestroyDebugReportCallbackEXT fDestroyDebugCallback = nullptr; - GrVkBackendContext fBackendContext; - sk_sp fGrContext; -}; - -} // namespace - -bool VulkanTestHelper::init(skiatest::Reporter* reporter) { - PFN_vkGetInstanceProcAddr instProc; - PFN_vkGetDeviceProcAddr devProc; - if (!sk_gpu_test::LoadVkLibraryAndGetProcAddrFuncs(&instProc, &devProc)) { - return false; - } - auto getProc = [&instProc, &devProc](const char* proc_name, - VkInstance instance, VkDevice device) { - if (device != VK_NULL_HANDLE) { - return devProc(device, proc_name); - } - return instProc(instance, proc_name); - }; - - fExtensions = new GrVkExtensions(); - fFeatures = new VkPhysicalDeviceFeatures2; - memset(fFeatures, 0, sizeof(VkPhysicalDeviceFeatures2)); - fFeatures->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; - fFeatures->pNext = nullptr; - - fBackendContext.fInstance = VK_NULL_HANDLE; - fBackendContext.fDevice = VK_NULL_HANDLE; - - if (!sk_gpu_test::CreateVkBackendContext(getProc, &fBackendContext, fExtensions, - fFeatures, &fDebugCallback, nullptr, - sk_gpu_test::CanPresentFn(), fIsProtected)) { - return false; - } - fDevice = fBackendContext.fDevice; - - if (fDebugCallback != VK_NULL_HANDLE) { - fDestroyDebugCallback = (PFN_vkDestroyDebugReportCallbackEXT) instProc( - fBackendContext.fInstance, "vkDestroyDebugReportCallbackEXT"); - } - ACQUIRE_INST_VK_PROC(DestroyInstance) - ACQUIRE_INST_VK_PROC(DeviceWaitIdle) - ACQUIRE_INST_VK_PROC(DestroyDevice) - - fGrContext = GrContext::MakeVulkan(fBackendContext); - if (!fGrContext) { - return false; - } - - return true; -} - -void VulkanTestHelper::cleanup() { - fGrContext.reset(); - - fBackendContext.fMemoryAllocator.reset(); - if (fDevice != VK_NULL_HANDLE) { - fVkDeviceWaitIdle(fDevice); - fVkDestroyDevice(fDevice, nullptr); - fDevice = VK_NULL_HANDLE; - } - if (fDebugCallback != VK_NULL_HANDLE) { - fDestroyDebugCallback(fBackendContext.fInstance, fDebugCallback, nullptr); - } - - if (fBackendContext.fInstance != VK_NULL_HANDLE) { - fVkDestroyInstance(fBackendContext.fInstance, nullptr); - fBackendContext.fInstance = VK_NULL_HANDLE; - } - - delete fExtensions; - - sk_gpu_test::FreeVulkanFeaturesStructs(fFeatures); - delete fFeatures; -} - -sk_sp VulkanTestHelper::createSkSurface(skiatest::Reporter* reporter) { +static sk_sp create_protected_sksurface(GrContext* context, + skiatest::Reporter* reporter) { const int kW = 8; const int kH = 8; - GrBackendTexture backendTex = this->grContext()->createBackendTexture( - kW, kH, kRGBA_8888_SkColorType, GrMipMapped::kNo, GrRenderable::kYes, - fIsProtected ? GrProtected::kYes : GrProtected::kNo); + GrBackendTexture backendTex = context->createBackendTexture( + kW, kH, kRGBA_8888_SkColorType, GrMipMapped::kNo, GrRenderable::kYes, GrProtected::kYes); REPORTER_ASSERT(reporter, backendTex.isValid()); - REPORTER_ASSERT(reporter, backendTex.isProtected() == fIsProtected); + REPORTER_ASSERT(reporter, backendTex.isProtected()); - SkSurfaceProps surfaceProps = - SkSurfaceProps(0, SkSurfaceProps::kLegacyFontHost_InitType); + SkSurfaceProps surfaceProps = SkSurfaceProps(0, SkSurfaceProps::kLegacyFontHost_InitType); sk_sp surface = SkSurface::MakeFromBackendTexture( - this->grContext(), backendTex, kTopLeft_GrSurfaceOrigin, 1, + context, backendTex, kTopLeft_GrSurfaceOrigin, 1, kRGBA_8888_SkColorType, nullptr, &surfaceProps); REPORTER_ASSERT(reporter, surface); return surface; } DEF_GPUTEST(VkProtectedContext_CreateNonprotectedContext, reporter, options) { - auto nonprotectedTestHelper = std::make_unique(false); - REPORTER_ASSERT(reporter, nonprotectedTestHelper->init(reporter)); + auto nonprotectedTestHelper = std::make_unique(false); + REPORTER_ASSERT(reporter, nonprotectedTestHelper->init()); } - DEF_GPUTEST(VkProtectedContext_CreateProtectedContext, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } } DEF_GPUTEST(VkProtectedContext_CreateProtectedSkSurface, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); @@ -192,8 +67,7 @@ DEF_GPUTEST(VkProtectedContext_CreateProtectedSkSurface, reporter, options) { REPORTER_ASSERT(reporter, backendTex.isValid()); REPORTER_ASSERT(reporter, backendTex.isProtected()); - SkSurfaceProps surfaceProps = - SkSurfaceProps(0, SkSurfaceProps::kLegacyFontHost_InitType); + SkSurfaceProps surfaceProps = SkSurfaceProps(0, SkSurfaceProps::kLegacyFontHost_InitType); sk_sp surface = SkSurface::MakeFromBackendTextureAsRenderTarget( protectedTestHelper->grContext(), backendTex, kTopLeft_GrSurfaceOrigin, 1, kRGBA_8888_SkColorType, nullptr, &surfaceProps); @@ -203,8 +77,8 @@ DEF_GPUTEST(VkProtectedContext_CreateProtectedSkSurface, reporter, options) { } DEF_GPUTEST(VkProtectedContext_CreateNonprotectedTextureInProtectedContext, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); @@ -219,8 +93,8 @@ DEF_GPUTEST(VkProtectedContext_CreateNonprotectedTextureInProtectedContext, repo } DEF_GPUTEST(VkProtectedContext_CreateProtectedTextureInNonprotectedContext, reporter, options) { - auto protectedTestHelper = std::make_unique(false); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(false); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); @@ -235,16 +109,15 @@ DEF_GPUTEST(VkProtectedContext_CreateProtectedTextureInNonprotectedContext, repo } DEF_GPUTEST(VkProtectedContext_ReadFromProtectedSurface, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); - auto surface = protectedTestHelper->createSkSurface(reporter); + auto surface = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface); - REPORTER_ASSERT(reporter, - !surface->readPixels(SkImageInfo(), nullptr, 8, 0, 0)); + REPORTER_ASSERT(reporter, !surface->readPixels(SkImageInfo(), nullptr, 8, 0, 0)); protectedTestHelper->grContext()->deleteBackendTexture( surface->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); @@ -266,13 +139,13 @@ static void async_callback(void* c, std::unique_ptr(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); - auto surface = protectedTestHelper->createSkSurface(reporter); + auto surface = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface); AsyncContext cbContext; const auto image_info = SkImageInfo::Make(10, 10, kRGBA_8888_SkColorType, kPremul_SkAlphaType, @@ -292,13 +165,13 @@ DEF_GPUTEST(VkProtectedContext_AsyncReadFromProtectedSurface, reporter, options) } DEF_GPUTEST(VkProtectedContext_DrawRectangle, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); - auto surface = protectedTestHelper->createSkSurface(reporter); + auto surface = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface); SkCanvas* canvas = surface->getCanvas(); REPORTER_ASSERT(reporter, canvas); @@ -306,22 +179,20 @@ DEF_GPUTEST(VkProtectedContext_DrawRectangle, reporter, options) { paint.setColor(SK_ColorBLACK); canvas->drawRect(SkRect::MakeWH(4, 4), paint); - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface->flush(); surface->getContext()->submit(true); protectedTestHelper->grContext()->deleteBackendTexture( surface->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); } DEF_GPUTEST(VkProtectedContext_DrawRectangleWithAntiAlias, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); - auto surface = protectedTestHelper->createSkSurface(reporter); + auto surface = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface); SkCanvas* canvas = surface->getCanvas(); REPORTER_ASSERT(reporter, canvas); @@ -330,22 +201,20 @@ DEF_GPUTEST(VkProtectedContext_DrawRectangleWithAntiAlias, reporter, options) { paint.setAntiAlias(true); canvas->drawRect(SkRect::MakeWH(4, 4), paint); - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface->flush(); surface->getContext()->submit(true); protectedTestHelper->grContext()->deleteBackendTexture( surface->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); } DEF_GPUTEST(VkProtectedContext_DrawRectangleWithBlendMode, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); - auto surface = protectedTestHelper->createSkSurface(reporter); + auto surface = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface); SkCanvas* canvas = surface->getCanvas(); REPORTER_ASSERT(reporter, canvas); @@ -354,22 +223,20 @@ DEF_GPUTEST(VkProtectedContext_DrawRectangleWithBlendMode, reporter, options) { paint.setBlendMode(SkBlendMode::kColorDodge); canvas->drawRect(SkRect::MakeWH(4, 4), paint); - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface->flush(); surface->getContext()->submit(true); protectedTestHelper->grContext()->deleteBackendTexture( surface->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); } DEF_GPUTEST(VkProtectedContext_DrawRectangleWithFilter, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); - auto surface = protectedTestHelper->createSkSurface(reporter); + auto surface = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface); SkCanvas* canvas = surface->getCanvas(); REPORTER_ASSERT(reporter, canvas); @@ -380,22 +247,20 @@ DEF_GPUTEST(VkProtectedContext_DrawRectangleWithFilter, reporter, options) { SkBlurStyle::kOuter_SkBlurStyle, 1.1f)); canvas->drawRect(SkRect::MakeWH(4, 4), paint); - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface->flush(); surface->getContext()->submit(true); protectedTestHelper->grContext()->deleteBackendTexture( surface->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); } DEF_GPUTEST(VkProtectedContext_DrawThinPath, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); - auto surface = protectedTestHelper->createSkSurface(reporter); + auto surface = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface); SkCanvas* canvas = surface->getCanvas(); REPORTER_ASSERT(reporter, canvas); @@ -406,22 +271,20 @@ DEF_GPUTEST(VkProtectedContext_DrawThinPath, reporter, options) { paint.setStrokeWidth(.4f); canvas->drawPath(SkPath().moveTo(4, 4).lineTo(6, 6), paint); - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface->flush(); surface->getContext()->submit(true); protectedTestHelper->grContext()->deleteBackendTexture( surface->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); } DEF_GPUTEST(VkProtectedContext_SaveLayer, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); - auto surface = protectedTestHelper->createSkSurface(reporter); + auto surface = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface); SkCanvas* canvas = surface->getCanvas(); REPORTER_ASSERT(reporter, canvas); @@ -431,9 +294,7 @@ DEF_GPUTEST(VkProtectedContext_SaveLayer, reporter, options) { canvas->drawRect(SkRect::MakeWH(4, 4), paint); canvas->restore(); - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface->flush(); surface->getContext()->submit(true); protectedTestHelper->grContext()->deleteBackendTexture( surface->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); @@ -441,33 +302,31 @@ DEF_GPUTEST(VkProtectedContext_SaveLayer, reporter, options) { DEF_GPUTEST(VkProtectedContext_DrawProtectedImageOnProtectedSurface, reporter, options) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); // Create protected image. - auto surface1 = protectedTestHelper->createSkSurface(reporter); + auto surface1 = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface1); auto image = surface1->makeImageSnapshot(); REPORTER_ASSERT(reporter, image); // Create protected canvas. - auto surface2 = protectedTestHelper->createSkSurface(reporter); + auto surface2 = create_protected_sksurface(protectedTestHelper->grContext(), reporter); REPORTER_ASSERT(reporter, surface2); SkCanvas* canvas = surface2->getCanvas(); REPORTER_ASSERT(reporter, canvas); canvas->drawImage(image, 0, 0); - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface1->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface1->flush(); surface1->getContext()->submit(true); protectedTestHelper->grContext()->deleteBackendTexture( surface1->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); - surface2->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface2->flush(); surface2->getContext()->submit(true); protectedTestHelper->grContext()->deleteBackendTexture( surface2->getBackendTexture(SkSurface::kFlushRead_BackendHandleAccess)); @@ -479,8 +338,8 @@ DEF_GPUTEST(VkProtectedContext_DrawProtectedImageOnProtectedSurface, reporter, o void DDLMakeRenderTargetTestImpl(GrContext* context, skiatest::Reporter* reporter); DEF_GPUTEST(VkProtectedContext_DDLMakeRenderTargetTest, reporter, ctxInfo) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); @@ -491,8 +350,8 @@ DEF_GPUTEST(VkProtectedContext_DDLMakeRenderTargetTest, reporter, ctxInfo) { void DDLSurfaceCharacterizationTestImpl(GrContext* context, skiatest::Reporter* reporter); DEF_GPUTEST(VkProtectedContext_DDLSurfaceCharacterizationTest, reporter, ctxInfo) { - auto protectedTestHelper = std::make_unique(true); - if (!protectedTestHelper->init(reporter)) { + auto protectedTestHelper = std::make_unique(true); + if (!protectedTestHelper->init()) { return; } REPORTER_ASSERT(reporter, protectedTestHelper->grContext() != nullptr); diff --git a/tests/VkWrapTests.cpp b/tests/VkWrapTests.cpp index bde86a156455a..3f37114640edd 100644 --- a/tests/VkWrapTests.cpp +++ b/tests/VkWrapTests.cpp @@ -14,6 +14,7 @@ #include "include/gpu/vk/GrVkVulkan.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrRenderTarget.h" #include "src/gpu/GrTexture.h" @@ -174,9 +175,11 @@ void wrap_trt_test(skiatest::Reporter* reporter, GrContext* context) { } DEF_GPUTEST_FOR_VULKAN_CONTEXT(VkWrapTests, reporter, ctxInfo) { - wrap_tex_test(reporter, ctxInfo.grContext()); - wrap_rt_test(reporter, ctxInfo.grContext()); - wrap_trt_test(reporter, ctxInfo.grContext()); + auto direct = ctxInfo.directContext(); + + wrap_tex_test(reporter, direct); + wrap_rt_test(reporter, direct); + wrap_trt_test(reporter, direct); } #endif diff --git a/tests/VkYcbcrSamplerTest.cpp b/tests/VkYcbcrSamplerTest.cpp index b398c0c49d6df..1a57d8bdbeb4d 100644 --- a/tests/VkYcbcrSamplerTest.cpp +++ b/tests/VkYcbcrSamplerTest.cpp @@ -13,330 +13,13 @@ #include "include/core/SkImage.h" #include "include/core/SkSurface.h" #include "include/gpu/GrContext.h" -#include "include/gpu/vk/GrVkBackendContext.h" -#include "include/gpu/vk/GrVkExtensions.h" #include "tests/Test.h" -#include "tools/gpu/vk/VkTestUtils.h" +#include "tools/gpu/vk/VkTestHelper.h" +#include "tools/gpu/vk/VkYcbcrSamplerHelper.h" const size_t kImageWidth = 8; const size_t kImageHeight = 8; -static int getY(size_t x, size_t y) { - return 16 + (x + y) * 219 / (kImageWidth + kImageHeight - 2); -} -static int getU(size_t x, size_t y) { return 16 + x * 224 / (kImageWidth - 1); } -static int getV(size_t x, size_t y) { return 16 + y * 224 / (kImageHeight - 1); } - -#define DECLARE_VK_PROC(name) PFN_vk##name fVk##name - -#define ACQUIRE_INST_VK_PROC(name) \ - fVk##name = reinterpret_cast(getProc("vk" #name, fBackendContext.fInstance,\ - VK_NULL_HANDLE)); \ - if (fVk##name == nullptr) { \ - ERRORF(reporter, "Function ptr for vk%s could not be acquired\n", #name); \ - return false; \ - } - -#define ACQUIRE_DEVICE_VK_PROC(name) \ - fVk##name = reinterpret_cast(getProc("vk" #name, VK_NULL_HANDLE, fDevice)); \ - if (fVk##name == nullptr) { \ - ERRORF(reporter, "Function ptr for vk%s could not be acquired\n", #name); \ - return false; \ - } - -class VkYcbcrSamplerTestHelper { -public: - VkYcbcrSamplerTestHelper() {} - ~VkYcbcrSamplerTestHelper(); - - bool init(skiatest::Reporter* reporter); - - sk_sp createI420Image(skiatest::Reporter* reporter); - - GrContext* getGrContext() { return fGrContext.get(); } - -private: - GrVkExtensions fExtensions; - VkPhysicalDeviceFeatures2 fFeatures = {}; - VkDebugReportCallbackEXT fDebugCallback = VK_NULL_HANDLE; - - DECLARE_VK_PROC(DestroyInstance); - DECLARE_VK_PROC(DeviceWaitIdle); - DECLARE_VK_PROC(DestroyDevice); - - DECLARE_VK_PROC(GetPhysicalDeviceFormatProperties); - DECLARE_VK_PROC(GetPhysicalDeviceMemoryProperties); - - DECLARE_VK_PROC(CreateImage); - DECLARE_VK_PROC(DestroyImage); - DECLARE_VK_PROC(GetImageMemoryRequirements); - DECLARE_VK_PROC(AllocateMemory); - DECLARE_VK_PROC(FreeMemory); - DECLARE_VK_PROC(BindImageMemory); - DECLARE_VK_PROC(MapMemory); - DECLARE_VK_PROC(UnmapMemory); - DECLARE_VK_PROC(FlushMappedMemoryRanges); - DECLARE_VK_PROC(GetImageSubresourceLayout); - - VkDevice fDevice = VK_NULL_HANDLE; - - PFN_vkDestroyDebugReportCallbackEXT fDestroyDebugCallback = nullptr; - - GrVkBackendContext fBackendContext; - sk_sp fGrContext; - - VkImage fImage = VK_NULL_HANDLE; - VkDeviceMemory fImageMemory = VK_NULL_HANDLE; - GrBackendTexture texture; -}; - -VkYcbcrSamplerTestHelper::~VkYcbcrSamplerTestHelper() { - fGrContext.reset(); - - if (fImage != VK_NULL_HANDLE) { - fVkDestroyImage(fDevice, fImage, nullptr); - fImage = VK_NULL_HANDLE; - } - if (fImageMemory != VK_NULL_HANDLE) { - fVkFreeMemory(fDevice, fImageMemory, nullptr); - fImageMemory = VK_NULL_HANDLE; - } - - fBackendContext.fMemoryAllocator.reset(); - if (fDevice != VK_NULL_HANDLE) { - fVkDeviceWaitIdle(fDevice); - fVkDestroyDevice(fDevice, nullptr); - fDevice = VK_NULL_HANDLE; - } - if (fDebugCallback != VK_NULL_HANDLE) { - fDestroyDebugCallback(fBackendContext.fInstance, fDebugCallback, nullptr); - } - if (fBackendContext.fInstance != VK_NULL_HANDLE) { - fVkDestroyInstance(fBackendContext.fInstance, nullptr); - fBackendContext.fInstance = VK_NULL_HANDLE; - } - - sk_gpu_test::FreeVulkanFeaturesStructs(&fFeatures); -} - -bool VkYcbcrSamplerTestHelper::init(skiatest::Reporter* reporter) { - PFN_vkGetInstanceProcAddr instProc; - PFN_vkGetDeviceProcAddr devProc; - if (!sk_gpu_test::LoadVkLibraryAndGetProcAddrFuncs(&instProc, &devProc)) { - ERRORF(reporter, "Failed to load Vulkan"); - return false; - } - auto getProc = [&instProc, &devProc](const char* proc_name, - VkInstance instance, VkDevice device) { - if (device != VK_NULL_HANDLE) { - return devProc(device, proc_name); - } - return instProc(instance, proc_name); - }; - - fFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; - fFeatures.pNext = nullptr; - - fBackendContext.fInstance = VK_NULL_HANDLE; - fBackendContext.fDevice = VK_NULL_HANDLE; - - if (!sk_gpu_test::CreateVkBackendContext(getProc, &fBackendContext, &fExtensions, &fFeatures, - &fDebugCallback, nullptr, sk_gpu_test::CanPresentFn(), - false)) { - return false; - } - fDevice = fBackendContext.fDevice; - - if (fDebugCallback != VK_NULL_HANDLE) { - fDestroyDebugCallback = reinterpret_cast( - instProc(fBackendContext.fInstance, "vkDestroyDebugReportCallbackEXT")); - } - ACQUIRE_INST_VK_PROC(DestroyInstance) - ACQUIRE_INST_VK_PROC(DeviceWaitIdle) - ACQUIRE_INST_VK_PROC(DestroyDevice) - - ACQUIRE_INST_VK_PROC(GetPhysicalDeviceFormatProperties) - ACQUIRE_INST_VK_PROC(GetPhysicalDeviceMemoryProperties) - - ACQUIRE_DEVICE_VK_PROC(CreateImage) - ACQUIRE_DEVICE_VK_PROC(DestroyImage) - ACQUIRE_DEVICE_VK_PROC(GetImageMemoryRequirements) - ACQUIRE_DEVICE_VK_PROC(AllocateMemory) - ACQUIRE_DEVICE_VK_PROC(FreeMemory) - ACQUIRE_DEVICE_VK_PROC(BindImageMemory) - ACQUIRE_DEVICE_VK_PROC(MapMemory) - ACQUIRE_DEVICE_VK_PROC(UnmapMemory) - ACQUIRE_DEVICE_VK_PROC(FlushMappedMemoryRanges) - ACQUIRE_DEVICE_VK_PROC(GetImageSubresourceLayout) - - bool ycbcrSupported = false; - VkBaseOutStructure* feature = reinterpret_cast(fFeatures.pNext); - while (feature) { - if (feature->sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES) { - VkPhysicalDeviceSamplerYcbcrConversionFeatures* ycbcrFeatures = - reinterpret_cast(feature); - ycbcrSupported = ycbcrFeatures->samplerYcbcrConversion; - break; - } - feature = feature->pNext; - } - if (!ycbcrSupported) { - return false; - } - - fGrContext = GrContext::MakeVulkan(fBackendContext); - if (!fGrContext) { - return false; - } - - return true; -} - -sk_sp VkYcbcrSamplerTestHelper::createI420Image(skiatest::Reporter* reporter) { - // Verify that the image format is supported. - VkFormatProperties formatProperties; - fVkGetPhysicalDeviceFormatProperties(fBackendContext.fPhysicalDevice, - VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, &formatProperties); - if (!(formatProperties.linearTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) { - // VK_FORMAT_G8_B8R8_2PLANE_420_UNORM is not supported - return nullptr; - } - - // Create YCbCr image. - VkImageCreateInfo vkImageInfo = {}; - vkImageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; - vkImageInfo.imageType = VK_IMAGE_TYPE_2D; - vkImageInfo.format = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM; - vkImageInfo.extent = VkExtent3D{kImageWidth, kImageHeight, 1}; - vkImageInfo.mipLevels = 1; - vkImageInfo.arrayLayers = 1; - vkImageInfo.samples = VK_SAMPLE_COUNT_1_BIT; - vkImageInfo.tiling = VK_IMAGE_TILING_LINEAR; - vkImageInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT; - vkImageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; - vkImageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; - - REPORTER_ASSERT(reporter, fImage == VK_NULL_HANDLE); - if (fVkCreateImage(fDevice, &vkImageInfo, nullptr, &fImage) != VK_SUCCESS) { - ERRORF(reporter, "Failed to allocate I420 image"); - return nullptr; - } - - VkMemoryRequirements requirements; - fVkGetImageMemoryRequirements(fDevice, fImage, &requirements); - - uint32_t memoryTypeIndex = 0; - bool foundHeap = false; - VkPhysicalDeviceMemoryProperties phyDevMemProps; - fVkGetPhysicalDeviceMemoryProperties(fBackendContext.fPhysicalDevice, &phyDevMemProps); - for (uint32_t i = 0; i < phyDevMemProps.memoryTypeCount && !foundHeap; ++i) { - if (requirements.memoryTypeBits & (1 << i)) { - // Map host-visible memory. - if (phyDevMemProps.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { - memoryTypeIndex = i; - foundHeap = true; - } - } - } - if (!foundHeap) { - ERRORF(reporter, "Failed to find valid heap for imported memory"); - return nullptr; - } - - VkMemoryAllocateInfo allocInfo = {}; - allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; - allocInfo.allocationSize = requirements.size; - allocInfo.memoryTypeIndex = memoryTypeIndex; - - REPORTER_ASSERT(reporter, fImageMemory == VK_NULL_HANDLE); - if (fVkAllocateMemory(fDevice, &allocInfo, nullptr, &fImageMemory) != VK_SUCCESS) { - ERRORF(reporter, "Failed to allocate VkDeviceMemory."); - return nullptr; - } - - void* mappedBuffer; - if (fVkMapMemory(fDevice, fImageMemory, 0u, requirements.size, 0u, &mappedBuffer) != - VK_SUCCESS) { - ERRORF(reporter, "Failed to map Vulkan memory."); - return nullptr; - } - - // Write Y channel. - VkImageSubresource subresource; - subresource.aspectMask = VK_IMAGE_ASPECT_PLANE_0_BIT; - subresource.mipLevel = 0; - subresource.arrayLayer = 0; - - VkSubresourceLayout yLayout; - fVkGetImageSubresourceLayout(fDevice, fImage, &subresource, &yLayout); - uint8_t* bufferData = reinterpret_cast(mappedBuffer) + yLayout.offset; - for (size_t y = 0; y < kImageHeight; ++y) { - for (size_t x = 0; x < kImageWidth; ++x) { - bufferData[y * yLayout.rowPitch + x] = getY(x, y); - } - } - - // Write UV channels. - subresource.aspectMask = VK_IMAGE_ASPECT_PLANE_1_BIT; - VkSubresourceLayout uvLayout; - fVkGetImageSubresourceLayout(fDevice, fImage, &subresource, &uvLayout); - bufferData = reinterpret_cast(mappedBuffer) + uvLayout.offset; - for (size_t y = 0; y < kImageHeight / 2; ++y) { - for (size_t x = 0; x < kImageWidth / 2; ++x) { - bufferData[y * uvLayout.rowPitch + x * 2] = getU(x * 2, y * 2); - bufferData[y * uvLayout.rowPitch + x * 2 + 1] = getV(x * 2, y * 2); - } - } - - VkMappedMemoryRange flushRange; - flushRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; - flushRange.pNext = nullptr; - flushRange.memory = fImageMemory; - flushRange.offset = 0; - flushRange.size = VK_WHOLE_SIZE; - if (fVkFlushMappedMemoryRanges(fDevice, 1, &flushRange) != VK_SUCCESS) { - ERRORF(reporter, "Failed to flush buffer memory."); - return nullptr; - } - fVkUnmapMemory(fDevice, fImageMemory); - - // Bind image memory. - if (fVkBindImageMemory(fDevice, fImage, fImageMemory, 0u) != VK_SUCCESS) { - ERRORF(reporter, "Failed to bind VkImage memory."); - return nullptr; - } - - // Wrap the image into SkImage. - GrVkYcbcrConversionInfo ycbcrInfo(vkImageInfo.format, - /*externalFormat=*/0, - VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, - VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, - VK_CHROMA_LOCATION_COSITED_EVEN, - VK_CHROMA_LOCATION_COSITED_EVEN, - VK_FILTER_LINEAR, - false, - formatProperties.linearTilingFeatures); - GrVkAlloc alloc(fImageMemory, 0 /* offset */, requirements.size, 0 /* flags */); - GrVkImageInfo imageInfo(fImage, alloc, VK_IMAGE_TILING_LINEAR, VK_IMAGE_LAYOUT_UNDEFINED, - vkImageInfo.format, 1 /* levelCount */, VK_QUEUE_FAMILY_IGNORED, - GrProtected::kNo, ycbcrInfo); - - texture = GrBackendTexture(kImageWidth, kImageHeight, imageInfo); - sk_sp image = SkImage::MakeFromTexture(fGrContext.get(), - texture, - kTopLeft_GrSurfaceOrigin, - kRGB_888x_SkColorType, - kPremul_SkAlphaType, - nullptr); - - if (!image) { - ERRORF(reporter, "Failed to wrap VkImage with SkImage"); - return nullptr; - } - - return image; -} - static int round_and_clamp(float x) { int r = static_cast(round(x)); if (r > 255) return 255; @@ -345,18 +28,35 @@ static int round_and_clamp(float x) { } DEF_GPUTEST(VkYCbcrSampler_DrawImageWithYcbcrSampler, reporter, options) { - VkYcbcrSamplerTestHelper helper; - if (!helper.init(reporter)) { + VkTestHelper testHelper(false); + if (!testHelper.init()) { + ERRORF(reporter, "VkTestHelper initialization failed."); + return; + } + + VkYcbcrSamplerHelper ycbcrHelper(testHelper.grContext()); + if (!ycbcrHelper.isYCbCrSupported()) { return; } - sk_sp srcImage = helper.createI420Image(reporter); + if (!ycbcrHelper.createBackendTexture(kImageWidth, kImageHeight)) { + ERRORF(reporter, "Failed to create I420 backend texture"); + return; + } + + sk_sp srcImage = SkImage::MakeFromTexture(testHelper.grContext(), + ycbcrHelper.backendTexture(), + kTopLeft_GrSurfaceOrigin, + kRGB_888x_SkColorType, + kPremul_SkAlphaType, + nullptr); if (!srcImage) { + ERRORF(reporter, "Failed to create I420 image"); return; } sk_sp surface = SkSurface::MakeRenderTarget( - helper.getGrContext(), SkBudgeted::kNo, + testHelper.grContext(), SkBudgeted::kNo, SkImageInfo::Make(kImageWidth, kImageHeight, kN32_SkColorType, kPremul_SkAlphaType)); if (!surface) { ERRORF(reporter, "Failed to create target SkSurface"); @@ -381,10 +81,13 @@ DEF_GPUTEST(VkYCbcrSampler_DrawImageWithYcbcrSampler, reporter, options) { // interpolated U & V channels. for (size_t y = 0; y < kImageHeight; y += 2) { for (size_t x = 0; x < kImageWidth; x += 2) { + auto y2 = VkYcbcrSamplerHelper::GetExpectedY(x, y, kImageWidth, kImageHeight); + auto [u, v] = VkYcbcrSamplerHelper::GetExpectedUV(x, y, kImageWidth, kImageHeight); + // createI420Image() initializes the image with VK_SAMPLER_YCBCR_RANGE_ITU_NARROW. - float yChannel = (static_cast(getY(x, y)) - 16.0) / 219.0; - float uChannel = (static_cast(getU(x, y)) - 128.0) / 224.0; - float vChannel = (static_cast(getV(x, y)) - 128.0) / 224.0; + float yChannel = (static_cast(y2) - 16.0) / 219.0; + float uChannel = (static_cast(u) - 128.0) / 224.0; + float vChannel = (static_cast(v) - 128.0) / 224.0; // BR.709 conversion as specified in // https://www.khronos.org/registry/DataFormat/specs/1.2/dataformat.1.2.html#MODEL_YUV @@ -414,12 +117,18 @@ DEF_GPUTEST(VkYCbcrSampler_DrawImageWithYcbcrSampler, reporter, options) { // Verifies that it's not possible to allocate Ycbcr texture directly. DEF_GPUTEST(VkYCbcrSampler_NoYcbcrSurface, reporter, options) { - VkYcbcrSamplerTestHelper helper; - if (!helper.init(reporter)) { + VkTestHelper testHelper(false); + if (!testHelper.init()) { + ERRORF(reporter, "VkTestHelper initialization failed."); + return; + } + + VkYcbcrSamplerHelper ycbcrHelper(testHelper.grContext()); + if (!ycbcrHelper.isYCbCrSupported()) { return; } - GrBackendTexture texture = helper.getGrContext()->createBackendTexture( + GrBackendTexture texture = testHelper.grContext()->createBackendTexture( kImageWidth, kImageHeight, GrBackendFormat::MakeVk(VK_FORMAT_G8_B8R8_2PLANE_420_UNORM), GrMipMapped::kNo, GrRenderable::kNo, GrProtected::kNo); if (texture.isValid()) { diff --git a/tests/WangsFormulaTest.cpp b/tests/WangsFormulaTest.cpp index a8e1c776315c3..7d5161f795699 100644 --- a/tests/WangsFormulaTest.cpp +++ b/tests/WangsFormulaTest.cpp @@ -274,5 +274,38 @@ DEF_TEST(WangsFormula_vectorXforms, r) { check_quadratic_log2_with_transform(pts, m); }); }); +} +DEF_TEST(WangsFormula_worst_case_cubic, r) { + { + SkPoint worstP[] = {{0,0}, {100,100}, {0,0}, {0,0}}; + REPORTER_ASSERT(r, GrWangsFormula::worst_case_cubic(kIntolerance, 100, 100) == + GrWangsFormula::cubic(kIntolerance, worstP)); + REPORTER_ASSERT(r, GrWangsFormula::worst_case_cubic_log2(kIntolerance, 100, 100) == + GrWangsFormula::cubic_log2(kIntolerance, worstP)); + } + { + SkPoint worstP[] = {{100,100}, {100,100}, {200,200}, {100,100}}; + REPORTER_ASSERT(r, GrWangsFormula::worst_case_cubic(kIntolerance, 100, 100) == + GrWangsFormula::cubic(kIntolerance, worstP)); + REPORTER_ASSERT(r, GrWangsFormula::worst_case_cubic_log2(kIntolerance, 100, 100) == + GrWangsFormula::cubic_log2(kIntolerance, worstP)); + } + auto check_worst_case_cubic = [&](const SkPoint* pts) { + SkRect bbox; + bbox.setBoundsNoCheck(pts, 4); + float worst = GrWangsFormula::worst_case_cubic(kIntolerance, bbox.width(), bbox.height()); + int worst_log2 = GrWangsFormula::worst_case_cubic_log2(kIntolerance, bbox.width(), + bbox.height()); + float actual = GrWangsFormula::cubic(kIntolerance, pts); + REPORTER_ASSERT(r, worst >= actual); + REPORTER_ASSERT(r, std::ceil(std::log2(std::max(1.f, worst))) == worst_log2); + SkASSERT(std::ceil(std::log2(std::max(1.f, worst))) == worst_log2); + }; + SkRandom rand; + for (int i = 0; i < 100; ++i) { + for_random_beziers(4, &rand, [&](const SkPoint pts[]) { + check_worst_case_cubic(pts); + }); + } } diff --git a/tests/WritePixelsTest.cpp b/tests/WritePixelsTest.cpp index 8a3dd3c8cd6e1..ef5ab98f35e9b 100644 --- a/tests/WritePixelsTest.cpp +++ b/tests/WritePixelsTest.cpp @@ -15,7 +15,7 @@ #include "tools/ToolUtils.h" #include "include/gpu/GrBackendSurface.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrGpu.h" #include "src/gpu/GrProxyProvider.h" @@ -143,8 +143,8 @@ static SkPMColor convert_to_PMColor(SkColorType ct, SkAlphaType at, uint32_t col color = premul(color); } switch (ct) { - case kRGBA_8888_SkColorType: - case kRGB_888x_SkColorType: // fallthrough + case kRGBA_8888_SkColorType: // fallthrough + case kRGB_888x_SkColorType: color = SkSwizzle_RGBA_to_PMColor(color); break; case kBGRA_8888_SkColorType: @@ -444,17 +444,21 @@ static void test_write_pixels(skiatest::Reporter* reporter, GrContext* context, } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WritePixels_Gpu, reporter, ctxInfo) { - test_write_pixels(reporter, ctxInfo.grContext(), 1); + test_write_pixels(reporter, ctxInfo.directContext(), 1); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WritePixelsMSAA_Gpu, reporter, ctxInfo) { - test_write_pixels(reporter, ctxInfo.grContext(), 1); + test_write_pixels(reporter, ctxInfo.directContext(), 1); } static void test_write_pixels_non_texture(skiatest::Reporter* reporter, GrContext* context, int sampleCnt) { - + // Dawn currently doesn't support writePixels to a texture-as-render-target. + // See http://skbug.com/10336. + if (GrBackendApi::kDawn == context->backend()) { + return; + } for (auto& origin : { kTopLeft_GrSurfaceOrigin, kBottomLeft_GrSurfaceOrigin }) { GrBackendTexture backendTex; CreateBackendTexture(context, &backendTex, DEV_W, DEV_H, kRGBA_8888_SkColorType, @@ -474,11 +478,11 @@ static void test_write_pixels_non_texture(skiatest::Reporter* reporter, } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WritePixelsNonTexture_Gpu, reporter, ctxInfo) { - test_write_pixels_non_texture(reporter, ctxInfo.grContext(), 1); + test_write_pixels_non_texture(reporter, ctxInfo.directContext(), 1); } DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WritePixelsNonTextureMSAA_Gpu, reporter, ctxInfo) { - test_write_pixels_non_texture(reporter, ctxInfo.grContext(), 4); + test_write_pixels_non_texture(reporter, ctxInfo.directContext(), 4); } static sk_sp create_surf(GrContext* context, int width, int height) { @@ -505,7 +509,7 @@ static sk_sp upload(const sk_sp& surf, SkColor color) { // second writePixels takes effect (i.e., that writePixels correctly flushes // in between uses of the shared backing resource). DEF_GPUTEST_FOR_RENDERING_CONTEXTS(WritePixelsPendingIO, reporter, ctxInfo) { - GrContext* context = ctxInfo.grContext(); + auto context = ctxInfo.directContext(); GrProxyProvider* proxyProvider = context->priv().proxyProvider(); const GrCaps* caps = context->priv().caps(); diff --git a/tests/Writer32Test.cpp b/tests/Writer32Test.cpp index 826b56ef015d5..8e96c5f9e2571 100644 --- a/tests/Writer32Test.cpp +++ b/tests/Writer32Test.cpp @@ -7,7 +7,7 @@ #include "include/utils/SkRandom.h" #include "src/core/SkAutoMalloc.h" -#include "src/core/SkReader32.h" +#include "src/core/SkReadBuffer.h" #include "src/core/SkWriter32.h" #include "tests/Test.h" @@ -70,34 +70,6 @@ static void test_rewind(skiatest::Reporter* reporter) { } } -static void test_ptr(skiatest::Reporter* reporter) { - SkSWriter32<32> writer; - - void* p0 = reporter; - void* p1 = &writer; - - // try writing ptrs where at least one of them may be at a non-multiple of - // 8 boundary, to confirm this works on 64bit machines. - - writer.writePtr(p0); - writer.write8(0x33); - writer.writePtr(p1); - writer.write8(0x66); - - size_t size = writer.bytesWritten(); - REPORTER_ASSERT(reporter, 2 * sizeof(void*) + 2 * sizeof(int32_t)); - - char buffer[32]; - SkASSERT(sizeof(buffer) >= size); - writer.flatten(buffer); - - SkReader32 reader(buffer, size); - REPORTER_ASSERT(reporter, reader.readPtr() == p0); - REPORTER_ASSERT(reporter, reader.readInt() == 0x33); - REPORTER_ASSERT(reporter, reader.readPtr() == p1); - REPORTER_ASSERT(reporter, reader.readInt() == 0x66); -} - static void test1(skiatest::Reporter* reporter, SkWriter32* writer) { const uint32_t data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; for (size_t i = 0; i < SK_ARRAY_COUNT(data); ++i) { @@ -112,37 +84,6 @@ static void test1(skiatest::Reporter* reporter, SkWriter32* writer) { REPORTER_ASSERT(reporter, !memcmp(data, buffer, sizeof(buffer))); } -static void test2(skiatest::Reporter* reporter, SkWriter32* writer) { - static const char gStr[] = "abcdefghimjklmnopqrstuvwxyz"; - size_t i; - - size_t len = 0; - for (i = 0; i <= 26; ++i) { - len += SkWriter32::WriteStringSize(gStr, i); - writer->writeString(gStr, i); - } - REPORTER_ASSERT(reporter, writer->bytesWritten() == len); - - SkAutoMalloc storage(len); - writer->flatten(storage.get()); - - SkReader32 reader; - reader.setMemory(storage.get(), len); - for (i = 0; i <= 26; ++i) { - REPORTER_ASSERT(reporter, !reader.eof()); - const char* str = reader.readString(&len); - REPORTER_ASSERT(reporter, i == len); - REPORTER_ASSERT(reporter, strlen(str) == len); - REPORTER_ASSERT(reporter, !memcmp(str, gStr, len)); - // Ensure that the align4 of the string is padded with zeroes. - size_t alignedSize = SkAlign4(len + 1); - for (size_t j = len; j < alignedSize; j++) { - REPORTER_ASSERT(reporter, 0 == str[j]); - } - } - REPORTER_ASSERT(reporter, reader.eof()); -} - static void testWritePad(skiatest::Reporter* reporter, SkWriter32* writer) { // Create some random data to write. const size_t dataSize = 10; @@ -166,8 +107,7 @@ static void testWritePad(skiatest::Reporter* reporter, SkWriter32* writer) { SkAutoMalloc readStorage(totalBytes); writer->flatten(readStorage.get()); - SkReader32 reader; - reader.setMemory(readStorage.get(), totalBytes); + SkReadBuffer reader(readStorage.get(), totalBytes); for (size_t len = 0; len < dataSize; len++) { const char* readPtr = static_cast(reader.skip(len)); @@ -223,9 +163,6 @@ DEF_TEST(Writer32_dynamic, reporter) { SkWriter32 writer; test1(reporter, &writer); - writer.reset(); - test2(reporter, &writer); - writer.reset(); testWritePad(reporter, &writer); @@ -236,10 +173,8 @@ DEF_TEST(Writer32_dynamic, reporter) { DEF_TEST(Writer32_small, reporter) { SkSWriter32<8 * sizeof(intptr_t)> writer; test1(reporter, &writer); - writer.reset(); // should just rewind our storage - test2(reporter, &writer); - writer.reset(); + writer.reset(); // should just rewind our storage testWritePad(reporter, &writer); writer.reset(); @@ -249,10 +184,8 @@ DEF_TEST(Writer32_small, reporter) { DEF_TEST(Writer32_large, reporter) { SkSWriter32<1024 * sizeof(intptr_t)> writer; test1(reporter, &writer); - writer.reset(); // should just rewind our storage - test2(reporter, &writer); - writer.reset(); + writer.reset(); // should just rewind our storage testWritePad(reporter, &writer); writer.reset(); @@ -262,7 +195,6 @@ DEF_TEST(Writer32_large, reporter) { DEF_TEST(Writer32_misc, reporter) { test_reserve(reporter); test_string_null(reporter); - test_ptr(reporter); test_rewind(reporter); } @@ -294,10 +226,10 @@ DEF_TEST(Writer32_data, reporter) { auto result(writer.snapshotAsData()); - SkReader32 reader(result->data(), result->size()); - auto d0(reader.readData()), - d1(reader.readData()), - d2(reader.readData()); + SkReadBuffer reader(result->data(), result->size()); + auto d0(reader.readByteArrayAsData()), + d1(reader.readByteArrayAsData()), + d2(reader.readByteArrayAsData()); REPORTER_ASSERT(reporter, 0 == d0->size()); REPORTER_ASSERT(reporter, strlen(str)+1 == d1->size()); diff --git a/third_party/angle2/BUILD.gn b/third_party/angle2/BUILD.gn index e860f08bf078f..46c980470e626 100644 --- a/third_party/angle2/BUILD.gn +++ b/third_party/angle2/BUILD.gn @@ -93,16 +93,20 @@ shared_library("libGLESv2") { "LIBANGLE_IMPLEMENTATION", "LIBGLESV2_IMPLEMENTATION", ] - deps = [ ":commit_id" ] + deps = [ + ":commit_id", + "../zlib:compression_utils_portable", + ] libs = [] sources = rebase_path( angle_preprocessor_sources + angle_translator_sources + angle_translator_essl_sources + angle_translator_glsl_sources + angle_translator_hlsl_sources + libangle_sources + - libangle_headers + libangle_common_sources + - libangle_image_util_sources + libglesv2_sources + - libangle_gl_sources + angle_system_utils_sources + xxhash_sources, + libangle_gpu_info_util_sources + libangle_headers + + libangle_common_sources + libangle_image_util_sources + + libglesv2_sources + libangle_gl_sources + + angle_system_utils_sources + xxhash_sources, ".", angle_root) + [ "$angle_root/src/libANGLE/FrameCapture_mock.cpp" ] if (is_win) { @@ -114,9 +118,14 @@ shared_library("libGLESv2") { "Xi", "Xext", ] - sources += rebase_path(libangle_gl_glx_sources + libangle_gl_egl_sources + - libangle_gl_egl_dl_sources, ".", angle_root) + - [ "$angle_root/src/third_party/libXNVCtrl/NVCtrl.c" ] + defines += [ "GPU_INFO_USE_X11" ] + sources += + rebase_path( + libangle_gl_glx_sources + libangle_gl_egl_sources + + libangle_gpu_info_util_linux_sources + + libangle_gpu_info_util_x11_sources + libangle_gl_egl_dl_sources, + ".", + angle_root) + [ "$angle_root/src/third_party/libXNVCtrl/NVCtrl.c" ] } else if (is_win) { defines += [ # TODO: ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES @@ -124,7 +133,8 @@ shared_library("libGLESv2") { sources += rebase_path(libangle_gl_wgl_sources + libangle_d3d_shared_sources + libangle_d3d9_sources + libangle_d3d11_sources + - libangle_d3d11_win32_sources, + libangle_d3d11_win32_sources + + libangle_gpu_info_util_win_sources, ".", angle_root) libs += [ diff --git a/third_party/glslang/BUILD.gn b/third_party/glslang/BUILD.gn index e159c4a51eefe..3ecb6260cd7d7 100644 --- a/third_party/glslang/BUILD.gn +++ b/third_party/glslang/BUILD.gn @@ -46,6 +46,21 @@ third_party("glslang_sources") { "SPIRV/spvIR.h", "glslang/GenericCodeGen/CodeGen.cpp", "glslang/GenericCodeGen/Link.cpp", + "glslang/HLSL/hlslAttributes.cpp", + "glslang/HLSL/hlslAttributes.h", + "glslang/HLSL/hlslGrammar.cpp", + "glslang/HLSL/hlslGrammar.h", + "glslang/HLSL/hlslOpMap.cpp", + "glslang/HLSL/hlslOpMap.h", + "glslang/HLSL/hlslParseHelper.cpp", + "glslang/HLSL/hlslParseHelper.h", + "glslang/HLSL/hlslParseables.cpp", + "glslang/HLSL/hlslParseables.h", + "glslang/HLSL/hlslScanContext.cpp", + "glslang/HLSL/hlslScanContext.h", + "glslang/HLSL/hlslTokenStream.cpp", + "glslang/HLSL/hlslTokenStream.h", + "glslang/HLSL/hlslTokens.h", "glslang/Include/BaseTypes.h", "glslang/Include/Common.h", "glslang/Include/ConstantUnion.h", @@ -105,21 +120,6 @@ third_party("glslang_sources") { "glslang/MachineIndependent/reflection.h", "glslang/OSDependent/osinclude.h", "glslang/Public/ShaderLang.h", - "hlsl/hlslAttributes.cpp", - "hlsl/hlslAttributes.h", - "hlsl/hlslGrammar.cpp", - "hlsl/hlslGrammar.h", - "hlsl/hlslOpMap.cpp", - "hlsl/hlslOpMap.h", - "hlsl/hlslParseHelper.cpp", - "hlsl/hlslParseHelper.h", - "hlsl/hlslParseables.cpp", - "hlsl/hlslParseables.h", - "hlsl/hlslScanContext.cpp", - "hlsl/hlslScanContext.h", - "hlsl/hlslTokenStream.cpp", - "hlsl/hlslTokenStream.h", - "hlsl/hlslTokens.h", ], ".", "$glslang_root") diff --git a/third_party/icu/make_data_cpp.py b/third_party/icu/make_data_cpp.py index 127a4957a3797..593959684c8e1 100755 --- a/third_party/icu/make_data_cpp.py +++ b/third_party/icu/make_data_cpp.py @@ -10,6 +10,8 @@ Output type is C++. ''' +from __future__ import print_function + import os import struct import sys @@ -21,7 +23,7 @@ def iterate_as_uint32(path): assert s.size == 4 mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) assert (len(mm) % s.size) == 0 - for offset in xrange(0, len(mm), s.size): + for offset in range(0, len(mm), s.size): yield s.unpack_from(mm, offset)[0] mm.close() @@ -44,5 +46,5 @@ def convert(fmt, name, src_path, dst_path): '', ',', '}};\n') if __name__ == '__main__': - print '\n'.join('>>> %r' % x for x in sys.argv) + print('\n'.join('>>> %r' % x for x in sys.argv)) convert(cpp, sys.argv[1], sys.argv[2], sys.argv[3]) diff --git a/third_party/imgui/BUILD.gn b/third_party/imgui/BUILD.gn index 94ce3bf4b858f..7b04aa6be8fbf 100644 --- a/third_party/imgui/BUILD.gn +++ b/third_party/imgui/BUILD.gn @@ -10,6 +10,7 @@ import("../third_party.gni") third_party("imgui") { public_include_dirs = [ "../externals/imgui" ] + public_defines = [ "IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS" ] sources = [ "../externals/imgui/imgui.cpp", diff --git a/third_party/skcms/version.sha1 b/third_party/skcms/version.sha1 index d068705b47503..9f4fba2a1c39a 100755 --- a/third_party/skcms/version.sha1 +++ b/third_party/skcms/version.sha1 @@ -1 +1 @@ -5404be4a27033669abfc1eb9f1c45e09b597ccfa +403d32176ebc0f057e3ee7cb05c16fe209f61b7e diff --git a/third_party/third_party.gni b/third_party/third_party.gni index b0d106718d2f0..9b5e8b1a390ed 100644 --- a/third_party/third_party.gni +++ b/third_party/third_party.gni @@ -3,6 +3,10 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +declare_args() { + third_party_isystem = true +} + template("third_party_config") { enabled = !defined(invoker.enabled) || invoker.enabled config(target_name) { @@ -21,7 +25,7 @@ template("third_party_config") { } } else { foreach(dir, invoker.include_dirs) { - if (werror) { + if (third_party_isystem) { cflags += [ "-isystem", rebase_path(dir), diff --git a/third_party/zlib/BUILD.gn b/third_party/zlib/BUILD.gn index 40d00e916f23e..d733c3c9a4f7e 100644 --- a/third_party/zlib/BUILD.gn +++ b/third_party/zlib/BUILD.gn @@ -14,13 +14,152 @@ if (skia_use_system_zlib) { libs = [ "z" ] } } else { + # ARM optimizations disabled for Windows on Arm MSVC builds, see http://crbug.com/v8/10012. + use_arm_neon_optimizations = + (current_cpu == "arm" || current_cpu == "arm64") && !(is_win && !is_clang) + use_x86_x64_optimizations = + (current_cpu == "x86" || current_cpu == "x64") && !is_ios + + config("zlib_simd_config") { + defines = [] + if (use_x86_x64_optimizations) { + if (is_win) { + defines += [ "X86_WINDOWS" ] + } else { + defines += [ "X86_NOT_WINDOWS" ] + } + defines += [ "ADLER32_SIMD_SSSE3" ] # Strangely this is needed for + # cpu_features.c + } + if (use_arm_neon_optimizations) { + if (is_android) { + defines += [ "ARMV8_OS_ANDROID" ] # also compatible with v7 + } else if (is_linux || is_chromeos) { + defines += [ "ARMV8_OS_LINUX" ] + } else if (is_fuchsia) { + defines += [ "ARMV8_OS_FUCHSIA" ] + } else if (is_win) { + defines += [ "ARMV8_OS_WINDOWS" ] + } else if (is_ios) { + # iOS@ARM is a special case where we always have NEON but don't check + # for crypto extensions. + defines += [ "ARM_OS_IOS" ] + } else { + assert(false, "Unsupported ARM OS") + } + } + + # Warnings are just noise if we're not maintaining the code. + if (is_win) { + cflags = [ "/w" ] + } else { + cflags = [ "-w" ] + } + } + + source_set("zlib_adler32_simd") { + visibility = [ ":*" ] + configs += [ ":zlib_simd_config" ] + if (use_x86_x64_optimizations) { + defines = [ "ADLER32_SIMD_SSSE3" ] + if (!is_win || is_clang) { + cflags = [ "-mssse3" ] + } + } + if (use_arm_neon_optimizations) { + defines = [ "ADLER32_SIMD_NEON" ] + } + sources = [ "../externals/zlib/adler32_simd.c" ] + } + + source_set("zlib_crc32_simd") { + visibility = [ ":*" ] + configs += [ ":zlib_simd_config" ] + + # Disabled for iPhone, as described in DDI0487C_a_armv8_arm: + # "All implementations of the ARMv8.1 architecture are required to + # implement the CRC32* instructions. These are optional in ARMv8.0." + if (!is_ios && use_arm_neon_optimizations) { + defines = [ "CRC32_ARMV8_CRC32" ] + + # An ARMv7 GCC build will fail to compile without building this target + # for ARMv8-a+crc and letting runtime cpu detection select the correct + # function. + if (!is_win && !is_clang) { + cflags_c = [ "-march=armv8-a+crc" ] + } + } + + if (use_x86_x64_optimizations) { + defines = [ "CRC32_SIMD_SSE42_PCLMUL" ] + if (!is_win || is_clang) { + cflags = [ + "-msse4.2", + "-mpclmul", + ] + } + } + + sources = [ "../externals/zlib/crc32_simd.c" ] + } + + source_set("zlib_inflate_chunk_simd") { + visibility = [ ":*" ] + configs += [ ":zlib_simd_config" ] + if (use_x86_x64_optimizations) { + defines = [ "INFLATE_CHUNK_SIMD_SSE2" ] + if (current_cpu == "x64") { + defines += [ "INFLATE_CHUNK_READ_64LE" ] + } + } + if (use_arm_neon_optimizations) { + defines = [ "INFLATE_CHUNK_SIMD_NEON" ] + if (current_cpu == "arm64") { + defines += [ "INFLATE_CHUNK_READ_64LE" ] + } + } + if (use_x86_x64_optimizations || use_arm_neon_optimizations) { + include_dirs = [ + "../externals/zlib/", + "../externals/zlib/contrib/optimizations/", + ] + sources = [ + "../externals/zlib/contrib/optimizations/inffast_chunk.c", + "../externals/zlib/contrib/optimizations/inflate.c", + ] + } + } + + source_set("zlib_x86_x64_simd") { + visibility = [ ":*" ] + configs += [ ":zlib_simd_config" ] + if (use_x86_x64_optimizations) { + defines = [ + "CRC32_SIMD_SSE42_PCLMUL", + "DEFLATE_FILL_WINDOW_SSE2", + ] + if (!is_win || is_clang) { + cflags = [ + "-msse4.2", + "-mpclmul", + ] + } + sources = [ + "../externals/zlib/crc_folding.c", + "../externals/zlib/fill_window_sse.c", + ] + } + } + third_party("zlib") { public_include_dirs = [ "../externals/zlib" ] + defines = [ "ZLIB_IMPLEMENTATION" ] + deps = [] - deps = [ ":zlib_x86" ] sources = [ "../externals/zlib/adler32.c", "../externals/zlib/compress.c", + "../externals/zlib/cpu_features.c", "../externals/zlib/crc32.c", "../externals/zlib/deflate.c", "../externals/zlib/gzclose.c", @@ -29,30 +168,37 @@ if (skia_use_system_zlib) { "../externals/zlib/gzwrite.c", "../externals/zlib/infback.c", "../externals/zlib/inffast.c", - "../externals/zlib/inflate.c", "../externals/zlib/inftrees.c", "../externals/zlib/trees.c", "../externals/zlib/uncompr.c", "../externals/zlib/zutil.c", ] - } -} -third_party("zlib_x86") { - public_include_dirs = [] - if (target_cpu == "x86" || target_cpu == "x64") { - sources = [ - "../externals/zlib/crc_folding.c", - "../externals/zlib/fill_window_sse.c", - "../externals/zlib/x86.c", - ] - if (!is_win || is_clang) { - cflags_c = [ - "-msse4.2", - "-mpclmul", + if (is_android) { + deps += [ "//third_party/cpu-features" ] + } + + if (!use_x86_x64_optimizations && !use_arm_neon_optimizations) { + defines += [ "CPU_NO_SIMD" ] + sources += [ "../externals/zlib/inflate.c" ] + } else { + configs += [ ":zlib_simd_config" ] + deps += [ + ":zlib_adler32_simd", + ":zlib_crc32_simd", + ":zlib_inflate_chunk_simd", + ":zlib_x86_x64_simd", ] } - } else { - sources = [ "../externals/zlib/simd_stub.c" ] } } + +third_party("compression_utils_portable") { + visibility = [ "//third_party/angle2:*" ] + public_include_dirs = [ "../externals/zlib/google" ] + sources = [ + "../externals/zlib/google/compression_utils_portable.cc", + "../externals/zlib/google/compression_utils_portable.h", + ] + public_deps = [ ":zlib" ] # either system or from source +} diff --git a/tools/DDLPromiseImageHelper.cpp b/tools/DDLPromiseImageHelper.cpp index 89dca3c80f72a..e17dd1aec3a26 100644 --- a/tools/DDLPromiseImageHelper.cpp +++ b/tools/DDLPromiseImageHelper.cpp @@ -128,6 +128,7 @@ static GrBackendTexture create_yuva_texture(GrContext* context, const SkPixmap& auto beTex = context->createBackendTexture(&pm, 1, GrRenderable::kNo, GrProtected::kNo, markFinished, &finishedBECreate); if (beTex.isValid()) { + context->submit(); while (!finishedBECreate) { context->checkAsyncWorkCompletion(); } @@ -142,7 +143,7 @@ static GrBackendTexture create_yuva_texture(GrContext* context, const SkPixmap& */ void DDLPromiseImageHelper::CreateBETexturesForPromiseImage(GrContext* context, PromiseImageInfo* info) { - SkASSERT(context->priv().asDirectContext()); + SkASSERT(context->asDirectContext()); if (info->isYUV()) { int numPixmaps; @@ -175,6 +176,7 @@ void DDLPromiseImageHelper::CreateBETexturesForPromiseImage(GrContext* context, GrRenderable::kNo, GrProtected::kNo, markFinished, &finishedBECreate); SkASSERT(backendTex.isValid()); + context->submit(); while (!finishedBECreate) { context->checkAsyncWorkCompletion(); } @@ -185,7 +187,7 @@ void DDLPromiseImageHelper::CreateBETexturesForPromiseImage(GrContext* context, void DDLPromiseImageHelper::DeleteBETexturesForPromiseImage(GrContext* context, PromiseImageInfo* info) { - SkASSERT(context->priv().asDirectContext()); + SkASSERT(context->asDirectContext()); if (info->isYUV()) { int numPixmaps; @@ -255,7 +257,7 @@ void DDLPromiseImageHelper::createCallbackContexts(GrContext* context) { } void DDLPromiseImageHelper::uploadAllToGPU(SkTaskGroup* taskGroup, GrContext* context) { - SkASSERT(context->priv().asDirectContext()); + SkASSERT(context->asDirectContext()); if (taskGroup) { for (int i = 0; i < fImageInfo.count(); ++i) { @@ -271,7 +273,7 @@ void DDLPromiseImageHelper::uploadAllToGPU(SkTaskGroup* taskGroup, GrContext* co } void DDLPromiseImageHelper::deleteAllFromGPU(SkTaskGroup* taskGroup, GrContext* context) { - SkASSERT(context->priv().asDirectContext()); + SkASSERT(context->asDirectContext()); if (taskGroup) { for (int i = 0; i < fImageInfo.count(); ++i) { diff --git a/tools/DDLTileHelper.cpp b/tools/DDLTileHelper.cpp index 6d6116354e6e5..16e2595df59bb 100644 --- a/tools/DDLTileHelper.cpp +++ b/tools/DDLTileHelper.cpp @@ -48,7 +48,7 @@ void DDLTileHelper::TileData::createTileSpecificSKP(SkData* compressedPictureDat fReconstitutedPicture = helper.reinflateSKP(&recorder, compressedPictureData, &fPromiseImages); - std::unique_ptr ddl = recorder.detach(); + auto ddl = recorder.detach(); if (ddl->priv().numRenderTasks()) { // TODO: remove this once skbug.com/8424 is fixed. If the DDL resulting from the // reinflation of the SKPs contains opsTasks that means some image subset operation @@ -109,6 +109,7 @@ void DDLTileHelper::createComposeDDL() { } fComposeDDL = recorder.detach(); + SkASSERT(fComposeDDL); } void DDLTileHelper::TileData::precompile(GrContext* context) { @@ -166,7 +167,7 @@ void DDLTileHelper::TileData::draw(GrContext* context) { // (maybe in GrDrawingManager::addDDLTarget). fTileSurface = this->makeWrappedTileDest(context); if (fTileSurface) { - fTileSurface->draw(fDisplayList.get()); + fTileSurface->draw(fDisplayList); // We can't snap an image here bc, since we're using wrapped backend textures for the // surfaces, that would incur a copy. @@ -204,7 +205,7 @@ sk_sp DDLTileHelper::TileData::makePromiseImage(SkDeferredDisplayListRe } void DDLTileHelper::TileData::CreateBackendTexture(GrContext* context, TileData* tile) { - SkASSERT(context->priv().asDirectContext()); + SkASSERT(context->asDirectContext()); SkASSERT(tile->fCallbackContext && !tile->fCallbackContext->promiseImageTexture()); GrBackendTexture beTex = context->createBackendTexture(tile->fCharacterization); @@ -212,7 +213,7 @@ void DDLTileHelper::TileData::CreateBackendTexture(GrContext* context, TileData* } void DDLTileHelper::TileData::DeleteBackendTexture(GrContext* context, TileData* tile) { - SkASSERT(context->priv().asDirectContext()); + SkASSERT(context->asDirectContext()); SkASSERT(tile->fCallbackContext); // TODO: it seems that, on the Linux bots, backend texture creation is failing @@ -288,9 +289,6 @@ static void do_gpu_stuff(GrContext* context, DDLTileHelper::TileData* tile) { tile->draw(context); - // TODO: remove this flush once DDLs are reffed by the drawing manager - context->flushAndSubmit(); - tile->dropDDL(); } @@ -357,7 +355,7 @@ void DDLTileHelper::resetAllTiles() { } void DDLTileHelper::createBackendTextures(SkTaskGroup* taskGroup, GrContext* context) { - SkASSERT(context->priv().asDirectContext()); + SkASSERT(context->asDirectContext()); if (taskGroup) { for (int i = 0; i < this->numTiles(); ++i) { @@ -373,7 +371,7 @@ void DDLTileHelper::createBackendTextures(SkTaskGroup* taskGroup, GrContext* con } void DDLTileHelper::deleteBackendTextures(SkTaskGroup* taskGroup, GrContext* context) { - SkASSERT(context->priv().asDirectContext()); + SkASSERT(context->asDirectContext()); if (taskGroup) { for (int i = 0; i < this->numTiles(); ++i) { diff --git a/tools/DDLTileHelper.h b/tools/DDLTileHelper.h index 9118fb4c85824..3956306421206 100644 --- a/tools/DDLTileHelper.h +++ b/tools/DDLTileHelper.h @@ -8,6 +8,7 @@ #ifndef DDLTileHelper_DEFINED #define DDLTileHelper_DEFINED +#include "include/core/SkDeferredDisplayList.h" #include "include/core/SkRect.h" #include "include/core/SkRefCnt.h" #include "include/core/SkSurfaceCharacterization.h" @@ -16,7 +17,6 @@ class DDLPromiseImageHelper; class PromiseImageCallbackContext; class SkCanvas; class SkData; -class SkDeferredDisplayList; class SkDeferredDisplayListRecorder; class SkPicture; class SkSurface; @@ -87,12 +87,12 @@ class DDLTileHelper { // after 'fDisplayList' has been flushed (bc it owns the proxy the DDL's destination // trampoline points at). // TODO: fix the ref-order so we don't need 'fTileSurface' here - sk_sp fTileSurface; + sk_sp fTileSurface; - sk_sp fReconstitutedPicture; - SkTArray> fPromiseImages; // All the promise images in the + sk_sp fReconstitutedPicture; + SkTArray> fPromiseImages; // All the promise images in the // reconstituted picture - std::unique_ptr fDisplayList; + sk_sp fDisplayList; }; DDLTileHelper(GrContext* context, @@ -100,17 +100,17 @@ class DDLTileHelper { const SkIRect& viewport, int numDivisions); - void createSKPPerTile(SkData* compressedPictureData, const DDLPromiseImageHelper& helper); + void createSKPPerTile(SkData* compressedPictureData, const DDLPromiseImageHelper&); void kickOffThreadedWork(SkTaskGroup* recordingTaskGroup, SkTaskGroup* gpuTaskGroup, - GrContext* gpuThreadContext); + GrContext*); void createDDLsInParallel(); // Create the DDL that will compose all the tile images into a final result. void createComposeDDL(); - SkDeferredDisplayList* composeDDL() const { return fComposeDDL.get(); } + const sk_sp& composeDDL() const { return fComposeDDL; } void precompileAndDrawAllTiles(GrContext*); @@ -137,7 +137,7 @@ class DDLTileHelper { int fNumDivisions; // number of tiles along a side SkAutoTArray fTiles; // 'fNumDivisions' x 'fNumDivisions' - std::unique_ptr fComposeDDL; + sk_sp fComposeDDL; const SkSurfaceCharacterization fDstCharacterization; }; diff --git a/tools/embed_resources.py b/tools/embed_resources.py index 675a9fecd2abe..266ad37f1ea7b 100755 --- a/tools/embed_resources.py +++ b/tools/embed_resources.py @@ -15,7 +15,12 @@ def bytes_from_file(f, chunksize=8192): chunk = f.read(chunksize) if chunk: for b in chunk: - yield ord(b) + if isinstance(b, str): + # python 2 + yield ord(b) + else: + # python 3 + yield b else: break diff --git a/tools/flags/CommonFlagsConfig.cpp b/tools/flags/CommonFlagsConfig.cpp index fa0c414363e10..0dc0a52d4705c 100644 --- a/tools/flags/CommonFlagsConfig.cpp +++ b/tools/flags/CommonFlagsConfig.cpp @@ -72,6 +72,7 @@ static const struct { { "gltestprecompile", "gpu", "api=gl,testPrecompile=true" }, { "glestestprecompile", "gpu", "api=gles,testPrecompile=true" }, { "glddl", "gpu", "api=gl,useDDLSink=true" }, + { "glooprddl", "gpu", "api=gl,OOPRish=true" }, { "angle_d3d11_es2", "gpu", "api=angle_d3d11_es2" }, { "angle_d3d11_es3", "gpu", "api=angle_d3d11_es3" }, { "angle_d3d9_es2", "gpu", "api=angle_d3d9_es2" }, @@ -103,6 +104,7 @@ static const struct { { "vkbert", "gpu", "api=vulkan,surf=bert" }, { "vktestpersistentcache", "gpu", "api=vulkan,testPersistentCache=1" }, { "vkddl", "gpu", "api=vulkan,useDDLSink=true" }, + { "vkooprddl", "gpu", "api=vulkan,OOPRish=true" }, #endif #ifdef SK_METAL { "mtl", "gpu", "api=metal" }, @@ -110,6 +112,7 @@ static const struct { { "mtlmsaa4", "gpu", "api=metal,samples=4" }, { "mtlmsaa8", "gpu", "api=metal,samples=8" }, { "mtlddl", "gpu", "api=metal,useDDLSink=true" }, + { "mtlooprddl", "gpu", "api=metal,OOPRish=true" }, #endif #ifdef SK_DIRECT3D { "d3d", "gpu", "api=direct3d" }, @@ -459,6 +462,7 @@ SkCommandLineConfigGpu::SkCommandLineConfigGpu(const SkString& tag, int testPersistentCache, bool testPrecompile, bool useDDLSink, + bool OOPRish, SurfType surfType) : SkCommandLineConfig(tag, SkString("gpu"), viaParts) , fContextType(contextType) @@ -472,6 +476,7 @@ SkCommandLineConfigGpu::SkCommandLineConfigGpu(const SkString& tag, , fTestPersistentCache(testPersistentCache) , fTestPrecompile(testPrecompile) , fUseDDLSink(useDDLSink) + , fOOPRish(OOPRish) , fSurfType(surfType) { if (!useStencilBuffers) { fContextOverrides |= ContextOverrides::kAvoidStencilBuffers; @@ -493,6 +498,7 @@ SkCommandLineConfigGpu* parse_command_line_config_gpu(const SkString& int testPersistentCache = 0; bool testPrecompile = false; bool useDDLs = false; + bool ooprish = false; SkCommandLineConfigGpu::SurfType surfType = SkCommandLineConfigGpu::SurfType::kDefault; bool parseSucceeded = false; @@ -511,6 +517,7 @@ SkCommandLineConfigGpu* parse_command_line_config_gpu(const SkString& extendedOptions.get_option_int("testPersistentCache", &testPersistentCache) && extendedOptions.get_option_bool("testPrecompile", &testPrecompile) && extendedOptions.get_option_bool("useDDLSink", &useDDLs) && + extendedOptions.get_option_bool("OOPRish", &ooprish) && extendedOptions.get_option_gpu_surf_type("surf", &surfType); // testing threading and the persistent cache are mutually exclusive. @@ -531,6 +538,7 @@ SkCommandLineConfigGpu* parse_command_line_config_gpu(const SkString& testPersistentCache, testPrecompile, useDDLs, + ooprish, surfType); } diff --git a/tools/flags/CommonFlagsConfig.h b/tools/flags/CommonFlagsConfig.h index f4ae2949ea18b..02bd8569a417e 100644 --- a/tools/flags/CommonFlagsConfig.h +++ b/tools/flags/CommonFlagsConfig.h @@ -64,6 +64,7 @@ class SkCommandLineConfigGpu : public SkCommandLineConfig { int testPersistentCache, bool testPrecompile, bool useDDLSink, + bool OOPRish, SurfType); const SkCommandLineConfigGpu* asConfigGpu() const override { return this; } @@ -78,6 +79,7 @@ class SkCommandLineConfigGpu : public SkCommandLineConfig { int getTestPersistentCache() const { return fTestPersistentCache; } bool getTestPrecompile() const { return fTestPrecompile; } bool getUseDDLSink() const { return fUseDDLSink; } + bool getOOPRish() const { return fOOPRish; } SurfType getSurfType() const { return fSurfType; } private: @@ -92,6 +94,7 @@ class SkCommandLineConfigGpu : public SkCommandLineConfig { int fTestPersistentCache; bool fTestPrecompile; bool fUseDDLSink; + bool fOOPRish; SurfType fSurfType; }; diff --git a/tools/flags/CommonFlagsGpu.cpp b/tools/flags/CommonFlagsGpu.cpp index b00bf8892d809..4f15944e75000 100644 --- a/tools/flags/CommonFlagsGpu.cpp +++ b/tools/flags/CommonFlagsGpu.cpp @@ -60,7 +60,7 @@ static GpuPathRenderers get_named_pathrenderers_flags(const char* name) { } else if (!strcmp(name, "default")) { return GpuPathRenderers::kDefault; } - SK_ABORT(SkStringPrintf("error: unknown named path renderer \"%s\"\n", name).c_str()); + SK_ABORT("error: unknown named path renderer \"%s\"\n", name); } static GpuPathRenderers collect_gpu_path_renderers_from_flags() { diff --git a/tools/fm/fm.cpp b/tools/fm/fm.cpp index 75f1389eaa83a..d6bab75cb3e55 100644 --- a/tools/fm/fm.cpp +++ b/tools/fm/fm.cpp @@ -11,6 +11,7 @@ #include "include/core/SkPictureRecorder.h" #include "include/docs/SkPDFDocument.h" #include "include/gpu/GrContextOptions.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkTHash.h" #include "src/core/SkColorSpacePriv.h" #include "src/core/SkMD5.h" @@ -131,7 +132,16 @@ static void init(Source* source, std::shared_ptr gm) { source->size = gm->getISize(); source->tweak = [gm](GrContextOptions* options) { gm->modifyGrContextOptions(options); }; source->draw = [gm](SkCanvas* canvas) { + auto direct = canvas->recordingContext() ? canvas->recordingContext()->asDirectContext() + : nullptr; + SkString err; + switch (gm->gpuSetup(direct, canvas, &err)) { + case skiagm::DrawResult::kOk : break; + case skiagm::DrawResult::kSkip: return skip; + case skiagm::DrawResult::kFail: return fail(err.c_str()); + } + switch (gm->draw(canvas, &err)) { case skiagm::DrawResult::kOk: break; case skiagm::DrawResult::kSkip: return skip; @@ -292,8 +302,7 @@ static sk_sp draw_with_gpu(std::function draw, auto overrides = GrContextFactory::ContextOverrides::kNone; if (!FLAGS_stencils) { overrides |= GrContextFactory::ContextOverrides::kAvoidStencilBuffers; } - GrContext* context = factory->getContextInfo(api, overrides) - .grContext(); + auto context = factory->getContextInfo(api, overrides).directContext(); uint32_t flags = FLAGS_dit ? SkSurfaceProps::kUseDeviceIndependentFonts_Flag : 0; @@ -573,7 +582,7 @@ int main(int argc, char** argv) { case Result::Ok: break; case Result::Skip: return false; case Result::Fail: - SK_ABORT(result.failure.c_str()); + SK_ABORT("%s", result.failure.c_str()); } return true; }; diff --git a/tools/gpu/BackendTextureImageFactory.cpp b/tools/gpu/BackendTextureImageFactory.cpp new file mode 100644 index 0000000000000..82e69216f9ae5 --- /dev/null +++ b/tools/gpu/BackendTextureImageFactory.cpp @@ -0,0 +1,77 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "tools/gpu/BackendTextureImageFactory.h" + +#include "include/core/SkImage.h" +#include "include/core/SkPixmap.h" +#include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrContext.h" +#include "src/core/SkAutoPixmapStorage.h" + +namespace { +class ManagedBackendTexture : public SkNVRefCnt { +public: + ~ManagedBackendTexture() { + if (fContext && fTexture.isValid()) { + fContext->submit(true); + fContext->deleteBackendTexture(fTexture); + } + } + + static void Release(void* context) { static_cast(context)->unref(); } + + template + static sk_sp Make(GrContext* context, Args&&... args) { + sk_sp mbet(new ManagedBackendTexture); + mbet->fContext = context; + mbet->fTexture = context->createBackendTexture(std::forward(args)..., Release, + mbet->refAndPassAsContext()); + return mbet; + } + + const GrBackendTexture& texture() { return fTexture; } + + void* refAndPassAsContext() { + this->ref(); + return static_cast(this); + } + +private: + ManagedBackendTexture() = default; + GrContext* fContext = nullptr; + GrBackendTexture fTexture; +}; +} // namespace + +namespace sk_gpu_test { +sk_sp MakeBackendTextureImage(GrContext* context, + const SkPixmap& pixmap, + GrRenderable renderable, + GrSurfaceOrigin origin) { + const SkPixmap* src = &pixmap; + SkAutoPixmapStorage temp; + if (origin == kBottomLeft_GrSurfaceOrigin) { + temp.alloc(src->info()); + auto s = static_cast(src->addr(0, pixmap.height() - 1)); + auto d = static_cast(temp.writable_addr(0, 0)); + for (int y = 0; y < temp.height(); ++y, s -= pixmap.rowBytes(), d += temp.rowBytes()) { + std::copy_n(s, temp.info().minRowBytes(), d); + } + src = &temp; + } + auto mbet = ManagedBackendTexture::Make(context, src, 1, renderable, GrProtected::kNo); + return SkImage::MakeFromTexture(context, + mbet->texture(), + origin, + src->colorType(), + src->alphaType(), + src->refColorSpace(), + ManagedBackendTexture::Release, + mbet->refAndPassAsContext()); +} +} // namespace sk_gpu_test diff --git a/tools/gpu/BackendTextureImageFactory.h b/tools/gpu/BackendTextureImageFactory.h new file mode 100644 index 0000000000000..a8a02aba8e61d --- /dev/null +++ b/tools/gpu/BackendTextureImageFactory.h @@ -0,0 +1,24 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "include/core/SkRefCnt.h" +#include "include/gpu/GrTypes.h" + +class GrContext; +class SkImage; +class SkPixmap; + +namespace sk_gpu_test { +/** + * Creates a backend texture with pixmap contents and wraps it in a SkImage that safely deletes + * the texture when it goes away. Unlike using makeTextureImage() on a non-GPU image, this will + * fail rather than fallback if the pixmaps's color type doesn't map to a supported texture format. + * For testing purposes the texture can be made renderable to exercise different code paths for + * renderable textures/formats. + */ +sk_sp MakeBackendTextureImage(GrContext*, const SkPixmap&, GrRenderable, GrSurfaceOrigin); +} // namespace sk_gpu_test diff --git a/tools/gpu/FlushFinishTracker.cpp b/tools/gpu/FlushFinishTracker.cpp new file mode 100644 index 0000000000000..b536701114f9a --- /dev/null +++ b/tools/gpu/FlushFinishTracker.cpp @@ -0,0 +1,30 @@ +/* + * Copyright 2020 Google LLC + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "tools/gpu/FlushFinishTracker.h" + +#include "include/gpu/GrDirectContext.h" +#include "src/core/SkTraceEvent.h" + +#include + +namespace sk_gpu_test { + +void FlushFinishTracker::waitTillFinished() { + TRACE_EVENT0("skia.gpu", TRACE_FUNC); + auto begin = std::chrono::steady_clock::now(); + auto end = begin; + while (!fIsFinished && (end - begin) < std::chrono::seconds(2)) { + fContext->checkAsyncWorkCompletion(); + end = std::chrono::steady_clock::now(); + } + if (!fIsFinished) { + SkDebugf("WARNING: Wait failed for flush sync. Timings might not be accurate.\n"); + } +} + +} //namespace sk_gpu_test diff --git a/tools/gpu/FlushFinishTracker.h b/tools/gpu/FlushFinishTracker.h index 9e7956a559fd0..22478cc6b691b 100644 --- a/tools/gpu/FlushFinishTracker.h +++ b/tools/gpu/FlushFinishTracker.h @@ -9,10 +9,8 @@ #define FlushFinishTracker_DEFINED #include "include/core/SkRefCnt.h" -#include "include/gpu/GrContext.h" -#include "src/core/SkTraceEvent.h" -#include +class GrDirectContext; namespace sk_gpu_test { @@ -24,25 +22,14 @@ class FlushFinishTracker : public SkRefCnt { tracker->unref(); } - FlushFinishTracker(GrContext* context) : fContext(context) {} + FlushFinishTracker(GrDirectContext* context) : fContext(context) {} void setFinished() { fIsFinished = true; } - void waitTillFinished() { - TRACE_EVENT0("skia.gpu", TRACE_FUNC); - auto begin = std::chrono::steady_clock::now(); - auto end = begin; - while (!fIsFinished && (end - begin) < std::chrono::seconds(2)) { - fContext->checkAsyncWorkCompletion(); - end = std::chrono::steady_clock::now(); - } - if (!fIsFinished) { - SkDebugf("WARNING: Wait failed for flush sync. Timings might not be accurate.\n"); - } - } + void waitTillFinished(); private: - GrContext* fContext; + GrDirectContext* fContext; // Currently we don't have the this bool be atomic cause all current uses of this class happen // on a single thread. In other words we call flush, checkAsyncWorkCompletion, and diff --git a/tools/gpu/GrContextFactory.cpp b/tools/gpu/GrContextFactory.cpp index 13cc9792050d3..80c13a5d049d6 100644 --- a/tools/gpu/GrContextFactory.cpp +++ b/tools/gpu/GrContextFactory.cpp @@ -6,6 +6,7 @@ * found in the LICENSE file. */ +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "tools/gpu/GrContextFactory.h" #ifdef SK_GL @@ -90,7 +91,8 @@ void GrContextFactory::abandonContexts() { auto restore = context.fTestContext->makeCurrentAndAutoRestore(); context.fTestContext->testAbandon(); } - bool requiresEarlyAbandon = (context.fGrContext->backend() == GrBackendApi::kVulkan); + GrBackendApi api = context.fGrContext->backend(); + bool requiresEarlyAbandon = api == GrBackendApi::kVulkan || api == GrBackendApi::kDawn; if (requiresEarlyAbandon) { context.fGrContext->abandonContext(); } @@ -128,12 +130,13 @@ void GrContextFactory::releaseResourcesAndAbandonContexts() { } } -GrContext* GrContextFactory::get(ContextType type, ContextOverrides overrides) { - return this->getContextInfo(type, overrides).grContext(); +GrDirectContext* GrContextFactory::get(ContextType type, ContextOverrides overrides) { + return this->getContextInfo(type, overrides).directContext(); } ContextInfo GrContextFactory::getContextInfoInternal(ContextType type, ContextOverrides overrides, - GrContext* shareContext, uint32_t shareIndex) { + GrDirectContext* shareContext, + uint32_t shareIndex) { // (shareIndex != 0) -> (shareContext != nullptr) SkASSERT((shareIndex == 0) || (shareContext != nullptr)); @@ -301,10 +304,14 @@ ContextInfo GrContextFactory::getContextInfoInternal(ContextType type, ContextOv if (ContextOverrides::kAvoidStencilBuffers & overrides) { grOptions.fAvoidStencilBuffers = true; } - sk_sp grCtx; + sk_sp grCtx; { auto restore = testCtx->makeCurrentAndAutoRestore(); - grCtx = testCtx->makeGrContext(grOptions); + // CONTEXT TODO: makeGrContext should return an sk_sp + auto tmp = testCtx->makeGrContext(grOptions); + if (tmp) { + grCtx = sk_ref_sp(tmp->asDirectContext()); + } } if (!grCtx.get()) { return ContextInfo(); @@ -330,7 +337,8 @@ ContextInfo GrContextFactory::getContextInfo(ContextType type, ContextOverrides return this->getContextInfoInternal(type, overrides, nullptr, 0); } -ContextInfo GrContextFactory::getSharedContextInfo(GrContext* shareContext, uint32_t shareIndex) { +ContextInfo GrContextFactory::getSharedContextInfo(GrDirectContext* shareContext, + uint32_t shareIndex) { SkASSERT(shareContext); for (int i = 0; i < fContexts.count(); ++i) { if (!fContexts[i].fAbandoned && fContexts[i].fGrContext == shareContext) { diff --git a/tools/gpu/GrContextFactory.h b/tools/gpu/GrContextFactory.h index d0d76c34a75aa..4f669fa554156 100644 --- a/tools/gpu/GrContextFactory.h +++ b/tools/gpu/GrContextFactory.h @@ -8,8 +8,8 @@ #ifndef GrContextFactory_DEFINED #define GrContextFactory_DEFINED -#include "include/gpu/GrContext.h" #include "include/gpu/GrContextOptions.h" +#include "include/gpu/GrDirectContext.h" #include "include/private/SkTArray.h" #include "tools/gpu/gl/GLTestContext.h" @@ -135,17 +135,17 @@ class GrContextFactory : SkNoncopyable { * overrides. To get multiple contexts in a single share group, pass the same shareContext, * with different values for shareIndex. */ - ContextInfo getSharedContextInfo(GrContext* shareContext, uint32_t shareIndex = 0); + ContextInfo getSharedContextInfo(GrDirectContext* shareContext, uint32_t shareIndex = 0); /** * Get a GrContext initialized with a type of GL context. It also makes the GL context current. */ - GrContext* get(ContextType type, ContextOverrides overrides = ContextOverrides::kNone); + GrDirectContext* get(ContextType type, ContextOverrides overrides = ContextOverrides::kNone); const GrContextOptions& getGlobalOptions() const { return fGlobalOptions; } private: ContextInfo getContextInfoInternal(ContextType type, ContextOverrides overrides, - GrContext* shareContext, uint32_t shareIndex); + GrDirectContext* shareContext, uint32_t shareIndex); struct Context { ContextType fType; @@ -153,8 +153,8 @@ class GrContextFactory : SkNoncopyable { GrContextOptions fOptions; GrBackendApi fBackend; TestContext* fTestContext; - GrContext* fGrContext; - GrContext* fShareContext; + GrDirectContext* fGrContext; + GrDirectContext* fShareContext; uint32_t fShareIndex; bool fAbandoned; @@ -172,8 +172,7 @@ class ContextInfo { GrContextFactory::ContextType type() const { return fType; } GrBackendApi backend() const { return GrContextFactory::ContextTypeBackend(fType); } - GrContext* grContext() const { return fGrContext; } - + GrDirectContext* directContext() const { return fContext; } TestContext* testContext() const { return fTestContext; } #ifdef SK_GL @@ -186,14 +185,16 @@ class ContextInfo { const GrContextOptions& options() const { return fOptions; } private: - ContextInfo(GrContextFactory::ContextType type, TestContext* testContext, GrContext* grContext, + ContextInfo(GrContextFactory::ContextType type, + TestContext* testContext, + GrDirectContext* context, const GrContextOptions& options) - : fType(type), fTestContext(testContext), fGrContext(grContext), fOptions(options) {} + : fType(type), fTestContext(testContext), fContext(context), fOptions(options) {} GrContextFactory::ContextType fType = GrContextFactory::kGL_ContextType; // Valid until the factory destroys it via abandonContexts() or destroyContexts(). TestContext* fTestContext = nullptr; - GrContext* fGrContext = nullptr; + GrDirectContext* fContext = nullptr; GrContextOptions fOptions; friend class GrContextFactory; diff --git a/tools/gpu/GrTest.cpp b/tools/gpu/GrTest.cpp index d6286674e7219..f127e66aff120 100644 --- a/tools/gpu/GrTest.cpp +++ b/tools/gpu/GrTest.cpp @@ -8,7 +8,7 @@ #include "include/core/SkString.h" #include "include/gpu/GrBackendSurface.h" #include "include/gpu/GrContextOptions.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "include/private/SkTo.h" #include "src/core/SkMathPriv.h" #include "src/gpu/GrClip.h" @@ -69,7 +69,7 @@ void GrRenderTargetContextPriv::testingOnly_addDrawOp( std::unique_ptr op, const std::function& willAddFn) { ASSERT_SINGLE_OWNER - if (fRenderTargetContext->fContext->priv().abandoned()) { + if (fRenderTargetContext->fContext->abandoned()) { fRenderTargetContext->fContext->priv().opMemoryPool()->release(std::move(op)); return; } diff --git a/tools/gpu/MemoryCache.cpp b/tools/gpu/MemoryCache.cpp index d8fdaf7157828..93ef2b14a4710 100644 --- a/tools/gpu/MemoryCache.cpp +++ b/tools/gpu/MemoryCache.cpp @@ -57,6 +57,7 @@ void MemoryCache::store(const SkData& key, const SkData& data) { SkDebugf("Store Key: %s\n\tData: %s\n\n", data_to_str(key).c_str(), data_to_str(data).c_str()); } + ++fCacheStoreCnt; fMap[Key(key)] = Value(data); } @@ -96,7 +97,7 @@ void MemoryCache::writeShadersToDisk(const char* path, GrBackendApi api) { // Even with the SPIR-V switches, it seems like we must use .spv, or malisc tries to // run glslang on the input. const char* ext = GrBackendApi::kOpenGL == api ? "frag" : "spv"; - SkReader32 reader(data->data(), data->size()); + SkReadBuffer reader(data->data(), data->size()); GrPersistentCacheUtils::GetType(&reader); // Shader type tag GrPersistentCacheUtils::UnpackCachedShaders(&reader, shaders, inputsIgnored, kGrShaderTypeCount); diff --git a/tools/gpu/MemoryCache.h b/tools/gpu/MemoryCache.h index 22911a5413b27..f70cf1388e822 100644 --- a/tools/gpu/MemoryCache.h +++ b/tools/gpu/MemoryCache.h @@ -28,14 +28,18 @@ class MemoryCache : public GrContextOptions::PersistentCache { MemoryCache(const MemoryCache&) = delete; MemoryCache& operator=(const MemoryCache&) = delete; void reset() { - fCacheMissCnt = 0; + this->resetCacheStats(); fMap.clear(); } sk_sp load(const SkData& key) override; void store(const SkData& key, const SkData& data) override; int numCacheMisses() const { return fCacheMissCnt; } - void resetNumCacheMisses() { fCacheMissCnt = 0; } + int numCacheStores() const { return fCacheStoreCnt; } + void resetCacheStats() { + fCacheMissCnt = 0; + fCacheStoreCnt = 0; + } void writeShadersToDisk(const char* path, GrBackendApi backend); @@ -80,6 +84,7 @@ class MemoryCache : public GrContextOptions::PersistentCache { }; int fCacheMissCnt = 0; + int fCacheStoreCnt = 0; std::unordered_map fMap; }; diff --git a/tools/gpu/ProxyUtils.cpp b/tools/gpu/ProxyUtils.cpp index 633467cbd5577..67247077f1dd9 100644 --- a/tools/gpu/ProxyUtils.cpp +++ b/tools/gpu/ProxyUtils.cpp @@ -7,6 +7,7 @@ #include "include/core/SkColor.h" #include "include/gpu/GrBackendSurface.h" +#include "include/gpu/GrDirectContext.h" #include "src/gpu/GrContextPriv.h" #include "src/gpu/GrDrawingManager.h" #include "src/gpu/GrGpu.h" @@ -20,17 +21,17 @@ namespace sk_gpu_test { -sk_sp MakeTextureProxyFromData(GrContext* context, +sk_sp MakeTextureProxyFromData(GrDirectContext* direct, GrRenderable renderable, GrSurfaceOrigin origin, const GrImageInfo& imageInfo, const void* data, size_t rowBytes) { - if (context->priv().abandoned()) { + if (direct->abandoned()) { return nullptr; } - const GrCaps* caps = context->priv().caps(); + const GrCaps* caps = direct->priv().caps(); const GrBackendFormat format = caps->getDefaultBackendFormat(imageInfo.colorType(), renderable); if (!format.isValid()) { @@ -39,19 +40,19 @@ sk_sp MakeTextureProxyFromData(GrContext* context, GrSwizzle swizzle = caps->getReadSwizzle(format, imageInfo.colorType()); sk_sp proxy; - proxy = context->priv().proxyProvider()->createProxy(format, imageInfo.dimensions(), renderable, - 1, GrMipMapped::kNo, SkBackingFit::kExact, - SkBudgeted::kYes, GrProtected::kNo); + proxy = direct->priv().proxyProvider()->createProxy(format, imageInfo.dimensions(), renderable, + 1, GrMipMapped::kNo, SkBackingFit::kExact, + SkBudgeted::kYes, GrProtected::kNo); if (!proxy) { return nullptr; } GrSurfaceProxyView view(proxy, origin, swizzle); - auto sContext = GrSurfaceContext::Make(context, std::move(view), imageInfo.colorType(), + auto sContext = GrSurfaceContext::Make(direct, std::move(view), imageInfo.colorType(), imageInfo.alphaType(), imageInfo.refColorSpace()); if (!sContext) { return nullptr; } - if (!sContext->writePixels(imageInfo, data, rowBytes, {0, 0}, context)) { + if (!sContext->writePixels(imageInfo, data, rowBytes, {0, 0}, direct)) { return nullptr; } return proxy; diff --git a/tools/gpu/ProxyUtils.h b/tools/gpu/ProxyUtils.h index 44b670b06e1d4..4c83c202daa67 100644 --- a/tools/gpu/ProxyUtils.h +++ b/tools/gpu/ProxyUtils.h @@ -13,12 +13,13 @@ #include "src/gpu/GrPipeline.h" #include "src/gpu/GrTextureProxy.h" +class GrDirectContext; class GrProgramInfo; namespace sk_gpu_test { /** Makes a texture proxy containing the passed in color data. */ -sk_sp MakeTextureProxyFromData(GrContext*, +sk_sp MakeTextureProxyFromData(GrDirectContext*, GrRenderable, GrSurfaceOrigin, const GrImageInfo&, diff --git a/tools/gpu/TestContext.cpp b/tools/gpu/TestContext.cpp index 9b9e5dcbb9dbd..860b771ba72e6 100644 --- a/tools/gpu/TestContext.cpp +++ b/tools/gpu/TestContext.cpp @@ -8,9 +8,8 @@ #include "tools/gpu/TestContext.h" -#include "include/gpu/GrContext.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkTraceEvent.h" -#include "src/gpu/GrContextPriv.h" #include "tools/gpu/FlushFinishTracker.h" #include "tools/gpu/GpuTimer.h" @@ -35,7 +34,7 @@ SkScopeExit TestContext::makeCurrentAndAutoRestore() const { return asr; } -void TestContext::flushAndWaitOnSync(GrContext* context) { +void TestContext::flushAndWaitOnSync(GrDirectContext* context) { TRACE_EVENT0("skia.gpu", TRACE_FUNC); SkASSERT(context); diff --git a/tools/gpu/TestContext.h b/tools/gpu/TestContext.h index 35cf3d863bcf8..acf3cf9a49786 100644 --- a/tools/gpu/TestContext.h +++ b/tools/gpu/TestContext.h @@ -17,6 +17,7 @@ #include "tools/gpu/FenceSync.h" class GrContext; +class GrDirectContext; struct GrContextOptions; namespace sk_gpu_test { @@ -70,7 +71,7 @@ class TestContext : public SkNoncopyable { * unfinished flushes active on the GPU at a time. If we have 2 outstanding flushes then we will * wait on the CPU until one has finished. */ - void flushAndWaitOnSync(GrContext* context); + void flushAndWaitOnSync(GrDirectContext* context); /** * This notifies the context that we are deliberately testing abandoning diff --git a/tools/gpu/TestOps.cpp b/tools/gpu/TestOps.cpp index ff5201a2c9875..e0a195f34eb55 100644 --- a/tools/gpu/TestOps.cpp +++ b/tools/gpu/TestOps.cpp @@ -32,26 +32,27 @@ class GP : public GrGeometryProcessor { const char* name() const override { return "TestRectOp::GP"; } - GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps& caps) const override; + GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps& caps) const override { + return new GLSLGP(); + } - void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override {} + void getGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder* b) const override { + GLSLGP::GenKey(*this, b); + } bool wideColor() const { return fInColor.cpuType() != kUByte4_norm_GrVertexAttribType; } private: - Attribute fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; - Attribute fInLocalCoords = {"inLocalCoords", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; - Attribute fInColor; - SkMatrix fLocalMatrix; -}; - -GrGLSLPrimitiveProcessor* GP::createGLSLInstance(const GrShaderCaps& caps) const { class GLSLGP : public GrGLSLGeometryProcessor { + public: void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& pp, - const CoordTransformRange& transformRange) override { + const GrPrimitiveProcessor& pp) override { const auto& gp = pp.cast(); - this->setTransformDataHelper(gp.fLocalMatrix, pdman, transformRange); + this->setTransform(pdman, fLocalMatrixUni, gp.fLocalMatrix); + } + + static void GenKey(const GP& gp, GrProcessorKeyBuilder* b) { + b->add32(ComputeMatrixKey(gp.fLocalMatrix)); } private: @@ -65,13 +66,19 @@ GrGLSLPrimitiveProcessor* GP::createGLSLInstance(const GrShaderCaps& caps) const args.fFragBuilder->codeAppendf("%s = %s;", args.fOutputColor, colorVarying.fsIn()); args.fFragBuilder->codeAppendf("%s = half4(1);", args.fOutputCoverage); this->writeOutputPosition(args.fVertBuilder, gpArgs, gp.fInPosition.name()); - this->emitTransforms(args.fVertBuilder, args.fVaryingHandler, args.fUniformHandler, - gp.fInLocalCoords.asShaderVar(), gp.fLocalMatrix, - args.fFPCoordTransformHandler); + this->writeLocalCoord(args.fVertBuilder, args.fUniformHandler, gpArgs, + gp.fInLocalCoords.asShaderVar(), gp.fLocalMatrix, + &fLocalMatrixUni); } + + UniformHandle fLocalMatrixUni; }; - return new GLSLGP(); -} + + Attribute fInPosition = {"inPosition", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; + Attribute fInLocalCoords = {"inLocalCoords", kFloat2_GrVertexAttribType, kFloat2_GrSLType}; + Attribute fInColor; + SkMatrix fLocalMatrix; +}; class TestRectOp final : public GrMeshDrawOp { public: diff --git a/tools/gpu/TestOps.h b/tools/gpu/TestOps.h index 9f05a326c0de3..9766ef991338a 100644 --- a/tools/gpu/TestOps.h +++ b/tools/gpu/TestOps.h @@ -9,7 +9,7 @@ #define TestRectOp_DEFINED #include "include/core/SkRefCnt.h" -#include "include/private/GrRecordingContext.h" +#include "include/gpu/GrRecordingContext.h" #include "src/gpu/GrRecordingContextPriv.h" #include "src/gpu/ops/GrMeshDrawOp.h" diff --git a/tools/gpu/YUVUtils.cpp b/tools/gpu/YUVUtils.cpp index eb4ca2c3d124b..4b57f4ccde9db 100644 --- a/tools/gpu/YUVUtils.cpp +++ b/tools/gpu/YUVUtils.cpp @@ -85,4 +85,59 @@ bool LazyYUVImage::ensureYUVImage(GrContext* context) { return fYUVImage != nullptr; } +/////////////////////////////////////////////////////////////////////////////////////////////////// +void YUVABackendReleaseContext::Unwind(GrContext* context, YUVABackendReleaseContext* beContext, + bool fullFlush) { + + // Some backends (e.g., Vulkan) require that all work associated w/ texture + // creation be completed before deleting the textures. + if (fullFlush) { + // If the release context client performed some operations other than backend texture + // creation then we may require a full flush to ensure that all the work is completed. + context->flush(); + context->submit(true); + } else { + context->submit(); + + while (!beContext->creationCompleted()) { + context->checkAsyncWorkCompletion(); + } + } + + delete beContext; +} + +YUVABackendReleaseContext::YUVABackendReleaseContext(GrContext* context) : fContext(context) { + SkASSERT(context->priv().getGpu()); + SkASSERT(context->asDirectContext()); +} + +YUVABackendReleaseContext::~YUVABackendReleaseContext() { + for (int i = 0; i < 4; ++i) { + if (fBETextures[i].isValid()) { + SkASSERT(fCreationComplete[i]); + fContext->deleteBackendTexture(fBETextures[i]); + } + } +} + +template static void CreationComplete(void* releaseContext) { + auto beContext = reinterpret_cast(releaseContext); + beContext->setCreationComplete(I); +} + +GrGpuFinishedProc YUVABackendReleaseContext::CreationCompleteProc(int index) { + SkASSERT(index >= 0 && index < 4); + + switch (index) { + case 0: return CreationComplete<0>; + case 1: return CreationComplete<1>; + case 2: return CreationComplete<2>; + case 3: return CreationComplete<3>; + } + + SK_ABORT("Invalid YUVA Index."); + return nullptr; +} + } // namespace sk_gpu_test diff --git a/tools/gpu/YUVUtils.h b/tools/gpu/YUVUtils.h index f6097b9476d02..253d6f94c73c0 100644 --- a/tools/gpu/YUVUtils.h +++ b/tools/gpu/YUVUtils.h @@ -11,6 +11,7 @@ #include "include/core/SkImage.h" #include "include/core/SkYUVAIndex.h" #include "include/core/SkYUVASizeInfo.h" +#include "include/gpu/GrBackendSurface.h" #include "src/core/SkAutoMalloc.h" class SkData; @@ -49,6 +50,66 @@ class LazyYUVImage { bool ensureYUVImage(GrContext* context); }; +// A helper for managing the lifetime of backend textures for YUVA images. +class YUVABackendReleaseContext { +public: + static GrGpuFinishedProc CreationCompleteProc(int index); + + // A stock 'TextureReleaseProc' to use with this class + static void Release(void* releaseContext) { + auto beContext = reinterpret_cast(releaseContext); + + delete beContext; + } + + // Given how and when backend textures are created, just deleting this object often + // isn't enough. This helper encapsulates the extra work needed. + static void Unwind(GrContext* context, YUVABackendReleaseContext* beContext, bool fullFlush); + + YUVABackendReleaseContext(GrContext* context); + ~YUVABackendReleaseContext(); + + void set(int index, const GrBackendTexture& beTex) { + SkASSERT(index >= 0 && index < 4); + SkASSERT(!fBETextures[index].isValid()); + SkASSERT(beTex.isValid()); + + fBETextures[index] = beTex; + } + + void setCreationComplete(int index) { + SkASSERT(index >= 0 && index < 4); + // In GL, the finished proc can fire before the backend texture is returned to the client + // SkASSERT(fBETextures[index].isValid()); + + fCreationComplete[index] = true; + } + + bool creationCompleted() const { + for (int i = 0; i < 4; ++i) { + if (fBETextures[i].isValid() && !fCreationComplete[i]) { + return false; + } + } + + return true; + } + + const GrBackendTexture* beTextures() const { return fBETextures; } + + const GrBackendTexture& beTexture(int index) { + SkASSERT(index >= 0 && index < 4); + SkASSERT(fBETextures[index].isValid()); + return fBETextures[index]; + } + +private: + GrContext* fContext; + GrBackendTexture fBETextures[4]; + bool fCreationComplete[4] = { false }; +}; + + } // namespace sk_gpu_test #endif // YUVUtils_DEFINED diff --git a/tools/gpu/d3d/D3DTestContext.cpp b/tools/gpu/d3d/D3DTestContext.cpp index ba00a36cd5ca0..fff7ca127ff8f 100644 --- a/tools/gpu/d3d/D3DTestContext.cpp +++ b/tools/gpu/d3d/D3DTestContext.cpp @@ -55,6 +55,7 @@ class D3DTestContextImpl : public sk_gpu_test::D3DTestContext { private: D3DTestContextImpl(const GrD3DBackendContext& backendContext, bool ownsContext) : D3DTestContext(backendContext, ownsContext) { + fFenceSupport = true; } void onPlatformMakeNotCurrent() const override {} diff --git a/tools/gpu/dawn/DawnTestContext.cpp b/tools/gpu/dawn/DawnTestContext.cpp index f30c5ecf5227f..58d755ea5c126 100644 --- a/tools/gpu/dawn/DawnTestContext.cpp +++ b/tools/gpu/dawn/DawnTestContext.cpp @@ -77,6 +77,10 @@ class ProcGetter { ProcGetter* ProcGetter::fInstance; #endif +static void PrintDeviceError(WGPUErrorType, const char* message, void*) { + SkDebugf("Device error: %s\n", message); +} + class DawnTestContextImpl : public sk_gpu_test::DawnTestContext { public: static wgpu::Device createDevice(const dawn_native::Instance& instance, @@ -124,6 +128,7 @@ class DawnTestContextImpl : public sk_gpu_test::DawnTestContext { #endif #endif device = createDevice(*instance, type); + device.SetUncapturedErrorCallback(PrintDeviceError, 0); } if (!device) { return nullptr; diff --git a/tools/gpu/gl/GLTestContext.cpp b/tools/gpu/gl/GLTestContext.cpp index 75c1fee8fd594..f40657c938890 100644 --- a/tools/gpu/gl/GLTestContext.cpp +++ b/tools/gpu/gl/GLTestContext.cpp @@ -222,41 +222,6 @@ void GLTestContext::finish() { #endif } -GrGLuint GLTestContext::createTextureRectangle(int width, int height, GrGLenum internalFormat, - GrGLenum externalFormat, GrGLenum externalType, - GrGLvoid* data) { -#ifdef SK_GL - // Should match GrGLCaps check for fRectangleTextureSupport. - if (kGL_GrGLStandard != fGL->fStandard || - (GrGLGetVersion(fGL.get()) < GR_GL_VER(3, 1) && - !fGL->fExtensions.has("GL_ARB_texture_rectangle") && - !fGL->fExtensions.has("GL_ANGLE_texture_rectangle"))) { - return 0; - } - - if (GrGLGetGLSLVersion(fGL.get()) < GR_GLSL_VER(1, 40)) { - return 0; - } - - GrGLuint id; - GR_GL_CALL(fGL.get(), GenTextures(1, &id)); - GR_GL_CALL(fGL.get(), BindTexture(GR_GL_TEXTURE_RECTANGLE, id)); - GR_GL_CALL(fGL.get(), TexParameteri(GR_GL_TEXTURE_RECTANGLE, GR_GL_TEXTURE_MAG_FILTER, - GR_GL_NEAREST)); - GR_GL_CALL(fGL.get(), TexParameteri(GR_GL_TEXTURE_RECTANGLE, GR_GL_TEXTURE_MIN_FILTER, - GR_GL_NEAREST)); - GR_GL_CALL(fGL.get(), TexParameteri(GR_GL_TEXTURE_RECTANGLE, GR_GL_TEXTURE_WRAP_S, - GR_GL_CLAMP_TO_EDGE)); - GR_GL_CALL(fGL.get(), TexParameteri(GR_GL_TEXTURE_RECTANGLE, GR_GL_TEXTURE_WRAP_T, - GR_GL_CLAMP_TO_EDGE)); - GR_GL_CALL(fGL.get(), TexImage2D(GR_GL_TEXTURE_RECTANGLE, 0, internalFormat, width, height, 0, - externalFormat, externalType, data)); - return id; -#else - return 0; -#endif -} - sk_sp GLTestContext::makeGrContext(const GrContextOptions& options) { #ifdef SK_GL return GrContext::MakeGL(fGL, options); diff --git a/tools/gpu/gl/GLTestContext.h b/tools/gpu/gl/GLTestContext.h index 601c3b9f18c15..54b47492504c8 100644 --- a/tools/gpu/gl/GLTestContext.h +++ b/tools/gpu/gl/GLTestContext.h @@ -33,10 +33,6 @@ class GLTestContext : public TestContext { virtual void destroyEGLImage(GrEGLImage) const { } - /** Used for testing GL_TEXTURE_RECTANGLE integration. */ - GrGLuint createTextureRectangle(int width, int height, GrGLenum internalFormat, - GrGLenum externalFormat, GrGLenum externalType, GrGLvoid* data); - /** * Used for testing EGLImage integration. Takes a EGLImage and wraps it in a * GL_TEXTURE_EXTERNAL_OES. diff --git a/tools/gpu/gl/angle/GLTestContext_angle.cpp b/tools/gpu/gl/angle/GLTestContext_angle.cpp index 57d39e00fad7c..24eeb2f0441ac 100644 --- a/tools/gpu/gl/angle/GLTestContext_angle.cpp +++ b/tools/gpu/gl/angle/GLTestContext_angle.cpp @@ -25,6 +25,8 @@ #define EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE 0x3208 #define EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE 0x320D +#define EGL_CONTEXT_OPENGL_BACKWARDS_COMPATIBLE_ANGLE 0x3483 + using sk_gpu_test::ANGLEBackend; using sk_gpu_test::ANGLEContextVersion; @@ -281,12 +283,20 @@ ANGLEGLContext::ANGLEGLContext(ANGLEBackend type, ANGLEContextVersion version, } int versionNum = ANGLEContextVersion::kES2 == version ? 2 : 3; - const EGLint contextAttribs[] = { + std::vector contextAttribs = { EGL_CONTEXT_CLIENT_VERSION, versionNum, - EGL_NONE }; + + const char* extensions = eglQueryString(fDisplay, EGL_EXTENSIONS); + if (strstr(extensions, "EGL_ANGLE_create_context_backwards_compatible")) { + contextAttribs.push_back(EGL_CONTEXT_OPENGL_BACKWARDS_COMPATIBLE_ANGLE); + contextAttribs.push_back(EGL_FALSE); + } + + contextAttribs.push_back(EGL_NONE); + EGLContext eglShareContext = shareContext ? shareContext->fContext : nullptr; - fContext = eglCreateContext(fDisplay, surfaceConfig, eglShareContext, contextAttribs); + fContext = eglCreateContext(fDisplay, surfaceConfig, eglShareContext, contextAttribs.data()); if (EGL_NO_CONTEXT == fContext) { SkDebugf("Could not create context!"); this->destroyGLContext(); @@ -337,7 +347,6 @@ ANGLEGLContext::ANGLEGLContext(ANGLEBackend type, ANGLEContextVersion version, break; } #endif - const char* extensions = eglQueryString(fDisplay, EGL_EXTENSIONS); if (strstr(extensions, "EGL_KHR_image")) { fCreateImage = (PFNEGLCREATEIMAGEKHRPROC)eglGetProcAddress("eglCreateImageKHR"); fDestroyImage = (PFNEGLDESTROYIMAGEKHRPROC)eglGetProcAddress("eglDestroyImageKHR"); @@ -366,7 +375,7 @@ GrEGLImage ANGLEGLContext::texture2DToEGLImage(GrGLuint texID) const { void ANGLEGLContext::destroyEGLImage(GrEGLImage image) const { fDestroyImage(fDisplay, image); } GrGLuint ANGLEGLContext::eglImageToExternalTexture(GrEGLImage image) const { - GrGLClearErr(this->gl()); + while (this->gl()->fFunctions.fGetError() != GR_GL_NO_ERROR) {} if (!this->gl()->hasExtension("GL_OES_EGL_image_external")) { return 0; } @@ -382,12 +391,12 @@ GrGLuint ANGLEGLContext::eglImageToExternalTexture(GrEGLImage image) const { return 0; } GR_GL_CALL(this->gl(), BindTexture(GR_GL_TEXTURE_EXTERNAL, texID)); - if (GR_GL_GET_ERROR(this->gl()) != GR_GL_NO_ERROR) { + if (this->gl()->fFunctions.fGetError() != GR_GL_NO_ERROR) { GR_GL_CALL(this->gl(), DeleteTextures(1, &texID)); return 0; } glEGLImageTargetTexture2D(GR_GL_TEXTURE_EXTERNAL, image); - if (GR_GL_GET_ERROR(this->gl()) != GR_GL_NO_ERROR) { + if (this->gl()->fFunctions.fGetError() != GR_GL_NO_ERROR) { GR_GL_CALL(this->gl(), DeleteTextures(1, &texID)); return 0; } diff --git a/tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp b/tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp index e3228a4e7872d..325e034a07ec7 100644 --- a/tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp +++ b/tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp @@ -375,7 +375,7 @@ void EGLGLTestContext::destroyEGLImage(GrEGLImage image) const { GrGLuint EGLGLTestContext::eglImageToExternalTexture(GrEGLImage image) const { #ifdef SK_GL - GrGLClearErr(this->gl()); + while (this->gl()->fFunctions.fGetError() != GR_GL_NO_ERROR) {} if (!this->gl()->hasExtension("GL_OES_EGL_image_external")) { return 0; } @@ -392,12 +392,12 @@ GrGLuint EGLGLTestContext::eglImageToExternalTexture(GrEGLImage image) const { return 0; } GR_GL_CALL_NOERRCHECK(this->gl(), BindTexture(GR_GL_TEXTURE_EXTERNAL, texID)); - if (GR_GL_GET_ERROR(this->gl()) != GR_GL_NO_ERROR) { + if (this->gl()->fFunctions.fGetError() != GR_GL_NO_ERROR) { GR_GL_CALL(this->gl(), DeleteTextures(1, &texID)); return 0; } glEGLImageTargetTexture2D(GR_GL_TEXTURE_EXTERNAL, image); - if (GR_GL_GET_ERROR(this->gl()) != GR_GL_NO_ERROR) { + if (this->gl()->fFunctions.fGetError() != GR_GL_NO_ERROR) { GR_GL_CALL(this->gl(), DeleteTextures(1, &texID)); return 0; } diff --git a/tools/gpu/gl/interface/templates.go b/tools/gpu/gl/interface/templates.go index ebed908c67d67..5f3e3918bceb6 100644 --- a/tools/gpu/gl/interface/templates.go +++ b/tools/gpu/gl/interface/templates.go @@ -234,6 +234,54 @@ GrGLInterface::GrGLInterface() { fStandard = kNone_GrGLStandard; } +#if GR_GL_CHECK_ERROR +static const char* get_error_string(GrGLenum err) { + switch (err) { + case GR_GL_NO_ERROR: + return ""; + case GR_GL_INVALID_ENUM: + return "Invalid Enum"; + case GR_GL_INVALID_VALUE: + return "Invalid Value"; + case GR_GL_INVALID_OPERATION: + return "Invalid Operation"; + case GR_GL_OUT_OF_MEMORY: + return "Out of Memory"; + case GR_GL_CONTEXT_LOST: + return "Context Lost"; + } + return "Unknown"; +} + +GrGLenum GrGLInterface::checkError(const char* location, const char* call) const { + GrGLenum error = fFunctions.fGetError(); + if (error != GR_GL_NO_ERROR && !fSuppressErrorLogging) { + SkDebugf("---- glGetError 0x%x(%s)", error, get_error_string(error)); + if (location) { + SkDebugf(" at\n\t%s", location); + } + if (call) { + SkDebugf("\n\t\t%s", call); + } + SkDebugf("\n"); + if (error == GR_GL_OUT_OF_MEMORY) { + fOOMed = true; + } + } + return error; +} + +bool GrGLInterface::checkAndResetOOMed() const { + if (fOOMed) { + fOOMed = false; + return true; + } + return false; +} + +void GrGLInterface::suppressErrorLogging() { fSuppressErrorLogging = true; } +#endif + #define RETURN_FALSE_INTERFACE \ SkDEBUGF("%s:%d GrGLInterface::validate() failed.\n", __FILE__, __LINE__); \ return false diff --git a/tools/gpu/vk/VkTestHelper.cpp b/tools/gpu/vk/VkTestHelper.cpp new file mode 100644 index 0000000000000..f1a02a495fb57 --- /dev/null +++ b/tools/gpu/vk/VkTestHelper.cpp @@ -0,0 +1,109 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "tools/gpu/vk/VkTestHelper.h" + +#ifdef SK_VULKAN + +#include "include/core/SkSurface.h" +#include "include/gpu/GrContext.h" +#include "tools/gpu/vk/VkTestUtils.h" + +#define ACQUIRE_INST_VK_PROC(name) \ + fVk##name = reinterpret_cast(getProc("vk" #name, fBackendContext.fInstance,\ + VK_NULL_HANDLE)); \ + if (fVk##name == nullptr) { \ + SkDebugf("Function ptr for vk%s could not be acquired\n", #name); \ + return false; \ + } + +#define ACQUIRE_DEVICE_VK_PROC(name) \ + fVk##name = reinterpret_cast(getProc("vk" #name, VK_NULL_HANDLE, fDevice)); \ + if (fVk##name == nullptr) { \ + SkDebugf("Function ptr for vk%s could not be acquired\n", #name); \ + return false; \ + } + +bool VkTestHelper::init() { + PFN_vkGetInstanceProcAddr instProc; + PFN_vkGetDeviceProcAddr devProc; + if (!sk_gpu_test::LoadVkLibraryAndGetProcAddrFuncs(&instProc, &devProc)) { + return false; + } + auto getProc = [&instProc, &devProc](const char* proc_name, + VkInstance instance, VkDevice device) { + if (device != VK_NULL_HANDLE) { + return devProc(device, proc_name); + } + return instProc(instance, proc_name); + }; + + fFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; + fFeatures.pNext = nullptr; + + fBackendContext.fInstance = VK_NULL_HANDLE; + fBackendContext.fDevice = VK_NULL_HANDLE; + + if (!sk_gpu_test::CreateVkBackendContext(getProc, &fBackendContext, &fExtensions, + &fFeatures, &fDebugCallback, nullptr, + sk_gpu_test::CanPresentFn(), fIsProtected)) { + return false; + } + fDevice = fBackendContext.fDevice; + + if (fDebugCallback != VK_NULL_HANDLE) { + fDestroyDebugCallback = reinterpret_cast( + instProc(fBackendContext.fInstance, "vkDestroyDebugReportCallbackEXT")); + } + ACQUIRE_INST_VK_PROC(DestroyInstance) + ACQUIRE_INST_VK_PROC(DeviceWaitIdle) + ACQUIRE_INST_VK_PROC(DestroyDevice) + + ACQUIRE_INST_VK_PROC(GetPhysicalDeviceFormatProperties) + ACQUIRE_INST_VK_PROC(GetPhysicalDeviceMemoryProperties) + + ACQUIRE_DEVICE_VK_PROC(CreateImage) + ACQUIRE_DEVICE_VK_PROC(DestroyImage) + ACQUIRE_DEVICE_VK_PROC(GetImageMemoryRequirements) + ACQUIRE_DEVICE_VK_PROC(AllocateMemory) + ACQUIRE_DEVICE_VK_PROC(FreeMemory) + ACQUIRE_DEVICE_VK_PROC(BindImageMemory) + ACQUIRE_DEVICE_VK_PROC(MapMemory) + ACQUIRE_DEVICE_VK_PROC(UnmapMemory) + ACQUIRE_DEVICE_VK_PROC(FlushMappedMemoryRanges) + ACQUIRE_DEVICE_VK_PROC(GetImageSubresourceLayout) + + fGrContext = GrContext::MakeVulkan(fBackendContext); + if (!fGrContext) { + return false; + } + + return true; +} + +void VkTestHelper::cleanup() { + fGrContext.reset(); + + fBackendContext.fMemoryAllocator.reset(); + if (fDevice != VK_NULL_HANDLE) { + fVkDeviceWaitIdle(fDevice); + fVkDestroyDevice(fDevice, nullptr); + fDevice = VK_NULL_HANDLE; + } + if (fDebugCallback != VK_NULL_HANDLE) { + fDestroyDebugCallback(fBackendContext.fInstance, fDebugCallback, nullptr); + } + + if (fBackendContext.fInstance != VK_NULL_HANDLE) { + fVkDestroyInstance(fBackendContext.fInstance, nullptr); + fBackendContext.fInstance = VK_NULL_HANDLE; + } + + sk_gpu_test::FreeVulkanFeaturesStructs(&fFeatures); +} + +#endif // SK_VULKAN diff --git a/tools/gpu/vk/VkTestHelper.h b/tools/gpu/vk/VkTestHelper.h new file mode 100644 index 0000000000000..965885a1599f9 --- /dev/null +++ b/tools/gpu/vk/VkTestHelper.h @@ -0,0 +1,71 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VkTestHelper_DEFINED +#define VkTestHelper_DEFINED + +#include "include/core/SkTypes.h" + +#ifdef SK_VULKAN + +#include "include/core/SkRefCnt.h" +#include "include/gpu/vk/GrVkBackendContext.h" +#include "include/gpu/vk/GrVkExtensions.h" + +class GrContext; +class SkSurface; + +#define DECLARE_VK_PROC(name) PFN_vk##name fVk##name + +class VkTestHelper { +public: + VkTestHelper(bool isProtected) : fIsProtected(isProtected) {} + + ~VkTestHelper() { + this->cleanup(); + } + + bool init(); + + GrContext* grContext() { return fGrContext.get(); } + +private: + void cleanup(); + + DECLARE_VK_PROC(DestroyInstance); + DECLARE_VK_PROC(DeviceWaitIdle); + DECLARE_VK_PROC(DestroyDevice); + + DECLARE_VK_PROC(GetPhysicalDeviceFormatProperties); + DECLARE_VK_PROC(GetPhysicalDeviceMemoryProperties); + + DECLARE_VK_PROC(CreateImage); + DECLARE_VK_PROC(DestroyImage); + DECLARE_VK_PROC(GetImageMemoryRequirements); + DECLARE_VK_PROC(AllocateMemory); + DECLARE_VK_PROC(FreeMemory); + DECLARE_VK_PROC(BindImageMemory); + DECLARE_VK_PROC(MapMemory); + DECLARE_VK_PROC(UnmapMemory); + DECLARE_VK_PROC(FlushMappedMemoryRanges); + DECLARE_VK_PROC(GetImageSubresourceLayout); + + bool fIsProtected = false; + VkDevice fDevice = VK_NULL_HANDLE; + + GrVkExtensions fExtensions; + VkPhysicalDeviceFeatures2 fFeatures = {}; + VkDebugReportCallbackEXT fDebugCallback = VK_NULL_HANDLE; + PFN_vkDestroyDebugReportCallbackEXT fDestroyDebugCallback = nullptr; + GrVkBackendContext fBackendContext; + sk_sp fGrContext; +}; + +#undef DECLARE_VK_PROC + +#endif // SK_VULKAN +#endif // VkTestHelper_DEFINED diff --git a/tools/gpu/vk/VkTestUtils.cpp b/tools/gpu/vk/VkTestUtils.cpp index a6026af739b70..86084cf793546 100644 --- a/tools/gpu/vk/VkTestUtils.cpp +++ b/tools/gpu/vk/VkTestUtils.cpp @@ -110,6 +110,11 @@ VKAPI_ATTR VkBool32 VKAPI_CALL DebugReportCallback( const char* pMessage, void* pUserData) { if (flags & VK_DEBUG_REPORT_ERROR_BIT_EXT) { + // See https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/1887 + if (strstr(pMessage, "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01521") || + strstr(pMessage, "VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-01522")) { + return VK_FALSE; + } SkDebugf("Vulkan error [%s]: code: %d: %s\n", pLayerPrefix, messageCode, pMessage); print_backtrace(); SkDEBUGFAIL("Vulkan debug layer error"); diff --git a/tools/gpu/vk/VkYcbcrSamplerHelper.cpp b/tools/gpu/vk/VkYcbcrSamplerHelper.cpp new file mode 100644 index 0000000000000..6e464a1c8a9ef --- /dev/null +++ b/tools/gpu/vk/VkYcbcrSamplerHelper.cpp @@ -0,0 +1,196 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "tools/gpu/vk/VkYcbcrSamplerHelper.h" + +#ifdef SK_VULKAN + +#include "include/gpu/GrContext.h" +#include "src/gpu/GrContextPriv.h" +#include "src/gpu/vk/GrVkGpu.h" +#include "src/gpu/vk/GrVkUtil.h" + +int VkYcbcrSamplerHelper::GetExpectedY(int x, int y, int width, int height) { + return 16 + (x + y) * 219 / (width + height - 2); +} + +std::pair VkYcbcrSamplerHelper::GetExpectedUV(int x, int y, int width, int height) { + return { 16 + x * 224 / (width - 1), 16 + y * 224 / (height - 1) }; +} + +GrVkGpu* VkYcbcrSamplerHelper::vkGpu() { + return (GrVkGpu*) fContext->priv().getGpu(); +} + +VkYcbcrSamplerHelper::VkYcbcrSamplerHelper(GrContext* context) : fContext(context) { + SkASSERT_RELEASE(context->backend() == GrBackendApi::kVulkan); +} + +VkYcbcrSamplerHelper::~VkYcbcrSamplerHelper() { + GrVkGpu* vkGpu = this->vkGpu(); + + if (fImage != VK_NULL_HANDLE) { + GR_VK_CALL(vkGpu->vkInterface(), DestroyImage(vkGpu->device(), fImage, nullptr)); + fImage = VK_NULL_HANDLE; + } + if (fImageMemory != VK_NULL_HANDLE) { + GR_VK_CALL(vkGpu->vkInterface(), FreeMemory(vkGpu->device(), fImageMemory, nullptr)); + fImageMemory = VK_NULL_HANDLE; + } +} + +bool VkYcbcrSamplerHelper::isYCbCrSupported() { + GrVkGpu* vkGpu = this->vkGpu(); + + return vkGpu->vkCaps().supportsYcbcrConversion(); +} + +bool VkYcbcrSamplerHelper::createBackendTexture(uint32_t width, uint32_t height) { + GrVkGpu* vkGpu = this->vkGpu(); + VkResult result; + + // Verify that the image format is supported. + VkFormatProperties formatProperties; + GR_VK_CALL(vkGpu->vkInterface(), + GetPhysicalDeviceFormatProperties(vkGpu->physicalDevice(), + VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, + &formatProperties)); + if (!(formatProperties.linearTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) { + // VK_FORMAT_G8_B8R8_2PLANE_420_UNORM is not supported + return false; + } + + // Create YCbCr image. + VkImageCreateInfo vkImageInfo = {}; + vkImageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; + vkImageInfo.imageType = VK_IMAGE_TYPE_2D; + vkImageInfo.format = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM; + vkImageInfo.extent = VkExtent3D{width, height, 1}; + vkImageInfo.mipLevels = 1; + vkImageInfo.arrayLayers = 1; + vkImageInfo.samples = VK_SAMPLE_COUNT_1_BIT; + vkImageInfo.tiling = VK_IMAGE_TILING_LINEAR; + vkImageInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT; + vkImageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; + vkImageInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; + + SkASSERT(fImage == VK_NULL_HANDLE); + GR_VK_CALL_RESULT(vkGpu, result, CreateImage(vkGpu->device(), &vkImageInfo, nullptr, &fImage)); + if (result != VK_SUCCESS) { + return false; + } + + VkMemoryRequirements requirements; + GR_VK_CALL(vkGpu->vkInterface(), GetImageMemoryRequirements(vkGpu->device(), + fImage, + &requirements)); + + uint32_t memoryTypeIndex = 0; + bool foundHeap = false; + VkPhysicalDeviceMemoryProperties phyDevMemProps; + GR_VK_CALL(vkGpu->vkInterface(), GetPhysicalDeviceMemoryProperties(vkGpu->physicalDevice(), + &phyDevMemProps)); + for (uint32_t i = 0; i < phyDevMemProps.memoryTypeCount && !foundHeap; ++i) { + if (requirements.memoryTypeBits & (1 << i)) { + // Map host-visible memory. + if (phyDevMemProps.memoryTypes[i].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { + memoryTypeIndex = i; + foundHeap = true; + } + } + } + if (!foundHeap) { + return false; + } + + VkMemoryAllocateInfo allocInfo = {}; + allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; + allocInfo.allocationSize = requirements.size; + allocInfo.memoryTypeIndex = memoryTypeIndex; + + SkASSERT(fImageMemory == VK_NULL_HANDLE); + GR_VK_CALL_RESULT(vkGpu, result, AllocateMemory(vkGpu->device(), &allocInfo, + nullptr, &fImageMemory)); + if (result != VK_SUCCESS) { + return false; + } + + void* mappedBuffer; + GR_VK_CALL_RESULT(vkGpu, result, MapMemory(vkGpu->device(), fImageMemory, 0u, + requirements.size, 0u, &mappedBuffer)); + if (result != VK_SUCCESS) { + return false; + } + + // Write Y channel. + VkImageSubresource subresource; + subresource.aspectMask = VK_IMAGE_ASPECT_PLANE_0_BIT; + subresource.mipLevel = 0; + subresource.arrayLayer = 0; + + VkSubresourceLayout yLayout; + GR_VK_CALL(vkGpu->vkInterface(), GetImageSubresourceLayout(vkGpu->device(), fImage, + &subresource, &yLayout)); + uint8_t* bufferData = reinterpret_cast(mappedBuffer) + yLayout.offset; + for (size_t y = 0; y < height; ++y) { + for (size_t x = 0; x < width; ++x) { + bufferData[y * yLayout.rowPitch + x] = GetExpectedY(x, y, width, height); + } + } + + // Write UV channels. + subresource.aspectMask = VK_IMAGE_ASPECT_PLANE_1_BIT; + VkSubresourceLayout uvLayout; + GR_VK_CALL(vkGpu->vkInterface(), GetImageSubresourceLayout(vkGpu->device(), fImage, + &subresource, &uvLayout)); + bufferData = reinterpret_cast(mappedBuffer) + uvLayout.offset; + for (size_t y = 0; y < height / 2; ++y) { + for (size_t x = 0; x < width / 2; ++x) { + auto [u, v] = GetExpectedUV(2*x, 2*y, width, height); + bufferData[y * uvLayout.rowPitch + x * 2] = u; + bufferData[y * uvLayout.rowPitch + x * 2 + 1] = v; + } + } + + VkMappedMemoryRange flushRange; + flushRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; + flushRange.pNext = nullptr; + flushRange.memory = fImageMemory; + flushRange.offset = 0; + flushRange.size = VK_WHOLE_SIZE; + GR_VK_CALL_RESULT(vkGpu, result, FlushMappedMemoryRanges(vkGpu->device(), 1, &flushRange)); + if (result != VK_SUCCESS) { + return false; + } + GR_VK_CALL(vkGpu->vkInterface(), UnmapMemory(vkGpu->device(), fImageMemory)); + + // Bind image memory. + GR_VK_CALL_RESULT(vkGpu, result, BindImageMemory(vkGpu->device(), fImage, fImageMemory, 0u)); + if (result != VK_SUCCESS) { + return false; + } + + // Wrap the image into SkImage. + GrVkYcbcrConversionInfo ycbcrInfo(vkImageInfo.format, + /*externalFormat=*/0, + VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, + VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, + VK_CHROMA_LOCATION_COSITED_EVEN, + VK_CHROMA_LOCATION_COSITED_EVEN, + VK_FILTER_LINEAR, + false, + formatProperties.linearTilingFeatures); + GrVkAlloc alloc(fImageMemory, 0 /* offset */, requirements.size, 0 /* flags */); + GrVkImageInfo imageInfo(fImage, alloc, VK_IMAGE_TILING_LINEAR, VK_IMAGE_LAYOUT_UNDEFINED, + vkImageInfo.format, 1 /* levelCount */, VK_QUEUE_FAMILY_IGNORED, + GrProtected::kNo, ycbcrInfo); + + fTexture = GrBackendTexture(width, height, imageInfo); + return true; +} + +#endif // SK_VULKAN diff --git a/tools/gpu/vk/VkYcbcrSamplerHelper.h b/tools/gpu/vk/VkYcbcrSamplerHelper.h new file mode 100644 index 0000000000000..929f4c94e87de --- /dev/null +++ b/tools/gpu/vk/VkYcbcrSamplerHelper.h @@ -0,0 +1,48 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef VkYcbcrSamplerHelper_DEFINED +#define VkYcbcrSamplerHelper_DEFINED + +#include "include/core/SkTypes.h" + +#ifdef SK_VULKAN + +#include "include/gpu/GrBackendSurface.h" + +class GrContext; +class GrVkGpu; + +// This helper will create and hold data for a Vulkan YCbCr backend texture. This format is +// particularly interesting because its sampler is immutable. +class VkYcbcrSamplerHelper { +public: + VkYcbcrSamplerHelper(GrContext*); + ~VkYcbcrSamplerHelper(); + + bool isYCbCrSupported(); + + bool createBackendTexture(uint32_t width, uint32_t height); + + const GrBackendTexture& backendTexture() const { return fTexture; } + + static int GetExpectedY(int x, int y, int width, int height); + static std::pair GetExpectedUV(int x, int y, int width, int height); + +private: + GrVkGpu* vkGpu(); + + GrContext* fContext; + + VkImage fImage = VK_NULL_HANDLE; + VkDeviceMemory fImageMemory = VK_NULL_HANDLE; + GrBackendTexture fTexture; +}; + +#endif // SK_VULKAN + +#endif // VkYcbcrSamplerHelper_DEFINED diff --git a/tools/lottie-web-perf/lottie-web-canvas-perf.html b/tools/lottie-web-perf/lottie-web-canvas-perf.html index 746c0bcfed7f6..1cab30faad08e 100644 --- a/tools/lottie-web-perf/lottie-web-canvas-perf.html +++ b/tools/lottie-web-perf/lottie-web-canvas-perf.html @@ -1,17 +1,17 @@ - Lottie-Web Perf - - - - - + Lottie-Web Perf + + + + +
diff --git a/tools/lottie-web-perf/lottie-web-perf.html b/tools/lottie-web-perf/lottie-web-perf.html index 88cc992fa6f80..9fc499b7c5cbc 100644 --- a/tools/lottie-web-perf/lottie-web-perf.html +++ b/tools/lottie-web-perf/lottie-web-perf.html @@ -1,17 +1,17 @@ - Lottie-Web Perf - - - - - + Lottie-Web Perf + + + + +
diff --git a/tools/lottiecap/driver.html b/tools/lottiecap/driver.html index 2b6dc94049c54..0811441c645be 100644 --- a/tools/lottiecap/driver.html +++ b/tools/lottiecap/driver.html @@ -1,26 +1,26 @@ - Lottie Filmstrip Capture - - - - - + main { + display: flex; + width: 1000px; + height: 1000px; + flex-flow: row wrap; + } +
diff --git a/tools/perf-canvaskit-puppeteer/Makefile b/tools/perf-canvaskit-puppeteer/Makefile index 1003af695c300..3e6aece221d90 100644 --- a/tools/perf-canvaskit-puppeteer/Makefile +++ b/tools/perf-canvaskit-puppeteer/Makefile @@ -17,4 +17,10 @@ test_path_transform_with_snap: --canvaskit_wasm ../../out/canvaskit_wasm/canvaskit.wasm --use_gpu \ --assets path_translate_assets \ --bench_html path-transform.html \ - --query_params translate opacity snap \ No newline at end of file + --query_params translate opacity snap + +skp_with_local: + node perf-canvaskit-with-puppeteer.js --canvaskit_js ../../out/canvaskit_wasm/canvaskit.js \ + --canvaskit_wasm ../../out/canvaskit_wasm/canvaskit.wasm --use_gpu \ + --input_skp ${HOME}/skps/desk_nytimes.skp \ + --bench_html render-skp.html \ No newline at end of file diff --git a/tools/perf-canvaskit-puppeteer/perf-canvaskit-with-puppeteer.js b/tools/perf-canvaskit-puppeteer/perf-canvaskit-with-puppeteer.js index 7013fde7bdc8c..402f4c14dce97 100644 --- a/tools/perf-canvaskit-puppeteer/perf-canvaskit-with-puppeteer.js +++ b/tools/perf-canvaskit-puppeteer/perf-canvaskit-with-puppeteer.js @@ -32,6 +32,11 @@ const opts = [ typeLabel: '{underline file}', description: 'The Lottie JSON file to process.' }, + { + name: 'input_skp', + typeLabel: '{underline file}', + description: 'The SKP file to process.' + }, { name: 'assets', typeLabel: '{underline file}', @@ -137,6 +142,12 @@ if (options.input_lottie) { const lottieJSON = fs.readFileSync(options.input_lottie, 'utf8'); app.get('/static/lottie.json', (req, res) => res.send(lottieJSON)); } +if (options.input_skp) { + const skpBytes = fs.readFileSync(options.input_skp, 'binary'); + app.get('/static/test.skp', (req, res) => { + res.send(new Buffer(skpBytes, 'binary')); + }); +} if (options.assets) { app.use('/static/assets/', express.static(options.assets)); console.log('assets served from', options.assets); @@ -167,6 +178,11 @@ async function driveBrowser() { '--no-sandbox', '--disable-setuid-sandbox', '--window-size=' + viewPort.width + ',' + viewPort.height, + // The following two params allow Chrome to run at an unlimited fps. Note, if there is + // already a chrome instance running, these arguments will have NO EFFECT, as the existing + // Chrome instance will be used instead of puppeteer spinning up a new one. + '--disable-frame-rate-limit', + '--disable-gpu-vsync', ]; if (options.use_gpu) { browser_args.push('--ignore-gpu-blacklist'); diff --git a/tools/perf-canvaskit-puppeteer/render-skp.html b/tools/perf-canvaskit-puppeteer/render-skp.html new file mode 100644 index 0000000000000..ef1ed254580d5 --- /dev/null +++ b/tools/perf-canvaskit-puppeteer/render-skp.html @@ -0,0 +1,157 @@ + + + + + CanvasKit SKP Perf + + + + + + + +
+ +
+ +
+ + + diff --git a/tools/sk_app/VulkanWindowContext.cpp b/tools/sk_app/VulkanWindowContext.cpp index 593d60c3b4496..970c67ec0c11b 100644 --- a/tools/sk_app/VulkanWindowContext.cpp +++ b/tools/sk_app/VulkanWindowContext.cpp @@ -528,7 +528,8 @@ void VulkanWindowContext::swapBuffers() { GrFlushInfo info; info.fNumSemaphores = 1; info.fSignalSemaphores = &beSemaphore; - surface->flush(SkSurface::BackendSurfaceAccess::kPresent, info); + GrBackendSurfaceMutableState presentState(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, fPresentQueueIndex); + surface->flush(info, &presentState); surface->getContext()->submit(); // Submit present operation to present queue diff --git a/tools/sk_app/mac/Window_mac.mm b/tools/sk_app/mac/Window_mac.mm index 38b12539407f1..e1671f65e464b 100644 --- a/tools/sk_app/mac/Window_mac.mm +++ b/tools/sk_app/mac/Window_mac.mm @@ -5,6 +5,8 @@ * found in the LICENSE file. */ +#include + #include "src/core/SkUtils.h" #include "tools/sk_app/mac/WindowContextFactory_mac.h" #include "tools/sk_app/mac/Window_mac.h" @@ -68,7 +70,7 @@ - (MainView*)initWithWindow:(sk_app::Window_mac*)initWindow; } // create view - MainView* view = [[MainView alloc] initWithWindow:this] ; + MainView* view = [[MainView alloc] initWithWindow:this]; if (nil == view) { [fWindow release]; [delegate release]; @@ -102,8 +104,9 @@ - (MainView*)initWithWindow:(sk_app::Window_mac*)initWindow; } void Window_mac::setTitle(const char* title) { - NSString *titleString = [NSString stringWithCString:title encoding:NSUTF8StringEncoding]; - [fWindow setTitle:titleString]; + if (NSString* titleStr = [NSString stringWithUTF8String:title]) { + [fWindow setTitle:titleStr]; + } } void Window_mac::show() { @@ -148,7 +151,7 @@ - (MainView*)initWithWindow:(sk_app::Window_mac*)initWindow; } this->onBackendCreated(); - return (SkToBool(fWindowContext)); + return SkToBool(fWindowContext); } void Window_mac::PaintWindows() { @@ -195,34 +198,37 @@ - (BOOL)windowShouldClose:(NSWindow*)sender { // Something more robust would be needed to support alternate keyboards. static const struct { unsigned short fVK; - skui::Key fKey; + skui::Key fKey; } gPair[] = { - { 0x33, skui::Key::kBack }, - { 0x24, skui::Key::kOK }, - { 0x7E, skui::Key::kUp }, - { 0x7D, skui::Key::kDown }, - { 0x7B, skui::Key::kLeft }, - { 0x7C, skui::Key::kRight }, - { 0x30, skui::Key::kTab }, - { 0x74, skui::Key::kPageUp }, - { 0x79, skui::Key::kPageDown }, - { 0x73, skui::Key::kHome }, - { 0x77, skui::Key::kEnd }, - { 0x75, skui::Key::kDelete }, - { 0x35, skui::Key::kEscape }, - { 0x38, skui::Key::kShift }, - { 0x3C, skui::Key::kShift }, - { 0x3B, skui::Key::kCtrl }, - { 0x3E, skui::Key::kCtrl }, - { 0x3A, skui::Key::kOption }, - { 0x3D, skui::Key::kOption }, - { 0x00, skui::Key::kA }, - { 0x08, skui::Key::kC }, - { 0x09, skui::Key::kV }, - { 0x07, skui::Key::kX }, - { 0x10, skui::Key::kY }, - { 0x06, skui::Key::kZ }, + { kVK_Delete, skui::Key::kBack }, + { kVK_Return, skui::Key::kOK }, + { kVK_UpArrow, skui::Key::kUp }, + { kVK_DownArrow, skui::Key::kDown }, + { kVK_LeftArrow, skui::Key::kLeft }, + { kVK_RightArrow, skui::Key::kRight }, + { kVK_Tab, skui::Key::kTab }, + { kVK_PageUp, skui::Key::kPageUp }, + { kVK_PageDown, skui::Key::kPageDown }, + { kVK_Home, skui::Key::kHome }, + { kVK_End, skui::Key::kEnd }, + { kVK_ForwardDelete, skui::Key::kDelete }, + { kVK_Escape, skui::Key::kEscape }, + { kVK_Shift, skui::Key::kShift }, + { kVK_RightShift, skui::Key::kShift }, + { kVK_Control, skui::Key::kCtrl }, + { kVK_RightControl, skui::Key::kCtrl }, + { kVK_Option, skui::Key::kOption }, + { kVK_RightOption, skui::Key::kOption }, + { kVK_Command, skui::Key::kSuper }, + { kVK_RightCommand, skui::Key::kSuper }, + { kVK_ANSI_A, skui::Key::kA }, + { kVK_ANSI_C, skui::Key::kC }, + { kVK_ANSI_V, skui::Key::kV }, + { kVK_ANSI_X, skui::Key::kX }, + { kVK_ANSI_Y, skui::Key::kY }, + { kVK_ANSI_Z, skui::Key::kZ }, }; + for (size_t i = 0; i < SK_ARRAY_COUNT(gPair); i++) { if (gPair[i].fVK == vk) { return gPair[i].fKey; @@ -249,8 +255,7 @@ - (BOOL)windowShouldClose:(NSWindow*)sender { modifiers |= skui::ModifierKey::kOption; } - if ((NSKeyDown == [event type] || NSKeyUp == [event type]) && - NO == [event isARepeat]) { + if ((NSKeyDown == [event type] || NSKeyUp == [event type]) && ![event isARepeat]) { modifiers |= skui::ModifierKey::kFirstPress; } @@ -261,6 +266,9 @@ @implementation MainView { sk_app::Window_mac* fWindow; // A TrackingArea prevents us from capturing events outside the view NSTrackingArea* fTrackingArea; + // We keep track of the state of the modifier keys on each event in order to synthesize + // key-up/down events for each modifier. + skui::ModifierKey fLastModifiers; } - (MainView*)initWithWindow:(sk_app::Window_mac *)initWindow { @@ -306,18 +314,59 @@ - (void)updateTrackingAreas { NSTrackingAssumeInside; fTrackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds] - options:options - owner:self - userInfo:nil]; + options:options + owner:self + userInfo:nil]; [self addTrackingArea:fTrackingArea]; [super updateTrackingAreas]; } +- (skui::ModifierKey) updateModifierKeys:(NSEvent*) event { + using sknonstd::Any; + + skui::ModifierKey modifiers = get_modifiers(event); + skui::ModifierKey changed = modifiers ^ fLastModifiers; + fLastModifiers = modifiers; + + struct ModMap { + skui::ModifierKey modifier; + skui::Key key; + }; + + // Map each modifier bit to the equivalent skui Key and send key-up/down events. + for (const ModMap& cur : {ModMap{skui::ModifierKey::kCommand, skui::Key::kSuper}, + ModMap{skui::ModifierKey::kShift, skui::Key::kShift}, + ModMap{skui::ModifierKey::kControl, skui::Key::kCtrl}, + ModMap{skui::ModifierKey::kOption, skui::Key::kOption}}) { + if (Any(changed & cur.modifier)) { + const skui::InputState state = Any(modifiers & cur.modifier) ? skui::InputState::kDown + : skui::InputState::kUp; + (void) fWindow->onKey(cur.key, state, modifiers); + } + } + + return modifiers; +} + +- (BOOL)performKeyEquivalent:(NSEvent *)event { + [self updateModifierKeys:event]; + + // By default, unhandled key equivalents send -keyDown events; unfortunately, they do not send + // a matching -keyUp. In other words, we can claim that we didn't handle the event and OS X will + // turn this event into a -keyDown automatically, but we need to synthesize a matching -keyUp on + // a later frame. Since we only read the modifiers and key code from the event, we can reuse + // this "key-equivalent" event as a "key up". + [self performSelector:@selector(keyUp:) withObject:event afterDelay:0.1]; + return NO; +} + - (void)keyDown:(NSEvent *)event { + skui::ModifierKey modifiers = [self updateModifierKeys:event]; + skui::Key key = get_key([event keyCode]); if (key != skui::Key::kNONE) { - if (!fWindow->onKey(key, skui::InputState::kDown, get_modifiers(event))) { + if (!fWindow->onKey(key, skui::InputState::kDown, modifiers)) { if (skui::Key::kEscape == key) { [NSApp terminate:fWindow->window()]; } @@ -330,47 +379,59 @@ - (void)keyDown:(NSEvent *)event { unichar* charBuffer = new unichar[len+1]; [characters getCharacters:charBuffer range:NSMakeRange(0, len)]; for (NSUInteger i = 0; i < len; ++i) { - (void) fWindow->onChar((SkUnichar) charBuffer[i], get_modifiers(event)); + (void) fWindow->onChar((SkUnichar) charBuffer[i], modifiers); } delete [] charBuffer; } } - (void)keyUp:(NSEvent *)event { + skui::ModifierKey modifiers = [self updateModifierKeys:event]; + skui::Key key = get_key([event keyCode]); if (key != skui::Key::kNONE) { - (void) fWindow->onKey(key, skui::InputState::kUp, get_modifiers(event)); + (void) fWindow->onKey(key, skui::InputState::kUp, modifiers); } } +-(void)flagsChanged:(NSEvent *)event { + [self updateModifierKeys:event]; +} + - (void)mouseDown:(NSEvent *)event { + skui::ModifierKey modifiers = [self updateModifierKeys:event]; + const NSPoint pos = [event locationInWindow]; const NSRect rect = [fWindow->window().contentView frame]; - fWindow->onMouse(pos.x, rect.size.height - pos.y, skui::InputState::kDown, - get_modifiers(event)); + fWindow->onMouse(pos.x, rect.size.height - pos.y, skui::InputState::kDown, modifiers); } - (void)mouseUp:(NSEvent *)event { + skui::ModifierKey modifiers = [self updateModifierKeys:event]; + const NSPoint pos = [event locationInWindow]; const NSRect rect = [fWindow->window().contentView frame]; - fWindow->onMouse(pos.x, rect.size.height - pos.y, skui::InputState::kUp, - get_modifiers(event)); + fWindow->onMouse(pos.x, rect.size.height - pos.y, skui::InputState::kUp, modifiers); } - (void)mouseDragged:(NSEvent *)event { + [self updateModifierKeys:event]; [self mouseMoved:event]; } - (void)mouseMoved:(NSEvent *)event { + skui::ModifierKey modifiers = [self updateModifierKeys:event]; + const NSPoint pos = [event locationInWindow]; const NSRect rect = [fWindow->window().contentView frame]; - fWindow->onMouse(pos.x, rect.size.height - pos.y, skui::InputState::kMove, - get_modifiers(event)); + fWindow->onMouse(pos.x, rect.size.height - pos.y, skui::InputState::kMove, modifiers); } - (void)scrollWheel:(NSEvent *)event { + skui::ModifierKey modifiers = [self updateModifierKeys:event]; + // TODO: support hasPreciseScrollingDeltas? - fWindow->onMouseWheel([event scrollingDeltaY], get_modifiers(event)); + fWindow->onMouseWheel([event scrollingDeltaY], modifiers); } - (void)drawRect:(NSRect)rect { diff --git a/tools/sk_app/win/D3D12WindowContext_win.cpp b/tools/sk_app/win/D3D12WindowContext_win.cpp index 55df2820a2735..697bf67bcbe42 100644 --- a/tools/sk_app/win/D3D12WindowContext_win.cpp +++ b/tools/sk_app/win/D3D12WindowContext_win.cpp @@ -119,7 +119,7 @@ void D3D12WindowContext::initializeContext() { this->setupSurfaces(width, height); for (int i = 0; i < kNumFrames; ++i) { - fFenceValues[i] = 1; + fFenceValues[i] = 10000; // use a high value to make it easier to track these in PIX } GR_D3D_CALL_ERRCHECK(fDevice->CreateFence(fFenceValues[fBufferIndex], D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&fFence))); @@ -131,6 +131,7 @@ void D3D12WindowContext::initializeContext() { fHeight = height; } + void D3D12WindowContext::setupSurfaces(int width, int height) { // set up base resource info GrD3DTextureResourceInfo info(nullptr, diff --git a/tools/skiaserve/Request.cpp b/tools/skiaserve/Request.cpp index 0f3a6f293715c..48cdcfdb75e08 100644 --- a/tools/skiaserve/Request.cpp +++ b/tools/skiaserve/Request.cpp @@ -8,6 +8,7 @@ #include "tools/skiaserve/Request.h" #include "include/core/SkPictureRecorder.h" +#include "include/gpu/GrDirectContext.h" #include "src/utils/SkJSONWriter.h" #include "tools/ToolUtils.h" @@ -92,9 +93,9 @@ sk_sp Request::writeOutSkp() { return recorder.finishRecordingAsPicture()->serialize(); } -GrContext* Request::getContext() { - GrContext* result = fContextFactory->get(GrContextFactory::kGL_ContextType, - GrContextFactory::ContextOverrides::kNone); +GrDirectContext* Request::directContext() { + auto result = fContextFactory->get(GrContextFactory::kGL_ContextType, + GrContextFactory::ContextOverrides::kNone); if (!result) { result = fContextFactory->get(GrContextFactory::kGLES_ContextType, GrContextFactory::ContextOverrides::kNone); @@ -107,7 +108,7 @@ SkIRect Request::getBounds() { if (fPicture) { bounds = fPicture->cullRect().roundOut(); if (fGPUEnabled) { - int maxRTSize = this->getContext()->maxRenderTargetSize(); + int maxRTSize = this->directContext()->maxRenderTargetSize(); bounds = SkIRect::MakeWH(std::min(bounds.width(), maxRTSize), std::min(bounds.height(), maxRTSize)); } @@ -149,7 +150,7 @@ SkSurface* Request::createCPUSurface() { } SkSurface* Request::createGPUSurface() { - GrContext* context = this->getContext(); + auto context = this->directContext(); SkIRect bounds = this->getBounds(); ColorAndProfile cap = ColorModes[fColorMode]; auto colorSpace = kRGBA_F16_SkColorType == cap.fColorType diff --git a/tools/skiaserve/Request.h b/tools/skiaserve/Request.h index 02435d16142e9..cefff5a4e80a8 100644 --- a/tools/skiaserve/Request.h +++ b/tools/skiaserve/Request.h @@ -68,7 +68,7 @@ struct Request { SkSurface* createCPUSurface(); SkSurface* createGPUSurface(); SkIRect getBounds(); - GrContext* getContext(); + GrDirectContext* directContext(); sk_sp fPicture; sk_gpu_test::GrContextFactory* fContextFactory; diff --git a/tools/skiaserve/Response.cpp b/tools/skiaserve/Response.cpp index d74963a62d5fc..6ad5c3bfeb0db 100644 --- a/tools/skiaserve/Response.cpp +++ b/tools/skiaserve/Response.cpp @@ -25,7 +25,7 @@ static SkString generate_template(SkString source) { "\n" " SkDebugger\n" " \n" - " \n" + " \n" " \n" " \n" " \n" diff --git a/tools/skottie-wasm-perf/skottie-wasm-perf.html b/tools/skottie-wasm-perf/skottie-wasm-perf.html index dd2ac62acd459..ac29945eb0e63 100644 --- a/tools/skottie-wasm-perf/skottie-wasm-perf.html +++ b/tools/skottie-wasm-perf/skottie-wasm-perf.html @@ -1,17 +1,17 @@ - Skottie-WASM Perf - - - - - + Skottie-WASM Perf + + + + +
diff --git a/tools/skp/page_sets/skia_css3gradients_desktop.py b/tools/skp/page_sets/skia_css3gradients_desktop.py index 594faf15600ee..9eaa54a454103 100644 --- a/tools/skp/page_sets/skia_css3gradients_desktop.py +++ b/tools/skp/page_sets/skia_css3gradients_desktop.py @@ -37,7 +37,8 @@ def __init__(self): urls_list = [ # Why: http://code.google.com/p/chromium/issues/detail?id=168448 - 'https://www.webkit.org/blog/1424/css3-gradients/', + # and https://bugs.chromium.org/p/skia/issues/detail?id=10390 + 'https://www.w3schools.com/css/css3_gradients.asp', ] for url in urls_list: diff --git a/tools/skpbench/README.md b/tools/skpbench/README.md new file mode 100644 index 0000000000000..830c1568e2da4 --- /dev/null +++ b/tools/skpbench/README.md @@ -0,0 +1,67 @@ +# skpbench + +skpbench is a benchmarking tool for replaying skp or mksp files on android devices. +it achieves a lower variance in framerate by controlling the clock speed and stopping +all other processes that could cause interference. + +## Build + +skpbench consists of the skpbench binary which must be built for the phone you intend to run on, +and skpbench.py which runs on the machine the phone is connected to via ADB and is the entry point. + +The to build skia for android are at https://skia.org/user/build#android and reproduced here. + +Download the Android NDK + +``` +cipd auth-login +python2 infra/bots/assets/android_ndk_linux/download.py -t /tmp/ndk + +``` + +After this is set up once, build skpbench for your target cpu (assumed to be arm64 here for a Pixel 3) + +``` +bin/gn gen out/arm64 --args='ndk="/tmp/ndk" target_cpu="arm64" is_debug=false' +ninja -C out/arm64 skpbench +``` + +## Benchmark an SKP on a connected device. + +First, copy the built skpbench binary and an example skp file to the device. + +``` +adb push out/arm64/skpbench /data/local/tmp +adb push /home/nifong/Downloads/foo.skp /data/local/tmp/skps/ +``` + +Run skpbench.py (in my case on a Pixel 3) + +``` +python tools/skpbench/skpbench.py \ + --adb \ + --force \ + --config gles \ + /data/local/tmp/skpbench \ + /data/local/tmp/skps/foo.skp +``` + +`--adb` specifies that it should use adb to the only connected device and run skpbench there. +`--force` is necessary because we don't yet have a configuration to monitor vitals on the Pixel 3. +`--config gles` specifies Open GL ES is the backend GPU config to use. + +Additional documentation of arguments is printed by `python tools/skpbench/skpbench.py --help` + +Output appears in the following format +``` + accum median max min stddev samples sample_ms clock metric config bench + 0.1834 0.1832 0.1897 0.1707 1.59% 101 50 cpu ms gles foo.skp +``` + +`accum` is the time taken to draw all frames, divided by the number of frames. +`metric` specifies that the unit is ms (milliseconds per frame) + +## Production + +skpbench is run as a tryjob from gerrit, where it uploads the results to perf.skia.org. +TODO(nifong, csmartdalton): elaborate on this section. \ No newline at end of file diff --git a/tools/skpbench/skpbench.cpp b/tools/skpbench/skpbench.cpp index 05ad72e349393..87047e356b184 100644 --- a/tools/skpbench/skpbench.cpp +++ b/tools/skpbench/skpbench.cpp @@ -14,6 +14,7 @@ #include "include/core/SkSurface.h" #include "include/core/SkSurfaceProps.h" #include "include/effects/SkPerlinNoiseShader.h" +#include "include/gpu/GrDirectContext.h" #include "src/core/SkOSFile.h" #include "src/core/SkTaskGroup.h" #include "src/gpu/GrCaps.h" @@ -105,7 +106,7 @@ class GpuSync { void waitIfNeeded(); - sk_gpu_test::FlushFinishTracker* newFlushTracker(GrContext* context); + sk_gpu_test::FlushFinishTracker* newFlushTracker(GrDirectContext* context); private: enum { kMaxFrameLag = 3 }; @@ -122,8 +123,8 @@ enum class ExitErr { kSoftware = 70 }; -static void flush_with_sync(GrContext*, GpuSync&); -static void draw_skp_and_flush_with_sync(GrContext*, SkSurface*, const SkPicture*, GpuSync&); +static void flush_with_sync(GrDirectContext*, GpuSync&); +static void draw_skp_and_flush_with_sync(GrDirectContext*, SkSurface*, const SkPicture*, GpuSync&); static sk_sp create_warmup_skp(); static sk_sp create_skp_from_svg(SkStream*, const char* filename); static bool mkdir_p(const SkString& name); @@ -137,14 +138,16 @@ class SkpProducer { // Draw an SkPicture to the provided surface, flush the surface, and sync the GPU. // You may use the static draw_skp_and_flush_with_sync declared above. // returned int tells how many draw/flush/sync were done. - virtual int drawAndFlushAndSync(GrContext*, SkSurface* surface, GpuSync& gpuSync) = 0; + virtual int drawAndFlushAndSync(GrDirectContext*, SkSurface* surface, GpuSync& gpuSync) = 0; }; class StaticSkp : public SkpProducer { public: StaticSkp(sk_sp skp) : fSkp(skp) {} - int drawAndFlushAndSync(GrContext* context, SkSurface* surface, GpuSync& gpuSync) override { + int drawAndFlushAndSync(GrDirectContext* context, + SkSurface* surface, + GpuSync& gpuSync) override { draw_skp_and_flush_with_sync(context, surface, fSkp.get(), gpuSync); return 1; } @@ -186,7 +189,9 @@ class MultiFrameSkp : public SkpProducer { } // Draw the whole animation once. - int drawAndFlushAndSync(GrContext* context, SkSurface* surface, GpuSync& gpuSync) override { + int drawAndFlushAndSync(GrDirectContext* context, + SkSurface* surface, + GpuSync& gpuSync) override { for (int i=0; icount(); i++){ draw_skp_and_flush_with_sync(context, surface, this->frame(i).get(), gpuSync); } @@ -200,7 +205,7 @@ class MultiFrameSkp : public SkpProducer { std::vector fFrames; }; -static void ddl_sample(GrContext* context, DDLTileHelper* tiles, GpuSync& gpuSync, +static void ddl_sample(GrDirectContext* context, DDLTileHelper* tiles, GpuSync& gpuSync, Sample* sample, SkTaskGroup* recordingTaskGroup, SkTaskGroup* gpuTaskGroup, std::chrono::high_resolution_clock::time_point* startStopTime) { using clock = std::chrono::high_resolution_clock; @@ -241,7 +246,7 @@ static void ddl_sample(GrContext* context, DDLTileHelper* tiles, GpuSync& gpuSyn } } -static void run_ddl_benchmark(sk_gpu_test::TestContext* testContext, GrContext *context, +static void run_ddl_benchmark(sk_gpu_test::TestContext* testContext, GrDirectContext *context, sk_sp dstSurface, SkPicture* inputPicture, std::vector* samples) { using clock = std::chrono::high_resolution_clock; @@ -324,9 +329,7 @@ static void run_ddl_benchmark(sk_gpu_test::TestContext* testContext, GrContext * // Make sure the gpu has finished all its work before we exit this function and delete the // fence. - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - context->flush(flushInfo); + context->flush(); context->submit(true); promiseImageHelper.deleteAllFromGPU(nullptr, context); @@ -335,7 +338,7 @@ static void run_ddl_benchmark(sk_gpu_test::TestContext* testContext, GrContext * } -static void run_benchmark(GrContext* context, SkSurface* surface, SkpProducer* skpp, +static void run_benchmark(GrDirectContext* context, SkSurface* surface, SkpProducer* skpp, std::vector* samples) { using clock = std::chrono::high_resolution_clock; const Sample::duration sampleDuration = std::chrono::milliseconds(FLAGS_sampleMs); @@ -364,13 +367,11 @@ static void run_benchmark(GrContext* context, SkSurface* surface, SkpProducer* s // Make sure the gpu has finished all its work before we exit this function and delete the // fence. - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface->flush(); context->submit(true); } -static void run_gpu_time_benchmark(sk_gpu_test::GpuTimer* gpuTimer, GrContext* context, +static void run_gpu_time_benchmark(sk_gpu_test::GpuTimer* gpuTimer, GrDirectContext* context, SkSurface* surface, const SkPicture* skp, std::vector* samples) { using sk_gpu_test::PlatformTimerQuery; @@ -410,8 +411,10 @@ static void run_gpu_time_benchmark(sk_gpu_test::GpuTimer* gpuTimer, GrContext* c using QueryStatus = sk_gpu_test::GpuTimer::QueryStatus; case QueryStatus::kInvalid: exitf(ExitErr::kUnavailable, "GPU timer failed"); + break; case QueryStatus::kPending: exitf(ExitErr::kUnavailable, "timer query still not ready after fence sync"); + break; case QueryStatus::kDisjoint: if (FLAGS_verbosity >= 4) { fprintf(stderr, "discarding timer query due to disjoint operations.\n"); @@ -432,9 +435,7 @@ static void run_gpu_time_benchmark(sk_gpu_test::GpuTimer* gpuTimer, GrContext* c // Make sure the gpu has finished all its work before we exit this function and delete the // fence. - GrFlushInfo flushInfo; - flushInfo.fFlags = kSyncCpu_GrFlushFlag; - surface->flush(SkSurface::BackendSurfaceAccess::kNoAccess, flushInfo); + surface->flush(); context->submit(true); } @@ -555,7 +556,7 @@ int main(int argc, char** argv) { sk_gpu_test::GrContextFactory factory(ctxOptions); sk_gpu_test::ContextInfo ctxInfo = factory.getContextInfo(config->getContextType(), config->getContextOverrides()); - GrContext* ctx = ctxInfo.grContext(); + auto ctx = ctxInfo.directContext(); if (!ctx) { exitf(ExitErr::kUnavailable, "failed to create context for config %s", config->getTag().c_str()); @@ -647,7 +648,7 @@ int main(int argc, char** argv) { return(0); } -static void flush_with_sync(GrContext* context, GpuSync& gpuSync) { +static void flush_with_sync(GrDirectContext* context, GpuSync& gpuSync) { gpuSync.waitIfNeeded(); GrFlushInfo flushInfo; @@ -658,7 +659,7 @@ static void flush_with_sync(GrContext* context, GpuSync& gpuSync) { context->submit(); } -static void draw_skp_and_flush_with_sync(GrContext* context, SkSurface* surface, +static void draw_skp_and_flush_with_sync(GrDirectContext* context, SkSurface* surface, const SkPicture* skp, GpuSync& gpuSync) { auto canvas = surface->getCanvas(); canvas->drawPicture(skp); @@ -745,7 +746,7 @@ void GpuSync::waitIfNeeded() { } } -sk_gpu_test::FlushFinishTracker* GpuSync::newFlushTracker(GrContext* context) { +sk_gpu_test::FlushFinishTracker* GpuSync::newFlushTracker(GrDirectContext* context) { fFinishTrackers[fCurrentFlushIdx].reset(new sk_gpu_test::FlushFinishTracker(context)); sk_gpu_test::FlushFinishTracker* tracker = fFinishTrackers[fCurrentFlushIdx].get(); diff --git a/tools/skui/Key.h b/tools/skui/Key.h index d8d2cf751f3f9..28aecf440d6be 100644 --- a/tools/skui/Key.h +++ b/tools/skui/Key.h @@ -41,6 +41,7 @@ enum class Key { kShift, kCtrl, kOption, // AKA Alt + kSuper, // AKA Command kA, kC, kV, diff --git a/tools/valgrind.supp b/tools/valgrind.supp index 1e3a3e84106b9..57f7586ecfb34 100644 --- a/tools/valgrind.supp +++ b/tools/valgrind.supp @@ -317,3 +317,19 @@ fun:_Z12GrClearImageRK11GrImageInfoPvm8SkRGBA4fIL11SkAlphaType3EE ... } +{ + make_get_error_with_random_oom1 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:_Z30make_get_error_with_random_oom12GrGLFunctionIFjvEE + ... +} +{ + make_get_error_with_random_oom2 + Memcheck:Leak + match-leak-kinds: definite + ... + fun:make_get_error_with_random_oom + ... +} diff --git a/tools/viewer/GMSlide.cpp b/tools/viewer/GMSlide.cpp index 700b8673cf93c..788d21d0a7628 100644 --- a/tools/viewer/GMSlide.cpp +++ b/tools/viewer/GMSlide.cpp @@ -12,20 +12,34 @@ */ #include "include/core/SkCanvas.h" +#include "include/gpu/GrDirectContext.h" +#include "include/gpu/GrRecordingContext.h" #include "tools/viewer/GMSlide.h" GMSlide::GMSlide(std::unique_ptr gm) : fGM(std::move(gm)) { + fGM->setMode(skiagm::GM::kSample_Mode); + fName.printf("GM_%s", fGM->getName()); } GMSlide::~GMSlide() = default; +void GMSlide::gpuTeardown() { + fGM->gpuTeardown(); +} + void GMSlide::draw(SkCanvas* canvas) { - fGM->setMode(skiagm::GM::kSample_Mode); - // Do we care about timing the draw of the background (once)? - // Does the GM ever rely on drawBackground to lazily compute something? - fGM->drawBackground(canvas); - fGM->drawContent(canvas); + SkString msg; + + auto direct = canvas->recordingContext() ? canvas->recordingContext()->asDirectContext() + : nullptr; + + auto result = fGM->gpuSetup(direct, canvas, &msg); + if (result != skiagm::GM::DrawResult::kOk) { + return; + } + + fGM->draw(canvas, &msg); } bool GMSlide::animate(double nanos) { return fGM->animate(nanos); } diff --git a/tools/viewer/GMSlide.h b/tools/viewer/GMSlide.h index 96d7af9e6ae9a..5fb884b3807ba 100644 --- a/tools/viewer/GMSlide.h +++ b/tools/viewer/GMSlide.h @@ -18,6 +18,7 @@ class GMSlide : public Slide { SkISize getDimensions() const override { return fGM->getISize(); } + void gpuTeardown() override; void draw(SkCanvas* canvas) override; bool animate(double nanos) override; diff --git a/tools/viewer/ImGuiLayer.cpp b/tools/viewer/ImGuiLayer.cpp index 768e2cce629bb..db150ebe2622a 100644 --- a/tools/viewer/ImGuiLayer.cpp +++ b/tools/viewer/ImGuiLayer.cpp @@ -106,9 +106,10 @@ void ImGuiLayer::onPrePaint() { io.DisplaySize.x = static_cast(fWindow->width()); io.DisplaySize.y = static_cast(fWindow->height()); - io.KeyAlt = io.KeysDown[static_cast(skui::Key::kOption)]; - io.KeyCtrl = io.KeysDown[static_cast(skui::Key::kCtrl)]; + io.KeyAlt = io.KeysDown[static_cast(skui::Key::kOption)]; + io.KeyCtrl = io.KeysDown[static_cast(skui::Key::kCtrl)]; io.KeyShift = io.KeysDown[static_cast(skui::Key::kShift)]; + io.KeySuper = io.KeysDown[static_cast(skui::Key::kSuper)]; ImGui::NewFrame(); } diff --git a/tools/viewer/ImGuiLayer.h b/tools/viewer/ImGuiLayer.h index 4d53cc732ff3b..0132ce0ec3066 100644 --- a/tools/viewer/ImGuiLayer.h +++ b/tools/viewer/ImGuiLayer.h @@ -72,7 +72,7 @@ struct DragCanvas { ImGui::SetCursorScreenPos(ImVec2(center.fX - 5, center.fY - 5)); ImGui::InvisibleButton("", ImVec2(10, 10)); - if (ImGui::IsItemActive() && ImGui::IsMouseDragging()) { + if (ImGui::IsItemActive() && ImGui::IsMouseDragging(0)) { // Update screen position to track mouse, clamped to our area ImGuiIO& io = ImGui::GetIO(); center.set(SkTPin(io.MousePos.x, fPos.x, fPos.x + fSize.x), diff --git a/tools/viewer/SkRiveSlide.cpp b/tools/viewer/SkRiveSlide.cpp new file mode 100644 index 0000000000000..de29104c01dd2 --- /dev/null +++ b/tools/viewer/SkRiveSlide.cpp @@ -0,0 +1,69 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "tools/viewer/SkRiveSlide.h" + +#include "include/core/SkCanvas.h" +#include "include/core/SkStream.h" + +#if defined(SK_ENABLE_SKRIVE) + +SkRiveSlide::SkRiveSlide(const SkString& name, const SkString& path) + : fPath(path) { + fName = name; +} + +SkRiveSlide::~SkRiveSlide() = default; + +void SkRiveSlide::load(SkScalar w, SkScalar h) { + fWinSize = {w , h}; + fRive = skrive::SkRive::Builder().make(SkFILEStream::Make(fPath.c_str())); + fRiveBounds = SkRect::MakeEmpty(); + + if (fRive) { + SkDebugf("Loaded Rive animation: %zu artboards\n", fRive->artboards().size()); + for (const auto& ab : fRive->artboards()) { + const auto& pos = ab->getTranslation(); + const auto& size = ab->getSize(); + + fRiveBounds.join(SkRect::MakeXYWH(pos.x, pos.y, size.x, size.y)); + } + } else { + SkDebugf("Failed to load Rive animation: %s\n", fPath.c_str()); + } +} + +void SkRiveSlide::unload() { + fRive.reset(); +} + +void SkRiveSlide::resize(SkScalar w, SkScalar h) { + fWinSize = {w , h}; +} + +SkISize SkRiveSlide::getDimensions() const { + // We always scale to fill the window. + return fWinSize.toCeil(); +} + +void SkRiveSlide::draw(SkCanvas* canvas) { + if (!fRive) { + return; + } + + // Scale the Rive artboards to fill our window. + SkAutoCanvasRestore acr(canvas, true); + canvas->concat(SkMatrix::MakeRectToRect(fRiveBounds, + SkRect::MakeSize(fWinSize), + SkMatrix::kCenter_ScaleToFit )); + + for (const auto& ab : fRive->artboards()) { + ab->render(canvas); + } +} + +#endif // defined(SK_ENABLE_SKRIVE) diff --git a/tools/viewer/SkRiveSlide.h b/tools/viewer/SkRiveSlide.h new file mode 100644 index 0000000000000..820902e76e109 --- /dev/null +++ b/tools/viewer/SkRiveSlide.h @@ -0,0 +1,41 @@ +/* + * Copyright 2020 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#ifndef SkRiveSlide_DEFINED +#define SkRiveSlide_DEFINED + +#include "tools/viewer/Slide.h" + +#if defined(SK_ENABLE_SKRIVE) + +#include "experimental/skrive/include/SkRive.h" + +class SkRiveSlide final : public Slide { +public: + SkRiveSlide(const SkString& name, const SkString& path); + ~SkRiveSlide() override; + +private: + void load(SkScalar winWidth, SkScalar winHeight) override; + void unload() override; + void resize(SkScalar, SkScalar) override; + + SkISize getDimensions() const override; + + void draw(SkCanvas*) override; + + const SkString fPath; + + sk_sp fRive; + SkRect fRiveBounds; + SkSize fWinSize; + + using INHERITED = Slide; +}; + +#endif // defined(SK_ENABLE_SKRIVE) +#endif // SkRiveSlide_DEFINED diff --git a/tools/viewer/SkSLSlide.cpp b/tools/viewer/SkSLSlide.cpp index 81edd6340912c..81a628cd28cb2 100644 --- a/tools/viewer/SkSLSlide.cpp +++ b/tools/viewer/SkSLSlide.cpp @@ -10,12 +10,9 @@ #include "include/core/SkCanvas.h" #include "include/effects/SkGradientShader.h" #include "include/effects/SkPerlinNoiseShader.h" -#include "include/gpu/GrContext.h" #include "src/core/SkEnumerate.h" -#include "src/gpu/GrContextPriv.h" -#include "src/gpu/GrShaderUtils.h" #include "tools/Resources.h" -#include "tools/viewer/ImGuiLayer.h" +#include "tools/viewer/Viewer.h" #include #include "imgui.h" @@ -80,10 +77,10 @@ void SkSLSlide::unload() { fShaders.reset(); } -bool SkSLSlide::rebuild(GrContextOptions::ShaderErrorHandler* errorHandler) { +bool SkSLSlide::rebuild() { auto [effect, errorText] = SkRuntimeEffect::Make(fSkSL); if (!effect) { - errorHandler->compileError(fSkSL.c_str(), errorText.c_str()); + Viewer::ShaderErrorHandler()->compileError(fSkSL.c_str(), errorText.c_str()); return false; } @@ -105,10 +102,6 @@ bool SkSLSlide::rebuild(GrContextOptions::ShaderErrorHandler* errorHandler) { } void SkSLSlide::draw(SkCanvas* canvas) { - GrContextOptions::ShaderErrorHandler* errorHandler = GrShaderUtils::DefaultShaderErrorHandler(); - if (auto grContext = canvas->getGrContext()) { - errorHandler = grContext->priv().getShaderErrorHandler(); - } canvas->clear(SK_ColorWHITE); ImGui::Begin("SkSL", nullptr, ImGuiWindowFlags_AlwaysVerticalScrollbar); @@ -122,7 +115,7 @@ void SkSLSlide::draw(SkCanvas* canvas) { } if (fCodeIsDirty || !fEffect) { - this->rebuild(errorHandler); + this->rebuild(); } if (!fEffect) { diff --git a/tools/viewer/SkSLSlide.h b/tools/viewer/SkSLSlide.h index a778350ef11d6..4287c398b9dd5 100644 --- a/tools/viewer/SkSLSlide.h +++ b/tools/viewer/SkSLSlide.h @@ -11,7 +11,6 @@ #include "tools/viewer/Slide.h" #include "include/effects/SkRuntimeEffect.h" -#include "include/gpu/GrContextOptions.h" class SkSLSlide : public Slide { public: @@ -26,7 +25,7 @@ class SkSLSlide : public Slide { void unload() override; private: - bool rebuild(GrContextOptions::ShaderErrorHandler*); + bool rebuild(); SkString fSkSL; bool fCodeIsDirty; diff --git a/tools/viewer/Slide.h b/tools/viewer/Slide.h index e81f860a88294..cc02077c11cd8 100644 --- a/tools/viewer/Slide.h +++ b/tools/viewer/Slide.h @@ -22,6 +22,7 @@ class Slide : public SkRefCnt { virtual SkISize getDimensions() const = 0; + virtual void gpuTeardown() { } virtual void draw(SkCanvas* canvas) = 0; virtual bool animate(double nanos) { return false; } virtual void load(SkScalar winWidth, SkScalar winHeight) {} diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp index 2e657d06db0b5..9e20ddb707e72 100644 --- a/tools/viewer/Viewer.cpp +++ b/tools/viewer/Viewer.cpp @@ -50,9 +50,16 @@ #include "imgui.h" #include "misc/cpp/imgui_stdlib.h" // For ImGui support of std::string +#ifdef SK_VULKAN +#include "spirv-tools/libspirv.hpp" +#endif + #if defined(SK_ENABLE_SKOTTIE) #include "tools/viewer/SkottieSlide.h" #endif +#if defined(SK_ENABLE_SKRIVE) + #include "tools/viewer/SkRiveSlide.h" +#endif class CapturingShaderErrorHandler : public GrContextOptions::ShaderErrorHandler { public: @@ -72,6 +79,8 @@ class CapturingShaderErrorHandler : public GrContextOptions::ShaderErrorHandler static CapturingShaderErrorHandler gShaderErrorHandler; +GrContextOptions::ShaderErrorHandler* Viewer::ShaderErrorHandler() { return &gShaderErrorHandler; } + using namespace sk_app; static std::map gPathRendererNames; @@ -135,10 +144,13 @@ static DEFINE_string2(match, m, nullptr, static DEFINE_string(skps, "/data/local/tmp/skps", "Directory to read skps from."); static DEFINE_string(lotties, "/data/local/tmp/lotties", "Directory to read (Bodymovin) jsons from."); + static DEFINE_string(rives, "/data/local/tmp/rives", + "Directory to read Rive (Flare) files from."); #else static DEFINE_string(jpgs, "jpgs", "Directory to read jpgs from."); static DEFINE_string(skps, "skps", "Directory to read skps from."); static DEFINE_string(lotties, "lotties", "Directory to read (Bodymovin) jsons from."); + static DEFINE_string(rives, "rives", "Directory to read Rive (Flare) files from."); #endif static DEFINE_string(svgs, "", "Directory to read SVGs from, or a single SVG file."); @@ -694,6 +706,12 @@ void Viewer::initSlides() { return sk_make_sp(name, path);} }, #endif + #if defined(SK_ENABLE_SKRIVE) + { ".flr", "skrive-dir", FLAGS_rives, + [](const SkString& name, const SkString& path) -> sk_sp { + return sk_make_sp(name, path);} + }, + #endif #if defined(SK_XML) { ".svg", "svg-dir", FLAGS_svgs, [](const SkString& name, const SkString& path) -> sk_sp { @@ -830,6 +848,10 @@ void Viewer::initSlides() { Viewer::~Viewer() { + for(auto& slide : fSlides) { + slide->gpuTeardown(); + } + fWindow->detach(); delete fWindow; } @@ -1161,9 +1183,14 @@ SkMatrix Viewer::computeMatrix() { void Viewer::setBackend(sk_app::Window::BackendType backendType) { fPersistentCache.reset(); - fCachedGLSL.reset(); + fCachedShaders.reset(); fBackendType = backendType; + // The active context is going away in 'detach' + for(auto& slide : fSlides) { + slide->gpuTeardown(); + } + fWindow->detach(); #if defined(SK_BUILD_FOR_WIN) @@ -1675,6 +1702,35 @@ static bool ImGui_DragQuad(SkPoint* pts) { return dc.fDragging; } +static SkSL::String build_sksl_highlight_shader() { + return SkSL::String("out half4 sk_FragColor;\n" + "void main() { sk_FragColor = half4(1, 0, 1, 0.5); }"); +} + +static SkSL::String build_metal_highlight_shader(const SkSL::String& inShader) { + // Metal fragment shaders need a lot of non-trivial boilerplate that we don't want to recompute + // here. So keep all shader code, but right before `return *_out;`, swap out the sk_FragColor. + size_t pos = inShader.rfind("return *_out;\n"); + if (pos == std::string::npos) { + return inShader; + } + + SkSL::String replacementShader = inShader; + replacementShader.insert(pos, "_out->sk_FragColor = float4(1.0, 0.0, 1.0, 0.5); "); + return replacementShader; +} + +static SkSL::String build_glsl_highlight_shader(const GrShaderCaps& shaderCaps) { + const char* versionDecl = shaderCaps.versionDeclString(); + SkSL::String highlight = versionDecl ? versionDecl : ""; + if (shaderCaps.usesPrecisionModifiers()) { + highlight.append("precision mediump float;\n"); + } + highlight.appendf("out vec4 sk_FragColor;\n" + "void main() { sk_FragColor = vec4(1, 0, 1, 0.5); }"); + return highlight; +} + void Viewer::drawImGui() { // Support drawing the ImGui demo window. Superfluous, but gives a good idea of what's possible if (fShowImGuiTestWindow) { @@ -2179,30 +2235,22 @@ void Viewer::drawImGui() { } } - bool backendIsGL = Window::kNativeGL_BackendType == fBackendType -#if SK_ANGLE && defined(SK_BUILD_FOR_WIN) - || Window::kANGLE_BackendType == fBackendType + if (ImGui::CollapsingHeader("Shaders")) { + bool sksl = params.fGrContextOptions.fShaderCacheStrategy == + GrContextOptions::ShaderCacheStrategy::kSkSL; +#if defined(SK_VULKAN) + const bool isVulkan = fBackendType == sk_app::Window::kVulkan_BackendType; +#else + const bool isVulkan = false; #endif - ; - - // HACK: If we get here when SKSL caching isn't enabled, and we're on a backend other - // than GL, we need to force it on. Just do that on the first frame after the backend - // switch, then resume normal operation. - if (!backendIsGL && - params.fGrContextOptions.fShaderCacheStrategy != - GrContextOptions::ShaderCacheStrategy::kSkSL) { - params.fGrContextOptions.fShaderCacheStrategy = - GrContextOptions::ShaderCacheStrategy::kSkSL; - paramsChanged = true; - fPersistentCache.reset(); - } else if (ImGui::CollapsingHeader("Shaders")) { - // To re-load shaders from the currently active programs, we flush all caches on one - // frame, then set a flag to poll the cache on the next frame. + + // To re-load shaders from the currently active programs, we flush all + // caches on one frame, then set a flag to poll the cache on the next frame. static bool gLoadPending = false; if (gLoadPending) { auto collectShaders = [this](sk_sp key, sk_sp data, int hitCount) { - CachedGLSL& entry(fCachedGLSL.push_back()); + CachedShader& entry(fCachedShaders.push_back()); entry.fKey = key; SkMD5 hash; hash.write(key->bytes(), key->size()); @@ -2211,37 +2259,47 @@ void Viewer::drawImGui() { entry.fKeyString.appendf("%02x", digest.data[i]); } - SkReader32 reader(data->data(), data->size()); + SkReadBuffer reader(data->data(), data->size()); entry.fShaderType = GrPersistentCacheUtils::GetType(&reader); GrPersistentCacheUtils::UnpackCachedShaders(&reader, entry.fShader, entry.fInputs, kGrShaderTypeCount); }; - fCachedGLSL.reset(); + fCachedShaders.reset(); fPersistentCache.foreach(collectShaders); gLoadPending = false; + +#if defined(SK_VULKAN) + if (isVulkan && !sksl) { + spvtools::SpirvTools tools(SPV_ENV_VULKAN_1_0); + for (auto& entry : fCachedShaders) { + for (int i = 0; i < kGrShaderTypeCount; ++i) { + const SkSL::String& spirv(entry.fShader[i]); + std::string disasm; + tools.Disassemble((const uint32_t*)spirv.c_str(), spirv.size() / 4, + &disasm); + entry.fShader[i].assign(disasm); + } + } + } +#endif } // Defer actually doing the load/save logic so that we can trigger a save when we // start or finish hovering on a tree node in the list below: bool doLoad = ImGui::Button("Load"); ImGui::SameLine(); - bool doSave = ImGui::Button("Save"); - if (backendIsGL) { - ImGui::SameLine(); - bool sksl = params.fGrContextOptions.fShaderCacheStrategy == - GrContextOptions::ShaderCacheStrategy::kSkSL; - if (ImGui::Checkbox("SkSL", &sksl)) { - params.fGrContextOptions.fShaderCacheStrategy = sksl - ? GrContextOptions::ShaderCacheStrategy::kSkSL - : GrContextOptions::ShaderCacheStrategy::kBackendSource; - paramsChanged = true; - doLoad = true; - fDeferredActions.push_back([=]() { fPersistentCache.reset(); }); - } + bool doSave = ImGui::Button("Save"); ImGui::SameLine(); + if (ImGui::Checkbox("SkSL", &sksl)) { + params.fGrContextOptions.fShaderCacheStrategy = + sksl ? GrContextOptions::ShaderCacheStrategy::kSkSL + : GrContextOptions::ShaderCacheStrategy::kBackendSource; + paramsChanged = true; + doLoad = true; + fDeferredActions.push_back([=]() { fPersistentCache.reset(); }); } ImGui::BeginChild("##ScrollingRegion"); - for (auto& entry : fCachedGLSL) { + for (auto& entry : fCachedShaders) { bool inTreeNode = ImGui::TreeNode(entry.fKeyString.c_str()); bool hovered = ImGui::IsItemHovered(); if (hovered != entry.fHovered) { @@ -2266,30 +2324,35 @@ void Viewer::drawImGui() { fWindow->getGrContext()->priv().getGpu()->resetShaderCacheForTesting(); gLoadPending = true; } + // We don't support updating SPIRV shaders. We could re-assemble them (with edits), + // but I'm not sure anyone wants to do that. + if (isVulkan && !sksl) { + doSave = false; + } if (doSave) { - // The hovered item (if any) gets a special shader to make it identifiable - auto shaderCaps = ctx->priv().caps()->shaderCaps(); - bool sksl = params.fGrContextOptions.fShaderCacheStrategy == - GrContextOptions::ShaderCacheStrategy::kSkSL; - - SkSL::String highlight; - if (!sksl) { - highlight = shaderCaps->versionDeclString(); - if (shaderCaps->usesPrecisionModifiers()) { - highlight.append("precision mediump float;\n"); - } - } - const char* f4Type = sksl ? "half4" : "vec4"; - highlight.appendf("out %s sk_FragColor;\n" - "void main() { sk_FragColor = %s(1, 0, 1, 0.5); }", - f4Type, f4Type); - fPersistentCache.reset(); fWindow->getGrContext()->priv().getGpu()->resetShaderCacheForTesting(); - for (auto& entry : fCachedGLSL) { + for (auto& entry : fCachedShaders) { SkSL::String backup = entry.fShader[kFragment_GrShaderType]; if (entry.fHovered) { - entry.fShader[kFragment_GrShaderType] = highlight; + // The hovered item (if any) gets a special shader to make it + // identifiable. + SkSL::String& fragShader = entry.fShader[kFragment_GrShaderType]; + switch (entry.fShaderType) { + case SkSetFourByteTag('S', 'K', 'S', 'L'): { + fragShader = build_sksl_highlight_shader(); + break; + } + case SkSetFourByteTag('G', 'L', 'S', 'L'): { + fragShader = build_glsl_highlight_shader( + *ctx->priv().caps()->shaderCaps()); + break; + } + case SkSetFourByteTag('M', 'S', 'L', ' '): { + fragShader = build_metal_highlight_shader(fragShader); + break; + } + } } auto data = GrPersistentCacheUtils::PackCachedShaders(entry.fShaderType, @@ -2531,6 +2594,9 @@ void Viewer::onUIStateChanged(const SkString& stateName, const SkString& stateVa if (stateValue.equals(kBackendTypeStrings[i])) { if (fBackendType != i) { fBackendType = (sk_app::Window::BackendType)i; + for(auto& slide : fSlides) { + slide->gpuTeardown(); + } fWindow->detach(); fWindow->attach(backend_type_for_window(fBackendType)); } diff --git a/tools/viewer/Viewer.h b/tools/viewer/Viewer.h index 41c478e7bcbe9..47913ae660df6 100644 --- a/tools/viewer/Viewer.h +++ b/tools/viewer/Viewer.h @@ -11,6 +11,7 @@ #include "gm/gm.h" #include "include/core/SkExecutor.h" #include "include/core/SkFont.h" +#include "include/gpu/GrContextOptions.h" #include "src/core/SkScan.h" #include "src/sksl/SkSLString.h" #include "src/sksl/ir/SkSLProgram.h" @@ -45,6 +46,8 @@ class Viewer : public sk_app::Application, sk_app::Window::Layer { bool onPinch(skui::InputState state, float scale, float x, float y) override; bool onFling(skui::InputState state) override; + static GrContextOptions::ShaderErrorHandler* ShaderErrorHandler(); + struct SkFontFields { bool fTypeface = false; bool fSize = false; @@ -193,7 +196,7 @@ class Viewer : public sk_app::Application, sk_app::Window::Layer { SkFontFields fFontOverrides; bool fPixelGeometryOverrides = false; - struct CachedGLSL { + struct CachedShader { bool fHovered = false; sk_sp fKey; @@ -205,7 +208,7 @@ class Viewer : public sk_app::Application, sk_app::Window::Layer { }; sk_gpu_test::MemoryCache fPersistentCache; - SkTArray fCachedGLSL; + SkTArray fCachedShaders; }; #endif diff --git a/tools/whitelist_typefaces.cpp b/tools/whitelist_typefaces.cpp deleted file mode 100644 index 546dd963f6739..0000000000000 --- a/tools/whitelist_typefaces.cpp +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "include/core/SkGraphics.h" - -extern bool CheckChecksums(); -extern bool GenerateChecksums(); - -int main(int argc, char** argv) { - if (argc == 2) { - SkAutoGraphics ag; // Enable use of SkRTConfig - if (!strcmp(argv[1], "--check")) { - return (int) !CheckChecksums(); - } - if (!strcmp(argv[1], "--generate")) { - if (!GenerateChecksums()) { - return 2; - } - return 0; - } - } - SkDebugf("Usage:\n %s [--check] [--generate]\n\n", argv[0]); - return 3; -}